001/* 002 * This file is part of the Jikes RVM project (http://jikesrvm.org). 003 * 004 * This file is licensed to You under the Eclipse Public License (EPL); 005 * You may not use this file except in compliance with the License. You 006 * may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/eclipse-1.0.php 009 * 010 * See the COPYRIGHT.txt file distributed with this work for information 011 * regarding copyright ownership. 012 */ 013package org.jikesrvm.compilers.common.assembler.ia32; 014 015import static org.jikesrvm.compilers.common.assembler.ia32.AssemblerConstants.*; 016import static org.jikesrvm.ia32.RegisterConstants.*; 017import static org.jikesrvm.util.Bits.*; 018 019import org.jikesrvm.VM; 020import org.jikesrvm.architecture.MachineRegister; 021import org.jikesrvm.runtime.Magic; 022import org.jikesrvm.compilers.baseline.ia32.BaselineCompilerImpl; 023import org.jikesrvm.compilers.common.CodeArray; 024import org.jikesrvm.compilers.common.assembler.ia32.Lister; 025import org.jikesrvm.compilers.common.assembler.ForwardReference; 026import org.jikesrvm.compilers.common.assembler.AbstractAssembler; 027import org.jikesrvm.ia32.OutOfLineMachineCode; 028import org.jikesrvm.ia32.RegisterConstants; 029import org.jikesrvm.ia32.RegisterConstants.IntelMachineRegister; 030import org.jikesrvm.objectmodel.JavaHeader; 031 032import org.vmmagic.pragma.*; 033import org.vmmagic.unboxed.*; 034 035/** 036 * <P> This class is the low-level assembler for Intel; it contains 037 * functionality for encoding specific instructions into an array of 038 * bytes. It consists of three parts: </P> 039 * <UL> 040 * <LI> Some support that handles common operations for generating 041 * any IA32 instruction, such as encoding the operands into the 042 * ModRM and SIB bytes 043 * <LI> Some hand-coded methods that emit instructions with 044 * distinctive formats or with special consistency requirements, 045 * such as FXCH or CMOV 046 * <LI> Machine-generated methods that emit instructions with 047 * relatively standard formats, such as binary accumulation 048 * instructions like ADD and SUB. 049 * </UL> 050 * <P> This assembler provides a direct interface to the IA32 ISA: it 051 * contains emit methods that generate specific IA32 opcodes, and each 052 * emit method specifies the addressing modes and operand sizes that 053 * it expects. Thus, it has an emit method that generates an ADD of a 054 * register-displacement operand and an immediate operand. It is the 055 * job of the client to determine the addressing modes, operand 056 * sizes and exact opcodes that it desires. </P> 057 * 058 * <P> This assembler does provide support for forward branches. It 059 * is permitted to specify a branch operand as an arbitrary label, and 060 * later to inform the assembler to which instruction this label 061 * refers. The assembler, when informed to what the label refers, 062 * will go back and generate the appropriate offsets for all branches 063 * that refer to the given label. The mechanism is implemented by the 064 * following methods and helper classes: </P> 065 * <UL> 066 * <LI> {@link #forwardRefs} 067 * <LI> {@link #resolveForwardReferences} 068 * <LI> {@link #patchUnconditionalBranch} 069 * <LI> {@link #patchConditionalBranch} 070 * <LI> {@link #emitJCC_Cond_Label} 071 * <LI> {@link #emitJMP_Label} 072 * <LI> {@link #emitCALL_Label} 073 * <LI> {@link ForwardReference} 074 * </UL> 075 * 076 * <P> There is also support for generating tableswitches. This 077 * consists providing support for storing tables of relative addresses 078 * that can be used to compute the target of a tableswitch. This 079 * support assumes a particular code sequence for tableswitches 080 * (followed by baseline and optimizing compilers). See {@link 081 * #emitOFFSET_Imm_ImmOrLabel} for details. </P> 082 * 083 * <P> The automatically-generated emit methods of this assembler 084 * exploit regularities in the IA32 binary encoding; for example, 085 * several instructions (ADD, ADC, SUB, AND, OR, XOR) can be 086 * classified as binary accumulators that share a common set of 087 * permitted addressing modes and binary encoding all the way down a 088 * special case for encoding operands EAX and an immediate. A shell 089 * script (genAssembler.sh in the Intel assembler source directory) 090 * exploits this by specifying a generic way of emitting a binary 091 * accumulation and then calling it for each specific opcode that fits 092 * that format. These generated methods are combined with the 093 * hand-coded ones (from Assembler.in, also in the assembler 094 * source directory) as part of the Jikes RVM build process. </P> 095 * 096 * <P> This assembler is shared by the baseline and optimizing 097 * compilers: it used directly by the baseline compiler, while the 098 * optimizing compiler has a class AssemblerOpt 099 * that is built on top of this one to match 100 * {@link org.jikesrvm.compilers.opt.ir.Instruction}s and 101 * {@link org.jikesrvm.compilers.opt.ir.Operator}s to the emit methods 102 * this assembler provides. The AssemblerOpt 103 * is entirely machine-generated, and this 104 * requires that the methods for encoding instructions use a stylized 105 * naming and signature convention that is designed to make the method 106 * signature computable from the opcode and the operand types. The 107 * naming convention is as follows: 108 * 109 * <PRE> 110 * final void emit<EM>opcode</EM>\(_<EM>operand code</EM>\)*[_<EM>size</EM>](\(<EM>operand arguments</EM>\)*) 111 * </PRE> 112 * 113 * where the following substitutions are made: 114 * <DL> 115 * <DT><EM>opcode</EM></DT> 116 * <DD>is the opcode of the instruction (e.g. ADC, MOV, etc)</DD> 117 * 118 * <DT><EM>operand code</EM></DT> 119 * <DD> represents the type of the nth operand: 120 * <DL> 121 * <DT> "Imm" <DD> immediate operands 122 * <DT> "Reg" <DD> register operands 123 * <DT> "RegInd" <DD> register indirect operands 124 * <DT> "RegDisp" <DD> register displacement 125 * <DT> "RegOff" <DD> shifted index + displacement 126 * <DT> "RegIdx" <DD> register base + shifted index + displacement 127 * <DT> "Cond" <DD> condition codes 128 * </DL> 129 * 130 * <DT> <EM>size</EM> 131 * <DD> indicates non-word-sized operations 132 * <DL> 133 * <DT> "Byte" <DD> bytes 134 * <DT> "Word" <DD> Intel "words" (i.e. 16 bites) 135 * <DT> "Quad" <DD> quad words (i.e. double-precision floating point) 136 * </DL> 137 * 138 * <DT> <EM>operand arguments</EM> 139 * <DD> are the needed components of the operands, in order 140 * <DL> 141 * <DT> "Imm" 142 * <DD> 143 * <UL> 144 * <LI> immediate value (int) 145 * </UL> 146 * <DT> "Reg" 147 * <DD> 148 * <UL> 149 * <LI> register number (byte) 150 * </UL> 151 * <DT> "RegInd" 152 * <DD> 153 * <UL> 154 * <LI> register number (byte) 155 * </UL> 156 * <DT> "RegDisp" 157 * <DD> 158 * <UL> 159 * <LI> register number (byte) 160 * <LI> displacement (int) 161 * </UL> 162 * <DT> "RegOff" 163 * <DD> 164 * <UL> 165 * <LI> index register (byte) 166 * <LI> scale (short) 167 * <LI> displacement (int) 168 * </UL> 169 * <DT> "RegIdx" 170 * <DD> 171 * <UL> 172 * <LI> base register (byte) 173 * <LI> index register (byte) 174 * <LI> scale (short) 175 * <LI> displacement (int) 176 * </UL> 177 * <DT> "Cond" 178 * <DD> 179 * <UL> 180 * <LI> condition code mask (byte) 181 * </UL> 182 * </DL> 183 * </DL> 184 * 185 * @see "AssemblerOpt" 186 * @see Lister 187 * @see ForwardReference 188 * 189*/ 190public class Assembler extends AbstractAssembler { 191 192 /** 193 * The lister object is used to print generated machine code. 194 */ 195 protected final Lister lister; 196 197 /** 198 * The array holding the generated binary code. 199 */ 200 private byte [] machineCodes; 201 202 /** 203 * The current end of the generated machine code 204 */ 205 protected int mi; 206 207 /** 208 * Create an assembler with a given machine code buffer size that 209 * will not print the machine code as it generates it. 210 * The buffer size is merely a heuristic, because the assembler will 211 * expand its buffer if it becomes full. 212 * 213 * @param bytecodeSize initial machine code buffer size. 214 */ 215 public Assembler (int bytecodeSize) { 216 this(bytecodeSize, false); 217 } 218 219 /** 220 * Create an assembler with a given machine code buffer size and 221 * tell it whether or not to print machine code as it generates it. 222 * The buffer size is merely a heuristic, because the assembler will 223 * expand its buffer if it becomes full. 224 * 225 * @param bytecodeSize initial machine code buffer size. 226 * @param shouldPrint whether to dump generated machine code. 227 */ 228 public Assembler (int bytecodeSize, boolean shouldPrint) { 229 machineCodes = new byte[bytecodeSize*CODE_EXPANSION_FACTOR + CODE_OVERHEAD_TERM]; 230 lister = shouldPrint ? new Lister(this) : null; 231 } 232 233 /** 234 * Create an assembler with a given machine code buffer size and 235 * tell it whether or not to print machine code as it generates it. 236 * The buffer size is merely a heuristic, because the assembler will 237 * expand its buffer if it becomes full. 238 * 239 * @param bytecodeSize initial machine code buffer size. 240 * @param shouldPrint whether to dump generated machine code. 241 * @param comp BaselineCompilerImpl instance that this assembler is associated with; 242 * currently ignored on IA32. 243 */ 244 public Assembler (int bytecodeSize, boolean shouldPrint, BaselineCompilerImpl comp) { 245 this(bytecodeSize, shouldPrint); 246 } 247 248 /** 249 * Heuristic constant used to calculate initial size of the machine 250 * code buffer. This is an average of how many bytes of generated 251 * code come from a given bytecode in the baseline compiler. 252 */ 253 private static final int CODE_EXPANSION_FACTOR = 12; 254 255 /** 256 * Heuristic constant used to calculate initial size of the machine 257 * code buffer. This is an estimate of the fixed method overhead 258 * code generated by the baseline compiler, such as method 259 * prologue. 260 */ 261 private static final int CODE_OVERHEAD_TERM = 100; 262 263 /** 264 * Return the current offset in the generated code buffer of the 265 * end of the genertaed machine code. 266 * 267 * @return the end of the generated machine code. 268 */ 269 public final int getMachineCodeIndex () { 270 return mi; 271 } 272 273 /** 274 * Set the given byte offset in the machine code array to the 275 * given byte value. This is the low-level function by which the 276 * assembler produces binary code into its machine code buffer. 277 * This function will resize the underlying machine code array if 278 * the index given exceeds the array's length. 279 * 280 * @param index the byte offset into which to write 281 * @param data the byte data value to write 282 */ 283 @NoNullCheck 284 @NoBoundsCheck 285 protected final void setMachineCodes(int index, byte data) { 286 if(index < machineCodes.length) { 287 machineCodes[index] = data; 288 } else { 289 growMachineCodes(index, data); 290 } 291 } 292 293 @NoInline 294 private void growMachineCodes(int index, byte data) { 295 byte [] old = machineCodes; 296 machineCodes = new byte [2 * old.length ]; 297 System.arraycopy(old, 0, machineCodes, 0, old.length); 298 machineCodes[index] = data; 299 } 300 301 /** 302 * Should code created by this assembler instance be allocated in the 303 * hot code code space? By default the answer is false (ie, no). 304 * 305 * @return false 306 */ 307 protected boolean isHotCode() { return false; } 308 309 /** 310 * Return a copy of the generated code as a CodeArray. 311 * @return a copy of the generated code as a CodeArray. 312 */ 313 public final CodeArray getMachineCodes () { 314 int len = getMachineCodeIndex(); 315 CodeArray trimmed = CodeArray.Factory.create(len, false); 316 for (int i = 0; i < len; i++) { 317 trimmed.set(i, machineCodes[i]); 318 } 319 return trimmed; 320 } 321 322 /** 323 * Give the lister a message associated with a particular 324 * bytecode. This is used by the baseline assembler to print the 325 * bytecode associated with portions of machine code. (The 326 * optimizing compiler does not do this because its association 327 * between bytecodes and generated code is much less direct). 328 * 329 * @param bytecodeNumber the offset of the current bytecode in the 330 * current method's bytecode array. 331 * @param bc a message descriptive of the current bytecode. 332 */ 333 @Override 334 public final void noteBytecode (int bytecodeNumber, String bc) { 335 if (lister != null) lister.noteBytecode(bytecodeNumber, bc); 336 } 337 /** 338 * Inform the lister of a comment related to the currently 339 * generated machine code. 340 * 341 * @param comment a comment string 342 */ 343 public final void comment (String comment) { 344 if (lister != null) lister.comment(mi, comment); 345 } 346 347 /** 348 * Print the raw bits of the current instruction. It takes the 349 * start of the instruction as a parameter, and prints from that 350 * start to the current machine code index. 351 * 352 * @see #getMachineCodeIndex 353 * 354 * @param start the starting index of the last instruction. 355 */ 356 public final void writeLastInstruction(int start) { 357 for (int j=start; j<mi; j++) { 358 if (j < machineCodes.length) { 359 VM.sysWrite(Lister.hex(machineCodes[j])); 360 } else { 361 VM.sysWrite(Lister.hex((byte)0x0)); 362 } 363 } 364 } 365 366 /** 367 * In the representation of addressing modes in the ModRM and SIB 368 * bytes, the code for register-displacement for on ESP has a 369 * special meaning. Thus, when register-displacement mode using ESP 370 * is desired, this special SIB (scale-index-base) byte must be 371 * emitted. 372 */ 373 private static final byte SIBforESP = (byte) ((0<<6) + (4<<3) + ESP.value()); // (scale factor 1) no index, ESP is base 374 375 /** 376 * In the representation of addressing modes in the ModRM and SIB 377 * bytes, the code for register-displacement for on R12 has a 378 * special meaning. Thus, when register-displacement mode using R12 379 * is desired, this special SIB (scale-index-base) byte must be 380 * emitted. 381 */ 382 private static final byte SIBforR12 = VM.buildFor32Addr() ? 0 : 383 (byte) ((0<<6) + (4<<3) + (R12.value() & 0x7)); // (scale factor 1) no index, R12 is base 384 385 /** 386 * Generate a REX prefix if necessary 387 * 388 * @param W is a quad word override needed 389 * @param R_reg extension of the modrm field 390 * @param X_reg extension of the SIB index field 391 * @param B_reg extension of the modrm field, SIB base or opcode reg field 392 */ 393 @Inline 394 private void generateREXprefix(boolean W, IntelMachineRegister R_reg, IntelMachineRegister X_reg, IntelMachineRegister B_reg) { 395 boolean R = R_reg != null && R_reg.needsREXprefix(); 396 boolean X = X_reg != null && X_reg.needsREXprefix(); 397 boolean B = B_reg != null && B_reg.needsREXprefix(); 398 if (W || R || X || B) { 399 if (VM.VerifyAssertions) VM._assert(!VM.buildFor32Addr()); 400 byte prefixByte = (byte)(0x40 | (W ? 8 : 0) | (R ? 4 : 0) | (X ? 2 : 0) | (B ? 1 : 0)); 401 setMachineCodes(mi++, prefixByte); 402 } 403 } 404 405 /** 406 * Return a ModRM byte encoding a source and destination register 407 * (i.e. for a register-register instruction). 408 * 409 * @param reg1 the r/m register. 410 * @param reg2 the other register or extended opcode. 411 * @return the encoded ModRM byte. 412 */ 413 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 414 private byte regRegModRM(IntelMachineRegister reg1, IntelMachineRegister reg2) { 415 return (byte) ((3 << 6) | ((reg2.value() & 7) << 3) | (reg1.value() & 0x7)); 416 } 417 418 /** 419 * Return a ModRM byte encoding a source register-32-bit-displacement 420 * operand and a destination register. Note that the displacement 421 * is handled separately, and not encoded in the ModRM itself. 422 * 423 * @param reg1 the r/m register. 424 * @param reg2 the other register or extended opcode. 425 * @return the encoded ModRM byte. 426 */ 427 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 428 private byte regDisp32RegModRM(IntelMachineRegister reg1, IntelMachineRegister reg2) { 429 return (byte) ((2 << 6) | ((reg2.value() & 7)<< 3) | (reg1.value() & 7)); 430 } 431 432 /** 433 * Return a ModRM byte encoding a source register-8-bit-displacement 434 * operand and a destination register. Note that the displacement 435 * is handled separately, and not encoded in the ModRM itself. 436 * 437 * @param reg1 the r/m register. 438 * @param reg2 the other register or extended opcode. 439 * @return the encoded ModRM byte. 440 */ 441 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 442 private byte regDisp8RegModRM(IntelMachineRegister reg1, IntelMachineRegister reg2) { 443 return (byte) ((1 << 6) | ((reg2.value() & 7) << 3) | (reg1.value() & 7)); 444 } 445 446 /** 447 * Return a ModRM byte encoding a source register-indirect 448 * operand and a destination register. 449 * 450 * @param reg1 the r/m register. 451 * @param reg2 the other register or extended opcode. 452 * @return the encoded ModRM byte. 453 */ 454 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 455 private byte regIndirectRegModRM(IntelMachineRegister reg1, IntelMachineRegister reg2) { 456 return (byte) (((reg2.value() & 7) << 3) | (reg1.value() & 7)); 457 } 458 459 /** 460 * The more complex IA32 addressing modes require a 461 * scale-index-base (SIB) byte. This is used to encode addressing 462 * modes such as [ indexReg << scale + baseReg ]. This method 463 * encodes the SIB byte for a given base, index and scale. 464 * 465 * @param scale the shift amount for the index register value. 466 * @param baseReg the base register. 467 * @param indexReg the index register. 468 * @return the encoded SIB byte. 469 */ 470 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 471 private byte sib(short scale, IntelMachineRegister baseReg, IntelMachineRegister indexReg) { 472 return (byte) ((scale << 6) | ((indexReg.value() & 7) << 3) | (baseReg.value() & 7)); 473 } 474 475 /** 476 * Generate the appropriate bytes into the generated machine code 477 * to represent a register-register instruction. 478 * 479 * @param reg1 the r/m operand. 480 * @param reg2 the other register or extended opcode. 481 */ 482 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 483 private void emitRegRegOperands(IntelMachineRegister reg1, IntelMachineRegister reg2) { 484 setMachineCodes(mi++, regRegModRM(reg1, reg2)); 485 } 486 487 /** 488 * Generate the appropriate bytes into the generated machine code 489 * to represent a register-32-bit-displacement--register 490 * instruction. This method generates the appropriate ModRM, the SIB 491 * if needed for the ESP special case, and the little-endian encoded 492 * 32 bit displacement. 493 * 494 * @see #SIBforESP 495 * 496 * @param reg1 the r/m operand. 497 * @param disp the 32 bit displacement. 498 * @param reg2 the other register or extended opcode. 499 */ 500 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 501 private void emitRegDisp32RegOperands(IntelMachineRegister reg1, int disp, IntelMachineRegister reg2) { 502 setMachineCodes(mi++, regDisp32RegModRM(reg1, reg2)); 503 if (reg1 == ESP) setMachineCodes(mi++, SIBforESP); 504 if (reg1 == R12) setMachineCodes(mi++, SIBforR12); 505 emitImm32(disp); 506 } 507 508 /** 509 * Generate the appropriate bytes into the generated machine code 510 * to represent a register-8-bit-displacement--register 511 * instruction. This method generates the appropriate ModRM, the SIB 512 * if needed for the ESP special case, and the little-endian encoded 513 * 32 bit displacement. 514 * 515 * @see #SIBforESP 516 * 517 * @param reg1 the r/m operand. 518 * @param disp the 8 bit displacement. 519 * @param reg2 the other register or extended opcode. 520 */ 521 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 522 private void emitRegDisp8RegOperands(IntelMachineRegister reg1, byte disp, IntelMachineRegister reg2) { 523 setMachineCodes(mi++, regDisp8RegModRM(reg1, reg2)); 524 if (reg1 == ESP) setMachineCodes(mi++, SIBforESP); 525 if (reg1 == R12) setMachineCodes(mi++, SIBforR12); 526 emitImm8(disp); 527 } 528 529 /** 530 * Generate the appropriate bytes into the generated machine code 531 * to represent a register-displacement--register instruction. This 532 * method simply chooses the appropriate lower-level method based on 533 * displacement size 534 * 535 * @see #emitRegDisp32RegOperands 536 * @see #emitRegDisp8RegOperands 537 * 538 * @param reg1 the r/m operand. 539 * @param disp the displacement. 540 * @param reg2 the other register or extended opcode. 541 */ 542 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 543 private void emitRegDispRegOperands(IntelMachineRegister reg1, Offset disp, IntelMachineRegister reg2) { 544 if (reg1 == GPR.EIP) { 545 setMachineCodes(mi++, regIndirectRegModRM(EBP, reg2)); // EBP == RIP addressing mode 546 emitImm32(disp); 547 } else if (fits(disp,8)) { 548 emitRegDisp8RegOperands(reg1, (byte)disp.toInt(), reg2); 549 } else { 550 if (VM.VerifyAssertions) VM._assert(fits(disp,32)); 551 emitRegDisp32RegOperands(reg1, disp.toInt(), reg2); 552 } 553 } 554 555 /** 556 * Generate the appropriate bytes into the generated machine code 557 * to express a register-indirect--register instruction. This 558 * method handles low-level encoding issues, specifically the 559 * special cases for register indirect mode on ESP and EBP. Using 560 * ESP requires an SIB byte, and EBP cannot be used in indirect mode 561 * at all (that encoding is used to express scaled-index-displacement 562 * mode) so this method uses register-displacement with a 0 563 * displacement to fake it. 564 * 565 * @see #emitRegDispRegOperands 566 * 567 * @param reg1 the r/m operand 568 * @param reg2 the other register or extended opcode 569 */ 570 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 571 private void emitRegIndirectRegOperands(IntelMachineRegister reg1, IntelMachineRegister reg2) { 572 if (reg1 == EBP) { 573 emitRegDispRegOperands(reg1, Offset.zero(), reg2); 574 } else if (reg1 == R13) { 575 emitRegDispRegOperands(reg1, Offset.zero(), reg2); 576 } else { 577 setMachineCodes(mi++, regIndirectRegModRM(reg1, reg2)); 578 if (reg1 == ESP) setMachineCodes(mi++, SIBforESP); 579 if (reg1 == R12) setMachineCodes(mi++, SIBforR12); 580 } 581 } 582 583 /** 584 * Generate the appropriate bytes into the generated code to denote 585 * a scaled-register+displacement--register instruction. This 586 * expresses the case where the SIB byte is used, but no base 587 * register is desired. This method handles the somewhat convoluted 588 * special case used to express this mode (the r/m register is 4/ESP and 589 * the base register must be 5/EBP). 590 * 591 * @param index the index register for the r/m operand 592 * @param scale the amount to shift the index register 593 * @param disp the displacement for the r/m operand 594 * @param reg2 the other operand or the extended opcode 595 */ 596 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 597 private void emitRegOffRegOperands(IntelMachineRegister index, short scale, Offset disp, IntelMachineRegister reg2) { 598 setMachineCodes(mi++, regIndirectRegModRM(ESP, reg2)); 599 setMachineCodes(mi++, sib(scale, EBP, index)); 600 emitImm32(disp); 601 } 602 603 /** 604 * Generate the appropriate bytes into the generated code to denote 605 * an absolute-address--register instruction. 606 * 607 * @param disp the displacement for the r/m operand 608 * @param reg2 the other operand or the extended opcode 609 */ 610 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 611 private void emitAbsRegOperands(Address disp, IntelMachineRegister reg2) { 612 if (VM.buildFor32Addr()) { 613 setMachineCodes(mi++, regIndirectRegModRM(EBP, reg2)); // EBP == No displacement 614 } else { 615 setMachineCodes(mi++, regIndirectRegModRM(ESP, reg2)); // ESP == SIB byte 616 setMachineCodes(mi++, sib((short)0, EBP, ESP)); // EBP+ESP<<0 == no SIB 617 } 618 emitImm32(disp); 619 } 620 621 /** 622 * Generate the full glory of scaled-index-base-displacement 623 * addressing to the generated machine code. This method handles 624 * various special cases, mostly choosing the smallest displacement 625 * possible. 626 * 627 * @param base the base register for the r/m operand 628 * @param index the index register for the r/m operand 629 * @param scale the amount to shift the index register 630 * @param disp the displacement for the r/m operand 631 * @param reg2 the other operand or the extended opcode 632 */ 633 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 634 private void emitSIBRegOperands(IntelMachineRegister base, IntelMachineRegister index, short scale, Offset disp, IntelMachineRegister reg2) { 635 if (VM.VerifyAssertions) VM._assert(index != ESP); 636 if (VM.VerifyAssertions) VM._assert(index != R12); 637 if (disp.EQ(Offset.zero()) && base != EBP && base != R13) { 638 setMachineCodes(mi++, regIndirectRegModRM(ESP, reg2)); 639 setMachineCodes(mi++, sib(scale, base, index)); 640 } else if (fits(disp,8)) { 641 setMachineCodes(mi++, regDisp8RegModRM(ESP, reg2)); 642 setMachineCodes(mi++, sib(scale, base, index)); 643 emitImm8((byte)disp.toInt()); 644 } else { 645 setMachineCodes(mi++, regDisp32RegModRM(ESP, reg2)); 646 setMachineCodes(mi++, sib(scale, base, index)); 647 emitImm32(disp); 648 } 649 } 650 651 /** 652 * Generate the smallest-byte-first IA32 encoding of 32 bit 653 * immediates into the generated code. 654 * 655 * @param disp the displacement to generate. 656 */ 657 @Inline 658 private void emitImm32(Offset disp) { 659 emitImm32(disp.toWord()); 660 } 661 662 /** 663 * Generate the smallest-byte-first IA32 encoding of 32 bit 664 * immediates into the generated code. 665 * 666 * @param disp the displacement to generate. 667 */ 668 @Inline 669 private void emitImm32(Address disp) { 670 emitImm32(disp.toWord()); 671 } 672 673 /** 674 * Generate the smallest-byte-first IA32 encoding of 32 bit 675 * immediates into the generated code. 676 * 677 * @param disp the displacement to generate. 678 */ 679 @Inline 680 private void emitImm32(Word disp) { 681 if (VM.VerifyAssertions) VM._assert(fits(disp,32)); 682 mi = emitImm32(disp.toInt(), mi); 683 } 684 685 /** 686 * Generate the smallest-byte-first IA32 encoding of 32 bit 687 * immediates into the generated code. 688 * 689 * @param imm the immediate to generate. 690 */ 691 @Inline 692 private void emitImm32(int imm) { 693 mi = emitImm32(imm, mi); 694 } 695 696 /** 697 * Generate the smallest-byte first x86_64 encoding of the 64 bit 698 * immeditate into the generated code. 699 * 700 * @param imm the immediate the generate; 701 */ 702 @Inline 703 private void emitImm64(long imm) { 704 mi = emitImm64(imm, mi); 705 } 706 707 /** 708 * Generate the IA32 encoding of an 16 bit immediate into the 709 * generated code. 710 * 711 * @param imm the immediate to generate. 712 */ 713 @Inline 714 private void emitImm16(int imm) { 715 mi = emitImm16(imm, mi); 716 } 717 718 /** 719 * Generate the IA32 encoding of an 8 bit immediate into the 720 * generated code. 721 * 722 * @param imm the immediate to generate. 723 */ 724 @Inline 725 private void emitImm8(int imm) { 726 mi = emitImm8(imm, mi); 727 } 728 729 /** 730 * Generate the smallest-byte-first IA32 encoding of 16 bit 731 * immediates into the generated code at the location specified. 732 * 733 * @param imm the immediate to generate. 734 * @param idx the location in the generated code to write. 735 * @return next machine code index to write to 736 */ 737 @Inline 738 private int emitImm16(int imm, int idx) { 739 setMachineCodes(idx++, (byte) ((imm >> 0) & 0xFF)); 740 setMachineCodes(idx++, (byte) ((imm >> 8) & 0xFF)); 741 return idx; 742 } 743 744 /** 745 * Generate the smallest-byte-first IA32 encoding of 32 bit 746 * immediate into the generated code at the location specified. 747 * 748 * @param imm the immediate to generate. 749 * @param idx the location in the generated code to write. 750 * @return next machine code index to write to 751 */ 752 @Inline 753 private int emitImm32(int imm, int idx) { 754 setMachineCodes(idx++, (byte) ((imm >> 0) & 0xFF)); 755 setMachineCodes(idx++, (byte) ((imm >> 8) & 0xFF)); 756 setMachineCodes(idx++, (byte) ((imm >> 16) & 0xFF)); 757 setMachineCodes(idx++, (byte) ((imm >> 24) & 0xFF)); 758 return idx; 759 } 760 761 /** 762 * Generate the smallest-byte first x86_64 encoding of the 64 bit 763 * immeditate into the generated code at the location specified. 764 * 765 * @param imm the immediate the generate; 766 * @param idx the location in the generated code to write. 767 * @return next machine code index to write to 768 */ 769 private int emitImm64(long imm, int idx) { 770 setMachineCodes(idx++, (byte) ((imm >> 0) & 0xFF)); 771 setMachineCodes(idx++, (byte) ((imm >> 8) & 0xFF)); 772 setMachineCodes(idx++, (byte) ((imm >> 16) & 0xFF)); 773 setMachineCodes(idx++, (byte) ((imm >> 24) & 0xFF)); 774 setMachineCodes(idx++, (byte) ((imm >> 32) & 0xFF)); 775 setMachineCodes(idx++, (byte) ((imm >> 40) & 0xFF)); 776 setMachineCodes(idx++, (byte) ((imm >> 48) & 0xFF)); 777 setMachineCodes(idx++, (byte) ((imm >> 56) & 0xFF)); 778 return idx; 779 } 780 781 /** 782 * Generate the IA32 encoding of an 8 bit immediate into the 783 * generated code at the location specified. 784 * 785 * @param imm the immediate to generate. 786 * @param idx the location in the generated code to write. 787 * @return next machine code index to write to 788 */ 789 @Inline 790 private int emitImm8(int imm, int idx) { 791 setMachineCodes(idx++, (byte) imm); 792 return idx; 793 } 794 795 /** 796 * Generate a conditional opcode given the base opcode and the 797 * condition code desired. The CMOVcc, SETcc and Jcc families of 798 * instructions all have opcodes defined as a base opcode plus some 799 * bits representing the condition code. (of course, FCMOV does not 800 * this, since that would be too logical). 801 * 802 * @param opCode the base opcode to emit 803 * @param cond the condition code desired 804 */ 805 @Inline 806 private void emitCondOpByte(byte opCode, byte cond) { 807 setMachineCodes(mi++, (byte) (opCode | cond)); 808 } 809 810 /** 811 * Generate a locking prefix word into the generated code. Locking 812 * operations on IA32 are expressed by writing a locking byte before 813 * the instruction. 814 */ 815 @Inline 816 public final void emitLockNextInstruction() { 817 setMachineCodes(mi++, (byte) 0xF0); 818 if (lister != null) lister.lockPrefix(); 819 } 820 821 /** 822 * Generate a branch likely prefix into the generated code. 823 */ 824 @Inline 825 public final void emitBranchLikelyNextInstruction() { 826 setMachineCodes(mi++, (byte) 0x3E); 827 if (lister != null) lister.branchLikelyPrefix(); 828 } 829 830 /** 831 * Generate a branch unlikely prefix into the generated code. 832 */ 833 @Inline 834 public final void emitBranchUnlikelyNextInstruction() { 835 setMachineCodes(mi++, (byte) 0x2E); 836 if (lister != null) lister.branchUnlikelyPrefix(); 837 } 838 839 /** 840 * Generate a patch point into the generated code. 841 * (1) force patch point to be 32 bit aligned by optionally 842 * generating a nop. 843 * (2) emit a short branch (2 byte) around 3 bytes of nop. 844 * (3) If the the code is later patched, we first patch the 3 845 * nop bytes to be the upper 24 bits of a long jump 846 * instruction, then update the 2 bytes of the patch 847 * point to be an unconditional jump with a 32 bit immediate. 848 */ 849 @Inline 850 public final void emitPatchPoint() { 851 emitNOP((4-mi-1) & 3); 852 ForwardReference r = forwardJMP(); 853 emitNOP(3); 854 r.resolve(this); 855 } 856 857 /** 858 * Apply a patch. 859 * We expect the following instruction stream: 860 * i1; JMP rel8; NOP; NOP; NOP; i2; 861 * where patchOffset is the index of the last NOP. 862 * We patch it to be 863 * i1; JMP rel32; i2; 864 * 865 * @param code the code array to patch 866 * @param patchOffset the offset of the last byte of the patch point 867 * @param rel32 the new immediate to use in the branch instruction 868 * the code patcher is going to lay down before patchOffset 869 */ 870 public static void patchCode(CodeArray code, int patchOffset, int rel32) { 871 byte p0 = (byte)0xE9; 872 byte p1 = (byte) (rel32 & 0x000000ff); 873 byte p2 = (byte)((rel32 & 0x0000ff00) >>> 8); 874 byte p3 = (byte)((rel32 & 0x00ff0000) >>> 16); 875 byte p4 = (byte)((rel32 & 0xff000000) >>> 24); 876 if ((patchOffset & 0x2) == 0x2) { 877 // (a) lay down p4,p3,p2 one byte at a time 878 // (b) pick up the two bytes before p0 and then 879 // lay down b2b1p0p1 as a word. 880 code.set(patchOffset--, p4); 881 code.set(patchOffset--, p3); 882 code.set(patchOffset--, p2); 883 patchOffset -= 2; // skip over p1, p0 884 byte b1 = (byte)code.get(patchOffset--); 885 byte b2 = (byte)code.get(patchOffset); 886 int patch = (((int)p1&0xff) << 24) | (((int)p0&0xff) << 16) | 887 (((int)b1&0xff) << 8) | ((int)b2&0xff); 888 Magic.setIntAtOffset(code, Offset.fromIntSignExtend(patchOffset), patch); 889 } else { 890 // (a) lay down p4 891 // (b) lay down p0p1p2p3 as a word 892 code.set(patchOffset--, p4); 893 patchOffset -= 3; // skip over p0p1p2p3 894 int patch = (((int)p3&0xff) << 24) | (((int)p2&0xff) << 16) | 895 (((int)p1&0xff) << 8) | ((int)p0&0xff); 896 Magic.setIntAtOffset(code, Offset.fromIntSignExtend(patchOffset), patch); 897 } 898 } 899 900 /** 901 * Returns the appropriate condition for the reverted 902 * sense of the branch (e.g. code for "not equal" if 903 * code for "equal" is passed in). 904 * 905 * @param cond a condition code 906 * @return code for reversed condition 907 */ 908 public final byte flipCode(byte cond) { 909 switch (cond) { 910 case EQ: return NE; 911 case NE: return EQ; 912 case LT: return GE; 913 case GT: return LE; 914 case LE: return GT; 915 case GE: return LT; 916 case LLT: return LGE; 917 case LGT: return LLE; 918 case LLE: return LGT; 919 case LGE: return LLT; 920 case PE: return PO; 921 case PO: return PE; 922 default: throw new InternalError("Unexpected condition code"); 923 } 924 } 925 926 /** 927 * Generate a forward JMP instruction into the generated code. 928 * This form is used when the compiler wants to hang onto the 929 * forward reference object and call resolve on it directly. These 930 * forward references are not handled by the mechanism in the 931 * assembler; the client is responsible for calling resolve on the 932 * reference when generating the target instruction. The baseline 933 * compiler uses this form for jumps within the machine code for a 934 * single bytecode. 935 * 936 * @return the forward reference for the compiler implementation 937 */ 938 public final ForwardReference forwardJMP () { 939 int miStart = mi; 940 ForwardReference r = new ForwardReference.ShortBranch(mi); 941 setMachineCodes(mi++, (byte) 0xEB); 942 mi += 1; // leave space for displacement 943 if (lister != null) lister.I(miStart, "JMP", 0); 944 return r; 945 } 946 947 /** 948 * Generate a forward Jcc instruction into the generated code. 949 * This form is used when the compiler wants to hang onto the 950 * forward reference object and call resolve on it directly. These 951 * forward references are not handled by the mechanism in the 952 * assembler; the client is responsible for calling resolve on the 953 * reference when generating the target instruction. The baseline 954 * compiler uses this form for jumps within the machine code for a 955 * single bytecode. 956 * 957 * @param cond the condition code on which to branch 958 * @return the forward reference for the compiler implementation 959 */ 960 public final ForwardReference forwardJcc (byte cond) { 961 int miStart = mi; 962 ForwardReference r = new ForwardReference.ShortBranch(mi); 963 setMachineCodes(mi++, (byte) (0x70 + cond)); 964 mi += 1; // leave space for displacement 965 if (lister != null) lister.I(miStart, "J" + CONDITION[cond], 0); 966 return r; 967 } 968 969 /** 970 * Generate a forward JECXZ instruction into the generated code. 971 * This form is used when the compiler wants to hang onto the 972 * forward reference object and call resolve on it directly. These 973 * forward references are not handled by the mechanism in the 974 * assembler; the client is responsible for calling resolve on the 975 * reference when generating the target instruction. The baseline 976 * compiler uses this form for jumps within the machine code for a 977 * single bytecode. 978 * 979 * @return the forward reference for the compiler implementation 980 */ 981 public final ForwardReference forwardJECXZ () { 982 int miStart = mi; 983 ForwardReference r = new ForwardReference.ShortBranch(mi); 984 setMachineCodes(mi++, (byte)0xE3); 985 mi += 1; // leave space for displacement 986 if (lister != null) lister.I(miStart, "JECXZ", 0); 987 return r; 988 } 989 990 /** 991 * <p> The set of outstanding forward references. This list is used by 992 * the assembler to keep track of all outstanding forward 993 * references. References are put on this list by the emit methods 994 * for JMP and Jcc when they find a branch that is going forward. 995 * Each reference must understand what instruction it is looking for 996 * and how to patch its source instruction. Then, when the client 997 * calls resolveForwardBranches, the assembler searches this list to 998 * find branches that match the instruction currently being 999 * generated, and calls the resolve method on each one that does. </p> 1000 * 1001 * <p> All forward branches have a label as the branch target; clients 1002 * can arbirarily associate labels and instructions, but must be 1003 * consistent in giving the chosen label as the target of branches 1004 * to an instruction and calling resolveForwardBranches with the 1005 * given label immediately before emitting the target instruction. 1006 * See the header comments of ForwardReference for more details. </p> 1007 */ 1008 protected ForwardReference forwardRefs; 1009 1010 /** 1011 * <p> Resolve all forward branches that have the given target, and 1012 * make them branch to the instruction currently being generated. 1013 * Clients of the assembler call this method immediately before they 1014 * emit the instruction intended to be the target of the given 1015 * label. </p> 1016 * 1017 * <p> All forward branches have a label as the branch target; clients 1018 * can arbirarily associate labels and instructions, but must be 1019 * consistent in giving the chosen label as the target of branches 1020 * to an instruction and calling resolveForwardBranches with the 1021 * given label immediately before emitting the target instruction. 1022 * See the header comments of ForwardReference for more details. </p> 1023 * 1024 * @param label the forward branch label to resolve 1025 */ 1026 public final void resolveForwardReferences (int label) { 1027 if (forwardRefs == null) return; // premature optimization 1028 forwardRefs = ForwardReference.resolveMatching(this, forwardRefs, label); 1029 } 1030 1031 /** 1032 * Set up a code sequence to push a return address. This involves pushing the 1033 * current instruction address, and setting up an ADD that gets resolved later. 1034 * 1035 * @param bReturn the return address that is to be loaded. 1036 */ 1037 public final void generateLoadReturnAddress(int bReturn) { 1038 /* Push the IP */ 1039 emitCALL_Imm(mi + 5); 1040 ForwardReference r = new ForwardReference.LoadReturnAddress(mi, bReturn); 1041 forwardRefs = ForwardReference.enqueue(forwardRefs, r); 1042 /* Fake MAX_INTEGER to ensure 32 bit immediate */ 1043 emitADD_RegInd_Imm(ESP, Integer.MAX_VALUE); 1044 } 1045 1046 /** 1047 * Patch the code sequence at sourceIndex to load the complete instruction address 1048 * of the current instruction. 1049 * 1050 * @param sourceIndex the machine code offset of the load return addres to patch. 1051 */ 1052 @Override 1053 public final void patchLoadReturnAddress(int sourceIndex) { 1054 /* We have the following pattern: 1055 * | PUSH EIP | [SP] += | IMM32 | 1056 * ^ ^ 1057 * sourceIndex +3 */ 1058 int ipDelta = mi - sourceIndex; 1059 emitImm32(ipDelta, sourceIndex + 3); 1060 } 1061 1062 /** 1063 * The following method will emit code that moves a reference to an 1064 * object's TIB into a destination register. 1065 * 1066 * @param dest the destination register 1067 * @param object the register holding the object reference 1068 */ 1069 @Interruptible 1070 public final void baselineEmitLoadTIB(MachineRegister dest, MachineRegister object) { 1071 Offset tibOffset = JavaHeader.getTibOffset(); 1072 if (VM.buildFor32Addr()) { 1073 emitMOV_Reg_RegDisp((GPR)dest, (GPR)object, tibOffset); 1074 } else { 1075 emitMOV_Reg_RegDisp_Quad((GPR)dest, (GPR)object, tibOffset); 1076 } 1077 } 1078 1079 /** 1080 * Generate a code sequence that will place the address of the start of the 1081 * method in destReg 1082 * 1083 * @param destReg register to hold address of start of method 1084 */ 1085 public final void emitMETHODSTART_Reg(GPR destReg) { 1086 if (VM.buildFor32Addr()) { 1087 Offset pcThunkOffset; 1088 pcThunkOffset = OutOfLineMachineCode.pcThunkInstructionsField[destReg.value()].getOffset(); 1089 emitCALL_Abs(Magic.getTocPointer().plus(pcThunkOffset)); 1090 emitADD_Reg_Imm(destReg, -mi); 1091 } else { 1092 emitLEA_Reg_RegDisp_Quad(destReg, GPR.EIP, Offset.fromIntZeroExtend(Integer.MAX_VALUE)); 1093 emitImm32(-mi, mi-4); 1094 } 1095 } 1096 1097 /** 1098 * Make a forward reference and emit a long JMP 1099 * @param btarget optional 1100 * @return a forward reference for patching later 1101 */ 1102 public final ForwardReference generatePendingJMP(int btarget) { 1103 int miStart = mi; 1104 ForwardReference r = new ForwardReference.UnconditionalBranch(mi, btarget); 1105 setMachineCodes(mi++, (byte) 0xE9); 1106 mi += 4; // leave space for displacement 1107 if (lister != null) lister.I(miStart, "JMP", 0); 1108 return r; 1109 } 1110 // END OSR SUPPORT // 1111 1112 /** 1113 * Make the given unconditional branch branch to the current 1114 * generated instruction. It is the client's responsibility to 1115 * ensure the given source index really does contain an 1116 * unconditional branch. 1117 * 1118 * @param sourceIndex the machine code offset of the unconditional 1119 * branch to patch. 1120 */ 1121 @Override 1122 public final void patchUnconditionalBranch (int sourceIndex) { 1123 if (VM.AlignmentChecking || isHotCode()) { 1124 // force 4byte alignment here 1125 emitNOP((4 - mi) & 3); 1126 } 1127 if (lister != null) lister.comefrom(mi, sourceIndex); 1128 int relOffset = mi - (sourceIndex+5); 1129 sourceIndex++; // skip the op code 1130 emitImm32(relOffset, sourceIndex); 1131 } 1132 1133 /** 1134 * Make the given conditional branch branch to the current 1135 * generated instruction. It is the client's responsibility to 1136 * ensure the given source index really does contain an 1137 * conditional branch. 1138 * 1139 * @param sourceIndex the machine code offset of the conditional 1140 * branch to patch. 1141 */ 1142 @Override 1143 public final void patchConditionalBranch (int sourceIndex) { 1144 if (VM.AlignmentChecking || isHotCode()) { 1145 // force 4byte alignment here 1146 emitNOP((4 - mi) & 3); 1147 } 1148 if (lister != null) lister.comefrom(mi, sourceIndex); 1149 int relOffset = mi - (sourceIndex+6); 1150 sourceIndex += 2; // skip the (two byte) op code 1151 emitImm32(relOffset, sourceIndex); 1152 } 1153 1154 /** 1155 * Make the given unconditional branch branch to the current 1156 * generated instruction. It is the client's responsibility to 1157 * ensure the given source index really does contain an 1158 * unconditional branch. This instruction requires that the branch 1159 * have been generated with an 8 bit offset. 1160 * 1161 * @param sourceIndex the machine code offset of the unconditional 1162 * branch to patch. 1163 */ 1164 public final void patchShortBranch (int sourceIndex) { 1165 if (VM.AlignmentChecking || isHotCode()) { 1166 // force 4byte alignment here 1167 emitNOP((4 - mi) & 3); 1168 } 1169 if (lister != null) lister.comefrom(mi, sourceIndex); 1170 int relOffset = mi - (sourceIndex+2); 1171 if (VM.VerifyAssertions) VM._assert(fits(relOffset, 8), "offset too large: "+relOffset); 1172 sourceIndex++; // skip the op code 1173 emitImm8((byte)relOffset, sourceIndex); 1174 } 1175 1176 ///////////////////////////////////// 1177 // JTOC utilities /////////////////// 1178 ///////////////////////////////////// 1179 1180 /** 1181 * Utility to push a value from the JTOC 1182 * @param off the offset from the JTOC 1183 */ 1184 public final void generateJTOCpush(Offset off) { 1185 if(JTOC_REGISTER == null) { 1186 emitPUSH_Abs(Magic.getTocPointer().plus(off)); 1187 } else { 1188 emitPUSH_RegDisp(JTOC_REGISTER, off); 1189 } 1190 } 1191 1192 /** 1193 * Utility to push a value from the JTOC 1194 * @param off the register containing the offset from the JTOC 1195 */ 1196 public final void generateJTOCpush(GPR off) { 1197 if(JTOC_REGISTER == null) { 1198 emitPUSH_RegDisp(off, Magic.getTocPointer().toWord().toOffset()); 1199 } else { 1200 emitPUSH_RegIdx(JTOC_REGISTER, off, AssemblerConstants.BYTE, Offset.zero()); 1201 } 1202 } 1203 1204 /** 1205 * Utility to pop a value to the JTOC 1206 * @param off the offset from the JTOC 1207 */ 1208 public final void generateJTOCpop(Offset off) { 1209 if(JTOC_REGISTER == null) { 1210 emitPOP_Abs(Magic.getTocPointer().plus(off)); 1211 } else { 1212 emitPOP_RegDisp(JTOC_REGISTER, off); 1213 } 1214 } 1215 1216 /** 1217 * Utility to pop a value to the JTOC 1218 * @param off the register containing the offset from the JTOC 1219 */ 1220 public final void generateJTOCpop(GPR off) { 1221 if(JTOC_REGISTER == null) { 1222 emitPOP_RegDisp(off,Magic.getTocPointer().toWord().toOffset()); 1223 } else { 1224 emitPOP_RegIdx(JTOC_REGISTER, off, AssemblerConstants.BYTE, Offset.zero()); 1225 } 1226 } 1227 1228 /** 1229 * Utility to call through a JTOC address 1230 * @param off the offset from the JTOC 1231 */ 1232 public final void generateJTOCcall(Offset off) { 1233 if(JTOC_REGISTER == null) { 1234 emitCALL_Abs(Magic.getTocPointer().plus(off)); 1235 } else { 1236 emitCALL_RegDisp(JTOC_REGISTER, off); 1237 } 1238 } 1239 1240 /** 1241 * Utility to call through a JTOC address with a displacement in a register 1242 * @param off the register containing the displacement 1243 */ 1244 public final void generateJTOCcall(GPR off) { 1245 if(JTOC_REGISTER == null) { 1246 emitCALL_RegDisp(off, Magic.getTocPointer().toWord().toOffset()); 1247 } else { 1248 emitCALL_RegIdx(JTOC_REGISTER, off, AssemblerConstants.BYTE, Offset.zero()); 1249 } 1250 } 1251 1252 /** 1253 * Utility to call through a JTOC address 1254 * @param off the offset from the JTOC 1255 */ 1256 public final void generateJTOCjmp(Offset off) { 1257 if(JTOC_REGISTER == null) { 1258 emitJMP_Abs(Magic.getTocPointer().plus(off)); 1259 } else { 1260 emitJMP_RegDisp(JTOC_REGISTER, off); 1261 } 1262 } 1263 1264 /** 1265 * Loads an int from the JTOC 1266 * @param dst the destination register for the loaded value 1267 * @param off the offset from the JTOC 1268 */ 1269 public final void generateJTOCloadInt(GPR dst, Offset off) { 1270 if(JTOC_REGISTER == null) { 1271 emitMOV_Reg_Abs(dst, Magic.getTocPointer().plus(off)); 1272 } else { 1273 emitMOV_Reg_RegDisp(dst, JTOC_REGISTER, off); 1274 } 1275 } 1276 1277 /** 1278 * Loads an int from the JTOC 1279 * @param dst the destination register for the loaded value 1280 * @param off the register containing the offset from the JTOC 1281 */ 1282 public final void generateJTOCloadInt(GPR dst, GPR off) { 1283 if(JTOC_REGISTER == null) { 1284 emitMOV_Reg_RegDisp(dst, off, Magic.getTocPointer().toWord().toOffset()); 1285 } else { 1286 emitMOV_Reg_RegIdx(dst, JTOC_REGISTER, off, AssemblerConstants.BYTE, Offset.zero()); 1287 } 1288 } 1289 1290 /** 1291 * Loads a long from the JTOC 1292 * @param dst the destination register for the loaded value 1293 * @param off the offset from the JTOC 1294 */ 1295 public final void generateJTOCloadLong(GPR dst, Offset off) { 1296 if(JTOC_REGISTER == null) { 1297 emitMOV_Reg_Abs_Quad(dst, Magic.getTocPointer().plus(off)); 1298 } else { 1299 emitMOV_Reg_RegDisp_Quad(dst, JTOC_REGISTER, off); 1300 } 1301 } 1302 1303 /** 1304 * Stores an int to the JTOC 1305 * @param off the offset from the JTOC 1306 * @param src the source register of the value 1307 */ 1308 public final void generateJTOCstoreInt(Offset off, GPR src) { 1309 if(JTOC_REGISTER == null) { 1310 emitMOV_Abs_Reg(Magic.getTocPointer().plus(off), src); 1311 } else { 1312 emitMOV_RegDisp_Reg(JTOC_REGISTER, off, src); 1313 } 1314 } 1315 1316 /** 1317 * Stores an int to the JTOC 1318 * @param src the source register of the value 1319 * @param off the register containing the offset from the JTOC 1320 */ 1321 public final void generateJTOCstoreInt(GPR off, GPR src) { 1322 if(JTOC_REGISTER == null) { 1323 emitMOV_RegDisp_Reg(off, Magic.getTocPointer().toWord().toOffset(), src); 1324 } else { 1325 emitMOV_RegIdx_Reg(JTOC_REGISTER, off, AssemblerConstants.BYTE, Offset.zero(), src); 1326 } 1327 } 1328 1329 /** 1330 * Stores a long to the JTOC 1331 * @param src the source register of the value 1332 * @param off the offset from the JTOC 1333 */ 1334 public final void generateJTOCstoreLong(Offset off, GPR src) { 1335 if(JTOC_REGISTER == null) { 1336 emitMOV_Abs_Reg_Quad(Magic.getTocPointer().plus(off), src); 1337 } else { 1338 emitMOV_RegDisp_Reg_Quad(JTOC_REGISTER, off, src); 1339 } 1340 } 1341 1342 /** 1343 * Compares a word in the JTOC with the given register 1344 * @param dst the register to compare with 1345 * @param off the offset from the JTOC 1346 */ 1347 public final void generateJTOCcmpWord(GPR dst, Offset off) { 1348 if(JTOC_REGISTER == null) { 1349 emitCMP_Reg_Abs(dst, Magic.getTocPointer().plus(off)); 1350 } else { 1351 emitCMP_Reg_RegDisp_Quad(dst, JTOC_REGISTER, off); 1352 } 1353 } 1354 1355 /** 1356 * Compares a float in the JTOC with the given register 1357 * @param dst the register to compare with 1358 * @param off the offset from the JTOC 1359 */ 1360 public final void generateJTOCcmpFloat(XMM dst, Offset off) { 1361 if(JTOC_REGISTER == null) { 1362 emitUCOMISS_Reg_Abs(dst, Magic.getTocPointer().plus(off)); 1363 } else { 1364 emitUCOMISS_Reg_RegDisp(dst, JTOC_REGISTER, off); 1365 } 1366 } 1367 1368 /** 1369 * Compares a double in the JTOC with the given register 1370 * @param dst the register to compare with 1371 * @param off the offset from the JTOC 1372 */ 1373 public final void generateJTOCcmpDouble(XMM dst, Offset off) { 1374 if(JTOC_REGISTER == null) { 1375 emitUCOMISD_Reg_Abs(dst, Magic.getTocPointer().plus(off)); 1376 } else { 1377 emitUCOMISD_Reg_RegDisp(dst, JTOC_REGISTER, off); 1378 } 1379 } 1380 1381 ///////////////////////////////////// 1382 // table switch support ///////////// 1383 ///////////////////////////////////// 1384 1385 /** 1386 * <p> An OFFSET instruction is not really an instruction; it is rather 1387 * an address (of an instruction) that is written into the binary 1388 * code. These are used to build a table of addresses for table 1389 * switches. The code for tableswitches first calculates the address of the 1390 * start of the method. Using this address a branch relative to the start 1391 * of the method is computed by loading the offset from the start of the 1392 * method for a particular switch case. The OFFSET instruction is encoding 1393 * one value in the table. </p> 1394 * 1395 * <p> This mechanism assumes code for emitting tableswitch looks as 1396 * follows; it is not very nice, but is improved on X86 64 with the addition 1397 * of RIP displacement addressing. The GNU tools generate something. 1398 * Note that default cases must be handled separately. </p> 1399 * 1400 * <PRE> 1401 * T0 = getPCThunk() or RIP less offset from start of method 1402 * T0 += [T0 + m<<2 + tableDisplacement] 1403 * JMP T0 1404 * tableDisplacement: 1405 * OFFSET 0 (case 0 target) 1406 * OFFSET 1 (case 1 target) 1407 * ... 1408 * OFFSET n (case n target) 1409 * </PRE> 1410 * 1411 * @see #patchSwitchCase 1412 * 1413 * @param c the table entry being emitted (i.e. the value of the 1414 * switch expression corresponding to this target) 1415 * @param mTarget the method-relative target offset 1416 * @param bTarget the label associated with the branch target instrucion 1417 */ 1418 public final void emitOFFSET_Imm_ImmOrLabel(int c, int mTarget, int bTarget) { 1419 int miStart = mi; 1420 if (0 < mTarget) { // resolved (backward) reference 1421 emitImm32(mTarget); 1422 if (lister != null) lister.I(miStart, "DATA", mTarget); 1423 } else { // unresolved forward reference 1424 ForwardReference r = new ForwardReference.SwitchCase(mi, bTarget); 1425 forwardRefs = ForwardReference.enqueue(forwardRefs, r); 1426 emitImm32(c); 1427 if (lister != null) lister.I(miStart, "DATA", c); 1428 } 1429 } 1430 1431 /** 1432 * Patch a tableswitch offset table entry at the given source 1433 * index. This method resolves the table entry at the given source 1434 * index to point to the current instruction plus an aligning NOP. 1435 * 1436 * @see #emitOFFSET_Imm_ImmOrLabel 1437 * 1438 * @param sourceIndex the location of the offset to patch 1439 */ 1440 public final void patchSwitchCase (int sourceIndex) { 1441 if (VM.AlignmentChecking || isHotCode()) { 1442 // force 4byte alignment here 1443 emitNOP((4 - mi) & 3); 1444 } 1445 if (lister != null) lister.comefrom(mi, sourceIndex); 1446 int c = 0; 1447 c |= (machineCodes[sourceIndex+0] & 0xFF) << 0; 1448 c |= (machineCodes[sourceIndex+1] & 0xFF) << 8; 1449 c |= (machineCodes[sourceIndex+2] & 0xFF) << 16; 1450 c |= (machineCodes[sourceIndex+3] & 0xFF) << 24; // c = case index 1451 emitImm32(mi, sourceIndex); // write mi to sourceIndex 1452 } 1453 1454 /** 1455 * Patch the instruction that will load the displacement to the offset table 1456 * from the start of the method assuming that the next code to be created is 1457 * the offset table. 1458 * 1459 * @param toPatchAddress the address of the instruction that performs the 1460 * displacement load 1461 */ 1462 public final void patchSwitchTableDisplacement(int toPatchAddress) { 1463 if (VM.buildFor32Addr()) { 1464 // the instruction to patch is an reg = [reg + idx<<scale + disp] 1465 emitImm32(mi, toPatchAddress+3); 1466 } else { 1467 // the instruction to patch is an reg = [reg + idx<<scale + disp] 1468 emitImm32(mi, toPatchAddress+3); 1469 } 1470 } 1471 1472 ///////////////////////////////////// 1473 // instructions (hand coded) // 1474 ///////////////////////////////////// 1475 1476 public final void emitMFENCE() { 1477 int miStart = mi; 1478 emitLockNextInstruction(); 1479 emitADD_RegInd_Imm(ESP, 0); 1480 /** 1481 * The above has the same semantics, but with better performance as a true MFENCE: 1482 * setMachineCodes(mi++,(byte) 0x0F); 1483 * setMachineCodes(mi++,(byte) 0xAE); 1484 * setMachineCodes(mi++,(byte) 0xF0); 1485 * if (lister != null) lister.OP(miStart, "MFENCE"); 1486 */ 1487 } 1488 1489 /** 1490 * Generate a bswap on a register. That is, 1491 * <PRE> 1492 * bswap reg 1493 * </PRE> 1494 * 1495 * @param reg register to operate upon 1496 */ 1497 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 1498 public final void emitBSWAP_Reg(GPR reg) { 1499 int miStart = mi; 1500 generateREXprefix(false, null, null, reg); 1501 setMachineCodes(mi++, (byte) 0x0F); 1502 setMachineCodes(mi++, (byte) (0xC8 | (reg.value() & 7))); 1503 if (lister != null) lister.R(miStart, "bswap", reg); 1504 } 1505 1506 /** 1507 * Generate a bswap on a quad register. That is, 1508 * <PRE> 1509 * bswap reg 1510 * </PRE> 1511 * 1512 * @param reg register to operate upon 1513 */ 1514 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 1515 public final void emitBSWAP_Reg_Quad(GPR reg) { 1516 int miStart = mi; 1517 generateREXprefix(true, null, null, reg); 1518 setMachineCodes(mi++, (byte) 0x0F); 1519 setMachineCodes(mi++, (byte) (0xC8 | (reg.value() & 7))); 1520 if (lister != null) lister.R(miStart, "bswap", reg); 1521 } 1522 1523 /** 1524 * Conditionally move the source to the destination, i.e. 1525 * <PRE> 1526 * if (cond) dst = src 1527 * </PRE> 1528 * 1529 * @param cond the condition to be tested 1530 * @param dst destination register 1531 * @param src source register 1532 */ 1533 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 1534 public final void emitCMOV_Cond_Reg_Reg(byte cond, GPR dst, GPR src) { 1535 int miStart = mi; 1536 generateREXprefix(false, dst, null, src); 1537 setMachineCodes(mi++, (byte) 0x0F); 1538 emitCondOpByte((byte)0x40, cond); 1539 emitRegRegOperands(src, dst); 1540 if (lister != null) lister.RR(miStart, "CMOV" + CONDITION[cond], dst, src); 1541 } 1542 1543 /** 1544 * Conditionally move the source to the destination, i.e. 1545 * <PRE> 1546 * if (cond) dst = [srcBase + disp] 1547 * </PRE> 1548 * 1549 * @param cond the condition to be tested 1550 * @param dst destination register 1551 * @param srcBase source base register 1552 * @param disp displacement 1553 */ 1554 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 1555 public final void emitCMOV_Cond_Reg_RegDisp(byte cond, GPR dst, GPR srcBase, Offset disp) { 1556 int miStart = mi; 1557 generateREXprefix(false, dst, null, srcBase); 1558 setMachineCodes(mi++, (byte) 0x0F); 1559 emitCondOpByte((byte)0x40, cond); 1560 emitRegDispRegOperands(srcBase, disp, dst); 1561 if (lister != null) lister.RRD(miStart, "CMOV" + CONDITION[cond], dst, srcBase, disp); 1562 } 1563 1564 /** 1565 * Conditionally move the source to the destination, i.e. 1566 * <PRE> 1567 * if (cond) dst = [srcBase] 1568 * </PRE> 1569 * 1570 * @param cond the condition to be tested 1571 * @param dst destination register 1572 * @param srcBase source base register 1573 */ 1574 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 1575 public final void emitCMOV_Cond_Reg_RegInd(byte cond, GPR dst, GPR srcBase) { 1576 int miStart = mi; 1577 generateREXprefix(false, dst, null, srcBase); 1578 setMachineCodes(mi++, (byte) 0x0F); 1579 emitCondOpByte((byte)0x40, cond); 1580 emitRegIndirectRegOperands(srcBase, dst); 1581 if (lister != null) lister.RRN(miStart, "CMOV" + CONDITION[cond], dst, srcBase); 1582 } 1583 1584 /** 1585 * Conditionally move the source to the destination, i.e. 1586 * <PRE> 1587 * if (cond) dst = [index2<<scale2 + disp2] 1588 * </PRE> 1589 * 1590 * @param cond the condition to be tested 1591 * @param dst destination register 1592 * @param index2 source index register 1593 * @param scale2 scale factor for index register 1594 * @param disp2 displacement 1595 */ 1596 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 1597 public final void emitCMOV_Cond_Reg_RegOff(byte cond, GPR dst, GPR index2, short scale2, Offset disp2) { 1598 int miStart = mi; 1599 generateREXprefix(false, dst, index2, null); 1600 setMachineCodes(mi++, (byte) 0x0F); 1601 emitCondOpByte((byte)0x40, cond); 1602 emitRegOffRegOperands(index2, scale2, disp2, dst); 1603 if (lister != null) lister.RRFD(miStart, "CMOV" + CONDITION[cond], dst, index2, scale2, disp2); 1604 } 1605 1606 /** 1607 * Conditionally move the source to the destination, i.e. 1608 * <PRE> 1609 * if (cond) dst = [absAddr] 1610 * </PRE> 1611 * 1612 * @param cond the condition to be tested 1613 * @param dst destination register 1614 * @param absAddr absolute memory address 1615 */ 1616 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 1617 public final void emitCMOV_Cond_Reg_Abs(byte cond, GPR dst, Address absAddr) { 1618 int miStart = mi; 1619 generateREXprefix(false, dst, null, null); 1620 setMachineCodes(mi++, (byte) 0x0F); 1621 emitCondOpByte((byte)0x40, cond); 1622 emitAbsRegOperands(absAddr, dst); 1623 if (lister != null) lister.RRA(miStart, "CMOV" + CONDITION[cond], dst, absAddr); 1624 } 1625 1626 /** 1627 * Conditionally move the source to the destination, i.e. 1628 * <PRE> 1629 * if (cond) dst = [base2 + index2<<scale2 + disp2] 1630 * </PRE> 1631 * 1632 * @param cond the condition to be tested 1633 * @param dst destination register 1634 * @param base2 source base register 1635 * @param index2 source index register 1636 * @param scale2 scale factor for index register 1637 * @param disp2 source displacement 1638 */ 1639 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3,4}) 1640 public final void emitCMOV_Cond_Reg_RegIdx(byte cond, GPR dst, GPR base2, GPR index2, short scale2, Offset disp2) { 1641 int miStart = mi; 1642 generateREXprefix(false, dst, index2, base2); 1643 setMachineCodes(mi++, (byte) 0x0F); 1644 emitCondOpByte((byte)0x40, cond); 1645 emitSIBRegOperands(base2, index2, scale2, disp2, dst); 1646 if (lister != null) lister.RRXD(miStart, "CMOV" + CONDITION[cond], dst, base2, index2, scale2, disp2); 1647 } 1648 1649 /** 1650 * Set destination to zero or one, if the given condition is false 1651 * or true, respectively. That is, 1652 * <PRE> 1653 * dst = (cond)? 1: 0 1654 * </PRE> 1655 * 1656 * @param cond the condition to be tested 1657 * @param dst the destination register 1658 */ 1659 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 1660 public final void emitSET_Cond_Reg_Byte(byte cond, GPR dst) { 1661 int miStart = mi; 1662 if (VM.VerifyAssertions) VM._assert(dst.isValidAs8bitRegister()); 1663 generateREXprefix(false, null, null, dst); 1664 setMachineCodes(mi++, (byte) 0x0F); 1665 emitCondOpByte((byte)0x90, cond); 1666 emitRegRegOperands(dst, EAX /* UNUSED */); 1667 if (lister != null) lister.R(miStart, "SET" + CONDITION[cond], dst); 1668 } 1669 1670 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 1671 public final void emitSET_Cond_RegDisp_Byte(byte cond, GPR dst, Offset disp) { 1672 int miStart = mi; 1673 generateREXprefix(false, null, null, dst); 1674 setMachineCodes(mi++, (byte) 0x0F); 1675 emitCondOpByte((byte)0x90, cond); 1676 emitRegDispRegOperands(dst, disp, EAX /* UNUSED */); 1677 if (lister != null) lister.RD(miStart, "SET" + CONDITION[cond], dst, disp); 1678 } 1679 1680 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 1681 public final void emitSET_Cond_RegInd_Byte(byte cond, GPR dst) { 1682 int miStart = mi; 1683 generateREXprefix(false, null, null, dst); 1684 setMachineCodes(mi++, (byte) 0x0F); 1685 emitCondOpByte((byte)0x90, cond); 1686 emitRegIndirectRegOperands(dst, EAX /* UNUSED */); 1687 if (lister != null) lister.RN(miStart, "SET" + CONDITION[cond], dst); 1688 } 1689 1690 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 1691 public final void emitSET_Cond_RegIdx_Byte(byte cond, GPR base, GPR index, short scale, Offset disp) { 1692 int miStart = mi; 1693 generateREXprefix(false, null, index, base); 1694 setMachineCodes(mi++, (byte) 0x0F); 1695 emitCondOpByte((byte)0x90, cond); 1696 emitSIBRegOperands(base, index, scale, disp, EAX /* UNUSED */); 1697 if (lister != null) lister.RXD(miStart, "SET" + CONDITION[cond], base, index, scale, disp); 1698 } 1699 1700 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 1701 public final void emitSET_Cond_RegOff_Byte(byte cond, GPR index, short scale, Offset disp) { 1702 int miStart = mi; 1703 generateREXprefix(false, null, index, null); 1704 setMachineCodes(mi++, (byte) 0x0F); 1705 emitCondOpByte((byte)0x90, cond); 1706 emitRegOffRegOperands(index, scale, disp, EAX /* UNUSED */); 1707 if (lister != null) lister.RFD(miStart, "SET" + CONDITION[cond], index, scale, disp); 1708 } 1709 1710 @Inline 1711 public final void emitSET_Cond_Abs_Byte(byte cond, Address disp) { 1712 int miStart = mi; 1713 generateREXprefix(false, null, null, null); 1714 setMachineCodes(mi++, (byte) 0x0F); 1715 emitCondOpByte((byte)0x90, cond); 1716 emitAbsRegOperands(disp, EAX /* UNUSED */); 1717 if (lister != null) lister.RA(miStart, "SET" + CONDITION[cond], disp); 1718 } 1719 1720 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1721 public final void emitIMUL2_Reg_Reg(GPR dstReg, GPR srcReg) { 1722 int miStart = mi; 1723 generateREXprefix(false, dstReg, null, srcReg); 1724 setMachineCodes(mi++, (byte) 0x0F); 1725 setMachineCodes(mi++, (byte) 0xAF); 1726 emitRegRegOperands(srcReg, dstReg); 1727 if (lister != null) lister.RR(miStart, "IMUL", dstReg, srcReg); 1728 } 1729 1730 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1731 public final void emitIMUL2_Reg_RegInd(GPR dstReg, GPR srcBase) { 1732 int miStart = mi; 1733 generateREXprefix(false, dstReg, null, srcBase); 1734 setMachineCodes(mi++, (byte) 0x0F); 1735 setMachineCodes(mi++, (byte) 0xAF); 1736 emitRegIndirectRegOperands(srcBase, dstReg); 1737 if (lister != null) lister.RRN(miStart, "IMUL", dstReg, srcBase); 1738 } 1739 1740 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1741 public final void emitIMUL2_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 1742 int miStart = mi; 1743 generateREXprefix(false, dstReg, null, srcBase); 1744 setMachineCodes(mi++, (byte) 0x0F); 1745 setMachineCodes(mi++, (byte) 0xAF); 1746 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 1747 if (lister != null) lister.RRD(miStart, "IMUL", dstReg, srcBase, srcDisp); 1748 } 1749 1750 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1751 public final void emitIMUL2_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 1752 int miStart = mi; 1753 generateREXprefix(false, dstReg, srcIndex, null); 1754 setMachineCodes(mi++, (byte) 0x0F); 1755 setMachineCodes(mi++, (byte) 0xAF); 1756 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 1757 if (lister != null) lister.RRFD(miStart, "IMUL", dstReg, srcIndex, srcScale, srcDisp); 1758 } 1759 1760 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 1761 public final void emitIMUL2_Reg_Abs(GPR dstReg, Address srcDisp) { 1762 int miStart = mi; 1763 generateREXprefix(false, dstReg, null, null); 1764 setMachineCodes(mi++, (byte) 0x0F); 1765 setMachineCodes(mi++, (byte) 0xAF); 1766 emitAbsRegOperands(srcDisp, dstReg); 1767 if (lister != null) lister.RRA(miStart, "IMUL", dstReg, srcDisp); 1768 } 1769 1770 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1771 public final void emitIMUL2_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 1772 int miStart = mi; 1773 generateREXprefix(false, dstReg, srcIndex, srcBase); 1774 setMachineCodes(mi++, (byte) 0x0F); 1775 setMachineCodes(mi++, (byte) 0xAF); 1776 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 1777 if (lister != null) lister.RRXD(miStart, "IMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp); 1778 } 1779 1780 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 1781 public final void emitIMUL2_Reg_Imm(GPR dstReg, int imm) { 1782 int miStart = mi; 1783 generateREXprefix(false, dstReg, null, dstReg); 1784 if (fits(imm,8)) { 1785 setMachineCodes(mi++, (byte) 0x6B); 1786 emitRegRegOperands(dstReg, dstReg); 1787 emitImm8((byte)imm); 1788 } else { 1789 setMachineCodes(mi++, (byte) 0x69); 1790 emitRegRegOperands(dstReg, dstReg); 1791 emitImm32(imm); 1792 } 1793 if (lister != null) lister.RI(miStart, "IMUL", dstReg, imm); 1794 } 1795 1796 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1797 public final void emitIMUL2_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 1798 int miStart = mi; 1799 generateREXprefix(true, dstReg, null, srcReg); 1800 setMachineCodes(mi++, (byte) 0x0F); 1801 setMachineCodes(mi++, (byte) 0xAF); 1802 emitRegRegOperands(srcReg, dstReg); 1803 if (lister != null) lister.RR(miStart, "IMUL", dstReg, srcReg); 1804 } 1805 1806 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1807 public final void emitIMUL2_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 1808 int miStart = mi; 1809 generateREXprefix(true, dstReg, null, srcBase); 1810 setMachineCodes(mi++, (byte) 0x0F); 1811 setMachineCodes(mi++, (byte) 0xAF); 1812 emitRegIndirectRegOperands(srcBase, dstReg); 1813 if (lister != null) lister.RRN(miStart, "IMUL", dstReg, srcBase); 1814 } 1815 1816 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1817 public final void emitIMUL2_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 1818 int miStart = mi; 1819 generateREXprefix(true, dstReg, null, srcBase); 1820 setMachineCodes(mi++, (byte) 0x0F); 1821 setMachineCodes(mi++, (byte) 0xAF); 1822 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 1823 if (lister != null) lister.RRD(miStart, "IMUL", dstReg, srcBase, srcDisp); 1824 } 1825 1826 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1827 public final void emitIMUL2_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 1828 int miStart = mi; 1829 generateREXprefix(true, dstReg, srcIndex, null); 1830 setMachineCodes(mi++, (byte) 0x0F); 1831 setMachineCodes(mi++, (byte) 0xAF); 1832 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 1833 if (lister != null) lister.RRFD(miStart, "IMUL", dstReg, srcIndex, srcScale, srcDisp); 1834 } 1835 1836 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 1837 public final void emitIMUL2_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 1838 int miStart = mi; 1839 generateREXprefix(true, dstReg, null, null); 1840 setMachineCodes(mi++, (byte) 0x0F); 1841 setMachineCodes(mi++, (byte) 0xAF); 1842 emitAbsRegOperands(srcDisp, dstReg); 1843 if (lister != null) lister.RRA(miStart, "IMUL", dstReg, srcDisp); 1844 } 1845 1846 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1847 public final void emitIMUL2_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 1848 int miStart = mi; 1849 generateREXprefix(true, dstReg, srcIndex, srcBase); 1850 setMachineCodes(mi++, (byte) 0x0F); 1851 setMachineCodes(mi++, (byte) 0xAF); 1852 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 1853 if (lister != null) lister.RRXD(miStart, "IMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp); 1854 } 1855 1856 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 1857 public final void emitIMUL2_Reg_Imm_Quad(GPR dstReg, int imm) { 1858 int miStart = mi; 1859 generateREXprefix(true, dstReg, null, dstReg); 1860 if (fits(imm,8)) { 1861 setMachineCodes(mi++, (byte) 0x6B); 1862 emitRegRegOperands(dstReg, dstReg); 1863 emitImm8((byte)imm); 1864 } else { 1865 setMachineCodes(mi++, (byte) 0x69); 1866 emitRegRegOperands(dstReg, dstReg); 1867 emitImm32(imm); 1868 } 1869 if (lister != null) lister.RI(miStart, "IMUL", dstReg, imm); 1870 } 1871 1872 // trap 1873 public final void emitINT_Imm (int v) { 1874 if (VM.VerifyAssertions) VM._assert(v <= 0xFF); 1875 int miStart = mi; 1876 if (v == 3) { // special case interrupt 1877 setMachineCodes(mi++, (byte) 0xCC); 1878 } else { 1879 setMachineCodes(mi++, (byte) 0xCD); 1880 setMachineCodes(mi++, (byte) v); 1881 } 1882 if (lister != null) lister.I(miStart, "INT", v); 1883 } 1884 1885 /** 1886 * Conditionally branch to the given target, i.e. 1887 * <PRE> 1888 * if (cond) then IP = (instruction @ label) 1889 * </PRE> 1890 * 1891 * This emit method is expecting only a forward branch (that is 1892 * what the Label operand means); it creates a ForwardReference 1893 * to the given label, and puts it into the assembler's list of 1894 * references to resolve. This emiiter knows it emits conditional 1895 * branches, so it uses ForwardReference.ConditionalBranch as the 1896 * forward reference type to create. 1897 * 1898 * All forward branches have a label as the branch target; clients 1899 * can arbirarily associate labels and instructions, but must be 1900 * consistent in giving the chosen label as the target of branches 1901 * to an instruction and calling resolveForwardBranches with the 1902 * given label immediately before emitting the target instruction. 1903 * See the header comments of ForwardReference for more details. 1904 * 1905 * @param cond the IA32 ISA condition code bits to mask into opcode 1906 * @param label the label associated with the branch target instrucion 1907 * 1908 * @see org.jikesrvm.compilers.common.assembler.ForwardReference.ConditionalBranch 1909 */ 1910 public final void emitJCC_Cond_Label (byte cond, int label) { 1911 int miStart = mi; 1912 ForwardReference r = new ForwardReference.ConditionalBranch(mi, label); 1913 forwardRefs = ForwardReference.enqueue(forwardRefs, r); 1914 setMachineCodes(mi++, (byte) 0x0F); 1915 setMachineCodes(mi++, (byte) (0x80 + cond)); 1916 mi += 4; // leave space for displacement TODO!! handle short branches 1917 if (lister != null) lister.I(miStart, "J" + CONDITION[cond], label); 1918 } 1919 1920 /** 1921 * Conditionally branch to the given target, i.e. 1922 * <PRE> 1923 * if (cond) then IP = mTarget 1924 * </PRE> 1925 * 1926 * This emit method emits only backward branches (that is what 1927 * branching to an Imm operand means), so it simply writes the 1928 * appropriate binary code without bothering with the forward 1929 * reference mechanism. 1930 * 1931 * @param cond the IA32 ISA condition code bits to mask into opcode 1932 * @param mTarget the method-relative target offset 1933 */ 1934 public final void emitJCC_Cond_Imm (byte cond, int mTarget) { 1935 int miStart = mi; 1936 int relOffset = mTarget - (mi + 1 + 1); // address relative to next instruction 1937 if (fits(relOffset, 8)) { 1938 emitCondOpByte((byte)0x70, cond); 1939 emitImm8((byte)relOffset); 1940 } else { 1941 setMachineCodes(mi++, (byte) 0x0F); 1942 emitCondOpByte((byte)0x80, cond); 1943 relOffset = mTarget - (mi + 4); // address relative to next instruction 1944 emitImm32(relOffset); 1945 } 1946 if (lister != null) lister.I(miStart, "J" + CONDITION[cond], relOffset); 1947 } 1948 1949 /** 1950 * Conditionally branch to the given target, i.e. 1951 * <PRE> 1952 * if (cond) then IP = mTarget -or- (instruction @ bTarget) 1953 * </PRE> 1954 * 1955 * This emit method represents a branch that could be either 1956 * forward or backward; it simply calls either the Label or Imm 1957 * emit method. 1958 * 1959 * @see #emitJCC_Cond_Label 1960 * @see #emitJCC_Cond_Imm 1961 * 1962 * @param cond the IA32 ISA condition code bits to mask into opcode 1963 * @param mTarget the method-relative target offset 1964 * @param bTarget the label associated with the branch target instrucion 1965 */ 1966 public final void emitJCC_Cond_ImmOrLabel (byte cond, int mTarget, int bTarget) { 1967 if (mTarget == 0) { // forward branch 1968 emitJCC_Cond_Label(cond, bTarget); 1969 } else { // backward branch 1970 emitJCC_Cond_Imm(cond, mTarget); 1971 } 1972 } 1973 1974 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1975 public final void emitLEA_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 1976 int miStart = mi; 1977 generateREXprefix(false, dstReg, null, srcBase); 1978 setMachineCodes(mi++, (byte) 0x8D); 1979 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 1980 if (lister != null) lister.RRD(miStart, "LEA", dstReg, srcBase, srcDisp); 1981 } 1982 1983 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1984 public final void emitLEA_Reg_RegInd(GPR dstReg, GPR srcBase) { 1985 int miStart = mi; 1986 generateREXprefix(false, dstReg, null, srcBase); 1987 setMachineCodes(mi++, (byte) 0x8D); 1988 emitRegIndirectRegOperands(srcBase, dstReg); 1989 if (lister != null) lister.RRN(miStart, "LEA", dstReg, srcBase); 1990 } 1991 1992 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 1993 public final void emitLEA_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 1994 int miStart = mi; 1995 generateREXprefix(false, dstReg, srcIndex, null); 1996 setMachineCodes(mi++, (byte) 0x8D); 1997 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 1998 if (lister != null) lister.RRFD(miStart, "LEA", dstReg, srcIndex, srcScale, srcDisp); 1999 } 2000 2001 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2002 public final void emitLEA_Reg_Abs(GPR dstReg, Address srcDisp) { 2003 int miStart = mi; 2004 generateREXprefix(false, dstReg, null, null); 2005 setMachineCodes(mi++, (byte) 0x8D); 2006 emitAbsRegOperands(srcDisp, dstReg); 2007 if (lister != null) lister.RRA(miStart, "LEA", dstReg, srcDisp); 2008 } 2009 2010 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2011 public final void emitLEA_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 2012 int miStart = mi; 2013 generateREXprefix(false, dstReg, srcIndex, srcBase); 2014 setMachineCodes(mi++, (byte) 0x8D); 2015 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 2016 if (lister != null) lister.RRXD(miStart, "LEA", dstReg, srcBase, srcIndex, srcScale, srcDisp); 2017 } 2018 2019 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2020 public final void emitLEA_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 2021 int miStart = mi; 2022 generateREXprefix(true, dstReg, null, srcBase); 2023 setMachineCodes(mi++, (byte) 0x8D); 2024 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 2025 if (lister != null) lister.RRD(miStart, "LEA", dstReg, srcBase, srcDisp); 2026 } 2027 2028 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2029 public final void emitLEA_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 2030 int miStart = mi; 2031 generateREXprefix(true, dstReg, null, srcBase); 2032 setMachineCodes(mi++, (byte) 0x8D); 2033 emitRegIndirectRegOperands(srcBase, dstReg); 2034 if (lister != null) lister.RRN(miStart, "LEA", dstReg, srcBase); 2035 } 2036 2037 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2038 public final void emitLEA_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 2039 int miStart = mi; 2040 generateREXprefix(true, dstReg, srcIndex, null); 2041 setMachineCodes(mi++, (byte) 0x8D); 2042 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 2043 if (lister != null) lister.RRFD(miStart, "LEA", dstReg, srcIndex, srcScale, srcDisp); 2044 } 2045 2046 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2047 public final void emitLEA_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 2048 int miStart = mi; 2049 generateREXprefix(true, dstReg, null, null); 2050 setMachineCodes(mi++, (byte) 0x8D); 2051 emitAbsRegOperands(srcDisp, dstReg); 2052 if (lister != null) lister.RRA(miStart, "LEA", dstReg, srcDisp); 2053 } 2054 2055 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2056 public final void emitLEA_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 2057 int miStart = mi; 2058 generateREXprefix(true, dstReg, srcIndex, srcBase); 2059 setMachineCodes(mi++, (byte) 0x8D); 2060 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 2061 if (lister != null) lister.RRXD(miStart, "LEA", dstReg, srcBase, srcIndex, srcScale, srcDisp); 2062 } 2063 2064 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2065 public final void emitMOV_Reg_Imm(GPR dstReg, int imm) { 2066 int miStart = mi; 2067 generateREXprefix(false, null, null, dstReg); 2068 setMachineCodes(mi++, (byte) (0xB8 | dstReg.value())); 2069 emitImm32(imm); 2070 if (lister != null) lister.RI(miStart, "MOV", dstReg, imm); 2071 } 2072 2073 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2074 public final void emitMOV_Reg_Imm_Quad(GPR dstReg, long imm) { 2075 int miStart = mi; 2076 if (imm > 0 && (imm >> 32 == 0)) { 2077 // Do shorter unsigned 32bit move immediate 2078 emitMOV_Reg_Imm(dstReg, (int)imm); 2079 } else { 2080 generateREXprefix(true, null, null, dstReg); 2081 if (fits(imm, 32)) { 2082 setMachineCodes(mi++, (byte) 0xC7); 2083 emitRegRegOperands(dstReg, GPR.getForOpcode(0)); 2084 emitImm32((int)imm); 2085 } else { 2086 setMachineCodes(mi++, (byte) (0xB8 | dstReg.value())); 2087 emitImm64(imm); 2088 } 2089 } 2090 if (lister != null) lister.RI(miStart, "MOV", dstReg, imm); 2091 } 2092 2093 /** pop address and goto it */ 2094 public final void emitRET () { 2095 int miStart = mi; 2096 setMachineCodes(mi++, (byte) 0xC3); 2097 if (lister != null) lister.OP(miStart, "RET"); 2098 } 2099 2100 /** pop address and goto it, pop parameterBytes additional bytes */ 2101 2102 /** 2103 * Emits a return statement that pops the return address and 2104 * a number of additional bytes. 2105 * 2106 * @param parameterBytes number of additional bytes to pop, must be 2107 * at least 0 2108 */ 2109 public final void emitRET_Imm (int parameterBytes) { 2110 int miStart = mi; 2111 if (parameterBytes == 0) { 2112 setMachineCodes(mi++, (byte) 0xC3); 2113 if (lister != null) lister.OP(miStart, "RET"); 2114 } else { 2115 setMachineCodes(mi++, (byte) 0xC2); 2116 emitImm16(parameterBytes); 2117 if (VM.VerifyAssertions) VM._assert ((parameterBytes & 0xffff0000) == 0); 2118 if (lister != null) lister.I(miStart, "RET", parameterBytes); 2119 } 2120 } 2121 2122 /** 2123 * Emits a enter statement that allocates a stack frame. 2124 * 2125 * @param frameSize size of frame in bytes 2126 */ 2127 public final void emitENTER_Imm (int frameSize) { 2128 int miStart = mi; 2129 setMachineCodes(mi++, (byte) 0xC8); 2130 emitImm16(frameSize); 2131 setMachineCodes(mi++, (byte) 0x0); 2132 if (lister != null) lister.I(miStart, "ENTER", frameSize); 2133 } 2134 2135 /** sign extends EAX into EDX */ 2136 public final void emitCDQ () { 2137 int miStart = mi; 2138 setMachineCodes(mi++, (byte)0x99); 2139 if (lister != null) lister.OP(miStart, "CDQ"); 2140 } 2141 2142 /** sign extends RAX into RDX */ 2143 public final void emitCDO () { 2144 int miStart = mi; 2145 generateREXprefix(true, null, null, null); 2146 setMachineCodes(mi++, (byte)0x99); 2147 if (lister != null) lister.OP(miStart, "CDO"); 2148 } 2149 2150 /** sign extends EAX into RDX */ 2151 public final void emitCDQE () { 2152 int miStart = mi; 2153 generateREXprefix(true, null, null, null); 2154 setMachineCodes(mi++, (byte)0x98); 2155 if (lister != null) lister.OP(miStart, "CDQE"); 2156 } 2157 2158 /** 2159 * Read time stamp into edx:eax, on Linux this appears to be unprivileged. 2160 * <pre> 2161 * edx:eax <- time stamp counter 2162 * </pre> 2163 */ 2164 public final void emitRDTSC() { 2165 int miStart = mi; 2166 setMachineCodes(mi++, (byte) 0x0F); 2167 setMachineCodes(mi++, (byte) 0x31); 2168 if (lister != null) lister.OP(miStart, "RDTSC"); 2169 } 2170 2171 /** 2172 * Emits an instruction that prefetches data into all cache-levels. 2173 * The data is supposed to be used only once. 2174 * 2175 * @param srcBase the source base register 2176 */ 2177 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2178 public final void emitPREFETCHNTA_Reg(GPR srcBase) { 2179 int miStart = mi; 2180 setMachineCodes(mi++, (byte) 0x0F); 2181 setMachineCodes(mi++,(byte) 0x18); 2182 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0)); 2183 if (lister != null) lister.R(miStart, "PREFETCHNTA", srcBase); 2184 } 2185 2186 /** Suggest to process that a a compare for a spin lock has just failed */ 2187 public final void emitPAUSE () { 2188 int miStart = mi; 2189 setMachineCodes(mi++, (byte) 0xF3); 2190 setMachineCodes(mi++,(byte) 0x90); 2191 if (lister != null) lister.OP(miStart, "PAUSE"); 2192 } 2193 2194 /** 2195 * <p>Compare EDX:EAX with the argument and exchange 8 bytes.</p> 2196 * 2197 * <PRE> 2198 * cmpxchg8b [disp] 2199 * </PRE> 2200 * 2201 * @param disp displacement for argument 2202 */ 2203 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2204 public final void emitCMPXCHG8B_Abs(Address disp) { 2205 int miStart = mi; 2206 generateREXprefix(false, null, null, null); 2207 setMachineCodes(mi++, (byte) 0x0F); 2208 setMachineCodes(mi++, (byte) 0xC7); 2209 emitAbsRegOperands(disp, GPR.getForOpcode(1)); 2210 if (lister != null) lister.RA(miStart, "CMPXCHG8B", disp); 2211 } 2212 2213 /** 2214 * <p>Compare EDX:EAX with the argument and exchange 8 bytes.</p> 2215 * 2216 * <PRE> 2217 * cmpxchg8b [dst + disp] 2218 * </PRE> 2219 * 2220 * @param base base register for argument 2221 * @param disp displacement for argument 2222 */ 2223 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2224 public final void emitCMPXCHG8B_RegDisp(GPR base, Offset disp) { 2225 int miStart = mi; 2226 generateREXprefix(false, null, null, base); 2227 setMachineCodes(mi++, (byte) 0x0F); 2228 setMachineCodes(mi++, (byte) 0xC7); 2229 emitRegDispRegOperands(base, disp, GPR.getForOpcode(1)); 2230 if (lister != null) lister.RD(miStart, "CMPXCHG8B" , base, disp); 2231 } 2232 2233 /** 2234 * <p>Compare EDX:EAX with the argument and exchange 8 bytes.</p> 2235 * 2236 * <PRE> 2237 * cmpxchg8b [dst] 2238 * </PRE> 2239 * 2240 * @param base base register for argument 2241 */ 2242 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2243 public final void emitCMPXCHG8B_RegInd(GPR base) { 2244 int miStart = mi; 2245 generateREXprefix(false, null, null, base); 2246 setMachineCodes(mi++, (byte) 0x0F); 2247 setMachineCodes(mi++, (byte) 0xC7); 2248 emitRegIndirectRegOperands(base, GPR.getForOpcode(1)); 2249 if (lister != null) lister.R(miStart, "CMPXCHG8B" , base); 2250 } 2251 2252 /** 2253 * <p>Compare EDX:EAX with the argument and exchange 8 bytes.</p> 2254 * 2255 * <PRE> 2256 * cmpxchg8b [index2<<scale2 + disp2] 2257 * </PRE> 2258 * 2259 * @param index2 index register for argument 2260 * @param scale2 scale for index register 2261 * @param disp2 displacement for argument 2262 */ 2263 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2264 public final void emitCMPXCHG8B_RegOff(GPR index2, short scale2, Offset disp2) { 2265 int miStart = mi; 2266 generateREXprefix(false, null, index2, null); 2267 setMachineCodes(mi++, (byte) 0x0F); 2268 setMachineCodes(mi++, (byte) 0xC7); 2269 emitRegOffRegOperands(index2, scale2, disp2, GPR.getForOpcode(1)); 2270 if (lister != null) lister.RFD(miStart, "CMPXCHG8B", index2, scale2, disp2); 2271 } 2272 2273 /** 2274 * <p>Compare EDX:EAX with the argument and exchange 8 bytes.</p> 2275 * 2276 * <PRE> 2277 * cmpxchg8b [base2 + index2<<scale2 + disp2] 2278 * </PRE> 2279 * 2280 * @param base2 base register for argument 2281 * @param index2 index register for argument 2282 * @param scale2 scale for index register 2283 * @param disp2 displacement for argument 2284 */ 2285 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2286 public final void emitCMPXCHG8B_RegIdx(GPR base2, GPR index2, short scale2, Offset disp2) { 2287 int miStart = mi; 2288 generateREXprefix(false, null, index2, base2); 2289 setMachineCodes(mi++, (byte) 0x0F); 2290 setMachineCodes(mi++, (byte) 0xC7); 2291 emitSIBRegOperands(base2, index2, scale2, disp2, GPR.getForOpcode(1)); 2292 if (lister != null) lister.RXD(miStart, "CMPXCHG8B", base2, index2, scale2, disp2); 2293 } 2294 2295 /** Store AH into Flags */ 2296 public final void emitSAHF () { 2297 int miStart = mi; 2298 setMachineCodes(mi++, (byte) 0x9E); 2299 if (lister != null) lister.OP(miStart, "SAHF"); 2300 } 2301 2302 /** 2303 * Generate a move sign extended from register. That is, 2304 * <PRE> 2305 * dstReg := (int) srcReg (sign extended) 2306 * </PRE> 2307 * 2308 * @param dstReg the destination register 2309 * @param srcReg the source register 2310 */ 2311 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2312 public final void emitMOVSXDQ_Reg_Reg(GPR dstReg, GPR srcReg) { 2313 int miStart = mi; 2314 generateREXprefix(true, dstReg, null, srcReg); 2315 setMachineCodes(mi++, (byte) 0x63); 2316 emitRegRegOperands(srcReg, dstReg); 2317 if (lister != null) lister.RR(miStart, "MOVSXDQ", dstReg, srcReg); 2318 } 2319 2320 /** 2321 * Generate a move sign extended from register displacement. That is, 2322 * <PRE> 2323 * dstReg := (int) [srcBase + srcDisp] (sign extended) 2324 * </PRE> 2325 * 2326 * @param dstReg the destination register 2327 * @param srcBase the source base register 2328 * @param srcDisp the source displacement 2329 */ 2330 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2331 public final void emitMOVSXDQ_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 2332 int miStart = mi; 2333 generateREXprefix(true, dstReg, null, srcBase); 2334 setMachineCodes(mi++, (byte) 0x63); 2335 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 2336 if (lister != null) lister.RRD(miStart, "MOVSXDQ", dstReg, srcBase, srcDisp); 2337 } 2338 2339 /** 2340 * Generate a move sign extended from register indirect. That is, 2341 * <PRE> 2342 * dstReg := (int) [srcBase] (sign extended) 2343 * </PRE> 2344 * 2345 * @param dstReg the destination register 2346 * @param srcBase the source base register 2347 */ 2348 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2349 public final void emitMOVSXDQ_Reg_RegInd(GPR dstReg, GPR srcBase) { 2350 int miStart = mi; 2351 generateREXprefix(true, dstReg, null, srcBase); 2352 setMachineCodes(mi++, (byte) 0x63); 2353 emitRegIndirectRegOperands(srcBase, dstReg); 2354 if (lister != null) lister.RRN(miStart, "MOVSXDQ", dstReg, srcBase); 2355 } 2356 2357 /** 2358 * Generate a move sign extended from register offset. That is, 2359 * <PRE> 2360 * dstReg := (int) [srcIndex<<srcScale + srcDisp] (sign extended) 2361 * </PRE> 2362 * 2363 * @param dstReg the destination register 2364 * @param srcIndex the source index register 2365 * @param srcScale the source scale of the index 2366 * @param srcDisp the source displacement 2367 */ 2368 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2369 public final void emitMOVSXDQ_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 2370 int miStart = mi; 2371 generateREXprefix(true, dstReg, srcIndex, null); 2372 setMachineCodes(mi++, (byte) 0x63); 2373 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 2374 if (lister != null) lister.RRFD(miStart, "MOVSXDQ", dstReg, srcIndex, srcScale, srcDisp); 2375 } 2376 2377 /** 2378 * Generate a move sign extended from an absolute address. That is, 2379 * <PRE> 2380 * dstReg := (int) [srcDisp] (sign extended) 2381 * </PRE> 2382 * 2383 * @param dstReg the destination register 2384 * @param srcDisp the source displacement 2385 */ 2386 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2387 public final void emitMOVSXDQ_Reg_Abs(GPR dstReg, Address srcDisp) { 2388 int miStart = mi; 2389 generateREXprefix(true, dstReg, null, null); 2390 setMachineCodes(mi++, (byte) 0x63); 2391 emitAbsRegOperands(srcDisp, dstReg); 2392 if (lister != null) lister.RRA(miStart, "MOVSXDQ", dstReg, srcDisp); 2393 } 2394 2395 /** 2396 * Generate a move sign extended by register indexed. That is, 2397 * <PRE> 2398 * dstReg := (int) [srcBase + srcIndex<<srcScale + srcDisp] (sign extended) 2399 * </PRE> 2400 * 2401 * @param dstReg the destination register 2402 * @param srcBase the source base register 2403 * @param srcIndex the source index register 2404 * @param srcScale the source scale of the index 2405 * @param srcDisp the source displacement 2406 */ 2407 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 2408 public final void emitMOVSXDQ_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 2409 int miStart = mi; 2410 generateREXprefix(true, dstReg, srcIndex, srcBase); 2411 setMachineCodes(mi++, (byte) 0x63); 2412 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 2413 if (lister != null) lister.RRXD(miStart, "MOVSXDQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 2414 } 2415 2416 /** 2417 * Emit NOP instruction 2418 * 2419 * @param length size of NOP instruction required 2420 */ 2421 public final void emitNOP (int length) { 2422 int miStart = mi; 2423 switch (length) { 2424 case 0: 2425 break; 2426 case 1: 2427 setMachineCodes(mi++, (byte) 0x90); 2428 break; 2429 case 2: 2430 setMachineCodes(mi++, (byte) 0x66); 2431 setMachineCodes(mi++, (byte) 0x90); 2432 break; 2433 case 3: 2434 setMachineCodes(mi++, (byte) 0x0F); 2435 setMachineCodes(mi++, (byte) 0x1F); 2436 setMachineCodes(mi++, (byte) 0x00); 2437 break; 2438 case 4: 2439 setMachineCodes(mi++, (byte) 0x0F); 2440 setMachineCodes(mi++, (byte) 0x1F); 2441 setMachineCodes(mi++, (byte) 0x40); 2442 setMachineCodes(mi++, (byte) 0x00); 2443 break; 2444 case 5: 2445 setMachineCodes(mi++, (byte) 0x0F); 2446 setMachineCodes(mi++, (byte) 0x1F); 2447 setMachineCodes(mi++, (byte) 0x44); 2448 setMachineCodes(mi++, (byte) 0x00); 2449 setMachineCodes(mi++, (byte) 0x00); 2450 break; 2451 case 6: 2452 setMachineCodes(mi++, (byte) 0x66); 2453 setMachineCodes(mi++, (byte) 0x0F); 2454 setMachineCodes(mi++, (byte) 0x1F); 2455 setMachineCodes(mi++, (byte) 0x44); 2456 setMachineCodes(mi++, (byte) 0x00); 2457 setMachineCodes(mi++, (byte) 0x00); 2458 break; 2459 case 7: 2460 setMachineCodes(mi++, (byte) 0x0F); 2461 setMachineCodes(mi++, (byte) 0x1F); 2462 setMachineCodes(mi++, (byte) 0x80); 2463 setMachineCodes(mi++, (byte) 0x00); 2464 setMachineCodes(mi++, (byte) 0x00); 2465 setMachineCodes(mi++, (byte) 0x00); 2466 setMachineCodes(mi++, (byte) 0x00); 2467 break; 2468 case 8: 2469 setMachineCodes(mi++, (byte) 0x0F); 2470 setMachineCodes(mi++, (byte) 0x1F); 2471 setMachineCodes(mi++, (byte) 0x84); 2472 setMachineCodes(mi++, (byte) 0x00); 2473 setMachineCodes(mi++, (byte) 0x00); 2474 setMachineCodes(mi++, (byte) 0x00); 2475 setMachineCodes(mi++, (byte) 0x00); 2476 setMachineCodes(mi++, (byte) 0x00); 2477 break; 2478 case 9: 2479 setMachineCodes(mi++, (byte) 0x66); 2480 setMachineCodes(mi++, (byte) 0x0F); 2481 setMachineCodes(mi++, (byte) 0x1F); 2482 setMachineCodes(mi++, (byte) 0x84); 2483 setMachineCodes(mi++, (byte) 0x00); 2484 setMachineCodes(mi++, (byte) 0x00); 2485 setMachineCodes(mi++, (byte) 0x00); 2486 setMachineCodes(mi++, (byte) 0x00); 2487 setMachineCodes(mi++, (byte) 0x00); 2488 break; 2489 default: 2490 throw new Error("Unexpected NOP length "+length); 2491 } 2492 if (lister != null) lister.OP(miStart, "NOP"); 2493 } 2494 2495 //////////////////////////////////////////// 2496 // hand-coded floating point instructions // 2497 //////////////////////////////////////////// 2498 2499 /** 2500 * Empty MMX technology state 2501 * <PRE> 2502 * emms 2503 * </PRE> 2504 */ 2505 public final void emitEMMS() { 2506 int miStart = mi; 2507 setMachineCodes(mi++, (byte) 0x0F); 2508 setMachineCodes(mi++, (byte) 0x77); 2509 if (lister != null) lister.OP(miStart, "EMMS"); 2510 } 2511 2512 /** */ 2513 /** 2514 * Emits a x87 floating point conditional move.<p> 2515 * 2516 * @param cond condition byte 2517 * @param dstReg destination register 2518 * @param srcReg source register 2519 * 2520 */ 2521 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 2522 public final void emitFCMOV_Cond_Reg_Reg(byte cond, FPR dstReg, FPR srcReg) { 2523 int miStart = mi; 2524 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 2525 switch (cond) { 2526 case LLT: 2527 setMachineCodes(mi++, (byte) 0xDA); 2528 setMachineCodes(mi++, (byte) (0xC0 + srcReg.value())); 2529 break; 2530 case EQ: 2531 setMachineCodes(mi++, (byte) 0xDA); 2532 setMachineCodes(mi++, (byte) (0xC8 + srcReg.value())); 2533 break; 2534 case LLE: 2535 setMachineCodes(mi++, (byte) 0xDA); 2536 setMachineCodes(mi++, (byte) (0xD0 + srcReg.value())); 2537 break; 2538 case PE: 2539 setMachineCodes(mi++, (byte) 0xDA); 2540 setMachineCodes(mi++, (byte) (0xD8 + srcReg.value())); 2541 break; 2542 case LGE: 2543 setMachineCodes(mi++, (byte) 0xDB); 2544 setMachineCodes(mi++, (byte) (0xC0 + srcReg.value())); 2545 break; 2546 case NE: 2547 setMachineCodes(mi++, (byte) 0xDB); 2548 setMachineCodes(mi++, (byte) (0xC8 + srcReg.value())); 2549 break; 2550 case LGT: 2551 setMachineCodes(mi++, (byte) 0xDB); 2552 setMachineCodes(mi++, (byte) (0xD0 + srcReg.value())); 2553 break; 2554 case PO: 2555 setMachineCodes(mi++, (byte) 0xDB); 2556 setMachineCodes(mi++, (byte) (0xD8 + srcReg.value())); 2557 break; 2558 default: 2559 if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED); 2560 } 2561 if (lister != null) lister.RR(miStart, "FCMOV" + CONDITION[cond], dstReg, srcReg); 2562 } 2563 2564 /** 2565 * Emits a x87 floating point push of ST(i) into ST(0) 2566 * 2567 * @param destReg destination register 2568 * @param srcReg source register 2569 * 2570 */ 2571 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2572 public final void emitFLD_Reg_Reg(FPR destReg, FPR srcReg) { 2573 int miStart = mi; 2574 if (VM.VerifyAssertions) VM._assert(destReg == FP0); 2575 setMachineCodes(mi++, (byte) 0xD9); 2576 setMachineCodes(mi++, (byte) (0xC0 + srcReg.value())); 2577 if (lister != null) lister.R(miStart, "FLD", srcReg); 2578 } 2579 2580 // floating point copy of ST(0) into ST(I) 2581 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2582 public final void emitFST_Reg_Reg(FPR destReg, FPR srcReg) { 2583 int miStart = mi; 2584 if (VM.VerifyAssertions) VM._assert(srcReg == FP0); 2585 setMachineCodes(mi++, (byte) 0xDD); 2586 setMachineCodes(mi++, (byte) (0xD0 + destReg.value())); 2587 if (lister != null) lister.R(miStart, "FST", destReg); 2588 } 2589 2590 // floating point pop of ST(0) into ST(I) 2591 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2592 public final void emitFSTP_Reg_Reg(FPR destReg, FPR srcReg) { 2593 int miStart = mi; 2594 if (VM.VerifyAssertions) VM._assert(srcReg == FP0); 2595 setMachineCodes(mi++, (byte) 0xDD); 2596 setMachineCodes(mi++, (byte) (0xD8 + destReg.value())); 2597 if (lister != null) lister.R(miStart, "FST", destReg); 2598 } 2599 2600 // Change Sign: Top of FPU register stack -= Top og FPU register stack 2601 public final void emitFCHS () { 2602 int miStart = mi; 2603 setMachineCodes(mi++, (byte) 0xD9); 2604 setMachineCodes(mi++, (byte) 0xE0); 2605 if (lister != null) lister.OP(miStart, "FADD32"); 2606 } 2607 2608 public final void emitFUCOMPP () { 2609 int miStart = mi; 2610 setMachineCodes(mi++, (byte) 0xDA); 2611 setMachineCodes(mi++, (byte) 0xE9); 2612 if (lister != null) lister.OP(miStart, "FUCOMPP"); 2613 } 2614 2615 // Store Status Word into AX register/noexecptions 2616 public final void emitFNSTSW () { 2617 int miStart = mi; 2618 setMachineCodes(mi++, (byte) 0xDF); 2619 setMachineCodes(mi++, (byte) 0xE0); 2620 if (lister != null) lister.OP(miStart, "FNSTSW"); 2621 } 2622 2623 // Real Remainder: 2624 // Top of FPU register stack <- ST(0) - (Q*ST(1) 2625 // Q is the interger value obtained from truncating 2626 // ST(0)/ST(1) toward 0 2627 public final void emitFPREM () { 2628 int miStart = mi; 2629 setMachineCodes(mi++, (byte) 0xD9); 2630 setMachineCodes(mi++, (byte) 0xF8); 2631 if (lister != null) lister.OP(miStart, "FPREM"); 2632 } 2633 2634 // Blow away floating point state 2635 public final void emitFINIT() { 2636 int miStart = mi; 2637 setMachineCodes(mi++, (byte) 0x9B); 2638 setMachineCodes(mi++, (byte) 0xDB); 2639 setMachineCodes(mi++, (byte) 0xE3); 2640 if (lister != null) lister.OP(miStart, "FINIT"); 2641 } 2642 2643 // Blow away floating point state 2644 // Pending exceptions??? Don't tell me about pending exceptions!! 2645 public final void emitFNINIT() { 2646 int miStart = mi; 2647 setMachineCodes(mi++, (byte) 0xDB); 2648 setMachineCodes(mi++, (byte) 0xE3); 2649 if (lister != null) lister.OP(miStart, "FNINIT"); 2650 } 2651 2652 /** 2653 * Emits an instruction that declares a FP register as no longer used, 2654 * i.e. it set the tag to empty. 2655 * 2656 * @param reg the register to free 2657 */ 2658 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2659 public final void emitFFREE_Reg(FPR reg) { 2660 int miStart = mi; 2661 setMachineCodes(mi++, (byte) 0xDD); 2662 setMachineCodes(mi++, (byte) ( (byte)0xC0 + reg.value() )); 2663 if (lister != null) lister.R(miStart, "FFREE", reg); 2664 } 2665 2666 /** 2667 * Declare we are no longer using FP register (and pop). This is an 2668 * undocumented opcode but is frequently created by GCC and prefered by 2669 * AMD to FSTP st0. 2670 * 2671 * @param reg the register to free 2672 */ 2673 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2674 public final void emitFFREEP_Reg(FPR reg) { 2675 int miStart = mi; 2676 setMachineCodes(mi++, (byte) 0xDF); 2677 setMachineCodes(mi++, (byte) ( (byte)0xC0 + reg.value() )); 2678 if (lister != null) lister.R(miStart, "FFREEP", reg); 2679 } 2680 2681 /** 2682 * Emits the dreaded FXCH (symbol of all that's wrong with x87 floating point). 2683 * This will exchange the two registers. 2684 * 2685 * @param regOne first register 2686 * @param regTwo second register 2687 */ 2688 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2689 public final void emitFXCH_Reg_Reg(FPR regOne, FPR regTwo) { 2690 int miStart = mi; 2691 2692 // at least one reg must not be FP0 2693 FPR nonZeroReg = FP0; // :) 2694 if (regOne == FP0 && regTwo == FP0) 2695 // do nothing; this is stupid 2696 return; 2697 else if (regOne == FP0 && regTwo != FP0) 2698 nonZeroReg = regTwo; 2699 else if (regTwo == FP0 && regOne != FP0) 2700 nonZeroReg = regOne; 2701 2702 // if not, bad instruction, so die 2703 if (nonZeroReg == FP0) 2704 VM._assert(false, "FXCH of " + regOne + ", " + regTwo); 2705 2706 // generate it, with special case (of course) for FP1 2707 setMachineCodes(mi++, (byte) 0xD9); 2708 if (nonZeroReg == FP1) 2709 setMachineCodes(mi++, (byte) 0xC9); 2710 else 2711 setMachineCodes(mi++, (byte) (0xC8 | nonZeroReg.value())); 2712 2713 // list it 2714 if (lister != null) lister.R(miStart, "FXCH", nonZeroReg); 2715 } 2716 2717 /* 2718 * BELOW HERE ARE AUTOMATICALLY-GENERATED INSTRUCTIONS. DO NOT EDIT. 2719 * 2720 * These instructions are generated by genAssembler.sh in the 2721 * src-generated/ia32-assembler directory. Please make all needed 2722 * edits to that script. 2723 */ 2724 /** 2725 * Generate a register(indirect)--register ADC. That is, 2726 * <PRE> 2727 * [dstBase] +CF= srcReg 2728 * </PRE> 2729 * 2730 * @param dstBase the destination base 2731 * @param srcReg the source register 2732 */ 2733 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2734 public final void emitADC_RegInd_Reg(GPR dstBase, GPR srcReg) { 2735 int miStart = mi; 2736 // no group 1 to 4 prefix byte 2737 generateREXprefix(false, srcReg, null, dstBase); 2738 // single byte opcode 2739 setMachineCodes(mi++, (byte) 0x11); 2740 emitRegIndirectRegOperands(dstBase, srcReg); 2741 if (lister != null) lister.RNR(miStart, "ADC", dstBase, srcReg); 2742 } 2743 2744 /** 2745 * Generate a register-offset--register ADC. That is, 2746 * <PRE> 2747 * [dstReg<<dstScale + dstDisp] +CF= srcReg 2748 * </PRE> 2749 * 2750 * @param dstIndex the destination index register 2751 * @param dstScale the destination shift amount 2752 * @param dstDisp the destination displacement 2753 * @param srcReg the source register 2754 */ 2755 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 2756 public final void emitADC_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 2757 int miStart = mi; 2758 // no group 1 to 4 prefix byte 2759 generateREXprefix(false, srcReg, dstIndex, null); 2760 // single byte opcode 2761 setMachineCodes(mi++, (byte) 0x11); 2762 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 2763 if (lister != null) lister.RFDR(miStart, "ADC", dstIndex, dstScale, dstDisp, srcReg); 2764 } 2765 2766 /** 2767 * Generate a absolute--register ADC. That is, 2768 * <PRE> 2769 * [dstDisp] +CF= srcReg 2770 * </PRE> 2771 * 2772 * @param dstDisp the destination address 2773 * @param srcReg the source register 2774 */ 2775 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 2776 public final void emitADC_Abs_Reg(Address dstDisp, GPR srcReg) { 2777 int miStart = mi; 2778 // no group 1 to 4 prefix byte 2779 generateREXprefix(false, srcReg, null, null); 2780 // single byte opcode 2781 setMachineCodes(mi++, (byte) 0x11); 2782 emitAbsRegOperands(dstDisp, srcReg); 2783 if (lister != null) lister.RAR(miStart, "ADC", dstDisp, srcReg); 2784 } 2785 2786 /** 2787 * Generate a register-index--register ADC. That is, 2788 * <PRE> 2789 * [dstBase + dstIndex<<dstScale + dstDisp] +CF= srcReg 2790 * </PRE> 2791 * 2792 * @param dstBase the base register 2793 * @param dstIndex the destination index register 2794 * @param dstScale the destination shift amount 2795 * @param dstDisp the destination displacement 2796 * @param srcReg the source register 2797 */ 2798 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 2799 public final void emitADC_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 2800 int miStart = mi; 2801 // no group 1 to 4 prefix byte 2802 generateREXprefix(false, srcReg, dstIndex, dstBase); 2803 // single byte opcode 2804 setMachineCodes(mi++, (byte) 0x11); 2805 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 2806 if (lister != null) lister.RXDR(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, srcReg); 2807 } 2808 2809 /** 2810 * Generate a register-displacement--register ADC. That is, 2811 * <PRE> 2812 * [dstBase + dstDisp] +CF= srcReg 2813 * </PRE> 2814 * 2815 * @param dstBase the base register 2816 * @param dstDisp the destination displacement 2817 * @param srcReg the source register 2818 */ 2819 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 2820 public final void emitADC_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 2821 int miStart = mi; 2822 // no group 1 to 4 prefix byte 2823 generateREXprefix(false, srcReg, null, dstBase); 2824 // single byte opcode 2825 setMachineCodes(mi++, (byte) 0x11); 2826 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 2827 if (lister != null) lister.RDR(miStart, "ADC", dstBase, dstDisp, srcReg); 2828 } 2829 2830 /** 2831 * Generate a register--register ADC. That is, 2832 * <PRE> 2833 * dstReg +CF= srcReg 2834 * </PRE> 2835 * 2836 * @param dstReg the destination register 2837 * @param srcReg the source register 2838 */ 2839 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2840 public final void emitADC_Reg_Reg(GPR dstReg, GPR srcReg) { 2841 int miStart = mi; 2842 // no group 1 to 4 prefix byte 2843 generateREXprefix(false, srcReg, null, dstReg); 2844 // single byte opcode 2845 setMachineCodes(mi++, (byte) 0x11); 2846 emitRegRegOperands(dstReg, srcReg); 2847 if (lister != null) lister.RR(miStart, "ADC", dstReg, srcReg); 2848 } 2849 2850 /** 2851 * Generate a register--register-displacement ADC. That is, 2852 * <PRE> 2853 * dstReg +CF= [srcReg + srcDisp] 2854 * </PRE> 2855 * 2856 * @param dstReg the destination register 2857 * @param srcBase the source register 2858 * @param srcDisp the source displacement 2859 */ 2860 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2861 public final void emitADC_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 2862 int miStart = mi; 2863 // no group 1 to 4 prefix byte 2864 generateREXprefix(false, dstReg, null, srcBase); 2865 // single byte opcode 2866 setMachineCodes(mi++, (byte) 0x13); 2867 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 2868 if (lister != null) lister.RRD(miStart, "ADC", dstReg, srcBase, srcDisp); 2869 } 2870 2871 /** 2872 * Generate a register--register-offset ADC. That is, 2873 * <PRE> 2874 * dstReg +CF= [srcIndex<<srcScale + srcDisp] 2875 * </PRE> 2876 * 2877 * @param dstReg the destination register 2878 * @param srcIndex the source index register 2879 * @param srcScale the source shift amount 2880 * @param srcDisp the source displacement 2881 */ 2882 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2883 public final void emitADC_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 2884 int miStart = mi; 2885 // no group 1 to 4 prefix byte 2886 generateREXprefix(false, dstReg, srcIndex, null); 2887 // single byte opcode 2888 setMachineCodes(mi++, (byte) 0x13); 2889 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 2890 if (lister != null) lister.RRFD(miStart, "ADC", dstReg, srcIndex, srcScale, srcDisp); 2891 } 2892 2893 /** 2894 * Generate a register--register-offset ADC. That is, 2895 * <PRE> 2896 * dstReg +CF= [srcDisp] 2897 * </PRE> 2898 * 2899 * @param dstReg the destination register 2900 * @param srcDisp the source displacement 2901 */ 2902 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 2903 public final void emitADC_Reg_Abs(GPR dstReg, Address srcDisp) { 2904 int miStart = mi; 2905 // no group 1 to 4 prefix byte 2906 generateREXprefix(false, dstReg, null, null); 2907 // single byte opcode 2908 setMachineCodes(mi++, (byte) 0x13); 2909 emitAbsRegOperands(srcDisp, dstReg); 2910 if (lister != null) lister.RRA(miStart, "ADC", dstReg, srcDisp); 2911 } 2912 2913 /** 2914 * Generate a register--register-offset ADC. That is, 2915 * <PRE> 2916 * dstReg +CF= [srcBase + srcIndex<<srcScale + srcDisp] 2917 * </PRE> 2918 * 2919 * @param dstReg the destination register 2920 * @param srcBase the source base register 2921 * @param srcIndex the source index register 2922 * @param srcScale the source shift amount 2923 * @param srcDisp the source displacement 2924 */ 2925 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 2926 public final void emitADC_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 2927 int miStart = mi; 2928 // no group 1 to 4 prefix byte 2929 generateREXprefix(false, dstReg, srcIndex, srcBase); 2930 // single byte opcode 2931 setMachineCodes(mi++, (byte) 0x13); 2932 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 2933 if (lister != null) lister.RRXD(miStart, "ADC", dstReg, srcBase, srcIndex, srcScale, srcDisp); 2934 } 2935 2936 /** 2937 * Generate a register--register(indirect) ADC. That is, 2938 * <PRE> 2939 * dstReg +CF= [srcBase] 2940 * </PRE> 2941 * 2942 * @param dstReg the destination register 2943 * @param srcBase the source base register 2944 */ 2945 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2946 public final void emitADC_Reg_RegInd(GPR dstReg, GPR srcBase) { 2947 int miStart = mi; 2948 // no group 1 to 4 prefix byte 2949 generateREXprefix(false, dstReg, null, srcBase); 2950 // single byte opcode 2951 setMachineCodes(mi++, (byte) 0x13); 2952 emitRegIndirectRegOperands(srcBase, dstReg); 2953 if (lister != null) lister.RRN(miStart, "ADC", dstReg, srcBase); 2954 } 2955 2956 /** 2957 * Generate a register(indirect)--register ADC. That is, 2958 * <PRE> 2959 * [dstBase] +CF= (word) srcReg 2960 * </PRE> 2961 * 2962 * @param dstBase the destination base 2963 * @param srcReg the source register 2964 */ 2965 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 2966 public final void emitADC_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 2967 int miStart = mi; 2968 setMachineCodes(mi++, (byte) 0x66); 2969 generateREXprefix(false, srcReg, null, dstBase); 2970 // single byte opcode 2971 setMachineCodes(mi++, (byte) 0x11); 2972 emitRegIndirectRegOperands(dstBase, srcReg); 2973 if (lister != null) lister.RNR(miStart, "ADC", dstBase, srcReg); 2974 } 2975 2976 /** 2977 * Generate a register-offset--register ADC. That is, 2978 * <PRE> 2979 * [dstReg<<dstScale + dstDisp] +CF= (word) srcReg 2980 * </PRE> 2981 * 2982 * @param dstIndex the destination index register 2983 * @param dstScale the destination shift amount 2984 * @param dstDisp the destination displacement 2985 * @param srcReg the source register 2986 */ 2987 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 2988 public final void emitADC_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 2989 int miStart = mi; 2990 setMachineCodes(mi++, (byte) 0x66); 2991 generateREXprefix(false, srcReg, dstIndex, null); 2992 // single byte opcode 2993 setMachineCodes(mi++, (byte) 0x11); 2994 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 2995 if (lister != null) lister.RFDR(miStart, "ADC", dstIndex, dstScale, dstDisp, srcReg); 2996 } 2997 2998 /** 2999 * Generate a absolute--register ADC. That is, 3000 * <PRE> 3001 * [dstDisp] +CF= (word) srcReg 3002 * </PRE> 3003 * 3004 * @param dstDisp the destination address 3005 * @param srcReg the source register 3006 */ 3007 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 3008 public final void emitADC_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 3009 int miStart = mi; 3010 setMachineCodes(mi++, (byte) 0x66); 3011 generateREXprefix(false, srcReg, null, null); 3012 // single byte opcode 3013 setMachineCodes(mi++, (byte) 0x11); 3014 emitAbsRegOperands(dstDisp, srcReg); 3015 if (lister != null) lister.RAR(miStart, "ADC", dstDisp, srcReg); 3016 } 3017 3018 /** 3019 * Generate a register-index--register ADC. That is, 3020 * <PRE> 3021 * [dstBase + dstIndex<<dstScale + dstDisp] +CF= (word) srcReg 3022 * </PRE> 3023 * 3024 * @param dstBase the base register 3025 * @param dstIndex the destination index register 3026 * @param dstScale the destination shift amount 3027 * @param dstDisp the destination displacement 3028 * @param srcReg the source register 3029 */ 3030 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 3031 public final void emitADC_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 3032 int miStart = mi; 3033 setMachineCodes(mi++, (byte) 0x66); 3034 generateREXprefix(false, srcReg, dstIndex, dstBase); 3035 // single byte opcode 3036 setMachineCodes(mi++, (byte) 0x11); 3037 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 3038 if (lister != null) lister.RXDR(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, srcReg); 3039 } 3040 3041 /** 3042 * Generate a register-displacement--register ADC. That is, 3043 * <PRE> 3044 * [dstBase + dstDisp] +CF= (word) srcReg 3045 * </PRE> 3046 * 3047 * @param dstBase the base register 3048 * @param dstDisp the destination displacement 3049 * @param srcReg the source register 3050 */ 3051 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 3052 public final void emitADC_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 3053 int miStart = mi; 3054 setMachineCodes(mi++, (byte) 0x66); 3055 generateREXprefix(false, srcReg, null, dstBase); 3056 // single byte opcode 3057 setMachineCodes(mi++, (byte) 0x11); 3058 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 3059 if (lister != null) lister.RDR(miStart, "ADC", dstBase, dstDisp, srcReg); 3060 } 3061 3062 /** 3063 * Generate a register--register ADC. That is, 3064 * <PRE> 3065 * dstReg +CF= (word) srcReg 3066 * </PRE> 3067 * 3068 * @param dstReg the destination register 3069 * @param srcReg the source register 3070 */ 3071 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3072 public final void emitADC_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 3073 int miStart = mi; 3074 setMachineCodes(mi++, (byte) 0x66); 3075 generateREXprefix(false, srcReg, null, dstReg); 3076 // single byte opcode 3077 setMachineCodes(mi++, (byte) 0x11); 3078 emitRegRegOperands(dstReg, srcReg); 3079 if (lister != null) lister.RR(miStart, "ADC", dstReg, srcReg); 3080 } 3081 3082 /** 3083 * Generate a register--register-displacement ADC. That is, 3084 * <PRE> 3085 * dstReg +CF= (word) [srcReg + srcDisp] 3086 * </PRE> 3087 * 3088 * @param dstReg the destination register 3089 * @param srcBase the source register 3090 * @param srcDisp the source displacement 3091 */ 3092 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3093 public final void emitADC_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 3094 int miStart = mi; 3095 setMachineCodes(mi++, (byte) 0x66); 3096 generateREXprefix(false, dstReg, null, srcBase); 3097 // single byte opcode 3098 setMachineCodes(mi++, (byte) 0x13); 3099 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 3100 if (lister != null) lister.RRD(miStart, "ADC", dstReg, srcBase, srcDisp); 3101 } 3102 3103 /** 3104 * Generate a register--register-offset ADC. That is, 3105 * <PRE> 3106 * dstReg +CF= (word) [srcIndex<<srcScale + srcDisp] 3107 * </PRE> 3108 * 3109 * @param dstReg the destination register 3110 * @param srcIndex the source index register 3111 * @param srcScale the source shift amount 3112 * @param srcDisp the source displacement 3113 */ 3114 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3115 public final void emitADC_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 3116 int miStart = mi; 3117 setMachineCodes(mi++, (byte) 0x66); 3118 generateREXprefix(false, dstReg, srcIndex, null); 3119 // single byte opcode 3120 setMachineCodes(mi++, (byte) 0x13); 3121 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 3122 if (lister != null) lister.RRFD(miStart, "ADC", dstReg, srcIndex, srcScale, srcDisp); 3123 } 3124 3125 /** 3126 * Generate a register--register-offset ADC. That is, 3127 * <PRE> 3128 * dstReg +CF= (word) [srcDisp] 3129 * </PRE> 3130 * 3131 * @param dstReg the destination register 3132 * @param srcDisp the source displacement 3133 */ 3134 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 3135 public final void emitADC_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 3136 int miStart = mi; 3137 setMachineCodes(mi++, (byte) 0x66); 3138 generateREXprefix(false, dstReg, null, null); 3139 // single byte opcode 3140 setMachineCodes(mi++, (byte) 0x13); 3141 emitAbsRegOperands(srcDisp, dstReg); 3142 if (lister != null) lister.RRA(miStart, "ADC", dstReg, srcDisp); 3143 } 3144 3145 /** 3146 * Generate a register--register-offset ADC. That is, 3147 * <PRE> 3148 * dstReg +CF= (word) [srcBase + srcIndex<<srcScale + srcDisp] 3149 * </PRE> 3150 * 3151 * @param dstReg the destination register 3152 * @param srcBase the source base register 3153 * @param srcIndex the source index register 3154 * @param srcScale the source shift amount 3155 * @param srcDisp the source displacement 3156 */ 3157 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 3158 public final void emitADC_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 3159 int miStart = mi; 3160 setMachineCodes(mi++, (byte) 0x66); 3161 generateREXprefix(false, dstReg, srcIndex, srcBase); 3162 // single byte opcode 3163 setMachineCodes(mi++, (byte) 0x13); 3164 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 3165 if (lister != null) lister.RRXD(miStart, "ADC", dstReg, srcBase, srcIndex, srcScale, srcDisp); 3166 } 3167 3168 /** 3169 * Generate a register--register(indirect) ADC. That is, 3170 * <PRE> 3171 * dstReg +CF= (word) [srcBase] 3172 * </PRE> 3173 * 3174 * @param dstReg the destination register 3175 * @param srcBase the source base register 3176 */ 3177 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3178 public final void emitADC_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 3179 int miStart = mi; 3180 setMachineCodes(mi++, (byte) 0x66); 3181 generateREXprefix(false, dstReg, null, srcBase); 3182 // single byte opcode 3183 setMachineCodes(mi++, (byte) 0x13); 3184 emitRegIndirectRegOperands(srcBase, dstReg); 3185 if (lister != null) lister.RRN(miStart, "ADC", dstReg, srcBase); 3186 } 3187 3188 /** 3189 * Generate a register(indirect)--register ADC. That is, 3190 * <PRE> 3191 * [dstBase] +CF= (quad) srcReg 3192 * </PRE> 3193 * 3194 * @param dstBase the destination base 3195 * @param srcReg the source register 3196 */ 3197 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3198 public final void emitADC_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 3199 int miStart = mi; 3200 // no group 1 to 4 prefix byte 3201 generateREXprefix(true, srcReg, null, dstBase); 3202 // single byte opcode 3203 setMachineCodes(mi++, (byte) 0x11); 3204 emitRegIndirectRegOperands(dstBase, srcReg); 3205 if (lister != null) lister.RNR(miStart, "ADC", dstBase, srcReg); 3206 } 3207 3208 /** 3209 * Generate a register-offset--register ADC. That is, 3210 * <PRE> 3211 * [dstReg<<dstScale + dstDisp] +CF= (quad) srcReg 3212 * </PRE> 3213 * 3214 * @param dstIndex the destination index register 3215 * @param dstScale the destination shift amount 3216 * @param dstDisp the destination displacement 3217 * @param srcReg the source register 3218 */ 3219 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 3220 public final void emitADC_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 3221 int miStart = mi; 3222 // no group 1 to 4 prefix byte 3223 generateREXprefix(true, srcReg, dstIndex, null); 3224 // single byte opcode 3225 setMachineCodes(mi++, (byte) 0x11); 3226 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 3227 if (lister != null) lister.RFDR(miStart, "ADC", dstIndex, dstScale, dstDisp, srcReg); 3228 } 3229 3230 /** 3231 * Generate a absolute--register ADC. That is, 3232 * <PRE> 3233 * [dstDisp] +CF= (quad) srcReg 3234 * </PRE> 3235 * 3236 * @param dstDisp the destination address 3237 * @param srcReg the source register 3238 */ 3239 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 3240 public final void emitADC_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 3241 int miStart = mi; 3242 // no group 1 to 4 prefix byte 3243 generateREXprefix(true, srcReg, null, null); 3244 // single byte opcode 3245 setMachineCodes(mi++, (byte) 0x11); 3246 emitAbsRegOperands(dstDisp, srcReg); 3247 if (lister != null) lister.RAR(miStart, "ADC", dstDisp, srcReg); 3248 } 3249 3250 /** 3251 * Generate a register-index--register ADC. That is, 3252 * <PRE> 3253 * [dstBase + dstIndex<<dstScale + dstDisp] +CF= (quad) srcReg 3254 * </PRE> 3255 * 3256 * @param dstBase the base register 3257 * @param dstIndex the destination index register 3258 * @param dstScale the destination shift amount 3259 * @param dstDisp the destination displacement 3260 * @param srcReg the source register 3261 */ 3262 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 3263 public final void emitADC_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 3264 int miStart = mi; 3265 // no group 1 to 4 prefix byte 3266 generateREXprefix(true, srcReg, dstIndex, dstBase); 3267 // single byte opcode 3268 setMachineCodes(mi++, (byte) 0x11); 3269 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 3270 if (lister != null) lister.RXDR(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, srcReg); 3271 } 3272 3273 /** 3274 * Generate a register-displacement--register ADC. That is, 3275 * <PRE> 3276 * [dstBase + dstDisp] +CF= (quad) srcReg 3277 * </PRE> 3278 * 3279 * @param dstBase the base register 3280 * @param dstDisp the destination displacement 3281 * @param srcReg the source register 3282 */ 3283 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 3284 public final void emitADC_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 3285 int miStart = mi; 3286 // no group 1 to 4 prefix byte 3287 generateREXprefix(true, srcReg, null, dstBase); 3288 // single byte opcode 3289 setMachineCodes(mi++, (byte) 0x11); 3290 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 3291 if (lister != null) lister.RDR(miStart, "ADC", dstBase, dstDisp, srcReg); 3292 } 3293 3294 /** 3295 * Generate a register--register ADC. That is, 3296 * <PRE> 3297 * dstReg +CF= (quad) srcReg 3298 * </PRE> 3299 * 3300 * @param dstReg the destination register 3301 * @param srcReg the source register 3302 */ 3303 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3304 public final void emitADC_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 3305 int miStart = mi; 3306 // no group 1 to 4 prefix byte 3307 generateREXprefix(true, srcReg, null, dstReg); 3308 // single byte opcode 3309 setMachineCodes(mi++, (byte) 0x11); 3310 emitRegRegOperands(dstReg, srcReg); 3311 if (lister != null) lister.RR(miStart, "ADC", dstReg, srcReg); 3312 } 3313 3314 /** 3315 * Generate a register--register-displacement ADC. That is, 3316 * <PRE> 3317 * dstReg +CF= (quad) [srcReg + srcDisp] 3318 * </PRE> 3319 * 3320 * @param dstReg the destination register 3321 * @param srcBase the source register 3322 * @param srcDisp the source displacement 3323 */ 3324 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3325 public final void emitADC_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 3326 int miStart = mi; 3327 // no group 1 to 4 prefix byte 3328 generateREXprefix(true, dstReg, null, srcBase); 3329 // single byte opcode 3330 setMachineCodes(mi++, (byte) 0x13); 3331 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 3332 if (lister != null) lister.RRD(miStart, "ADC", dstReg, srcBase, srcDisp); 3333 } 3334 3335 /** 3336 * Generate a register--register-offset ADC. That is, 3337 * <PRE> 3338 * dstReg +CF= (quad) [srcIndex<<srcScale + srcDisp] 3339 * </PRE> 3340 * 3341 * @param dstReg the destination register 3342 * @param srcIndex the source index register 3343 * @param srcScale the source shift amount 3344 * @param srcDisp the source displacement 3345 */ 3346 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3347 public final void emitADC_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 3348 int miStart = mi; 3349 // no group 1 to 4 prefix byte 3350 generateREXprefix(true, dstReg, srcIndex, null); 3351 // single byte opcode 3352 setMachineCodes(mi++, (byte) 0x13); 3353 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 3354 if (lister != null) lister.RRFD(miStart, "ADC", dstReg, srcIndex, srcScale, srcDisp); 3355 } 3356 3357 /** 3358 * Generate a register--register-offset ADC. That is, 3359 * <PRE> 3360 * dstReg +CF= (quad) [srcDisp] 3361 * </PRE> 3362 * 3363 * @param dstReg the destination register 3364 * @param srcDisp the source displacement 3365 */ 3366 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 3367 public final void emitADC_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 3368 int miStart = mi; 3369 // no group 1 to 4 prefix byte 3370 generateREXprefix(true, dstReg, null, null); 3371 // single byte opcode 3372 setMachineCodes(mi++, (byte) 0x13); 3373 emitAbsRegOperands(srcDisp, dstReg); 3374 if (lister != null) lister.RRA(miStart, "ADC", dstReg, srcDisp); 3375 } 3376 3377 /** 3378 * Generate a register--register-offset ADC. That is, 3379 * <PRE> 3380 * dstReg +CF= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 3381 * </PRE> 3382 * 3383 * @param dstReg the destination register 3384 * @param srcBase the source base register 3385 * @param srcIndex the source index register 3386 * @param srcScale the source shift amount 3387 * @param srcDisp the source displacement 3388 */ 3389 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 3390 public final void emitADC_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 3391 int miStart = mi; 3392 // no group 1 to 4 prefix byte 3393 generateREXprefix(true, dstReg, srcIndex, srcBase); 3394 // single byte opcode 3395 setMachineCodes(mi++, (byte) 0x13); 3396 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 3397 if (lister != null) lister.RRXD(miStart, "ADC", dstReg, srcBase, srcIndex, srcScale, srcDisp); 3398 } 3399 3400 /** 3401 * Generate a register--register(indirect) ADC. That is, 3402 * <PRE> 3403 * dstReg +CF= (quad) [srcBase] 3404 * </PRE> 3405 * 3406 * @param dstReg the destination register 3407 * @param srcBase the source base register 3408 */ 3409 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3410 public final void emitADC_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 3411 int miStart = mi; 3412 // no group 1 to 4 prefix byte 3413 generateREXprefix(true, dstReg, null, srcBase); 3414 // single byte opcode 3415 setMachineCodes(mi++, (byte) 0x13); 3416 emitRegIndirectRegOperands(srcBase, dstReg); 3417 if (lister != null) lister.RRN(miStart, "ADC", dstReg, srcBase); 3418 } 3419 3420 /** 3421 * Generate a register(indirect)--register ADC. That is, 3422 * <PRE> 3423 * [dstBase] +CF= (byte) srcReg 3424 * </PRE> 3425 * 3426 * @param dstBase the destination base 3427 * @param srcReg the source register 3428 */ 3429 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3430 public final void emitADC_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 3431 int miStart = mi; 3432 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 3433 // no group 1 to 4 prefix byte 3434 generateREXprefix(false, srcReg, null, dstBase); 3435 // single byte opcode 3436 setMachineCodes(mi++, (byte) 0x10); 3437 emitRegIndirectRegOperands(dstBase, srcReg); 3438 if (lister != null) lister.RNR(miStart, "ADC", dstBase, srcReg); 3439 } 3440 3441 /** 3442 * Generate a register-offset--register ADC. That is, 3443 * <PRE> 3444 * [dstReg<<dstScale + dstDisp] +CF= (byte) srcReg 3445 * </PRE> 3446 * 3447 * @param dstIndex the destination index register 3448 * @param dstScale the destination shift amount 3449 * @param dstDisp the destination displacement 3450 * @param srcReg the source register 3451 */ 3452 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 3453 public final void emitADC_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 3454 int miStart = mi; 3455 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 3456 // no group 1 to 4 prefix byte 3457 generateREXprefix(false, srcReg, dstIndex, null); 3458 // single byte opcode 3459 setMachineCodes(mi++, (byte) 0x10); 3460 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 3461 if (lister != null) lister.RFDR(miStart, "ADC", dstIndex, dstScale, dstDisp, srcReg); 3462 } 3463 3464 /** 3465 * Generate a absolute--register ADC. That is, 3466 * <PRE> 3467 * [dstDisp] +CF= (byte) srcReg 3468 * </PRE> 3469 * 3470 * @param dstDisp the destination address 3471 * @param srcReg the source register 3472 */ 3473 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 3474 public final void emitADC_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 3475 int miStart = mi; 3476 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 3477 // no group 1 to 4 prefix byte 3478 generateREXprefix(false, srcReg, null, null); 3479 // single byte opcode 3480 setMachineCodes(mi++, (byte) 0x10); 3481 emitAbsRegOperands(dstDisp, srcReg); 3482 if (lister != null) lister.RAR(miStart, "ADC", dstDisp, srcReg); 3483 } 3484 3485 /** 3486 * Generate a register-index--register ADC. That is, 3487 * <PRE> 3488 * [dstBase + dstIndex<<dstScale + dstDisp] +CF= (byte) srcReg 3489 * </PRE> 3490 * 3491 * @param dstBase the base register 3492 * @param dstIndex the destination index register 3493 * @param dstScale the destination shift amount 3494 * @param dstDisp the destination displacement 3495 * @param srcReg the source register 3496 */ 3497 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 3498 public final void emitADC_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 3499 int miStart = mi; 3500 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 3501 // no group 1 to 4 prefix byte 3502 generateREXprefix(false, srcReg, dstIndex, dstBase); 3503 // single byte opcode 3504 setMachineCodes(mi++, (byte) 0x10); 3505 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 3506 if (lister != null) lister.RXDR(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, srcReg); 3507 } 3508 3509 /** 3510 * Generate a register-displacement--register ADC. That is, 3511 * <PRE> 3512 * [dstBase + dstDisp] +CF= (byte) srcReg 3513 * </PRE> 3514 * 3515 * @param dstBase the base register 3516 * @param dstDisp the destination displacement 3517 * @param srcReg the source register 3518 */ 3519 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 3520 public final void emitADC_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 3521 int miStart = mi; 3522 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 3523 // no group 1 to 4 prefix byte 3524 generateREXprefix(false, srcReg, null, dstBase); 3525 // single byte opcode 3526 setMachineCodes(mi++, (byte) 0x10); 3527 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 3528 if (lister != null) lister.RDR(miStart, "ADC", dstBase, dstDisp, srcReg); 3529 } 3530 3531 /** 3532 * Generate a register--register ADC. That is, 3533 * <PRE> 3534 * dstReg +CF= (byte) srcReg 3535 * </PRE> 3536 * 3537 * @param dstReg the destination register 3538 * @param srcReg the source register 3539 */ 3540 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3541 public final void emitADC_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 3542 int miStart = mi; 3543 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 3544 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 3545 // no group 1 to 4 prefix byte 3546 generateREXprefix(false, srcReg, null, dstReg); 3547 // single byte opcode 3548 setMachineCodes(mi++, (byte) 0x10); 3549 emitRegRegOperands(dstReg, srcReg); 3550 if (lister != null) lister.RR(miStart, "ADC", dstReg, srcReg); 3551 } 3552 3553 /** 3554 * Generate a register--register-displacement ADC. That is, 3555 * <PRE> 3556 * dstReg +CF= (byte) [srcReg + srcDisp] 3557 * </PRE> 3558 * 3559 * @param dstReg the destination register 3560 * @param srcBase the source register 3561 * @param srcDisp the source displacement 3562 */ 3563 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3564 public final void emitADC_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 3565 int miStart = mi; 3566 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 3567 // no group 1 to 4 prefix byte 3568 generateREXprefix(false, dstReg, null, srcBase); 3569 // single byte opcode 3570 setMachineCodes(mi++, (byte) 0x12); 3571 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 3572 if (lister != null) lister.RRD(miStart, "ADC", dstReg, srcBase, srcDisp); 3573 } 3574 3575 /** 3576 * Generate a register--register-offset ADC. That is, 3577 * <PRE> 3578 * dstReg +CF= (byte) [srcIndex<<srcScale + srcDisp] 3579 * </PRE> 3580 * 3581 * @param dstReg the destination register 3582 * @param srcIndex the source index register 3583 * @param srcScale the source shift amount 3584 * @param srcDisp the source displacement 3585 */ 3586 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3587 public final void emitADC_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 3588 int miStart = mi; 3589 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 3590 // no group 1 to 4 prefix byte 3591 generateREXprefix(false, dstReg, srcIndex, null); 3592 // single byte opcode 3593 setMachineCodes(mi++, (byte) 0x12); 3594 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 3595 if (lister != null) lister.RRFD(miStart, "ADC", dstReg, srcIndex, srcScale, srcDisp); 3596 } 3597 3598 /** 3599 * Generate a register--register-offset ADC. That is, 3600 * <PRE> 3601 * dstReg +CF= (byte) [srcDisp] 3602 * </PRE> 3603 * 3604 * @param dstReg the destination register 3605 * @param srcDisp the source displacement 3606 */ 3607 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 3608 public final void emitADC_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 3609 int miStart = mi; 3610 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 3611 // no group 1 to 4 prefix byte 3612 generateREXprefix(false, dstReg, null, null); 3613 // single byte opcode 3614 setMachineCodes(mi++, (byte) 0x12); 3615 emitAbsRegOperands(srcDisp, dstReg); 3616 if (lister != null) lister.RRA(miStart, "ADC", dstReg, srcDisp); 3617 } 3618 3619 /** 3620 * Generate a register--register-offset ADC. That is, 3621 * <PRE> 3622 * dstReg +CF= (byte) [srcBase + srcIndex<<srcScale + srcDisp] 3623 * </PRE> 3624 * 3625 * @param dstReg the destination register 3626 * @param srcBase the source base register 3627 * @param srcIndex the source index register 3628 * @param srcScale the source shift amount 3629 * @param srcDisp the source displacement 3630 */ 3631 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 3632 public final void emitADC_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 3633 int miStart = mi; 3634 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 3635 // no group 1 to 4 prefix byte 3636 generateREXprefix(false, dstReg, srcIndex, srcBase); 3637 // single byte opcode 3638 setMachineCodes(mi++, (byte) 0x12); 3639 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 3640 if (lister != null) lister.RRXD(miStart, "ADC", dstReg, srcBase, srcIndex, srcScale, srcDisp); 3641 } 3642 3643 /** 3644 * Generate a register--register(indirect) ADC. That is, 3645 * <PRE> 3646 * dstReg +CF= (byte) [srcBase] 3647 * </PRE> 3648 * 3649 * @param dstReg the destination register 3650 * @param srcBase the source base register 3651 */ 3652 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3653 public final void emitADC_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 3654 int miStart = mi; 3655 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 3656 // no group 1 to 4 prefix byte 3657 generateREXprefix(false, dstReg, null, srcBase); 3658 // single byte opcode 3659 setMachineCodes(mi++, (byte) 0x12); 3660 emitRegIndirectRegOperands(srcBase, dstReg); 3661 if (lister != null) lister.RRN(miStart, "ADC", dstReg, srcBase); 3662 } 3663 3664 /** 3665 * Generate a register--immediate ADC. That is, 3666 * <PRE> 3667 * dstReg +CF= imm 3668 * </PRE> 3669 * 3670 * @param dstReg the destination register 3671 * @param imm immediate 3672 */ 3673 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 3674 public final void emitADC_Reg_Imm(GPR dstReg, int imm) { 3675 int miStart = mi; 3676 // no group 1 to 4 prefix byte 3677 generateREXprefix(false, null, null, dstReg); 3678 // single byte opcode 3679 if (fits(imm,8)) { 3680 setMachineCodes(mi++, (byte) 0x83); 3681 // "register 0x2" is really part of the opcode 3682 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 3683 emitImm8((byte)imm); 3684 } else if (dstReg == EAX) { 3685 setMachineCodes(mi++, (byte) 0x15); 3686 emitImm32(imm); 3687 } else { 3688 setMachineCodes(mi++, (byte) 0x81); 3689 // "register 0x2" is really part of the opcode 3690 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 3691 emitImm32(imm); 3692 } 3693 if (lister != null) lister.RI(miStart, "ADC", dstReg, imm); 3694 } 3695 3696 /** 3697 * Generate a register-displacement--immediate ADC. That is, 3698 * <PRE> 3699 * [dstBase + dstDisp] +CF= imm 3700 * </PRE> 3701 * 3702 * @param dstBase the destination register 3703 * @param dstDisp the destination displacement 3704 * @param imm immediate 3705 */ 3706 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 3707 public final void emitADC_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 3708 int miStart = mi; 3709 // no group 1 to 4 prefix byte 3710 generateREXprefix(false, null, null, dstBase); 3711 // single byte opcode 3712 if (fits(imm,8)) { 3713 setMachineCodes(mi++, (byte) 0x83); 3714 // "register 0x2" is really part of the opcode 3715 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 3716 emitImm8((byte)imm); 3717 } else { 3718 setMachineCodes(mi++, (byte) 0x81); 3719 // "register 0x2" is really part of the opcode 3720 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 3721 emitImm32(imm); 3722 } 3723 if (lister != null) lister.RDI(miStart, "ADC", dstBase, dstDisp, imm); 3724 } 3725 3726 /** 3727 * Generate a register-offset--immediate ADC. That is, 3728 * <PRE> 3729 * [dstIndex<<dstScale + dstDisp] +CF= imm 3730 * </PRE> 3731 * 3732 * @param dstIndex the destination index register 3733 * @param dstScale the destination shift amount 3734 * @param dstDisp the destination displacement 3735 * @param imm immediate 3736 */ 3737 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 3738 public final void emitADC_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 3739 int miStart = mi; 3740 // no group 1 to 4 prefix byte 3741 generateREXprefix(false, null, dstIndex, null); 3742 // single byte opcode 3743 if (fits(imm,8)) { 3744 setMachineCodes(mi++, (byte) 0x83); 3745 // "register 0x2" is really part of the opcode 3746 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 3747 emitImm8((byte)imm); 3748 } else { 3749 setMachineCodes(mi++, (byte) 0x81); 3750 // "register 0x2" is really part of the opcode 3751 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 3752 emitImm32(imm); 3753 } 3754 if (lister != null) lister.RFDI(miStart, "ADC", dstIndex, dstScale, dstDisp, imm); 3755 } 3756 3757 /** 3758 * Generate a absolute--immediate ADC. That is, 3759 * <PRE> 3760 * [dstDisp] +CF= imm 3761 * </PRE> 3762 * 3763 * @param dstDisp the destination displacement 3764 * @param imm immediate 3765 */ 3766 public final void emitADC_Abs_Imm(Address dstDisp, int imm) { 3767 int miStart = mi; 3768 // no group 1 to 4 prefix byte 3769 generateREXprefix(false, null, null, null); 3770 // single byte opcode 3771 if (fits(imm,8)) { 3772 setMachineCodes(mi++, (byte) 0x83); 3773 // "register 0x2" is really part of the opcode 3774 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 3775 emitImm8((byte)imm); 3776 } else { 3777 setMachineCodes(mi++, (byte) 0x81); 3778 // "register 0x2" is really part of the opcode 3779 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 3780 emitImm32(imm); 3781 } 3782 if (lister != null) lister.RAI(miStart, "ADC", dstDisp, imm); 3783 } 3784 3785 /** 3786 * Generate a register-index--immediate ADC. That is, 3787 * <PRE> 3788 * [dstBase + dstIndex<<dstScale + dstDisp] +CF= imm 3789 * </PRE> 3790 * 3791 * @param dstBase the destination base register 3792 * @param dstIndex the destination index register 3793 * @param dstScale the destination shift amount 3794 * @param dstDisp the destination displacement 3795 * @param imm immediate 3796 */ 3797 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3798 public final void emitADC_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 3799 int miStart = mi; 3800 // no group 1 to 4 prefix byte 3801 generateREXprefix(false, null, dstIndex, dstBase); 3802 // single byte opcode 3803 if (fits(imm,8)) { 3804 setMachineCodes(mi++, (byte) 0x83); 3805 // "register 0x2" is really part of the opcode 3806 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 3807 emitImm8((byte)imm); 3808 } else { 3809 setMachineCodes(mi++, (byte) 0x81); 3810 // "register 0x2" is really part of the opcode 3811 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 3812 emitImm32(imm); 3813 } 3814 if (lister != null) lister.RXDI(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, imm); 3815 } 3816 3817 /** 3818 * Generate a register(indirect)--immediate ADC. That is, 3819 * <PRE> 3820 * [dstBase] +CF= imm 3821 * </PRE> 3822 * 3823 * @param dstBase the destination base register 3824 * @param imm immediate 3825 */ 3826 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 3827 public final void emitADC_RegInd_Imm(GPR dstBase, int imm) { 3828 int miStart = mi; 3829 // no group 1 to 4 prefix byte 3830 generateREXprefix(false, null, null, dstBase); 3831 // single byte opcode 3832 if (fits(imm,8)) { 3833 setMachineCodes(mi++, (byte) 0x83); 3834 // "register 0x2" is really part of the opcode 3835 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 3836 emitImm8((byte)imm); 3837 } else { 3838 setMachineCodes(mi++, (byte) 0x81); 3839 // "register 0x2" is really part of the opcode 3840 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 3841 emitImm32(imm); 3842 } 3843 if (lister != null) lister.RNI(miStart, "ADC", dstBase, imm); 3844 } 3845 3846 /** 3847 * Generate a register--immediate ADC. That is, 3848 * <PRE> 3849 * dstReg +CF= (word) imm 3850 * </PRE> 3851 * 3852 * @param dstReg the destination register 3853 * @param imm immediate 3854 */ 3855 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 3856 public final void emitADC_Reg_Imm_Word(GPR dstReg, int imm) { 3857 int miStart = mi; 3858 setMachineCodes(mi++, (byte) 0x66); 3859 generateREXprefix(false, null, null, dstReg); 3860 // single byte opcode 3861 if (fits(imm,8)) { 3862 setMachineCodes(mi++, (byte) 0x83); 3863 // "register 0x2" is really part of the opcode 3864 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 3865 emitImm8((byte)imm); 3866 } else if (dstReg == EAX) { 3867 setMachineCodes(mi++, (byte) 0x15); 3868 emitImm16(imm); 3869 } else { 3870 setMachineCodes(mi++, (byte) 0x81); 3871 // "register 0x2" is really part of the opcode 3872 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 3873 emitImm16(imm); 3874 } 3875 if (lister != null) lister.RI(miStart, "ADC", dstReg, imm); 3876 } 3877 3878 /** 3879 * Generate a register-displacement--immediate ADC. That is, 3880 * <PRE> 3881 * [dstBase + dstDisp] +CF= (word) imm 3882 * </PRE> 3883 * 3884 * @param dstBase the destination register 3885 * @param dstDisp the destination displacement 3886 * @param imm immediate 3887 */ 3888 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 3889 public final void emitADC_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 3890 int miStart = mi; 3891 setMachineCodes(mi++, (byte) 0x66); 3892 generateREXprefix(false, null, null, dstBase); 3893 // single byte opcode 3894 if (fits(imm,8)) { 3895 setMachineCodes(mi++, (byte) 0x83); 3896 // "register 0x2" is really part of the opcode 3897 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 3898 emitImm8((byte)imm); 3899 } else { 3900 setMachineCodes(mi++, (byte) 0x81); 3901 // "register 0x2" is really part of the opcode 3902 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 3903 emitImm16(imm); 3904 } 3905 if (lister != null) lister.RDI(miStart, "ADC", dstBase, dstDisp, imm); 3906 } 3907 3908 /** 3909 * Generate a register-offset--immediate ADC. That is, 3910 * <PRE> 3911 * [dstIndex<<dstScale + dstDisp] +CF= (word) imm 3912 * </PRE> 3913 * 3914 * @param dstIndex the destination index register 3915 * @param dstScale the destination shift amount 3916 * @param dstDisp the destination displacement 3917 * @param imm immediate 3918 */ 3919 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 3920 public final void emitADC_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 3921 int miStart = mi; 3922 setMachineCodes(mi++, (byte) 0x66); 3923 generateREXprefix(false, null, dstIndex, null); 3924 // single byte opcode 3925 if (fits(imm,8)) { 3926 setMachineCodes(mi++, (byte) 0x83); 3927 // "register 0x2" is really part of the opcode 3928 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 3929 emitImm8((byte)imm); 3930 } else { 3931 setMachineCodes(mi++, (byte) 0x81); 3932 // "register 0x2" is really part of the opcode 3933 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 3934 emitImm16(imm); 3935 } 3936 if (lister != null) lister.RFDI(miStart, "ADC", dstIndex, dstScale, dstDisp, imm); 3937 } 3938 3939 /** 3940 * Generate a absolute--immediate ADC. That is, 3941 * <PRE> 3942 * [dstDisp] +CF= (word) imm 3943 * </PRE> 3944 * 3945 * @param dstDisp the destination displacement 3946 * @param imm immediate 3947 */ 3948 public final void emitADC_Abs_Imm_Word(Address dstDisp, int imm) { 3949 int miStart = mi; 3950 setMachineCodes(mi++, (byte) 0x66); 3951 generateREXprefix(false, null, null, null); 3952 // single byte opcode 3953 if (fits(imm,8)) { 3954 setMachineCodes(mi++, (byte) 0x83); 3955 // "register 0x2" is really part of the opcode 3956 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 3957 emitImm8((byte)imm); 3958 } else { 3959 setMachineCodes(mi++, (byte) 0x81); 3960 // "register 0x2" is really part of the opcode 3961 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 3962 emitImm16(imm); 3963 } 3964 if (lister != null) lister.RAI(miStart, "ADC", dstDisp, imm); 3965 } 3966 3967 /** 3968 * Generate a register-index--immediate ADC. That is, 3969 * <PRE> 3970 * [dstBase + dstIndex<<dstScale + dstDisp] +CF= (word) imm 3971 * </PRE> 3972 * 3973 * @param dstBase the destination base register 3974 * @param dstIndex the destination index register 3975 * @param dstScale the destination shift amount 3976 * @param dstDisp the destination displacement 3977 * @param imm immediate 3978 */ 3979 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 3980 public final void emitADC_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 3981 int miStart = mi; 3982 setMachineCodes(mi++, (byte) 0x66); 3983 generateREXprefix(false, null, dstIndex, dstBase); 3984 // single byte opcode 3985 if (fits(imm,8)) { 3986 setMachineCodes(mi++, (byte) 0x83); 3987 // "register 0x2" is really part of the opcode 3988 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 3989 emitImm8((byte)imm); 3990 } else { 3991 setMachineCodes(mi++, (byte) 0x81); 3992 // "register 0x2" is really part of the opcode 3993 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 3994 emitImm16(imm); 3995 } 3996 if (lister != null) lister.RXDI(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, imm); 3997 } 3998 3999 /** 4000 * Generate a register(indirect)--immediate ADC. That is, 4001 * <PRE> 4002 * [dstBase] +CF= (word) imm 4003 * </PRE> 4004 * 4005 * @param dstBase the destination base register 4006 * @param imm immediate 4007 */ 4008 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4009 public final void emitADC_RegInd_Imm_Word(GPR dstBase, int imm) { 4010 int miStart = mi; 4011 setMachineCodes(mi++, (byte) 0x66); 4012 generateREXprefix(false, null, null, dstBase); 4013 // single byte opcode 4014 if (fits(imm,8)) { 4015 setMachineCodes(mi++, (byte) 0x83); 4016 // "register 0x2" is really part of the opcode 4017 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 4018 emitImm8((byte)imm); 4019 } else { 4020 setMachineCodes(mi++, (byte) 0x81); 4021 // "register 0x2" is really part of the opcode 4022 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 4023 emitImm16(imm); 4024 } 4025 if (lister != null) lister.RNI(miStart, "ADC", dstBase, imm); 4026 } 4027 4028 /** 4029 * Generate a register--immediate ADC. That is, 4030 * <PRE> 4031 * dstReg +CF= (quad) imm 4032 * </PRE> 4033 * 4034 * @param dstReg the destination register 4035 * @param imm immediate 4036 */ 4037 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4038 public final void emitADC_Reg_Imm_Quad(GPR dstReg, int imm) { 4039 int miStart = mi; 4040 // no group 1 to 4 prefix byte 4041 generateREXprefix(true, null, null, dstReg); 4042 // single byte opcode 4043 if (fits(imm,8)) { 4044 setMachineCodes(mi++, (byte) 0x83); 4045 // "register 0x2" is really part of the opcode 4046 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 4047 emitImm8((byte)imm); 4048 } else if (dstReg == EAX) { 4049 setMachineCodes(mi++, (byte) 0x15); 4050 emitImm32(imm); 4051 } else { 4052 setMachineCodes(mi++, (byte) 0x81); 4053 // "register 0x2" is really part of the opcode 4054 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 4055 emitImm32(imm); 4056 } 4057 if (lister != null) lister.RI(miStart, "ADC", dstReg, imm); 4058 } 4059 4060 /** 4061 * Generate a register-displacement--immediate ADC. That is, 4062 * <PRE> 4063 * [dstBase + dstDisp] +CF= (quad) imm 4064 * </PRE> 4065 * 4066 * @param dstBase the destination register 4067 * @param dstDisp the destination displacement 4068 * @param imm immediate 4069 */ 4070 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4071 public final void emitADC_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 4072 int miStart = mi; 4073 // no group 1 to 4 prefix byte 4074 generateREXprefix(true, null, null, dstBase); 4075 // single byte opcode 4076 if (fits(imm,8)) { 4077 setMachineCodes(mi++, (byte) 0x83); 4078 // "register 0x2" is really part of the opcode 4079 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 4080 emitImm8((byte)imm); 4081 } else { 4082 setMachineCodes(mi++, (byte) 0x81); 4083 // "register 0x2" is really part of the opcode 4084 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 4085 emitImm32(imm); 4086 } 4087 if (lister != null) lister.RDI(miStart, "ADC", dstBase, dstDisp, imm); 4088 } 4089 4090 /** 4091 * Generate a register-offset--immediate ADC. That is, 4092 * <PRE> 4093 * [dstIndex<<dstScale + dstDisp] +CF= (quad) imm 4094 * </PRE> 4095 * 4096 * @param dstIndex the destination index register 4097 * @param dstScale the destination shift amount 4098 * @param dstDisp the destination displacement 4099 * @param imm immediate 4100 */ 4101 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4102 public final void emitADC_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 4103 int miStart = mi; 4104 // no group 1 to 4 prefix byte 4105 generateREXprefix(true, null, dstIndex, null); 4106 // single byte opcode 4107 if (fits(imm,8)) { 4108 setMachineCodes(mi++, (byte) 0x83); 4109 // "register 0x2" is really part of the opcode 4110 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 4111 emitImm8((byte)imm); 4112 } else { 4113 setMachineCodes(mi++, (byte) 0x81); 4114 // "register 0x2" is really part of the opcode 4115 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 4116 emitImm32(imm); 4117 } 4118 if (lister != null) lister.RFDI(miStart, "ADC", dstIndex, dstScale, dstDisp, imm); 4119 } 4120 4121 /** 4122 * Generate a absolute--immediate ADC. That is, 4123 * <PRE> 4124 * [dstDisp] +CF= (quad) imm 4125 * </PRE> 4126 * 4127 * @param dstDisp the destination displacement 4128 * @param imm immediate 4129 */ 4130 public final void emitADC_Abs_Imm_Quad(Address dstDisp, int imm) { 4131 int miStart = mi; 4132 // no group 1 to 4 prefix byte 4133 generateREXprefix(true, null, null, null); 4134 // single byte opcode 4135 if (fits(imm,8)) { 4136 setMachineCodes(mi++, (byte) 0x83); 4137 // "register 0x2" is really part of the opcode 4138 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 4139 emitImm8((byte)imm); 4140 } else { 4141 setMachineCodes(mi++, (byte) 0x81); 4142 // "register 0x2" is really part of the opcode 4143 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 4144 emitImm32(imm); 4145 } 4146 if (lister != null) lister.RAI(miStart, "ADC", dstDisp, imm); 4147 } 4148 4149 /** 4150 * Generate a register-index--immediate ADC. That is, 4151 * <PRE> 4152 * [dstBase + dstIndex<<dstScale + dstDisp] +CF= (quad) imm 4153 * </PRE> 4154 * 4155 * @param dstBase the destination base register 4156 * @param dstIndex the destination index register 4157 * @param dstScale the destination shift amount 4158 * @param dstDisp the destination displacement 4159 * @param imm immediate 4160 */ 4161 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4162 public final void emitADC_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 4163 int miStart = mi; 4164 // no group 1 to 4 prefix byte 4165 generateREXprefix(true, null, dstIndex, dstBase); 4166 // single byte opcode 4167 if (fits(imm,8)) { 4168 setMachineCodes(mi++, (byte) 0x83); 4169 // "register 0x2" is really part of the opcode 4170 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 4171 emitImm8((byte)imm); 4172 } else { 4173 setMachineCodes(mi++, (byte) 0x81); 4174 // "register 0x2" is really part of the opcode 4175 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 4176 emitImm32(imm); 4177 } 4178 if (lister != null) lister.RXDI(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, imm); 4179 } 4180 4181 /** 4182 * Generate a register(indirect)--immediate ADC. That is, 4183 * <PRE> 4184 * [dstBase] +CF= (quad) imm 4185 * </PRE> 4186 * 4187 * @param dstBase the destination base register 4188 * @param imm immediate 4189 */ 4190 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4191 public final void emitADC_RegInd_Imm_Quad(GPR dstBase, int imm) { 4192 int miStart = mi; 4193 // no group 1 to 4 prefix byte 4194 generateREXprefix(true, null, null, dstBase); 4195 // single byte opcode 4196 if (fits(imm,8)) { 4197 setMachineCodes(mi++, (byte) 0x83); 4198 // "register 0x2" is really part of the opcode 4199 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 4200 emitImm8((byte)imm); 4201 } else { 4202 setMachineCodes(mi++, (byte) 0x81); 4203 // "register 0x2" is really part of the opcode 4204 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 4205 emitImm32(imm); 4206 } 4207 if (lister != null) lister.RNI(miStart, "ADC", dstBase, imm); 4208 } 4209 4210 /** 4211 * Generate a register--immediate ADC. That is, 4212 * <PRE> 4213 * dstReg +CF= (byte) imm 4214 * </PRE> 4215 * 4216 * @param dstReg the destination register 4217 * @param imm immediate 4218 */ 4219 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4220 public final void emitADC_Reg_Imm_Byte(GPR dstReg, int imm) { 4221 int miStart = mi; 4222 if (dstReg == EAX) { 4223 setMachineCodes(mi++, (byte) 0x14); 4224 emitImm8(imm); 4225 } else { 4226 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 4227 generateREXprefix(false, null, null, dstReg); 4228 setMachineCodes(mi++, (byte) 0x80); 4229 // "register 0x2" is really part of the opcode 4230 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 4231 emitImm8(imm); 4232 } 4233 if (lister != null) lister.RI(miStart, "ADC", dstReg, imm); 4234 } 4235 4236 /** 4237 * Generate a register-displacement--immediate ADC. That is, 4238 * <PRE> 4239 * [dstBase + dstDisp] +CF= (byte) imm 4240 * </PRE> 4241 * 4242 * @param dstBase the destination register 4243 * @param dstDisp the destination displacement 4244 * @param imm immediate 4245 */ 4246 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4247 public final void emitADC_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 4248 int miStart = mi; 4249 generateREXprefix(false, null, null, dstBase); 4250 setMachineCodes(mi++, (byte) 0x80); 4251 // "register 0x2" is really part of the opcode 4252 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 4253 emitImm8(imm); 4254 if (lister != null) lister.RDI(miStart, "ADC", dstBase, dstDisp, imm); 4255 } 4256 4257 /** 4258 * Generate a register-index--immediate ADC. That is, 4259 * <PRE> 4260 * [dstBase + dstIndex<<scale + dstDisp] +CF= (byte) imm 4261 * </PRE> 4262 * 4263 * @param dstBase the destination base register 4264 * @param dstIndex the destination index register 4265 * @param dstScale the destination shift amount 4266 * @param dstDisp the destination displacement 4267 * @param imm immediate 4268 */ 4269 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4270 public final void emitADC_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 4271 int miStart = mi; 4272 generateREXprefix(false, null, dstIndex, dstBase); 4273 setMachineCodes(mi++, (byte) 0x80); 4274 // "register 0x2" is really part of the opcode 4275 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 4276 emitImm8(imm); 4277 if (lister != null) lister.RXDI(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, imm); 4278 } 4279 4280 /** 4281 * Generate a register-offset--immediate ADC. That is, 4282 * <PRE> 4283 * [dstIndex<<dstScale + dstDisp] +CF= (byte) imm 4284 * </PRE> 4285 * 4286 * @param dstIndex the destination index register 4287 * @param dstScale the destination shift amount 4288 * @param dstDisp the destination displacement 4289 * @param imm immediate 4290 */ 4291 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4292 public final void emitADC_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 4293 int miStart = mi; 4294 generateREXprefix(false, null, dstIndex, null); 4295 setMachineCodes(mi++, (byte) 0x80); 4296 // "register 0x2" is really part of the opcode 4297 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 4298 emitImm8(imm); 4299 if (lister != null) lister.RFDI(miStart, "ADC", dstIndex, dstScale, dstDisp, imm); 4300 } 4301 4302 /** 4303 * Generate a absolute--immediate ADC. That is, 4304 * <PRE> 4305 * [dstDisp] +CF= (byte) imm 4306 * </PRE> 4307 * 4308 * @param dstDisp the destination displacement 4309 * @param imm immediate 4310 */ 4311 public final void emitADC_Abs_Imm_Byte(Address dstDisp, int imm) { 4312 int miStart = mi; 4313 generateREXprefix(false, null, null, null); 4314 setMachineCodes(mi++, (byte) 0x80); 4315 // "register 0x2" is really part of the opcode 4316 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 4317 emitImm8(imm); 4318 if (lister != null) lister.RAI(miStart, "ADC", dstDisp, imm); 4319 } 4320 4321 /** 4322 * Generate a register(indirect)--immediate ADC. That is, 4323 * <PRE> 4324 * [dstBase] +CF= (byte) imm 4325 * </PRE> 4326 * 4327 * @param dstBase the destination base register 4328 * @param imm immediate 4329 */ 4330 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4331 public final void emitADC_RegInd_Imm_Byte(GPR dstBase, int imm) { 4332 int miStart = mi; 4333 generateREXprefix(false, null, null, dstBase); 4334 setMachineCodes(mi++, (byte) 0x80); 4335 // "register 0x2" is really part of the opcode 4336 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 4337 emitImm8(imm); 4338 if (lister != null) lister.RNI(miStart, "ADC", dstBase, imm); 4339 } 4340 4341 /** 4342 * Generate a register(indirect)--register ADD. That is, 4343 * <PRE> 4344 * [dstBase] += srcReg 4345 * </PRE> 4346 * 4347 * @param dstBase the destination base 4348 * @param srcReg the source register 4349 */ 4350 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4351 public final void emitADD_RegInd_Reg(GPR dstBase, GPR srcReg) { 4352 int miStart = mi; 4353 // no group 1 to 4 prefix byte 4354 generateREXprefix(false, srcReg, null, dstBase); 4355 // single byte opcode 4356 setMachineCodes(mi++, (byte) 0x01); 4357 emitRegIndirectRegOperands(dstBase, srcReg); 4358 if (lister != null) lister.RNR(miStart, "ADD", dstBase, srcReg); 4359 } 4360 4361 /** 4362 * Generate a register-offset--register ADD. That is, 4363 * <PRE> 4364 * [dstReg<<dstScale + dstDisp] += srcReg 4365 * </PRE> 4366 * 4367 * @param dstIndex the destination index register 4368 * @param dstScale the destination shift amount 4369 * @param dstDisp the destination displacement 4370 * @param srcReg the source register 4371 */ 4372 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 4373 public final void emitADD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 4374 int miStart = mi; 4375 // no group 1 to 4 prefix byte 4376 generateREXprefix(false, srcReg, dstIndex, null); 4377 // single byte opcode 4378 setMachineCodes(mi++, (byte) 0x01); 4379 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 4380 if (lister != null) lister.RFDR(miStart, "ADD", dstIndex, dstScale, dstDisp, srcReg); 4381 } 4382 4383 /** 4384 * Generate a absolute--register ADD. That is, 4385 * <PRE> 4386 * [dstDisp] += srcReg 4387 * </PRE> 4388 * 4389 * @param dstDisp the destination address 4390 * @param srcReg the source register 4391 */ 4392 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 4393 public final void emitADD_Abs_Reg(Address dstDisp, GPR srcReg) { 4394 int miStart = mi; 4395 // no group 1 to 4 prefix byte 4396 generateREXprefix(false, srcReg, null, null); 4397 // single byte opcode 4398 setMachineCodes(mi++, (byte) 0x01); 4399 emitAbsRegOperands(dstDisp, srcReg); 4400 if (lister != null) lister.RAR(miStart, "ADD", dstDisp, srcReg); 4401 } 4402 4403 /** 4404 * Generate a register-index--register ADD. That is, 4405 * <PRE> 4406 * [dstBase + dstIndex<<dstScale + dstDisp] += srcReg 4407 * </PRE> 4408 * 4409 * @param dstBase the base register 4410 * @param dstIndex the destination index register 4411 * @param dstScale the destination shift amount 4412 * @param dstDisp the destination displacement 4413 * @param srcReg the source register 4414 */ 4415 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 4416 public final void emitADD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 4417 int miStart = mi; 4418 // no group 1 to 4 prefix byte 4419 generateREXprefix(false, srcReg, dstIndex, dstBase); 4420 // single byte opcode 4421 setMachineCodes(mi++, (byte) 0x01); 4422 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 4423 if (lister != null) lister.RXDR(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, srcReg); 4424 } 4425 4426 /** 4427 * Generate a register-displacement--register ADD. That is, 4428 * <PRE> 4429 * [dstBase + dstDisp] += srcReg 4430 * </PRE> 4431 * 4432 * @param dstBase the base register 4433 * @param dstDisp the destination displacement 4434 * @param srcReg the source register 4435 */ 4436 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 4437 public final void emitADD_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 4438 int miStart = mi; 4439 // no group 1 to 4 prefix byte 4440 generateREXprefix(false, srcReg, null, dstBase); 4441 // single byte opcode 4442 setMachineCodes(mi++, (byte) 0x01); 4443 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 4444 if (lister != null) lister.RDR(miStart, "ADD", dstBase, dstDisp, srcReg); 4445 } 4446 4447 /** 4448 * Generate a register--register ADD. That is, 4449 * <PRE> 4450 * dstReg += srcReg 4451 * </PRE> 4452 * 4453 * @param dstReg the destination register 4454 * @param srcReg the source register 4455 */ 4456 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4457 public final void emitADD_Reg_Reg(GPR dstReg, GPR srcReg) { 4458 int miStart = mi; 4459 // no group 1 to 4 prefix byte 4460 generateREXprefix(false, srcReg, null, dstReg); 4461 // single byte opcode 4462 setMachineCodes(mi++, (byte) 0x01); 4463 emitRegRegOperands(dstReg, srcReg); 4464 if (lister != null) lister.RR(miStart, "ADD", dstReg, srcReg); 4465 } 4466 4467 /** 4468 * Generate a register--register-displacement ADD. That is, 4469 * <PRE> 4470 * dstReg += [srcReg + srcDisp] 4471 * </PRE> 4472 * 4473 * @param dstReg the destination register 4474 * @param srcBase the source register 4475 * @param srcDisp the source displacement 4476 */ 4477 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4478 public final void emitADD_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 4479 int miStart = mi; 4480 // no group 1 to 4 prefix byte 4481 generateREXprefix(false, dstReg, null, srcBase); 4482 // single byte opcode 4483 setMachineCodes(mi++, (byte) 0x03); 4484 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 4485 if (lister != null) lister.RRD(miStart, "ADD", dstReg, srcBase, srcDisp); 4486 } 4487 4488 /** 4489 * Generate a register--register-offset ADD. That is, 4490 * <PRE> 4491 * dstReg += [srcIndex<<srcScale + srcDisp] 4492 * </PRE> 4493 * 4494 * @param dstReg the destination register 4495 * @param srcIndex the source index register 4496 * @param srcScale the source shift amount 4497 * @param srcDisp the source displacement 4498 */ 4499 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4500 public final void emitADD_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 4501 int miStart = mi; 4502 // no group 1 to 4 prefix byte 4503 generateREXprefix(false, dstReg, srcIndex, null); 4504 // single byte opcode 4505 setMachineCodes(mi++, (byte) 0x03); 4506 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 4507 if (lister != null) lister.RRFD(miStart, "ADD", dstReg, srcIndex, srcScale, srcDisp); 4508 } 4509 4510 /** 4511 * Generate a register--register-offset ADD. That is, 4512 * <PRE> 4513 * dstReg += [srcDisp] 4514 * </PRE> 4515 * 4516 * @param dstReg the destination register 4517 * @param srcDisp the source displacement 4518 */ 4519 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4520 public final void emitADD_Reg_Abs(GPR dstReg, Address srcDisp) { 4521 int miStart = mi; 4522 // no group 1 to 4 prefix byte 4523 generateREXprefix(false, dstReg, null, null); 4524 // single byte opcode 4525 setMachineCodes(mi++, (byte) 0x03); 4526 emitAbsRegOperands(srcDisp, dstReg); 4527 if (lister != null) lister.RRA(miStart, "ADD", dstReg, srcDisp); 4528 } 4529 4530 /** 4531 * Generate a register--register-offset ADD. That is, 4532 * <PRE> 4533 * dstReg += [srcBase + srcIndex<<srcScale + srcDisp] 4534 * </PRE> 4535 * 4536 * @param dstReg the destination register 4537 * @param srcBase the source base register 4538 * @param srcIndex the source index register 4539 * @param srcScale the source shift amount 4540 * @param srcDisp the source displacement 4541 */ 4542 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 4543 public final void emitADD_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 4544 int miStart = mi; 4545 // no group 1 to 4 prefix byte 4546 generateREXprefix(false, dstReg, srcIndex, srcBase); 4547 // single byte opcode 4548 setMachineCodes(mi++, (byte) 0x03); 4549 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 4550 if (lister != null) lister.RRXD(miStart, "ADD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 4551 } 4552 4553 /** 4554 * Generate a register--register(indirect) ADD. That is, 4555 * <PRE> 4556 * dstReg += [srcBase] 4557 * </PRE> 4558 * 4559 * @param dstReg the destination register 4560 * @param srcBase the source base register 4561 */ 4562 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4563 public final void emitADD_Reg_RegInd(GPR dstReg, GPR srcBase) { 4564 int miStart = mi; 4565 // no group 1 to 4 prefix byte 4566 generateREXprefix(false, dstReg, null, srcBase); 4567 // single byte opcode 4568 setMachineCodes(mi++, (byte) 0x03); 4569 emitRegIndirectRegOperands(srcBase, dstReg); 4570 if (lister != null) lister.RRN(miStart, "ADD", dstReg, srcBase); 4571 } 4572 4573 /** 4574 * Generate a register(indirect)--register ADD. That is, 4575 * <PRE> 4576 * [dstBase] += (word) srcReg 4577 * </PRE> 4578 * 4579 * @param dstBase the destination base 4580 * @param srcReg the source register 4581 */ 4582 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4583 public final void emitADD_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 4584 int miStart = mi; 4585 setMachineCodes(mi++, (byte) 0x66); 4586 generateREXprefix(false, srcReg, null, dstBase); 4587 // single byte opcode 4588 setMachineCodes(mi++, (byte) 0x01); 4589 emitRegIndirectRegOperands(dstBase, srcReg); 4590 if (lister != null) lister.RNR(miStart, "ADD", dstBase, srcReg); 4591 } 4592 4593 /** 4594 * Generate a register-offset--register ADD. That is, 4595 * <PRE> 4596 * [dstReg<<dstScale + dstDisp] += (word) srcReg 4597 * </PRE> 4598 * 4599 * @param dstIndex the destination index register 4600 * @param dstScale the destination shift amount 4601 * @param dstDisp the destination displacement 4602 * @param srcReg the source register 4603 */ 4604 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 4605 public final void emitADD_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 4606 int miStart = mi; 4607 setMachineCodes(mi++, (byte) 0x66); 4608 generateREXprefix(false, srcReg, dstIndex, null); 4609 // single byte opcode 4610 setMachineCodes(mi++, (byte) 0x01); 4611 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 4612 if (lister != null) lister.RFDR(miStart, "ADD", dstIndex, dstScale, dstDisp, srcReg); 4613 } 4614 4615 /** 4616 * Generate a absolute--register ADD. That is, 4617 * <PRE> 4618 * [dstDisp] += (word) srcReg 4619 * </PRE> 4620 * 4621 * @param dstDisp the destination address 4622 * @param srcReg the source register 4623 */ 4624 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 4625 public final void emitADD_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 4626 int miStart = mi; 4627 setMachineCodes(mi++, (byte) 0x66); 4628 generateREXprefix(false, srcReg, null, null); 4629 // single byte opcode 4630 setMachineCodes(mi++, (byte) 0x01); 4631 emitAbsRegOperands(dstDisp, srcReg); 4632 if (lister != null) lister.RAR(miStart, "ADD", dstDisp, srcReg); 4633 } 4634 4635 /** 4636 * Generate a register-index--register ADD. That is, 4637 * <PRE> 4638 * [dstBase + dstIndex<<dstScale + dstDisp] += (word) srcReg 4639 * </PRE> 4640 * 4641 * @param dstBase the base register 4642 * @param dstIndex the destination index register 4643 * @param dstScale the destination shift amount 4644 * @param dstDisp the destination displacement 4645 * @param srcReg the source register 4646 */ 4647 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 4648 public final void emitADD_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 4649 int miStart = mi; 4650 setMachineCodes(mi++, (byte) 0x66); 4651 generateREXprefix(false, srcReg, dstIndex, dstBase); 4652 // single byte opcode 4653 setMachineCodes(mi++, (byte) 0x01); 4654 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 4655 if (lister != null) lister.RXDR(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, srcReg); 4656 } 4657 4658 /** 4659 * Generate a register-displacement--register ADD. That is, 4660 * <PRE> 4661 * [dstBase + dstDisp] += (word) srcReg 4662 * </PRE> 4663 * 4664 * @param dstBase the base register 4665 * @param dstDisp the destination displacement 4666 * @param srcReg the source register 4667 */ 4668 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 4669 public final void emitADD_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 4670 int miStart = mi; 4671 setMachineCodes(mi++, (byte) 0x66); 4672 generateREXprefix(false, srcReg, null, dstBase); 4673 // single byte opcode 4674 setMachineCodes(mi++, (byte) 0x01); 4675 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 4676 if (lister != null) lister.RDR(miStart, "ADD", dstBase, dstDisp, srcReg); 4677 } 4678 4679 /** 4680 * Generate a register--register ADD. That is, 4681 * <PRE> 4682 * dstReg += (word) srcReg 4683 * </PRE> 4684 * 4685 * @param dstReg the destination register 4686 * @param srcReg the source register 4687 */ 4688 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4689 public final void emitADD_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 4690 int miStart = mi; 4691 setMachineCodes(mi++, (byte) 0x66); 4692 generateREXprefix(false, srcReg, null, dstReg); 4693 // single byte opcode 4694 setMachineCodes(mi++, (byte) 0x01); 4695 emitRegRegOperands(dstReg, srcReg); 4696 if (lister != null) lister.RR(miStart, "ADD", dstReg, srcReg); 4697 } 4698 4699 /** 4700 * Generate a register--register-displacement ADD. That is, 4701 * <PRE> 4702 * dstReg += (word) [srcReg + srcDisp] 4703 * </PRE> 4704 * 4705 * @param dstReg the destination register 4706 * @param srcBase the source register 4707 * @param srcDisp the source displacement 4708 */ 4709 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4710 public final void emitADD_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 4711 int miStart = mi; 4712 setMachineCodes(mi++, (byte) 0x66); 4713 generateREXprefix(false, dstReg, null, srcBase); 4714 // single byte opcode 4715 setMachineCodes(mi++, (byte) 0x03); 4716 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 4717 if (lister != null) lister.RRD(miStart, "ADD", dstReg, srcBase, srcDisp); 4718 } 4719 4720 /** 4721 * Generate a register--register-offset ADD. That is, 4722 * <PRE> 4723 * dstReg += (word) [srcIndex<<srcScale + srcDisp] 4724 * </PRE> 4725 * 4726 * @param dstReg the destination register 4727 * @param srcIndex the source index register 4728 * @param srcScale the source shift amount 4729 * @param srcDisp the source displacement 4730 */ 4731 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4732 public final void emitADD_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 4733 int miStart = mi; 4734 setMachineCodes(mi++, (byte) 0x66); 4735 generateREXprefix(false, dstReg, srcIndex, null); 4736 // single byte opcode 4737 setMachineCodes(mi++, (byte) 0x03); 4738 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 4739 if (lister != null) lister.RRFD(miStart, "ADD", dstReg, srcIndex, srcScale, srcDisp); 4740 } 4741 4742 /** 4743 * Generate a register--register-offset ADD. That is, 4744 * <PRE> 4745 * dstReg += (word) [srcDisp] 4746 * </PRE> 4747 * 4748 * @param dstReg the destination register 4749 * @param srcDisp the source displacement 4750 */ 4751 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4752 public final void emitADD_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 4753 int miStart = mi; 4754 setMachineCodes(mi++, (byte) 0x66); 4755 generateREXprefix(false, dstReg, null, null); 4756 // single byte opcode 4757 setMachineCodes(mi++, (byte) 0x03); 4758 emitAbsRegOperands(srcDisp, dstReg); 4759 if (lister != null) lister.RRA(miStart, "ADD", dstReg, srcDisp); 4760 } 4761 4762 /** 4763 * Generate a register--register-offset ADD. That is, 4764 * <PRE> 4765 * dstReg += (word) [srcBase + srcIndex<<srcScale + srcDisp] 4766 * </PRE> 4767 * 4768 * @param dstReg the destination register 4769 * @param srcBase the source base register 4770 * @param srcIndex the source index register 4771 * @param srcScale the source shift amount 4772 * @param srcDisp the source displacement 4773 */ 4774 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 4775 public final void emitADD_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 4776 int miStart = mi; 4777 setMachineCodes(mi++, (byte) 0x66); 4778 generateREXprefix(false, dstReg, srcIndex, srcBase); 4779 // single byte opcode 4780 setMachineCodes(mi++, (byte) 0x03); 4781 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 4782 if (lister != null) lister.RRXD(miStart, "ADD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 4783 } 4784 4785 /** 4786 * Generate a register--register(indirect) ADD. That is, 4787 * <PRE> 4788 * dstReg += (word) [srcBase] 4789 * </PRE> 4790 * 4791 * @param dstReg the destination register 4792 * @param srcBase the source base register 4793 */ 4794 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4795 public final void emitADD_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 4796 int miStart = mi; 4797 setMachineCodes(mi++, (byte) 0x66); 4798 generateREXprefix(false, dstReg, null, srcBase); 4799 // single byte opcode 4800 setMachineCodes(mi++, (byte) 0x03); 4801 emitRegIndirectRegOperands(srcBase, dstReg); 4802 if (lister != null) lister.RRN(miStart, "ADD", dstReg, srcBase); 4803 } 4804 4805 /** 4806 * Generate a register(indirect)--register ADD. That is, 4807 * <PRE> 4808 * [dstBase] += (quad) srcReg 4809 * </PRE> 4810 * 4811 * @param dstBase the destination base 4812 * @param srcReg the source register 4813 */ 4814 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4815 public final void emitADD_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 4816 int miStart = mi; 4817 // no group 1 to 4 prefix byte 4818 generateREXprefix(true, srcReg, null, dstBase); 4819 // single byte opcode 4820 setMachineCodes(mi++, (byte) 0x01); 4821 emitRegIndirectRegOperands(dstBase, srcReg); 4822 if (lister != null) lister.RNR(miStart, "ADD", dstBase, srcReg); 4823 } 4824 4825 /** 4826 * Generate a register-offset--register ADD. That is, 4827 * <PRE> 4828 * [dstReg<<dstScale + dstDisp] += (quad) srcReg 4829 * </PRE> 4830 * 4831 * @param dstIndex the destination index register 4832 * @param dstScale the destination shift amount 4833 * @param dstDisp the destination displacement 4834 * @param srcReg the source register 4835 */ 4836 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 4837 public final void emitADD_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 4838 int miStart = mi; 4839 // no group 1 to 4 prefix byte 4840 generateREXprefix(true, srcReg, dstIndex, null); 4841 // single byte opcode 4842 setMachineCodes(mi++, (byte) 0x01); 4843 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 4844 if (lister != null) lister.RFDR(miStart, "ADD", dstIndex, dstScale, dstDisp, srcReg); 4845 } 4846 4847 /** 4848 * Generate a absolute--register ADD. That is, 4849 * <PRE> 4850 * [dstDisp] += (quad) srcReg 4851 * </PRE> 4852 * 4853 * @param dstDisp the destination address 4854 * @param srcReg the source register 4855 */ 4856 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 4857 public final void emitADD_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 4858 int miStart = mi; 4859 // no group 1 to 4 prefix byte 4860 generateREXprefix(true, srcReg, null, null); 4861 // single byte opcode 4862 setMachineCodes(mi++, (byte) 0x01); 4863 emitAbsRegOperands(dstDisp, srcReg); 4864 if (lister != null) lister.RAR(miStart, "ADD", dstDisp, srcReg); 4865 } 4866 4867 /** 4868 * Generate a register-index--register ADD. That is, 4869 * <PRE> 4870 * [dstBase + dstIndex<<dstScale + dstDisp] += (quad) srcReg 4871 * </PRE> 4872 * 4873 * @param dstBase the base register 4874 * @param dstIndex the destination index register 4875 * @param dstScale the destination shift amount 4876 * @param dstDisp the destination displacement 4877 * @param srcReg the source register 4878 */ 4879 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 4880 public final void emitADD_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 4881 int miStart = mi; 4882 // no group 1 to 4 prefix byte 4883 generateREXprefix(true, srcReg, dstIndex, dstBase); 4884 // single byte opcode 4885 setMachineCodes(mi++, (byte) 0x01); 4886 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 4887 if (lister != null) lister.RXDR(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, srcReg); 4888 } 4889 4890 /** 4891 * Generate a register-displacement--register ADD. That is, 4892 * <PRE> 4893 * [dstBase + dstDisp] += (quad) srcReg 4894 * </PRE> 4895 * 4896 * @param dstBase the base register 4897 * @param dstDisp the destination displacement 4898 * @param srcReg the source register 4899 */ 4900 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 4901 public final void emitADD_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 4902 int miStart = mi; 4903 // no group 1 to 4 prefix byte 4904 generateREXprefix(true, srcReg, null, dstBase); 4905 // single byte opcode 4906 setMachineCodes(mi++, (byte) 0x01); 4907 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 4908 if (lister != null) lister.RDR(miStart, "ADD", dstBase, dstDisp, srcReg); 4909 } 4910 4911 /** 4912 * Generate a register--register ADD. That is, 4913 * <PRE> 4914 * dstReg += (quad) srcReg 4915 * </PRE> 4916 * 4917 * @param dstReg the destination register 4918 * @param srcReg the source register 4919 */ 4920 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4921 public final void emitADD_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 4922 int miStart = mi; 4923 // no group 1 to 4 prefix byte 4924 generateREXprefix(true, srcReg, null, dstReg); 4925 // single byte opcode 4926 setMachineCodes(mi++, (byte) 0x01); 4927 emitRegRegOperands(dstReg, srcReg); 4928 if (lister != null) lister.RR(miStart, "ADD", dstReg, srcReg); 4929 } 4930 4931 /** 4932 * Generate a register--register-displacement ADD. That is, 4933 * <PRE> 4934 * dstReg += (quad) [srcReg + srcDisp] 4935 * </PRE> 4936 * 4937 * @param dstReg the destination register 4938 * @param srcBase the source register 4939 * @param srcDisp the source displacement 4940 */ 4941 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4942 public final void emitADD_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 4943 int miStart = mi; 4944 // no group 1 to 4 prefix byte 4945 generateREXprefix(true, dstReg, null, srcBase); 4946 // single byte opcode 4947 setMachineCodes(mi++, (byte) 0x03); 4948 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 4949 if (lister != null) lister.RRD(miStart, "ADD", dstReg, srcBase, srcDisp); 4950 } 4951 4952 /** 4953 * Generate a register--register-offset ADD. That is, 4954 * <PRE> 4955 * dstReg += (quad) [srcIndex<<srcScale + srcDisp] 4956 * </PRE> 4957 * 4958 * @param dstReg the destination register 4959 * @param srcIndex the source index register 4960 * @param srcScale the source shift amount 4961 * @param srcDisp the source displacement 4962 */ 4963 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 4964 public final void emitADD_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 4965 int miStart = mi; 4966 // no group 1 to 4 prefix byte 4967 generateREXprefix(true, dstReg, srcIndex, null); 4968 // single byte opcode 4969 setMachineCodes(mi++, (byte) 0x03); 4970 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 4971 if (lister != null) lister.RRFD(miStart, "ADD", dstReg, srcIndex, srcScale, srcDisp); 4972 } 4973 4974 /** 4975 * Generate a register--register-offset ADD. That is, 4976 * <PRE> 4977 * dstReg += (quad) [srcDisp] 4978 * </PRE> 4979 * 4980 * @param dstReg the destination register 4981 * @param srcDisp the source displacement 4982 */ 4983 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 4984 public final void emitADD_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 4985 int miStart = mi; 4986 // no group 1 to 4 prefix byte 4987 generateREXprefix(true, dstReg, null, null); 4988 // single byte opcode 4989 setMachineCodes(mi++, (byte) 0x03); 4990 emitAbsRegOperands(srcDisp, dstReg); 4991 if (lister != null) lister.RRA(miStart, "ADD", dstReg, srcDisp); 4992 } 4993 4994 /** 4995 * Generate a register--register-offset ADD. That is, 4996 * <PRE> 4997 * dstReg += (quad) [srcBase + srcIndex<<srcScale + srcDisp] 4998 * </PRE> 4999 * 5000 * @param dstReg the destination register 5001 * @param srcBase the source base register 5002 * @param srcIndex the source index register 5003 * @param srcScale the source shift amount 5004 * @param srcDisp the source displacement 5005 */ 5006 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 5007 public final void emitADD_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 5008 int miStart = mi; 5009 // no group 1 to 4 prefix byte 5010 generateREXprefix(true, dstReg, srcIndex, srcBase); 5011 // single byte opcode 5012 setMachineCodes(mi++, (byte) 0x03); 5013 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 5014 if (lister != null) lister.RRXD(miStart, "ADD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 5015 } 5016 5017 /** 5018 * Generate a register--register(indirect) ADD. That is, 5019 * <PRE> 5020 * dstReg += (quad) [srcBase] 5021 * </PRE> 5022 * 5023 * @param dstReg the destination register 5024 * @param srcBase the source base register 5025 */ 5026 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5027 public final void emitADD_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 5028 int miStart = mi; 5029 // no group 1 to 4 prefix byte 5030 generateREXprefix(true, dstReg, null, srcBase); 5031 // single byte opcode 5032 setMachineCodes(mi++, (byte) 0x03); 5033 emitRegIndirectRegOperands(srcBase, dstReg); 5034 if (lister != null) lister.RRN(miStart, "ADD", dstReg, srcBase); 5035 } 5036 5037 /** 5038 * Generate a register(indirect)--register ADD. That is, 5039 * <PRE> 5040 * [dstBase] += (byte) srcReg 5041 * </PRE> 5042 * 5043 * @param dstBase the destination base 5044 * @param srcReg the source register 5045 */ 5046 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5047 public final void emitADD_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 5048 int miStart = mi; 5049 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 5050 // no group 1 to 4 prefix byte 5051 generateREXprefix(false, srcReg, null, dstBase); 5052 // single byte opcode 5053 setMachineCodes(mi++, (byte) 0x00); 5054 emitRegIndirectRegOperands(dstBase, srcReg); 5055 if (lister != null) lister.RNR(miStart, "ADD", dstBase, srcReg); 5056 } 5057 5058 /** 5059 * Generate a register-offset--register ADD. That is, 5060 * <PRE> 5061 * [dstReg<<dstScale + dstDisp] += (byte) srcReg 5062 * </PRE> 5063 * 5064 * @param dstIndex the destination index register 5065 * @param dstScale the destination shift amount 5066 * @param dstDisp the destination displacement 5067 * @param srcReg the source register 5068 */ 5069 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 5070 public final void emitADD_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 5071 int miStart = mi; 5072 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 5073 // no group 1 to 4 prefix byte 5074 generateREXprefix(false, srcReg, dstIndex, null); 5075 // single byte opcode 5076 setMachineCodes(mi++, (byte) 0x00); 5077 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 5078 if (lister != null) lister.RFDR(miStart, "ADD", dstIndex, dstScale, dstDisp, srcReg); 5079 } 5080 5081 /** 5082 * Generate a absolute--register ADD. That is, 5083 * <PRE> 5084 * [dstDisp] += (byte) srcReg 5085 * </PRE> 5086 * 5087 * @param dstDisp the destination address 5088 * @param srcReg the source register 5089 */ 5090 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 5091 public final void emitADD_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 5092 int miStart = mi; 5093 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 5094 // no group 1 to 4 prefix byte 5095 generateREXprefix(false, srcReg, null, null); 5096 // single byte opcode 5097 setMachineCodes(mi++, (byte) 0x00); 5098 emitAbsRegOperands(dstDisp, srcReg); 5099 if (lister != null) lister.RAR(miStart, "ADD", dstDisp, srcReg); 5100 } 5101 5102 /** 5103 * Generate a register-index--register ADD. That is, 5104 * <PRE> 5105 * [dstBase + dstIndex<<dstScale + dstDisp] += (byte) srcReg 5106 * </PRE> 5107 * 5108 * @param dstBase the base register 5109 * @param dstIndex the destination index register 5110 * @param dstScale the destination shift amount 5111 * @param dstDisp the destination displacement 5112 * @param srcReg the source register 5113 */ 5114 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 5115 public final void emitADD_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 5116 int miStart = mi; 5117 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 5118 // no group 1 to 4 prefix byte 5119 generateREXprefix(false, srcReg, dstIndex, dstBase); 5120 // single byte opcode 5121 setMachineCodes(mi++, (byte) 0x00); 5122 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 5123 if (lister != null) lister.RXDR(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, srcReg); 5124 } 5125 5126 /** 5127 * Generate a register-displacement--register ADD. That is, 5128 * <PRE> 5129 * [dstBase + dstDisp] += (byte) srcReg 5130 * </PRE> 5131 * 5132 * @param dstBase the base register 5133 * @param dstDisp the destination displacement 5134 * @param srcReg the source register 5135 */ 5136 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 5137 public final void emitADD_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 5138 int miStart = mi; 5139 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 5140 // no group 1 to 4 prefix byte 5141 generateREXprefix(false, srcReg, null, dstBase); 5142 // single byte opcode 5143 setMachineCodes(mi++, (byte) 0x00); 5144 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 5145 if (lister != null) lister.RDR(miStart, "ADD", dstBase, dstDisp, srcReg); 5146 } 5147 5148 /** 5149 * Generate a register--register ADD. That is, 5150 * <PRE> 5151 * dstReg += (byte) srcReg 5152 * </PRE> 5153 * 5154 * @param dstReg the destination register 5155 * @param srcReg the source register 5156 */ 5157 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5158 public final void emitADD_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 5159 int miStart = mi; 5160 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 5161 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 5162 // no group 1 to 4 prefix byte 5163 generateREXprefix(false, srcReg, null, dstReg); 5164 // single byte opcode 5165 setMachineCodes(mi++, (byte) 0x00); 5166 emitRegRegOperands(dstReg, srcReg); 5167 if (lister != null) lister.RR(miStart, "ADD", dstReg, srcReg); 5168 } 5169 5170 /** 5171 * Generate a register--register-displacement ADD. That is, 5172 * <PRE> 5173 * dstReg += (byte) [srcReg + srcDisp] 5174 * </PRE> 5175 * 5176 * @param dstReg the destination register 5177 * @param srcBase the source register 5178 * @param srcDisp the source displacement 5179 */ 5180 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5181 public final void emitADD_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 5182 int miStart = mi; 5183 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 5184 // no group 1 to 4 prefix byte 5185 generateREXprefix(false, dstReg, null, srcBase); 5186 // single byte opcode 5187 setMachineCodes(mi++, (byte) 0x02); 5188 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 5189 if (lister != null) lister.RRD(miStart, "ADD", dstReg, srcBase, srcDisp); 5190 } 5191 5192 /** 5193 * Generate a register--register-offset ADD. That is, 5194 * <PRE> 5195 * dstReg += (byte) [srcIndex<<srcScale + srcDisp] 5196 * </PRE> 5197 * 5198 * @param dstReg the destination register 5199 * @param srcIndex the source index register 5200 * @param srcScale the source shift amount 5201 * @param srcDisp the source displacement 5202 */ 5203 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5204 public final void emitADD_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 5205 int miStart = mi; 5206 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 5207 // no group 1 to 4 prefix byte 5208 generateREXprefix(false, dstReg, srcIndex, null); 5209 // single byte opcode 5210 setMachineCodes(mi++, (byte) 0x02); 5211 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 5212 if (lister != null) lister.RRFD(miStart, "ADD", dstReg, srcIndex, srcScale, srcDisp); 5213 } 5214 5215 /** 5216 * Generate a register--register-offset ADD. That is, 5217 * <PRE> 5218 * dstReg += (byte) [srcDisp] 5219 * </PRE> 5220 * 5221 * @param dstReg the destination register 5222 * @param srcDisp the source displacement 5223 */ 5224 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5225 public final void emitADD_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 5226 int miStart = mi; 5227 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 5228 // no group 1 to 4 prefix byte 5229 generateREXprefix(false, dstReg, null, null); 5230 // single byte opcode 5231 setMachineCodes(mi++, (byte) 0x02); 5232 emitAbsRegOperands(srcDisp, dstReg); 5233 if (lister != null) lister.RRA(miStart, "ADD", dstReg, srcDisp); 5234 } 5235 5236 /** 5237 * Generate a register--register-offset ADD. That is, 5238 * <PRE> 5239 * dstReg += (byte) [srcBase + srcIndex<<srcScale + srcDisp] 5240 * </PRE> 5241 * 5242 * @param dstReg the destination register 5243 * @param srcBase the source base register 5244 * @param srcIndex the source index register 5245 * @param srcScale the source shift amount 5246 * @param srcDisp the source displacement 5247 */ 5248 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 5249 public final void emitADD_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 5250 int miStart = mi; 5251 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 5252 // no group 1 to 4 prefix byte 5253 generateREXprefix(false, dstReg, srcIndex, srcBase); 5254 // single byte opcode 5255 setMachineCodes(mi++, (byte) 0x02); 5256 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 5257 if (lister != null) lister.RRXD(miStart, "ADD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 5258 } 5259 5260 /** 5261 * Generate a register--register(indirect) ADD. That is, 5262 * <PRE> 5263 * dstReg += (byte) [srcBase] 5264 * </PRE> 5265 * 5266 * @param dstReg the destination register 5267 * @param srcBase the source base register 5268 */ 5269 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5270 public final void emitADD_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 5271 int miStart = mi; 5272 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 5273 // no group 1 to 4 prefix byte 5274 generateREXprefix(false, dstReg, null, srcBase); 5275 // single byte opcode 5276 setMachineCodes(mi++, (byte) 0x02); 5277 emitRegIndirectRegOperands(srcBase, dstReg); 5278 if (lister != null) lister.RRN(miStart, "ADD", dstReg, srcBase); 5279 } 5280 5281 /** 5282 * Generate a register--immediate ADD. That is, 5283 * <PRE> 5284 * dstReg += imm 5285 * </PRE> 5286 * 5287 * @param dstReg the destination register 5288 * @param imm immediate 5289 */ 5290 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5291 public final void emitADD_Reg_Imm(GPR dstReg, int imm) { 5292 int miStart = mi; 5293 // no group 1 to 4 prefix byte 5294 generateREXprefix(false, null, null, dstReg); 5295 // single byte opcode 5296 if (fits(imm,8)) { 5297 setMachineCodes(mi++, (byte) 0x83); 5298 // "register 0x0" is really part of the opcode 5299 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 5300 emitImm8((byte)imm); 5301 } else if (dstReg == EAX) { 5302 setMachineCodes(mi++, (byte) 0x05); 5303 emitImm32(imm); 5304 } else { 5305 setMachineCodes(mi++, (byte) 0x81); 5306 // "register 0x0" is really part of the opcode 5307 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 5308 emitImm32(imm); 5309 } 5310 if (lister != null) lister.RI(miStart, "ADD", dstReg, imm); 5311 } 5312 5313 /** 5314 * Generate a register-displacement--immediate ADD. That is, 5315 * <PRE> 5316 * [dstBase + dstDisp] += imm 5317 * </PRE> 5318 * 5319 * @param dstBase the destination register 5320 * @param dstDisp the destination displacement 5321 * @param imm immediate 5322 */ 5323 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5324 public final void emitADD_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 5325 int miStart = mi; 5326 // no group 1 to 4 prefix byte 5327 generateREXprefix(false, null, null, dstBase); 5328 // single byte opcode 5329 if (fits(imm,8)) { 5330 setMachineCodes(mi++, (byte) 0x83); 5331 // "register 0x0" is really part of the opcode 5332 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 5333 emitImm8((byte)imm); 5334 } else { 5335 setMachineCodes(mi++, (byte) 0x81); 5336 // "register 0x0" is really part of the opcode 5337 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 5338 emitImm32(imm); 5339 } 5340 if (lister != null) lister.RDI(miStart, "ADD", dstBase, dstDisp, imm); 5341 } 5342 5343 /** 5344 * Generate a register-offset--immediate ADD. That is, 5345 * <PRE> 5346 * [dstIndex<<dstScale + dstDisp] += imm 5347 * </PRE> 5348 * 5349 * @param dstIndex the destination index register 5350 * @param dstScale the destination shift amount 5351 * @param dstDisp the destination displacement 5352 * @param imm immediate 5353 */ 5354 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5355 public final void emitADD_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 5356 int miStart = mi; 5357 // no group 1 to 4 prefix byte 5358 generateREXprefix(false, null, dstIndex, null); 5359 // single byte opcode 5360 if (fits(imm,8)) { 5361 setMachineCodes(mi++, (byte) 0x83); 5362 // "register 0x0" is really part of the opcode 5363 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5364 emitImm8((byte)imm); 5365 } else { 5366 setMachineCodes(mi++, (byte) 0x81); 5367 // "register 0x0" is really part of the opcode 5368 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5369 emitImm32(imm); 5370 } 5371 if (lister != null) lister.RFDI(miStart, "ADD", dstIndex, dstScale, dstDisp, imm); 5372 } 5373 5374 /** 5375 * Generate a absolute--immediate ADD. That is, 5376 * <PRE> 5377 * [dstDisp] += imm 5378 * </PRE> 5379 * 5380 * @param dstDisp the destination displacement 5381 * @param imm immediate 5382 */ 5383 public final void emitADD_Abs_Imm(Address dstDisp, int imm) { 5384 int miStart = mi; 5385 // no group 1 to 4 prefix byte 5386 generateREXprefix(false, null, null, null); 5387 // single byte opcode 5388 if (fits(imm,8)) { 5389 setMachineCodes(mi++, (byte) 0x83); 5390 // "register 0x0" is really part of the opcode 5391 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 5392 emitImm8((byte)imm); 5393 } else { 5394 setMachineCodes(mi++, (byte) 0x81); 5395 // "register 0x0" is really part of the opcode 5396 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 5397 emitImm32(imm); 5398 } 5399 if (lister != null) lister.RAI(miStart, "ADD", dstDisp, imm); 5400 } 5401 5402 /** 5403 * Generate a register-index--immediate ADD. That is, 5404 * <PRE> 5405 * [dstBase + dstIndex<<dstScale + dstDisp] += imm 5406 * </PRE> 5407 * 5408 * @param dstBase the destination base register 5409 * @param dstIndex the destination index register 5410 * @param dstScale the destination shift amount 5411 * @param dstDisp the destination displacement 5412 * @param imm immediate 5413 */ 5414 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5415 public final void emitADD_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 5416 int miStart = mi; 5417 // no group 1 to 4 prefix byte 5418 generateREXprefix(false, null, dstIndex, dstBase); 5419 // single byte opcode 5420 if (fits(imm,8)) { 5421 setMachineCodes(mi++, (byte) 0x83); 5422 // "register 0x0" is really part of the opcode 5423 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5424 emitImm8((byte)imm); 5425 } else { 5426 setMachineCodes(mi++, (byte) 0x81); 5427 // "register 0x0" is really part of the opcode 5428 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5429 emitImm32(imm); 5430 } 5431 if (lister != null) lister.RXDI(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, imm); 5432 } 5433 5434 /** 5435 * Generate a register(indirect)--immediate ADD. That is, 5436 * <PRE> 5437 * [dstBase] += imm 5438 * </PRE> 5439 * 5440 * @param dstBase the destination base register 5441 * @param imm immediate 5442 */ 5443 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5444 public final void emitADD_RegInd_Imm(GPR dstBase, int imm) { 5445 int miStart = mi; 5446 // no group 1 to 4 prefix byte 5447 generateREXprefix(false, null, null, dstBase); 5448 // single byte opcode 5449 if (fits(imm,8)) { 5450 setMachineCodes(mi++, (byte) 0x83); 5451 // "register 0x0" is really part of the opcode 5452 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 5453 emitImm8((byte)imm); 5454 } else { 5455 setMachineCodes(mi++, (byte) 0x81); 5456 // "register 0x0" is really part of the opcode 5457 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 5458 emitImm32(imm); 5459 } 5460 if (lister != null) lister.RNI(miStart, "ADD", dstBase, imm); 5461 } 5462 5463 /** 5464 * Generate a register--immediate ADD. That is, 5465 * <PRE> 5466 * dstReg += (word) imm 5467 * </PRE> 5468 * 5469 * @param dstReg the destination register 5470 * @param imm immediate 5471 */ 5472 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5473 public final void emitADD_Reg_Imm_Word(GPR dstReg, int imm) { 5474 int miStart = mi; 5475 setMachineCodes(mi++, (byte) 0x66); 5476 generateREXprefix(false, null, null, dstReg); 5477 // single byte opcode 5478 if (fits(imm,8)) { 5479 setMachineCodes(mi++, (byte) 0x83); 5480 // "register 0x0" is really part of the opcode 5481 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 5482 emitImm8((byte)imm); 5483 } else if (dstReg == EAX) { 5484 setMachineCodes(mi++, (byte) 0x05); 5485 emitImm16(imm); 5486 } else { 5487 setMachineCodes(mi++, (byte) 0x81); 5488 // "register 0x0" is really part of the opcode 5489 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 5490 emitImm16(imm); 5491 } 5492 if (lister != null) lister.RI(miStart, "ADD", dstReg, imm); 5493 } 5494 5495 /** 5496 * Generate a register-displacement--immediate ADD. That is, 5497 * <PRE> 5498 * [dstBase + dstDisp] += (word) imm 5499 * </PRE> 5500 * 5501 * @param dstBase the destination register 5502 * @param dstDisp the destination displacement 5503 * @param imm immediate 5504 */ 5505 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5506 public final void emitADD_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 5507 int miStart = mi; 5508 setMachineCodes(mi++, (byte) 0x66); 5509 generateREXprefix(false, null, null, dstBase); 5510 // single byte opcode 5511 if (fits(imm,8)) { 5512 setMachineCodes(mi++, (byte) 0x83); 5513 // "register 0x0" is really part of the opcode 5514 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 5515 emitImm8((byte)imm); 5516 } else { 5517 setMachineCodes(mi++, (byte) 0x81); 5518 // "register 0x0" is really part of the opcode 5519 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 5520 emitImm16(imm); 5521 } 5522 if (lister != null) lister.RDI(miStart, "ADD", dstBase, dstDisp, imm); 5523 } 5524 5525 /** 5526 * Generate a register-offset--immediate ADD. That is, 5527 * <PRE> 5528 * [dstIndex<<dstScale + dstDisp] += (word) imm 5529 * </PRE> 5530 * 5531 * @param dstIndex the destination index register 5532 * @param dstScale the destination shift amount 5533 * @param dstDisp the destination displacement 5534 * @param imm immediate 5535 */ 5536 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5537 public final void emitADD_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 5538 int miStart = mi; 5539 setMachineCodes(mi++, (byte) 0x66); 5540 generateREXprefix(false, null, dstIndex, null); 5541 // single byte opcode 5542 if (fits(imm,8)) { 5543 setMachineCodes(mi++, (byte) 0x83); 5544 // "register 0x0" is really part of the opcode 5545 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5546 emitImm8((byte)imm); 5547 } else { 5548 setMachineCodes(mi++, (byte) 0x81); 5549 // "register 0x0" is really part of the opcode 5550 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5551 emitImm16(imm); 5552 } 5553 if (lister != null) lister.RFDI(miStart, "ADD", dstIndex, dstScale, dstDisp, imm); 5554 } 5555 5556 /** 5557 * Generate a absolute--immediate ADD. That is, 5558 * <PRE> 5559 * [dstDisp] += (word) imm 5560 * </PRE> 5561 * 5562 * @param dstDisp the destination displacement 5563 * @param imm immediate 5564 */ 5565 public final void emitADD_Abs_Imm_Word(Address dstDisp, int imm) { 5566 int miStart = mi; 5567 setMachineCodes(mi++, (byte) 0x66); 5568 generateREXprefix(false, null, null, null); 5569 // single byte opcode 5570 if (fits(imm,8)) { 5571 setMachineCodes(mi++, (byte) 0x83); 5572 // "register 0x0" is really part of the opcode 5573 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 5574 emitImm8((byte)imm); 5575 } else { 5576 setMachineCodes(mi++, (byte) 0x81); 5577 // "register 0x0" is really part of the opcode 5578 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 5579 emitImm16(imm); 5580 } 5581 if (lister != null) lister.RAI(miStart, "ADD", dstDisp, imm); 5582 } 5583 5584 /** 5585 * Generate a register-index--immediate ADD. That is, 5586 * <PRE> 5587 * [dstBase + dstIndex<<dstScale + dstDisp] += (word) imm 5588 * </PRE> 5589 * 5590 * @param dstBase the destination base register 5591 * @param dstIndex the destination index register 5592 * @param dstScale the destination shift amount 5593 * @param dstDisp the destination displacement 5594 * @param imm immediate 5595 */ 5596 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5597 public final void emitADD_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 5598 int miStart = mi; 5599 setMachineCodes(mi++, (byte) 0x66); 5600 generateREXprefix(false, null, dstIndex, dstBase); 5601 // single byte opcode 5602 if (fits(imm,8)) { 5603 setMachineCodes(mi++, (byte) 0x83); 5604 // "register 0x0" is really part of the opcode 5605 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5606 emitImm8((byte)imm); 5607 } else { 5608 setMachineCodes(mi++, (byte) 0x81); 5609 // "register 0x0" is really part of the opcode 5610 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5611 emitImm16(imm); 5612 } 5613 if (lister != null) lister.RXDI(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, imm); 5614 } 5615 5616 /** 5617 * Generate a register(indirect)--immediate ADD. That is, 5618 * <PRE> 5619 * [dstBase] += (word) imm 5620 * </PRE> 5621 * 5622 * @param dstBase the destination base register 5623 * @param imm immediate 5624 */ 5625 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5626 public final void emitADD_RegInd_Imm_Word(GPR dstBase, int imm) { 5627 int miStart = mi; 5628 setMachineCodes(mi++, (byte) 0x66); 5629 generateREXprefix(false, null, null, dstBase); 5630 // single byte opcode 5631 if (fits(imm,8)) { 5632 setMachineCodes(mi++, (byte) 0x83); 5633 // "register 0x0" is really part of the opcode 5634 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 5635 emitImm8((byte)imm); 5636 } else { 5637 setMachineCodes(mi++, (byte) 0x81); 5638 // "register 0x0" is really part of the opcode 5639 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 5640 emitImm16(imm); 5641 } 5642 if (lister != null) lister.RNI(miStart, "ADD", dstBase, imm); 5643 } 5644 5645 /** 5646 * Generate a register--immediate ADD. That is, 5647 * <PRE> 5648 * dstReg += (quad) imm 5649 * </PRE> 5650 * 5651 * @param dstReg the destination register 5652 * @param imm immediate 5653 */ 5654 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5655 public final void emitADD_Reg_Imm_Quad(GPR dstReg, int imm) { 5656 int miStart = mi; 5657 // no group 1 to 4 prefix byte 5658 generateREXprefix(true, null, null, dstReg); 5659 // single byte opcode 5660 if (fits(imm,8)) { 5661 setMachineCodes(mi++, (byte) 0x83); 5662 // "register 0x0" is really part of the opcode 5663 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 5664 emitImm8((byte)imm); 5665 } else if (dstReg == EAX) { 5666 setMachineCodes(mi++, (byte) 0x05); 5667 emitImm32(imm); 5668 } else { 5669 setMachineCodes(mi++, (byte) 0x81); 5670 // "register 0x0" is really part of the opcode 5671 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 5672 emitImm32(imm); 5673 } 5674 if (lister != null) lister.RI(miStart, "ADD", dstReg, imm); 5675 } 5676 5677 /** 5678 * Generate a register-displacement--immediate ADD. That is, 5679 * <PRE> 5680 * [dstBase + dstDisp] += (quad) imm 5681 * </PRE> 5682 * 5683 * @param dstBase the destination register 5684 * @param dstDisp the destination displacement 5685 * @param imm immediate 5686 */ 5687 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5688 public final void emitADD_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 5689 int miStart = mi; 5690 // no group 1 to 4 prefix byte 5691 generateREXprefix(true, null, null, dstBase); 5692 // single byte opcode 5693 if (fits(imm,8)) { 5694 setMachineCodes(mi++, (byte) 0x83); 5695 // "register 0x0" is really part of the opcode 5696 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 5697 emitImm8((byte)imm); 5698 } else { 5699 setMachineCodes(mi++, (byte) 0x81); 5700 // "register 0x0" is really part of the opcode 5701 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 5702 emitImm32(imm); 5703 } 5704 if (lister != null) lister.RDI(miStart, "ADD", dstBase, dstDisp, imm); 5705 } 5706 5707 /** 5708 * Generate a register-offset--immediate ADD. That is, 5709 * <PRE> 5710 * [dstIndex<<dstScale + dstDisp] += (quad) imm 5711 * </PRE> 5712 * 5713 * @param dstIndex the destination index register 5714 * @param dstScale the destination shift amount 5715 * @param dstDisp the destination displacement 5716 * @param imm immediate 5717 */ 5718 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5719 public final void emitADD_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 5720 int miStart = mi; 5721 // no group 1 to 4 prefix byte 5722 generateREXprefix(true, null, dstIndex, null); 5723 // single byte opcode 5724 if (fits(imm,8)) { 5725 setMachineCodes(mi++, (byte) 0x83); 5726 // "register 0x0" is really part of the opcode 5727 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5728 emitImm8((byte)imm); 5729 } else { 5730 setMachineCodes(mi++, (byte) 0x81); 5731 // "register 0x0" is really part of the opcode 5732 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5733 emitImm32(imm); 5734 } 5735 if (lister != null) lister.RFDI(miStart, "ADD", dstIndex, dstScale, dstDisp, imm); 5736 } 5737 5738 /** 5739 * Generate a absolute--immediate ADD. That is, 5740 * <PRE> 5741 * [dstDisp] += (quad) imm 5742 * </PRE> 5743 * 5744 * @param dstDisp the destination displacement 5745 * @param imm immediate 5746 */ 5747 public final void emitADD_Abs_Imm_Quad(Address dstDisp, int imm) { 5748 int miStart = mi; 5749 // no group 1 to 4 prefix byte 5750 generateREXprefix(true, null, null, null); 5751 // single byte opcode 5752 if (fits(imm,8)) { 5753 setMachineCodes(mi++, (byte) 0x83); 5754 // "register 0x0" is really part of the opcode 5755 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 5756 emitImm8((byte)imm); 5757 } else { 5758 setMachineCodes(mi++, (byte) 0x81); 5759 // "register 0x0" is really part of the opcode 5760 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 5761 emitImm32(imm); 5762 } 5763 if (lister != null) lister.RAI(miStart, "ADD", dstDisp, imm); 5764 } 5765 5766 /** 5767 * Generate a register-index--immediate ADD. That is, 5768 * <PRE> 5769 * [dstBase + dstIndex<<dstScale + dstDisp] += (quad) imm 5770 * </PRE> 5771 * 5772 * @param dstBase the destination base register 5773 * @param dstIndex the destination index register 5774 * @param dstScale the destination shift amount 5775 * @param dstDisp the destination displacement 5776 * @param imm immediate 5777 */ 5778 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5779 public final void emitADD_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 5780 int miStart = mi; 5781 // no group 1 to 4 prefix byte 5782 generateREXprefix(true, null, dstIndex, dstBase); 5783 // single byte opcode 5784 if (fits(imm,8)) { 5785 setMachineCodes(mi++, (byte) 0x83); 5786 // "register 0x0" is really part of the opcode 5787 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5788 emitImm8((byte)imm); 5789 } else { 5790 setMachineCodes(mi++, (byte) 0x81); 5791 // "register 0x0" is really part of the opcode 5792 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5793 emitImm32(imm); 5794 } 5795 if (lister != null) lister.RXDI(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, imm); 5796 } 5797 5798 /** 5799 * Generate a register(indirect)--immediate ADD. That is, 5800 * <PRE> 5801 * [dstBase] += (quad) imm 5802 * </PRE> 5803 * 5804 * @param dstBase the destination base register 5805 * @param imm immediate 5806 */ 5807 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5808 public final void emitADD_RegInd_Imm_Quad(GPR dstBase, int imm) { 5809 int miStart = mi; 5810 // no group 1 to 4 prefix byte 5811 generateREXprefix(true, null, null, dstBase); 5812 // single byte opcode 5813 if (fits(imm,8)) { 5814 setMachineCodes(mi++, (byte) 0x83); 5815 // "register 0x0" is really part of the opcode 5816 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 5817 emitImm8((byte)imm); 5818 } else { 5819 setMachineCodes(mi++, (byte) 0x81); 5820 // "register 0x0" is really part of the opcode 5821 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 5822 emitImm32(imm); 5823 } 5824 if (lister != null) lister.RNI(miStart, "ADD", dstBase, imm); 5825 } 5826 5827 /** 5828 * Generate a register--immediate ADD. That is, 5829 * <PRE> 5830 * dstReg += (byte) imm 5831 * </PRE> 5832 * 5833 * @param dstReg the destination register 5834 * @param imm immediate 5835 */ 5836 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5837 public final void emitADD_Reg_Imm_Byte(GPR dstReg, int imm) { 5838 int miStart = mi; 5839 if (dstReg == EAX) { 5840 setMachineCodes(mi++, (byte) 0x04); 5841 emitImm8(imm); 5842 } else { 5843 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 5844 generateREXprefix(false, null, null, dstReg); 5845 setMachineCodes(mi++, (byte) 0x80); 5846 // "register 0x0" is really part of the opcode 5847 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 5848 emitImm8(imm); 5849 } 5850 if (lister != null) lister.RI(miStart, "ADD", dstReg, imm); 5851 } 5852 5853 /** 5854 * Generate a register-displacement--immediate ADD. That is, 5855 * <PRE> 5856 * [dstBase + dstDisp] += (byte) imm 5857 * </PRE> 5858 * 5859 * @param dstBase the destination register 5860 * @param dstDisp the destination displacement 5861 * @param imm immediate 5862 */ 5863 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5864 public final void emitADD_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 5865 int miStart = mi; 5866 generateREXprefix(false, null, null, dstBase); 5867 setMachineCodes(mi++, (byte) 0x80); 5868 // "register 0x0" is really part of the opcode 5869 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 5870 emitImm8(imm); 5871 if (lister != null) lister.RDI(miStart, "ADD", dstBase, dstDisp, imm); 5872 } 5873 5874 /** 5875 * Generate a register-index--immediate ADD. That is, 5876 * <PRE> 5877 * [dstBase + dstIndex<<scale + dstDisp] += (byte) imm 5878 * </PRE> 5879 * 5880 * @param dstBase the destination base register 5881 * @param dstIndex the destination index register 5882 * @param dstScale the destination shift amount 5883 * @param dstDisp the destination displacement 5884 * @param imm immediate 5885 */ 5886 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5887 public final void emitADD_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 5888 int miStart = mi; 5889 generateREXprefix(false, null, dstIndex, dstBase); 5890 setMachineCodes(mi++, (byte) 0x80); 5891 // "register 0x0" is really part of the opcode 5892 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5893 emitImm8(imm); 5894 if (lister != null) lister.RXDI(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, imm); 5895 } 5896 5897 /** 5898 * Generate a register-offset--immediate ADD. That is, 5899 * <PRE> 5900 * [dstIndex<<dstScale + dstDisp] += (byte) imm 5901 * </PRE> 5902 * 5903 * @param dstIndex the destination index register 5904 * @param dstScale the destination shift amount 5905 * @param dstDisp the destination displacement 5906 * @param imm immediate 5907 */ 5908 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5909 public final void emitADD_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 5910 int miStart = mi; 5911 generateREXprefix(false, null, dstIndex, null); 5912 setMachineCodes(mi++, (byte) 0x80); 5913 // "register 0x0" is really part of the opcode 5914 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 5915 emitImm8(imm); 5916 if (lister != null) lister.RFDI(miStart, "ADD", dstIndex, dstScale, dstDisp, imm); 5917 } 5918 5919 /** 5920 * Generate a absolute--immediate ADD. That is, 5921 * <PRE> 5922 * [dstDisp] += (byte) imm 5923 * </PRE> 5924 * 5925 * @param dstDisp the destination displacement 5926 * @param imm immediate 5927 */ 5928 public final void emitADD_Abs_Imm_Byte(Address dstDisp, int imm) { 5929 int miStart = mi; 5930 generateREXprefix(false, null, null, null); 5931 setMachineCodes(mi++, (byte) 0x80); 5932 // "register 0x0" is really part of the opcode 5933 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 5934 emitImm8(imm); 5935 if (lister != null) lister.RAI(miStart, "ADD", dstDisp, imm); 5936 } 5937 5938 /** 5939 * Generate a register(indirect)--immediate ADD. That is, 5940 * <PRE> 5941 * [dstBase] += (byte) imm 5942 * </PRE> 5943 * 5944 * @param dstBase the destination base register 5945 * @param imm immediate 5946 */ 5947 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 5948 public final void emitADD_RegInd_Imm_Byte(GPR dstBase, int imm) { 5949 int miStart = mi; 5950 generateREXprefix(false, null, null, dstBase); 5951 setMachineCodes(mi++, (byte) 0x80); 5952 // "register 0x0" is really part of the opcode 5953 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 5954 emitImm8(imm); 5955 if (lister != null) lister.RNI(miStart, "ADD", dstBase, imm); 5956 } 5957 5958 /** 5959 * Generate a register(indirect)--register AND. That is, 5960 * <PRE> 5961 * [dstBase] &= srcReg 5962 * </PRE> 5963 * 5964 * @param dstBase the destination base 5965 * @param srcReg the source register 5966 */ 5967 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 5968 public final void emitAND_RegInd_Reg(GPR dstBase, GPR srcReg) { 5969 int miStart = mi; 5970 // no group 1 to 4 prefix byte 5971 generateREXprefix(false, srcReg, null, dstBase); 5972 // single byte opcode 5973 setMachineCodes(mi++, (byte) 0x21); 5974 emitRegIndirectRegOperands(dstBase, srcReg); 5975 if (lister != null) lister.RNR(miStart, "AND", dstBase, srcReg); 5976 } 5977 5978 /** 5979 * Generate a register-offset--register AND. That is, 5980 * <PRE> 5981 * [dstReg<<dstScale + dstDisp] &= srcReg 5982 * </PRE> 5983 * 5984 * @param dstIndex the destination index register 5985 * @param dstScale the destination shift amount 5986 * @param dstDisp the destination displacement 5987 * @param srcReg the source register 5988 */ 5989 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 5990 public final void emitAND_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 5991 int miStart = mi; 5992 // no group 1 to 4 prefix byte 5993 generateREXprefix(false, srcReg, dstIndex, null); 5994 // single byte opcode 5995 setMachineCodes(mi++, (byte) 0x21); 5996 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 5997 if (lister != null) lister.RFDR(miStart, "AND", dstIndex, dstScale, dstDisp, srcReg); 5998 } 5999 6000 /** 6001 * Generate a absolute--register AND. That is, 6002 * <PRE> 6003 * [dstDisp] &= srcReg 6004 * </PRE> 6005 * 6006 * @param dstDisp the destination address 6007 * @param srcReg the source register 6008 */ 6009 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 6010 public final void emitAND_Abs_Reg(Address dstDisp, GPR srcReg) { 6011 int miStart = mi; 6012 // no group 1 to 4 prefix byte 6013 generateREXprefix(false, srcReg, null, null); 6014 // single byte opcode 6015 setMachineCodes(mi++, (byte) 0x21); 6016 emitAbsRegOperands(dstDisp, srcReg); 6017 if (lister != null) lister.RAR(miStart, "AND", dstDisp, srcReg); 6018 } 6019 6020 /** 6021 * Generate a register-index--register AND. That is, 6022 * <PRE> 6023 * [dstBase + dstIndex<<dstScale + dstDisp] &= srcReg 6024 * </PRE> 6025 * 6026 * @param dstBase the base register 6027 * @param dstIndex the destination index register 6028 * @param dstScale the destination shift amount 6029 * @param dstDisp the destination displacement 6030 * @param srcReg the source register 6031 */ 6032 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 6033 public final void emitAND_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 6034 int miStart = mi; 6035 // no group 1 to 4 prefix byte 6036 generateREXprefix(false, srcReg, dstIndex, dstBase); 6037 // single byte opcode 6038 setMachineCodes(mi++, (byte) 0x21); 6039 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 6040 if (lister != null) lister.RXDR(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, srcReg); 6041 } 6042 6043 /** 6044 * Generate a register-displacement--register AND. That is, 6045 * <PRE> 6046 * [dstBase + dstDisp] &= srcReg 6047 * </PRE> 6048 * 6049 * @param dstBase the base register 6050 * @param dstDisp the destination displacement 6051 * @param srcReg the source register 6052 */ 6053 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 6054 public final void emitAND_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 6055 int miStart = mi; 6056 // no group 1 to 4 prefix byte 6057 generateREXprefix(false, srcReg, null, dstBase); 6058 // single byte opcode 6059 setMachineCodes(mi++, (byte) 0x21); 6060 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 6061 if (lister != null) lister.RDR(miStart, "AND", dstBase, dstDisp, srcReg); 6062 } 6063 6064 /** 6065 * Generate a register--register AND. That is, 6066 * <PRE> 6067 * dstReg &= srcReg 6068 * </PRE> 6069 * 6070 * @param dstReg the destination register 6071 * @param srcReg the source register 6072 */ 6073 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6074 public final void emitAND_Reg_Reg(GPR dstReg, GPR srcReg) { 6075 int miStart = mi; 6076 // no group 1 to 4 prefix byte 6077 generateREXprefix(false, srcReg, null, dstReg); 6078 // single byte opcode 6079 setMachineCodes(mi++, (byte) 0x21); 6080 emitRegRegOperands(dstReg, srcReg); 6081 if (lister != null) lister.RR(miStart, "AND", dstReg, srcReg); 6082 } 6083 6084 /** 6085 * Generate a register--register-displacement AND. That is, 6086 * <PRE> 6087 * dstReg &= [srcReg + srcDisp] 6088 * </PRE> 6089 * 6090 * @param dstReg the destination register 6091 * @param srcBase the source register 6092 * @param srcDisp the source displacement 6093 */ 6094 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6095 public final void emitAND_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 6096 int miStart = mi; 6097 // no group 1 to 4 prefix byte 6098 generateREXprefix(false, dstReg, null, srcBase); 6099 // single byte opcode 6100 setMachineCodes(mi++, (byte) 0x23); 6101 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 6102 if (lister != null) lister.RRD(miStart, "AND", dstReg, srcBase, srcDisp); 6103 } 6104 6105 /** 6106 * Generate a register--register-offset AND. That is, 6107 * <PRE> 6108 * dstReg &= [srcIndex<<srcScale + srcDisp] 6109 * </PRE> 6110 * 6111 * @param dstReg the destination register 6112 * @param srcIndex the source index register 6113 * @param srcScale the source shift amount 6114 * @param srcDisp the source displacement 6115 */ 6116 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6117 public final void emitAND_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 6118 int miStart = mi; 6119 // no group 1 to 4 prefix byte 6120 generateREXprefix(false, dstReg, srcIndex, null); 6121 // single byte opcode 6122 setMachineCodes(mi++, (byte) 0x23); 6123 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 6124 if (lister != null) lister.RRFD(miStart, "AND", dstReg, srcIndex, srcScale, srcDisp); 6125 } 6126 6127 /** 6128 * Generate a register--register-offset AND. That is, 6129 * <PRE> 6130 * dstReg &= [srcDisp] 6131 * </PRE> 6132 * 6133 * @param dstReg the destination register 6134 * @param srcDisp the source displacement 6135 */ 6136 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 6137 public final void emitAND_Reg_Abs(GPR dstReg, Address srcDisp) { 6138 int miStart = mi; 6139 // no group 1 to 4 prefix byte 6140 generateREXprefix(false, dstReg, null, null); 6141 // single byte opcode 6142 setMachineCodes(mi++, (byte) 0x23); 6143 emitAbsRegOperands(srcDisp, dstReg); 6144 if (lister != null) lister.RRA(miStart, "AND", dstReg, srcDisp); 6145 } 6146 6147 /** 6148 * Generate a register--register-offset AND. That is, 6149 * <PRE> 6150 * dstReg &= [srcBase + srcIndex<<srcScale + srcDisp] 6151 * </PRE> 6152 * 6153 * @param dstReg the destination register 6154 * @param srcBase the source base register 6155 * @param srcIndex the source index register 6156 * @param srcScale the source shift amount 6157 * @param srcDisp the source displacement 6158 */ 6159 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 6160 public final void emitAND_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 6161 int miStart = mi; 6162 // no group 1 to 4 prefix byte 6163 generateREXprefix(false, dstReg, srcIndex, srcBase); 6164 // single byte opcode 6165 setMachineCodes(mi++, (byte) 0x23); 6166 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 6167 if (lister != null) lister.RRXD(miStart, "AND", dstReg, srcBase, srcIndex, srcScale, srcDisp); 6168 } 6169 6170 /** 6171 * Generate a register--register(indirect) AND. That is, 6172 * <PRE> 6173 * dstReg &= [srcBase] 6174 * </PRE> 6175 * 6176 * @param dstReg the destination register 6177 * @param srcBase the source base register 6178 */ 6179 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6180 public final void emitAND_Reg_RegInd(GPR dstReg, GPR srcBase) { 6181 int miStart = mi; 6182 // no group 1 to 4 prefix byte 6183 generateREXprefix(false, dstReg, null, srcBase); 6184 // single byte opcode 6185 setMachineCodes(mi++, (byte) 0x23); 6186 emitRegIndirectRegOperands(srcBase, dstReg); 6187 if (lister != null) lister.RRN(miStart, "AND", dstReg, srcBase); 6188 } 6189 6190 /** 6191 * Generate a register(indirect)--register AND. That is, 6192 * <PRE> 6193 * [dstBase] &= (word) srcReg 6194 * </PRE> 6195 * 6196 * @param dstBase the destination base 6197 * @param srcReg the source register 6198 */ 6199 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6200 public final void emitAND_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 6201 int miStart = mi; 6202 setMachineCodes(mi++, (byte) 0x66); 6203 generateREXprefix(false, srcReg, null, dstBase); 6204 // single byte opcode 6205 setMachineCodes(mi++, (byte) 0x21); 6206 emitRegIndirectRegOperands(dstBase, srcReg); 6207 if (lister != null) lister.RNR(miStart, "AND", dstBase, srcReg); 6208 } 6209 6210 /** 6211 * Generate a register-offset--register AND. That is, 6212 * <PRE> 6213 * [dstReg<<dstScale + dstDisp] &= (word) srcReg 6214 * </PRE> 6215 * 6216 * @param dstIndex the destination index register 6217 * @param dstScale the destination shift amount 6218 * @param dstDisp the destination displacement 6219 * @param srcReg the source register 6220 */ 6221 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 6222 public final void emitAND_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 6223 int miStart = mi; 6224 setMachineCodes(mi++, (byte) 0x66); 6225 generateREXprefix(false, srcReg, dstIndex, null); 6226 // single byte opcode 6227 setMachineCodes(mi++, (byte) 0x21); 6228 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 6229 if (lister != null) lister.RFDR(miStart, "AND", dstIndex, dstScale, dstDisp, srcReg); 6230 } 6231 6232 /** 6233 * Generate a absolute--register AND. That is, 6234 * <PRE> 6235 * [dstDisp] &= (word) srcReg 6236 * </PRE> 6237 * 6238 * @param dstDisp the destination address 6239 * @param srcReg the source register 6240 */ 6241 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 6242 public final void emitAND_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 6243 int miStart = mi; 6244 setMachineCodes(mi++, (byte) 0x66); 6245 generateREXprefix(false, srcReg, null, null); 6246 // single byte opcode 6247 setMachineCodes(mi++, (byte) 0x21); 6248 emitAbsRegOperands(dstDisp, srcReg); 6249 if (lister != null) lister.RAR(miStart, "AND", dstDisp, srcReg); 6250 } 6251 6252 /** 6253 * Generate a register-index--register AND. That is, 6254 * <PRE> 6255 * [dstBase + dstIndex<<dstScale + dstDisp] &= (word) srcReg 6256 * </PRE> 6257 * 6258 * @param dstBase the base register 6259 * @param dstIndex the destination index register 6260 * @param dstScale the destination shift amount 6261 * @param dstDisp the destination displacement 6262 * @param srcReg the source register 6263 */ 6264 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 6265 public final void emitAND_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 6266 int miStart = mi; 6267 setMachineCodes(mi++, (byte) 0x66); 6268 generateREXprefix(false, srcReg, dstIndex, dstBase); 6269 // single byte opcode 6270 setMachineCodes(mi++, (byte) 0x21); 6271 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 6272 if (lister != null) lister.RXDR(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, srcReg); 6273 } 6274 6275 /** 6276 * Generate a register-displacement--register AND. That is, 6277 * <PRE> 6278 * [dstBase + dstDisp] &= (word) srcReg 6279 * </PRE> 6280 * 6281 * @param dstBase the base register 6282 * @param dstDisp the destination displacement 6283 * @param srcReg the source register 6284 */ 6285 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 6286 public final void emitAND_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 6287 int miStart = mi; 6288 setMachineCodes(mi++, (byte) 0x66); 6289 generateREXprefix(false, srcReg, null, dstBase); 6290 // single byte opcode 6291 setMachineCodes(mi++, (byte) 0x21); 6292 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 6293 if (lister != null) lister.RDR(miStart, "AND", dstBase, dstDisp, srcReg); 6294 } 6295 6296 /** 6297 * Generate a register--register AND. That is, 6298 * <PRE> 6299 * dstReg &= (word) srcReg 6300 * </PRE> 6301 * 6302 * @param dstReg the destination register 6303 * @param srcReg the source register 6304 */ 6305 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6306 public final void emitAND_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 6307 int miStart = mi; 6308 setMachineCodes(mi++, (byte) 0x66); 6309 generateREXprefix(false, srcReg, null, dstReg); 6310 // single byte opcode 6311 setMachineCodes(mi++, (byte) 0x21); 6312 emitRegRegOperands(dstReg, srcReg); 6313 if (lister != null) lister.RR(miStart, "AND", dstReg, srcReg); 6314 } 6315 6316 /** 6317 * Generate a register--register-displacement AND. That is, 6318 * <PRE> 6319 * dstReg &= (word) [srcReg + srcDisp] 6320 * </PRE> 6321 * 6322 * @param dstReg the destination register 6323 * @param srcBase the source register 6324 * @param srcDisp the source displacement 6325 */ 6326 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6327 public final void emitAND_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 6328 int miStart = mi; 6329 setMachineCodes(mi++, (byte) 0x66); 6330 generateREXprefix(false, dstReg, null, srcBase); 6331 // single byte opcode 6332 setMachineCodes(mi++, (byte) 0x23); 6333 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 6334 if (lister != null) lister.RRD(miStart, "AND", dstReg, srcBase, srcDisp); 6335 } 6336 6337 /** 6338 * Generate a register--register-offset AND. That is, 6339 * <PRE> 6340 * dstReg &= (word) [srcIndex<<srcScale + srcDisp] 6341 * </PRE> 6342 * 6343 * @param dstReg the destination register 6344 * @param srcIndex the source index register 6345 * @param srcScale the source shift amount 6346 * @param srcDisp the source displacement 6347 */ 6348 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6349 public final void emitAND_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 6350 int miStart = mi; 6351 setMachineCodes(mi++, (byte) 0x66); 6352 generateREXprefix(false, dstReg, srcIndex, null); 6353 // single byte opcode 6354 setMachineCodes(mi++, (byte) 0x23); 6355 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 6356 if (lister != null) lister.RRFD(miStart, "AND", dstReg, srcIndex, srcScale, srcDisp); 6357 } 6358 6359 /** 6360 * Generate a register--register-offset AND. That is, 6361 * <PRE> 6362 * dstReg &= (word) [srcDisp] 6363 * </PRE> 6364 * 6365 * @param dstReg the destination register 6366 * @param srcDisp the source displacement 6367 */ 6368 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 6369 public final void emitAND_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 6370 int miStart = mi; 6371 setMachineCodes(mi++, (byte) 0x66); 6372 generateREXprefix(false, dstReg, null, null); 6373 // single byte opcode 6374 setMachineCodes(mi++, (byte) 0x23); 6375 emitAbsRegOperands(srcDisp, dstReg); 6376 if (lister != null) lister.RRA(miStart, "AND", dstReg, srcDisp); 6377 } 6378 6379 /** 6380 * Generate a register--register-offset AND. That is, 6381 * <PRE> 6382 * dstReg &= (word) [srcBase + srcIndex<<srcScale + srcDisp] 6383 * </PRE> 6384 * 6385 * @param dstReg the destination register 6386 * @param srcBase the source base register 6387 * @param srcIndex the source index register 6388 * @param srcScale the source shift amount 6389 * @param srcDisp the source displacement 6390 */ 6391 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 6392 public final void emitAND_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 6393 int miStart = mi; 6394 setMachineCodes(mi++, (byte) 0x66); 6395 generateREXprefix(false, dstReg, srcIndex, srcBase); 6396 // single byte opcode 6397 setMachineCodes(mi++, (byte) 0x23); 6398 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 6399 if (lister != null) lister.RRXD(miStart, "AND", dstReg, srcBase, srcIndex, srcScale, srcDisp); 6400 } 6401 6402 /** 6403 * Generate a register--register(indirect) AND. That is, 6404 * <PRE> 6405 * dstReg &= (word) [srcBase] 6406 * </PRE> 6407 * 6408 * @param dstReg the destination register 6409 * @param srcBase the source base register 6410 */ 6411 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6412 public final void emitAND_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 6413 int miStart = mi; 6414 setMachineCodes(mi++, (byte) 0x66); 6415 generateREXprefix(false, dstReg, null, srcBase); 6416 // single byte opcode 6417 setMachineCodes(mi++, (byte) 0x23); 6418 emitRegIndirectRegOperands(srcBase, dstReg); 6419 if (lister != null) lister.RRN(miStart, "AND", dstReg, srcBase); 6420 } 6421 6422 /** 6423 * Generate a register(indirect)--register AND. That is, 6424 * <PRE> 6425 * [dstBase] &= (quad) srcReg 6426 * </PRE> 6427 * 6428 * @param dstBase the destination base 6429 * @param srcReg the source register 6430 */ 6431 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6432 public final void emitAND_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 6433 int miStart = mi; 6434 // no group 1 to 4 prefix byte 6435 generateREXprefix(true, srcReg, null, dstBase); 6436 // single byte opcode 6437 setMachineCodes(mi++, (byte) 0x21); 6438 emitRegIndirectRegOperands(dstBase, srcReg); 6439 if (lister != null) lister.RNR(miStart, "AND", dstBase, srcReg); 6440 } 6441 6442 /** 6443 * Generate a register-offset--register AND. That is, 6444 * <PRE> 6445 * [dstReg<<dstScale + dstDisp] &= (quad) srcReg 6446 * </PRE> 6447 * 6448 * @param dstIndex the destination index register 6449 * @param dstScale the destination shift amount 6450 * @param dstDisp the destination displacement 6451 * @param srcReg the source register 6452 */ 6453 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 6454 public final void emitAND_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 6455 int miStart = mi; 6456 // no group 1 to 4 prefix byte 6457 generateREXprefix(true, srcReg, dstIndex, null); 6458 // single byte opcode 6459 setMachineCodes(mi++, (byte) 0x21); 6460 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 6461 if (lister != null) lister.RFDR(miStart, "AND", dstIndex, dstScale, dstDisp, srcReg); 6462 } 6463 6464 /** 6465 * Generate a absolute--register AND. That is, 6466 * <PRE> 6467 * [dstDisp] &= (quad) srcReg 6468 * </PRE> 6469 * 6470 * @param dstDisp the destination address 6471 * @param srcReg the source register 6472 */ 6473 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 6474 public final void emitAND_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 6475 int miStart = mi; 6476 // no group 1 to 4 prefix byte 6477 generateREXprefix(true, srcReg, null, null); 6478 // single byte opcode 6479 setMachineCodes(mi++, (byte) 0x21); 6480 emitAbsRegOperands(dstDisp, srcReg); 6481 if (lister != null) lister.RAR(miStart, "AND", dstDisp, srcReg); 6482 } 6483 6484 /** 6485 * Generate a register-index--register AND. That is, 6486 * <PRE> 6487 * [dstBase + dstIndex<<dstScale + dstDisp] &= (quad) srcReg 6488 * </PRE> 6489 * 6490 * @param dstBase the base register 6491 * @param dstIndex the destination index register 6492 * @param dstScale the destination shift amount 6493 * @param dstDisp the destination displacement 6494 * @param srcReg the source register 6495 */ 6496 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 6497 public final void emitAND_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 6498 int miStart = mi; 6499 // no group 1 to 4 prefix byte 6500 generateREXprefix(true, srcReg, dstIndex, dstBase); 6501 // single byte opcode 6502 setMachineCodes(mi++, (byte) 0x21); 6503 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 6504 if (lister != null) lister.RXDR(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, srcReg); 6505 } 6506 6507 /** 6508 * Generate a register-displacement--register AND. That is, 6509 * <PRE> 6510 * [dstBase + dstDisp] &= (quad) srcReg 6511 * </PRE> 6512 * 6513 * @param dstBase the base register 6514 * @param dstDisp the destination displacement 6515 * @param srcReg the source register 6516 */ 6517 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 6518 public final void emitAND_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 6519 int miStart = mi; 6520 // no group 1 to 4 prefix byte 6521 generateREXprefix(true, srcReg, null, dstBase); 6522 // single byte opcode 6523 setMachineCodes(mi++, (byte) 0x21); 6524 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 6525 if (lister != null) lister.RDR(miStart, "AND", dstBase, dstDisp, srcReg); 6526 } 6527 6528 /** 6529 * Generate a register--register AND. That is, 6530 * <PRE> 6531 * dstReg &= (quad) srcReg 6532 * </PRE> 6533 * 6534 * @param dstReg the destination register 6535 * @param srcReg the source register 6536 */ 6537 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6538 public final void emitAND_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 6539 int miStart = mi; 6540 // no group 1 to 4 prefix byte 6541 generateREXprefix(true, srcReg, null, dstReg); 6542 // single byte opcode 6543 setMachineCodes(mi++, (byte) 0x21); 6544 emitRegRegOperands(dstReg, srcReg); 6545 if (lister != null) lister.RR(miStart, "AND", dstReg, srcReg); 6546 } 6547 6548 /** 6549 * Generate a register--register-displacement AND. That is, 6550 * <PRE> 6551 * dstReg &= (quad) [srcReg + srcDisp] 6552 * </PRE> 6553 * 6554 * @param dstReg the destination register 6555 * @param srcBase the source register 6556 * @param srcDisp the source displacement 6557 */ 6558 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6559 public final void emitAND_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 6560 int miStart = mi; 6561 // no group 1 to 4 prefix byte 6562 generateREXprefix(true, dstReg, null, srcBase); 6563 // single byte opcode 6564 setMachineCodes(mi++, (byte) 0x23); 6565 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 6566 if (lister != null) lister.RRD(miStart, "AND", dstReg, srcBase, srcDisp); 6567 } 6568 6569 /** 6570 * Generate a register--register-offset AND. That is, 6571 * <PRE> 6572 * dstReg &= (quad) [srcIndex<<srcScale + srcDisp] 6573 * </PRE> 6574 * 6575 * @param dstReg the destination register 6576 * @param srcIndex the source index register 6577 * @param srcScale the source shift amount 6578 * @param srcDisp the source displacement 6579 */ 6580 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6581 public final void emitAND_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 6582 int miStart = mi; 6583 // no group 1 to 4 prefix byte 6584 generateREXprefix(true, dstReg, srcIndex, null); 6585 // single byte opcode 6586 setMachineCodes(mi++, (byte) 0x23); 6587 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 6588 if (lister != null) lister.RRFD(miStart, "AND", dstReg, srcIndex, srcScale, srcDisp); 6589 } 6590 6591 /** 6592 * Generate a register--register-offset AND. That is, 6593 * <PRE> 6594 * dstReg &= (quad) [srcDisp] 6595 * </PRE> 6596 * 6597 * @param dstReg the destination register 6598 * @param srcDisp the source displacement 6599 */ 6600 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 6601 public final void emitAND_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 6602 int miStart = mi; 6603 // no group 1 to 4 prefix byte 6604 generateREXprefix(true, dstReg, null, null); 6605 // single byte opcode 6606 setMachineCodes(mi++, (byte) 0x23); 6607 emitAbsRegOperands(srcDisp, dstReg); 6608 if (lister != null) lister.RRA(miStart, "AND", dstReg, srcDisp); 6609 } 6610 6611 /** 6612 * Generate a register--register-offset AND. That is, 6613 * <PRE> 6614 * dstReg &= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 6615 * </PRE> 6616 * 6617 * @param dstReg the destination register 6618 * @param srcBase the source base register 6619 * @param srcIndex the source index register 6620 * @param srcScale the source shift amount 6621 * @param srcDisp the source displacement 6622 */ 6623 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 6624 public final void emitAND_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 6625 int miStart = mi; 6626 // no group 1 to 4 prefix byte 6627 generateREXprefix(true, dstReg, srcIndex, srcBase); 6628 // single byte opcode 6629 setMachineCodes(mi++, (byte) 0x23); 6630 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 6631 if (lister != null) lister.RRXD(miStart, "AND", dstReg, srcBase, srcIndex, srcScale, srcDisp); 6632 } 6633 6634 /** 6635 * Generate a register--register(indirect) AND. That is, 6636 * <PRE> 6637 * dstReg &= (quad) [srcBase] 6638 * </PRE> 6639 * 6640 * @param dstReg the destination register 6641 * @param srcBase the source base register 6642 */ 6643 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6644 public final void emitAND_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 6645 int miStart = mi; 6646 // no group 1 to 4 prefix byte 6647 generateREXprefix(true, dstReg, null, srcBase); 6648 // single byte opcode 6649 setMachineCodes(mi++, (byte) 0x23); 6650 emitRegIndirectRegOperands(srcBase, dstReg); 6651 if (lister != null) lister.RRN(miStart, "AND", dstReg, srcBase); 6652 } 6653 6654 /** 6655 * Generate a register(indirect)--register AND. That is, 6656 * <PRE> 6657 * [dstBase] &= (byte) srcReg 6658 * </PRE> 6659 * 6660 * @param dstBase the destination base 6661 * @param srcReg the source register 6662 */ 6663 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6664 public final void emitAND_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 6665 int miStart = mi; 6666 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 6667 // no group 1 to 4 prefix byte 6668 generateREXprefix(false, srcReg, null, dstBase); 6669 // single byte opcode 6670 setMachineCodes(mi++, (byte) 0x20); 6671 emitRegIndirectRegOperands(dstBase, srcReg); 6672 if (lister != null) lister.RNR(miStart, "AND", dstBase, srcReg); 6673 } 6674 6675 /** 6676 * Generate a register-offset--register AND. That is, 6677 * <PRE> 6678 * [dstReg<<dstScale + dstDisp] &= (byte) srcReg 6679 * </PRE> 6680 * 6681 * @param dstIndex the destination index register 6682 * @param dstScale the destination shift amount 6683 * @param dstDisp the destination displacement 6684 * @param srcReg the source register 6685 */ 6686 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 6687 public final void emitAND_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 6688 int miStart = mi; 6689 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 6690 // no group 1 to 4 prefix byte 6691 generateREXprefix(false, srcReg, dstIndex, null); 6692 // single byte opcode 6693 setMachineCodes(mi++, (byte) 0x20); 6694 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 6695 if (lister != null) lister.RFDR(miStart, "AND", dstIndex, dstScale, dstDisp, srcReg); 6696 } 6697 6698 /** 6699 * Generate a absolute--register AND. That is, 6700 * <PRE> 6701 * [dstDisp] &= (byte) srcReg 6702 * </PRE> 6703 * 6704 * @param dstDisp the destination address 6705 * @param srcReg the source register 6706 */ 6707 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 6708 public final void emitAND_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 6709 int miStart = mi; 6710 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 6711 // no group 1 to 4 prefix byte 6712 generateREXprefix(false, srcReg, null, null); 6713 // single byte opcode 6714 setMachineCodes(mi++, (byte) 0x20); 6715 emitAbsRegOperands(dstDisp, srcReg); 6716 if (lister != null) lister.RAR(miStart, "AND", dstDisp, srcReg); 6717 } 6718 6719 /** 6720 * Generate a register-index--register AND. That is, 6721 * <PRE> 6722 * [dstBase + dstIndex<<dstScale + dstDisp] &= (byte) srcReg 6723 * </PRE> 6724 * 6725 * @param dstBase the base register 6726 * @param dstIndex the destination index register 6727 * @param dstScale the destination shift amount 6728 * @param dstDisp the destination displacement 6729 * @param srcReg the source register 6730 */ 6731 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 6732 public final void emitAND_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 6733 int miStart = mi; 6734 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 6735 // no group 1 to 4 prefix byte 6736 generateREXprefix(false, srcReg, dstIndex, dstBase); 6737 // single byte opcode 6738 setMachineCodes(mi++, (byte) 0x20); 6739 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 6740 if (lister != null) lister.RXDR(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, srcReg); 6741 } 6742 6743 /** 6744 * Generate a register-displacement--register AND. That is, 6745 * <PRE> 6746 * [dstBase + dstDisp] &= (byte) srcReg 6747 * </PRE> 6748 * 6749 * @param dstBase the base register 6750 * @param dstDisp the destination displacement 6751 * @param srcReg the source register 6752 */ 6753 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 6754 public final void emitAND_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 6755 int miStart = mi; 6756 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 6757 // no group 1 to 4 prefix byte 6758 generateREXprefix(false, srcReg, null, dstBase); 6759 // single byte opcode 6760 setMachineCodes(mi++, (byte) 0x20); 6761 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 6762 if (lister != null) lister.RDR(miStart, "AND", dstBase, dstDisp, srcReg); 6763 } 6764 6765 /** 6766 * Generate a register--register AND. That is, 6767 * <PRE> 6768 * dstReg &= (byte) srcReg 6769 * </PRE> 6770 * 6771 * @param dstReg the destination register 6772 * @param srcReg the source register 6773 */ 6774 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6775 public final void emitAND_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 6776 int miStart = mi; 6777 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 6778 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 6779 // no group 1 to 4 prefix byte 6780 generateREXprefix(false, srcReg, null, dstReg); 6781 // single byte opcode 6782 setMachineCodes(mi++, (byte) 0x20); 6783 emitRegRegOperands(dstReg, srcReg); 6784 if (lister != null) lister.RR(miStart, "AND", dstReg, srcReg); 6785 } 6786 6787 /** 6788 * Generate a register--register-displacement AND. That is, 6789 * <PRE> 6790 * dstReg &= (byte) [srcReg + srcDisp] 6791 * </PRE> 6792 * 6793 * @param dstReg the destination register 6794 * @param srcBase the source register 6795 * @param srcDisp the source displacement 6796 */ 6797 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6798 public final void emitAND_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 6799 int miStart = mi; 6800 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 6801 // no group 1 to 4 prefix byte 6802 generateREXprefix(false, dstReg, null, srcBase); 6803 // single byte opcode 6804 setMachineCodes(mi++, (byte) 0x22); 6805 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 6806 if (lister != null) lister.RRD(miStart, "AND", dstReg, srcBase, srcDisp); 6807 } 6808 6809 /** 6810 * Generate a register--register-offset AND. That is, 6811 * <PRE> 6812 * dstReg &= (byte) [srcIndex<<srcScale + srcDisp] 6813 * </PRE> 6814 * 6815 * @param dstReg the destination register 6816 * @param srcIndex the source index register 6817 * @param srcScale the source shift amount 6818 * @param srcDisp the source displacement 6819 */ 6820 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6821 public final void emitAND_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 6822 int miStart = mi; 6823 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 6824 // no group 1 to 4 prefix byte 6825 generateREXprefix(false, dstReg, srcIndex, null); 6826 // single byte opcode 6827 setMachineCodes(mi++, (byte) 0x22); 6828 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 6829 if (lister != null) lister.RRFD(miStart, "AND", dstReg, srcIndex, srcScale, srcDisp); 6830 } 6831 6832 /** 6833 * Generate a register--register-offset AND. That is, 6834 * <PRE> 6835 * dstReg &= (byte) [srcDisp] 6836 * </PRE> 6837 * 6838 * @param dstReg the destination register 6839 * @param srcDisp the source displacement 6840 */ 6841 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 6842 public final void emitAND_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 6843 int miStart = mi; 6844 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 6845 // no group 1 to 4 prefix byte 6846 generateREXprefix(false, dstReg, null, null); 6847 // single byte opcode 6848 setMachineCodes(mi++, (byte) 0x22); 6849 emitAbsRegOperands(srcDisp, dstReg); 6850 if (lister != null) lister.RRA(miStart, "AND", dstReg, srcDisp); 6851 } 6852 6853 /** 6854 * Generate a register--register-offset AND. That is, 6855 * <PRE> 6856 * dstReg &= (byte) [srcBase + srcIndex<<srcScale + srcDisp] 6857 * </PRE> 6858 * 6859 * @param dstReg the destination register 6860 * @param srcBase the source base register 6861 * @param srcIndex the source index register 6862 * @param srcScale the source shift amount 6863 * @param srcDisp the source displacement 6864 */ 6865 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 6866 public final void emitAND_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 6867 int miStart = mi; 6868 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 6869 // no group 1 to 4 prefix byte 6870 generateREXprefix(false, dstReg, srcIndex, srcBase); 6871 // single byte opcode 6872 setMachineCodes(mi++, (byte) 0x22); 6873 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 6874 if (lister != null) lister.RRXD(miStart, "AND", dstReg, srcBase, srcIndex, srcScale, srcDisp); 6875 } 6876 6877 /** 6878 * Generate a register--register(indirect) AND. That is, 6879 * <PRE> 6880 * dstReg &= (byte) [srcBase] 6881 * </PRE> 6882 * 6883 * @param dstReg the destination register 6884 * @param srcBase the source base register 6885 */ 6886 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 6887 public final void emitAND_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 6888 int miStart = mi; 6889 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 6890 // no group 1 to 4 prefix byte 6891 generateREXprefix(false, dstReg, null, srcBase); 6892 // single byte opcode 6893 setMachineCodes(mi++, (byte) 0x22); 6894 emitRegIndirectRegOperands(srcBase, dstReg); 6895 if (lister != null) lister.RRN(miStart, "AND", dstReg, srcBase); 6896 } 6897 6898 /** 6899 * Generate a register--immediate AND. That is, 6900 * <PRE> 6901 * dstReg &= imm 6902 * </PRE> 6903 * 6904 * @param dstReg the destination register 6905 * @param imm immediate 6906 */ 6907 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 6908 public final void emitAND_Reg_Imm(GPR dstReg, int imm) { 6909 int miStart = mi; 6910 // no group 1 to 4 prefix byte 6911 generateREXprefix(false, null, null, dstReg); 6912 // single byte opcode 6913 if (fits(imm,8)) { 6914 setMachineCodes(mi++, (byte) 0x83); 6915 // "register 0x4" is really part of the opcode 6916 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 6917 emitImm8((byte)imm); 6918 } else if (dstReg == EAX) { 6919 setMachineCodes(mi++, (byte) 0x25); 6920 emitImm32(imm); 6921 } else { 6922 setMachineCodes(mi++, (byte) 0x81); 6923 // "register 0x4" is really part of the opcode 6924 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 6925 emitImm32(imm); 6926 } 6927 if (lister != null) lister.RI(miStart, "AND", dstReg, imm); 6928 } 6929 6930 /** 6931 * Generate a register-displacement--immediate AND. That is, 6932 * <PRE> 6933 * [dstBase + dstDisp] &= imm 6934 * </PRE> 6935 * 6936 * @param dstBase the destination register 6937 * @param dstDisp the destination displacement 6938 * @param imm immediate 6939 */ 6940 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 6941 public final void emitAND_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 6942 int miStart = mi; 6943 // no group 1 to 4 prefix byte 6944 generateREXprefix(false, null, null, dstBase); 6945 // single byte opcode 6946 if (fits(imm,8)) { 6947 setMachineCodes(mi++, (byte) 0x83); 6948 // "register 0x4" is really part of the opcode 6949 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 6950 emitImm8((byte)imm); 6951 } else { 6952 setMachineCodes(mi++, (byte) 0x81); 6953 // "register 0x4" is really part of the opcode 6954 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 6955 emitImm32(imm); 6956 } 6957 if (lister != null) lister.RDI(miStart, "AND", dstBase, dstDisp, imm); 6958 } 6959 6960 /** 6961 * Generate a register-offset--immediate AND. That is, 6962 * <PRE> 6963 * [dstIndex<<dstScale + dstDisp] &= imm 6964 * </PRE> 6965 * 6966 * @param dstIndex the destination index register 6967 * @param dstScale the destination shift amount 6968 * @param dstDisp the destination displacement 6969 * @param imm immediate 6970 */ 6971 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 6972 public final void emitAND_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 6973 int miStart = mi; 6974 // no group 1 to 4 prefix byte 6975 generateREXprefix(false, null, dstIndex, null); 6976 // single byte opcode 6977 if (fits(imm,8)) { 6978 setMachineCodes(mi++, (byte) 0x83); 6979 // "register 0x4" is really part of the opcode 6980 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 6981 emitImm8((byte)imm); 6982 } else { 6983 setMachineCodes(mi++, (byte) 0x81); 6984 // "register 0x4" is really part of the opcode 6985 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 6986 emitImm32(imm); 6987 } 6988 if (lister != null) lister.RFDI(miStart, "AND", dstIndex, dstScale, dstDisp, imm); 6989 } 6990 6991 /** 6992 * Generate a absolute--immediate AND. That is, 6993 * <PRE> 6994 * [dstDisp] &= imm 6995 * </PRE> 6996 * 6997 * @param dstDisp the destination displacement 6998 * @param imm immediate 6999 */ 7000 public final void emitAND_Abs_Imm(Address dstDisp, int imm) { 7001 int miStart = mi; 7002 // no group 1 to 4 prefix byte 7003 generateREXprefix(false, null, null, null); 7004 // single byte opcode 7005 if (fits(imm,8)) { 7006 setMachineCodes(mi++, (byte) 0x83); 7007 // "register 0x4" is really part of the opcode 7008 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 7009 emitImm8((byte)imm); 7010 } else { 7011 setMachineCodes(mi++, (byte) 0x81); 7012 // "register 0x4" is really part of the opcode 7013 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 7014 emitImm32(imm); 7015 } 7016 if (lister != null) lister.RAI(miStart, "AND", dstDisp, imm); 7017 } 7018 7019 /** 7020 * Generate a register-index--immediate AND. That is, 7021 * <PRE> 7022 * [dstBase + dstIndex<<dstScale + dstDisp] &= imm 7023 * </PRE> 7024 * 7025 * @param dstBase the destination base register 7026 * @param dstIndex the destination index register 7027 * @param dstScale the destination shift amount 7028 * @param dstDisp the destination displacement 7029 * @param imm immediate 7030 */ 7031 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7032 public final void emitAND_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 7033 int miStart = mi; 7034 // no group 1 to 4 prefix byte 7035 generateREXprefix(false, null, dstIndex, dstBase); 7036 // single byte opcode 7037 if (fits(imm,8)) { 7038 setMachineCodes(mi++, (byte) 0x83); 7039 // "register 0x4" is really part of the opcode 7040 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7041 emitImm8((byte)imm); 7042 } else { 7043 setMachineCodes(mi++, (byte) 0x81); 7044 // "register 0x4" is really part of the opcode 7045 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7046 emitImm32(imm); 7047 } 7048 if (lister != null) lister.RXDI(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, imm); 7049 } 7050 7051 /** 7052 * Generate a register(indirect)--immediate AND. That is, 7053 * <PRE> 7054 * [dstBase] &= imm 7055 * </PRE> 7056 * 7057 * @param dstBase the destination base register 7058 * @param imm immediate 7059 */ 7060 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7061 public final void emitAND_RegInd_Imm(GPR dstBase, int imm) { 7062 int miStart = mi; 7063 // no group 1 to 4 prefix byte 7064 generateREXprefix(false, null, null, dstBase); 7065 // single byte opcode 7066 if (fits(imm,8)) { 7067 setMachineCodes(mi++, (byte) 0x83); 7068 // "register 0x4" is really part of the opcode 7069 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 7070 emitImm8((byte)imm); 7071 } else { 7072 setMachineCodes(mi++, (byte) 0x81); 7073 // "register 0x4" is really part of the opcode 7074 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 7075 emitImm32(imm); 7076 } 7077 if (lister != null) lister.RNI(miStart, "AND", dstBase, imm); 7078 } 7079 7080 /** 7081 * Generate a register--immediate AND. That is, 7082 * <PRE> 7083 * dstReg &= (word) imm 7084 * </PRE> 7085 * 7086 * @param dstReg the destination register 7087 * @param imm immediate 7088 */ 7089 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7090 public final void emitAND_Reg_Imm_Word(GPR dstReg, int imm) { 7091 int miStart = mi; 7092 setMachineCodes(mi++, (byte) 0x66); 7093 generateREXprefix(false, null, null, dstReg); 7094 // single byte opcode 7095 if (fits(imm,8)) { 7096 setMachineCodes(mi++, (byte) 0x83); 7097 // "register 0x4" is really part of the opcode 7098 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 7099 emitImm8((byte)imm); 7100 } else if (dstReg == EAX) { 7101 setMachineCodes(mi++, (byte) 0x25); 7102 emitImm16(imm); 7103 } else { 7104 setMachineCodes(mi++, (byte) 0x81); 7105 // "register 0x4" is really part of the opcode 7106 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 7107 emitImm16(imm); 7108 } 7109 if (lister != null) lister.RI(miStart, "AND", dstReg, imm); 7110 } 7111 7112 /** 7113 * Generate a register-displacement--immediate AND. That is, 7114 * <PRE> 7115 * [dstBase + dstDisp] &= (word) imm 7116 * </PRE> 7117 * 7118 * @param dstBase the destination register 7119 * @param dstDisp the destination displacement 7120 * @param imm immediate 7121 */ 7122 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7123 public final void emitAND_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 7124 int miStart = mi; 7125 setMachineCodes(mi++, (byte) 0x66); 7126 generateREXprefix(false, null, null, dstBase); 7127 // single byte opcode 7128 if (fits(imm,8)) { 7129 setMachineCodes(mi++, (byte) 0x83); 7130 // "register 0x4" is really part of the opcode 7131 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 7132 emitImm8((byte)imm); 7133 } else { 7134 setMachineCodes(mi++, (byte) 0x81); 7135 // "register 0x4" is really part of the opcode 7136 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 7137 emitImm16(imm); 7138 } 7139 if (lister != null) lister.RDI(miStart, "AND", dstBase, dstDisp, imm); 7140 } 7141 7142 /** 7143 * Generate a register-offset--immediate AND. That is, 7144 * <PRE> 7145 * [dstIndex<<dstScale + dstDisp] &= (word) imm 7146 * </PRE> 7147 * 7148 * @param dstIndex the destination index register 7149 * @param dstScale the destination shift amount 7150 * @param dstDisp the destination displacement 7151 * @param imm immediate 7152 */ 7153 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7154 public final void emitAND_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 7155 int miStart = mi; 7156 setMachineCodes(mi++, (byte) 0x66); 7157 generateREXprefix(false, null, dstIndex, null); 7158 // single byte opcode 7159 if (fits(imm,8)) { 7160 setMachineCodes(mi++, (byte) 0x83); 7161 // "register 0x4" is really part of the opcode 7162 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7163 emitImm8((byte)imm); 7164 } else { 7165 setMachineCodes(mi++, (byte) 0x81); 7166 // "register 0x4" is really part of the opcode 7167 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7168 emitImm16(imm); 7169 } 7170 if (lister != null) lister.RFDI(miStart, "AND", dstIndex, dstScale, dstDisp, imm); 7171 } 7172 7173 /** 7174 * Generate a absolute--immediate AND. That is, 7175 * <PRE> 7176 * [dstDisp] &= (word) imm 7177 * </PRE> 7178 * 7179 * @param dstDisp the destination displacement 7180 * @param imm immediate 7181 */ 7182 public final void emitAND_Abs_Imm_Word(Address dstDisp, int imm) { 7183 int miStart = mi; 7184 setMachineCodes(mi++, (byte) 0x66); 7185 generateREXprefix(false, null, null, null); 7186 // single byte opcode 7187 if (fits(imm,8)) { 7188 setMachineCodes(mi++, (byte) 0x83); 7189 // "register 0x4" is really part of the opcode 7190 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 7191 emitImm8((byte)imm); 7192 } else { 7193 setMachineCodes(mi++, (byte) 0x81); 7194 // "register 0x4" is really part of the opcode 7195 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 7196 emitImm16(imm); 7197 } 7198 if (lister != null) lister.RAI(miStart, "AND", dstDisp, imm); 7199 } 7200 7201 /** 7202 * Generate a register-index--immediate AND. That is, 7203 * <PRE> 7204 * [dstBase + dstIndex<<dstScale + dstDisp] &= (word) imm 7205 * </PRE> 7206 * 7207 * @param dstBase the destination base register 7208 * @param dstIndex the destination index register 7209 * @param dstScale the destination shift amount 7210 * @param dstDisp the destination displacement 7211 * @param imm immediate 7212 */ 7213 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7214 public final void emitAND_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 7215 int miStart = mi; 7216 setMachineCodes(mi++, (byte) 0x66); 7217 generateREXprefix(false, null, dstIndex, dstBase); 7218 // single byte opcode 7219 if (fits(imm,8)) { 7220 setMachineCodes(mi++, (byte) 0x83); 7221 // "register 0x4" is really part of the opcode 7222 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7223 emitImm8((byte)imm); 7224 } else { 7225 setMachineCodes(mi++, (byte) 0x81); 7226 // "register 0x4" is really part of the opcode 7227 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7228 emitImm16(imm); 7229 } 7230 if (lister != null) lister.RXDI(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, imm); 7231 } 7232 7233 /** 7234 * Generate a register(indirect)--immediate AND. That is, 7235 * <PRE> 7236 * [dstBase] &= (word) imm 7237 * </PRE> 7238 * 7239 * @param dstBase the destination base register 7240 * @param imm immediate 7241 */ 7242 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7243 public final void emitAND_RegInd_Imm_Word(GPR dstBase, int imm) { 7244 int miStart = mi; 7245 setMachineCodes(mi++, (byte) 0x66); 7246 generateREXprefix(false, null, null, dstBase); 7247 // single byte opcode 7248 if (fits(imm,8)) { 7249 setMachineCodes(mi++, (byte) 0x83); 7250 // "register 0x4" is really part of the opcode 7251 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 7252 emitImm8((byte)imm); 7253 } else { 7254 setMachineCodes(mi++, (byte) 0x81); 7255 // "register 0x4" is really part of the opcode 7256 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 7257 emitImm16(imm); 7258 } 7259 if (lister != null) lister.RNI(miStart, "AND", dstBase, imm); 7260 } 7261 7262 /** 7263 * Generate a register--immediate AND. That is, 7264 * <PRE> 7265 * dstReg &= (quad) imm 7266 * </PRE> 7267 * 7268 * @param dstReg the destination register 7269 * @param imm immediate 7270 */ 7271 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7272 public final void emitAND_Reg_Imm_Quad(GPR dstReg, int imm) { 7273 int miStart = mi; 7274 // no group 1 to 4 prefix byte 7275 generateREXprefix(true, null, null, dstReg); 7276 // single byte opcode 7277 if (fits(imm,8)) { 7278 setMachineCodes(mi++, (byte) 0x83); 7279 // "register 0x4" is really part of the opcode 7280 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 7281 emitImm8((byte)imm); 7282 } else if (dstReg == EAX) { 7283 setMachineCodes(mi++, (byte) 0x25); 7284 emitImm32(imm); 7285 } else { 7286 setMachineCodes(mi++, (byte) 0x81); 7287 // "register 0x4" is really part of the opcode 7288 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 7289 emitImm32(imm); 7290 } 7291 if (lister != null) lister.RI(miStart, "AND", dstReg, imm); 7292 } 7293 7294 /** 7295 * Generate a register-displacement--immediate AND. That is, 7296 * <PRE> 7297 * [dstBase + dstDisp] &= (quad) imm 7298 * </PRE> 7299 * 7300 * @param dstBase the destination register 7301 * @param dstDisp the destination displacement 7302 * @param imm immediate 7303 */ 7304 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7305 public final void emitAND_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 7306 int miStart = mi; 7307 // no group 1 to 4 prefix byte 7308 generateREXprefix(true, null, null, dstBase); 7309 // single byte opcode 7310 if (fits(imm,8)) { 7311 setMachineCodes(mi++, (byte) 0x83); 7312 // "register 0x4" is really part of the opcode 7313 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 7314 emitImm8((byte)imm); 7315 } else { 7316 setMachineCodes(mi++, (byte) 0x81); 7317 // "register 0x4" is really part of the opcode 7318 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 7319 emitImm32(imm); 7320 } 7321 if (lister != null) lister.RDI(miStart, "AND", dstBase, dstDisp, imm); 7322 } 7323 7324 /** 7325 * Generate a register-offset--immediate AND. That is, 7326 * <PRE> 7327 * [dstIndex<<dstScale + dstDisp] &= (quad) imm 7328 * </PRE> 7329 * 7330 * @param dstIndex the destination index register 7331 * @param dstScale the destination shift amount 7332 * @param dstDisp the destination displacement 7333 * @param imm immediate 7334 */ 7335 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7336 public final void emitAND_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 7337 int miStart = mi; 7338 // no group 1 to 4 prefix byte 7339 generateREXprefix(true, null, dstIndex, null); 7340 // single byte opcode 7341 if (fits(imm,8)) { 7342 setMachineCodes(mi++, (byte) 0x83); 7343 // "register 0x4" is really part of the opcode 7344 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7345 emitImm8((byte)imm); 7346 } else { 7347 setMachineCodes(mi++, (byte) 0x81); 7348 // "register 0x4" is really part of the opcode 7349 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7350 emitImm32(imm); 7351 } 7352 if (lister != null) lister.RFDI(miStart, "AND", dstIndex, dstScale, dstDisp, imm); 7353 } 7354 7355 /** 7356 * Generate a absolute--immediate AND. That is, 7357 * <PRE> 7358 * [dstDisp] &= (quad) imm 7359 * </PRE> 7360 * 7361 * @param dstDisp the destination displacement 7362 * @param imm immediate 7363 */ 7364 public final void emitAND_Abs_Imm_Quad(Address dstDisp, int imm) { 7365 int miStart = mi; 7366 // no group 1 to 4 prefix byte 7367 generateREXprefix(true, null, null, null); 7368 // single byte opcode 7369 if (fits(imm,8)) { 7370 setMachineCodes(mi++, (byte) 0x83); 7371 // "register 0x4" is really part of the opcode 7372 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 7373 emitImm8((byte)imm); 7374 } else { 7375 setMachineCodes(mi++, (byte) 0x81); 7376 // "register 0x4" is really part of the opcode 7377 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 7378 emitImm32(imm); 7379 } 7380 if (lister != null) lister.RAI(miStart, "AND", dstDisp, imm); 7381 } 7382 7383 /** 7384 * Generate a register-index--immediate AND. That is, 7385 * <PRE> 7386 * [dstBase + dstIndex<<dstScale + dstDisp] &= (quad) imm 7387 * </PRE> 7388 * 7389 * @param dstBase the destination base register 7390 * @param dstIndex the destination index register 7391 * @param dstScale the destination shift amount 7392 * @param dstDisp the destination displacement 7393 * @param imm immediate 7394 */ 7395 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7396 public final void emitAND_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 7397 int miStart = mi; 7398 // no group 1 to 4 prefix byte 7399 generateREXprefix(true, null, dstIndex, dstBase); 7400 // single byte opcode 7401 if (fits(imm,8)) { 7402 setMachineCodes(mi++, (byte) 0x83); 7403 // "register 0x4" is really part of the opcode 7404 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7405 emitImm8((byte)imm); 7406 } else { 7407 setMachineCodes(mi++, (byte) 0x81); 7408 // "register 0x4" is really part of the opcode 7409 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7410 emitImm32(imm); 7411 } 7412 if (lister != null) lister.RXDI(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, imm); 7413 } 7414 7415 /** 7416 * Generate a register(indirect)--immediate AND. That is, 7417 * <PRE> 7418 * [dstBase] &= (quad) imm 7419 * </PRE> 7420 * 7421 * @param dstBase the destination base register 7422 * @param imm immediate 7423 */ 7424 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7425 public final void emitAND_RegInd_Imm_Quad(GPR dstBase, int imm) { 7426 int miStart = mi; 7427 // no group 1 to 4 prefix byte 7428 generateREXprefix(true, null, null, dstBase); 7429 // single byte opcode 7430 if (fits(imm,8)) { 7431 setMachineCodes(mi++, (byte) 0x83); 7432 // "register 0x4" is really part of the opcode 7433 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 7434 emitImm8((byte)imm); 7435 } else { 7436 setMachineCodes(mi++, (byte) 0x81); 7437 // "register 0x4" is really part of the opcode 7438 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 7439 emitImm32(imm); 7440 } 7441 if (lister != null) lister.RNI(miStart, "AND", dstBase, imm); 7442 } 7443 7444 /** 7445 * Generate a register--immediate AND. That is, 7446 * <PRE> 7447 * dstReg &= (byte) imm 7448 * </PRE> 7449 * 7450 * @param dstReg the destination register 7451 * @param imm immediate 7452 */ 7453 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7454 public final void emitAND_Reg_Imm_Byte(GPR dstReg, int imm) { 7455 int miStart = mi; 7456 if (dstReg == EAX) { 7457 setMachineCodes(mi++, (byte) 0x24); 7458 emitImm8(imm); 7459 } else { 7460 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 7461 generateREXprefix(false, null, null, dstReg); 7462 setMachineCodes(mi++, (byte) 0x80); 7463 // "register 0x4" is really part of the opcode 7464 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 7465 emitImm8(imm); 7466 } 7467 if (lister != null) lister.RI(miStart, "AND", dstReg, imm); 7468 } 7469 7470 /** 7471 * Generate a register-displacement--immediate AND. That is, 7472 * <PRE> 7473 * [dstBase + dstDisp] &= (byte) imm 7474 * </PRE> 7475 * 7476 * @param dstBase the destination register 7477 * @param dstDisp the destination displacement 7478 * @param imm immediate 7479 */ 7480 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7481 public final void emitAND_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 7482 int miStart = mi; 7483 generateREXprefix(false, null, null, dstBase); 7484 setMachineCodes(mi++, (byte) 0x80); 7485 // "register 0x4" is really part of the opcode 7486 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 7487 emitImm8(imm); 7488 if (lister != null) lister.RDI(miStart, "AND", dstBase, dstDisp, imm); 7489 } 7490 7491 /** 7492 * Generate a register-index--immediate AND. That is, 7493 * <PRE> 7494 * [dstBase + dstIndex<<scale + dstDisp] &= (byte) imm 7495 * </PRE> 7496 * 7497 * @param dstBase the destination base register 7498 * @param dstIndex the destination index register 7499 * @param dstScale the destination shift amount 7500 * @param dstDisp the destination displacement 7501 * @param imm immediate 7502 */ 7503 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7504 public final void emitAND_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 7505 int miStart = mi; 7506 generateREXprefix(false, null, dstIndex, dstBase); 7507 setMachineCodes(mi++, (byte) 0x80); 7508 // "register 0x4" is really part of the opcode 7509 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7510 emitImm8(imm); 7511 if (lister != null) lister.RXDI(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, imm); 7512 } 7513 7514 /** 7515 * Generate a register-offset--immediate AND. That is, 7516 * <PRE> 7517 * [dstIndex<<dstScale + dstDisp] &= (byte) imm 7518 * </PRE> 7519 * 7520 * @param dstIndex the destination index register 7521 * @param dstScale the destination shift amount 7522 * @param dstDisp the destination displacement 7523 * @param imm immediate 7524 */ 7525 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7526 public final void emitAND_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 7527 int miStart = mi; 7528 generateREXprefix(false, null, dstIndex, null); 7529 setMachineCodes(mi++, (byte) 0x80); 7530 // "register 0x4" is really part of the opcode 7531 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 7532 emitImm8(imm); 7533 if (lister != null) lister.RFDI(miStart, "AND", dstIndex, dstScale, dstDisp, imm); 7534 } 7535 7536 /** 7537 * Generate a absolute--immediate AND. That is, 7538 * <PRE> 7539 * [dstDisp] &= (byte) imm 7540 * </PRE> 7541 * 7542 * @param dstDisp the destination displacement 7543 * @param imm immediate 7544 */ 7545 public final void emitAND_Abs_Imm_Byte(Address dstDisp, int imm) { 7546 int miStart = mi; 7547 generateREXprefix(false, null, null, null); 7548 setMachineCodes(mi++, (byte) 0x80); 7549 // "register 0x4" is really part of the opcode 7550 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 7551 emitImm8(imm); 7552 if (lister != null) lister.RAI(miStart, "AND", dstDisp, imm); 7553 } 7554 7555 /** 7556 * Generate a register(indirect)--immediate AND. That is, 7557 * <PRE> 7558 * [dstBase] &= (byte) imm 7559 * </PRE> 7560 * 7561 * @param dstBase the destination base register 7562 * @param imm immediate 7563 */ 7564 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7565 public final void emitAND_RegInd_Imm_Byte(GPR dstBase, int imm) { 7566 int miStart = mi; 7567 generateREXprefix(false, null, null, dstBase); 7568 setMachineCodes(mi++, (byte) 0x80); 7569 // "register 0x4" is really part of the opcode 7570 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 7571 emitImm8(imm); 7572 if (lister != null) lister.RNI(miStart, "AND", dstBase, imm); 7573 } 7574 7575 /** 7576 * Generate a register(indirect)--register CMP. That is, 7577 * <PRE> 7578 * [dstBase] == srcReg 7579 * </PRE> 7580 * 7581 * @param dstBase the destination base 7582 * @param srcReg the source register 7583 */ 7584 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7585 public final void emitCMP_RegInd_Reg(GPR dstBase, GPR srcReg) { 7586 int miStart = mi; 7587 // no group 1 to 4 prefix byte 7588 generateREXprefix(false, srcReg, null, dstBase); 7589 // single byte opcode 7590 setMachineCodes(mi++, (byte) 0x39); 7591 emitRegIndirectRegOperands(dstBase, srcReg); 7592 if (lister != null) lister.RNR(miStart, "CMP", dstBase, srcReg); 7593 } 7594 7595 /** 7596 * Generate a register-offset--register CMP. That is, 7597 * <PRE> 7598 * [dstReg<<dstScale + dstDisp] == srcReg 7599 * </PRE> 7600 * 7601 * @param dstIndex the destination index register 7602 * @param dstScale the destination shift amount 7603 * @param dstDisp the destination displacement 7604 * @param srcReg the source register 7605 */ 7606 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 7607 public final void emitCMP_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 7608 int miStart = mi; 7609 // no group 1 to 4 prefix byte 7610 generateREXprefix(false, srcReg, dstIndex, null); 7611 // single byte opcode 7612 setMachineCodes(mi++, (byte) 0x39); 7613 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 7614 if (lister != null) lister.RFDR(miStart, "CMP", dstIndex, dstScale, dstDisp, srcReg); 7615 } 7616 7617 /** 7618 * Generate a absolute--register CMP. That is, 7619 * <PRE> 7620 * [dstDisp] == srcReg 7621 * </PRE> 7622 * 7623 * @param dstDisp the destination address 7624 * @param srcReg the source register 7625 */ 7626 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 7627 public final void emitCMP_Abs_Reg(Address dstDisp, GPR srcReg) { 7628 int miStart = mi; 7629 // no group 1 to 4 prefix byte 7630 generateREXprefix(false, srcReg, null, null); 7631 // single byte opcode 7632 setMachineCodes(mi++, (byte) 0x39); 7633 emitAbsRegOperands(dstDisp, srcReg); 7634 if (lister != null) lister.RAR(miStart, "CMP", dstDisp, srcReg); 7635 } 7636 7637 /** 7638 * Generate a register-index--register CMP. That is, 7639 * <PRE> 7640 * [dstBase + dstIndex<<dstScale + dstDisp] == srcReg 7641 * </PRE> 7642 * 7643 * @param dstBase the base register 7644 * @param dstIndex the destination index register 7645 * @param dstScale the destination shift amount 7646 * @param dstDisp the destination displacement 7647 * @param srcReg the source register 7648 */ 7649 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 7650 public final void emitCMP_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 7651 int miStart = mi; 7652 // no group 1 to 4 prefix byte 7653 generateREXprefix(false, srcReg, dstIndex, dstBase); 7654 // single byte opcode 7655 setMachineCodes(mi++, (byte) 0x39); 7656 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 7657 if (lister != null) lister.RXDR(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, srcReg); 7658 } 7659 7660 /** 7661 * Generate a register-displacement--register CMP. That is, 7662 * <PRE> 7663 * [dstBase + dstDisp] == srcReg 7664 * </PRE> 7665 * 7666 * @param dstBase the base register 7667 * @param dstDisp the destination displacement 7668 * @param srcReg the source register 7669 */ 7670 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 7671 public final void emitCMP_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 7672 int miStart = mi; 7673 // no group 1 to 4 prefix byte 7674 generateREXprefix(false, srcReg, null, dstBase); 7675 // single byte opcode 7676 setMachineCodes(mi++, (byte) 0x39); 7677 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 7678 if (lister != null) lister.RDR(miStart, "CMP", dstBase, dstDisp, srcReg); 7679 } 7680 7681 /** 7682 * Generate a register--register CMP. That is, 7683 * <PRE> 7684 * dstReg == srcReg 7685 * </PRE> 7686 * 7687 * @param dstReg the destination register 7688 * @param srcReg the source register 7689 */ 7690 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7691 public final void emitCMP_Reg_Reg(GPR dstReg, GPR srcReg) { 7692 int miStart = mi; 7693 // no group 1 to 4 prefix byte 7694 generateREXprefix(false, srcReg, null, dstReg); 7695 // single byte opcode 7696 setMachineCodes(mi++, (byte) 0x39); 7697 emitRegRegOperands(dstReg, srcReg); 7698 if (lister != null) lister.RR(miStart, "CMP", dstReg, srcReg); 7699 } 7700 7701 /** 7702 * Generate a register--register-displacement CMP. That is, 7703 * <PRE> 7704 * dstReg == [srcReg + srcDisp] 7705 * </PRE> 7706 * 7707 * @param dstReg the destination register 7708 * @param srcBase the source register 7709 * @param srcDisp the source displacement 7710 */ 7711 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7712 public final void emitCMP_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 7713 int miStart = mi; 7714 // no group 1 to 4 prefix byte 7715 generateREXprefix(false, dstReg, null, srcBase); 7716 // single byte opcode 7717 setMachineCodes(mi++, (byte) 0x3B); 7718 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 7719 if (lister != null) lister.RRD(miStart, "CMP", dstReg, srcBase, srcDisp); 7720 } 7721 7722 /** 7723 * Generate a register--register-offset CMP. That is, 7724 * <PRE> 7725 * dstReg == [srcIndex<<srcScale + srcDisp] 7726 * </PRE> 7727 * 7728 * @param dstReg the destination register 7729 * @param srcIndex the source index register 7730 * @param srcScale the source shift amount 7731 * @param srcDisp the source displacement 7732 */ 7733 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7734 public final void emitCMP_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 7735 int miStart = mi; 7736 // no group 1 to 4 prefix byte 7737 generateREXprefix(false, dstReg, srcIndex, null); 7738 // single byte opcode 7739 setMachineCodes(mi++, (byte) 0x3B); 7740 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 7741 if (lister != null) lister.RRFD(miStart, "CMP", dstReg, srcIndex, srcScale, srcDisp); 7742 } 7743 7744 /** 7745 * Generate a register--register-offset CMP. That is, 7746 * <PRE> 7747 * dstReg == [srcDisp] 7748 * </PRE> 7749 * 7750 * @param dstReg the destination register 7751 * @param srcDisp the source displacement 7752 */ 7753 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7754 public final void emitCMP_Reg_Abs(GPR dstReg, Address srcDisp) { 7755 int miStart = mi; 7756 // no group 1 to 4 prefix byte 7757 generateREXprefix(false, dstReg, null, null); 7758 // single byte opcode 7759 setMachineCodes(mi++, (byte) 0x3B); 7760 emitAbsRegOperands(srcDisp, dstReg); 7761 if (lister != null) lister.RRA(miStart, "CMP", dstReg, srcDisp); 7762 } 7763 7764 /** 7765 * Generate a register--register-offset CMP. That is, 7766 * <PRE> 7767 * dstReg == [srcBase + srcIndex<<srcScale + srcDisp] 7768 * </PRE> 7769 * 7770 * @param dstReg the destination register 7771 * @param srcBase the source base register 7772 * @param srcIndex the source index register 7773 * @param srcScale the source shift amount 7774 * @param srcDisp the source displacement 7775 */ 7776 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 7777 public final void emitCMP_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 7778 int miStart = mi; 7779 // no group 1 to 4 prefix byte 7780 generateREXprefix(false, dstReg, srcIndex, srcBase); 7781 // single byte opcode 7782 setMachineCodes(mi++, (byte) 0x3B); 7783 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 7784 if (lister != null) lister.RRXD(miStart, "CMP", dstReg, srcBase, srcIndex, srcScale, srcDisp); 7785 } 7786 7787 /** 7788 * Generate a register--register(indirect) CMP. That is, 7789 * <PRE> 7790 * dstReg == [srcBase] 7791 * </PRE> 7792 * 7793 * @param dstReg the destination register 7794 * @param srcBase the source base register 7795 */ 7796 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7797 public final void emitCMP_Reg_RegInd(GPR dstReg, GPR srcBase) { 7798 int miStart = mi; 7799 // no group 1 to 4 prefix byte 7800 generateREXprefix(false, dstReg, null, srcBase); 7801 // single byte opcode 7802 setMachineCodes(mi++, (byte) 0x3B); 7803 emitRegIndirectRegOperands(srcBase, dstReg); 7804 if (lister != null) lister.RRN(miStart, "CMP", dstReg, srcBase); 7805 } 7806 7807 /** 7808 * Generate a register(indirect)--register CMP. That is, 7809 * <PRE> 7810 * [dstBase] == (word) srcReg 7811 * </PRE> 7812 * 7813 * @param dstBase the destination base 7814 * @param srcReg the source register 7815 */ 7816 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7817 public final void emitCMP_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 7818 int miStart = mi; 7819 setMachineCodes(mi++, (byte) 0x66); 7820 generateREXprefix(false, srcReg, null, dstBase); 7821 // single byte opcode 7822 setMachineCodes(mi++, (byte) 0x39); 7823 emitRegIndirectRegOperands(dstBase, srcReg); 7824 if (lister != null) lister.RNR(miStart, "CMP", dstBase, srcReg); 7825 } 7826 7827 /** 7828 * Generate a register-offset--register CMP. That is, 7829 * <PRE> 7830 * [dstReg<<dstScale + dstDisp] == (word) srcReg 7831 * </PRE> 7832 * 7833 * @param dstIndex the destination index register 7834 * @param dstScale the destination shift amount 7835 * @param dstDisp the destination displacement 7836 * @param srcReg the source register 7837 */ 7838 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 7839 public final void emitCMP_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 7840 int miStart = mi; 7841 setMachineCodes(mi++, (byte) 0x66); 7842 generateREXprefix(false, srcReg, dstIndex, null); 7843 // single byte opcode 7844 setMachineCodes(mi++, (byte) 0x39); 7845 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 7846 if (lister != null) lister.RFDR(miStart, "CMP", dstIndex, dstScale, dstDisp, srcReg); 7847 } 7848 7849 /** 7850 * Generate a absolute--register CMP. That is, 7851 * <PRE> 7852 * [dstDisp] == (word) srcReg 7853 * </PRE> 7854 * 7855 * @param dstDisp the destination address 7856 * @param srcReg the source register 7857 */ 7858 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 7859 public final void emitCMP_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 7860 int miStart = mi; 7861 setMachineCodes(mi++, (byte) 0x66); 7862 generateREXprefix(false, srcReg, null, null); 7863 // single byte opcode 7864 setMachineCodes(mi++, (byte) 0x39); 7865 emitAbsRegOperands(dstDisp, srcReg); 7866 if (lister != null) lister.RAR(miStart, "CMP", dstDisp, srcReg); 7867 } 7868 7869 /** 7870 * Generate a register-index--register CMP. That is, 7871 * <PRE> 7872 * [dstBase + dstIndex<<dstScale + dstDisp] == (word) srcReg 7873 * </PRE> 7874 * 7875 * @param dstBase the base register 7876 * @param dstIndex the destination index register 7877 * @param dstScale the destination shift amount 7878 * @param dstDisp the destination displacement 7879 * @param srcReg the source register 7880 */ 7881 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 7882 public final void emitCMP_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 7883 int miStart = mi; 7884 setMachineCodes(mi++, (byte) 0x66); 7885 generateREXprefix(false, srcReg, dstIndex, dstBase); 7886 // single byte opcode 7887 setMachineCodes(mi++, (byte) 0x39); 7888 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 7889 if (lister != null) lister.RXDR(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, srcReg); 7890 } 7891 7892 /** 7893 * Generate a register-displacement--register CMP. That is, 7894 * <PRE> 7895 * [dstBase + dstDisp] == (word) srcReg 7896 * </PRE> 7897 * 7898 * @param dstBase the base register 7899 * @param dstDisp the destination displacement 7900 * @param srcReg the source register 7901 */ 7902 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 7903 public final void emitCMP_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 7904 int miStart = mi; 7905 setMachineCodes(mi++, (byte) 0x66); 7906 generateREXprefix(false, srcReg, null, dstBase); 7907 // single byte opcode 7908 setMachineCodes(mi++, (byte) 0x39); 7909 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 7910 if (lister != null) lister.RDR(miStart, "CMP", dstBase, dstDisp, srcReg); 7911 } 7912 7913 /** 7914 * Generate a register--register CMP. That is, 7915 * <PRE> 7916 * dstReg == (word) srcReg 7917 * </PRE> 7918 * 7919 * @param dstReg the destination register 7920 * @param srcReg the source register 7921 */ 7922 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7923 public final void emitCMP_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 7924 int miStart = mi; 7925 setMachineCodes(mi++, (byte) 0x66); 7926 generateREXprefix(false, srcReg, null, dstReg); 7927 // single byte opcode 7928 setMachineCodes(mi++, (byte) 0x39); 7929 emitRegRegOperands(dstReg, srcReg); 7930 if (lister != null) lister.RR(miStart, "CMP", dstReg, srcReg); 7931 } 7932 7933 /** 7934 * Generate a register--register-displacement CMP. That is, 7935 * <PRE> 7936 * dstReg == (word) [srcReg + srcDisp] 7937 * </PRE> 7938 * 7939 * @param dstReg the destination register 7940 * @param srcBase the source register 7941 * @param srcDisp the source displacement 7942 */ 7943 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7944 public final void emitCMP_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 7945 int miStart = mi; 7946 setMachineCodes(mi++, (byte) 0x66); 7947 generateREXprefix(false, dstReg, null, srcBase); 7948 // single byte opcode 7949 setMachineCodes(mi++, (byte) 0x3B); 7950 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 7951 if (lister != null) lister.RRD(miStart, "CMP", dstReg, srcBase, srcDisp); 7952 } 7953 7954 /** 7955 * Generate a register--register-offset CMP. That is, 7956 * <PRE> 7957 * dstReg == (word) [srcIndex<<srcScale + srcDisp] 7958 * </PRE> 7959 * 7960 * @param dstReg the destination register 7961 * @param srcIndex the source index register 7962 * @param srcScale the source shift amount 7963 * @param srcDisp the source displacement 7964 */ 7965 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 7966 public final void emitCMP_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 7967 int miStart = mi; 7968 setMachineCodes(mi++, (byte) 0x66); 7969 generateREXprefix(false, dstReg, srcIndex, null); 7970 // single byte opcode 7971 setMachineCodes(mi++, (byte) 0x3B); 7972 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 7973 if (lister != null) lister.RRFD(miStart, "CMP", dstReg, srcIndex, srcScale, srcDisp); 7974 } 7975 7976 /** 7977 * Generate a register--register-offset CMP. That is, 7978 * <PRE> 7979 * dstReg == (word) [srcDisp] 7980 * </PRE> 7981 * 7982 * @param dstReg the destination register 7983 * @param srcDisp the source displacement 7984 */ 7985 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 7986 public final void emitCMP_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 7987 int miStart = mi; 7988 setMachineCodes(mi++, (byte) 0x66); 7989 generateREXprefix(false, dstReg, null, null); 7990 // single byte opcode 7991 setMachineCodes(mi++, (byte) 0x3B); 7992 emitAbsRegOperands(srcDisp, dstReg); 7993 if (lister != null) lister.RRA(miStart, "CMP", dstReg, srcDisp); 7994 } 7995 7996 /** 7997 * Generate a register--register-offset CMP. That is, 7998 * <PRE> 7999 * dstReg == (word) [srcBase + srcIndex<<srcScale + srcDisp] 8000 * </PRE> 8001 * 8002 * @param dstReg the destination register 8003 * @param srcBase the source base register 8004 * @param srcIndex the source index register 8005 * @param srcScale the source shift amount 8006 * @param srcDisp the source displacement 8007 */ 8008 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 8009 public final void emitCMP_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 8010 int miStart = mi; 8011 setMachineCodes(mi++, (byte) 0x66); 8012 generateREXprefix(false, dstReg, srcIndex, srcBase); 8013 // single byte opcode 8014 setMachineCodes(mi++, (byte) 0x3B); 8015 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 8016 if (lister != null) lister.RRXD(miStart, "CMP", dstReg, srcBase, srcIndex, srcScale, srcDisp); 8017 } 8018 8019 /** 8020 * Generate a register--register(indirect) CMP. That is, 8021 * <PRE> 8022 * dstReg == (word) [srcBase] 8023 * </PRE> 8024 * 8025 * @param dstReg the destination register 8026 * @param srcBase the source base register 8027 */ 8028 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8029 public final void emitCMP_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 8030 int miStart = mi; 8031 setMachineCodes(mi++, (byte) 0x66); 8032 generateREXprefix(false, dstReg, null, srcBase); 8033 // single byte opcode 8034 setMachineCodes(mi++, (byte) 0x3B); 8035 emitRegIndirectRegOperands(srcBase, dstReg); 8036 if (lister != null) lister.RRN(miStart, "CMP", dstReg, srcBase); 8037 } 8038 8039 /** 8040 * Generate a register(indirect)--register CMP. That is, 8041 * <PRE> 8042 * [dstBase] == (quad) srcReg 8043 * </PRE> 8044 * 8045 * @param dstBase the destination base 8046 * @param srcReg the source register 8047 */ 8048 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8049 public final void emitCMP_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 8050 int miStart = mi; 8051 // no group 1 to 4 prefix byte 8052 generateREXprefix(true, srcReg, null, dstBase); 8053 // single byte opcode 8054 setMachineCodes(mi++, (byte) 0x39); 8055 emitRegIndirectRegOperands(dstBase, srcReg); 8056 if (lister != null) lister.RNR(miStart, "CMP", dstBase, srcReg); 8057 } 8058 8059 /** 8060 * Generate a register-offset--register CMP. That is, 8061 * <PRE> 8062 * [dstReg<<dstScale + dstDisp] == (quad) srcReg 8063 * </PRE> 8064 * 8065 * @param dstIndex the destination index register 8066 * @param dstScale the destination shift amount 8067 * @param dstDisp the destination displacement 8068 * @param srcReg the source register 8069 */ 8070 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 8071 public final void emitCMP_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 8072 int miStart = mi; 8073 // no group 1 to 4 prefix byte 8074 generateREXprefix(true, srcReg, dstIndex, null); 8075 // single byte opcode 8076 setMachineCodes(mi++, (byte) 0x39); 8077 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 8078 if (lister != null) lister.RFDR(miStart, "CMP", dstIndex, dstScale, dstDisp, srcReg); 8079 } 8080 8081 /** 8082 * Generate a absolute--register CMP. That is, 8083 * <PRE> 8084 * [dstDisp] == (quad) srcReg 8085 * </PRE> 8086 * 8087 * @param dstDisp the destination address 8088 * @param srcReg the source register 8089 */ 8090 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 8091 public final void emitCMP_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 8092 int miStart = mi; 8093 // no group 1 to 4 prefix byte 8094 generateREXprefix(true, srcReg, null, null); 8095 // single byte opcode 8096 setMachineCodes(mi++, (byte) 0x39); 8097 emitAbsRegOperands(dstDisp, srcReg); 8098 if (lister != null) lister.RAR(miStart, "CMP", dstDisp, srcReg); 8099 } 8100 8101 /** 8102 * Generate a register-index--register CMP. That is, 8103 * <PRE> 8104 * [dstBase + dstIndex<<dstScale + dstDisp] == (quad) srcReg 8105 * </PRE> 8106 * 8107 * @param dstBase the base register 8108 * @param dstIndex the destination index register 8109 * @param dstScale the destination shift amount 8110 * @param dstDisp the destination displacement 8111 * @param srcReg the source register 8112 */ 8113 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 8114 public final void emitCMP_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 8115 int miStart = mi; 8116 // no group 1 to 4 prefix byte 8117 generateREXprefix(true, srcReg, dstIndex, dstBase); 8118 // single byte opcode 8119 setMachineCodes(mi++, (byte) 0x39); 8120 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 8121 if (lister != null) lister.RXDR(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, srcReg); 8122 } 8123 8124 /** 8125 * Generate a register-displacement--register CMP. That is, 8126 * <PRE> 8127 * [dstBase + dstDisp] == (quad) srcReg 8128 * </PRE> 8129 * 8130 * @param dstBase the base register 8131 * @param dstDisp the destination displacement 8132 * @param srcReg the source register 8133 */ 8134 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 8135 public final void emitCMP_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 8136 int miStart = mi; 8137 // no group 1 to 4 prefix byte 8138 generateREXprefix(true, srcReg, null, dstBase); 8139 // single byte opcode 8140 setMachineCodes(mi++, (byte) 0x39); 8141 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 8142 if (lister != null) lister.RDR(miStart, "CMP", dstBase, dstDisp, srcReg); 8143 } 8144 8145 /** 8146 * Generate a register--register CMP. That is, 8147 * <PRE> 8148 * dstReg == (quad) srcReg 8149 * </PRE> 8150 * 8151 * @param dstReg the destination register 8152 * @param srcReg the source register 8153 */ 8154 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8155 public final void emitCMP_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 8156 int miStart = mi; 8157 // no group 1 to 4 prefix byte 8158 generateREXprefix(true, srcReg, null, dstReg); 8159 // single byte opcode 8160 setMachineCodes(mi++, (byte) 0x39); 8161 emitRegRegOperands(dstReg, srcReg); 8162 if (lister != null) lister.RR(miStart, "CMP", dstReg, srcReg); 8163 } 8164 8165 /** 8166 * Generate a register--register-displacement CMP. That is, 8167 * <PRE> 8168 * dstReg == (quad) [srcReg + srcDisp] 8169 * </PRE> 8170 * 8171 * @param dstReg the destination register 8172 * @param srcBase the source register 8173 * @param srcDisp the source displacement 8174 */ 8175 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8176 public final void emitCMP_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 8177 int miStart = mi; 8178 // no group 1 to 4 prefix byte 8179 generateREXprefix(true, dstReg, null, srcBase); 8180 // single byte opcode 8181 setMachineCodes(mi++, (byte) 0x3B); 8182 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 8183 if (lister != null) lister.RRD(miStart, "CMP", dstReg, srcBase, srcDisp); 8184 } 8185 8186 /** 8187 * Generate a register--register-offset CMP. That is, 8188 * <PRE> 8189 * dstReg == (quad) [srcIndex<<srcScale + srcDisp] 8190 * </PRE> 8191 * 8192 * @param dstReg the destination register 8193 * @param srcIndex the source index register 8194 * @param srcScale the source shift amount 8195 * @param srcDisp the source displacement 8196 */ 8197 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8198 public final void emitCMP_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 8199 int miStart = mi; 8200 // no group 1 to 4 prefix byte 8201 generateREXprefix(true, dstReg, srcIndex, null); 8202 // single byte opcode 8203 setMachineCodes(mi++, (byte) 0x3B); 8204 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 8205 if (lister != null) lister.RRFD(miStart, "CMP", dstReg, srcIndex, srcScale, srcDisp); 8206 } 8207 8208 /** 8209 * Generate a register--register-offset CMP. That is, 8210 * <PRE> 8211 * dstReg == (quad) [srcDisp] 8212 * </PRE> 8213 * 8214 * @param dstReg the destination register 8215 * @param srcDisp the source displacement 8216 */ 8217 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8218 public final void emitCMP_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 8219 int miStart = mi; 8220 // no group 1 to 4 prefix byte 8221 generateREXprefix(true, dstReg, null, null); 8222 // single byte opcode 8223 setMachineCodes(mi++, (byte) 0x3B); 8224 emitAbsRegOperands(srcDisp, dstReg); 8225 if (lister != null) lister.RRA(miStart, "CMP", dstReg, srcDisp); 8226 } 8227 8228 /** 8229 * Generate a register--register-offset CMP. That is, 8230 * <PRE> 8231 * dstReg == (quad) [srcBase + srcIndex<<srcScale + srcDisp] 8232 * </PRE> 8233 * 8234 * @param dstReg the destination register 8235 * @param srcBase the source base register 8236 * @param srcIndex the source index register 8237 * @param srcScale the source shift amount 8238 * @param srcDisp the source displacement 8239 */ 8240 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 8241 public final void emitCMP_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 8242 int miStart = mi; 8243 // no group 1 to 4 prefix byte 8244 generateREXprefix(true, dstReg, srcIndex, srcBase); 8245 // single byte opcode 8246 setMachineCodes(mi++, (byte) 0x3B); 8247 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 8248 if (lister != null) lister.RRXD(miStart, "CMP", dstReg, srcBase, srcIndex, srcScale, srcDisp); 8249 } 8250 8251 /** 8252 * Generate a register--register(indirect) CMP. That is, 8253 * <PRE> 8254 * dstReg == (quad) [srcBase] 8255 * </PRE> 8256 * 8257 * @param dstReg the destination register 8258 * @param srcBase the source base register 8259 */ 8260 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8261 public final void emitCMP_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 8262 int miStart = mi; 8263 // no group 1 to 4 prefix byte 8264 generateREXprefix(true, dstReg, null, srcBase); 8265 // single byte opcode 8266 setMachineCodes(mi++, (byte) 0x3B); 8267 emitRegIndirectRegOperands(srcBase, dstReg); 8268 if (lister != null) lister.RRN(miStart, "CMP", dstReg, srcBase); 8269 } 8270 8271 /** 8272 * Generate a register(indirect)--register CMP. That is, 8273 * <PRE> 8274 * [dstBase] == (byte) srcReg 8275 * </PRE> 8276 * 8277 * @param dstBase the destination base 8278 * @param srcReg the source register 8279 */ 8280 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8281 public final void emitCMP_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 8282 int miStart = mi; 8283 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 8284 // no group 1 to 4 prefix byte 8285 generateREXprefix(false, srcReg, null, dstBase); 8286 // single byte opcode 8287 setMachineCodes(mi++, (byte) 0x38); 8288 emitRegIndirectRegOperands(dstBase, srcReg); 8289 if (lister != null) lister.RNR(miStart, "CMP", dstBase, srcReg); 8290 } 8291 8292 /** 8293 * Generate a register-offset--register CMP. That is, 8294 * <PRE> 8295 * [dstReg<<dstScale + dstDisp] == (byte) srcReg 8296 * </PRE> 8297 * 8298 * @param dstIndex the destination index register 8299 * @param dstScale the destination shift amount 8300 * @param dstDisp the destination displacement 8301 * @param srcReg the source register 8302 */ 8303 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 8304 public final void emitCMP_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 8305 int miStart = mi; 8306 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 8307 // no group 1 to 4 prefix byte 8308 generateREXprefix(false, srcReg, dstIndex, null); 8309 // single byte opcode 8310 setMachineCodes(mi++, (byte) 0x38); 8311 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 8312 if (lister != null) lister.RFDR(miStart, "CMP", dstIndex, dstScale, dstDisp, srcReg); 8313 } 8314 8315 /** 8316 * Generate a absolute--register CMP. That is, 8317 * <PRE> 8318 * [dstDisp] == (byte) srcReg 8319 * </PRE> 8320 * 8321 * @param dstDisp the destination address 8322 * @param srcReg the source register 8323 */ 8324 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 8325 public final void emitCMP_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 8326 int miStart = mi; 8327 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 8328 // no group 1 to 4 prefix byte 8329 generateREXprefix(false, srcReg, null, null); 8330 // single byte opcode 8331 setMachineCodes(mi++, (byte) 0x38); 8332 emitAbsRegOperands(dstDisp, srcReg); 8333 if (lister != null) lister.RAR(miStart, "CMP", dstDisp, srcReg); 8334 } 8335 8336 /** 8337 * Generate a register-index--register CMP. That is, 8338 * <PRE> 8339 * [dstBase + dstIndex<<dstScale + dstDisp] == (byte) srcReg 8340 * </PRE> 8341 * 8342 * @param dstBase the base register 8343 * @param dstIndex the destination index register 8344 * @param dstScale the destination shift amount 8345 * @param dstDisp the destination displacement 8346 * @param srcReg the source register 8347 */ 8348 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 8349 public final void emitCMP_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 8350 int miStart = mi; 8351 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 8352 // no group 1 to 4 prefix byte 8353 generateREXprefix(false, srcReg, dstIndex, dstBase); 8354 // single byte opcode 8355 setMachineCodes(mi++, (byte) 0x38); 8356 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 8357 if (lister != null) lister.RXDR(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, srcReg); 8358 } 8359 8360 /** 8361 * Generate a register-displacement--register CMP. That is, 8362 * <PRE> 8363 * [dstBase + dstDisp] == (byte) srcReg 8364 * </PRE> 8365 * 8366 * @param dstBase the base register 8367 * @param dstDisp the destination displacement 8368 * @param srcReg the source register 8369 */ 8370 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 8371 public final void emitCMP_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 8372 int miStart = mi; 8373 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 8374 // no group 1 to 4 prefix byte 8375 generateREXprefix(false, srcReg, null, dstBase); 8376 // single byte opcode 8377 setMachineCodes(mi++, (byte) 0x38); 8378 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 8379 if (lister != null) lister.RDR(miStart, "CMP", dstBase, dstDisp, srcReg); 8380 } 8381 8382 /** 8383 * Generate a register--register CMP. That is, 8384 * <PRE> 8385 * dstReg == (byte) srcReg 8386 * </PRE> 8387 * 8388 * @param dstReg the destination register 8389 * @param srcReg the source register 8390 */ 8391 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8392 public final void emitCMP_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 8393 int miStart = mi; 8394 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 8395 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 8396 // no group 1 to 4 prefix byte 8397 generateREXprefix(false, srcReg, null, dstReg); 8398 // single byte opcode 8399 setMachineCodes(mi++, (byte) 0x38); 8400 emitRegRegOperands(dstReg, srcReg); 8401 if (lister != null) lister.RR(miStart, "CMP", dstReg, srcReg); 8402 } 8403 8404 /** 8405 * Generate a register--register-displacement CMP. That is, 8406 * <PRE> 8407 * dstReg == (byte) [srcReg + srcDisp] 8408 * </PRE> 8409 * 8410 * @param dstReg the destination register 8411 * @param srcBase the source register 8412 * @param srcDisp the source displacement 8413 */ 8414 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8415 public final void emitCMP_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 8416 int miStart = mi; 8417 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 8418 // no group 1 to 4 prefix byte 8419 generateREXprefix(false, dstReg, null, srcBase); 8420 // single byte opcode 8421 setMachineCodes(mi++, (byte) 0x3A); 8422 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 8423 if (lister != null) lister.RRD(miStart, "CMP", dstReg, srcBase, srcDisp); 8424 } 8425 8426 /** 8427 * Generate a register--register-offset CMP. That is, 8428 * <PRE> 8429 * dstReg == (byte) [srcIndex<<srcScale + srcDisp] 8430 * </PRE> 8431 * 8432 * @param dstReg the destination register 8433 * @param srcIndex the source index register 8434 * @param srcScale the source shift amount 8435 * @param srcDisp the source displacement 8436 */ 8437 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8438 public final void emitCMP_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 8439 int miStart = mi; 8440 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 8441 // no group 1 to 4 prefix byte 8442 generateREXprefix(false, dstReg, srcIndex, null); 8443 // single byte opcode 8444 setMachineCodes(mi++, (byte) 0x3A); 8445 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 8446 if (lister != null) lister.RRFD(miStart, "CMP", dstReg, srcIndex, srcScale, srcDisp); 8447 } 8448 8449 /** 8450 * Generate a register--register-offset CMP. That is, 8451 * <PRE> 8452 * dstReg == (byte) [srcDisp] 8453 * </PRE> 8454 * 8455 * @param dstReg the destination register 8456 * @param srcDisp the source displacement 8457 */ 8458 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8459 public final void emitCMP_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 8460 int miStart = mi; 8461 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 8462 // no group 1 to 4 prefix byte 8463 generateREXprefix(false, dstReg, null, null); 8464 // single byte opcode 8465 setMachineCodes(mi++, (byte) 0x3A); 8466 emitAbsRegOperands(srcDisp, dstReg); 8467 if (lister != null) lister.RRA(miStart, "CMP", dstReg, srcDisp); 8468 } 8469 8470 /** 8471 * Generate a register--register-offset CMP. That is, 8472 * <PRE> 8473 * dstReg == (byte) [srcBase + srcIndex<<srcScale + srcDisp] 8474 * </PRE> 8475 * 8476 * @param dstReg the destination register 8477 * @param srcBase the source base register 8478 * @param srcIndex the source index register 8479 * @param srcScale the source shift amount 8480 * @param srcDisp the source displacement 8481 */ 8482 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 8483 public final void emitCMP_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 8484 int miStart = mi; 8485 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 8486 // no group 1 to 4 prefix byte 8487 generateREXprefix(false, dstReg, srcIndex, srcBase); 8488 // single byte opcode 8489 setMachineCodes(mi++, (byte) 0x3A); 8490 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 8491 if (lister != null) lister.RRXD(miStart, "CMP", dstReg, srcBase, srcIndex, srcScale, srcDisp); 8492 } 8493 8494 /** 8495 * Generate a register--register(indirect) CMP. That is, 8496 * <PRE> 8497 * dstReg == (byte) [srcBase] 8498 * </PRE> 8499 * 8500 * @param dstReg the destination register 8501 * @param srcBase the source base register 8502 */ 8503 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8504 public final void emitCMP_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 8505 int miStart = mi; 8506 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 8507 // no group 1 to 4 prefix byte 8508 generateREXprefix(false, dstReg, null, srcBase); 8509 // single byte opcode 8510 setMachineCodes(mi++, (byte) 0x3A); 8511 emitRegIndirectRegOperands(srcBase, dstReg); 8512 if (lister != null) lister.RRN(miStart, "CMP", dstReg, srcBase); 8513 } 8514 8515 /** 8516 * Generate a register--immediate CMP. That is, 8517 * <PRE> 8518 * dstReg == imm 8519 * </PRE> 8520 * 8521 * @param dstReg the destination register 8522 * @param imm immediate 8523 */ 8524 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8525 public final void emitCMP_Reg_Imm(GPR dstReg, int imm) { 8526 int miStart = mi; 8527 // no group 1 to 4 prefix byte 8528 generateREXprefix(false, null, null, dstReg); 8529 // single byte opcode 8530 if (fits(imm,8)) { 8531 setMachineCodes(mi++, (byte) 0x83); 8532 // "register 0x7" is really part of the opcode 8533 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 8534 emitImm8((byte)imm); 8535 } else if (dstReg == EAX) { 8536 setMachineCodes(mi++, (byte) 0x3D); 8537 emitImm32(imm); 8538 } else { 8539 setMachineCodes(mi++, (byte) 0x81); 8540 // "register 0x7" is really part of the opcode 8541 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 8542 emitImm32(imm); 8543 } 8544 if (lister != null) lister.RI(miStart, "CMP", dstReg, imm); 8545 } 8546 8547 /** 8548 * Generate a register-displacement--immediate CMP. That is, 8549 * <PRE> 8550 * [dstBase + dstDisp] == imm 8551 * </PRE> 8552 * 8553 * @param dstBase the destination register 8554 * @param dstDisp the destination displacement 8555 * @param imm immediate 8556 */ 8557 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8558 public final void emitCMP_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 8559 int miStart = mi; 8560 // no group 1 to 4 prefix byte 8561 generateREXprefix(false, null, null, dstBase); 8562 // single byte opcode 8563 if (fits(imm,8)) { 8564 setMachineCodes(mi++, (byte) 0x83); 8565 // "register 0x7" is really part of the opcode 8566 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 8567 emitImm8((byte)imm); 8568 } else { 8569 setMachineCodes(mi++, (byte) 0x81); 8570 // "register 0x7" is really part of the opcode 8571 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 8572 emitImm32(imm); 8573 } 8574 if (lister != null) lister.RDI(miStart, "CMP", dstBase, dstDisp, imm); 8575 } 8576 8577 /** 8578 * Generate a register-offset--immediate CMP. That is, 8579 * <PRE> 8580 * [dstIndex<<dstScale + dstDisp] == imm 8581 * </PRE> 8582 * 8583 * @param dstIndex the destination index register 8584 * @param dstScale the destination shift amount 8585 * @param dstDisp the destination displacement 8586 * @param imm immediate 8587 */ 8588 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8589 public final void emitCMP_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 8590 int miStart = mi; 8591 // no group 1 to 4 prefix byte 8592 generateREXprefix(false, null, dstIndex, null); 8593 // single byte opcode 8594 if (fits(imm,8)) { 8595 setMachineCodes(mi++, (byte) 0x83); 8596 // "register 0x7" is really part of the opcode 8597 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 8598 emitImm8((byte)imm); 8599 } else { 8600 setMachineCodes(mi++, (byte) 0x81); 8601 // "register 0x7" is really part of the opcode 8602 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 8603 emitImm32(imm); 8604 } 8605 if (lister != null) lister.RFDI(miStart, "CMP", dstIndex, dstScale, dstDisp, imm); 8606 } 8607 8608 /** 8609 * Generate a absolute--immediate CMP. That is, 8610 * <PRE> 8611 * [dstDisp] == imm 8612 * </PRE> 8613 * 8614 * @param dstDisp the destination displacement 8615 * @param imm immediate 8616 */ 8617 public final void emitCMP_Abs_Imm(Address dstDisp, int imm) { 8618 int miStart = mi; 8619 // no group 1 to 4 prefix byte 8620 generateREXprefix(false, null, null, null); 8621 // single byte opcode 8622 if (fits(imm,8)) { 8623 setMachineCodes(mi++, (byte) 0x83); 8624 // "register 0x7" is really part of the opcode 8625 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 8626 emitImm8((byte)imm); 8627 } else { 8628 setMachineCodes(mi++, (byte) 0x81); 8629 // "register 0x7" is really part of the opcode 8630 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 8631 emitImm32(imm); 8632 } 8633 if (lister != null) lister.RAI(miStart, "CMP", dstDisp, imm); 8634 } 8635 8636 /** 8637 * Generate a register-index--immediate CMP. That is, 8638 * <PRE> 8639 * [dstBase + dstIndex<<dstScale + dstDisp] == imm 8640 * </PRE> 8641 * 8642 * @param dstBase the destination base register 8643 * @param dstIndex the destination index register 8644 * @param dstScale the destination shift amount 8645 * @param dstDisp the destination displacement 8646 * @param imm immediate 8647 */ 8648 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8649 public final void emitCMP_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 8650 int miStart = mi; 8651 // no group 1 to 4 prefix byte 8652 generateREXprefix(false, null, dstIndex, dstBase); 8653 // single byte opcode 8654 if (fits(imm,8)) { 8655 setMachineCodes(mi++, (byte) 0x83); 8656 // "register 0x7" is really part of the opcode 8657 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 8658 emitImm8((byte)imm); 8659 } else { 8660 setMachineCodes(mi++, (byte) 0x81); 8661 // "register 0x7" is really part of the opcode 8662 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 8663 emitImm32(imm); 8664 } 8665 if (lister != null) lister.RXDI(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, imm); 8666 } 8667 8668 /** 8669 * Generate a register(indirect)--immediate CMP. That is, 8670 * <PRE> 8671 * [dstBase] == imm 8672 * </PRE> 8673 * 8674 * @param dstBase the destination base register 8675 * @param imm immediate 8676 */ 8677 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8678 public final void emitCMP_RegInd_Imm(GPR dstBase, int imm) { 8679 int miStart = mi; 8680 // no group 1 to 4 prefix byte 8681 generateREXprefix(false, null, null, dstBase); 8682 // single byte opcode 8683 if (fits(imm,8)) { 8684 setMachineCodes(mi++, (byte) 0x83); 8685 // "register 0x7" is really part of the opcode 8686 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 8687 emitImm8((byte)imm); 8688 } else { 8689 setMachineCodes(mi++, (byte) 0x81); 8690 // "register 0x7" is really part of the opcode 8691 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 8692 emitImm32(imm); 8693 } 8694 if (lister != null) lister.RNI(miStart, "CMP", dstBase, imm); 8695 } 8696 8697 /** 8698 * Generate a register--immediate CMP. That is, 8699 * <PRE> 8700 * dstReg == (word) imm 8701 * </PRE> 8702 * 8703 * @param dstReg the destination register 8704 * @param imm immediate 8705 */ 8706 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8707 public final void emitCMP_Reg_Imm_Word(GPR dstReg, int imm) { 8708 int miStart = mi; 8709 setMachineCodes(mi++, (byte) 0x66); 8710 generateREXprefix(false, null, null, dstReg); 8711 // single byte opcode 8712 if (fits(imm,8)) { 8713 setMachineCodes(mi++, (byte) 0x83); 8714 // "register 0x7" is really part of the opcode 8715 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 8716 emitImm8((byte)imm); 8717 } else if (dstReg == EAX) { 8718 setMachineCodes(mi++, (byte) 0x3D); 8719 emitImm16(imm); 8720 } else { 8721 setMachineCodes(mi++, (byte) 0x81); 8722 // "register 0x7" is really part of the opcode 8723 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 8724 emitImm16(imm); 8725 } 8726 if (lister != null) lister.RI(miStart, "CMP", dstReg, imm); 8727 } 8728 8729 /** 8730 * Generate a register-displacement--immediate CMP. That is, 8731 * <PRE> 8732 * [dstBase + dstDisp] == (word) imm 8733 * </PRE> 8734 * 8735 * @param dstBase the destination register 8736 * @param dstDisp the destination displacement 8737 * @param imm immediate 8738 */ 8739 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8740 public final void emitCMP_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 8741 int miStart = mi; 8742 setMachineCodes(mi++, (byte) 0x66); 8743 generateREXprefix(false, null, null, dstBase); 8744 // single byte opcode 8745 if (fits(imm,8)) { 8746 setMachineCodes(mi++, (byte) 0x83); 8747 // "register 0x7" is really part of the opcode 8748 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 8749 emitImm8((byte)imm); 8750 } else { 8751 setMachineCodes(mi++, (byte) 0x81); 8752 // "register 0x7" is really part of the opcode 8753 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 8754 emitImm16(imm); 8755 } 8756 if (lister != null) lister.RDI(miStart, "CMP", dstBase, dstDisp, imm); 8757 } 8758 8759 /** 8760 * Generate a register-offset--immediate CMP. That is, 8761 * <PRE> 8762 * [dstIndex<<dstScale + dstDisp] == (word) imm 8763 * </PRE> 8764 * 8765 * @param dstIndex the destination index register 8766 * @param dstScale the destination shift amount 8767 * @param dstDisp the destination displacement 8768 * @param imm immediate 8769 */ 8770 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8771 public final void emitCMP_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 8772 int miStart = mi; 8773 setMachineCodes(mi++, (byte) 0x66); 8774 generateREXprefix(false, null, dstIndex, null); 8775 // single byte opcode 8776 if (fits(imm,8)) { 8777 setMachineCodes(mi++, (byte) 0x83); 8778 // "register 0x7" is really part of the opcode 8779 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 8780 emitImm8((byte)imm); 8781 } else { 8782 setMachineCodes(mi++, (byte) 0x81); 8783 // "register 0x7" is really part of the opcode 8784 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 8785 emitImm16(imm); 8786 } 8787 if (lister != null) lister.RFDI(miStart, "CMP", dstIndex, dstScale, dstDisp, imm); 8788 } 8789 8790 /** 8791 * Generate a absolute--immediate CMP. That is, 8792 * <PRE> 8793 * [dstDisp] == (word) imm 8794 * </PRE> 8795 * 8796 * @param dstDisp the destination displacement 8797 * @param imm immediate 8798 */ 8799 public final void emitCMP_Abs_Imm_Word(Address dstDisp, int imm) { 8800 int miStart = mi; 8801 setMachineCodes(mi++, (byte) 0x66); 8802 generateREXprefix(false, null, null, null); 8803 // single byte opcode 8804 if (fits(imm,8)) { 8805 setMachineCodes(mi++, (byte) 0x83); 8806 // "register 0x7" is really part of the opcode 8807 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 8808 emitImm8((byte)imm); 8809 } else { 8810 setMachineCodes(mi++, (byte) 0x81); 8811 // "register 0x7" is really part of the opcode 8812 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 8813 emitImm16(imm); 8814 } 8815 if (lister != null) lister.RAI(miStart, "CMP", dstDisp, imm); 8816 } 8817 8818 /** 8819 * Generate a register-index--immediate CMP. That is, 8820 * <PRE> 8821 * [dstBase + dstIndex<<dstScale + dstDisp] == (word) imm 8822 * </PRE> 8823 * 8824 * @param dstBase the destination base register 8825 * @param dstIndex the destination index register 8826 * @param dstScale the destination shift amount 8827 * @param dstDisp the destination displacement 8828 * @param imm immediate 8829 */ 8830 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 8831 public final void emitCMP_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 8832 int miStart = mi; 8833 setMachineCodes(mi++, (byte) 0x66); 8834 generateREXprefix(false, null, dstIndex, dstBase); 8835 // single byte opcode 8836 if (fits(imm,8)) { 8837 setMachineCodes(mi++, (byte) 0x83); 8838 // "register 0x7" is really part of the opcode 8839 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 8840 emitImm8((byte)imm); 8841 } else { 8842 setMachineCodes(mi++, (byte) 0x81); 8843 // "register 0x7" is really part of the opcode 8844 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 8845 emitImm16(imm); 8846 } 8847 if (lister != null) lister.RXDI(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, imm); 8848 } 8849 8850 /** 8851 * Generate a register(indirect)--immediate CMP. That is, 8852 * <PRE> 8853 * [dstBase] == (word) imm 8854 * </PRE> 8855 * 8856 * @param dstBase the destination base register 8857 * @param imm immediate 8858 */ 8859 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8860 public final void emitCMP_RegInd_Imm_Word(GPR dstBase, int imm) { 8861 int miStart = mi; 8862 setMachineCodes(mi++, (byte) 0x66); 8863 generateREXprefix(false, null, null, dstBase); 8864 // single byte opcode 8865 if (fits(imm,8)) { 8866 setMachineCodes(mi++, (byte) 0x83); 8867 // "register 0x7" is really part of the opcode 8868 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 8869 emitImm8((byte)imm); 8870 } else { 8871 setMachineCodes(mi++, (byte) 0x81); 8872 // "register 0x7" is really part of the opcode 8873 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 8874 emitImm16(imm); 8875 } 8876 if (lister != null) lister.RNI(miStart, "CMP", dstBase, imm); 8877 } 8878 8879 /** 8880 * Generate a register--immediate CMP. That is, 8881 * <PRE> 8882 * dstReg == (quad) imm 8883 * </PRE> 8884 * 8885 * @param dstReg the destination register 8886 * @param imm immediate 8887 */ 8888 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8889 public final void emitCMP_Reg_Imm_Quad(GPR dstReg, int imm) { 8890 int miStart = mi; 8891 // no group 1 to 4 prefix byte 8892 generateREXprefix(true, null, null, dstReg); 8893 // single byte opcode 8894 if (fits(imm,8)) { 8895 setMachineCodes(mi++, (byte) 0x83); 8896 // "register 0x7" is really part of the opcode 8897 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 8898 emitImm8((byte)imm); 8899 } else if (dstReg == EAX) { 8900 setMachineCodes(mi++, (byte) 0x3D); 8901 emitImm32(imm); 8902 } else { 8903 setMachineCodes(mi++, (byte) 0x81); 8904 // "register 0x7" is really part of the opcode 8905 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 8906 emitImm32(imm); 8907 } 8908 if (lister != null) lister.RI(miStart, "CMP", dstReg, imm); 8909 } 8910 8911 /** 8912 * Generate a register-displacement--immediate CMP. That is, 8913 * <PRE> 8914 * [dstBase + dstDisp] == (quad) imm 8915 * </PRE> 8916 * 8917 * @param dstBase the destination register 8918 * @param dstDisp the destination displacement 8919 * @param imm immediate 8920 */ 8921 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8922 public final void emitCMP_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 8923 int miStart = mi; 8924 // no group 1 to 4 prefix byte 8925 generateREXprefix(true, null, null, dstBase); 8926 // single byte opcode 8927 if (fits(imm,8)) { 8928 setMachineCodes(mi++, (byte) 0x83); 8929 // "register 0x7" is really part of the opcode 8930 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 8931 emitImm8((byte)imm); 8932 } else { 8933 setMachineCodes(mi++, (byte) 0x81); 8934 // "register 0x7" is really part of the opcode 8935 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 8936 emitImm32(imm); 8937 } 8938 if (lister != null) lister.RDI(miStart, "CMP", dstBase, dstDisp, imm); 8939 } 8940 8941 /** 8942 * Generate a register-offset--immediate CMP. That is, 8943 * <PRE> 8944 * [dstIndex<<dstScale + dstDisp] == (quad) imm 8945 * </PRE> 8946 * 8947 * @param dstIndex the destination index register 8948 * @param dstScale the destination shift amount 8949 * @param dstDisp the destination displacement 8950 * @param imm immediate 8951 */ 8952 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 8953 public final void emitCMP_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 8954 int miStart = mi; 8955 // no group 1 to 4 prefix byte 8956 generateREXprefix(true, null, dstIndex, null); 8957 // single byte opcode 8958 if (fits(imm,8)) { 8959 setMachineCodes(mi++, (byte) 0x83); 8960 // "register 0x7" is really part of the opcode 8961 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 8962 emitImm8((byte)imm); 8963 } else { 8964 setMachineCodes(mi++, (byte) 0x81); 8965 // "register 0x7" is really part of the opcode 8966 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 8967 emitImm32(imm); 8968 } 8969 if (lister != null) lister.RFDI(miStart, "CMP", dstIndex, dstScale, dstDisp, imm); 8970 } 8971 8972 /** 8973 * Generate a absolute--immediate CMP. That is, 8974 * <PRE> 8975 * [dstDisp] == (quad) imm 8976 * </PRE> 8977 * 8978 * @param dstDisp the destination displacement 8979 * @param imm immediate 8980 */ 8981 public final void emitCMP_Abs_Imm_Quad(Address dstDisp, int imm) { 8982 int miStart = mi; 8983 // no group 1 to 4 prefix byte 8984 generateREXprefix(true, null, null, null); 8985 // single byte opcode 8986 if (fits(imm,8)) { 8987 setMachineCodes(mi++, (byte) 0x83); 8988 // "register 0x7" is really part of the opcode 8989 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 8990 emitImm8((byte)imm); 8991 } else { 8992 setMachineCodes(mi++, (byte) 0x81); 8993 // "register 0x7" is really part of the opcode 8994 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 8995 emitImm32(imm); 8996 } 8997 if (lister != null) lister.RAI(miStart, "CMP", dstDisp, imm); 8998 } 8999 9000 /** 9001 * Generate a register-index--immediate CMP. That is, 9002 * <PRE> 9003 * [dstBase + dstIndex<<dstScale + dstDisp] == (quad) imm 9004 * </PRE> 9005 * 9006 * @param dstBase the destination base register 9007 * @param dstIndex the destination index register 9008 * @param dstScale the destination shift amount 9009 * @param dstDisp the destination displacement 9010 * @param imm immediate 9011 */ 9012 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9013 public final void emitCMP_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 9014 int miStart = mi; 9015 // no group 1 to 4 prefix byte 9016 generateREXprefix(true, null, dstIndex, dstBase); 9017 // single byte opcode 9018 if (fits(imm,8)) { 9019 setMachineCodes(mi++, (byte) 0x83); 9020 // "register 0x7" is really part of the opcode 9021 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 9022 emitImm8((byte)imm); 9023 } else { 9024 setMachineCodes(mi++, (byte) 0x81); 9025 // "register 0x7" is really part of the opcode 9026 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 9027 emitImm32(imm); 9028 } 9029 if (lister != null) lister.RXDI(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, imm); 9030 } 9031 9032 /** 9033 * Generate a register(indirect)--immediate CMP. That is, 9034 * <PRE> 9035 * [dstBase] == (quad) imm 9036 * </PRE> 9037 * 9038 * @param dstBase the destination base register 9039 * @param imm immediate 9040 */ 9041 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 9042 public final void emitCMP_RegInd_Imm_Quad(GPR dstBase, int imm) { 9043 int miStart = mi; 9044 // no group 1 to 4 prefix byte 9045 generateREXprefix(true, null, null, dstBase); 9046 // single byte opcode 9047 if (fits(imm,8)) { 9048 setMachineCodes(mi++, (byte) 0x83); 9049 // "register 0x7" is really part of the opcode 9050 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 9051 emitImm8((byte)imm); 9052 } else { 9053 setMachineCodes(mi++, (byte) 0x81); 9054 // "register 0x7" is really part of the opcode 9055 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 9056 emitImm32(imm); 9057 } 9058 if (lister != null) lister.RNI(miStart, "CMP", dstBase, imm); 9059 } 9060 9061 /** 9062 * Generate a register--immediate CMP. That is, 9063 * <PRE> 9064 * dstReg == (byte) imm 9065 * </PRE> 9066 * 9067 * @param dstReg the destination register 9068 * @param imm immediate 9069 */ 9070 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 9071 public final void emitCMP_Reg_Imm_Byte(GPR dstReg, int imm) { 9072 int miStart = mi; 9073 if (dstReg == EAX) { 9074 setMachineCodes(mi++, (byte) 0x3C); 9075 emitImm8(imm); 9076 } else { 9077 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 9078 generateREXprefix(false, null, null, dstReg); 9079 setMachineCodes(mi++, (byte) 0x80); 9080 // "register 0x7" is really part of the opcode 9081 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 9082 emitImm8(imm); 9083 } 9084 if (lister != null) lister.RI(miStart, "CMP", dstReg, imm); 9085 } 9086 9087 /** 9088 * Generate a register-displacement--immediate CMP. That is, 9089 * <PRE> 9090 * [dstBase + dstDisp] == (byte) imm 9091 * </PRE> 9092 * 9093 * @param dstBase the destination register 9094 * @param dstDisp the destination displacement 9095 * @param imm immediate 9096 */ 9097 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 9098 public final void emitCMP_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 9099 int miStart = mi; 9100 generateREXprefix(false, null, null, dstBase); 9101 setMachineCodes(mi++, (byte) 0x80); 9102 // "register 0x7" is really part of the opcode 9103 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 9104 emitImm8(imm); 9105 if (lister != null) lister.RDI(miStart, "CMP", dstBase, dstDisp, imm); 9106 } 9107 9108 /** 9109 * Generate a register-index--immediate CMP. That is, 9110 * <PRE> 9111 * [dstBase + dstIndex<<scale + dstDisp] == (byte) imm 9112 * </PRE> 9113 * 9114 * @param dstBase the destination base register 9115 * @param dstIndex the destination index register 9116 * @param dstScale the destination shift amount 9117 * @param dstDisp the destination displacement 9118 * @param imm immediate 9119 */ 9120 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9121 public final void emitCMP_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 9122 int miStart = mi; 9123 generateREXprefix(false, null, dstIndex, dstBase); 9124 setMachineCodes(mi++, (byte) 0x80); 9125 // "register 0x7" is really part of the opcode 9126 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 9127 emitImm8(imm); 9128 if (lister != null) lister.RXDI(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, imm); 9129 } 9130 9131 /** 9132 * Generate a register-offset--immediate CMP. That is, 9133 * <PRE> 9134 * [dstIndex<<dstScale + dstDisp] == (byte) imm 9135 * </PRE> 9136 * 9137 * @param dstIndex the destination index register 9138 * @param dstScale the destination shift amount 9139 * @param dstDisp the destination displacement 9140 * @param imm immediate 9141 */ 9142 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 9143 public final void emitCMP_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 9144 int miStart = mi; 9145 generateREXprefix(false, null, dstIndex, null); 9146 setMachineCodes(mi++, (byte) 0x80); 9147 // "register 0x7" is really part of the opcode 9148 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 9149 emitImm8(imm); 9150 if (lister != null) lister.RFDI(miStart, "CMP", dstIndex, dstScale, dstDisp, imm); 9151 } 9152 9153 /** 9154 * Generate a absolute--immediate CMP. That is, 9155 * <PRE> 9156 * [dstDisp] == (byte) imm 9157 * </PRE> 9158 * 9159 * @param dstDisp the destination displacement 9160 * @param imm immediate 9161 */ 9162 public final void emitCMP_Abs_Imm_Byte(Address dstDisp, int imm) { 9163 int miStart = mi; 9164 generateREXprefix(false, null, null, null); 9165 setMachineCodes(mi++, (byte) 0x80); 9166 // "register 0x7" is really part of the opcode 9167 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 9168 emitImm8(imm); 9169 if (lister != null) lister.RAI(miStart, "CMP", dstDisp, imm); 9170 } 9171 9172 /** 9173 * Generate a register(indirect)--immediate CMP. That is, 9174 * <PRE> 9175 * [dstBase] == (byte) imm 9176 * </PRE> 9177 * 9178 * @param dstBase the destination base register 9179 * @param imm immediate 9180 */ 9181 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 9182 public final void emitCMP_RegInd_Imm_Byte(GPR dstBase, int imm) { 9183 int miStart = mi; 9184 generateREXprefix(false, null, null, dstBase); 9185 setMachineCodes(mi++, (byte) 0x80); 9186 // "register 0x7" is really part of the opcode 9187 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 9188 emitImm8(imm); 9189 if (lister != null) lister.RNI(miStart, "CMP", dstBase, imm); 9190 } 9191 9192 /** 9193 * Generate a register(indirect)--register OR. That is, 9194 * <PRE> 9195 * [dstBase] |= srcReg 9196 * </PRE> 9197 * 9198 * @param dstBase the destination base 9199 * @param srcReg the source register 9200 */ 9201 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9202 public final void emitOR_RegInd_Reg(GPR dstBase, GPR srcReg) { 9203 int miStart = mi; 9204 // no group 1 to 4 prefix byte 9205 generateREXprefix(false, srcReg, null, dstBase); 9206 // single byte opcode 9207 setMachineCodes(mi++, (byte) 0x09); 9208 emitRegIndirectRegOperands(dstBase, srcReg); 9209 if (lister != null) lister.RNR(miStart, "OR", dstBase, srcReg); 9210 } 9211 9212 /** 9213 * Generate a register-offset--register OR. That is, 9214 * <PRE> 9215 * [dstReg<<dstScale + dstDisp] |= srcReg 9216 * </PRE> 9217 * 9218 * @param dstIndex the destination index register 9219 * @param dstScale the destination shift amount 9220 * @param dstDisp the destination displacement 9221 * @param srcReg the source register 9222 */ 9223 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 9224 public final void emitOR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 9225 int miStart = mi; 9226 // no group 1 to 4 prefix byte 9227 generateREXprefix(false, srcReg, dstIndex, null); 9228 // single byte opcode 9229 setMachineCodes(mi++, (byte) 0x09); 9230 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 9231 if (lister != null) lister.RFDR(miStart, "OR", dstIndex, dstScale, dstDisp, srcReg); 9232 } 9233 9234 /** 9235 * Generate a absolute--register OR. That is, 9236 * <PRE> 9237 * [dstDisp] |= srcReg 9238 * </PRE> 9239 * 9240 * @param dstDisp the destination address 9241 * @param srcReg the source register 9242 */ 9243 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 9244 public final void emitOR_Abs_Reg(Address dstDisp, GPR srcReg) { 9245 int miStart = mi; 9246 // no group 1 to 4 prefix byte 9247 generateREXprefix(false, srcReg, null, null); 9248 // single byte opcode 9249 setMachineCodes(mi++, (byte) 0x09); 9250 emitAbsRegOperands(dstDisp, srcReg); 9251 if (lister != null) lister.RAR(miStart, "OR", dstDisp, srcReg); 9252 } 9253 9254 /** 9255 * Generate a register-index--register OR. That is, 9256 * <PRE> 9257 * [dstBase + dstIndex<<dstScale + dstDisp] |= srcReg 9258 * </PRE> 9259 * 9260 * @param dstBase the base register 9261 * @param dstIndex the destination index register 9262 * @param dstScale the destination shift amount 9263 * @param dstDisp the destination displacement 9264 * @param srcReg the source register 9265 */ 9266 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 9267 public final void emitOR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 9268 int miStart = mi; 9269 // no group 1 to 4 prefix byte 9270 generateREXprefix(false, srcReg, dstIndex, dstBase); 9271 // single byte opcode 9272 setMachineCodes(mi++, (byte) 0x09); 9273 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 9274 if (lister != null) lister.RXDR(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 9275 } 9276 9277 /** 9278 * Generate a register-displacement--register OR. That is, 9279 * <PRE> 9280 * [dstBase + dstDisp] |= srcReg 9281 * </PRE> 9282 * 9283 * @param dstBase the base register 9284 * @param dstDisp the destination displacement 9285 * @param srcReg the source register 9286 */ 9287 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 9288 public final void emitOR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 9289 int miStart = mi; 9290 // no group 1 to 4 prefix byte 9291 generateREXprefix(false, srcReg, null, dstBase); 9292 // single byte opcode 9293 setMachineCodes(mi++, (byte) 0x09); 9294 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 9295 if (lister != null) lister.RDR(miStart, "OR", dstBase, dstDisp, srcReg); 9296 } 9297 9298 /** 9299 * Generate a register--register OR. That is, 9300 * <PRE> 9301 * dstReg |= srcReg 9302 * </PRE> 9303 * 9304 * @param dstReg the destination register 9305 * @param srcReg the source register 9306 */ 9307 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9308 public final void emitOR_Reg_Reg(GPR dstReg, GPR srcReg) { 9309 int miStart = mi; 9310 // no group 1 to 4 prefix byte 9311 generateREXprefix(false, srcReg, null, dstReg); 9312 // single byte opcode 9313 setMachineCodes(mi++, (byte) 0x09); 9314 emitRegRegOperands(dstReg, srcReg); 9315 if (lister != null) lister.RR(miStart, "OR", dstReg, srcReg); 9316 } 9317 9318 /** 9319 * Generate a register--register-displacement OR. That is, 9320 * <PRE> 9321 * dstReg |= [srcReg + srcDisp] 9322 * </PRE> 9323 * 9324 * @param dstReg the destination register 9325 * @param srcBase the source register 9326 * @param srcDisp the source displacement 9327 */ 9328 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9329 public final void emitOR_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 9330 int miStart = mi; 9331 // no group 1 to 4 prefix byte 9332 generateREXprefix(false, dstReg, null, srcBase); 9333 // single byte opcode 9334 setMachineCodes(mi++, (byte) 0x0B); 9335 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 9336 if (lister != null) lister.RRD(miStart, "OR", dstReg, srcBase, srcDisp); 9337 } 9338 9339 /** 9340 * Generate a register--register-offset OR. That is, 9341 * <PRE> 9342 * dstReg |= [srcIndex<<srcScale + srcDisp] 9343 * </PRE> 9344 * 9345 * @param dstReg the destination register 9346 * @param srcIndex the source index register 9347 * @param srcScale the source shift amount 9348 * @param srcDisp the source displacement 9349 */ 9350 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9351 public final void emitOR_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 9352 int miStart = mi; 9353 // no group 1 to 4 prefix byte 9354 generateREXprefix(false, dstReg, srcIndex, null); 9355 // single byte opcode 9356 setMachineCodes(mi++, (byte) 0x0B); 9357 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 9358 if (lister != null) lister.RRFD(miStart, "OR", dstReg, srcIndex, srcScale, srcDisp); 9359 } 9360 9361 /** 9362 * Generate a register--register-offset OR. That is, 9363 * <PRE> 9364 * dstReg |= [srcDisp] 9365 * </PRE> 9366 * 9367 * @param dstReg the destination register 9368 * @param srcDisp the source displacement 9369 */ 9370 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 9371 public final void emitOR_Reg_Abs(GPR dstReg, Address srcDisp) { 9372 int miStart = mi; 9373 // no group 1 to 4 prefix byte 9374 generateREXprefix(false, dstReg, null, null); 9375 // single byte opcode 9376 setMachineCodes(mi++, (byte) 0x0B); 9377 emitAbsRegOperands(srcDisp, dstReg); 9378 if (lister != null) lister.RRA(miStart, "OR", dstReg, srcDisp); 9379 } 9380 9381 /** 9382 * Generate a register--register-offset OR. That is, 9383 * <PRE> 9384 * dstReg |= [srcBase + srcIndex<<srcScale + srcDisp] 9385 * </PRE> 9386 * 9387 * @param dstReg the destination register 9388 * @param srcBase the source base register 9389 * @param srcIndex the source index register 9390 * @param srcScale the source shift amount 9391 * @param srcDisp the source displacement 9392 */ 9393 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 9394 public final void emitOR_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 9395 int miStart = mi; 9396 // no group 1 to 4 prefix byte 9397 generateREXprefix(false, dstReg, srcIndex, srcBase); 9398 // single byte opcode 9399 setMachineCodes(mi++, (byte) 0x0B); 9400 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 9401 if (lister != null) lister.RRXD(miStart, "OR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 9402 } 9403 9404 /** 9405 * Generate a register--register(indirect) OR. That is, 9406 * <PRE> 9407 * dstReg |= [srcBase] 9408 * </PRE> 9409 * 9410 * @param dstReg the destination register 9411 * @param srcBase the source base register 9412 */ 9413 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9414 public final void emitOR_Reg_RegInd(GPR dstReg, GPR srcBase) { 9415 int miStart = mi; 9416 // no group 1 to 4 prefix byte 9417 generateREXprefix(false, dstReg, null, srcBase); 9418 // single byte opcode 9419 setMachineCodes(mi++, (byte) 0x0B); 9420 emitRegIndirectRegOperands(srcBase, dstReg); 9421 if (lister != null) lister.RRN(miStart, "OR", dstReg, srcBase); 9422 } 9423 9424 /** 9425 * Generate a register(indirect)--register OR. That is, 9426 * <PRE> 9427 * [dstBase] |= (word) srcReg 9428 * </PRE> 9429 * 9430 * @param dstBase the destination base 9431 * @param srcReg the source register 9432 */ 9433 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9434 public final void emitOR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 9435 int miStart = mi; 9436 setMachineCodes(mi++, (byte) 0x66); 9437 generateREXprefix(false, srcReg, null, dstBase); 9438 // single byte opcode 9439 setMachineCodes(mi++, (byte) 0x09); 9440 emitRegIndirectRegOperands(dstBase, srcReg); 9441 if (lister != null) lister.RNR(miStart, "OR", dstBase, srcReg); 9442 } 9443 9444 /** 9445 * Generate a register-offset--register OR. That is, 9446 * <PRE> 9447 * [dstReg<<dstScale + dstDisp] |= (word) srcReg 9448 * </PRE> 9449 * 9450 * @param dstIndex the destination index register 9451 * @param dstScale the destination shift amount 9452 * @param dstDisp the destination displacement 9453 * @param srcReg the source register 9454 */ 9455 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 9456 public final void emitOR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 9457 int miStart = mi; 9458 setMachineCodes(mi++, (byte) 0x66); 9459 generateREXprefix(false, srcReg, dstIndex, null); 9460 // single byte opcode 9461 setMachineCodes(mi++, (byte) 0x09); 9462 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 9463 if (lister != null) lister.RFDR(miStart, "OR", dstIndex, dstScale, dstDisp, srcReg); 9464 } 9465 9466 /** 9467 * Generate a absolute--register OR. That is, 9468 * <PRE> 9469 * [dstDisp] |= (word) srcReg 9470 * </PRE> 9471 * 9472 * @param dstDisp the destination address 9473 * @param srcReg the source register 9474 */ 9475 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 9476 public final void emitOR_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 9477 int miStart = mi; 9478 setMachineCodes(mi++, (byte) 0x66); 9479 generateREXprefix(false, srcReg, null, null); 9480 // single byte opcode 9481 setMachineCodes(mi++, (byte) 0x09); 9482 emitAbsRegOperands(dstDisp, srcReg); 9483 if (lister != null) lister.RAR(miStart, "OR", dstDisp, srcReg); 9484 } 9485 9486 /** 9487 * Generate a register-index--register OR. That is, 9488 * <PRE> 9489 * [dstBase + dstIndex<<dstScale + dstDisp] |= (word) srcReg 9490 * </PRE> 9491 * 9492 * @param dstBase the base register 9493 * @param dstIndex the destination index register 9494 * @param dstScale the destination shift amount 9495 * @param dstDisp the destination displacement 9496 * @param srcReg the source register 9497 */ 9498 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 9499 public final void emitOR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 9500 int miStart = mi; 9501 setMachineCodes(mi++, (byte) 0x66); 9502 generateREXprefix(false, srcReg, dstIndex, dstBase); 9503 // single byte opcode 9504 setMachineCodes(mi++, (byte) 0x09); 9505 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 9506 if (lister != null) lister.RXDR(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 9507 } 9508 9509 /** 9510 * Generate a register-displacement--register OR. That is, 9511 * <PRE> 9512 * [dstBase + dstDisp] |= (word) srcReg 9513 * </PRE> 9514 * 9515 * @param dstBase the base register 9516 * @param dstDisp the destination displacement 9517 * @param srcReg the source register 9518 */ 9519 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 9520 public final void emitOR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 9521 int miStart = mi; 9522 setMachineCodes(mi++, (byte) 0x66); 9523 generateREXprefix(false, srcReg, null, dstBase); 9524 // single byte opcode 9525 setMachineCodes(mi++, (byte) 0x09); 9526 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 9527 if (lister != null) lister.RDR(miStart, "OR", dstBase, dstDisp, srcReg); 9528 } 9529 9530 /** 9531 * Generate a register--register OR. That is, 9532 * <PRE> 9533 * dstReg |= (word) srcReg 9534 * </PRE> 9535 * 9536 * @param dstReg the destination register 9537 * @param srcReg the source register 9538 */ 9539 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9540 public final void emitOR_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 9541 int miStart = mi; 9542 setMachineCodes(mi++, (byte) 0x66); 9543 generateREXprefix(false, srcReg, null, dstReg); 9544 // single byte opcode 9545 setMachineCodes(mi++, (byte) 0x09); 9546 emitRegRegOperands(dstReg, srcReg); 9547 if (lister != null) lister.RR(miStart, "OR", dstReg, srcReg); 9548 } 9549 9550 /** 9551 * Generate a register--register-displacement OR. That is, 9552 * <PRE> 9553 * dstReg |= (word) [srcReg + srcDisp] 9554 * </PRE> 9555 * 9556 * @param dstReg the destination register 9557 * @param srcBase the source register 9558 * @param srcDisp the source displacement 9559 */ 9560 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9561 public final void emitOR_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 9562 int miStart = mi; 9563 setMachineCodes(mi++, (byte) 0x66); 9564 generateREXprefix(false, dstReg, null, srcBase); 9565 // single byte opcode 9566 setMachineCodes(mi++, (byte) 0x0B); 9567 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 9568 if (lister != null) lister.RRD(miStart, "OR", dstReg, srcBase, srcDisp); 9569 } 9570 9571 /** 9572 * Generate a register--register-offset OR. That is, 9573 * <PRE> 9574 * dstReg |= (word) [srcIndex<<srcScale + srcDisp] 9575 * </PRE> 9576 * 9577 * @param dstReg the destination register 9578 * @param srcIndex the source index register 9579 * @param srcScale the source shift amount 9580 * @param srcDisp the source displacement 9581 */ 9582 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9583 public final void emitOR_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 9584 int miStart = mi; 9585 setMachineCodes(mi++, (byte) 0x66); 9586 generateREXprefix(false, dstReg, srcIndex, null); 9587 // single byte opcode 9588 setMachineCodes(mi++, (byte) 0x0B); 9589 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 9590 if (lister != null) lister.RRFD(miStart, "OR", dstReg, srcIndex, srcScale, srcDisp); 9591 } 9592 9593 /** 9594 * Generate a register--register-offset OR. That is, 9595 * <PRE> 9596 * dstReg |= (word) [srcDisp] 9597 * </PRE> 9598 * 9599 * @param dstReg the destination register 9600 * @param srcDisp the source displacement 9601 */ 9602 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 9603 public final void emitOR_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 9604 int miStart = mi; 9605 setMachineCodes(mi++, (byte) 0x66); 9606 generateREXprefix(false, dstReg, null, null); 9607 // single byte opcode 9608 setMachineCodes(mi++, (byte) 0x0B); 9609 emitAbsRegOperands(srcDisp, dstReg); 9610 if (lister != null) lister.RRA(miStart, "OR", dstReg, srcDisp); 9611 } 9612 9613 /** 9614 * Generate a register--register-offset OR. That is, 9615 * <PRE> 9616 * dstReg |= (word) [srcBase + srcIndex<<srcScale + srcDisp] 9617 * </PRE> 9618 * 9619 * @param dstReg the destination register 9620 * @param srcBase the source base register 9621 * @param srcIndex the source index register 9622 * @param srcScale the source shift amount 9623 * @param srcDisp the source displacement 9624 */ 9625 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 9626 public final void emitOR_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 9627 int miStart = mi; 9628 setMachineCodes(mi++, (byte) 0x66); 9629 generateREXprefix(false, dstReg, srcIndex, srcBase); 9630 // single byte opcode 9631 setMachineCodes(mi++, (byte) 0x0B); 9632 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 9633 if (lister != null) lister.RRXD(miStart, "OR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 9634 } 9635 9636 /** 9637 * Generate a register--register(indirect) OR. That is, 9638 * <PRE> 9639 * dstReg |= (word) [srcBase] 9640 * </PRE> 9641 * 9642 * @param dstReg the destination register 9643 * @param srcBase the source base register 9644 */ 9645 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9646 public final void emitOR_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 9647 int miStart = mi; 9648 setMachineCodes(mi++, (byte) 0x66); 9649 generateREXprefix(false, dstReg, null, srcBase); 9650 // single byte opcode 9651 setMachineCodes(mi++, (byte) 0x0B); 9652 emitRegIndirectRegOperands(srcBase, dstReg); 9653 if (lister != null) lister.RRN(miStart, "OR", dstReg, srcBase); 9654 } 9655 9656 /** 9657 * Generate a register(indirect)--register OR. That is, 9658 * <PRE> 9659 * [dstBase] |= (quad) srcReg 9660 * </PRE> 9661 * 9662 * @param dstBase the destination base 9663 * @param srcReg the source register 9664 */ 9665 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9666 public final void emitOR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 9667 int miStart = mi; 9668 // no group 1 to 4 prefix byte 9669 generateREXprefix(true, srcReg, null, dstBase); 9670 // single byte opcode 9671 setMachineCodes(mi++, (byte) 0x09); 9672 emitRegIndirectRegOperands(dstBase, srcReg); 9673 if (lister != null) lister.RNR(miStart, "OR", dstBase, srcReg); 9674 } 9675 9676 /** 9677 * Generate a register-offset--register OR. That is, 9678 * <PRE> 9679 * [dstReg<<dstScale + dstDisp] |= (quad) srcReg 9680 * </PRE> 9681 * 9682 * @param dstIndex the destination index register 9683 * @param dstScale the destination shift amount 9684 * @param dstDisp the destination displacement 9685 * @param srcReg the source register 9686 */ 9687 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 9688 public final void emitOR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 9689 int miStart = mi; 9690 // no group 1 to 4 prefix byte 9691 generateREXprefix(true, srcReg, dstIndex, null); 9692 // single byte opcode 9693 setMachineCodes(mi++, (byte) 0x09); 9694 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 9695 if (lister != null) lister.RFDR(miStart, "OR", dstIndex, dstScale, dstDisp, srcReg); 9696 } 9697 9698 /** 9699 * Generate a absolute--register OR. That is, 9700 * <PRE> 9701 * [dstDisp] |= (quad) srcReg 9702 * </PRE> 9703 * 9704 * @param dstDisp the destination address 9705 * @param srcReg the source register 9706 */ 9707 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 9708 public final void emitOR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 9709 int miStart = mi; 9710 // no group 1 to 4 prefix byte 9711 generateREXprefix(true, srcReg, null, null); 9712 // single byte opcode 9713 setMachineCodes(mi++, (byte) 0x09); 9714 emitAbsRegOperands(dstDisp, srcReg); 9715 if (lister != null) lister.RAR(miStart, "OR", dstDisp, srcReg); 9716 } 9717 9718 /** 9719 * Generate a register-index--register OR. That is, 9720 * <PRE> 9721 * [dstBase + dstIndex<<dstScale + dstDisp] |= (quad) srcReg 9722 * </PRE> 9723 * 9724 * @param dstBase the base register 9725 * @param dstIndex the destination index register 9726 * @param dstScale the destination shift amount 9727 * @param dstDisp the destination displacement 9728 * @param srcReg the source register 9729 */ 9730 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 9731 public final void emitOR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 9732 int miStart = mi; 9733 // no group 1 to 4 prefix byte 9734 generateREXprefix(true, srcReg, dstIndex, dstBase); 9735 // single byte opcode 9736 setMachineCodes(mi++, (byte) 0x09); 9737 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 9738 if (lister != null) lister.RXDR(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 9739 } 9740 9741 /** 9742 * Generate a register-displacement--register OR. That is, 9743 * <PRE> 9744 * [dstBase + dstDisp] |= (quad) srcReg 9745 * </PRE> 9746 * 9747 * @param dstBase the base register 9748 * @param dstDisp the destination displacement 9749 * @param srcReg the source register 9750 */ 9751 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 9752 public final void emitOR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 9753 int miStart = mi; 9754 // no group 1 to 4 prefix byte 9755 generateREXprefix(true, srcReg, null, dstBase); 9756 // single byte opcode 9757 setMachineCodes(mi++, (byte) 0x09); 9758 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 9759 if (lister != null) lister.RDR(miStart, "OR", dstBase, dstDisp, srcReg); 9760 } 9761 9762 /** 9763 * Generate a register--register OR. That is, 9764 * <PRE> 9765 * dstReg |= (quad) srcReg 9766 * </PRE> 9767 * 9768 * @param dstReg the destination register 9769 * @param srcReg the source register 9770 */ 9771 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9772 public final void emitOR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 9773 int miStart = mi; 9774 // no group 1 to 4 prefix byte 9775 generateREXprefix(true, srcReg, null, dstReg); 9776 // single byte opcode 9777 setMachineCodes(mi++, (byte) 0x09); 9778 emitRegRegOperands(dstReg, srcReg); 9779 if (lister != null) lister.RR(miStart, "OR", dstReg, srcReg); 9780 } 9781 9782 /** 9783 * Generate a register--register-displacement OR. That is, 9784 * <PRE> 9785 * dstReg |= (quad) [srcReg + srcDisp] 9786 * </PRE> 9787 * 9788 * @param dstReg the destination register 9789 * @param srcBase the source register 9790 * @param srcDisp the source displacement 9791 */ 9792 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9793 public final void emitOR_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 9794 int miStart = mi; 9795 // no group 1 to 4 prefix byte 9796 generateREXprefix(true, dstReg, null, srcBase); 9797 // single byte opcode 9798 setMachineCodes(mi++, (byte) 0x0B); 9799 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 9800 if (lister != null) lister.RRD(miStart, "OR", dstReg, srcBase, srcDisp); 9801 } 9802 9803 /** 9804 * Generate a register--register-offset OR. That is, 9805 * <PRE> 9806 * dstReg |= (quad) [srcIndex<<srcScale + srcDisp] 9807 * </PRE> 9808 * 9809 * @param dstReg the destination register 9810 * @param srcIndex the source index register 9811 * @param srcScale the source shift amount 9812 * @param srcDisp the source displacement 9813 */ 9814 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9815 public final void emitOR_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 9816 int miStart = mi; 9817 // no group 1 to 4 prefix byte 9818 generateREXprefix(true, dstReg, srcIndex, null); 9819 // single byte opcode 9820 setMachineCodes(mi++, (byte) 0x0B); 9821 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 9822 if (lister != null) lister.RRFD(miStart, "OR", dstReg, srcIndex, srcScale, srcDisp); 9823 } 9824 9825 /** 9826 * Generate a register--register-offset OR. That is, 9827 * <PRE> 9828 * dstReg |= (quad) [srcDisp] 9829 * </PRE> 9830 * 9831 * @param dstReg the destination register 9832 * @param srcDisp the source displacement 9833 */ 9834 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 9835 public final void emitOR_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 9836 int miStart = mi; 9837 // no group 1 to 4 prefix byte 9838 generateREXprefix(true, dstReg, null, null); 9839 // single byte opcode 9840 setMachineCodes(mi++, (byte) 0x0B); 9841 emitAbsRegOperands(srcDisp, dstReg); 9842 if (lister != null) lister.RRA(miStart, "OR", dstReg, srcDisp); 9843 } 9844 9845 /** 9846 * Generate a register--register-offset OR. That is, 9847 * <PRE> 9848 * dstReg |= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 9849 * </PRE> 9850 * 9851 * @param dstReg the destination register 9852 * @param srcBase the source base register 9853 * @param srcIndex the source index register 9854 * @param srcScale the source shift amount 9855 * @param srcDisp the source displacement 9856 */ 9857 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 9858 public final void emitOR_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 9859 int miStart = mi; 9860 // no group 1 to 4 prefix byte 9861 generateREXprefix(true, dstReg, srcIndex, srcBase); 9862 // single byte opcode 9863 setMachineCodes(mi++, (byte) 0x0B); 9864 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 9865 if (lister != null) lister.RRXD(miStart, "OR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 9866 } 9867 9868 /** 9869 * Generate a register--register(indirect) OR. That is, 9870 * <PRE> 9871 * dstReg |= (quad) [srcBase] 9872 * </PRE> 9873 * 9874 * @param dstReg the destination register 9875 * @param srcBase the source base register 9876 */ 9877 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9878 public final void emitOR_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 9879 int miStart = mi; 9880 // no group 1 to 4 prefix byte 9881 generateREXprefix(true, dstReg, null, srcBase); 9882 // single byte opcode 9883 setMachineCodes(mi++, (byte) 0x0B); 9884 emitRegIndirectRegOperands(srcBase, dstReg); 9885 if (lister != null) lister.RRN(miStart, "OR", dstReg, srcBase); 9886 } 9887 9888 /** 9889 * Generate a register(indirect)--register OR. That is, 9890 * <PRE> 9891 * [dstBase] |= (byte) srcReg 9892 * </PRE> 9893 * 9894 * @param dstBase the destination base 9895 * @param srcReg the source register 9896 */ 9897 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 9898 public final void emitOR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 9899 int miStart = mi; 9900 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 9901 // no group 1 to 4 prefix byte 9902 generateREXprefix(false, srcReg, null, dstBase); 9903 // single byte opcode 9904 setMachineCodes(mi++, (byte) 0x08); 9905 emitRegIndirectRegOperands(dstBase, srcReg); 9906 if (lister != null) lister.RNR(miStart, "OR", dstBase, srcReg); 9907 } 9908 9909 /** 9910 * Generate a register-offset--register OR. That is, 9911 * <PRE> 9912 * [dstReg<<dstScale + dstDisp] |= (byte) srcReg 9913 * </PRE> 9914 * 9915 * @param dstIndex the destination index register 9916 * @param dstScale the destination shift amount 9917 * @param dstDisp the destination displacement 9918 * @param srcReg the source register 9919 */ 9920 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 9921 public final void emitOR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 9922 int miStart = mi; 9923 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 9924 // no group 1 to 4 prefix byte 9925 generateREXprefix(false, srcReg, dstIndex, null); 9926 // single byte opcode 9927 setMachineCodes(mi++, (byte) 0x08); 9928 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 9929 if (lister != null) lister.RFDR(miStart, "OR", dstIndex, dstScale, dstDisp, srcReg); 9930 } 9931 9932 /** 9933 * Generate a absolute--register OR. That is, 9934 * <PRE> 9935 * [dstDisp] |= (byte) srcReg 9936 * </PRE> 9937 * 9938 * @param dstDisp the destination address 9939 * @param srcReg the source register 9940 */ 9941 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 9942 public final void emitOR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 9943 int miStart = mi; 9944 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 9945 // no group 1 to 4 prefix byte 9946 generateREXprefix(false, srcReg, null, null); 9947 // single byte opcode 9948 setMachineCodes(mi++, (byte) 0x08); 9949 emitAbsRegOperands(dstDisp, srcReg); 9950 if (lister != null) lister.RAR(miStart, "OR", dstDisp, srcReg); 9951 } 9952 9953 /** 9954 * Generate a register-index--register OR. That is, 9955 * <PRE> 9956 * [dstBase + dstIndex<<dstScale + dstDisp] |= (byte) srcReg 9957 * </PRE> 9958 * 9959 * @param dstBase the base register 9960 * @param dstIndex the destination index register 9961 * @param dstScale the destination shift amount 9962 * @param dstDisp the destination displacement 9963 * @param srcReg the source register 9964 */ 9965 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 9966 public final void emitOR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 9967 int miStart = mi; 9968 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 9969 // no group 1 to 4 prefix byte 9970 generateREXprefix(false, srcReg, dstIndex, dstBase); 9971 // single byte opcode 9972 setMachineCodes(mi++, (byte) 0x08); 9973 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 9974 if (lister != null) lister.RXDR(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 9975 } 9976 9977 /** 9978 * Generate a register-displacement--register OR. That is, 9979 * <PRE> 9980 * [dstBase + dstDisp] |= (byte) srcReg 9981 * </PRE> 9982 * 9983 * @param dstBase the base register 9984 * @param dstDisp the destination displacement 9985 * @param srcReg the source register 9986 */ 9987 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 9988 public final void emitOR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 9989 int miStart = mi; 9990 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 9991 // no group 1 to 4 prefix byte 9992 generateREXprefix(false, srcReg, null, dstBase); 9993 // single byte opcode 9994 setMachineCodes(mi++, (byte) 0x08); 9995 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 9996 if (lister != null) lister.RDR(miStart, "OR", dstBase, dstDisp, srcReg); 9997 } 9998 9999 /** 10000 * Generate a register--register OR. That is, 10001 * <PRE> 10002 * dstReg |= (byte) srcReg 10003 * </PRE> 10004 * 10005 * @param dstReg the destination register 10006 * @param srcReg the source register 10007 */ 10008 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10009 public final void emitOR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 10010 int miStart = mi; 10011 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 10012 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 10013 // no group 1 to 4 prefix byte 10014 generateREXprefix(false, srcReg, null, dstReg); 10015 // single byte opcode 10016 setMachineCodes(mi++, (byte) 0x08); 10017 emitRegRegOperands(dstReg, srcReg); 10018 if (lister != null) lister.RR(miStart, "OR", dstReg, srcReg); 10019 } 10020 10021 /** 10022 * Generate a register--register-displacement OR. That is, 10023 * <PRE> 10024 * dstReg |= (byte) [srcReg + srcDisp] 10025 * </PRE> 10026 * 10027 * @param dstReg the destination register 10028 * @param srcBase the source register 10029 * @param srcDisp the source displacement 10030 */ 10031 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10032 public final void emitOR_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 10033 int miStart = mi; 10034 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 10035 // no group 1 to 4 prefix byte 10036 generateREXprefix(false, dstReg, null, srcBase); 10037 // single byte opcode 10038 setMachineCodes(mi++, (byte) 0x0A); 10039 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 10040 if (lister != null) lister.RRD(miStart, "OR", dstReg, srcBase, srcDisp); 10041 } 10042 10043 /** 10044 * Generate a register--register-offset OR. That is, 10045 * <PRE> 10046 * dstReg |= (byte) [srcIndex<<srcScale + srcDisp] 10047 * </PRE> 10048 * 10049 * @param dstReg the destination register 10050 * @param srcIndex the source index register 10051 * @param srcScale the source shift amount 10052 * @param srcDisp the source displacement 10053 */ 10054 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10055 public final void emitOR_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 10056 int miStart = mi; 10057 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 10058 // no group 1 to 4 prefix byte 10059 generateREXprefix(false, dstReg, srcIndex, null); 10060 // single byte opcode 10061 setMachineCodes(mi++, (byte) 0x0A); 10062 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 10063 if (lister != null) lister.RRFD(miStart, "OR", dstReg, srcIndex, srcScale, srcDisp); 10064 } 10065 10066 /** 10067 * Generate a register--register-offset OR. That is, 10068 * <PRE> 10069 * dstReg |= (byte) [srcDisp] 10070 * </PRE> 10071 * 10072 * @param dstReg the destination register 10073 * @param srcDisp the source displacement 10074 */ 10075 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10076 public final void emitOR_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 10077 int miStart = mi; 10078 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 10079 // no group 1 to 4 prefix byte 10080 generateREXprefix(false, dstReg, null, null); 10081 // single byte opcode 10082 setMachineCodes(mi++, (byte) 0x0A); 10083 emitAbsRegOperands(srcDisp, dstReg); 10084 if (lister != null) lister.RRA(miStart, "OR", dstReg, srcDisp); 10085 } 10086 10087 /** 10088 * Generate a register--register-offset OR. That is, 10089 * <PRE> 10090 * dstReg |= (byte) [srcBase + srcIndex<<srcScale + srcDisp] 10091 * </PRE> 10092 * 10093 * @param dstReg the destination register 10094 * @param srcBase the source base register 10095 * @param srcIndex the source index register 10096 * @param srcScale the source shift amount 10097 * @param srcDisp the source displacement 10098 */ 10099 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 10100 public final void emitOR_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 10101 int miStart = mi; 10102 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 10103 // no group 1 to 4 prefix byte 10104 generateREXprefix(false, dstReg, srcIndex, srcBase); 10105 // single byte opcode 10106 setMachineCodes(mi++, (byte) 0x0A); 10107 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 10108 if (lister != null) lister.RRXD(miStart, "OR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 10109 } 10110 10111 /** 10112 * Generate a register--register(indirect) OR. That is, 10113 * <PRE> 10114 * dstReg |= (byte) [srcBase] 10115 * </PRE> 10116 * 10117 * @param dstReg the destination register 10118 * @param srcBase the source base register 10119 */ 10120 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10121 public final void emitOR_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 10122 int miStart = mi; 10123 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 10124 // no group 1 to 4 prefix byte 10125 generateREXprefix(false, dstReg, null, srcBase); 10126 // single byte opcode 10127 setMachineCodes(mi++, (byte) 0x0A); 10128 emitRegIndirectRegOperands(srcBase, dstReg); 10129 if (lister != null) lister.RRN(miStart, "OR", dstReg, srcBase); 10130 } 10131 10132 /** 10133 * Generate a register--immediate OR. That is, 10134 * <PRE> 10135 * dstReg |= imm 10136 * </PRE> 10137 * 10138 * @param dstReg the destination register 10139 * @param imm immediate 10140 */ 10141 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10142 public final void emitOR_Reg_Imm(GPR dstReg, int imm) { 10143 int miStart = mi; 10144 // no group 1 to 4 prefix byte 10145 generateREXprefix(false, null, null, dstReg); 10146 // single byte opcode 10147 if (fits(imm,8)) { 10148 setMachineCodes(mi++, (byte) 0x83); 10149 // "register 0x1" is really part of the opcode 10150 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 10151 emitImm8((byte)imm); 10152 } else if (dstReg == EAX) { 10153 setMachineCodes(mi++, (byte) 0x0D); 10154 emitImm32(imm); 10155 } else { 10156 setMachineCodes(mi++, (byte) 0x81); 10157 // "register 0x1" is really part of the opcode 10158 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 10159 emitImm32(imm); 10160 } 10161 if (lister != null) lister.RI(miStart, "OR", dstReg, imm); 10162 } 10163 10164 /** 10165 * Generate a register-displacement--immediate OR. That is, 10166 * <PRE> 10167 * [dstBase + dstDisp] |= imm 10168 * </PRE> 10169 * 10170 * @param dstBase the destination register 10171 * @param dstDisp the destination displacement 10172 * @param imm immediate 10173 */ 10174 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10175 public final void emitOR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 10176 int miStart = mi; 10177 // no group 1 to 4 prefix byte 10178 generateREXprefix(false, null, null, dstBase); 10179 // single byte opcode 10180 if (fits(imm,8)) { 10181 setMachineCodes(mi++, (byte) 0x83); 10182 // "register 0x1" is really part of the opcode 10183 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 10184 emitImm8((byte)imm); 10185 } else { 10186 setMachineCodes(mi++, (byte) 0x81); 10187 // "register 0x1" is really part of the opcode 10188 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 10189 emitImm32(imm); 10190 } 10191 if (lister != null) lister.RDI(miStart, "OR", dstBase, dstDisp, imm); 10192 } 10193 10194 /** 10195 * Generate a register-offset--immediate OR. That is, 10196 * <PRE> 10197 * [dstIndex<<dstScale + dstDisp] |= imm 10198 * </PRE> 10199 * 10200 * @param dstIndex the destination index register 10201 * @param dstScale the destination shift amount 10202 * @param dstDisp the destination displacement 10203 * @param imm immediate 10204 */ 10205 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10206 public final void emitOR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 10207 int miStart = mi; 10208 // no group 1 to 4 prefix byte 10209 generateREXprefix(false, null, dstIndex, null); 10210 // single byte opcode 10211 if (fits(imm,8)) { 10212 setMachineCodes(mi++, (byte) 0x83); 10213 // "register 0x1" is really part of the opcode 10214 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10215 emitImm8((byte)imm); 10216 } else { 10217 setMachineCodes(mi++, (byte) 0x81); 10218 // "register 0x1" is really part of the opcode 10219 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10220 emitImm32(imm); 10221 } 10222 if (lister != null) lister.RFDI(miStart, "OR", dstIndex, dstScale, dstDisp, imm); 10223 } 10224 10225 /** 10226 * Generate a absolute--immediate OR. That is, 10227 * <PRE> 10228 * [dstDisp] |= imm 10229 * </PRE> 10230 * 10231 * @param dstDisp the destination displacement 10232 * @param imm immediate 10233 */ 10234 public final void emitOR_Abs_Imm(Address dstDisp, int imm) { 10235 int miStart = mi; 10236 // no group 1 to 4 prefix byte 10237 generateREXprefix(false, null, null, null); 10238 // single byte opcode 10239 if (fits(imm,8)) { 10240 setMachineCodes(mi++, (byte) 0x83); 10241 // "register 0x1" is really part of the opcode 10242 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 10243 emitImm8((byte)imm); 10244 } else { 10245 setMachineCodes(mi++, (byte) 0x81); 10246 // "register 0x1" is really part of the opcode 10247 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 10248 emitImm32(imm); 10249 } 10250 if (lister != null) lister.RAI(miStart, "OR", dstDisp, imm); 10251 } 10252 10253 /** 10254 * Generate a register-index--immediate OR. That is, 10255 * <PRE> 10256 * [dstBase + dstIndex<<dstScale + dstDisp] |= imm 10257 * </PRE> 10258 * 10259 * @param dstBase the destination base register 10260 * @param dstIndex the destination index register 10261 * @param dstScale the destination shift amount 10262 * @param dstDisp the destination displacement 10263 * @param imm immediate 10264 */ 10265 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10266 public final void emitOR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 10267 int miStart = mi; 10268 // no group 1 to 4 prefix byte 10269 generateREXprefix(false, null, dstIndex, dstBase); 10270 // single byte opcode 10271 if (fits(imm,8)) { 10272 setMachineCodes(mi++, (byte) 0x83); 10273 // "register 0x1" is really part of the opcode 10274 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10275 emitImm8((byte)imm); 10276 } else { 10277 setMachineCodes(mi++, (byte) 0x81); 10278 // "register 0x1" is really part of the opcode 10279 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10280 emitImm32(imm); 10281 } 10282 if (lister != null) lister.RXDI(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, imm); 10283 } 10284 10285 /** 10286 * Generate a register(indirect)--immediate OR. That is, 10287 * <PRE> 10288 * [dstBase] |= imm 10289 * </PRE> 10290 * 10291 * @param dstBase the destination base register 10292 * @param imm immediate 10293 */ 10294 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10295 public final void emitOR_RegInd_Imm(GPR dstBase, int imm) { 10296 int miStart = mi; 10297 // no group 1 to 4 prefix byte 10298 generateREXprefix(false, null, null, dstBase); 10299 // single byte opcode 10300 if (fits(imm,8)) { 10301 setMachineCodes(mi++, (byte) 0x83); 10302 // "register 0x1" is really part of the opcode 10303 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 10304 emitImm8((byte)imm); 10305 } else { 10306 setMachineCodes(mi++, (byte) 0x81); 10307 // "register 0x1" is really part of the opcode 10308 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 10309 emitImm32(imm); 10310 } 10311 if (lister != null) lister.RNI(miStart, "OR", dstBase, imm); 10312 } 10313 10314 /** 10315 * Generate a register--immediate OR. That is, 10316 * <PRE> 10317 * dstReg |= (word) imm 10318 * </PRE> 10319 * 10320 * @param dstReg the destination register 10321 * @param imm immediate 10322 */ 10323 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10324 public final void emitOR_Reg_Imm_Word(GPR dstReg, int imm) { 10325 int miStart = mi; 10326 setMachineCodes(mi++, (byte) 0x66); 10327 generateREXprefix(false, null, null, dstReg); 10328 // single byte opcode 10329 if (fits(imm,8)) { 10330 setMachineCodes(mi++, (byte) 0x83); 10331 // "register 0x1" is really part of the opcode 10332 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 10333 emitImm8((byte)imm); 10334 } else if (dstReg == EAX) { 10335 setMachineCodes(mi++, (byte) 0x0D); 10336 emitImm16(imm); 10337 } else { 10338 setMachineCodes(mi++, (byte) 0x81); 10339 // "register 0x1" is really part of the opcode 10340 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 10341 emitImm16(imm); 10342 } 10343 if (lister != null) lister.RI(miStart, "OR", dstReg, imm); 10344 } 10345 10346 /** 10347 * Generate a register-displacement--immediate OR. That is, 10348 * <PRE> 10349 * [dstBase + dstDisp] |= (word) imm 10350 * </PRE> 10351 * 10352 * @param dstBase the destination register 10353 * @param dstDisp the destination displacement 10354 * @param imm immediate 10355 */ 10356 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10357 public final void emitOR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 10358 int miStart = mi; 10359 setMachineCodes(mi++, (byte) 0x66); 10360 generateREXprefix(false, null, null, dstBase); 10361 // single byte opcode 10362 if (fits(imm,8)) { 10363 setMachineCodes(mi++, (byte) 0x83); 10364 // "register 0x1" is really part of the opcode 10365 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 10366 emitImm8((byte)imm); 10367 } else { 10368 setMachineCodes(mi++, (byte) 0x81); 10369 // "register 0x1" is really part of the opcode 10370 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 10371 emitImm16(imm); 10372 } 10373 if (lister != null) lister.RDI(miStart, "OR", dstBase, dstDisp, imm); 10374 } 10375 10376 /** 10377 * Generate a register-offset--immediate OR. That is, 10378 * <PRE> 10379 * [dstIndex<<dstScale + dstDisp] |= (word) imm 10380 * </PRE> 10381 * 10382 * @param dstIndex the destination index register 10383 * @param dstScale the destination shift amount 10384 * @param dstDisp the destination displacement 10385 * @param imm immediate 10386 */ 10387 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10388 public final void emitOR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 10389 int miStart = mi; 10390 setMachineCodes(mi++, (byte) 0x66); 10391 generateREXprefix(false, null, dstIndex, null); 10392 // single byte opcode 10393 if (fits(imm,8)) { 10394 setMachineCodes(mi++, (byte) 0x83); 10395 // "register 0x1" is really part of the opcode 10396 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10397 emitImm8((byte)imm); 10398 } else { 10399 setMachineCodes(mi++, (byte) 0x81); 10400 // "register 0x1" is really part of the opcode 10401 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10402 emitImm16(imm); 10403 } 10404 if (lister != null) lister.RFDI(miStart, "OR", dstIndex, dstScale, dstDisp, imm); 10405 } 10406 10407 /** 10408 * Generate a absolute--immediate OR. That is, 10409 * <PRE> 10410 * [dstDisp] |= (word) imm 10411 * </PRE> 10412 * 10413 * @param dstDisp the destination displacement 10414 * @param imm immediate 10415 */ 10416 public final void emitOR_Abs_Imm_Word(Address dstDisp, int imm) { 10417 int miStart = mi; 10418 setMachineCodes(mi++, (byte) 0x66); 10419 generateREXprefix(false, null, null, null); 10420 // single byte opcode 10421 if (fits(imm,8)) { 10422 setMachineCodes(mi++, (byte) 0x83); 10423 // "register 0x1" is really part of the opcode 10424 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 10425 emitImm8((byte)imm); 10426 } else { 10427 setMachineCodes(mi++, (byte) 0x81); 10428 // "register 0x1" is really part of the opcode 10429 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 10430 emitImm16(imm); 10431 } 10432 if (lister != null) lister.RAI(miStart, "OR", dstDisp, imm); 10433 } 10434 10435 /** 10436 * Generate a register-index--immediate OR. That is, 10437 * <PRE> 10438 * [dstBase + dstIndex<<dstScale + dstDisp] |= (word) imm 10439 * </PRE> 10440 * 10441 * @param dstBase the destination base register 10442 * @param dstIndex the destination index register 10443 * @param dstScale the destination shift amount 10444 * @param dstDisp the destination displacement 10445 * @param imm immediate 10446 */ 10447 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10448 public final void emitOR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 10449 int miStart = mi; 10450 setMachineCodes(mi++, (byte) 0x66); 10451 generateREXprefix(false, null, dstIndex, dstBase); 10452 // single byte opcode 10453 if (fits(imm,8)) { 10454 setMachineCodes(mi++, (byte) 0x83); 10455 // "register 0x1" is really part of the opcode 10456 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10457 emitImm8((byte)imm); 10458 } else { 10459 setMachineCodes(mi++, (byte) 0x81); 10460 // "register 0x1" is really part of the opcode 10461 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10462 emitImm16(imm); 10463 } 10464 if (lister != null) lister.RXDI(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, imm); 10465 } 10466 10467 /** 10468 * Generate a register(indirect)--immediate OR. That is, 10469 * <PRE> 10470 * [dstBase] |= (word) imm 10471 * </PRE> 10472 * 10473 * @param dstBase the destination base register 10474 * @param imm immediate 10475 */ 10476 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10477 public final void emitOR_RegInd_Imm_Word(GPR dstBase, int imm) { 10478 int miStart = mi; 10479 setMachineCodes(mi++, (byte) 0x66); 10480 generateREXprefix(false, null, null, dstBase); 10481 // single byte opcode 10482 if (fits(imm,8)) { 10483 setMachineCodes(mi++, (byte) 0x83); 10484 // "register 0x1" is really part of the opcode 10485 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 10486 emitImm8((byte)imm); 10487 } else { 10488 setMachineCodes(mi++, (byte) 0x81); 10489 // "register 0x1" is really part of the opcode 10490 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 10491 emitImm16(imm); 10492 } 10493 if (lister != null) lister.RNI(miStart, "OR", dstBase, imm); 10494 } 10495 10496 /** 10497 * Generate a register--immediate OR. That is, 10498 * <PRE> 10499 * dstReg |= (quad) imm 10500 * </PRE> 10501 * 10502 * @param dstReg the destination register 10503 * @param imm immediate 10504 */ 10505 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10506 public final void emitOR_Reg_Imm_Quad(GPR dstReg, int imm) { 10507 int miStart = mi; 10508 // no group 1 to 4 prefix byte 10509 generateREXprefix(true, null, null, dstReg); 10510 // single byte opcode 10511 if (fits(imm,8)) { 10512 setMachineCodes(mi++, (byte) 0x83); 10513 // "register 0x1" is really part of the opcode 10514 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 10515 emitImm8((byte)imm); 10516 } else if (dstReg == EAX) { 10517 setMachineCodes(mi++, (byte) 0x0D); 10518 emitImm32(imm); 10519 } else { 10520 setMachineCodes(mi++, (byte) 0x81); 10521 // "register 0x1" is really part of the opcode 10522 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 10523 emitImm32(imm); 10524 } 10525 if (lister != null) lister.RI(miStart, "OR", dstReg, imm); 10526 } 10527 10528 /** 10529 * Generate a register-displacement--immediate OR. That is, 10530 * <PRE> 10531 * [dstBase + dstDisp] |= (quad) imm 10532 * </PRE> 10533 * 10534 * @param dstBase the destination register 10535 * @param dstDisp the destination displacement 10536 * @param imm immediate 10537 */ 10538 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10539 public final void emitOR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 10540 int miStart = mi; 10541 // no group 1 to 4 prefix byte 10542 generateREXprefix(true, null, null, dstBase); 10543 // single byte opcode 10544 if (fits(imm,8)) { 10545 setMachineCodes(mi++, (byte) 0x83); 10546 // "register 0x1" is really part of the opcode 10547 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 10548 emitImm8((byte)imm); 10549 } else { 10550 setMachineCodes(mi++, (byte) 0x81); 10551 // "register 0x1" is really part of the opcode 10552 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 10553 emitImm32(imm); 10554 } 10555 if (lister != null) lister.RDI(miStart, "OR", dstBase, dstDisp, imm); 10556 } 10557 10558 /** 10559 * Generate a register-offset--immediate OR. That is, 10560 * <PRE> 10561 * [dstIndex<<dstScale + dstDisp] |= (quad) imm 10562 * </PRE> 10563 * 10564 * @param dstIndex the destination index register 10565 * @param dstScale the destination shift amount 10566 * @param dstDisp the destination displacement 10567 * @param imm immediate 10568 */ 10569 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10570 public final void emitOR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 10571 int miStart = mi; 10572 // no group 1 to 4 prefix byte 10573 generateREXprefix(true, null, dstIndex, null); 10574 // single byte opcode 10575 if (fits(imm,8)) { 10576 setMachineCodes(mi++, (byte) 0x83); 10577 // "register 0x1" is really part of the opcode 10578 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10579 emitImm8((byte)imm); 10580 } else { 10581 setMachineCodes(mi++, (byte) 0x81); 10582 // "register 0x1" is really part of the opcode 10583 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10584 emitImm32(imm); 10585 } 10586 if (lister != null) lister.RFDI(miStart, "OR", dstIndex, dstScale, dstDisp, imm); 10587 } 10588 10589 /** 10590 * Generate a absolute--immediate OR. That is, 10591 * <PRE> 10592 * [dstDisp] |= (quad) imm 10593 * </PRE> 10594 * 10595 * @param dstDisp the destination displacement 10596 * @param imm immediate 10597 */ 10598 public final void emitOR_Abs_Imm_Quad(Address dstDisp, int imm) { 10599 int miStart = mi; 10600 // no group 1 to 4 prefix byte 10601 generateREXprefix(true, null, null, null); 10602 // single byte opcode 10603 if (fits(imm,8)) { 10604 setMachineCodes(mi++, (byte) 0x83); 10605 // "register 0x1" is really part of the opcode 10606 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 10607 emitImm8((byte)imm); 10608 } else { 10609 setMachineCodes(mi++, (byte) 0x81); 10610 // "register 0x1" is really part of the opcode 10611 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 10612 emitImm32(imm); 10613 } 10614 if (lister != null) lister.RAI(miStart, "OR", dstDisp, imm); 10615 } 10616 10617 /** 10618 * Generate a register-index--immediate OR. That is, 10619 * <PRE> 10620 * [dstBase + dstIndex<<dstScale + dstDisp] |= (quad) imm 10621 * </PRE> 10622 * 10623 * @param dstBase the destination base register 10624 * @param dstIndex the destination index register 10625 * @param dstScale the destination shift amount 10626 * @param dstDisp the destination displacement 10627 * @param imm immediate 10628 */ 10629 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10630 public final void emitOR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 10631 int miStart = mi; 10632 // no group 1 to 4 prefix byte 10633 generateREXprefix(true, null, dstIndex, dstBase); 10634 // single byte opcode 10635 if (fits(imm,8)) { 10636 setMachineCodes(mi++, (byte) 0x83); 10637 // "register 0x1" is really part of the opcode 10638 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10639 emitImm8((byte)imm); 10640 } else { 10641 setMachineCodes(mi++, (byte) 0x81); 10642 // "register 0x1" is really part of the opcode 10643 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10644 emitImm32(imm); 10645 } 10646 if (lister != null) lister.RXDI(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, imm); 10647 } 10648 10649 /** 10650 * Generate a register(indirect)--immediate OR. That is, 10651 * <PRE> 10652 * [dstBase] |= (quad) imm 10653 * </PRE> 10654 * 10655 * @param dstBase the destination base register 10656 * @param imm immediate 10657 */ 10658 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10659 public final void emitOR_RegInd_Imm_Quad(GPR dstBase, int imm) { 10660 int miStart = mi; 10661 // no group 1 to 4 prefix byte 10662 generateREXprefix(true, null, null, dstBase); 10663 // single byte opcode 10664 if (fits(imm,8)) { 10665 setMachineCodes(mi++, (byte) 0x83); 10666 // "register 0x1" is really part of the opcode 10667 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 10668 emitImm8((byte)imm); 10669 } else { 10670 setMachineCodes(mi++, (byte) 0x81); 10671 // "register 0x1" is really part of the opcode 10672 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 10673 emitImm32(imm); 10674 } 10675 if (lister != null) lister.RNI(miStart, "OR", dstBase, imm); 10676 } 10677 10678 /** 10679 * Generate a register--immediate OR. That is, 10680 * <PRE> 10681 * dstReg |= (byte) imm 10682 * </PRE> 10683 * 10684 * @param dstReg the destination register 10685 * @param imm immediate 10686 */ 10687 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10688 public final void emitOR_Reg_Imm_Byte(GPR dstReg, int imm) { 10689 int miStart = mi; 10690 if (dstReg == EAX) { 10691 setMachineCodes(mi++, (byte) 0x0C); 10692 emitImm8(imm); 10693 } else { 10694 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 10695 generateREXprefix(false, null, null, dstReg); 10696 setMachineCodes(mi++, (byte) 0x80); 10697 // "register 0x1" is really part of the opcode 10698 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 10699 emitImm8(imm); 10700 } 10701 if (lister != null) lister.RI(miStart, "OR", dstReg, imm); 10702 } 10703 10704 /** 10705 * Generate a register-displacement--immediate OR. That is, 10706 * <PRE> 10707 * [dstBase + dstDisp] |= (byte) imm 10708 * </PRE> 10709 * 10710 * @param dstBase the destination register 10711 * @param dstDisp the destination displacement 10712 * @param imm immediate 10713 */ 10714 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10715 public final void emitOR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 10716 int miStart = mi; 10717 generateREXprefix(false, null, null, dstBase); 10718 setMachineCodes(mi++, (byte) 0x80); 10719 // "register 0x1" is really part of the opcode 10720 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 10721 emitImm8(imm); 10722 if (lister != null) lister.RDI(miStart, "OR", dstBase, dstDisp, imm); 10723 } 10724 10725 /** 10726 * Generate a register-index--immediate OR. That is, 10727 * <PRE> 10728 * [dstBase + dstIndex<<scale + dstDisp] |= (byte) imm 10729 * </PRE> 10730 * 10731 * @param dstBase the destination base register 10732 * @param dstIndex the destination index register 10733 * @param dstScale the destination shift amount 10734 * @param dstDisp the destination displacement 10735 * @param imm immediate 10736 */ 10737 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10738 public final void emitOR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 10739 int miStart = mi; 10740 generateREXprefix(false, null, dstIndex, dstBase); 10741 setMachineCodes(mi++, (byte) 0x80); 10742 // "register 0x1" is really part of the opcode 10743 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10744 emitImm8(imm); 10745 if (lister != null) lister.RXDI(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, imm); 10746 } 10747 10748 /** 10749 * Generate a register-offset--immediate OR. That is, 10750 * <PRE> 10751 * [dstIndex<<dstScale + dstDisp] |= (byte) imm 10752 * </PRE> 10753 * 10754 * @param dstIndex the destination index register 10755 * @param dstScale the destination shift amount 10756 * @param dstDisp the destination displacement 10757 * @param imm immediate 10758 */ 10759 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10760 public final void emitOR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 10761 int miStart = mi; 10762 generateREXprefix(false, null, dstIndex, null); 10763 setMachineCodes(mi++, (byte) 0x80); 10764 // "register 0x1" is really part of the opcode 10765 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 10766 emitImm8(imm); 10767 if (lister != null) lister.RFDI(miStart, "OR", dstIndex, dstScale, dstDisp, imm); 10768 } 10769 10770 /** 10771 * Generate a absolute--immediate OR. That is, 10772 * <PRE> 10773 * [dstDisp] |= (byte) imm 10774 * </PRE> 10775 * 10776 * @param dstDisp the destination displacement 10777 * @param imm immediate 10778 */ 10779 public final void emitOR_Abs_Imm_Byte(Address dstDisp, int imm) { 10780 int miStart = mi; 10781 generateREXprefix(false, null, null, null); 10782 setMachineCodes(mi++, (byte) 0x80); 10783 // "register 0x1" is really part of the opcode 10784 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 10785 emitImm8(imm); 10786 if (lister != null) lister.RAI(miStart, "OR", dstDisp, imm); 10787 } 10788 10789 /** 10790 * Generate a register(indirect)--immediate OR. That is, 10791 * <PRE> 10792 * [dstBase] |= (byte) imm 10793 * </PRE> 10794 * 10795 * @param dstBase the destination base register 10796 * @param imm immediate 10797 */ 10798 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10799 public final void emitOR_RegInd_Imm_Byte(GPR dstBase, int imm) { 10800 int miStart = mi; 10801 generateREXprefix(false, null, null, dstBase); 10802 setMachineCodes(mi++, (byte) 0x80); 10803 // "register 0x1" is really part of the opcode 10804 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 10805 emitImm8(imm); 10806 if (lister != null) lister.RNI(miStart, "OR", dstBase, imm); 10807 } 10808 10809 /** 10810 * Generate a register(indirect)--register SBB. That is, 10811 * <PRE> 10812 * [dstBase] -CF= srcReg 10813 * </PRE> 10814 * 10815 * @param dstBase the destination base 10816 * @param srcReg the source register 10817 */ 10818 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10819 public final void emitSBB_RegInd_Reg(GPR dstBase, GPR srcReg) { 10820 int miStart = mi; 10821 // no group 1 to 4 prefix byte 10822 generateREXprefix(false, srcReg, null, dstBase); 10823 // single byte opcode 10824 setMachineCodes(mi++, (byte) 0x19); 10825 emitRegIndirectRegOperands(dstBase, srcReg); 10826 if (lister != null) lister.RNR(miStart, "SBB", dstBase, srcReg); 10827 } 10828 10829 /** 10830 * Generate a register-offset--register SBB. That is, 10831 * <PRE> 10832 * [dstReg<<dstScale + dstDisp] -CF= srcReg 10833 * </PRE> 10834 * 10835 * @param dstIndex the destination index register 10836 * @param dstScale the destination shift amount 10837 * @param dstDisp the destination displacement 10838 * @param srcReg the source register 10839 */ 10840 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 10841 public final void emitSBB_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 10842 int miStart = mi; 10843 // no group 1 to 4 prefix byte 10844 generateREXprefix(false, srcReg, dstIndex, null); 10845 // single byte opcode 10846 setMachineCodes(mi++, (byte) 0x19); 10847 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 10848 if (lister != null) lister.RFDR(miStart, "SBB", dstIndex, dstScale, dstDisp, srcReg); 10849 } 10850 10851 /** 10852 * Generate a absolute--register SBB. That is, 10853 * <PRE> 10854 * [dstDisp] -CF= srcReg 10855 * </PRE> 10856 * 10857 * @param dstDisp the destination address 10858 * @param srcReg the source register 10859 */ 10860 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 10861 public final void emitSBB_Abs_Reg(Address dstDisp, GPR srcReg) { 10862 int miStart = mi; 10863 // no group 1 to 4 prefix byte 10864 generateREXprefix(false, srcReg, null, null); 10865 // single byte opcode 10866 setMachineCodes(mi++, (byte) 0x19); 10867 emitAbsRegOperands(dstDisp, srcReg); 10868 if (lister != null) lister.RAR(miStart, "SBB", dstDisp, srcReg); 10869 } 10870 10871 /** 10872 * Generate a register-index--register SBB. That is, 10873 * <PRE> 10874 * [dstBase + dstIndex<<dstScale + dstDisp] -CF= srcReg 10875 * </PRE> 10876 * 10877 * @param dstBase the base register 10878 * @param dstIndex the destination index register 10879 * @param dstScale the destination shift amount 10880 * @param dstDisp the destination displacement 10881 * @param srcReg the source register 10882 */ 10883 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 10884 public final void emitSBB_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 10885 int miStart = mi; 10886 // no group 1 to 4 prefix byte 10887 generateREXprefix(false, srcReg, dstIndex, dstBase); 10888 // single byte opcode 10889 setMachineCodes(mi++, (byte) 0x19); 10890 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 10891 if (lister != null) lister.RXDR(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, srcReg); 10892 } 10893 10894 /** 10895 * Generate a register-displacement--register SBB. That is, 10896 * <PRE> 10897 * [dstBase + dstDisp] -CF= srcReg 10898 * </PRE> 10899 * 10900 * @param dstBase the base register 10901 * @param dstDisp the destination displacement 10902 * @param srcReg the source register 10903 */ 10904 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 10905 public final void emitSBB_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 10906 int miStart = mi; 10907 // no group 1 to 4 prefix byte 10908 generateREXprefix(false, srcReg, null, dstBase); 10909 // single byte opcode 10910 setMachineCodes(mi++, (byte) 0x19); 10911 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 10912 if (lister != null) lister.RDR(miStart, "SBB", dstBase, dstDisp, srcReg); 10913 } 10914 10915 /** 10916 * Generate a register--register SBB. That is, 10917 * <PRE> 10918 * dstReg -CF= srcReg 10919 * </PRE> 10920 * 10921 * @param dstReg the destination register 10922 * @param srcReg the source register 10923 */ 10924 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10925 public final void emitSBB_Reg_Reg(GPR dstReg, GPR srcReg) { 10926 int miStart = mi; 10927 // no group 1 to 4 prefix byte 10928 generateREXprefix(false, srcReg, null, dstReg); 10929 // single byte opcode 10930 setMachineCodes(mi++, (byte) 0x19); 10931 emitRegRegOperands(dstReg, srcReg); 10932 if (lister != null) lister.RR(miStart, "SBB", dstReg, srcReg); 10933 } 10934 10935 /** 10936 * Generate a register--register-displacement SBB. That is, 10937 * <PRE> 10938 * dstReg -CF= [srcReg + srcDisp] 10939 * </PRE> 10940 * 10941 * @param dstReg the destination register 10942 * @param srcBase the source register 10943 * @param srcDisp the source displacement 10944 */ 10945 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10946 public final void emitSBB_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 10947 int miStart = mi; 10948 // no group 1 to 4 prefix byte 10949 generateREXprefix(false, dstReg, null, srcBase); 10950 // single byte opcode 10951 setMachineCodes(mi++, (byte) 0x1B); 10952 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 10953 if (lister != null) lister.RRD(miStart, "SBB", dstReg, srcBase, srcDisp); 10954 } 10955 10956 /** 10957 * Generate a register--register-offset SBB. That is, 10958 * <PRE> 10959 * dstReg -CF= [srcIndex<<srcScale + srcDisp] 10960 * </PRE> 10961 * 10962 * @param dstReg the destination register 10963 * @param srcIndex the source index register 10964 * @param srcScale the source shift amount 10965 * @param srcDisp the source displacement 10966 */ 10967 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 10968 public final void emitSBB_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 10969 int miStart = mi; 10970 // no group 1 to 4 prefix byte 10971 generateREXprefix(false, dstReg, srcIndex, null); 10972 // single byte opcode 10973 setMachineCodes(mi++, (byte) 0x1B); 10974 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 10975 if (lister != null) lister.RRFD(miStart, "SBB", dstReg, srcIndex, srcScale, srcDisp); 10976 } 10977 10978 /** 10979 * Generate a register--register-offset SBB. That is, 10980 * <PRE> 10981 * dstReg -CF= [srcDisp] 10982 * </PRE> 10983 * 10984 * @param dstReg the destination register 10985 * @param srcDisp the source displacement 10986 */ 10987 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 10988 public final void emitSBB_Reg_Abs(GPR dstReg, Address srcDisp) { 10989 int miStart = mi; 10990 // no group 1 to 4 prefix byte 10991 generateREXprefix(false, dstReg, null, null); 10992 // single byte opcode 10993 setMachineCodes(mi++, (byte) 0x1B); 10994 emitAbsRegOperands(srcDisp, dstReg); 10995 if (lister != null) lister.RRA(miStart, "SBB", dstReg, srcDisp); 10996 } 10997 10998 /** 10999 * Generate a register--register-offset SBB. That is, 11000 * <PRE> 11001 * dstReg -CF= [srcBase + srcIndex<<srcScale + srcDisp] 11002 * </PRE> 11003 * 11004 * @param dstReg the destination register 11005 * @param srcBase the source base register 11006 * @param srcIndex the source index register 11007 * @param srcScale the source shift amount 11008 * @param srcDisp the source displacement 11009 */ 11010 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 11011 public final void emitSBB_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 11012 int miStart = mi; 11013 // no group 1 to 4 prefix byte 11014 generateREXprefix(false, dstReg, srcIndex, srcBase); 11015 // single byte opcode 11016 setMachineCodes(mi++, (byte) 0x1B); 11017 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 11018 if (lister != null) lister.RRXD(miStart, "SBB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 11019 } 11020 11021 /** 11022 * Generate a register--register(indirect) SBB. That is, 11023 * <PRE> 11024 * dstReg -CF= [srcBase] 11025 * </PRE> 11026 * 11027 * @param dstReg the destination register 11028 * @param srcBase the source base register 11029 */ 11030 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11031 public final void emitSBB_Reg_RegInd(GPR dstReg, GPR srcBase) { 11032 int miStart = mi; 11033 // no group 1 to 4 prefix byte 11034 generateREXprefix(false, dstReg, null, srcBase); 11035 // single byte opcode 11036 setMachineCodes(mi++, (byte) 0x1B); 11037 emitRegIndirectRegOperands(srcBase, dstReg); 11038 if (lister != null) lister.RRN(miStart, "SBB", dstReg, srcBase); 11039 } 11040 11041 /** 11042 * Generate a register(indirect)--register SBB. That is, 11043 * <PRE> 11044 * [dstBase] -CF= (word) srcReg 11045 * </PRE> 11046 * 11047 * @param dstBase the destination base 11048 * @param srcReg the source register 11049 */ 11050 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11051 public final void emitSBB_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 11052 int miStart = mi; 11053 setMachineCodes(mi++, (byte) 0x66); 11054 generateREXprefix(false, srcReg, null, dstBase); 11055 // single byte opcode 11056 setMachineCodes(mi++, (byte) 0x19); 11057 emitRegIndirectRegOperands(dstBase, srcReg); 11058 if (lister != null) lister.RNR(miStart, "SBB", dstBase, srcReg); 11059 } 11060 11061 /** 11062 * Generate a register-offset--register SBB. That is, 11063 * <PRE> 11064 * [dstReg<<dstScale + dstDisp] -CF= (word) srcReg 11065 * </PRE> 11066 * 11067 * @param dstIndex the destination index register 11068 * @param dstScale the destination shift amount 11069 * @param dstDisp the destination displacement 11070 * @param srcReg the source register 11071 */ 11072 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 11073 public final void emitSBB_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 11074 int miStart = mi; 11075 setMachineCodes(mi++, (byte) 0x66); 11076 generateREXprefix(false, srcReg, dstIndex, null); 11077 // single byte opcode 11078 setMachineCodes(mi++, (byte) 0x19); 11079 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 11080 if (lister != null) lister.RFDR(miStart, "SBB", dstIndex, dstScale, dstDisp, srcReg); 11081 } 11082 11083 /** 11084 * Generate a absolute--register SBB. That is, 11085 * <PRE> 11086 * [dstDisp] -CF= (word) srcReg 11087 * </PRE> 11088 * 11089 * @param dstDisp the destination address 11090 * @param srcReg the source register 11091 */ 11092 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 11093 public final void emitSBB_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 11094 int miStart = mi; 11095 setMachineCodes(mi++, (byte) 0x66); 11096 generateREXprefix(false, srcReg, null, null); 11097 // single byte opcode 11098 setMachineCodes(mi++, (byte) 0x19); 11099 emitAbsRegOperands(dstDisp, srcReg); 11100 if (lister != null) lister.RAR(miStart, "SBB", dstDisp, srcReg); 11101 } 11102 11103 /** 11104 * Generate a register-index--register SBB. That is, 11105 * <PRE> 11106 * [dstBase + dstIndex<<dstScale + dstDisp] -CF= (word) srcReg 11107 * </PRE> 11108 * 11109 * @param dstBase the base register 11110 * @param dstIndex the destination index register 11111 * @param dstScale the destination shift amount 11112 * @param dstDisp the destination displacement 11113 * @param srcReg the source register 11114 */ 11115 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 11116 public final void emitSBB_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 11117 int miStart = mi; 11118 setMachineCodes(mi++, (byte) 0x66); 11119 generateREXprefix(false, srcReg, dstIndex, dstBase); 11120 // single byte opcode 11121 setMachineCodes(mi++, (byte) 0x19); 11122 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 11123 if (lister != null) lister.RXDR(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, srcReg); 11124 } 11125 11126 /** 11127 * Generate a register-displacement--register SBB. That is, 11128 * <PRE> 11129 * [dstBase + dstDisp] -CF= (word) srcReg 11130 * </PRE> 11131 * 11132 * @param dstBase the base register 11133 * @param dstDisp the destination displacement 11134 * @param srcReg the source register 11135 */ 11136 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 11137 public final void emitSBB_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 11138 int miStart = mi; 11139 setMachineCodes(mi++, (byte) 0x66); 11140 generateREXprefix(false, srcReg, null, dstBase); 11141 // single byte opcode 11142 setMachineCodes(mi++, (byte) 0x19); 11143 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 11144 if (lister != null) lister.RDR(miStart, "SBB", dstBase, dstDisp, srcReg); 11145 } 11146 11147 /** 11148 * Generate a register--register SBB. That is, 11149 * <PRE> 11150 * dstReg -CF= (word) srcReg 11151 * </PRE> 11152 * 11153 * @param dstReg the destination register 11154 * @param srcReg the source register 11155 */ 11156 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11157 public final void emitSBB_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 11158 int miStart = mi; 11159 setMachineCodes(mi++, (byte) 0x66); 11160 generateREXprefix(false, srcReg, null, dstReg); 11161 // single byte opcode 11162 setMachineCodes(mi++, (byte) 0x19); 11163 emitRegRegOperands(dstReg, srcReg); 11164 if (lister != null) lister.RR(miStart, "SBB", dstReg, srcReg); 11165 } 11166 11167 /** 11168 * Generate a register--register-displacement SBB. That is, 11169 * <PRE> 11170 * dstReg -CF= (word) [srcReg + srcDisp] 11171 * </PRE> 11172 * 11173 * @param dstReg the destination register 11174 * @param srcBase the source register 11175 * @param srcDisp the source displacement 11176 */ 11177 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11178 public final void emitSBB_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 11179 int miStart = mi; 11180 setMachineCodes(mi++, (byte) 0x66); 11181 generateREXprefix(false, dstReg, null, srcBase); 11182 // single byte opcode 11183 setMachineCodes(mi++, (byte) 0x1B); 11184 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 11185 if (lister != null) lister.RRD(miStart, "SBB", dstReg, srcBase, srcDisp); 11186 } 11187 11188 /** 11189 * Generate a register--register-offset SBB. That is, 11190 * <PRE> 11191 * dstReg -CF= (word) [srcIndex<<srcScale + srcDisp] 11192 * </PRE> 11193 * 11194 * @param dstReg the destination register 11195 * @param srcIndex the source index register 11196 * @param srcScale the source shift amount 11197 * @param srcDisp the source displacement 11198 */ 11199 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11200 public final void emitSBB_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 11201 int miStart = mi; 11202 setMachineCodes(mi++, (byte) 0x66); 11203 generateREXprefix(false, dstReg, srcIndex, null); 11204 // single byte opcode 11205 setMachineCodes(mi++, (byte) 0x1B); 11206 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 11207 if (lister != null) lister.RRFD(miStart, "SBB", dstReg, srcIndex, srcScale, srcDisp); 11208 } 11209 11210 /** 11211 * Generate a register--register-offset SBB. That is, 11212 * <PRE> 11213 * dstReg -CF= (word) [srcDisp] 11214 * </PRE> 11215 * 11216 * @param dstReg the destination register 11217 * @param srcDisp the source displacement 11218 */ 11219 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 11220 public final void emitSBB_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 11221 int miStart = mi; 11222 setMachineCodes(mi++, (byte) 0x66); 11223 generateREXprefix(false, dstReg, null, null); 11224 // single byte opcode 11225 setMachineCodes(mi++, (byte) 0x1B); 11226 emitAbsRegOperands(srcDisp, dstReg); 11227 if (lister != null) lister.RRA(miStart, "SBB", dstReg, srcDisp); 11228 } 11229 11230 /** 11231 * Generate a register--register-offset SBB. That is, 11232 * <PRE> 11233 * dstReg -CF= (word) [srcBase + srcIndex<<srcScale + srcDisp] 11234 * </PRE> 11235 * 11236 * @param dstReg the destination register 11237 * @param srcBase the source base register 11238 * @param srcIndex the source index register 11239 * @param srcScale the source shift amount 11240 * @param srcDisp the source displacement 11241 */ 11242 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 11243 public final void emitSBB_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 11244 int miStart = mi; 11245 setMachineCodes(mi++, (byte) 0x66); 11246 generateREXprefix(false, dstReg, srcIndex, srcBase); 11247 // single byte opcode 11248 setMachineCodes(mi++, (byte) 0x1B); 11249 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 11250 if (lister != null) lister.RRXD(miStart, "SBB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 11251 } 11252 11253 /** 11254 * Generate a register--register(indirect) SBB. That is, 11255 * <PRE> 11256 * dstReg -CF= (word) [srcBase] 11257 * </PRE> 11258 * 11259 * @param dstReg the destination register 11260 * @param srcBase the source base register 11261 */ 11262 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11263 public final void emitSBB_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 11264 int miStart = mi; 11265 setMachineCodes(mi++, (byte) 0x66); 11266 generateREXprefix(false, dstReg, null, srcBase); 11267 // single byte opcode 11268 setMachineCodes(mi++, (byte) 0x1B); 11269 emitRegIndirectRegOperands(srcBase, dstReg); 11270 if (lister != null) lister.RRN(miStart, "SBB", dstReg, srcBase); 11271 } 11272 11273 /** 11274 * Generate a register(indirect)--register SBB. That is, 11275 * <PRE> 11276 * [dstBase] -CF= (quad) srcReg 11277 * </PRE> 11278 * 11279 * @param dstBase the destination base 11280 * @param srcReg the source register 11281 */ 11282 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11283 public final void emitSBB_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 11284 int miStart = mi; 11285 // no group 1 to 4 prefix byte 11286 generateREXprefix(true, srcReg, null, dstBase); 11287 // single byte opcode 11288 setMachineCodes(mi++, (byte) 0x19); 11289 emitRegIndirectRegOperands(dstBase, srcReg); 11290 if (lister != null) lister.RNR(miStart, "SBB", dstBase, srcReg); 11291 } 11292 11293 /** 11294 * Generate a register-offset--register SBB. That is, 11295 * <PRE> 11296 * [dstReg<<dstScale + dstDisp] -CF= (quad) srcReg 11297 * </PRE> 11298 * 11299 * @param dstIndex the destination index register 11300 * @param dstScale the destination shift amount 11301 * @param dstDisp the destination displacement 11302 * @param srcReg the source register 11303 */ 11304 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 11305 public final void emitSBB_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 11306 int miStart = mi; 11307 // no group 1 to 4 prefix byte 11308 generateREXprefix(true, srcReg, dstIndex, null); 11309 // single byte opcode 11310 setMachineCodes(mi++, (byte) 0x19); 11311 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 11312 if (lister != null) lister.RFDR(miStart, "SBB", dstIndex, dstScale, dstDisp, srcReg); 11313 } 11314 11315 /** 11316 * Generate a absolute--register SBB. That is, 11317 * <PRE> 11318 * [dstDisp] -CF= (quad) srcReg 11319 * </PRE> 11320 * 11321 * @param dstDisp the destination address 11322 * @param srcReg the source register 11323 */ 11324 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 11325 public final void emitSBB_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 11326 int miStart = mi; 11327 // no group 1 to 4 prefix byte 11328 generateREXprefix(true, srcReg, null, null); 11329 // single byte opcode 11330 setMachineCodes(mi++, (byte) 0x19); 11331 emitAbsRegOperands(dstDisp, srcReg); 11332 if (lister != null) lister.RAR(miStart, "SBB", dstDisp, srcReg); 11333 } 11334 11335 /** 11336 * Generate a register-index--register SBB. That is, 11337 * <PRE> 11338 * [dstBase + dstIndex<<dstScale + dstDisp] -CF= (quad) srcReg 11339 * </PRE> 11340 * 11341 * @param dstBase the base register 11342 * @param dstIndex the destination index register 11343 * @param dstScale the destination shift amount 11344 * @param dstDisp the destination displacement 11345 * @param srcReg the source register 11346 */ 11347 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 11348 public final void emitSBB_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 11349 int miStart = mi; 11350 // no group 1 to 4 prefix byte 11351 generateREXprefix(true, srcReg, dstIndex, dstBase); 11352 // single byte opcode 11353 setMachineCodes(mi++, (byte) 0x19); 11354 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 11355 if (lister != null) lister.RXDR(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, srcReg); 11356 } 11357 11358 /** 11359 * Generate a register-displacement--register SBB. That is, 11360 * <PRE> 11361 * [dstBase + dstDisp] -CF= (quad) srcReg 11362 * </PRE> 11363 * 11364 * @param dstBase the base register 11365 * @param dstDisp the destination displacement 11366 * @param srcReg the source register 11367 */ 11368 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 11369 public final void emitSBB_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 11370 int miStart = mi; 11371 // no group 1 to 4 prefix byte 11372 generateREXprefix(true, srcReg, null, dstBase); 11373 // single byte opcode 11374 setMachineCodes(mi++, (byte) 0x19); 11375 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 11376 if (lister != null) lister.RDR(miStart, "SBB", dstBase, dstDisp, srcReg); 11377 } 11378 11379 /** 11380 * Generate a register--register SBB. That is, 11381 * <PRE> 11382 * dstReg -CF= (quad) srcReg 11383 * </PRE> 11384 * 11385 * @param dstReg the destination register 11386 * @param srcReg the source register 11387 */ 11388 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11389 public final void emitSBB_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 11390 int miStart = mi; 11391 // no group 1 to 4 prefix byte 11392 generateREXprefix(true, srcReg, null, dstReg); 11393 // single byte opcode 11394 setMachineCodes(mi++, (byte) 0x19); 11395 emitRegRegOperands(dstReg, srcReg); 11396 if (lister != null) lister.RR(miStart, "SBB", dstReg, srcReg); 11397 } 11398 11399 /** 11400 * Generate a register--register-displacement SBB. That is, 11401 * <PRE> 11402 * dstReg -CF= (quad) [srcReg + srcDisp] 11403 * </PRE> 11404 * 11405 * @param dstReg the destination register 11406 * @param srcBase the source register 11407 * @param srcDisp the source displacement 11408 */ 11409 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11410 public final void emitSBB_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 11411 int miStart = mi; 11412 // no group 1 to 4 prefix byte 11413 generateREXprefix(true, dstReg, null, srcBase); 11414 // single byte opcode 11415 setMachineCodes(mi++, (byte) 0x1B); 11416 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 11417 if (lister != null) lister.RRD(miStart, "SBB", dstReg, srcBase, srcDisp); 11418 } 11419 11420 /** 11421 * Generate a register--register-offset SBB. That is, 11422 * <PRE> 11423 * dstReg -CF= (quad) [srcIndex<<srcScale + srcDisp] 11424 * </PRE> 11425 * 11426 * @param dstReg the destination register 11427 * @param srcIndex the source index register 11428 * @param srcScale the source shift amount 11429 * @param srcDisp the source displacement 11430 */ 11431 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11432 public final void emitSBB_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 11433 int miStart = mi; 11434 // no group 1 to 4 prefix byte 11435 generateREXprefix(true, dstReg, srcIndex, null); 11436 // single byte opcode 11437 setMachineCodes(mi++, (byte) 0x1B); 11438 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 11439 if (lister != null) lister.RRFD(miStart, "SBB", dstReg, srcIndex, srcScale, srcDisp); 11440 } 11441 11442 /** 11443 * Generate a register--register-offset SBB. That is, 11444 * <PRE> 11445 * dstReg -CF= (quad) [srcDisp] 11446 * </PRE> 11447 * 11448 * @param dstReg the destination register 11449 * @param srcDisp the source displacement 11450 */ 11451 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 11452 public final void emitSBB_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 11453 int miStart = mi; 11454 // no group 1 to 4 prefix byte 11455 generateREXprefix(true, dstReg, null, null); 11456 // single byte opcode 11457 setMachineCodes(mi++, (byte) 0x1B); 11458 emitAbsRegOperands(srcDisp, dstReg); 11459 if (lister != null) lister.RRA(miStart, "SBB", dstReg, srcDisp); 11460 } 11461 11462 /** 11463 * Generate a register--register-offset SBB. That is, 11464 * <PRE> 11465 * dstReg -CF= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 11466 * </PRE> 11467 * 11468 * @param dstReg the destination register 11469 * @param srcBase the source base register 11470 * @param srcIndex the source index register 11471 * @param srcScale the source shift amount 11472 * @param srcDisp the source displacement 11473 */ 11474 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 11475 public final void emitSBB_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 11476 int miStart = mi; 11477 // no group 1 to 4 prefix byte 11478 generateREXprefix(true, dstReg, srcIndex, srcBase); 11479 // single byte opcode 11480 setMachineCodes(mi++, (byte) 0x1B); 11481 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 11482 if (lister != null) lister.RRXD(miStart, "SBB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 11483 } 11484 11485 /** 11486 * Generate a register--register(indirect) SBB. That is, 11487 * <PRE> 11488 * dstReg -CF= (quad) [srcBase] 11489 * </PRE> 11490 * 11491 * @param dstReg the destination register 11492 * @param srcBase the source base register 11493 */ 11494 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11495 public final void emitSBB_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 11496 int miStart = mi; 11497 // no group 1 to 4 prefix byte 11498 generateREXprefix(true, dstReg, null, srcBase); 11499 // single byte opcode 11500 setMachineCodes(mi++, (byte) 0x1B); 11501 emitRegIndirectRegOperands(srcBase, dstReg); 11502 if (lister != null) lister.RRN(miStart, "SBB", dstReg, srcBase); 11503 } 11504 11505 /** 11506 * Generate a register(indirect)--register SBB. That is, 11507 * <PRE> 11508 * [dstBase] -CF= (byte) srcReg 11509 * </PRE> 11510 * 11511 * @param dstBase the destination base 11512 * @param srcReg the source register 11513 */ 11514 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11515 public final void emitSBB_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 11516 int miStart = mi; 11517 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 11518 // no group 1 to 4 prefix byte 11519 generateREXprefix(false, srcReg, null, dstBase); 11520 // single byte opcode 11521 setMachineCodes(mi++, (byte) 0x18); 11522 emitRegIndirectRegOperands(dstBase, srcReg); 11523 if (lister != null) lister.RNR(miStart, "SBB", dstBase, srcReg); 11524 } 11525 11526 /** 11527 * Generate a register-offset--register SBB. That is, 11528 * <PRE> 11529 * [dstReg<<dstScale + dstDisp] -CF= (byte) srcReg 11530 * </PRE> 11531 * 11532 * @param dstIndex the destination index register 11533 * @param dstScale the destination shift amount 11534 * @param dstDisp the destination displacement 11535 * @param srcReg the source register 11536 */ 11537 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 11538 public final void emitSBB_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 11539 int miStart = mi; 11540 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 11541 // no group 1 to 4 prefix byte 11542 generateREXprefix(false, srcReg, dstIndex, null); 11543 // single byte opcode 11544 setMachineCodes(mi++, (byte) 0x18); 11545 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 11546 if (lister != null) lister.RFDR(miStart, "SBB", dstIndex, dstScale, dstDisp, srcReg); 11547 } 11548 11549 /** 11550 * Generate a absolute--register SBB. That is, 11551 * <PRE> 11552 * [dstDisp] -CF= (byte) srcReg 11553 * </PRE> 11554 * 11555 * @param dstDisp the destination address 11556 * @param srcReg the source register 11557 */ 11558 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 11559 public final void emitSBB_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 11560 int miStart = mi; 11561 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 11562 // no group 1 to 4 prefix byte 11563 generateREXprefix(false, srcReg, null, null); 11564 // single byte opcode 11565 setMachineCodes(mi++, (byte) 0x18); 11566 emitAbsRegOperands(dstDisp, srcReg); 11567 if (lister != null) lister.RAR(miStart, "SBB", dstDisp, srcReg); 11568 } 11569 11570 /** 11571 * Generate a register-index--register SBB. That is, 11572 * <PRE> 11573 * [dstBase + dstIndex<<dstScale + dstDisp] -CF= (byte) srcReg 11574 * </PRE> 11575 * 11576 * @param dstBase the base register 11577 * @param dstIndex the destination index register 11578 * @param dstScale the destination shift amount 11579 * @param dstDisp the destination displacement 11580 * @param srcReg the source register 11581 */ 11582 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 11583 public final void emitSBB_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 11584 int miStart = mi; 11585 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 11586 // no group 1 to 4 prefix byte 11587 generateREXprefix(false, srcReg, dstIndex, dstBase); 11588 // single byte opcode 11589 setMachineCodes(mi++, (byte) 0x18); 11590 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 11591 if (lister != null) lister.RXDR(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, srcReg); 11592 } 11593 11594 /** 11595 * Generate a register-displacement--register SBB. That is, 11596 * <PRE> 11597 * [dstBase + dstDisp] -CF= (byte) srcReg 11598 * </PRE> 11599 * 11600 * @param dstBase the base register 11601 * @param dstDisp the destination displacement 11602 * @param srcReg the source register 11603 */ 11604 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 11605 public final void emitSBB_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 11606 int miStart = mi; 11607 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 11608 // no group 1 to 4 prefix byte 11609 generateREXprefix(false, srcReg, null, dstBase); 11610 // single byte opcode 11611 setMachineCodes(mi++, (byte) 0x18); 11612 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 11613 if (lister != null) lister.RDR(miStart, "SBB", dstBase, dstDisp, srcReg); 11614 } 11615 11616 /** 11617 * Generate a register--register SBB. That is, 11618 * <PRE> 11619 * dstReg -CF= (byte) srcReg 11620 * </PRE> 11621 * 11622 * @param dstReg the destination register 11623 * @param srcReg the source register 11624 */ 11625 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11626 public final void emitSBB_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 11627 int miStart = mi; 11628 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 11629 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 11630 // no group 1 to 4 prefix byte 11631 generateREXprefix(false, srcReg, null, dstReg); 11632 // single byte opcode 11633 setMachineCodes(mi++, (byte) 0x18); 11634 emitRegRegOperands(dstReg, srcReg); 11635 if (lister != null) lister.RR(miStart, "SBB", dstReg, srcReg); 11636 } 11637 11638 /** 11639 * Generate a register--register-displacement SBB. That is, 11640 * <PRE> 11641 * dstReg -CF= (byte) [srcReg + srcDisp] 11642 * </PRE> 11643 * 11644 * @param dstReg the destination register 11645 * @param srcBase the source register 11646 * @param srcDisp the source displacement 11647 */ 11648 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11649 public final void emitSBB_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 11650 int miStart = mi; 11651 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 11652 // no group 1 to 4 prefix byte 11653 generateREXprefix(false, dstReg, null, srcBase); 11654 // single byte opcode 11655 setMachineCodes(mi++, (byte) 0x1A); 11656 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 11657 if (lister != null) lister.RRD(miStart, "SBB", dstReg, srcBase, srcDisp); 11658 } 11659 11660 /** 11661 * Generate a register--register-offset SBB. That is, 11662 * <PRE> 11663 * dstReg -CF= (byte) [srcIndex<<srcScale + srcDisp] 11664 * </PRE> 11665 * 11666 * @param dstReg the destination register 11667 * @param srcIndex the source index register 11668 * @param srcScale the source shift amount 11669 * @param srcDisp the source displacement 11670 */ 11671 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11672 public final void emitSBB_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 11673 int miStart = mi; 11674 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 11675 // no group 1 to 4 prefix byte 11676 generateREXprefix(false, dstReg, srcIndex, null); 11677 // single byte opcode 11678 setMachineCodes(mi++, (byte) 0x1A); 11679 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 11680 if (lister != null) lister.RRFD(miStart, "SBB", dstReg, srcIndex, srcScale, srcDisp); 11681 } 11682 11683 /** 11684 * Generate a register--register-offset SBB. That is, 11685 * <PRE> 11686 * dstReg -CF= (byte) [srcDisp] 11687 * </PRE> 11688 * 11689 * @param dstReg the destination register 11690 * @param srcDisp the source displacement 11691 */ 11692 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 11693 public final void emitSBB_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 11694 int miStart = mi; 11695 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 11696 // no group 1 to 4 prefix byte 11697 generateREXprefix(false, dstReg, null, null); 11698 // single byte opcode 11699 setMachineCodes(mi++, (byte) 0x1A); 11700 emitAbsRegOperands(srcDisp, dstReg); 11701 if (lister != null) lister.RRA(miStart, "SBB", dstReg, srcDisp); 11702 } 11703 11704 /** 11705 * Generate a register--register-offset SBB. That is, 11706 * <PRE> 11707 * dstReg -CF= (byte) [srcBase + srcIndex<<srcScale + srcDisp] 11708 * </PRE> 11709 * 11710 * @param dstReg the destination register 11711 * @param srcBase the source base register 11712 * @param srcIndex the source index register 11713 * @param srcScale the source shift amount 11714 * @param srcDisp the source displacement 11715 */ 11716 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 11717 public final void emitSBB_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 11718 int miStart = mi; 11719 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 11720 // no group 1 to 4 prefix byte 11721 generateREXprefix(false, dstReg, srcIndex, srcBase); 11722 // single byte opcode 11723 setMachineCodes(mi++, (byte) 0x1A); 11724 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 11725 if (lister != null) lister.RRXD(miStart, "SBB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 11726 } 11727 11728 /** 11729 * Generate a register--register(indirect) SBB. That is, 11730 * <PRE> 11731 * dstReg -CF= (byte) [srcBase] 11732 * </PRE> 11733 * 11734 * @param dstReg the destination register 11735 * @param srcBase the source base register 11736 */ 11737 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11738 public final void emitSBB_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 11739 int miStart = mi; 11740 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 11741 // no group 1 to 4 prefix byte 11742 generateREXprefix(false, dstReg, null, srcBase); 11743 // single byte opcode 11744 setMachineCodes(mi++, (byte) 0x1A); 11745 emitRegIndirectRegOperands(srcBase, dstReg); 11746 if (lister != null) lister.RRN(miStart, "SBB", dstReg, srcBase); 11747 } 11748 11749 /** 11750 * Generate a register--immediate SBB. That is, 11751 * <PRE> 11752 * dstReg -CF= imm 11753 * </PRE> 11754 * 11755 * @param dstReg the destination register 11756 * @param imm immediate 11757 */ 11758 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 11759 public final void emitSBB_Reg_Imm(GPR dstReg, int imm) { 11760 int miStart = mi; 11761 // no group 1 to 4 prefix byte 11762 generateREXprefix(false, null, null, dstReg); 11763 // single byte opcode 11764 if (fits(imm,8)) { 11765 setMachineCodes(mi++, (byte) 0x83); 11766 // "register 0x3" is really part of the opcode 11767 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 11768 emitImm8((byte)imm); 11769 } else if (dstReg == EAX) { 11770 setMachineCodes(mi++, (byte) 0x1D); 11771 emitImm32(imm); 11772 } else { 11773 setMachineCodes(mi++, (byte) 0x81); 11774 // "register 0x3" is really part of the opcode 11775 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 11776 emitImm32(imm); 11777 } 11778 if (lister != null) lister.RI(miStart, "SBB", dstReg, imm); 11779 } 11780 11781 /** 11782 * Generate a register-displacement--immediate SBB. That is, 11783 * <PRE> 11784 * [dstBase + dstDisp] -CF= imm 11785 * </PRE> 11786 * 11787 * @param dstBase the destination register 11788 * @param dstDisp the destination displacement 11789 * @param imm immediate 11790 */ 11791 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 11792 public final void emitSBB_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 11793 int miStart = mi; 11794 // no group 1 to 4 prefix byte 11795 generateREXprefix(false, null, null, dstBase); 11796 // single byte opcode 11797 if (fits(imm,8)) { 11798 setMachineCodes(mi++, (byte) 0x83); 11799 // "register 0x3" is really part of the opcode 11800 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 11801 emitImm8((byte)imm); 11802 } else { 11803 setMachineCodes(mi++, (byte) 0x81); 11804 // "register 0x3" is really part of the opcode 11805 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 11806 emitImm32(imm); 11807 } 11808 if (lister != null) lister.RDI(miStart, "SBB", dstBase, dstDisp, imm); 11809 } 11810 11811 /** 11812 * Generate a register-offset--immediate SBB. That is, 11813 * <PRE> 11814 * [dstIndex<<dstScale + dstDisp] -CF= imm 11815 * </PRE> 11816 * 11817 * @param dstIndex the destination index register 11818 * @param dstScale the destination shift amount 11819 * @param dstDisp the destination displacement 11820 * @param imm immediate 11821 */ 11822 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 11823 public final void emitSBB_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 11824 int miStart = mi; 11825 // no group 1 to 4 prefix byte 11826 generateREXprefix(false, null, dstIndex, null); 11827 // single byte opcode 11828 if (fits(imm,8)) { 11829 setMachineCodes(mi++, (byte) 0x83); 11830 // "register 0x3" is really part of the opcode 11831 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 11832 emitImm8((byte)imm); 11833 } else { 11834 setMachineCodes(mi++, (byte) 0x81); 11835 // "register 0x3" is really part of the opcode 11836 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 11837 emitImm32(imm); 11838 } 11839 if (lister != null) lister.RFDI(miStart, "SBB", dstIndex, dstScale, dstDisp, imm); 11840 } 11841 11842 /** 11843 * Generate a absolute--immediate SBB. That is, 11844 * <PRE> 11845 * [dstDisp] -CF= imm 11846 * </PRE> 11847 * 11848 * @param dstDisp the destination displacement 11849 * @param imm immediate 11850 */ 11851 public final void emitSBB_Abs_Imm(Address dstDisp, int imm) { 11852 int miStart = mi; 11853 // no group 1 to 4 prefix byte 11854 generateREXprefix(false, null, null, null); 11855 // single byte opcode 11856 if (fits(imm,8)) { 11857 setMachineCodes(mi++, (byte) 0x83); 11858 // "register 0x3" is really part of the opcode 11859 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 11860 emitImm8((byte)imm); 11861 } else { 11862 setMachineCodes(mi++, (byte) 0x81); 11863 // "register 0x3" is really part of the opcode 11864 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 11865 emitImm32(imm); 11866 } 11867 if (lister != null) lister.RAI(miStart, "SBB", dstDisp, imm); 11868 } 11869 11870 /** 11871 * Generate a register-index--immediate SBB. That is, 11872 * <PRE> 11873 * [dstBase + dstIndex<<dstScale + dstDisp] -CF= imm 11874 * </PRE> 11875 * 11876 * @param dstBase the destination base register 11877 * @param dstIndex the destination index register 11878 * @param dstScale the destination shift amount 11879 * @param dstDisp the destination displacement 11880 * @param imm immediate 11881 */ 11882 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 11883 public final void emitSBB_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 11884 int miStart = mi; 11885 // no group 1 to 4 prefix byte 11886 generateREXprefix(false, null, dstIndex, dstBase); 11887 // single byte opcode 11888 if (fits(imm,8)) { 11889 setMachineCodes(mi++, (byte) 0x83); 11890 // "register 0x3" is really part of the opcode 11891 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 11892 emitImm8((byte)imm); 11893 } else { 11894 setMachineCodes(mi++, (byte) 0x81); 11895 // "register 0x3" is really part of the opcode 11896 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 11897 emitImm32(imm); 11898 } 11899 if (lister != null) lister.RXDI(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, imm); 11900 } 11901 11902 /** 11903 * Generate a register(indirect)--immediate SBB. That is, 11904 * <PRE> 11905 * [dstBase] -CF= imm 11906 * </PRE> 11907 * 11908 * @param dstBase the destination base register 11909 * @param imm immediate 11910 */ 11911 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 11912 public final void emitSBB_RegInd_Imm(GPR dstBase, int imm) { 11913 int miStart = mi; 11914 // no group 1 to 4 prefix byte 11915 generateREXprefix(false, null, null, dstBase); 11916 // single byte opcode 11917 if (fits(imm,8)) { 11918 setMachineCodes(mi++, (byte) 0x83); 11919 // "register 0x3" is really part of the opcode 11920 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 11921 emitImm8((byte)imm); 11922 } else { 11923 setMachineCodes(mi++, (byte) 0x81); 11924 // "register 0x3" is really part of the opcode 11925 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 11926 emitImm32(imm); 11927 } 11928 if (lister != null) lister.RNI(miStart, "SBB", dstBase, imm); 11929 } 11930 11931 /** 11932 * Generate a register--immediate SBB. That is, 11933 * <PRE> 11934 * dstReg -CF= (word) imm 11935 * </PRE> 11936 * 11937 * @param dstReg the destination register 11938 * @param imm immediate 11939 */ 11940 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 11941 public final void emitSBB_Reg_Imm_Word(GPR dstReg, int imm) { 11942 int miStart = mi; 11943 setMachineCodes(mi++, (byte) 0x66); 11944 generateREXprefix(false, null, null, dstReg); 11945 // single byte opcode 11946 if (fits(imm,8)) { 11947 setMachineCodes(mi++, (byte) 0x83); 11948 // "register 0x3" is really part of the opcode 11949 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 11950 emitImm8((byte)imm); 11951 } else if (dstReg == EAX) { 11952 setMachineCodes(mi++, (byte) 0x1D); 11953 emitImm16(imm); 11954 } else { 11955 setMachineCodes(mi++, (byte) 0x81); 11956 // "register 0x3" is really part of the opcode 11957 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 11958 emitImm16(imm); 11959 } 11960 if (lister != null) lister.RI(miStart, "SBB", dstReg, imm); 11961 } 11962 11963 /** 11964 * Generate a register-displacement--immediate SBB. That is, 11965 * <PRE> 11966 * [dstBase + dstDisp] -CF= (word) imm 11967 * </PRE> 11968 * 11969 * @param dstBase the destination register 11970 * @param dstDisp the destination displacement 11971 * @param imm immediate 11972 */ 11973 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 11974 public final void emitSBB_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 11975 int miStart = mi; 11976 setMachineCodes(mi++, (byte) 0x66); 11977 generateREXprefix(false, null, null, dstBase); 11978 // single byte opcode 11979 if (fits(imm,8)) { 11980 setMachineCodes(mi++, (byte) 0x83); 11981 // "register 0x3" is really part of the opcode 11982 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 11983 emitImm8((byte)imm); 11984 } else { 11985 setMachineCodes(mi++, (byte) 0x81); 11986 // "register 0x3" is really part of the opcode 11987 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 11988 emitImm16(imm); 11989 } 11990 if (lister != null) lister.RDI(miStart, "SBB", dstBase, dstDisp, imm); 11991 } 11992 11993 /** 11994 * Generate a register-offset--immediate SBB. That is, 11995 * <PRE> 11996 * [dstIndex<<dstScale + dstDisp] -CF= (word) imm 11997 * </PRE> 11998 * 11999 * @param dstIndex the destination index register 12000 * @param dstScale the destination shift amount 12001 * @param dstDisp the destination displacement 12002 * @param imm immediate 12003 */ 12004 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12005 public final void emitSBB_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 12006 int miStart = mi; 12007 setMachineCodes(mi++, (byte) 0x66); 12008 generateREXprefix(false, null, dstIndex, null); 12009 // single byte opcode 12010 if (fits(imm,8)) { 12011 setMachineCodes(mi++, (byte) 0x83); 12012 // "register 0x3" is really part of the opcode 12013 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 12014 emitImm8((byte)imm); 12015 } else { 12016 setMachineCodes(mi++, (byte) 0x81); 12017 // "register 0x3" is really part of the opcode 12018 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 12019 emitImm16(imm); 12020 } 12021 if (lister != null) lister.RFDI(miStart, "SBB", dstIndex, dstScale, dstDisp, imm); 12022 } 12023 12024 /** 12025 * Generate a absolute--immediate SBB. That is, 12026 * <PRE> 12027 * [dstDisp] -CF= (word) imm 12028 * </PRE> 12029 * 12030 * @param dstDisp the destination displacement 12031 * @param imm immediate 12032 */ 12033 public final void emitSBB_Abs_Imm_Word(Address dstDisp, int imm) { 12034 int miStart = mi; 12035 setMachineCodes(mi++, (byte) 0x66); 12036 generateREXprefix(false, null, null, null); 12037 // single byte opcode 12038 if (fits(imm,8)) { 12039 setMachineCodes(mi++, (byte) 0x83); 12040 // "register 0x3" is really part of the opcode 12041 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 12042 emitImm8((byte)imm); 12043 } else { 12044 setMachineCodes(mi++, (byte) 0x81); 12045 // "register 0x3" is really part of the opcode 12046 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 12047 emitImm16(imm); 12048 } 12049 if (lister != null) lister.RAI(miStart, "SBB", dstDisp, imm); 12050 } 12051 12052 /** 12053 * Generate a register-index--immediate SBB. That is, 12054 * <PRE> 12055 * [dstBase + dstIndex<<dstScale + dstDisp] -CF= (word) imm 12056 * </PRE> 12057 * 12058 * @param dstBase the destination base register 12059 * @param dstIndex the destination index register 12060 * @param dstScale the destination shift amount 12061 * @param dstDisp the destination displacement 12062 * @param imm immediate 12063 */ 12064 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12065 public final void emitSBB_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 12066 int miStart = mi; 12067 setMachineCodes(mi++, (byte) 0x66); 12068 generateREXprefix(false, null, dstIndex, dstBase); 12069 // single byte opcode 12070 if (fits(imm,8)) { 12071 setMachineCodes(mi++, (byte) 0x83); 12072 // "register 0x3" is really part of the opcode 12073 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 12074 emitImm8((byte)imm); 12075 } else { 12076 setMachineCodes(mi++, (byte) 0x81); 12077 // "register 0x3" is really part of the opcode 12078 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 12079 emitImm16(imm); 12080 } 12081 if (lister != null) lister.RXDI(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, imm); 12082 } 12083 12084 /** 12085 * Generate a register(indirect)--immediate SBB. That is, 12086 * <PRE> 12087 * [dstBase] -CF= (word) imm 12088 * </PRE> 12089 * 12090 * @param dstBase the destination base register 12091 * @param imm immediate 12092 */ 12093 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12094 public final void emitSBB_RegInd_Imm_Word(GPR dstBase, int imm) { 12095 int miStart = mi; 12096 setMachineCodes(mi++, (byte) 0x66); 12097 generateREXprefix(false, null, null, dstBase); 12098 // single byte opcode 12099 if (fits(imm,8)) { 12100 setMachineCodes(mi++, (byte) 0x83); 12101 // "register 0x3" is really part of the opcode 12102 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 12103 emitImm8((byte)imm); 12104 } else { 12105 setMachineCodes(mi++, (byte) 0x81); 12106 // "register 0x3" is really part of the opcode 12107 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 12108 emitImm16(imm); 12109 } 12110 if (lister != null) lister.RNI(miStart, "SBB", dstBase, imm); 12111 } 12112 12113 /** 12114 * Generate a register--immediate SBB. That is, 12115 * <PRE> 12116 * dstReg -CF= (quad) imm 12117 * </PRE> 12118 * 12119 * @param dstReg the destination register 12120 * @param imm immediate 12121 */ 12122 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12123 public final void emitSBB_Reg_Imm_Quad(GPR dstReg, int imm) { 12124 int miStart = mi; 12125 // no group 1 to 4 prefix byte 12126 generateREXprefix(true, null, null, dstReg); 12127 // single byte opcode 12128 if (fits(imm,8)) { 12129 setMachineCodes(mi++, (byte) 0x83); 12130 // "register 0x3" is really part of the opcode 12131 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 12132 emitImm8((byte)imm); 12133 } else if (dstReg == EAX) { 12134 setMachineCodes(mi++, (byte) 0x1D); 12135 emitImm32(imm); 12136 } else { 12137 setMachineCodes(mi++, (byte) 0x81); 12138 // "register 0x3" is really part of the opcode 12139 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 12140 emitImm32(imm); 12141 } 12142 if (lister != null) lister.RI(miStart, "SBB", dstReg, imm); 12143 } 12144 12145 /** 12146 * Generate a register-displacement--immediate SBB. That is, 12147 * <PRE> 12148 * [dstBase + dstDisp] -CF= (quad) imm 12149 * </PRE> 12150 * 12151 * @param dstBase the destination register 12152 * @param dstDisp the destination displacement 12153 * @param imm immediate 12154 */ 12155 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12156 public final void emitSBB_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 12157 int miStart = mi; 12158 // no group 1 to 4 prefix byte 12159 generateREXprefix(true, null, null, dstBase); 12160 // single byte opcode 12161 if (fits(imm,8)) { 12162 setMachineCodes(mi++, (byte) 0x83); 12163 // "register 0x3" is really part of the opcode 12164 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 12165 emitImm8((byte)imm); 12166 } else { 12167 setMachineCodes(mi++, (byte) 0x81); 12168 // "register 0x3" is really part of the opcode 12169 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 12170 emitImm32(imm); 12171 } 12172 if (lister != null) lister.RDI(miStart, "SBB", dstBase, dstDisp, imm); 12173 } 12174 12175 /** 12176 * Generate a register-offset--immediate SBB. That is, 12177 * <PRE> 12178 * [dstIndex<<dstScale + dstDisp] -CF= (quad) imm 12179 * </PRE> 12180 * 12181 * @param dstIndex the destination index register 12182 * @param dstScale the destination shift amount 12183 * @param dstDisp the destination displacement 12184 * @param imm immediate 12185 */ 12186 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12187 public final void emitSBB_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 12188 int miStart = mi; 12189 // no group 1 to 4 prefix byte 12190 generateREXprefix(true, null, dstIndex, null); 12191 // single byte opcode 12192 if (fits(imm,8)) { 12193 setMachineCodes(mi++, (byte) 0x83); 12194 // "register 0x3" is really part of the opcode 12195 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 12196 emitImm8((byte)imm); 12197 } else { 12198 setMachineCodes(mi++, (byte) 0x81); 12199 // "register 0x3" is really part of the opcode 12200 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 12201 emitImm32(imm); 12202 } 12203 if (lister != null) lister.RFDI(miStart, "SBB", dstIndex, dstScale, dstDisp, imm); 12204 } 12205 12206 /** 12207 * Generate a absolute--immediate SBB. That is, 12208 * <PRE> 12209 * [dstDisp] -CF= (quad) imm 12210 * </PRE> 12211 * 12212 * @param dstDisp the destination displacement 12213 * @param imm immediate 12214 */ 12215 public final void emitSBB_Abs_Imm_Quad(Address dstDisp, int imm) { 12216 int miStart = mi; 12217 // no group 1 to 4 prefix byte 12218 generateREXprefix(true, null, null, null); 12219 // single byte opcode 12220 if (fits(imm,8)) { 12221 setMachineCodes(mi++, (byte) 0x83); 12222 // "register 0x3" is really part of the opcode 12223 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 12224 emitImm8((byte)imm); 12225 } else { 12226 setMachineCodes(mi++, (byte) 0x81); 12227 // "register 0x3" is really part of the opcode 12228 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 12229 emitImm32(imm); 12230 } 12231 if (lister != null) lister.RAI(miStart, "SBB", dstDisp, imm); 12232 } 12233 12234 /** 12235 * Generate a register-index--immediate SBB. That is, 12236 * <PRE> 12237 * [dstBase + dstIndex<<dstScale + dstDisp] -CF= (quad) imm 12238 * </PRE> 12239 * 12240 * @param dstBase the destination base register 12241 * @param dstIndex the destination index register 12242 * @param dstScale the destination shift amount 12243 * @param dstDisp the destination displacement 12244 * @param imm immediate 12245 */ 12246 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12247 public final void emitSBB_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 12248 int miStart = mi; 12249 // no group 1 to 4 prefix byte 12250 generateREXprefix(true, null, dstIndex, dstBase); 12251 // single byte opcode 12252 if (fits(imm,8)) { 12253 setMachineCodes(mi++, (byte) 0x83); 12254 // "register 0x3" is really part of the opcode 12255 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 12256 emitImm8((byte)imm); 12257 } else { 12258 setMachineCodes(mi++, (byte) 0x81); 12259 // "register 0x3" is really part of the opcode 12260 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 12261 emitImm32(imm); 12262 } 12263 if (lister != null) lister.RXDI(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, imm); 12264 } 12265 12266 /** 12267 * Generate a register(indirect)--immediate SBB. That is, 12268 * <PRE> 12269 * [dstBase] -CF= (quad) imm 12270 * </PRE> 12271 * 12272 * @param dstBase the destination base register 12273 * @param imm immediate 12274 */ 12275 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12276 public final void emitSBB_RegInd_Imm_Quad(GPR dstBase, int imm) { 12277 int miStart = mi; 12278 // no group 1 to 4 prefix byte 12279 generateREXprefix(true, null, null, dstBase); 12280 // single byte opcode 12281 if (fits(imm,8)) { 12282 setMachineCodes(mi++, (byte) 0x83); 12283 // "register 0x3" is really part of the opcode 12284 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 12285 emitImm8((byte)imm); 12286 } else { 12287 setMachineCodes(mi++, (byte) 0x81); 12288 // "register 0x3" is really part of the opcode 12289 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 12290 emitImm32(imm); 12291 } 12292 if (lister != null) lister.RNI(miStart, "SBB", dstBase, imm); 12293 } 12294 12295 /** 12296 * Generate a register--immediate SBB. That is, 12297 * <PRE> 12298 * dstReg -CF= (byte) imm 12299 * </PRE> 12300 * 12301 * @param dstReg the destination register 12302 * @param imm immediate 12303 */ 12304 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12305 public final void emitSBB_Reg_Imm_Byte(GPR dstReg, int imm) { 12306 int miStart = mi; 12307 if (dstReg == EAX) { 12308 setMachineCodes(mi++, (byte) 0x1C); 12309 emitImm8(imm); 12310 } else { 12311 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 12312 generateREXprefix(false, null, null, dstReg); 12313 setMachineCodes(mi++, (byte) 0x80); 12314 // "register 0x3" is really part of the opcode 12315 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 12316 emitImm8(imm); 12317 } 12318 if (lister != null) lister.RI(miStart, "SBB", dstReg, imm); 12319 } 12320 12321 /** 12322 * Generate a register-displacement--immediate SBB. That is, 12323 * <PRE> 12324 * [dstBase + dstDisp] -CF= (byte) imm 12325 * </PRE> 12326 * 12327 * @param dstBase the destination register 12328 * @param dstDisp the destination displacement 12329 * @param imm immediate 12330 */ 12331 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12332 public final void emitSBB_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 12333 int miStart = mi; 12334 generateREXprefix(false, null, null, dstBase); 12335 setMachineCodes(mi++, (byte) 0x80); 12336 // "register 0x3" is really part of the opcode 12337 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 12338 emitImm8(imm); 12339 if (lister != null) lister.RDI(miStart, "SBB", dstBase, dstDisp, imm); 12340 } 12341 12342 /** 12343 * Generate a register-index--immediate SBB. That is, 12344 * <PRE> 12345 * [dstBase + dstIndex<<scale + dstDisp] -CF= (byte) imm 12346 * </PRE> 12347 * 12348 * @param dstBase the destination base register 12349 * @param dstIndex the destination index register 12350 * @param dstScale the destination shift amount 12351 * @param dstDisp the destination displacement 12352 * @param imm immediate 12353 */ 12354 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12355 public final void emitSBB_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 12356 int miStart = mi; 12357 generateREXprefix(false, null, dstIndex, dstBase); 12358 setMachineCodes(mi++, (byte) 0x80); 12359 // "register 0x3" is really part of the opcode 12360 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 12361 emitImm8(imm); 12362 if (lister != null) lister.RXDI(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, imm); 12363 } 12364 12365 /** 12366 * Generate a register-offset--immediate SBB. That is, 12367 * <PRE> 12368 * [dstIndex<<dstScale + dstDisp] -CF= (byte) imm 12369 * </PRE> 12370 * 12371 * @param dstIndex the destination index register 12372 * @param dstScale the destination shift amount 12373 * @param dstDisp the destination displacement 12374 * @param imm immediate 12375 */ 12376 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12377 public final void emitSBB_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 12378 int miStart = mi; 12379 generateREXprefix(false, null, dstIndex, null); 12380 setMachineCodes(mi++, (byte) 0x80); 12381 // "register 0x3" is really part of the opcode 12382 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 12383 emitImm8(imm); 12384 if (lister != null) lister.RFDI(miStart, "SBB", dstIndex, dstScale, dstDisp, imm); 12385 } 12386 12387 /** 12388 * Generate a absolute--immediate SBB. That is, 12389 * <PRE> 12390 * [dstDisp] -CF= (byte) imm 12391 * </PRE> 12392 * 12393 * @param dstDisp the destination displacement 12394 * @param imm immediate 12395 */ 12396 public final void emitSBB_Abs_Imm_Byte(Address dstDisp, int imm) { 12397 int miStart = mi; 12398 generateREXprefix(false, null, null, null); 12399 setMachineCodes(mi++, (byte) 0x80); 12400 // "register 0x3" is really part of the opcode 12401 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 12402 emitImm8(imm); 12403 if (lister != null) lister.RAI(miStart, "SBB", dstDisp, imm); 12404 } 12405 12406 /** 12407 * Generate a register(indirect)--immediate SBB. That is, 12408 * <PRE> 12409 * [dstBase] -CF= (byte) imm 12410 * </PRE> 12411 * 12412 * @param dstBase the destination base register 12413 * @param imm immediate 12414 */ 12415 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12416 public final void emitSBB_RegInd_Imm_Byte(GPR dstBase, int imm) { 12417 int miStart = mi; 12418 generateREXprefix(false, null, null, dstBase); 12419 setMachineCodes(mi++, (byte) 0x80); 12420 // "register 0x3" is really part of the opcode 12421 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 12422 emitImm8(imm); 12423 if (lister != null) lister.RNI(miStart, "SBB", dstBase, imm); 12424 } 12425 12426 /** 12427 * Generate a register(indirect)--register SUB. That is, 12428 * <PRE> 12429 * [dstBase] -= srcReg 12430 * </PRE> 12431 * 12432 * @param dstBase the destination base 12433 * @param srcReg the source register 12434 */ 12435 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12436 public final void emitSUB_RegInd_Reg(GPR dstBase, GPR srcReg) { 12437 int miStart = mi; 12438 // no group 1 to 4 prefix byte 12439 generateREXprefix(false, srcReg, null, dstBase); 12440 // single byte opcode 12441 setMachineCodes(mi++, (byte) 0x29); 12442 emitRegIndirectRegOperands(dstBase, srcReg); 12443 if (lister != null) lister.RNR(miStart, "SUB", dstBase, srcReg); 12444 } 12445 12446 /** 12447 * Generate a register-offset--register SUB. That is, 12448 * <PRE> 12449 * [dstReg<<dstScale + dstDisp] -= srcReg 12450 * </PRE> 12451 * 12452 * @param dstIndex the destination index register 12453 * @param dstScale the destination shift amount 12454 * @param dstDisp the destination displacement 12455 * @param srcReg the source register 12456 */ 12457 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 12458 public final void emitSUB_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 12459 int miStart = mi; 12460 // no group 1 to 4 prefix byte 12461 generateREXprefix(false, srcReg, dstIndex, null); 12462 // single byte opcode 12463 setMachineCodes(mi++, (byte) 0x29); 12464 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 12465 if (lister != null) lister.RFDR(miStart, "SUB", dstIndex, dstScale, dstDisp, srcReg); 12466 } 12467 12468 /** 12469 * Generate a absolute--register SUB. That is, 12470 * <PRE> 12471 * [dstDisp] -= srcReg 12472 * </PRE> 12473 * 12474 * @param dstDisp the destination address 12475 * @param srcReg the source register 12476 */ 12477 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 12478 public final void emitSUB_Abs_Reg(Address dstDisp, GPR srcReg) { 12479 int miStart = mi; 12480 // no group 1 to 4 prefix byte 12481 generateREXprefix(false, srcReg, null, null); 12482 // single byte opcode 12483 setMachineCodes(mi++, (byte) 0x29); 12484 emitAbsRegOperands(dstDisp, srcReg); 12485 if (lister != null) lister.RAR(miStart, "SUB", dstDisp, srcReg); 12486 } 12487 12488 /** 12489 * Generate a register-index--register SUB. That is, 12490 * <PRE> 12491 * [dstBase + dstIndex<<dstScale + dstDisp] -= srcReg 12492 * </PRE> 12493 * 12494 * @param dstBase the base register 12495 * @param dstIndex the destination index register 12496 * @param dstScale the destination shift amount 12497 * @param dstDisp the destination displacement 12498 * @param srcReg the source register 12499 */ 12500 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 12501 public final void emitSUB_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 12502 int miStart = mi; 12503 // no group 1 to 4 prefix byte 12504 generateREXprefix(false, srcReg, dstIndex, dstBase); 12505 // single byte opcode 12506 setMachineCodes(mi++, (byte) 0x29); 12507 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 12508 if (lister != null) lister.RXDR(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, srcReg); 12509 } 12510 12511 /** 12512 * Generate a register-displacement--register SUB. That is, 12513 * <PRE> 12514 * [dstBase + dstDisp] -= srcReg 12515 * </PRE> 12516 * 12517 * @param dstBase the base register 12518 * @param dstDisp the destination displacement 12519 * @param srcReg the source register 12520 */ 12521 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 12522 public final void emitSUB_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 12523 int miStart = mi; 12524 // no group 1 to 4 prefix byte 12525 generateREXprefix(false, srcReg, null, dstBase); 12526 // single byte opcode 12527 setMachineCodes(mi++, (byte) 0x29); 12528 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 12529 if (lister != null) lister.RDR(miStart, "SUB", dstBase, dstDisp, srcReg); 12530 } 12531 12532 /** 12533 * Generate a register--register SUB. That is, 12534 * <PRE> 12535 * dstReg -= srcReg 12536 * </PRE> 12537 * 12538 * @param dstReg the destination register 12539 * @param srcReg the source register 12540 */ 12541 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12542 public final void emitSUB_Reg_Reg(GPR dstReg, GPR srcReg) { 12543 int miStart = mi; 12544 // no group 1 to 4 prefix byte 12545 generateREXprefix(false, srcReg, null, dstReg); 12546 // single byte opcode 12547 setMachineCodes(mi++, (byte) 0x29); 12548 emitRegRegOperands(dstReg, srcReg); 12549 if (lister != null) lister.RR(miStart, "SUB", dstReg, srcReg); 12550 } 12551 12552 /** 12553 * Generate a register--register-displacement SUB. That is, 12554 * <PRE> 12555 * dstReg -= [srcReg + srcDisp] 12556 * </PRE> 12557 * 12558 * @param dstReg the destination register 12559 * @param srcBase the source register 12560 * @param srcDisp the source displacement 12561 */ 12562 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12563 public final void emitSUB_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 12564 int miStart = mi; 12565 // no group 1 to 4 prefix byte 12566 generateREXprefix(false, dstReg, null, srcBase); 12567 // single byte opcode 12568 setMachineCodes(mi++, (byte) 0x2B); 12569 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 12570 if (lister != null) lister.RRD(miStart, "SUB", dstReg, srcBase, srcDisp); 12571 } 12572 12573 /** 12574 * Generate a register--register-offset SUB. That is, 12575 * <PRE> 12576 * dstReg -= [srcIndex<<srcScale + srcDisp] 12577 * </PRE> 12578 * 12579 * @param dstReg the destination register 12580 * @param srcIndex the source index register 12581 * @param srcScale the source shift amount 12582 * @param srcDisp the source displacement 12583 */ 12584 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12585 public final void emitSUB_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 12586 int miStart = mi; 12587 // no group 1 to 4 prefix byte 12588 generateREXprefix(false, dstReg, srcIndex, null); 12589 // single byte opcode 12590 setMachineCodes(mi++, (byte) 0x2B); 12591 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 12592 if (lister != null) lister.RRFD(miStart, "SUB", dstReg, srcIndex, srcScale, srcDisp); 12593 } 12594 12595 /** 12596 * Generate a register--register-offset SUB. That is, 12597 * <PRE> 12598 * dstReg -= [srcDisp] 12599 * </PRE> 12600 * 12601 * @param dstReg the destination register 12602 * @param srcDisp the source displacement 12603 */ 12604 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12605 public final void emitSUB_Reg_Abs(GPR dstReg, Address srcDisp) { 12606 int miStart = mi; 12607 // no group 1 to 4 prefix byte 12608 generateREXprefix(false, dstReg, null, null); 12609 // single byte opcode 12610 setMachineCodes(mi++, (byte) 0x2B); 12611 emitAbsRegOperands(srcDisp, dstReg); 12612 if (lister != null) lister.RRA(miStart, "SUB", dstReg, srcDisp); 12613 } 12614 12615 /** 12616 * Generate a register--register-offset SUB. That is, 12617 * <PRE> 12618 * dstReg -= [srcBase + srcIndex<<srcScale + srcDisp] 12619 * </PRE> 12620 * 12621 * @param dstReg the destination register 12622 * @param srcBase the source base register 12623 * @param srcIndex the source index register 12624 * @param srcScale the source shift amount 12625 * @param srcDisp the source displacement 12626 */ 12627 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 12628 public final void emitSUB_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 12629 int miStart = mi; 12630 // no group 1 to 4 prefix byte 12631 generateREXprefix(false, dstReg, srcIndex, srcBase); 12632 // single byte opcode 12633 setMachineCodes(mi++, (byte) 0x2B); 12634 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 12635 if (lister != null) lister.RRXD(miStart, "SUB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 12636 } 12637 12638 /** 12639 * Generate a register--register(indirect) SUB. That is, 12640 * <PRE> 12641 * dstReg -= [srcBase] 12642 * </PRE> 12643 * 12644 * @param dstReg the destination register 12645 * @param srcBase the source base register 12646 */ 12647 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12648 public final void emitSUB_Reg_RegInd(GPR dstReg, GPR srcBase) { 12649 int miStart = mi; 12650 // no group 1 to 4 prefix byte 12651 generateREXprefix(false, dstReg, null, srcBase); 12652 // single byte opcode 12653 setMachineCodes(mi++, (byte) 0x2B); 12654 emitRegIndirectRegOperands(srcBase, dstReg); 12655 if (lister != null) lister.RRN(miStart, "SUB", dstReg, srcBase); 12656 } 12657 12658 /** 12659 * Generate a register(indirect)--register SUB. That is, 12660 * <PRE> 12661 * [dstBase] -= (word) srcReg 12662 * </PRE> 12663 * 12664 * @param dstBase the destination base 12665 * @param srcReg the source register 12666 */ 12667 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12668 public final void emitSUB_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 12669 int miStart = mi; 12670 setMachineCodes(mi++, (byte) 0x66); 12671 generateREXprefix(false, srcReg, null, dstBase); 12672 // single byte opcode 12673 setMachineCodes(mi++, (byte) 0x29); 12674 emitRegIndirectRegOperands(dstBase, srcReg); 12675 if (lister != null) lister.RNR(miStart, "SUB", dstBase, srcReg); 12676 } 12677 12678 /** 12679 * Generate a register-offset--register SUB. That is, 12680 * <PRE> 12681 * [dstReg<<dstScale + dstDisp] -= (word) srcReg 12682 * </PRE> 12683 * 12684 * @param dstIndex the destination index register 12685 * @param dstScale the destination shift amount 12686 * @param dstDisp the destination displacement 12687 * @param srcReg the source register 12688 */ 12689 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 12690 public final void emitSUB_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 12691 int miStart = mi; 12692 setMachineCodes(mi++, (byte) 0x66); 12693 generateREXprefix(false, srcReg, dstIndex, null); 12694 // single byte opcode 12695 setMachineCodes(mi++, (byte) 0x29); 12696 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 12697 if (lister != null) lister.RFDR(miStart, "SUB", dstIndex, dstScale, dstDisp, srcReg); 12698 } 12699 12700 /** 12701 * Generate a absolute--register SUB. That is, 12702 * <PRE> 12703 * [dstDisp] -= (word) srcReg 12704 * </PRE> 12705 * 12706 * @param dstDisp the destination address 12707 * @param srcReg the source register 12708 */ 12709 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 12710 public final void emitSUB_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 12711 int miStart = mi; 12712 setMachineCodes(mi++, (byte) 0x66); 12713 generateREXprefix(false, srcReg, null, null); 12714 // single byte opcode 12715 setMachineCodes(mi++, (byte) 0x29); 12716 emitAbsRegOperands(dstDisp, srcReg); 12717 if (lister != null) lister.RAR(miStart, "SUB", dstDisp, srcReg); 12718 } 12719 12720 /** 12721 * Generate a register-index--register SUB. That is, 12722 * <PRE> 12723 * [dstBase + dstIndex<<dstScale + dstDisp] -= (word) srcReg 12724 * </PRE> 12725 * 12726 * @param dstBase the base register 12727 * @param dstIndex the destination index register 12728 * @param dstScale the destination shift amount 12729 * @param dstDisp the destination displacement 12730 * @param srcReg the source register 12731 */ 12732 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 12733 public final void emitSUB_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 12734 int miStart = mi; 12735 setMachineCodes(mi++, (byte) 0x66); 12736 generateREXprefix(false, srcReg, dstIndex, dstBase); 12737 // single byte opcode 12738 setMachineCodes(mi++, (byte) 0x29); 12739 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 12740 if (lister != null) lister.RXDR(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, srcReg); 12741 } 12742 12743 /** 12744 * Generate a register-displacement--register SUB. That is, 12745 * <PRE> 12746 * [dstBase + dstDisp] -= (word) srcReg 12747 * </PRE> 12748 * 12749 * @param dstBase the base register 12750 * @param dstDisp the destination displacement 12751 * @param srcReg the source register 12752 */ 12753 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 12754 public final void emitSUB_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 12755 int miStart = mi; 12756 setMachineCodes(mi++, (byte) 0x66); 12757 generateREXprefix(false, srcReg, null, dstBase); 12758 // single byte opcode 12759 setMachineCodes(mi++, (byte) 0x29); 12760 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 12761 if (lister != null) lister.RDR(miStart, "SUB", dstBase, dstDisp, srcReg); 12762 } 12763 12764 /** 12765 * Generate a register--register SUB. That is, 12766 * <PRE> 12767 * dstReg -= (word) srcReg 12768 * </PRE> 12769 * 12770 * @param dstReg the destination register 12771 * @param srcReg the source register 12772 */ 12773 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12774 public final void emitSUB_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 12775 int miStart = mi; 12776 setMachineCodes(mi++, (byte) 0x66); 12777 generateREXprefix(false, srcReg, null, dstReg); 12778 // single byte opcode 12779 setMachineCodes(mi++, (byte) 0x29); 12780 emitRegRegOperands(dstReg, srcReg); 12781 if (lister != null) lister.RR(miStart, "SUB", dstReg, srcReg); 12782 } 12783 12784 /** 12785 * Generate a register--register-displacement SUB. That is, 12786 * <PRE> 12787 * dstReg -= (word) [srcReg + srcDisp] 12788 * </PRE> 12789 * 12790 * @param dstReg the destination register 12791 * @param srcBase the source register 12792 * @param srcDisp the source displacement 12793 */ 12794 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12795 public final void emitSUB_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 12796 int miStart = mi; 12797 setMachineCodes(mi++, (byte) 0x66); 12798 generateREXprefix(false, dstReg, null, srcBase); 12799 // single byte opcode 12800 setMachineCodes(mi++, (byte) 0x2B); 12801 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 12802 if (lister != null) lister.RRD(miStart, "SUB", dstReg, srcBase, srcDisp); 12803 } 12804 12805 /** 12806 * Generate a register--register-offset SUB. That is, 12807 * <PRE> 12808 * dstReg -= (word) [srcIndex<<srcScale + srcDisp] 12809 * </PRE> 12810 * 12811 * @param dstReg the destination register 12812 * @param srcIndex the source index register 12813 * @param srcScale the source shift amount 12814 * @param srcDisp the source displacement 12815 */ 12816 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12817 public final void emitSUB_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 12818 int miStart = mi; 12819 setMachineCodes(mi++, (byte) 0x66); 12820 generateREXprefix(false, dstReg, srcIndex, null); 12821 // single byte opcode 12822 setMachineCodes(mi++, (byte) 0x2B); 12823 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 12824 if (lister != null) lister.RRFD(miStart, "SUB", dstReg, srcIndex, srcScale, srcDisp); 12825 } 12826 12827 /** 12828 * Generate a register--register-offset SUB. That is, 12829 * <PRE> 12830 * dstReg -= (word) [srcDisp] 12831 * </PRE> 12832 * 12833 * @param dstReg the destination register 12834 * @param srcDisp the source displacement 12835 */ 12836 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 12837 public final void emitSUB_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 12838 int miStart = mi; 12839 setMachineCodes(mi++, (byte) 0x66); 12840 generateREXprefix(false, dstReg, null, null); 12841 // single byte opcode 12842 setMachineCodes(mi++, (byte) 0x2B); 12843 emitAbsRegOperands(srcDisp, dstReg); 12844 if (lister != null) lister.RRA(miStart, "SUB", dstReg, srcDisp); 12845 } 12846 12847 /** 12848 * Generate a register--register-offset SUB. That is, 12849 * <PRE> 12850 * dstReg -= (word) [srcBase + srcIndex<<srcScale + srcDisp] 12851 * </PRE> 12852 * 12853 * @param dstReg the destination register 12854 * @param srcBase the source base register 12855 * @param srcIndex the source index register 12856 * @param srcScale the source shift amount 12857 * @param srcDisp the source displacement 12858 */ 12859 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 12860 public final void emitSUB_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 12861 int miStart = mi; 12862 setMachineCodes(mi++, (byte) 0x66); 12863 generateREXprefix(false, dstReg, srcIndex, srcBase); 12864 // single byte opcode 12865 setMachineCodes(mi++, (byte) 0x2B); 12866 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 12867 if (lister != null) lister.RRXD(miStart, "SUB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 12868 } 12869 12870 /** 12871 * Generate a register--register(indirect) SUB. That is, 12872 * <PRE> 12873 * dstReg -= (word) [srcBase] 12874 * </PRE> 12875 * 12876 * @param dstReg the destination register 12877 * @param srcBase the source base register 12878 */ 12879 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12880 public final void emitSUB_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 12881 int miStart = mi; 12882 setMachineCodes(mi++, (byte) 0x66); 12883 generateREXprefix(false, dstReg, null, srcBase); 12884 // single byte opcode 12885 setMachineCodes(mi++, (byte) 0x2B); 12886 emitRegIndirectRegOperands(srcBase, dstReg); 12887 if (lister != null) lister.RRN(miStart, "SUB", dstReg, srcBase); 12888 } 12889 12890 /** 12891 * Generate a register(indirect)--register SUB. That is, 12892 * <PRE> 12893 * [dstBase] -= (quad) srcReg 12894 * </PRE> 12895 * 12896 * @param dstBase the destination base 12897 * @param srcReg the source register 12898 */ 12899 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 12900 public final void emitSUB_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 12901 int miStart = mi; 12902 // no group 1 to 4 prefix byte 12903 generateREXprefix(true, srcReg, null, dstBase); 12904 // single byte opcode 12905 setMachineCodes(mi++, (byte) 0x29); 12906 emitRegIndirectRegOperands(dstBase, srcReg); 12907 if (lister != null) lister.RNR(miStart, "SUB", dstBase, srcReg); 12908 } 12909 12910 /** 12911 * Generate a register-offset--register SUB. That is, 12912 * <PRE> 12913 * [dstReg<<dstScale + dstDisp] -= (quad) srcReg 12914 * </PRE> 12915 * 12916 * @param dstIndex the destination index register 12917 * @param dstScale the destination shift amount 12918 * @param dstDisp the destination displacement 12919 * @param srcReg the source register 12920 */ 12921 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 12922 public final void emitSUB_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 12923 int miStart = mi; 12924 // no group 1 to 4 prefix byte 12925 generateREXprefix(true, srcReg, dstIndex, null); 12926 // single byte opcode 12927 setMachineCodes(mi++, (byte) 0x29); 12928 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 12929 if (lister != null) lister.RFDR(miStart, "SUB", dstIndex, dstScale, dstDisp, srcReg); 12930 } 12931 12932 /** 12933 * Generate a absolute--register SUB. That is, 12934 * <PRE> 12935 * [dstDisp] -= (quad) srcReg 12936 * </PRE> 12937 * 12938 * @param dstDisp the destination address 12939 * @param srcReg the source register 12940 */ 12941 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 12942 public final void emitSUB_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 12943 int miStart = mi; 12944 // no group 1 to 4 prefix byte 12945 generateREXprefix(true, srcReg, null, null); 12946 // single byte opcode 12947 setMachineCodes(mi++, (byte) 0x29); 12948 emitAbsRegOperands(dstDisp, srcReg); 12949 if (lister != null) lister.RAR(miStart, "SUB", dstDisp, srcReg); 12950 } 12951 12952 /** 12953 * Generate a register-index--register SUB. That is, 12954 * <PRE> 12955 * [dstBase + dstIndex<<dstScale + dstDisp] -= (quad) srcReg 12956 * </PRE> 12957 * 12958 * @param dstBase the base register 12959 * @param dstIndex the destination index register 12960 * @param dstScale the destination shift amount 12961 * @param dstDisp the destination displacement 12962 * @param srcReg the source register 12963 */ 12964 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 12965 public final void emitSUB_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 12966 int miStart = mi; 12967 // no group 1 to 4 prefix byte 12968 generateREXprefix(true, srcReg, dstIndex, dstBase); 12969 // single byte opcode 12970 setMachineCodes(mi++, (byte) 0x29); 12971 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 12972 if (lister != null) lister.RXDR(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, srcReg); 12973 } 12974 12975 /** 12976 * Generate a register-displacement--register SUB. That is, 12977 * <PRE> 12978 * [dstBase + dstDisp] -= (quad) srcReg 12979 * </PRE> 12980 * 12981 * @param dstBase the base register 12982 * @param dstDisp the destination displacement 12983 * @param srcReg the source register 12984 */ 12985 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 12986 public final void emitSUB_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 12987 int miStart = mi; 12988 // no group 1 to 4 prefix byte 12989 generateREXprefix(true, srcReg, null, dstBase); 12990 // single byte opcode 12991 setMachineCodes(mi++, (byte) 0x29); 12992 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 12993 if (lister != null) lister.RDR(miStart, "SUB", dstBase, dstDisp, srcReg); 12994 } 12995 12996 /** 12997 * Generate a register--register SUB. That is, 12998 * <PRE> 12999 * dstReg -= (quad) srcReg 13000 * </PRE> 13001 * 13002 * @param dstReg the destination register 13003 * @param srcReg the source register 13004 */ 13005 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13006 public final void emitSUB_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 13007 int miStart = mi; 13008 // no group 1 to 4 prefix byte 13009 generateREXprefix(true, srcReg, null, dstReg); 13010 // single byte opcode 13011 setMachineCodes(mi++, (byte) 0x29); 13012 emitRegRegOperands(dstReg, srcReg); 13013 if (lister != null) lister.RR(miStart, "SUB", dstReg, srcReg); 13014 } 13015 13016 /** 13017 * Generate a register--register-displacement SUB. That is, 13018 * <PRE> 13019 * dstReg -= (quad) [srcReg + srcDisp] 13020 * </PRE> 13021 * 13022 * @param dstReg the destination register 13023 * @param srcBase the source register 13024 * @param srcDisp the source displacement 13025 */ 13026 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13027 public final void emitSUB_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 13028 int miStart = mi; 13029 // no group 1 to 4 prefix byte 13030 generateREXprefix(true, dstReg, null, srcBase); 13031 // single byte opcode 13032 setMachineCodes(mi++, (byte) 0x2B); 13033 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 13034 if (lister != null) lister.RRD(miStart, "SUB", dstReg, srcBase, srcDisp); 13035 } 13036 13037 /** 13038 * Generate a register--register-offset SUB. That is, 13039 * <PRE> 13040 * dstReg -= (quad) [srcIndex<<srcScale + srcDisp] 13041 * </PRE> 13042 * 13043 * @param dstReg the destination register 13044 * @param srcIndex the source index register 13045 * @param srcScale the source shift amount 13046 * @param srcDisp the source displacement 13047 */ 13048 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13049 public final void emitSUB_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 13050 int miStart = mi; 13051 // no group 1 to 4 prefix byte 13052 generateREXprefix(true, dstReg, srcIndex, null); 13053 // single byte opcode 13054 setMachineCodes(mi++, (byte) 0x2B); 13055 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 13056 if (lister != null) lister.RRFD(miStart, "SUB", dstReg, srcIndex, srcScale, srcDisp); 13057 } 13058 13059 /** 13060 * Generate a register--register-offset SUB. That is, 13061 * <PRE> 13062 * dstReg -= (quad) [srcDisp] 13063 * </PRE> 13064 * 13065 * @param dstReg the destination register 13066 * @param srcDisp the source displacement 13067 */ 13068 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13069 public final void emitSUB_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 13070 int miStart = mi; 13071 // no group 1 to 4 prefix byte 13072 generateREXprefix(true, dstReg, null, null); 13073 // single byte opcode 13074 setMachineCodes(mi++, (byte) 0x2B); 13075 emitAbsRegOperands(srcDisp, dstReg); 13076 if (lister != null) lister.RRA(miStart, "SUB", dstReg, srcDisp); 13077 } 13078 13079 /** 13080 * Generate a register--register-offset SUB. That is, 13081 * <PRE> 13082 * dstReg -= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 13083 * </PRE> 13084 * 13085 * @param dstReg the destination register 13086 * @param srcBase the source base register 13087 * @param srcIndex the source index register 13088 * @param srcScale the source shift amount 13089 * @param srcDisp the source displacement 13090 */ 13091 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 13092 public final void emitSUB_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 13093 int miStart = mi; 13094 // no group 1 to 4 prefix byte 13095 generateREXprefix(true, dstReg, srcIndex, srcBase); 13096 // single byte opcode 13097 setMachineCodes(mi++, (byte) 0x2B); 13098 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 13099 if (lister != null) lister.RRXD(miStart, "SUB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 13100 } 13101 13102 /** 13103 * Generate a register--register(indirect) SUB. That is, 13104 * <PRE> 13105 * dstReg -= (quad) [srcBase] 13106 * </PRE> 13107 * 13108 * @param dstReg the destination register 13109 * @param srcBase the source base register 13110 */ 13111 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13112 public final void emitSUB_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 13113 int miStart = mi; 13114 // no group 1 to 4 prefix byte 13115 generateREXprefix(true, dstReg, null, srcBase); 13116 // single byte opcode 13117 setMachineCodes(mi++, (byte) 0x2B); 13118 emitRegIndirectRegOperands(srcBase, dstReg); 13119 if (lister != null) lister.RRN(miStart, "SUB", dstReg, srcBase); 13120 } 13121 13122 /** 13123 * Generate a register(indirect)--register SUB. That is, 13124 * <PRE> 13125 * [dstBase] -= (byte) srcReg 13126 * </PRE> 13127 * 13128 * @param dstBase the destination base 13129 * @param srcReg the source register 13130 */ 13131 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13132 public final void emitSUB_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 13133 int miStart = mi; 13134 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 13135 // no group 1 to 4 prefix byte 13136 generateREXprefix(false, srcReg, null, dstBase); 13137 // single byte opcode 13138 setMachineCodes(mi++, (byte) 0x28); 13139 emitRegIndirectRegOperands(dstBase, srcReg); 13140 if (lister != null) lister.RNR(miStart, "SUB", dstBase, srcReg); 13141 } 13142 13143 /** 13144 * Generate a register-offset--register SUB. That is, 13145 * <PRE> 13146 * [dstReg<<dstScale + dstDisp] -= (byte) srcReg 13147 * </PRE> 13148 * 13149 * @param dstIndex the destination index register 13150 * @param dstScale the destination shift amount 13151 * @param dstDisp the destination displacement 13152 * @param srcReg the source register 13153 */ 13154 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 13155 public final void emitSUB_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 13156 int miStart = mi; 13157 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 13158 // no group 1 to 4 prefix byte 13159 generateREXprefix(false, srcReg, dstIndex, null); 13160 // single byte opcode 13161 setMachineCodes(mi++, (byte) 0x28); 13162 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 13163 if (lister != null) lister.RFDR(miStart, "SUB", dstIndex, dstScale, dstDisp, srcReg); 13164 } 13165 13166 /** 13167 * Generate a absolute--register SUB. That is, 13168 * <PRE> 13169 * [dstDisp] -= (byte) srcReg 13170 * </PRE> 13171 * 13172 * @param dstDisp the destination address 13173 * @param srcReg the source register 13174 */ 13175 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 13176 public final void emitSUB_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 13177 int miStart = mi; 13178 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 13179 // no group 1 to 4 prefix byte 13180 generateREXprefix(false, srcReg, null, null); 13181 // single byte opcode 13182 setMachineCodes(mi++, (byte) 0x28); 13183 emitAbsRegOperands(dstDisp, srcReg); 13184 if (lister != null) lister.RAR(miStart, "SUB", dstDisp, srcReg); 13185 } 13186 13187 /** 13188 * Generate a register-index--register SUB. That is, 13189 * <PRE> 13190 * [dstBase + dstIndex<<dstScale + dstDisp] -= (byte) srcReg 13191 * </PRE> 13192 * 13193 * @param dstBase the base register 13194 * @param dstIndex the destination index register 13195 * @param dstScale the destination shift amount 13196 * @param dstDisp the destination displacement 13197 * @param srcReg the source register 13198 */ 13199 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 13200 public final void emitSUB_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 13201 int miStart = mi; 13202 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 13203 // no group 1 to 4 prefix byte 13204 generateREXprefix(false, srcReg, dstIndex, dstBase); 13205 // single byte opcode 13206 setMachineCodes(mi++, (byte) 0x28); 13207 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 13208 if (lister != null) lister.RXDR(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, srcReg); 13209 } 13210 13211 /** 13212 * Generate a register-displacement--register SUB. That is, 13213 * <PRE> 13214 * [dstBase + dstDisp] -= (byte) srcReg 13215 * </PRE> 13216 * 13217 * @param dstBase the base register 13218 * @param dstDisp the destination displacement 13219 * @param srcReg the source register 13220 */ 13221 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 13222 public final void emitSUB_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 13223 int miStart = mi; 13224 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 13225 // no group 1 to 4 prefix byte 13226 generateREXprefix(false, srcReg, null, dstBase); 13227 // single byte opcode 13228 setMachineCodes(mi++, (byte) 0x28); 13229 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 13230 if (lister != null) lister.RDR(miStart, "SUB", dstBase, dstDisp, srcReg); 13231 } 13232 13233 /** 13234 * Generate a register--register SUB. That is, 13235 * <PRE> 13236 * dstReg -= (byte) srcReg 13237 * </PRE> 13238 * 13239 * @param dstReg the destination register 13240 * @param srcReg the source register 13241 */ 13242 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13243 public final void emitSUB_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 13244 int miStart = mi; 13245 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 13246 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 13247 // no group 1 to 4 prefix byte 13248 generateREXprefix(false, srcReg, null, dstReg); 13249 // single byte opcode 13250 setMachineCodes(mi++, (byte) 0x28); 13251 emitRegRegOperands(dstReg, srcReg); 13252 if (lister != null) lister.RR(miStart, "SUB", dstReg, srcReg); 13253 } 13254 13255 /** 13256 * Generate a register--register-displacement SUB. That is, 13257 * <PRE> 13258 * dstReg -= (byte) [srcReg + srcDisp] 13259 * </PRE> 13260 * 13261 * @param dstReg the destination register 13262 * @param srcBase the source register 13263 * @param srcDisp the source displacement 13264 */ 13265 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13266 public final void emitSUB_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 13267 int miStart = mi; 13268 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 13269 // no group 1 to 4 prefix byte 13270 generateREXprefix(false, dstReg, null, srcBase); 13271 // single byte opcode 13272 setMachineCodes(mi++, (byte) 0x2A); 13273 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 13274 if (lister != null) lister.RRD(miStart, "SUB", dstReg, srcBase, srcDisp); 13275 } 13276 13277 /** 13278 * Generate a register--register-offset SUB. That is, 13279 * <PRE> 13280 * dstReg -= (byte) [srcIndex<<srcScale + srcDisp] 13281 * </PRE> 13282 * 13283 * @param dstReg the destination register 13284 * @param srcIndex the source index register 13285 * @param srcScale the source shift amount 13286 * @param srcDisp the source displacement 13287 */ 13288 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13289 public final void emitSUB_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 13290 int miStart = mi; 13291 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 13292 // no group 1 to 4 prefix byte 13293 generateREXprefix(false, dstReg, srcIndex, null); 13294 // single byte opcode 13295 setMachineCodes(mi++, (byte) 0x2A); 13296 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 13297 if (lister != null) lister.RRFD(miStart, "SUB", dstReg, srcIndex, srcScale, srcDisp); 13298 } 13299 13300 /** 13301 * Generate a register--register-offset SUB. That is, 13302 * <PRE> 13303 * dstReg -= (byte) [srcDisp] 13304 * </PRE> 13305 * 13306 * @param dstReg the destination register 13307 * @param srcDisp the source displacement 13308 */ 13309 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13310 public final void emitSUB_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 13311 int miStart = mi; 13312 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 13313 // no group 1 to 4 prefix byte 13314 generateREXprefix(false, dstReg, null, null); 13315 // single byte opcode 13316 setMachineCodes(mi++, (byte) 0x2A); 13317 emitAbsRegOperands(srcDisp, dstReg); 13318 if (lister != null) lister.RRA(miStart, "SUB", dstReg, srcDisp); 13319 } 13320 13321 /** 13322 * Generate a register--register-offset SUB. That is, 13323 * <PRE> 13324 * dstReg -= (byte) [srcBase + srcIndex<<srcScale + srcDisp] 13325 * </PRE> 13326 * 13327 * @param dstReg the destination register 13328 * @param srcBase the source base register 13329 * @param srcIndex the source index register 13330 * @param srcScale the source shift amount 13331 * @param srcDisp the source displacement 13332 */ 13333 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 13334 public final void emitSUB_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 13335 int miStart = mi; 13336 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 13337 // no group 1 to 4 prefix byte 13338 generateREXprefix(false, dstReg, srcIndex, srcBase); 13339 // single byte opcode 13340 setMachineCodes(mi++, (byte) 0x2A); 13341 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 13342 if (lister != null) lister.RRXD(miStart, "SUB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 13343 } 13344 13345 /** 13346 * Generate a register--register(indirect) SUB. That is, 13347 * <PRE> 13348 * dstReg -= (byte) [srcBase] 13349 * </PRE> 13350 * 13351 * @param dstReg the destination register 13352 * @param srcBase the source base register 13353 */ 13354 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13355 public final void emitSUB_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 13356 int miStart = mi; 13357 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 13358 // no group 1 to 4 prefix byte 13359 generateREXprefix(false, dstReg, null, srcBase); 13360 // single byte opcode 13361 setMachineCodes(mi++, (byte) 0x2A); 13362 emitRegIndirectRegOperands(srcBase, dstReg); 13363 if (lister != null) lister.RRN(miStart, "SUB", dstReg, srcBase); 13364 } 13365 13366 /** 13367 * Generate a register--immediate SUB. That is, 13368 * <PRE> 13369 * dstReg -= imm 13370 * </PRE> 13371 * 13372 * @param dstReg the destination register 13373 * @param imm immediate 13374 */ 13375 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13376 public final void emitSUB_Reg_Imm(GPR dstReg, int imm) { 13377 int miStart = mi; 13378 // no group 1 to 4 prefix byte 13379 generateREXprefix(false, null, null, dstReg); 13380 // single byte opcode 13381 if (fits(imm,8)) { 13382 setMachineCodes(mi++, (byte) 0x83); 13383 // "register 0x5" is really part of the opcode 13384 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 13385 emitImm8((byte)imm); 13386 } else if (dstReg == EAX) { 13387 setMachineCodes(mi++, (byte) 0x2D); 13388 emitImm32(imm); 13389 } else { 13390 setMachineCodes(mi++, (byte) 0x81); 13391 // "register 0x5" is really part of the opcode 13392 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 13393 emitImm32(imm); 13394 } 13395 if (lister != null) lister.RI(miStart, "SUB", dstReg, imm); 13396 } 13397 13398 /** 13399 * Generate a register-displacement--immediate SUB. That is, 13400 * <PRE> 13401 * [dstBase + dstDisp] -= imm 13402 * </PRE> 13403 * 13404 * @param dstBase the destination register 13405 * @param dstDisp the destination displacement 13406 * @param imm immediate 13407 */ 13408 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13409 public final void emitSUB_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 13410 int miStart = mi; 13411 // no group 1 to 4 prefix byte 13412 generateREXprefix(false, null, null, dstBase); 13413 // single byte opcode 13414 if (fits(imm,8)) { 13415 setMachineCodes(mi++, (byte) 0x83); 13416 // "register 0x5" is really part of the opcode 13417 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 13418 emitImm8((byte)imm); 13419 } else { 13420 setMachineCodes(mi++, (byte) 0x81); 13421 // "register 0x5" is really part of the opcode 13422 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 13423 emitImm32(imm); 13424 } 13425 if (lister != null) lister.RDI(miStart, "SUB", dstBase, dstDisp, imm); 13426 } 13427 13428 /** 13429 * Generate a register-offset--immediate SUB. That is, 13430 * <PRE> 13431 * [dstIndex<<dstScale + dstDisp] -= imm 13432 * </PRE> 13433 * 13434 * @param dstIndex the destination index register 13435 * @param dstScale the destination shift amount 13436 * @param dstDisp the destination displacement 13437 * @param imm immediate 13438 */ 13439 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13440 public final void emitSUB_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 13441 int miStart = mi; 13442 // no group 1 to 4 prefix byte 13443 generateREXprefix(false, null, dstIndex, null); 13444 // single byte opcode 13445 if (fits(imm,8)) { 13446 setMachineCodes(mi++, (byte) 0x83); 13447 // "register 0x5" is really part of the opcode 13448 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13449 emitImm8((byte)imm); 13450 } else { 13451 setMachineCodes(mi++, (byte) 0x81); 13452 // "register 0x5" is really part of the opcode 13453 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13454 emitImm32(imm); 13455 } 13456 if (lister != null) lister.RFDI(miStart, "SUB", dstIndex, dstScale, dstDisp, imm); 13457 } 13458 13459 /** 13460 * Generate a absolute--immediate SUB. That is, 13461 * <PRE> 13462 * [dstDisp] -= imm 13463 * </PRE> 13464 * 13465 * @param dstDisp the destination displacement 13466 * @param imm immediate 13467 */ 13468 public final void emitSUB_Abs_Imm(Address dstDisp, int imm) { 13469 int miStart = mi; 13470 // no group 1 to 4 prefix byte 13471 generateREXprefix(false, null, null, null); 13472 // single byte opcode 13473 if (fits(imm,8)) { 13474 setMachineCodes(mi++, (byte) 0x83); 13475 // "register 0x5" is really part of the opcode 13476 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 13477 emitImm8((byte)imm); 13478 } else { 13479 setMachineCodes(mi++, (byte) 0x81); 13480 // "register 0x5" is really part of the opcode 13481 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 13482 emitImm32(imm); 13483 } 13484 if (lister != null) lister.RAI(miStart, "SUB", dstDisp, imm); 13485 } 13486 13487 /** 13488 * Generate a register-index--immediate SUB. That is, 13489 * <PRE> 13490 * [dstBase + dstIndex<<dstScale + dstDisp] -= imm 13491 * </PRE> 13492 * 13493 * @param dstBase the destination base register 13494 * @param dstIndex the destination index register 13495 * @param dstScale the destination shift amount 13496 * @param dstDisp the destination displacement 13497 * @param imm immediate 13498 */ 13499 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13500 public final void emitSUB_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 13501 int miStart = mi; 13502 // no group 1 to 4 prefix byte 13503 generateREXprefix(false, null, dstIndex, dstBase); 13504 // single byte opcode 13505 if (fits(imm,8)) { 13506 setMachineCodes(mi++, (byte) 0x83); 13507 // "register 0x5" is really part of the opcode 13508 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13509 emitImm8((byte)imm); 13510 } else { 13511 setMachineCodes(mi++, (byte) 0x81); 13512 // "register 0x5" is really part of the opcode 13513 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13514 emitImm32(imm); 13515 } 13516 if (lister != null) lister.RXDI(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, imm); 13517 } 13518 13519 /** 13520 * Generate a register(indirect)--immediate SUB. That is, 13521 * <PRE> 13522 * [dstBase] -= imm 13523 * </PRE> 13524 * 13525 * @param dstBase the destination base register 13526 * @param imm immediate 13527 */ 13528 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13529 public final void emitSUB_RegInd_Imm(GPR dstBase, int imm) { 13530 int miStart = mi; 13531 // no group 1 to 4 prefix byte 13532 generateREXprefix(false, null, null, dstBase); 13533 // single byte opcode 13534 if (fits(imm,8)) { 13535 setMachineCodes(mi++, (byte) 0x83); 13536 // "register 0x5" is really part of the opcode 13537 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 13538 emitImm8((byte)imm); 13539 } else { 13540 setMachineCodes(mi++, (byte) 0x81); 13541 // "register 0x5" is really part of the opcode 13542 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 13543 emitImm32(imm); 13544 } 13545 if (lister != null) lister.RNI(miStart, "SUB", dstBase, imm); 13546 } 13547 13548 /** 13549 * Generate a register--immediate SUB. That is, 13550 * <PRE> 13551 * dstReg -= (word) imm 13552 * </PRE> 13553 * 13554 * @param dstReg the destination register 13555 * @param imm immediate 13556 */ 13557 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13558 public final void emitSUB_Reg_Imm_Word(GPR dstReg, int imm) { 13559 int miStart = mi; 13560 setMachineCodes(mi++, (byte) 0x66); 13561 generateREXprefix(false, null, null, dstReg); 13562 // single byte opcode 13563 if (fits(imm,8)) { 13564 setMachineCodes(mi++, (byte) 0x83); 13565 // "register 0x5" is really part of the opcode 13566 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 13567 emitImm8((byte)imm); 13568 } else if (dstReg == EAX) { 13569 setMachineCodes(mi++, (byte) 0x2D); 13570 emitImm16(imm); 13571 } else { 13572 setMachineCodes(mi++, (byte) 0x81); 13573 // "register 0x5" is really part of the opcode 13574 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 13575 emitImm16(imm); 13576 } 13577 if (lister != null) lister.RI(miStart, "SUB", dstReg, imm); 13578 } 13579 13580 /** 13581 * Generate a register-displacement--immediate SUB. That is, 13582 * <PRE> 13583 * [dstBase + dstDisp] -= (word) imm 13584 * </PRE> 13585 * 13586 * @param dstBase the destination register 13587 * @param dstDisp the destination displacement 13588 * @param imm immediate 13589 */ 13590 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13591 public final void emitSUB_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 13592 int miStart = mi; 13593 setMachineCodes(mi++, (byte) 0x66); 13594 generateREXprefix(false, null, null, dstBase); 13595 // single byte opcode 13596 if (fits(imm,8)) { 13597 setMachineCodes(mi++, (byte) 0x83); 13598 // "register 0x5" is really part of the opcode 13599 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 13600 emitImm8((byte)imm); 13601 } else { 13602 setMachineCodes(mi++, (byte) 0x81); 13603 // "register 0x5" is really part of the opcode 13604 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 13605 emitImm16(imm); 13606 } 13607 if (lister != null) lister.RDI(miStart, "SUB", dstBase, dstDisp, imm); 13608 } 13609 13610 /** 13611 * Generate a register-offset--immediate SUB. That is, 13612 * <PRE> 13613 * [dstIndex<<dstScale + dstDisp] -= (word) imm 13614 * </PRE> 13615 * 13616 * @param dstIndex the destination index register 13617 * @param dstScale the destination shift amount 13618 * @param dstDisp the destination displacement 13619 * @param imm immediate 13620 */ 13621 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13622 public final void emitSUB_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 13623 int miStart = mi; 13624 setMachineCodes(mi++, (byte) 0x66); 13625 generateREXprefix(false, null, dstIndex, null); 13626 // single byte opcode 13627 if (fits(imm,8)) { 13628 setMachineCodes(mi++, (byte) 0x83); 13629 // "register 0x5" is really part of the opcode 13630 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13631 emitImm8((byte)imm); 13632 } else { 13633 setMachineCodes(mi++, (byte) 0x81); 13634 // "register 0x5" is really part of the opcode 13635 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13636 emitImm16(imm); 13637 } 13638 if (lister != null) lister.RFDI(miStart, "SUB", dstIndex, dstScale, dstDisp, imm); 13639 } 13640 13641 /** 13642 * Generate a absolute--immediate SUB. That is, 13643 * <PRE> 13644 * [dstDisp] -= (word) imm 13645 * </PRE> 13646 * 13647 * @param dstDisp the destination displacement 13648 * @param imm immediate 13649 */ 13650 public final void emitSUB_Abs_Imm_Word(Address dstDisp, int imm) { 13651 int miStart = mi; 13652 setMachineCodes(mi++, (byte) 0x66); 13653 generateREXprefix(false, null, null, null); 13654 // single byte opcode 13655 if (fits(imm,8)) { 13656 setMachineCodes(mi++, (byte) 0x83); 13657 // "register 0x5" is really part of the opcode 13658 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 13659 emitImm8((byte)imm); 13660 } else { 13661 setMachineCodes(mi++, (byte) 0x81); 13662 // "register 0x5" is really part of the opcode 13663 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 13664 emitImm16(imm); 13665 } 13666 if (lister != null) lister.RAI(miStart, "SUB", dstDisp, imm); 13667 } 13668 13669 /** 13670 * Generate a register-index--immediate SUB. That is, 13671 * <PRE> 13672 * [dstBase + dstIndex<<dstScale + dstDisp] -= (word) imm 13673 * </PRE> 13674 * 13675 * @param dstBase the destination base register 13676 * @param dstIndex the destination index register 13677 * @param dstScale the destination shift amount 13678 * @param dstDisp the destination displacement 13679 * @param imm immediate 13680 */ 13681 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13682 public final void emitSUB_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 13683 int miStart = mi; 13684 setMachineCodes(mi++, (byte) 0x66); 13685 generateREXprefix(false, null, dstIndex, dstBase); 13686 // single byte opcode 13687 if (fits(imm,8)) { 13688 setMachineCodes(mi++, (byte) 0x83); 13689 // "register 0x5" is really part of the opcode 13690 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13691 emitImm8((byte)imm); 13692 } else { 13693 setMachineCodes(mi++, (byte) 0x81); 13694 // "register 0x5" is really part of the opcode 13695 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13696 emitImm16(imm); 13697 } 13698 if (lister != null) lister.RXDI(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, imm); 13699 } 13700 13701 /** 13702 * Generate a register(indirect)--immediate SUB. That is, 13703 * <PRE> 13704 * [dstBase] -= (word) imm 13705 * </PRE> 13706 * 13707 * @param dstBase the destination base register 13708 * @param imm immediate 13709 */ 13710 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13711 public final void emitSUB_RegInd_Imm_Word(GPR dstBase, int imm) { 13712 int miStart = mi; 13713 setMachineCodes(mi++, (byte) 0x66); 13714 generateREXprefix(false, null, null, dstBase); 13715 // single byte opcode 13716 if (fits(imm,8)) { 13717 setMachineCodes(mi++, (byte) 0x83); 13718 // "register 0x5" is really part of the opcode 13719 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 13720 emitImm8((byte)imm); 13721 } else { 13722 setMachineCodes(mi++, (byte) 0x81); 13723 // "register 0x5" is really part of the opcode 13724 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 13725 emitImm16(imm); 13726 } 13727 if (lister != null) lister.RNI(miStart, "SUB", dstBase, imm); 13728 } 13729 13730 /** 13731 * Generate a register--immediate SUB. That is, 13732 * <PRE> 13733 * dstReg -= (quad) imm 13734 * </PRE> 13735 * 13736 * @param dstReg the destination register 13737 * @param imm immediate 13738 */ 13739 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13740 public final void emitSUB_Reg_Imm_Quad(GPR dstReg, int imm) { 13741 int miStart = mi; 13742 // no group 1 to 4 prefix byte 13743 generateREXprefix(true, null, null, dstReg); 13744 // single byte opcode 13745 if (fits(imm,8)) { 13746 setMachineCodes(mi++, (byte) 0x83); 13747 // "register 0x5" is really part of the opcode 13748 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 13749 emitImm8((byte)imm); 13750 } else if (dstReg == EAX) { 13751 setMachineCodes(mi++, (byte) 0x2D); 13752 emitImm32(imm); 13753 } else { 13754 setMachineCodes(mi++, (byte) 0x81); 13755 // "register 0x5" is really part of the opcode 13756 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 13757 emitImm32(imm); 13758 } 13759 if (lister != null) lister.RI(miStart, "SUB", dstReg, imm); 13760 } 13761 13762 /** 13763 * Generate a register-displacement--immediate SUB. That is, 13764 * <PRE> 13765 * [dstBase + dstDisp] -= (quad) imm 13766 * </PRE> 13767 * 13768 * @param dstBase the destination register 13769 * @param dstDisp the destination displacement 13770 * @param imm immediate 13771 */ 13772 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13773 public final void emitSUB_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 13774 int miStart = mi; 13775 // no group 1 to 4 prefix byte 13776 generateREXprefix(true, null, null, dstBase); 13777 // single byte opcode 13778 if (fits(imm,8)) { 13779 setMachineCodes(mi++, (byte) 0x83); 13780 // "register 0x5" is really part of the opcode 13781 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 13782 emitImm8((byte)imm); 13783 } else { 13784 setMachineCodes(mi++, (byte) 0x81); 13785 // "register 0x5" is really part of the opcode 13786 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 13787 emitImm32(imm); 13788 } 13789 if (lister != null) lister.RDI(miStart, "SUB", dstBase, dstDisp, imm); 13790 } 13791 13792 /** 13793 * Generate a register-offset--immediate SUB. That is, 13794 * <PRE> 13795 * [dstIndex<<dstScale + dstDisp] -= (quad) imm 13796 * </PRE> 13797 * 13798 * @param dstIndex the destination index register 13799 * @param dstScale the destination shift amount 13800 * @param dstDisp the destination displacement 13801 * @param imm immediate 13802 */ 13803 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13804 public final void emitSUB_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 13805 int miStart = mi; 13806 // no group 1 to 4 prefix byte 13807 generateREXprefix(true, null, dstIndex, null); 13808 // single byte opcode 13809 if (fits(imm,8)) { 13810 setMachineCodes(mi++, (byte) 0x83); 13811 // "register 0x5" is really part of the opcode 13812 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13813 emitImm8((byte)imm); 13814 } else { 13815 setMachineCodes(mi++, (byte) 0x81); 13816 // "register 0x5" is really part of the opcode 13817 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13818 emitImm32(imm); 13819 } 13820 if (lister != null) lister.RFDI(miStart, "SUB", dstIndex, dstScale, dstDisp, imm); 13821 } 13822 13823 /** 13824 * Generate a absolute--immediate SUB. That is, 13825 * <PRE> 13826 * [dstDisp] -= (quad) imm 13827 * </PRE> 13828 * 13829 * @param dstDisp the destination displacement 13830 * @param imm immediate 13831 */ 13832 public final void emitSUB_Abs_Imm_Quad(Address dstDisp, int imm) { 13833 int miStart = mi; 13834 // no group 1 to 4 prefix byte 13835 generateREXprefix(true, null, null, null); 13836 // single byte opcode 13837 if (fits(imm,8)) { 13838 setMachineCodes(mi++, (byte) 0x83); 13839 // "register 0x5" is really part of the opcode 13840 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 13841 emitImm8((byte)imm); 13842 } else { 13843 setMachineCodes(mi++, (byte) 0x81); 13844 // "register 0x5" is really part of the opcode 13845 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 13846 emitImm32(imm); 13847 } 13848 if (lister != null) lister.RAI(miStart, "SUB", dstDisp, imm); 13849 } 13850 13851 /** 13852 * Generate a register-index--immediate SUB. That is, 13853 * <PRE> 13854 * [dstBase + dstIndex<<dstScale + dstDisp] -= (quad) imm 13855 * </PRE> 13856 * 13857 * @param dstBase the destination base register 13858 * @param dstIndex the destination index register 13859 * @param dstScale the destination shift amount 13860 * @param dstDisp the destination displacement 13861 * @param imm immediate 13862 */ 13863 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13864 public final void emitSUB_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 13865 int miStart = mi; 13866 // no group 1 to 4 prefix byte 13867 generateREXprefix(true, null, dstIndex, dstBase); 13868 // single byte opcode 13869 if (fits(imm,8)) { 13870 setMachineCodes(mi++, (byte) 0x83); 13871 // "register 0x5" is really part of the opcode 13872 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13873 emitImm8((byte)imm); 13874 } else { 13875 setMachineCodes(mi++, (byte) 0x81); 13876 // "register 0x5" is really part of the opcode 13877 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13878 emitImm32(imm); 13879 } 13880 if (lister != null) lister.RXDI(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, imm); 13881 } 13882 13883 /** 13884 * Generate a register(indirect)--immediate SUB. That is, 13885 * <PRE> 13886 * [dstBase] -= (quad) imm 13887 * </PRE> 13888 * 13889 * @param dstBase the destination base register 13890 * @param imm immediate 13891 */ 13892 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13893 public final void emitSUB_RegInd_Imm_Quad(GPR dstBase, int imm) { 13894 int miStart = mi; 13895 // no group 1 to 4 prefix byte 13896 generateREXprefix(true, null, null, dstBase); 13897 // single byte opcode 13898 if (fits(imm,8)) { 13899 setMachineCodes(mi++, (byte) 0x83); 13900 // "register 0x5" is really part of the opcode 13901 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 13902 emitImm8((byte)imm); 13903 } else { 13904 setMachineCodes(mi++, (byte) 0x81); 13905 // "register 0x5" is really part of the opcode 13906 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 13907 emitImm32(imm); 13908 } 13909 if (lister != null) lister.RNI(miStart, "SUB", dstBase, imm); 13910 } 13911 13912 /** 13913 * Generate a register--immediate SUB. That is, 13914 * <PRE> 13915 * dstReg -= (byte) imm 13916 * </PRE> 13917 * 13918 * @param dstReg the destination register 13919 * @param imm immediate 13920 */ 13921 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13922 public final void emitSUB_Reg_Imm_Byte(GPR dstReg, int imm) { 13923 int miStart = mi; 13924 if (dstReg == EAX) { 13925 setMachineCodes(mi++, (byte) 0x2C); 13926 emitImm8(imm); 13927 } else { 13928 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 13929 generateREXprefix(false, null, null, dstReg); 13930 setMachineCodes(mi++, (byte) 0x80); 13931 // "register 0x5" is really part of the opcode 13932 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 13933 emitImm8(imm); 13934 } 13935 if (lister != null) lister.RI(miStart, "SUB", dstReg, imm); 13936 } 13937 13938 /** 13939 * Generate a register-displacement--immediate SUB. That is, 13940 * <PRE> 13941 * [dstBase + dstDisp] -= (byte) imm 13942 * </PRE> 13943 * 13944 * @param dstBase the destination register 13945 * @param dstDisp the destination displacement 13946 * @param imm immediate 13947 */ 13948 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13949 public final void emitSUB_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 13950 int miStart = mi; 13951 generateREXprefix(false, null, null, dstBase); 13952 setMachineCodes(mi++, (byte) 0x80); 13953 // "register 0x5" is really part of the opcode 13954 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 13955 emitImm8(imm); 13956 if (lister != null) lister.RDI(miStart, "SUB", dstBase, dstDisp, imm); 13957 } 13958 13959 /** 13960 * Generate a register-index--immediate SUB. That is, 13961 * <PRE> 13962 * [dstBase + dstIndex<<scale + dstDisp] -= (byte) imm 13963 * </PRE> 13964 * 13965 * @param dstBase the destination base register 13966 * @param dstIndex the destination index register 13967 * @param dstScale the destination shift amount 13968 * @param dstDisp the destination displacement 13969 * @param imm immediate 13970 */ 13971 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 13972 public final void emitSUB_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 13973 int miStart = mi; 13974 generateREXprefix(false, null, dstIndex, dstBase); 13975 setMachineCodes(mi++, (byte) 0x80); 13976 // "register 0x5" is really part of the opcode 13977 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 13978 emitImm8(imm); 13979 if (lister != null) lister.RXDI(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, imm); 13980 } 13981 13982 /** 13983 * Generate a register-offset--immediate SUB. That is, 13984 * <PRE> 13985 * [dstIndex<<dstScale + dstDisp] -= (byte) imm 13986 * </PRE> 13987 * 13988 * @param dstIndex the destination index register 13989 * @param dstScale the destination shift amount 13990 * @param dstDisp the destination displacement 13991 * @param imm immediate 13992 */ 13993 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 13994 public final void emitSUB_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 13995 int miStart = mi; 13996 generateREXprefix(false, null, dstIndex, null); 13997 setMachineCodes(mi++, (byte) 0x80); 13998 // "register 0x5" is really part of the opcode 13999 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 14000 emitImm8(imm); 14001 if (lister != null) lister.RFDI(miStart, "SUB", dstIndex, dstScale, dstDisp, imm); 14002 } 14003 14004 /** 14005 * Generate a absolute--immediate SUB. That is, 14006 * <PRE> 14007 * [dstDisp] -= (byte) imm 14008 * </PRE> 14009 * 14010 * @param dstDisp the destination displacement 14011 * @param imm immediate 14012 */ 14013 public final void emitSUB_Abs_Imm_Byte(Address dstDisp, int imm) { 14014 int miStart = mi; 14015 generateREXprefix(false, null, null, null); 14016 setMachineCodes(mi++, (byte) 0x80); 14017 // "register 0x5" is really part of the opcode 14018 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 14019 emitImm8(imm); 14020 if (lister != null) lister.RAI(miStart, "SUB", dstDisp, imm); 14021 } 14022 14023 /** 14024 * Generate a register(indirect)--immediate SUB. That is, 14025 * <PRE> 14026 * [dstBase] -= (byte) imm 14027 * </PRE> 14028 * 14029 * @param dstBase the destination base register 14030 * @param imm immediate 14031 */ 14032 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14033 public final void emitSUB_RegInd_Imm_Byte(GPR dstBase, int imm) { 14034 int miStart = mi; 14035 generateREXprefix(false, null, null, dstBase); 14036 setMachineCodes(mi++, (byte) 0x80); 14037 // "register 0x5" is really part of the opcode 14038 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 14039 emitImm8(imm); 14040 if (lister != null) lister.RNI(miStart, "SUB", dstBase, imm); 14041 } 14042 14043 /** 14044 * Generate a register(indirect)--register TEST. That is, 14045 * <PRE> 14046 * [dstBase] &= srcReg 14047 * </PRE> 14048 * 14049 * @param dstBase the destination base 14050 * @param srcReg the source register 14051 */ 14052 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14053 public final void emitTEST_RegInd_Reg(GPR dstBase, GPR srcReg) { 14054 int miStart = mi; 14055 // no group 1 to 4 prefix byte 14056 generateREXprefix(false, srcReg, null, dstBase); 14057 // single byte opcode 14058 setMachineCodes(mi++, (byte) 0x85); 14059 emitRegIndirectRegOperands(dstBase, srcReg); 14060 if (lister != null) lister.RNR(miStart, "TEST", dstBase, srcReg); 14061 } 14062 14063 /** 14064 * Generate a register-offset--register TEST. That is, 14065 * <PRE> 14066 * [dstReg<<dstScale + dstDisp] &= srcReg 14067 * </PRE> 14068 * 14069 * @param dstIndex the destination index register 14070 * @param dstScale the destination shift amount 14071 * @param dstDisp the destination displacement 14072 * @param srcReg the source register 14073 */ 14074 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 14075 public final void emitTEST_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 14076 int miStart = mi; 14077 // no group 1 to 4 prefix byte 14078 generateREXprefix(false, srcReg, dstIndex, null); 14079 // single byte opcode 14080 setMachineCodes(mi++, (byte) 0x85); 14081 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 14082 if (lister != null) lister.RFDR(miStart, "TEST", dstIndex, dstScale, dstDisp, srcReg); 14083 } 14084 14085 /** 14086 * Generate a absolute--register TEST. That is, 14087 * <PRE> 14088 * [dstDisp] &= srcReg 14089 * </PRE> 14090 * 14091 * @param dstDisp the destination address 14092 * @param srcReg the source register 14093 */ 14094 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 14095 public final void emitTEST_Abs_Reg(Address dstDisp, GPR srcReg) { 14096 int miStart = mi; 14097 // no group 1 to 4 prefix byte 14098 generateREXprefix(false, srcReg, null, null); 14099 // single byte opcode 14100 setMachineCodes(mi++, (byte) 0x85); 14101 emitAbsRegOperands(dstDisp, srcReg); 14102 if (lister != null) lister.RAR(miStart, "TEST", dstDisp, srcReg); 14103 } 14104 14105 /** 14106 * Generate a register-index--register TEST. That is, 14107 * <PRE> 14108 * [dstBase + dstIndex<<dstScale + dstDisp] &= srcReg 14109 * </PRE> 14110 * 14111 * @param dstBase the base register 14112 * @param dstIndex the destination index register 14113 * @param dstScale the destination shift amount 14114 * @param dstDisp the destination displacement 14115 * @param srcReg the source register 14116 */ 14117 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 14118 public final void emitTEST_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 14119 int miStart = mi; 14120 // no group 1 to 4 prefix byte 14121 generateREXprefix(false, srcReg, dstIndex, dstBase); 14122 // single byte opcode 14123 setMachineCodes(mi++, (byte) 0x85); 14124 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 14125 if (lister != null) lister.RXDR(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, srcReg); 14126 } 14127 14128 /** 14129 * Generate a register-displacement--register TEST. That is, 14130 * <PRE> 14131 * [dstBase + dstDisp] &= srcReg 14132 * </PRE> 14133 * 14134 * @param dstBase the base register 14135 * @param dstDisp the destination displacement 14136 * @param srcReg the source register 14137 */ 14138 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 14139 public final void emitTEST_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 14140 int miStart = mi; 14141 // no group 1 to 4 prefix byte 14142 generateREXprefix(false, srcReg, null, dstBase); 14143 // single byte opcode 14144 setMachineCodes(mi++, (byte) 0x85); 14145 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 14146 if (lister != null) lister.RDR(miStart, "TEST", dstBase, dstDisp, srcReg); 14147 } 14148 14149 /** 14150 * Generate a register--register TEST. That is, 14151 * <PRE> 14152 * dstReg &= srcReg 14153 * </PRE> 14154 * 14155 * @param dstReg the destination register 14156 * @param srcReg the source register 14157 */ 14158 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14159 public final void emitTEST_Reg_Reg(GPR dstReg, GPR srcReg) { 14160 int miStart = mi; 14161 // no group 1 to 4 prefix byte 14162 generateREXprefix(false, srcReg, null, dstReg); 14163 // single byte opcode 14164 setMachineCodes(mi++, (byte) 0x85); 14165 emitRegRegOperands(dstReg, srcReg); 14166 if (lister != null) lister.RR(miStart, "TEST", dstReg, srcReg); 14167 } 14168 14169 /** 14170 * Generate a register(indirect)--register TEST. That is, 14171 * <PRE> 14172 * [dstBase] &= (word) srcReg 14173 * </PRE> 14174 * 14175 * @param dstBase the destination base 14176 * @param srcReg the source register 14177 */ 14178 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14179 public final void emitTEST_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 14180 int miStart = mi; 14181 setMachineCodes(mi++, (byte) 0x66); 14182 generateREXprefix(false, srcReg, null, dstBase); 14183 // single byte opcode 14184 setMachineCodes(mi++, (byte) 0x85); 14185 emitRegIndirectRegOperands(dstBase, srcReg); 14186 if (lister != null) lister.RNR(miStart, "TEST", dstBase, srcReg); 14187 } 14188 14189 /** 14190 * Generate a register-offset--register TEST. That is, 14191 * <PRE> 14192 * [dstReg<<dstScale + dstDisp] &= (word) srcReg 14193 * </PRE> 14194 * 14195 * @param dstIndex the destination index register 14196 * @param dstScale the destination shift amount 14197 * @param dstDisp the destination displacement 14198 * @param srcReg the source register 14199 */ 14200 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 14201 public final void emitTEST_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 14202 int miStart = mi; 14203 setMachineCodes(mi++, (byte) 0x66); 14204 generateREXprefix(false, srcReg, dstIndex, null); 14205 // single byte opcode 14206 setMachineCodes(mi++, (byte) 0x85); 14207 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 14208 if (lister != null) lister.RFDR(miStart, "TEST", dstIndex, dstScale, dstDisp, srcReg); 14209 } 14210 14211 /** 14212 * Generate a absolute--register TEST. That is, 14213 * <PRE> 14214 * [dstDisp] &= (word) srcReg 14215 * </PRE> 14216 * 14217 * @param dstDisp the destination address 14218 * @param srcReg the source register 14219 */ 14220 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 14221 public final void emitTEST_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 14222 int miStart = mi; 14223 setMachineCodes(mi++, (byte) 0x66); 14224 generateREXprefix(false, srcReg, null, null); 14225 // single byte opcode 14226 setMachineCodes(mi++, (byte) 0x85); 14227 emitAbsRegOperands(dstDisp, srcReg); 14228 if (lister != null) lister.RAR(miStart, "TEST", dstDisp, srcReg); 14229 } 14230 14231 /** 14232 * Generate a register-index--register TEST. That is, 14233 * <PRE> 14234 * [dstBase + dstIndex<<dstScale + dstDisp] &= (word) srcReg 14235 * </PRE> 14236 * 14237 * @param dstBase the base register 14238 * @param dstIndex the destination index register 14239 * @param dstScale the destination shift amount 14240 * @param dstDisp the destination displacement 14241 * @param srcReg the source register 14242 */ 14243 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 14244 public final void emitTEST_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 14245 int miStart = mi; 14246 setMachineCodes(mi++, (byte) 0x66); 14247 generateREXprefix(false, srcReg, dstIndex, dstBase); 14248 // single byte opcode 14249 setMachineCodes(mi++, (byte) 0x85); 14250 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 14251 if (lister != null) lister.RXDR(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, srcReg); 14252 } 14253 14254 /** 14255 * Generate a register-displacement--register TEST. That is, 14256 * <PRE> 14257 * [dstBase + dstDisp] &= (word) srcReg 14258 * </PRE> 14259 * 14260 * @param dstBase the base register 14261 * @param dstDisp the destination displacement 14262 * @param srcReg the source register 14263 */ 14264 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 14265 public final void emitTEST_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 14266 int miStart = mi; 14267 setMachineCodes(mi++, (byte) 0x66); 14268 generateREXprefix(false, srcReg, null, dstBase); 14269 // single byte opcode 14270 setMachineCodes(mi++, (byte) 0x85); 14271 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 14272 if (lister != null) lister.RDR(miStart, "TEST", dstBase, dstDisp, srcReg); 14273 } 14274 14275 /** 14276 * Generate a register--register TEST. That is, 14277 * <PRE> 14278 * dstReg &= (word) srcReg 14279 * </PRE> 14280 * 14281 * @param dstReg the destination register 14282 * @param srcReg the source register 14283 */ 14284 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14285 public final void emitTEST_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 14286 int miStart = mi; 14287 setMachineCodes(mi++, (byte) 0x66); 14288 generateREXprefix(false, srcReg, null, dstReg); 14289 // single byte opcode 14290 setMachineCodes(mi++, (byte) 0x85); 14291 emitRegRegOperands(dstReg, srcReg); 14292 if (lister != null) lister.RR(miStart, "TEST", dstReg, srcReg); 14293 } 14294 14295 /** 14296 * Generate a register(indirect)--register TEST. That is, 14297 * <PRE> 14298 * [dstBase] &= (quad) srcReg 14299 * </PRE> 14300 * 14301 * @param dstBase the destination base 14302 * @param srcReg the source register 14303 */ 14304 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14305 public final void emitTEST_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 14306 int miStart = mi; 14307 // no group 1 to 4 prefix byte 14308 generateREXprefix(true, srcReg, null, dstBase); 14309 // single byte opcode 14310 setMachineCodes(mi++, (byte) 0x85); 14311 emitRegIndirectRegOperands(dstBase, srcReg); 14312 if (lister != null) lister.RNR(miStart, "TEST", dstBase, srcReg); 14313 } 14314 14315 /** 14316 * Generate a register-offset--register TEST. That is, 14317 * <PRE> 14318 * [dstReg<<dstScale + dstDisp] &= (quad) srcReg 14319 * </PRE> 14320 * 14321 * @param dstIndex the destination index register 14322 * @param dstScale the destination shift amount 14323 * @param dstDisp the destination displacement 14324 * @param srcReg the source register 14325 */ 14326 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 14327 public final void emitTEST_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 14328 int miStart = mi; 14329 // no group 1 to 4 prefix byte 14330 generateREXprefix(true, srcReg, dstIndex, null); 14331 // single byte opcode 14332 setMachineCodes(mi++, (byte) 0x85); 14333 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 14334 if (lister != null) lister.RFDR(miStart, "TEST", dstIndex, dstScale, dstDisp, srcReg); 14335 } 14336 14337 /** 14338 * Generate a absolute--register TEST. That is, 14339 * <PRE> 14340 * [dstDisp] &= (quad) srcReg 14341 * </PRE> 14342 * 14343 * @param dstDisp the destination address 14344 * @param srcReg the source register 14345 */ 14346 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 14347 public final void emitTEST_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 14348 int miStart = mi; 14349 // no group 1 to 4 prefix byte 14350 generateREXprefix(true, srcReg, null, null); 14351 // single byte opcode 14352 setMachineCodes(mi++, (byte) 0x85); 14353 emitAbsRegOperands(dstDisp, srcReg); 14354 if (lister != null) lister.RAR(miStart, "TEST", dstDisp, srcReg); 14355 } 14356 14357 /** 14358 * Generate a register-index--register TEST. That is, 14359 * <PRE> 14360 * [dstBase + dstIndex<<dstScale + dstDisp] &= (quad) srcReg 14361 * </PRE> 14362 * 14363 * @param dstBase the base register 14364 * @param dstIndex the destination index register 14365 * @param dstScale the destination shift amount 14366 * @param dstDisp the destination displacement 14367 * @param srcReg the source register 14368 */ 14369 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 14370 public final void emitTEST_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 14371 int miStart = mi; 14372 // no group 1 to 4 prefix byte 14373 generateREXprefix(true, srcReg, dstIndex, dstBase); 14374 // single byte opcode 14375 setMachineCodes(mi++, (byte) 0x85); 14376 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 14377 if (lister != null) lister.RXDR(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, srcReg); 14378 } 14379 14380 /** 14381 * Generate a register-displacement--register TEST. That is, 14382 * <PRE> 14383 * [dstBase + dstDisp] &= (quad) srcReg 14384 * </PRE> 14385 * 14386 * @param dstBase the base register 14387 * @param dstDisp the destination displacement 14388 * @param srcReg the source register 14389 */ 14390 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 14391 public final void emitTEST_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 14392 int miStart = mi; 14393 // no group 1 to 4 prefix byte 14394 generateREXprefix(true, srcReg, null, dstBase); 14395 // single byte opcode 14396 setMachineCodes(mi++, (byte) 0x85); 14397 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 14398 if (lister != null) lister.RDR(miStart, "TEST", dstBase, dstDisp, srcReg); 14399 } 14400 14401 /** 14402 * Generate a register--register TEST. That is, 14403 * <PRE> 14404 * dstReg &= (quad) srcReg 14405 * </PRE> 14406 * 14407 * @param dstReg the destination register 14408 * @param srcReg the source register 14409 */ 14410 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14411 public final void emitTEST_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 14412 int miStart = mi; 14413 // no group 1 to 4 prefix byte 14414 generateREXprefix(true, srcReg, null, dstReg); 14415 // single byte opcode 14416 setMachineCodes(mi++, (byte) 0x85); 14417 emitRegRegOperands(dstReg, srcReg); 14418 if (lister != null) lister.RR(miStart, "TEST", dstReg, srcReg); 14419 } 14420 14421 /** 14422 * Generate a register(indirect)--register TEST. That is, 14423 * <PRE> 14424 * [dstBase] &= (byte) srcReg 14425 * </PRE> 14426 * 14427 * @param dstBase the destination base 14428 * @param srcReg the source register 14429 */ 14430 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14431 public final void emitTEST_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 14432 int miStart = mi; 14433 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 14434 // no group 1 to 4 prefix byte 14435 generateREXprefix(false, srcReg, null, dstBase); 14436 // single byte opcode 14437 setMachineCodes(mi++, (byte) 0x84); 14438 emitRegIndirectRegOperands(dstBase, srcReg); 14439 if (lister != null) lister.RNR(miStart, "TEST", dstBase, srcReg); 14440 } 14441 14442 /** 14443 * Generate a register-offset--register TEST. That is, 14444 * <PRE> 14445 * [dstReg<<dstScale + dstDisp] &= (byte) srcReg 14446 * </PRE> 14447 * 14448 * @param dstIndex the destination index register 14449 * @param dstScale the destination shift amount 14450 * @param dstDisp the destination displacement 14451 * @param srcReg the source register 14452 */ 14453 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 14454 public final void emitTEST_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 14455 int miStart = mi; 14456 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 14457 // no group 1 to 4 prefix byte 14458 generateREXprefix(false, srcReg, dstIndex, null); 14459 // single byte opcode 14460 setMachineCodes(mi++, (byte) 0x84); 14461 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 14462 if (lister != null) lister.RFDR(miStart, "TEST", dstIndex, dstScale, dstDisp, srcReg); 14463 } 14464 14465 /** 14466 * Generate a absolute--register TEST. That is, 14467 * <PRE> 14468 * [dstDisp] &= (byte) srcReg 14469 * </PRE> 14470 * 14471 * @param dstDisp the destination address 14472 * @param srcReg the source register 14473 */ 14474 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 14475 public final void emitTEST_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 14476 int miStart = mi; 14477 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 14478 // no group 1 to 4 prefix byte 14479 generateREXprefix(false, srcReg, null, null); 14480 // single byte opcode 14481 setMachineCodes(mi++, (byte) 0x84); 14482 emitAbsRegOperands(dstDisp, srcReg); 14483 if (lister != null) lister.RAR(miStart, "TEST", dstDisp, srcReg); 14484 } 14485 14486 /** 14487 * Generate a register-index--register TEST. That is, 14488 * <PRE> 14489 * [dstBase + dstIndex<<dstScale + dstDisp] &= (byte) srcReg 14490 * </PRE> 14491 * 14492 * @param dstBase the base register 14493 * @param dstIndex the destination index register 14494 * @param dstScale the destination shift amount 14495 * @param dstDisp the destination displacement 14496 * @param srcReg the source register 14497 */ 14498 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 14499 public final void emitTEST_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 14500 int miStart = mi; 14501 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 14502 // no group 1 to 4 prefix byte 14503 generateREXprefix(false, srcReg, dstIndex, dstBase); 14504 // single byte opcode 14505 setMachineCodes(mi++, (byte) 0x84); 14506 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 14507 if (lister != null) lister.RXDR(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, srcReg); 14508 } 14509 14510 /** 14511 * Generate a register-displacement--register TEST. That is, 14512 * <PRE> 14513 * [dstBase + dstDisp] &= (byte) srcReg 14514 * </PRE> 14515 * 14516 * @param dstBase the base register 14517 * @param dstDisp the destination displacement 14518 * @param srcReg the source register 14519 */ 14520 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 14521 public final void emitTEST_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 14522 int miStart = mi; 14523 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 14524 // no group 1 to 4 prefix byte 14525 generateREXprefix(false, srcReg, null, dstBase); 14526 // single byte opcode 14527 setMachineCodes(mi++, (byte) 0x84); 14528 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 14529 if (lister != null) lister.RDR(miStart, "TEST", dstBase, dstDisp, srcReg); 14530 } 14531 14532 /** 14533 * Generate a register--register TEST. That is, 14534 * <PRE> 14535 * dstReg &= (byte) srcReg 14536 * </PRE> 14537 * 14538 * @param dstReg the destination register 14539 * @param srcReg the source register 14540 */ 14541 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14542 public final void emitTEST_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 14543 int miStart = mi; 14544 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 14545 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 14546 // no group 1 to 4 prefix byte 14547 generateREXprefix(false, srcReg, null, dstReg); 14548 // single byte opcode 14549 setMachineCodes(mi++, (byte) 0x84); 14550 emitRegRegOperands(dstReg, srcReg); 14551 if (lister != null) lister.RR(miStart, "TEST", dstReg, srcReg); 14552 } 14553 14554 /** 14555 * Generate a register--immediate TEST. That is, 14556 * <PRE> 14557 * dstReg &= imm 14558 * </PRE> 14559 * 14560 * @param dstReg the destination register 14561 * @param imm immediate 14562 */ 14563 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14564 public final void emitTEST_Reg_Imm(GPR dstReg, int imm) { 14565 int miStart = mi; 14566 // no group 1 to 4 prefix byte 14567 generateREXprefix(false, null, null, dstReg); 14568 // single byte opcode 14569 if (false) { 14570 } else if (dstReg == EAX) { 14571 setMachineCodes(mi++, (byte) 0xA9); 14572 emitImm32(imm); 14573 } else { 14574 setMachineCodes(mi++, (byte) 0xF7); 14575 // "register 0x0" is really part of the opcode 14576 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 14577 emitImm32(imm); 14578 } 14579 if (lister != null) lister.RI(miStart, "TEST", dstReg, imm); 14580 } 14581 14582 /** 14583 * Generate a register-displacement--immediate TEST. That is, 14584 * <PRE> 14585 * [dstBase + dstDisp] &= imm 14586 * </PRE> 14587 * 14588 * @param dstBase the destination register 14589 * @param dstDisp the destination displacement 14590 * @param imm immediate 14591 */ 14592 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14593 public final void emitTEST_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 14594 int miStart = mi; 14595 // no group 1 to 4 prefix byte 14596 generateREXprefix(false, null, null, dstBase); 14597 // single byte opcode 14598 if (false) { 14599 } else { 14600 setMachineCodes(mi++, (byte) 0xF7); 14601 // "register 0x0" is really part of the opcode 14602 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 14603 emitImm32(imm); 14604 } 14605 if (lister != null) lister.RDI(miStart, "TEST", dstBase, dstDisp, imm); 14606 } 14607 14608 /** 14609 * Generate a register-offset--immediate TEST. That is, 14610 * <PRE> 14611 * [dstIndex<<dstScale + dstDisp] &= imm 14612 * </PRE> 14613 * 14614 * @param dstIndex the destination index register 14615 * @param dstScale the destination shift amount 14616 * @param dstDisp the destination displacement 14617 * @param imm immediate 14618 */ 14619 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14620 public final void emitTEST_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 14621 int miStart = mi; 14622 // no group 1 to 4 prefix byte 14623 generateREXprefix(false, null, dstIndex, null); 14624 // single byte opcode 14625 if (false) { 14626 } else { 14627 setMachineCodes(mi++, (byte) 0xF7); 14628 // "register 0x0" is really part of the opcode 14629 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 14630 emitImm32(imm); 14631 } 14632 if (lister != null) lister.RFDI(miStart, "TEST", dstIndex, dstScale, dstDisp, imm); 14633 } 14634 14635 /** 14636 * Generate a absolute--immediate TEST. That is, 14637 * <PRE> 14638 * [dstDisp] &= imm 14639 * </PRE> 14640 * 14641 * @param dstDisp the destination displacement 14642 * @param imm immediate 14643 */ 14644 public final void emitTEST_Abs_Imm(Address dstDisp, int imm) { 14645 int miStart = mi; 14646 // no group 1 to 4 prefix byte 14647 generateREXprefix(false, null, null, null); 14648 // single byte opcode 14649 if (false) { 14650 } else { 14651 setMachineCodes(mi++, (byte) 0xF7); 14652 // "register 0x0" is really part of the opcode 14653 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 14654 emitImm32(imm); 14655 } 14656 if (lister != null) lister.RAI(miStart, "TEST", dstDisp, imm); 14657 } 14658 14659 /** 14660 * Generate a register-index--immediate TEST. That is, 14661 * <PRE> 14662 * [dstBase + dstIndex<<dstScale + dstDisp] &= imm 14663 * </PRE> 14664 * 14665 * @param dstBase the destination base register 14666 * @param dstIndex the destination index register 14667 * @param dstScale the destination shift amount 14668 * @param dstDisp the destination displacement 14669 * @param imm immediate 14670 */ 14671 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14672 public final void emitTEST_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 14673 int miStart = mi; 14674 // no group 1 to 4 prefix byte 14675 generateREXprefix(false, null, dstIndex, dstBase); 14676 // single byte opcode 14677 if (false) { 14678 } else { 14679 setMachineCodes(mi++, (byte) 0xF7); 14680 // "register 0x0" is really part of the opcode 14681 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 14682 emitImm32(imm); 14683 } 14684 if (lister != null) lister.RXDI(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, imm); 14685 } 14686 14687 /** 14688 * Generate a register(indirect)--immediate TEST. That is, 14689 * <PRE> 14690 * [dstBase] &= imm 14691 * </PRE> 14692 * 14693 * @param dstBase the destination base register 14694 * @param imm immediate 14695 */ 14696 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14697 public final void emitTEST_RegInd_Imm(GPR dstBase, int imm) { 14698 int miStart = mi; 14699 // no group 1 to 4 prefix byte 14700 generateREXprefix(false, null, null, dstBase); 14701 // single byte opcode 14702 if (false) { 14703 } else { 14704 setMachineCodes(mi++, (byte) 0xF7); 14705 // "register 0x0" is really part of the opcode 14706 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 14707 emitImm32(imm); 14708 } 14709 if (lister != null) lister.RNI(miStart, "TEST", dstBase, imm); 14710 } 14711 14712 /** 14713 * Generate a register--immediate TEST. That is, 14714 * <PRE> 14715 * dstReg &= (word) imm 14716 * </PRE> 14717 * 14718 * @param dstReg the destination register 14719 * @param imm immediate 14720 */ 14721 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14722 public final void emitTEST_Reg_Imm_Word(GPR dstReg, int imm) { 14723 int miStart = mi; 14724 setMachineCodes(mi++, (byte) 0x66); 14725 generateREXprefix(false, null, null, dstReg); 14726 // single byte opcode 14727 if (false) { 14728 } else if (dstReg == EAX) { 14729 setMachineCodes(mi++, (byte) 0xA9); 14730 emitImm16(imm); 14731 } else { 14732 setMachineCodes(mi++, (byte) 0xF7); 14733 // "register 0x0" is really part of the opcode 14734 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 14735 emitImm16(imm); 14736 } 14737 if (lister != null) lister.RI(miStart, "TEST", dstReg, imm); 14738 } 14739 14740 /** 14741 * Generate a register-displacement--immediate TEST. That is, 14742 * <PRE> 14743 * [dstBase + dstDisp] &= (word) imm 14744 * </PRE> 14745 * 14746 * @param dstBase the destination register 14747 * @param dstDisp the destination displacement 14748 * @param imm immediate 14749 */ 14750 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14751 public final void emitTEST_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 14752 int miStart = mi; 14753 setMachineCodes(mi++, (byte) 0x66); 14754 generateREXprefix(false, null, null, dstBase); 14755 // single byte opcode 14756 if (false) { 14757 } else { 14758 setMachineCodes(mi++, (byte) 0xF7); 14759 // "register 0x0" is really part of the opcode 14760 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 14761 emitImm16(imm); 14762 } 14763 if (lister != null) lister.RDI(miStart, "TEST", dstBase, dstDisp, imm); 14764 } 14765 14766 /** 14767 * Generate a register-offset--immediate TEST. That is, 14768 * <PRE> 14769 * [dstIndex<<dstScale + dstDisp] &= (word) imm 14770 * </PRE> 14771 * 14772 * @param dstIndex the destination index register 14773 * @param dstScale the destination shift amount 14774 * @param dstDisp the destination displacement 14775 * @param imm immediate 14776 */ 14777 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14778 public final void emitTEST_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 14779 int miStart = mi; 14780 setMachineCodes(mi++, (byte) 0x66); 14781 generateREXprefix(false, null, dstIndex, null); 14782 // single byte opcode 14783 if (false) { 14784 } else { 14785 setMachineCodes(mi++, (byte) 0xF7); 14786 // "register 0x0" is really part of the opcode 14787 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 14788 emitImm16(imm); 14789 } 14790 if (lister != null) lister.RFDI(miStart, "TEST", dstIndex, dstScale, dstDisp, imm); 14791 } 14792 14793 /** 14794 * Generate a absolute--immediate TEST. That is, 14795 * <PRE> 14796 * [dstDisp] &= (word) imm 14797 * </PRE> 14798 * 14799 * @param dstDisp the destination displacement 14800 * @param imm immediate 14801 */ 14802 public final void emitTEST_Abs_Imm_Word(Address dstDisp, int imm) { 14803 int miStart = mi; 14804 setMachineCodes(mi++, (byte) 0x66); 14805 generateREXprefix(false, null, null, null); 14806 // single byte opcode 14807 if (false) { 14808 } else { 14809 setMachineCodes(mi++, (byte) 0xF7); 14810 // "register 0x0" is really part of the opcode 14811 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 14812 emitImm16(imm); 14813 } 14814 if (lister != null) lister.RAI(miStart, "TEST", dstDisp, imm); 14815 } 14816 14817 /** 14818 * Generate a register-index--immediate TEST. That is, 14819 * <PRE> 14820 * [dstBase + dstIndex<<dstScale + dstDisp] &= (word) imm 14821 * </PRE> 14822 * 14823 * @param dstBase the destination base register 14824 * @param dstIndex the destination index register 14825 * @param dstScale the destination shift amount 14826 * @param dstDisp the destination displacement 14827 * @param imm immediate 14828 */ 14829 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14830 public final void emitTEST_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 14831 int miStart = mi; 14832 setMachineCodes(mi++, (byte) 0x66); 14833 generateREXprefix(false, null, dstIndex, dstBase); 14834 // single byte opcode 14835 if (false) { 14836 } else { 14837 setMachineCodes(mi++, (byte) 0xF7); 14838 // "register 0x0" is really part of the opcode 14839 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 14840 emitImm16(imm); 14841 } 14842 if (lister != null) lister.RXDI(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, imm); 14843 } 14844 14845 /** 14846 * Generate a register(indirect)--immediate TEST. That is, 14847 * <PRE> 14848 * [dstBase] &= (word) imm 14849 * </PRE> 14850 * 14851 * @param dstBase the destination base register 14852 * @param imm immediate 14853 */ 14854 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14855 public final void emitTEST_RegInd_Imm_Word(GPR dstBase, int imm) { 14856 int miStart = mi; 14857 setMachineCodes(mi++, (byte) 0x66); 14858 generateREXprefix(false, null, null, dstBase); 14859 // single byte opcode 14860 if (false) { 14861 } else { 14862 setMachineCodes(mi++, (byte) 0xF7); 14863 // "register 0x0" is really part of the opcode 14864 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 14865 emitImm16(imm); 14866 } 14867 if (lister != null) lister.RNI(miStart, "TEST", dstBase, imm); 14868 } 14869 14870 /** 14871 * Generate a register--immediate TEST. That is, 14872 * <PRE> 14873 * dstReg &= (quad) imm 14874 * </PRE> 14875 * 14876 * @param dstReg the destination register 14877 * @param imm immediate 14878 */ 14879 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14880 public final void emitTEST_Reg_Imm_Quad(GPR dstReg, int imm) { 14881 int miStart = mi; 14882 // no group 1 to 4 prefix byte 14883 generateREXprefix(true, null, null, dstReg); 14884 // single byte opcode 14885 if (false) { 14886 } else if (dstReg == EAX) { 14887 setMachineCodes(mi++, (byte) 0xA9); 14888 emitImm32(imm); 14889 } else { 14890 setMachineCodes(mi++, (byte) 0xF7); 14891 // "register 0x0" is really part of the opcode 14892 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 14893 emitImm32(imm); 14894 } 14895 if (lister != null) lister.RI(miStart, "TEST", dstReg, imm); 14896 } 14897 14898 /** 14899 * Generate a register-displacement--immediate TEST. That is, 14900 * <PRE> 14901 * [dstBase + dstDisp] &= (quad) imm 14902 * </PRE> 14903 * 14904 * @param dstBase the destination register 14905 * @param dstDisp the destination displacement 14906 * @param imm immediate 14907 */ 14908 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14909 public final void emitTEST_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 14910 int miStart = mi; 14911 // no group 1 to 4 prefix byte 14912 generateREXprefix(true, null, null, dstBase); 14913 // single byte opcode 14914 if (false) { 14915 } else { 14916 setMachineCodes(mi++, (byte) 0xF7); 14917 // "register 0x0" is really part of the opcode 14918 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 14919 emitImm32(imm); 14920 } 14921 if (lister != null) lister.RDI(miStart, "TEST", dstBase, dstDisp, imm); 14922 } 14923 14924 /** 14925 * Generate a register-offset--immediate TEST. That is, 14926 * <PRE> 14927 * [dstIndex<<dstScale + dstDisp] &= (quad) imm 14928 * </PRE> 14929 * 14930 * @param dstIndex the destination index register 14931 * @param dstScale the destination shift amount 14932 * @param dstDisp the destination displacement 14933 * @param imm immediate 14934 */ 14935 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 14936 public final void emitTEST_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 14937 int miStart = mi; 14938 // no group 1 to 4 prefix byte 14939 generateREXprefix(true, null, dstIndex, null); 14940 // single byte opcode 14941 if (false) { 14942 } else { 14943 setMachineCodes(mi++, (byte) 0xF7); 14944 // "register 0x0" is really part of the opcode 14945 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 14946 emitImm32(imm); 14947 } 14948 if (lister != null) lister.RFDI(miStart, "TEST", dstIndex, dstScale, dstDisp, imm); 14949 } 14950 14951 /** 14952 * Generate a absolute--immediate TEST. That is, 14953 * <PRE> 14954 * [dstDisp] &= (quad) imm 14955 * </PRE> 14956 * 14957 * @param dstDisp the destination displacement 14958 * @param imm immediate 14959 */ 14960 public final void emitTEST_Abs_Imm_Quad(Address dstDisp, int imm) { 14961 int miStart = mi; 14962 // no group 1 to 4 prefix byte 14963 generateREXprefix(true, null, null, null); 14964 // single byte opcode 14965 if (false) { 14966 } else { 14967 setMachineCodes(mi++, (byte) 0xF7); 14968 // "register 0x0" is really part of the opcode 14969 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 14970 emitImm32(imm); 14971 } 14972 if (lister != null) lister.RAI(miStart, "TEST", dstDisp, imm); 14973 } 14974 14975 /** 14976 * Generate a register-index--immediate TEST. That is, 14977 * <PRE> 14978 * [dstBase + dstIndex<<dstScale + dstDisp] &= (quad) imm 14979 * </PRE> 14980 * 14981 * @param dstBase the destination base register 14982 * @param dstIndex the destination index register 14983 * @param dstScale the destination shift amount 14984 * @param dstDisp the destination displacement 14985 * @param imm immediate 14986 */ 14987 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 14988 public final void emitTEST_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 14989 int miStart = mi; 14990 // no group 1 to 4 prefix byte 14991 generateREXprefix(true, null, dstIndex, dstBase); 14992 // single byte opcode 14993 if (false) { 14994 } else { 14995 setMachineCodes(mi++, (byte) 0xF7); 14996 // "register 0x0" is really part of the opcode 14997 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 14998 emitImm32(imm); 14999 } 15000 if (lister != null) lister.RXDI(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, imm); 15001 } 15002 15003 /** 15004 * Generate a register(indirect)--immediate TEST. That is, 15005 * <PRE> 15006 * [dstBase] &= (quad) imm 15007 * </PRE> 15008 * 15009 * @param dstBase the destination base register 15010 * @param imm immediate 15011 */ 15012 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 15013 public final void emitTEST_RegInd_Imm_Quad(GPR dstBase, int imm) { 15014 int miStart = mi; 15015 // no group 1 to 4 prefix byte 15016 generateREXprefix(true, null, null, dstBase); 15017 // single byte opcode 15018 if (false) { 15019 } else { 15020 setMachineCodes(mi++, (byte) 0xF7); 15021 // "register 0x0" is really part of the opcode 15022 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 15023 emitImm32(imm); 15024 } 15025 if (lister != null) lister.RNI(miStart, "TEST", dstBase, imm); 15026 } 15027 15028 /** 15029 * Generate a register--immediate TEST. That is, 15030 * <PRE> 15031 * dstReg &= (byte) imm 15032 * </PRE> 15033 * 15034 * @param dstReg the destination register 15035 * @param imm immediate 15036 */ 15037 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 15038 public final void emitTEST_Reg_Imm_Byte(GPR dstReg, int imm) { 15039 int miStart = mi; 15040 if (dstReg == EAX) { 15041 setMachineCodes(mi++, (byte) 0xA8); 15042 emitImm8(imm); 15043 } else { 15044 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 15045 generateREXprefix(false, null, null, dstReg); 15046 setMachineCodes(mi++, (byte) 0xF6); 15047 // "register 0x0" is really part of the opcode 15048 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 15049 emitImm8(imm); 15050 } 15051 if (lister != null) lister.RI(miStart, "TEST", dstReg, imm); 15052 } 15053 15054 /** 15055 * Generate a register-displacement--immediate TEST. That is, 15056 * <PRE> 15057 * [dstBase + dstDisp] &= (byte) imm 15058 * </PRE> 15059 * 15060 * @param dstBase the destination register 15061 * @param dstDisp the destination displacement 15062 * @param imm immediate 15063 */ 15064 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 15065 public final void emitTEST_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 15066 int miStart = mi; 15067 generateREXprefix(false, null, null, dstBase); 15068 setMachineCodes(mi++, (byte) 0xF6); 15069 // "register 0x0" is really part of the opcode 15070 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 15071 emitImm8(imm); 15072 if (lister != null) lister.RDI(miStart, "TEST", dstBase, dstDisp, imm); 15073 } 15074 15075 /** 15076 * Generate a register-index--immediate TEST. That is, 15077 * <PRE> 15078 * [dstBase + dstIndex<<scale + dstDisp] &= (byte) imm 15079 * </PRE> 15080 * 15081 * @param dstBase the destination base register 15082 * @param dstIndex the destination index register 15083 * @param dstScale the destination shift amount 15084 * @param dstDisp the destination displacement 15085 * @param imm immediate 15086 */ 15087 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15088 public final void emitTEST_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 15089 int miStart = mi; 15090 generateREXprefix(false, null, dstIndex, dstBase); 15091 setMachineCodes(mi++, (byte) 0xF6); 15092 // "register 0x0" is really part of the opcode 15093 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 15094 emitImm8(imm); 15095 if (lister != null) lister.RXDI(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, imm); 15096 } 15097 15098 /** 15099 * Generate a register-offset--immediate TEST. That is, 15100 * <PRE> 15101 * [dstIndex<<dstScale + dstDisp] &= (byte) imm 15102 * </PRE> 15103 * 15104 * @param dstIndex the destination index register 15105 * @param dstScale the destination shift amount 15106 * @param dstDisp the destination displacement 15107 * @param imm immediate 15108 */ 15109 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 15110 public final void emitTEST_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 15111 int miStart = mi; 15112 generateREXprefix(false, null, dstIndex, null); 15113 setMachineCodes(mi++, (byte) 0xF6); 15114 // "register 0x0" is really part of the opcode 15115 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 15116 emitImm8(imm); 15117 if (lister != null) lister.RFDI(miStart, "TEST", dstIndex, dstScale, dstDisp, imm); 15118 } 15119 15120 /** 15121 * Generate a absolute--immediate TEST. That is, 15122 * <PRE> 15123 * [dstDisp] &= (byte) imm 15124 * </PRE> 15125 * 15126 * @param dstDisp the destination displacement 15127 * @param imm immediate 15128 */ 15129 public final void emitTEST_Abs_Imm_Byte(Address dstDisp, int imm) { 15130 int miStart = mi; 15131 generateREXprefix(false, null, null, null); 15132 setMachineCodes(mi++, (byte) 0xF6); 15133 // "register 0x0" is really part of the opcode 15134 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 15135 emitImm8(imm); 15136 if (lister != null) lister.RAI(miStart, "TEST", dstDisp, imm); 15137 } 15138 15139 /** 15140 * Generate a register(indirect)--immediate TEST. That is, 15141 * <PRE> 15142 * [dstBase] &= (byte) imm 15143 * </PRE> 15144 * 15145 * @param dstBase the destination base register 15146 * @param imm immediate 15147 */ 15148 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 15149 public final void emitTEST_RegInd_Imm_Byte(GPR dstBase, int imm) { 15150 int miStart = mi; 15151 generateREXprefix(false, null, null, dstBase); 15152 setMachineCodes(mi++, (byte) 0xF6); 15153 // "register 0x0" is really part of the opcode 15154 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 15155 emitImm8(imm); 15156 if (lister != null) lister.RNI(miStart, "TEST", dstBase, imm); 15157 } 15158 15159 /** 15160 * Generate a register(indirect)--register XOR. That is, 15161 * <PRE> 15162 * [dstBase] ~= srcReg 15163 * </PRE> 15164 * 15165 * @param dstBase the destination base 15166 * @param srcReg the source register 15167 */ 15168 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15169 public final void emitXOR_RegInd_Reg(GPR dstBase, GPR srcReg) { 15170 int miStart = mi; 15171 // no group 1 to 4 prefix byte 15172 generateREXprefix(false, srcReg, null, dstBase); 15173 // single byte opcode 15174 setMachineCodes(mi++, (byte) 0x31); 15175 emitRegIndirectRegOperands(dstBase, srcReg); 15176 if (lister != null) lister.RNR(miStart, "XOR", dstBase, srcReg); 15177 } 15178 15179 /** 15180 * Generate a register-offset--register XOR. That is, 15181 * <PRE> 15182 * [dstReg<<dstScale + dstDisp] ~= srcReg 15183 * </PRE> 15184 * 15185 * @param dstIndex the destination index register 15186 * @param dstScale the destination shift amount 15187 * @param dstDisp the destination displacement 15188 * @param srcReg the source register 15189 */ 15190 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 15191 public final void emitXOR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 15192 int miStart = mi; 15193 // no group 1 to 4 prefix byte 15194 generateREXprefix(false, srcReg, dstIndex, null); 15195 // single byte opcode 15196 setMachineCodes(mi++, (byte) 0x31); 15197 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 15198 if (lister != null) lister.RFDR(miStart, "XOR", dstIndex, dstScale, dstDisp, srcReg); 15199 } 15200 15201 /** 15202 * Generate a absolute--register XOR. That is, 15203 * <PRE> 15204 * [dstDisp] ~= srcReg 15205 * </PRE> 15206 * 15207 * @param dstDisp the destination address 15208 * @param srcReg the source register 15209 */ 15210 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 15211 public final void emitXOR_Abs_Reg(Address dstDisp, GPR srcReg) { 15212 int miStart = mi; 15213 // no group 1 to 4 prefix byte 15214 generateREXprefix(false, srcReg, null, null); 15215 // single byte opcode 15216 setMachineCodes(mi++, (byte) 0x31); 15217 emitAbsRegOperands(dstDisp, srcReg); 15218 if (lister != null) lister.RAR(miStart, "XOR", dstDisp, srcReg); 15219 } 15220 15221 /** 15222 * Generate a register-index--register XOR. That is, 15223 * <PRE> 15224 * [dstBase + dstIndex<<dstScale + dstDisp] ~= srcReg 15225 * </PRE> 15226 * 15227 * @param dstBase the base register 15228 * @param dstIndex the destination index register 15229 * @param dstScale the destination shift amount 15230 * @param dstDisp the destination displacement 15231 * @param srcReg the source register 15232 */ 15233 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 15234 public final void emitXOR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 15235 int miStart = mi; 15236 // no group 1 to 4 prefix byte 15237 generateREXprefix(false, srcReg, dstIndex, dstBase); 15238 // single byte opcode 15239 setMachineCodes(mi++, (byte) 0x31); 15240 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 15241 if (lister != null) lister.RXDR(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 15242 } 15243 15244 /** 15245 * Generate a register-displacement--register XOR. That is, 15246 * <PRE> 15247 * [dstBase + dstDisp] ~= srcReg 15248 * </PRE> 15249 * 15250 * @param dstBase the base register 15251 * @param dstDisp the destination displacement 15252 * @param srcReg the source register 15253 */ 15254 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 15255 public final void emitXOR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 15256 int miStart = mi; 15257 // no group 1 to 4 prefix byte 15258 generateREXprefix(false, srcReg, null, dstBase); 15259 // single byte opcode 15260 setMachineCodes(mi++, (byte) 0x31); 15261 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 15262 if (lister != null) lister.RDR(miStart, "XOR", dstBase, dstDisp, srcReg); 15263 } 15264 15265 /** 15266 * Generate a register--register XOR. That is, 15267 * <PRE> 15268 * dstReg ~= srcReg 15269 * </PRE> 15270 * 15271 * @param dstReg the destination register 15272 * @param srcReg the source register 15273 */ 15274 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15275 public final void emitXOR_Reg_Reg(GPR dstReg, GPR srcReg) { 15276 int miStart = mi; 15277 // no group 1 to 4 prefix byte 15278 generateREXprefix(false, srcReg, null, dstReg); 15279 // single byte opcode 15280 setMachineCodes(mi++, (byte) 0x31); 15281 emitRegRegOperands(dstReg, srcReg); 15282 if (lister != null) lister.RR(miStart, "XOR", dstReg, srcReg); 15283 } 15284 15285 /** 15286 * Generate a register--register-displacement XOR. That is, 15287 * <PRE> 15288 * dstReg ~= [srcReg + srcDisp] 15289 * </PRE> 15290 * 15291 * @param dstReg the destination register 15292 * @param srcBase the source register 15293 * @param srcDisp the source displacement 15294 */ 15295 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15296 public final void emitXOR_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 15297 int miStart = mi; 15298 // no group 1 to 4 prefix byte 15299 generateREXprefix(false, dstReg, null, srcBase); 15300 // single byte opcode 15301 setMachineCodes(mi++, (byte) 0x33); 15302 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 15303 if (lister != null) lister.RRD(miStart, "XOR", dstReg, srcBase, srcDisp); 15304 } 15305 15306 /** 15307 * Generate a register--register-offset XOR. That is, 15308 * <PRE> 15309 * dstReg ~= [srcIndex<<srcScale + srcDisp] 15310 * </PRE> 15311 * 15312 * @param dstReg the destination register 15313 * @param srcIndex the source index register 15314 * @param srcScale the source shift amount 15315 * @param srcDisp the source displacement 15316 */ 15317 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15318 public final void emitXOR_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 15319 int miStart = mi; 15320 // no group 1 to 4 prefix byte 15321 generateREXprefix(false, dstReg, srcIndex, null); 15322 // single byte opcode 15323 setMachineCodes(mi++, (byte) 0x33); 15324 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 15325 if (lister != null) lister.RRFD(miStart, "XOR", dstReg, srcIndex, srcScale, srcDisp); 15326 } 15327 15328 /** 15329 * Generate a register--register-offset XOR. That is, 15330 * <PRE> 15331 * dstReg ~= [srcDisp] 15332 * </PRE> 15333 * 15334 * @param dstReg the destination register 15335 * @param srcDisp the source displacement 15336 */ 15337 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 15338 public final void emitXOR_Reg_Abs(GPR dstReg, Address srcDisp) { 15339 int miStart = mi; 15340 // no group 1 to 4 prefix byte 15341 generateREXprefix(false, dstReg, null, null); 15342 // single byte opcode 15343 setMachineCodes(mi++, (byte) 0x33); 15344 emitAbsRegOperands(srcDisp, dstReg); 15345 if (lister != null) lister.RRA(miStart, "XOR", dstReg, srcDisp); 15346 } 15347 15348 /** 15349 * Generate a register--register-offset XOR. That is, 15350 * <PRE> 15351 * dstReg ~= [srcBase + srcIndex<<srcScale + srcDisp] 15352 * </PRE> 15353 * 15354 * @param dstReg the destination register 15355 * @param srcBase the source base register 15356 * @param srcIndex the source index register 15357 * @param srcScale the source shift amount 15358 * @param srcDisp the source displacement 15359 */ 15360 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 15361 public final void emitXOR_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 15362 int miStart = mi; 15363 // no group 1 to 4 prefix byte 15364 generateREXprefix(false, dstReg, srcIndex, srcBase); 15365 // single byte opcode 15366 setMachineCodes(mi++, (byte) 0x33); 15367 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 15368 if (lister != null) lister.RRXD(miStart, "XOR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 15369 } 15370 15371 /** 15372 * Generate a register--register(indirect) XOR. That is, 15373 * <PRE> 15374 * dstReg ~= [srcBase] 15375 * </PRE> 15376 * 15377 * @param dstReg the destination register 15378 * @param srcBase the source base register 15379 */ 15380 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15381 public final void emitXOR_Reg_RegInd(GPR dstReg, GPR srcBase) { 15382 int miStart = mi; 15383 // no group 1 to 4 prefix byte 15384 generateREXprefix(false, dstReg, null, srcBase); 15385 // single byte opcode 15386 setMachineCodes(mi++, (byte) 0x33); 15387 emitRegIndirectRegOperands(srcBase, dstReg); 15388 if (lister != null) lister.RRN(miStart, "XOR", dstReg, srcBase); 15389 } 15390 15391 /** 15392 * Generate a register(indirect)--register XOR. That is, 15393 * <PRE> 15394 * [dstBase] ~= (word) srcReg 15395 * </PRE> 15396 * 15397 * @param dstBase the destination base 15398 * @param srcReg the source register 15399 */ 15400 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15401 public final void emitXOR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 15402 int miStart = mi; 15403 setMachineCodes(mi++, (byte) 0x66); 15404 generateREXprefix(false, srcReg, null, dstBase); 15405 // single byte opcode 15406 setMachineCodes(mi++, (byte) 0x31); 15407 emitRegIndirectRegOperands(dstBase, srcReg); 15408 if (lister != null) lister.RNR(miStart, "XOR", dstBase, srcReg); 15409 } 15410 15411 /** 15412 * Generate a register-offset--register XOR. That is, 15413 * <PRE> 15414 * [dstReg<<dstScale + dstDisp] ~= (word) srcReg 15415 * </PRE> 15416 * 15417 * @param dstIndex the destination index register 15418 * @param dstScale the destination shift amount 15419 * @param dstDisp the destination displacement 15420 * @param srcReg the source register 15421 */ 15422 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 15423 public final void emitXOR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 15424 int miStart = mi; 15425 setMachineCodes(mi++, (byte) 0x66); 15426 generateREXprefix(false, srcReg, dstIndex, null); 15427 // single byte opcode 15428 setMachineCodes(mi++, (byte) 0x31); 15429 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 15430 if (lister != null) lister.RFDR(miStart, "XOR", dstIndex, dstScale, dstDisp, srcReg); 15431 } 15432 15433 /** 15434 * Generate a absolute--register XOR. That is, 15435 * <PRE> 15436 * [dstDisp] ~= (word) srcReg 15437 * </PRE> 15438 * 15439 * @param dstDisp the destination address 15440 * @param srcReg the source register 15441 */ 15442 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 15443 public final void emitXOR_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 15444 int miStart = mi; 15445 setMachineCodes(mi++, (byte) 0x66); 15446 generateREXprefix(false, srcReg, null, null); 15447 // single byte opcode 15448 setMachineCodes(mi++, (byte) 0x31); 15449 emitAbsRegOperands(dstDisp, srcReg); 15450 if (lister != null) lister.RAR(miStart, "XOR", dstDisp, srcReg); 15451 } 15452 15453 /** 15454 * Generate a register-index--register XOR. That is, 15455 * <PRE> 15456 * [dstBase + dstIndex<<dstScale + dstDisp] ~= (word) srcReg 15457 * </PRE> 15458 * 15459 * @param dstBase the base register 15460 * @param dstIndex the destination index register 15461 * @param dstScale the destination shift amount 15462 * @param dstDisp the destination displacement 15463 * @param srcReg the source register 15464 */ 15465 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 15466 public final void emitXOR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 15467 int miStart = mi; 15468 setMachineCodes(mi++, (byte) 0x66); 15469 generateREXprefix(false, srcReg, dstIndex, dstBase); 15470 // single byte opcode 15471 setMachineCodes(mi++, (byte) 0x31); 15472 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 15473 if (lister != null) lister.RXDR(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 15474 } 15475 15476 /** 15477 * Generate a register-displacement--register XOR. That is, 15478 * <PRE> 15479 * [dstBase + dstDisp] ~= (word) srcReg 15480 * </PRE> 15481 * 15482 * @param dstBase the base register 15483 * @param dstDisp the destination displacement 15484 * @param srcReg the source register 15485 */ 15486 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 15487 public final void emitXOR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 15488 int miStart = mi; 15489 setMachineCodes(mi++, (byte) 0x66); 15490 generateREXprefix(false, srcReg, null, dstBase); 15491 // single byte opcode 15492 setMachineCodes(mi++, (byte) 0x31); 15493 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 15494 if (lister != null) lister.RDR(miStart, "XOR", dstBase, dstDisp, srcReg); 15495 } 15496 15497 /** 15498 * Generate a register--register XOR. That is, 15499 * <PRE> 15500 * dstReg ~= (word) srcReg 15501 * </PRE> 15502 * 15503 * @param dstReg the destination register 15504 * @param srcReg the source register 15505 */ 15506 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15507 public final void emitXOR_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 15508 int miStart = mi; 15509 setMachineCodes(mi++, (byte) 0x66); 15510 generateREXprefix(false, srcReg, null, dstReg); 15511 // single byte opcode 15512 setMachineCodes(mi++, (byte) 0x31); 15513 emitRegRegOperands(dstReg, srcReg); 15514 if (lister != null) lister.RR(miStart, "XOR", dstReg, srcReg); 15515 } 15516 15517 /** 15518 * Generate a register--register-displacement XOR. That is, 15519 * <PRE> 15520 * dstReg ~= (word) [srcReg + srcDisp] 15521 * </PRE> 15522 * 15523 * @param dstReg the destination register 15524 * @param srcBase the source register 15525 * @param srcDisp the source displacement 15526 */ 15527 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15528 public final void emitXOR_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 15529 int miStart = mi; 15530 setMachineCodes(mi++, (byte) 0x66); 15531 generateREXprefix(false, dstReg, null, srcBase); 15532 // single byte opcode 15533 setMachineCodes(mi++, (byte) 0x33); 15534 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 15535 if (lister != null) lister.RRD(miStart, "XOR", dstReg, srcBase, srcDisp); 15536 } 15537 15538 /** 15539 * Generate a register--register-offset XOR. That is, 15540 * <PRE> 15541 * dstReg ~= (word) [srcIndex<<srcScale + srcDisp] 15542 * </PRE> 15543 * 15544 * @param dstReg the destination register 15545 * @param srcIndex the source index register 15546 * @param srcScale the source shift amount 15547 * @param srcDisp the source displacement 15548 */ 15549 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15550 public final void emitXOR_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 15551 int miStart = mi; 15552 setMachineCodes(mi++, (byte) 0x66); 15553 generateREXprefix(false, dstReg, srcIndex, null); 15554 // single byte opcode 15555 setMachineCodes(mi++, (byte) 0x33); 15556 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 15557 if (lister != null) lister.RRFD(miStart, "XOR", dstReg, srcIndex, srcScale, srcDisp); 15558 } 15559 15560 /** 15561 * Generate a register--register-offset XOR. That is, 15562 * <PRE> 15563 * dstReg ~= (word) [srcDisp] 15564 * </PRE> 15565 * 15566 * @param dstReg the destination register 15567 * @param srcDisp the source displacement 15568 */ 15569 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 15570 public final void emitXOR_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 15571 int miStart = mi; 15572 setMachineCodes(mi++, (byte) 0x66); 15573 generateREXprefix(false, dstReg, null, null); 15574 // single byte opcode 15575 setMachineCodes(mi++, (byte) 0x33); 15576 emitAbsRegOperands(srcDisp, dstReg); 15577 if (lister != null) lister.RRA(miStart, "XOR", dstReg, srcDisp); 15578 } 15579 15580 /** 15581 * Generate a register--register-offset XOR. That is, 15582 * <PRE> 15583 * dstReg ~= (word) [srcBase + srcIndex<<srcScale + srcDisp] 15584 * </PRE> 15585 * 15586 * @param dstReg the destination register 15587 * @param srcBase the source base register 15588 * @param srcIndex the source index register 15589 * @param srcScale the source shift amount 15590 * @param srcDisp the source displacement 15591 */ 15592 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 15593 public final void emitXOR_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 15594 int miStart = mi; 15595 setMachineCodes(mi++, (byte) 0x66); 15596 generateREXprefix(false, dstReg, srcIndex, srcBase); 15597 // single byte opcode 15598 setMachineCodes(mi++, (byte) 0x33); 15599 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 15600 if (lister != null) lister.RRXD(miStart, "XOR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 15601 } 15602 15603 /** 15604 * Generate a register--register(indirect) XOR. That is, 15605 * <PRE> 15606 * dstReg ~= (word) [srcBase] 15607 * </PRE> 15608 * 15609 * @param dstReg the destination register 15610 * @param srcBase the source base register 15611 */ 15612 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15613 public final void emitXOR_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 15614 int miStart = mi; 15615 setMachineCodes(mi++, (byte) 0x66); 15616 generateREXprefix(false, dstReg, null, srcBase); 15617 // single byte opcode 15618 setMachineCodes(mi++, (byte) 0x33); 15619 emitRegIndirectRegOperands(srcBase, dstReg); 15620 if (lister != null) lister.RRN(miStart, "XOR", dstReg, srcBase); 15621 } 15622 15623 /** 15624 * Generate a register(indirect)--register XOR. That is, 15625 * <PRE> 15626 * [dstBase] ~= (quad) srcReg 15627 * </PRE> 15628 * 15629 * @param dstBase the destination base 15630 * @param srcReg the source register 15631 */ 15632 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15633 public final void emitXOR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 15634 int miStart = mi; 15635 // no group 1 to 4 prefix byte 15636 generateREXprefix(true, srcReg, null, dstBase); 15637 // single byte opcode 15638 setMachineCodes(mi++, (byte) 0x31); 15639 emitRegIndirectRegOperands(dstBase, srcReg); 15640 if (lister != null) lister.RNR(miStart, "XOR", dstBase, srcReg); 15641 } 15642 15643 /** 15644 * Generate a register-offset--register XOR. That is, 15645 * <PRE> 15646 * [dstReg<<dstScale + dstDisp] ~= (quad) srcReg 15647 * </PRE> 15648 * 15649 * @param dstIndex the destination index register 15650 * @param dstScale the destination shift amount 15651 * @param dstDisp the destination displacement 15652 * @param srcReg the source register 15653 */ 15654 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 15655 public final void emitXOR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 15656 int miStart = mi; 15657 // no group 1 to 4 prefix byte 15658 generateREXprefix(true, srcReg, dstIndex, null); 15659 // single byte opcode 15660 setMachineCodes(mi++, (byte) 0x31); 15661 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 15662 if (lister != null) lister.RFDR(miStart, "XOR", dstIndex, dstScale, dstDisp, srcReg); 15663 } 15664 15665 /** 15666 * Generate a absolute--register XOR. That is, 15667 * <PRE> 15668 * [dstDisp] ~= (quad) srcReg 15669 * </PRE> 15670 * 15671 * @param dstDisp the destination address 15672 * @param srcReg the source register 15673 */ 15674 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 15675 public final void emitXOR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 15676 int miStart = mi; 15677 // no group 1 to 4 prefix byte 15678 generateREXprefix(true, srcReg, null, null); 15679 // single byte opcode 15680 setMachineCodes(mi++, (byte) 0x31); 15681 emitAbsRegOperands(dstDisp, srcReg); 15682 if (lister != null) lister.RAR(miStart, "XOR", dstDisp, srcReg); 15683 } 15684 15685 /** 15686 * Generate a register-index--register XOR. That is, 15687 * <PRE> 15688 * [dstBase + dstIndex<<dstScale + dstDisp] ~= (quad) srcReg 15689 * </PRE> 15690 * 15691 * @param dstBase the base register 15692 * @param dstIndex the destination index register 15693 * @param dstScale the destination shift amount 15694 * @param dstDisp the destination displacement 15695 * @param srcReg the source register 15696 */ 15697 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 15698 public final void emitXOR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 15699 int miStart = mi; 15700 // no group 1 to 4 prefix byte 15701 generateREXprefix(true, srcReg, dstIndex, dstBase); 15702 // single byte opcode 15703 setMachineCodes(mi++, (byte) 0x31); 15704 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 15705 if (lister != null) lister.RXDR(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 15706 } 15707 15708 /** 15709 * Generate a register-displacement--register XOR. That is, 15710 * <PRE> 15711 * [dstBase + dstDisp] ~= (quad) srcReg 15712 * </PRE> 15713 * 15714 * @param dstBase the base register 15715 * @param dstDisp the destination displacement 15716 * @param srcReg the source register 15717 */ 15718 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 15719 public final void emitXOR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 15720 int miStart = mi; 15721 // no group 1 to 4 prefix byte 15722 generateREXprefix(true, srcReg, null, dstBase); 15723 // single byte opcode 15724 setMachineCodes(mi++, (byte) 0x31); 15725 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 15726 if (lister != null) lister.RDR(miStart, "XOR", dstBase, dstDisp, srcReg); 15727 } 15728 15729 /** 15730 * Generate a register--register XOR. That is, 15731 * <PRE> 15732 * dstReg ~= (quad) srcReg 15733 * </PRE> 15734 * 15735 * @param dstReg the destination register 15736 * @param srcReg the source register 15737 */ 15738 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15739 public final void emitXOR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 15740 int miStart = mi; 15741 // no group 1 to 4 prefix byte 15742 generateREXprefix(true, srcReg, null, dstReg); 15743 // single byte opcode 15744 setMachineCodes(mi++, (byte) 0x31); 15745 emitRegRegOperands(dstReg, srcReg); 15746 if (lister != null) lister.RR(miStart, "XOR", dstReg, srcReg); 15747 } 15748 15749 /** 15750 * Generate a register--register-displacement XOR. That is, 15751 * <PRE> 15752 * dstReg ~= (quad) [srcReg + srcDisp] 15753 * </PRE> 15754 * 15755 * @param dstReg the destination register 15756 * @param srcBase the source register 15757 * @param srcDisp the source displacement 15758 */ 15759 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15760 public final void emitXOR_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 15761 int miStart = mi; 15762 // no group 1 to 4 prefix byte 15763 generateREXprefix(true, dstReg, null, srcBase); 15764 // single byte opcode 15765 setMachineCodes(mi++, (byte) 0x33); 15766 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 15767 if (lister != null) lister.RRD(miStart, "XOR", dstReg, srcBase, srcDisp); 15768 } 15769 15770 /** 15771 * Generate a register--register-offset XOR. That is, 15772 * <PRE> 15773 * dstReg ~= (quad) [srcIndex<<srcScale + srcDisp] 15774 * </PRE> 15775 * 15776 * @param dstReg the destination register 15777 * @param srcIndex the source index register 15778 * @param srcScale the source shift amount 15779 * @param srcDisp the source displacement 15780 */ 15781 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15782 public final void emitXOR_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 15783 int miStart = mi; 15784 // no group 1 to 4 prefix byte 15785 generateREXprefix(true, dstReg, srcIndex, null); 15786 // single byte opcode 15787 setMachineCodes(mi++, (byte) 0x33); 15788 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 15789 if (lister != null) lister.RRFD(miStart, "XOR", dstReg, srcIndex, srcScale, srcDisp); 15790 } 15791 15792 /** 15793 * Generate a register--register-offset XOR. That is, 15794 * <PRE> 15795 * dstReg ~= (quad) [srcDisp] 15796 * </PRE> 15797 * 15798 * @param dstReg the destination register 15799 * @param srcDisp the source displacement 15800 */ 15801 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 15802 public final void emitXOR_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 15803 int miStart = mi; 15804 // no group 1 to 4 prefix byte 15805 generateREXprefix(true, dstReg, null, null); 15806 // single byte opcode 15807 setMachineCodes(mi++, (byte) 0x33); 15808 emitAbsRegOperands(srcDisp, dstReg); 15809 if (lister != null) lister.RRA(miStart, "XOR", dstReg, srcDisp); 15810 } 15811 15812 /** 15813 * Generate a register--register-offset XOR. That is, 15814 * <PRE> 15815 * dstReg ~= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 15816 * </PRE> 15817 * 15818 * @param dstReg the destination register 15819 * @param srcBase the source base register 15820 * @param srcIndex the source index register 15821 * @param srcScale the source shift amount 15822 * @param srcDisp the source displacement 15823 */ 15824 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 15825 public final void emitXOR_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 15826 int miStart = mi; 15827 // no group 1 to 4 prefix byte 15828 generateREXprefix(true, dstReg, srcIndex, srcBase); 15829 // single byte opcode 15830 setMachineCodes(mi++, (byte) 0x33); 15831 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 15832 if (lister != null) lister.RRXD(miStart, "XOR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 15833 } 15834 15835 /** 15836 * Generate a register--register(indirect) XOR. That is, 15837 * <PRE> 15838 * dstReg ~= (quad) [srcBase] 15839 * </PRE> 15840 * 15841 * @param dstReg the destination register 15842 * @param srcBase the source base register 15843 */ 15844 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15845 public final void emitXOR_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 15846 int miStart = mi; 15847 // no group 1 to 4 prefix byte 15848 generateREXprefix(true, dstReg, null, srcBase); 15849 // single byte opcode 15850 setMachineCodes(mi++, (byte) 0x33); 15851 emitRegIndirectRegOperands(srcBase, dstReg); 15852 if (lister != null) lister.RRN(miStart, "XOR", dstReg, srcBase); 15853 } 15854 15855 /** 15856 * Generate a register(indirect)--register XOR. That is, 15857 * <PRE> 15858 * [dstBase] ~= (byte) srcReg 15859 * </PRE> 15860 * 15861 * @param dstBase the destination base 15862 * @param srcReg the source register 15863 */ 15864 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15865 public final void emitXOR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 15866 int miStart = mi; 15867 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 15868 // no group 1 to 4 prefix byte 15869 generateREXprefix(false, srcReg, null, dstBase); 15870 // single byte opcode 15871 setMachineCodes(mi++, (byte) 0x30); 15872 emitRegIndirectRegOperands(dstBase, srcReg); 15873 if (lister != null) lister.RNR(miStart, "XOR", dstBase, srcReg); 15874 } 15875 15876 /** 15877 * Generate a register-offset--register XOR. That is, 15878 * <PRE> 15879 * [dstReg<<dstScale + dstDisp] ~= (byte) srcReg 15880 * </PRE> 15881 * 15882 * @param dstIndex the destination index register 15883 * @param dstScale the destination shift amount 15884 * @param dstDisp the destination displacement 15885 * @param srcReg the source register 15886 */ 15887 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 15888 public final void emitXOR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 15889 int miStart = mi; 15890 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 15891 // no group 1 to 4 prefix byte 15892 generateREXprefix(false, srcReg, dstIndex, null); 15893 // single byte opcode 15894 setMachineCodes(mi++, (byte) 0x30); 15895 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 15896 if (lister != null) lister.RFDR(miStart, "XOR", dstIndex, dstScale, dstDisp, srcReg); 15897 } 15898 15899 /** 15900 * Generate a absolute--register XOR. That is, 15901 * <PRE> 15902 * [dstDisp] ~= (byte) srcReg 15903 * </PRE> 15904 * 15905 * @param dstDisp the destination address 15906 * @param srcReg the source register 15907 */ 15908 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 15909 public final void emitXOR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 15910 int miStart = mi; 15911 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 15912 // no group 1 to 4 prefix byte 15913 generateREXprefix(false, srcReg, null, null); 15914 // single byte opcode 15915 setMachineCodes(mi++, (byte) 0x30); 15916 emitAbsRegOperands(dstDisp, srcReg); 15917 if (lister != null) lister.RAR(miStart, "XOR", dstDisp, srcReg); 15918 } 15919 15920 /** 15921 * Generate a register-index--register XOR. That is, 15922 * <PRE> 15923 * [dstBase + dstIndex<<dstScale + dstDisp] ~= (byte) srcReg 15924 * </PRE> 15925 * 15926 * @param dstBase the base register 15927 * @param dstIndex the destination index register 15928 * @param dstScale the destination shift amount 15929 * @param dstDisp the destination displacement 15930 * @param srcReg the source register 15931 */ 15932 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 15933 public final void emitXOR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 15934 int miStart = mi; 15935 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 15936 // no group 1 to 4 prefix byte 15937 generateREXprefix(false, srcReg, dstIndex, dstBase); 15938 // single byte opcode 15939 setMachineCodes(mi++, (byte) 0x30); 15940 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 15941 if (lister != null) lister.RXDR(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 15942 } 15943 15944 /** 15945 * Generate a register-displacement--register XOR. That is, 15946 * <PRE> 15947 * [dstBase + dstDisp] ~= (byte) srcReg 15948 * </PRE> 15949 * 15950 * @param dstBase the base register 15951 * @param dstDisp the destination displacement 15952 * @param srcReg the source register 15953 */ 15954 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 15955 public final void emitXOR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 15956 int miStart = mi; 15957 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 15958 // no group 1 to 4 prefix byte 15959 generateREXprefix(false, srcReg, null, dstBase); 15960 // single byte opcode 15961 setMachineCodes(mi++, (byte) 0x30); 15962 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 15963 if (lister != null) lister.RDR(miStart, "XOR", dstBase, dstDisp, srcReg); 15964 } 15965 15966 /** 15967 * Generate a register--register XOR. That is, 15968 * <PRE> 15969 * dstReg ~= (byte) srcReg 15970 * </PRE> 15971 * 15972 * @param dstReg the destination register 15973 * @param srcReg the source register 15974 */ 15975 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15976 public final void emitXOR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 15977 int miStart = mi; 15978 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 15979 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 15980 // no group 1 to 4 prefix byte 15981 generateREXprefix(false, srcReg, null, dstReg); 15982 // single byte opcode 15983 setMachineCodes(mi++, (byte) 0x30); 15984 emitRegRegOperands(dstReg, srcReg); 15985 if (lister != null) lister.RR(miStart, "XOR", dstReg, srcReg); 15986 } 15987 15988 /** 15989 * Generate a register--register-displacement XOR. That is, 15990 * <PRE> 15991 * dstReg ~= (byte) [srcReg + srcDisp] 15992 * </PRE> 15993 * 15994 * @param dstReg the destination register 15995 * @param srcBase the source register 15996 * @param srcDisp the source displacement 15997 */ 15998 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 15999 public final void emitXOR_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 16000 int miStart = mi; 16001 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 16002 // no group 1 to 4 prefix byte 16003 generateREXprefix(false, dstReg, null, srcBase); 16004 // single byte opcode 16005 setMachineCodes(mi++, (byte) 0x32); 16006 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 16007 if (lister != null) lister.RRD(miStart, "XOR", dstReg, srcBase, srcDisp); 16008 } 16009 16010 /** 16011 * Generate a register--register-offset XOR. That is, 16012 * <PRE> 16013 * dstReg ~= (byte) [srcIndex<<srcScale + srcDisp] 16014 * </PRE> 16015 * 16016 * @param dstReg the destination register 16017 * @param srcIndex the source index register 16018 * @param srcScale the source shift amount 16019 * @param srcDisp the source displacement 16020 */ 16021 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 16022 public final void emitXOR_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 16023 int miStart = mi; 16024 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 16025 // no group 1 to 4 prefix byte 16026 generateREXprefix(false, dstReg, srcIndex, null); 16027 // single byte opcode 16028 setMachineCodes(mi++, (byte) 0x32); 16029 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 16030 if (lister != null) lister.RRFD(miStart, "XOR", dstReg, srcIndex, srcScale, srcDisp); 16031 } 16032 16033 /** 16034 * Generate a register--register-offset XOR. That is, 16035 * <PRE> 16036 * dstReg ~= (byte) [srcDisp] 16037 * </PRE> 16038 * 16039 * @param dstReg the destination register 16040 * @param srcDisp the source displacement 16041 */ 16042 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16043 public final void emitXOR_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 16044 int miStart = mi; 16045 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 16046 // no group 1 to 4 prefix byte 16047 generateREXprefix(false, dstReg, null, null); 16048 // single byte opcode 16049 setMachineCodes(mi++, (byte) 0x32); 16050 emitAbsRegOperands(srcDisp, dstReg); 16051 if (lister != null) lister.RRA(miStart, "XOR", dstReg, srcDisp); 16052 } 16053 16054 /** 16055 * Generate a register--register-offset XOR. That is, 16056 * <PRE> 16057 * dstReg ~= (byte) [srcBase + srcIndex<<srcScale + srcDisp] 16058 * </PRE> 16059 * 16060 * @param dstReg the destination register 16061 * @param srcBase the source base register 16062 * @param srcIndex the source index register 16063 * @param srcScale the source shift amount 16064 * @param srcDisp the source displacement 16065 */ 16066 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 16067 public final void emitXOR_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 16068 int miStart = mi; 16069 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 16070 // no group 1 to 4 prefix byte 16071 generateREXprefix(false, dstReg, srcIndex, srcBase); 16072 // single byte opcode 16073 setMachineCodes(mi++, (byte) 0x32); 16074 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 16075 if (lister != null) lister.RRXD(miStart, "XOR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 16076 } 16077 16078 /** 16079 * Generate a register--register(indirect) XOR. That is, 16080 * <PRE> 16081 * dstReg ~= (byte) [srcBase] 16082 * </PRE> 16083 * 16084 * @param dstReg the destination register 16085 * @param srcBase the source base register 16086 */ 16087 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 16088 public final void emitXOR_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 16089 int miStart = mi; 16090 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 16091 // no group 1 to 4 prefix byte 16092 generateREXprefix(false, dstReg, null, srcBase); 16093 // single byte opcode 16094 setMachineCodes(mi++, (byte) 0x32); 16095 emitRegIndirectRegOperands(srcBase, dstReg); 16096 if (lister != null) lister.RRN(miStart, "XOR", dstReg, srcBase); 16097 } 16098 16099 /** 16100 * Generate a register--immediate XOR. That is, 16101 * <PRE> 16102 * dstReg ~= imm 16103 * </PRE> 16104 * 16105 * @param dstReg the destination register 16106 * @param imm immediate 16107 */ 16108 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16109 public final void emitXOR_Reg_Imm(GPR dstReg, int imm) { 16110 int miStart = mi; 16111 // no group 1 to 4 prefix byte 16112 generateREXprefix(false, null, null, dstReg); 16113 // single byte opcode 16114 if (fits(imm,8)) { 16115 setMachineCodes(mi++, (byte) 0x83); 16116 // "register 0x6" is really part of the opcode 16117 emitRegRegOperands(dstReg, GPR.getForOpcode(0x6)); 16118 emitImm8((byte)imm); 16119 } else if (dstReg == EAX) { 16120 setMachineCodes(mi++, (byte) 0x35); 16121 emitImm32(imm); 16122 } else { 16123 setMachineCodes(mi++, (byte) 0x81); 16124 // "register 0x6" is really part of the opcode 16125 emitRegRegOperands(dstReg, GPR.getForOpcode(0x6)); 16126 emitImm32(imm); 16127 } 16128 if (lister != null) lister.RI(miStart, "XOR", dstReg, imm); 16129 } 16130 16131 /** 16132 * Generate a register-displacement--immediate XOR. That is, 16133 * <PRE> 16134 * [dstBase + dstDisp] ~= imm 16135 * </PRE> 16136 * 16137 * @param dstBase the destination register 16138 * @param dstDisp the destination displacement 16139 * @param imm immediate 16140 */ 16141 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16142 public final void emitXOR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 16143 int miStart = mi; 16144 // no group 1 to 4 prefix byte 16145 generateREXprefix(false, null, null, dstBase); 16146 // single byte opcode 16147 if (fits(imm,8)) { 16148 setMachineCodes(mi++, (byte) 0x83); 16149 // "register 0x6" is really part of the opcode 16150 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6)); 16151 emitImm8((byte)imm); 16152 } else { 16153 setMachineCodes(mi++, (byte) 0x81); 16154 // "register 0x6" is really part of the opcode 16155 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6)); 16156 emitImm32(imm); 16157 } 16158 if (lister != null) lister.RDI(miStart, "XOR", dstBase, dstDisp, imm); 16159 } 16160 16161 /** 16162 * Generate a register-offset--immediate XOR. That is, 16163 * <PRE> 16164 * [dstIndex<<dstScale + dstDisp] ~= imm 16165 * </PRE> 16166 * 16167 * @param dstIndex the destination index register 16168 * @param dstScale the destination shift amount 16169 * @param dstDisp the destination displacement 16170 * @param imm immediate 16171 */ 16172 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16173 public final void emitXOR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 16174 int miStart = mi; 16175 // no group 1 to 4 prefix byte 16176 generateREXprefix(false, null, dstIndex, null); 16177 // single byte opcode 16178 if (fits(imm,8)) { 16179 setMachineCodes(mi++, (byte) 0x83); 16180 // "register 0x6" is really part of the opcode 16181 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16182 emitImm8((byte)imm); 16183 } else { 16184 setMachineCodes(mi++, (byte) 0x81); 16185 // "register 0x6" is really part of the opcode 16186 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16187 emitImm32(imm); 16188 } 16189 if (lister != null) lister.RFDI(miStart, "XOR", dstIndex, dstScale, dstDisp, imm); 16190 } 16191 16192 /** 16193 * Generate a absolute--immediate XOR. That is, 16194 * <PRE> 16195 * [dstDisp] ~= imm 16196 * </PRE> 16197 * 16198 * @param dstDisp the destination displacement 16199 * @param imm immediate 16200 */ 16201 public final void emitXOR_Abs_Imm(Address dstDisp, int imm) { 16202 int miStart = mi; 16203 // no group 1 to 4 prefix byte 16204 generateREXprefix(false, null, null, null); 16205 // single byte opcode 16206 if (fits(imm,8)) { 16207 setMachineCodes(mi++, (byte) 0x83); 16208 // "register 0x6" is really part of the opcode 16209 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6)); 16210 emitImm8((byte)imm); 16211 } else { 16212 setMachineCodes(mi++, (byte) 0x81); 16213 // "register 0x6" is really part of the opcode 16214 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6)); 16215 emitImm32(imm); 16216 } 16217 if (lister != null) lister.RAI(miStart, "XOR", dstDisp, imm); 16218 } 16219 16220 /** 16221 * Generate a register-index--immediate XOR. That is, 16222 * <PRE> 16223 * [dstBase + dstIndex<<dstScale + dstDisp] ~= imm 16224 * </PRE> 16225 * 16226 * @param dstBase the destination base register 16227 * @param dstIndex the destination index register 16228 * @param dstScale the destination shift amount 16229 * @param dstDisp the destination displacement 16230 * @param imm immediate 16231 */ 16232 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 16233 public final void emitXOR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 16234 int miStart = mi; 16235 // no group 1 to 4 prefix byte 16236 generateREXprefix(false, null, dstIndex, dstBase); 16237 // single byte opcode 16238 if (fits(imm,8)) { 16239 setMachineCodes(mi++, (byte) 0x83); 16240 // "register 0x6" is really part of the opcode 16241 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16242 emitImm8((byte)imm); 16243 } else { 16244 setMachineCodes(mi++, (byte) 0x81); 16245 // "register 0x6" is really part of the opcode 16246 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16247 emitImm32(imm); 16248 } 16249 if (lister != null) lister.RXDI(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, imm); 16250 } 16251 16252 /** 16253 * Generate a register(indirect)--immediate XOR. That is, 16254 * <PRE> 16255 * [dstBase] ~= imm 16256 * </PRE> 16257 * 16258 * @param dstBase the destination base register 16259 * @param imm immediate 16260 */ 16261 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16262 public final void emitXOR_RegInd_Imm(GPR dstBase, int imm) { 16263 int miStart = mi; 16264 // no group 1 to 4 prefix byte 16265 generateREXprefix(false, null, null, dstBase); 16266 // single byte opcode 16267 if (fits(imm,8)) { 16268 setMachineCodes(mi++, (byte) 0x83); 16269 // "register 0x6" is really part of the opcode 16270 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6)); 16271 emitImm8((byte)imm); 16272 } else { 16273 setMachineCodes(mi++, (byte) 0x81); 16274 // "register 0x6" is really part of the opcode 16275 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6)); 16276 emitImm32(imm); 16277 } 16278 if (lister != null) lister.RNI(miStart, "XOR", dstBase, imm); 16279 } 16280 16281 /** 16282 * Generate a register--immediate XOR. That is, 16283 * <PRE> 16284 * dstReg ~= (word) imm 16285 * </PRE> 16286 * 16287 * @param dstReg the destination register 16288 * @param imm immediate 16289 */ 16290 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16291 public final void emitXOR_Reg_Imm_Word(GPR dstReg, int imm) { 16292 int miStart = mi; 16293 setMachineCodes(mi++, (byte) 0x66); 16294 generateREXprefix(false, null, null, dstReg); 16295 // single byte opcode 16296 if (fits(imm,8)) { 16297 setMachineCodes(mi++, (byte) 0x83); 16298 // "register 0x6" is really part of the opcode 16299 emitRegRegOperands(dstReg, GPR.getForOpcode(0x6)); 16300 emitImm8((byte)imm); 16301 } else if (dstReg == EAX) { 16302 setMachineCodes(mi++, (byte) 0x35); 16303 emitImm16(imm); 16304 } else { 16305 setMachineCodes(mi++, (byte) 0x81); 16306 // "register 0x6" is really part of the opcode 16307 emitRegRegOperands(dstReg, GPR.getForOpcode(0x6)); 16308 emitImm16(imm); 16309 } 16310 if (lister != null) lister.RI(miStart, "XOR", dstReg, imm); 16311 } 16312 16313 /** 16314 * Generate a register-displacement--immediate XOR. That is, 16315 * <PRE> 16316 * [dstBase + dstDisp] ~= (word) imm 16317 * </PRE> 16318 * 16319 * @param dstBase the destination register 16320 * @param dstDisp the destination displacement 16321 * @param imm immediate 16322 */ 16323 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16324 public final void emitXOR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 16325 int miStart = mi; 16326 setMachineCodes(mi++, (byte) 0x66); 16327 generateREXprefix(false, null, null, dstBase); 16328 // single byte opcode 16329 if (fits(imm,8)) { 16330 setMachineCodes(mi++, (byte) 0x83); 16331 // "register 0x6" is really part of the opcode 16332 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6)); 16333 emitImm8((byte)imm); 16334 } else { 16335 setMachineCodes(mi++, (byte) 0x81); 16336 // "register 0x6" is really part of the opcode 16337 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6)); 16338 emitImm16(imm); 16339 } 16340 if (lister != null) lister.RDI(miStart, "XOR", dstBase, dstDisp, imm); 16341 } 16342 16343 /** 16344 * Generate a register-offset--immediate XOR. That is, 16345 * <PRE> 16346 * [dstIndex<<dstScale + dstDisp] ~= (word) imm 16347 * </PRE> 16348 * 16349 * @param dstIndex the destination index register 16350 * @param dstScale the destination shift amount 16351 * @param dstDisp the destination displacement 16352 * @param imm immediate 16353 */ 16354 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16355 public final void emitXOR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 16356 int miStart = mi; 16357 setMachineCodes(mi++, (byte) 0x66); 16358 generateREXprefix(false, null, dstIndex, null); 16359 // single byte opcode 16360 if (fits(imm,8)) { 16361 setMachineCodes(mi++, (byte) 0x83); 16362 // "register 0x6" is really part of the opcode 16363 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16364 emitImm8((byte)imm); 16365 } else { 16366 setMachineCodes(mi++, (byte) 0x81); 16367 // "register 0x6" is really part of the opcode 16368 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16369 emitImm16(imm); 16370 } 16371 if (lister != null) lister.RFDI(miStart, "XOR", dstIndex, dstScale, dstDisp, imm); 16372 } 16373 16374 /** 16375 * Generate a absolute--immediate XOR. That is, 16376 * <PRE> 16377 * [dstDisp] ~= (word) imm 16378 * </PRE> 16379 * 16380 * @param dstDisp the destination displacement 16381 * @param imm immediate 16382 */ 16383 public final void emitXOR_Abs_Imm_Word(Address dstDisp, int imm) { 16384 int miStart = mi; 16385 setMachineCodes(mi++, (byte) 0x66); 16386 generateREXprefix(false, null, null, null); 16387 // single byte opcode 16388 if (fits(imm,8)) { 16389 setMachineCodes(mi++, (byte) 0x83); 16390 // "register 0x6" is really part of the opcode 16391 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6)); 16392 emitImm8((byte)imm); 16393 } else { 16394 setMachineCodes(mi++, (byte) 0x81); 16395 // "register 0x6" is really part of the opcode 16396 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6)); 16397 emitImm16(imm); 16398 } 16399 if (lister != null) lister.RAI(miStart, "XOR", dstDisp, imm); 16400 } 16401 16402 /** 16403 * Generate a register-index--immediate XOR. That is, 16404 * <PRE> 16405 * [dstBase + dstIndex<<dstScale + dstDisp] ~= (word) imm 16406 * </PRE> 16407 * 16408 * @param dstBase the destination base register 16409 * @param dstIndex the destination index register 16410 * @param dstScale the destination shift amount 16411 * @param dstDisp the destination displacement 16412 * @param imm immediate 16413 */ 16414 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 16415 public final void emitXOR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 16416 int miStart = mi; 16417 setMachineCodes(mi++, (byte) 0x66); 16418 generateREXprefix(false, null, dstIndex, dstBase); 16419 // single byte opcode 16420 if (fits(imm,8)) { 16421 setMachineCodes(mi++, (byte) 0x83); 16422 // "register 0x6" is really part of the opcode 16423 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16424 emitImm8((byte)imm); 16425 } else { 16426 setMachineCodes(mi++, (byte) 0x81); 16427 // "register 0x6" is really part of the opcode 16428 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16429 emitImm16(imm); 16430 } 16431 if (lister != null) lister.RXDI(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, imm); 16432 } 16433 16434 /** 16435 * Generate a register(indirect)--immediate XOR. That is, 16436 * <PRE> 16437 * [dstBase] ~= (word) imm 16438 * </PRE> 16439 * 16440 * @param dstBase the destination base register 16441 * @param imm immediate 16442 */ 16443 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16444 public final void emitXOR_RegInd_Imm_Word(GPR dstBase, int imm) { 16445 int miStart = mi; 16446 setMachineCodes(mi++, (byte) 0x66); 16447 generateREXprefix(false, null, null, dstBase); 16448 // single byte opcode 16449 if (fits(imm,8)) { 16450 setMachineCodes(mi++, (byte) 0x83); 16451 // "register 0x6" is really part of the opcode 16452 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6)); 16453 emitImm8((byte)imm); 16454 } else { 16455 setMachineCodes(mi++, (byte) 0x81); 16456 // "register 0x6" is really part of the opcode 16457 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6)); 16458 emitImm16(imm); 16459 } 16460 if (lister != null) lister.RNI(miStart, "XOR", dstBase, imm); 16461 } 16462 16463 /** 16464 * Generate a register--immediate XOR. That is, 16465 * <PRE> 16466 * dstReg ~= (quad) imm 16467 * </PRE> 16468 * 16469 * @param dstReg the destination register 16470 * @param imm immediate 16471 */ 16472 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16473 public final void emitXOR_Reg_Imm_Quad(GPR dstReg, int imm) { 16474 int miStart = mi; 16475 // no group 1 to 4 prefix byte 16476 generateREXprefix(true, null, null, dstReg); 16477 // single byte opcode 16478 if (fits(imm,8)) { 16479 setMachineCodes(mi++, (byte) 0x83); 16480 // "register 0x6" is really part of the opcode 16481 emitRegRegOperands(dstReg, GPR.getForOpcode(0x6)); 16482 emitImm8((byte)imm); 16483 } else if (dstReg == EAX) { 16484 setMachineCodes(mi++, (byte) 0x35); 16485 emitImm32(imm); 16486 } else { 16487 setMachineCodes(mi++, (byte) 0x81); 16488 // "register 0x6" is really part of the opcode 16489 emitRegRegOperands(dstReg, GPR.getForOpcode(0x6)); 16490 emitImm32(imm); 16491 } 16492 if (lister != null) lister.RI(miStart, "XOR", dstReg, imm); 16493 } 16494 16495 /** 16496 * Generate a register-displacement--immediate XOR. That is, 16497 * <PRE> 16498 * [dstBase + dstDisp] ~= (quad) imm 16499 * </PRE> 16500 * 16501 * @param dstBase the destination register 16502 * @param dstDisp the destination displacement 16503 * @param imm immediate 16504 */ 16505 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16506 public final void emitXOR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 16507 int miStart = mi; 16508 // no group 1 to 4 prefix byte 16509 generateREXprefix(true, null, null, dstBase); 16510 // single byte opcode 16511 if (fits(imm,8)) { 16512 setMachineCodes(mi++, (byte) 0x83); 16513 // "register 0x6" is really part of the opcode 16514 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6)); 16515 emitImm8((byte)imm); 16516 } else { 16517 setMachineCodes(mi++, (byte) 0x81); 16518 // "register 0x6" is really part of the opcode 16519 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6)); 16520 emitImm32(imm); 16521 } 16522 if (lister != null) lister.RDI(miStart, "XOR", dstBase, dstDisp, imm); 16523 } 16524 16525 /** 16526 * Generate a register-offset--immediate XOR. That is, 16527 * <PRE> 16528 * [dstIndex<<dstScale + dstDisp] ~= (quad) imm 16529 * </PRE> 16530 * 16531 * @param dstIndex the destination index register 16532 * @param dstScale the destination shift amount 16533 * @param dstDisp the destination displacement 16534 * @param imm immediate 16535 */ 16536 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16537 public final void emitXOR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 16538 int miStart = mi; 16539 // no group 1 to 4 prefix byte 16540 generateREXprefix(true, null, dstIndex, null); 16541 // single byte opcode 16542 if (fits(imm,8)) { 16543 setMachineCodes(mi++, (byte) 0x83); 16544 // "register 0x6" is really part of the opcode 16545 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16546 emitImm8((byte)imm); 16547 } else { 16548 setMachineCodes(mi++, (byte) 0x81); 16549 // "register 0x6" is really part of the opcode 16550 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16551 emitImm32(imm); 16552 } 16553 if (lister != null) lister.RFDI(miStart, "XOR", dstIndex, dstScale, dstDisp, imm); 16554 } 16555 16556 /** 16557 * Generate a absolute--immediate XOR. That is, 16558 * <PRE> 16559 * [dstDisp] ~= (quad) imm 16560 * </PRE> 16561 * 16562 * @param dstDisp the destination displacement 16563 * @param imm immediate 16564 */ 16565 public final void emitXOR_Abs_Imm_Quad(Address dstDisp, int imm) { 16566 int miStart = mi; 16567 // no group 1 to 4 prefix byte 16568 generateREXprefix(true, null, null, null); 16569 // single byte opcode 16570 if (fits(imm,8)) { 16571 setMachineCodes(mi++, (byte) 0x83); 16572 // "register 0x6" is really part of the opcode 16573 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6)); 16574 emitImm8((byte)imm); 16575 } else { 16576 setMachineCodes(mi++, (byte) 0x81); 16577 // "register 0x6" is really part of the opcode 16578 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6)); 16579 emitImm32(imm); 16580 } 16581 if (lister != null) lister.RAI(miStart, "XOR", dstDisp, imm); 16582 } 16583 16584 /** 16585 * Generate a register-index--immediate XOR. That is, 16586 * <PRE> 16587 * [dstBase + dstIndex<<dstScale + dstDisp] ~= (quad) imm 16588 * </PRE> 16589 * 16590 * @param dstBase the destination base register 16591 * @param dstIndex the destination index register 16592 * @param dstScale the destination shift amount 16593 * @param dstDisp the destination displacement 16594 * @param imm immediate 16595 */ 16596 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 16597 public final void emitXOR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 16598 int miStart = mi; 16599 // no group 1 to 4 prefix byte 16600 generateREXprefix(true, null, dstIndex, dstBase); 16601 // single byte opcode 16602 if (fits(imm,8)) { 16603 setMachineCodes(mi++, (byte) 0x83); 16604 // "register 0x6" is really part of the opcode 16605 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16606 emitImm8((byte)imm); 16607 } else { 16608 setMachineCodes(mi++, (byte) 0x81); 16609 // "register 0x6" is really part of the opcode 16610 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16611 emitImm32(imm); 16612 } 16613 if (lister != null) lister.RXDI(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, imm); 16614 } 16615 16616 /** 16617 * Generate a register(indirect)--immediate XOR. That is, 16618 * <PRE> 16619 * [dstBase] ~= (quad) imm 16620 * </PRE> 16621 * 16622 * @param dstBase the destination base register 16623 * @param imm immediate 16624 */ 16625 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16626 public final void emitXOR_RegInd_Imm_Quad(GPR dstBase, int imm) { 16627 int miStart = mi; 16628 // no group 1 to 4 prefix byte 16629 generateREXprefix(true, null, null, dstBase); 16630 // single byte opcode 16631 if (fits(imm,8)) { 16632 setMachineCodes(mi++, (byte) 0x83); 16633 // "register 0x6" is really part of the opcode 16634 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6)); 16635 emitImm8((byte)imm); 16636 } else { 16637 setMachineCodes(mi++, (byte) 0x81); 16638 // "register 0x6" is really part of the opcode 16639 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6)); 16640 emitImm32(imm); 16641 } 16642 if (lister != null) lister.RNI(miStart, "XOR", dstBase, imm); 16643 } 16644 16645 /** 16646 * Generate a register--immediate XOR. That is, 16647 * <PRE> 16648 * dstReg ~= (byte) imm 16649 * </PRE> 16650 * 16651 * @param dstReg the destination register 16652 * @param imm immediate 16653 */ 16654 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16655 public final void emitXOR_Reg_Imm_Byte(GPR dstReg, int imm) { 16656 int miStart = mi; 16657 if (dstReg == EAX) { 16658 setMachineCodes(mi++, (byte) 0x34); 16659 emitImm8(imm); 16660 } else { 16661 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 16662 generateREXprefix(false, null, null, dstReg); 16663 setMachineCodes(mi++, (byte) 0x80); 16664 // "register 0x6" is really part of the opcode 16665 emitRegRegOperands(dstReg, GPR.getForOpcode(0x6)); 16666 emitImm8(imm); 16667 } 16668 if (lister != null) lister.RI(miStart, "XOR", dstReg, imm); 16669 } 16670 16671 /** 16672 * Generate a register-displacement--immediate XOR. That is, 16673 * <PRE> 16674 * [dstBase + dstDisp] ~= (byte) imm 16675 * </PRE> 16676 * 16677 * @param dstBase the destination register 16678 * @param dstDisp the destination displacement 16679 * @param imm immediate 16680 */ 16681 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16682 public final void emitXOR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 16683 int miStart = mi; 16684 generateREXprefix(false, null, null, dstBase); 16685 setMachineCodes(mi++, (byte) 0x80); 16686 // "register 0x6" is really part of the opcode 16687 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6)); 16688 emitImm8(imm); 16689 if (lister != null) lister.RDI(miStart, "XOR", dstBase, dstDisp, imm); 16690 } 16691 16692 /** 16693 * Generate a register-index--immediate XOR. That is, 16694 * <PRE> 16695 * [dstBase + dstIndex<<scale + dstDisp] ~= (byte) imm 16696 * </PRE> 16697 * 16698 * @param dstBase the destination base register 16699 * @param dstIndex the destination index register 16700 * @param dstScale the destination shift amount 16701 * @param dstDisp the destination displacement 16702 * @param imm immediate 16703 */ 16704 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 16705 public final void emitXOR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 16706 int miStart = mi; 16707 generateREXprefix(false, null, dstIndex, dstBase); 16708 setMachineCodes(mi++, (byte) 0x80); 16709 // "register 0x6" is really part of the opcode 16710 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16711 emitImm8(imm); 16712 if (lister != null) lister.RXDI(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, imm); 16713 } 16714 16715 /** 16716 * Generate a register-offset--immediate XOR. That is, 16717 * <PRE> 16718 * [dstIndex<<dstScale + dstDisp] ~= (byte) imm 16719 * </PRE> 16720 * 16721 * @param dstIndex the destination index register 16722 * @param dstScale the destination shift amount 16723 * @param dstDisp the destination displacement 16724 * @param imm immediate 16725 */ 16726 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16727 public final void emitXOR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 16728 int miStart = mi; 16729 generateREXprefix(false, null, dstIndex, null); 16730 setMachineCodes(mi++, (byte) 0x80); 16731 // "register 0x6" is really part of the opcode 16732 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 16733 emitImm8(imm); 16734 if (lister != null) lister.RFDI(miStart, "XOR", dstIndex, dstScale, dstDisp, imm); 16735 } 16736 16737 /** 16738 * Generate a absolute--immediate XOR. That is, 16739 * <PRE> 16740 * [dstDisp] ~= (byte) imm 16741 * </PRE> 16742 * 16743 * @param dstDisp the destination displacement 16744 * @param imm immediate 16745 */ 16746 public final void emitXOR_Abs_Imm_Byte(Address dstDisp, int imm) { 16747 int miStart = mi; 16748 generateREXprefix(false, null, null, null); 16749 setMachineCodes(mi++, (byte) 0x80); 16750 // "register 0x6" is really part of the opcode 16751 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6)); 16752 emitImm8(imm); 16753 if (lister != null) lister.RAI(miStart, "XOR", dstDisp, imm); 16754 } 16755 16756 /** 16757 * Generate a register(indirect)--immediate XOR. That is, 16758 * <PRE> 16759 * [dstBase] ~= (byte) imm 16760 * </PRE> 16761 * 16762 * @param dstBase the destination base register 16763 * @param imm immediate 16764 */ 16765 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 16766 public final void emitXOR_RegInd_Imm_Byte(GPR dstBase, int imm) { 16767 int miStart = mi; 16768 generateREXprefix(false, null, null, dstBase); 16769 setMachineCodes(mi++, (byte) 0x80); 16770 // "register 0x6" is really part of the opcode 16771 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6)); 16772 emitImm8(imm); 16773 if (lister != null) lister.RNI(miStart, "XOR", dstBase, imm); 16774 } 16775 16776 /** 16777 * Generate a register(indirect)--register BT. That is, 16778 * <PRE> 16779 * [dstBase] BT= srcReg 16780 * </PRE> 16781 * 16782 * @param dstBase the destination base 16783 * @param srcReg the source register 16784 */ 16785 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 16786 public final void emitBT_RegInd_Reg(GPR dstBase, GPR srcReg) { 16787 int miStart = mi; 16788 // no group 1 to 4 prefix byte 16789 generateREXprefix(false, srcReg, null, dstBase); 16790 setMachineCodes(mi++, (byte) 0x0F); 16791 setMachineCodes(mi++, (byte) 0xA3); 16792 emitRegIndirectRegOperands(dstBase, srcReg); 16793 if (lister != null) lister.RNR(miStart, "BT", dstBase, srcReg); 16794 } 16795 16796 /** 16797 * Generate a register-offset--register BT. That is, 16798 * <PRE> 16799 * [dstReg<<dstScale + dstDisp] BT= srcReg 16800 * </PRE> 16801 * 16802 * @param dstIndex the destination index register 16803 * @param dstScale the destination shift amount 16804 * @param dstDisp the destination displacement 16805 * @param srcReg the source register 16806 */ 16807 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 16808 public final void emitBT_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 16809 int miStart = mi; 16810 // no group 1 to 4 prefix byte 16811 generateREXprefix(false, srcReg, dstIndex, null); 16812 setMachineCodes(mi++, (byte) 0x0F); 16813 setMachineCodes(mi++, (byte) 0xA3); 16814 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 16815 if (lister != null) lister.RFDR(miStart, "BT", dstIndex, dstScale, dstDisp, srcReg); 16816 } 16817 16818 /** 16819 * Generate a absolute--register BT. That is, 16820 * <PRE> 16821 * [dstDisp] BT= srcReg 16822 * </PRE> 16823 * 16824 * @param dstDisp the destination address 16825 * @param srcReg the source register 16826 */ 16827 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 16828 public final void emitBT_Abs_Reg(Address dstDisp, GPR srcReg) { 16829 int miStart = mi; 16830 // no group 1 to 4 prefix byte 16831 generateREXprefix(false, srcReg, null, null); 16832 setMachineCodes(mi++, (byte) 0x0F); 16833 setMachineCodes(mi++, (byte) 0xA3); 16834 emitAbsRegOperands(dstDisp, srcReg); 16835 if (lister != null) lister.RAR(miStart, "BT", dstDisp, srcReg); 16836 } 16837 16838 /** 16839 * Generate a register-index--register BT. That is, 16840 * <PRE> 16841 * [dstBase + dstIndex<<dstScale + dstDisp] BT= srcReg 16842 * </PRE> 16843 * 16844 * @param dstBase the base register 16845 * @param dstIndex the destination index register 16846 * @param dstScale the destination shift amount 16847 * @param dstDisp the destination displacement 16848 * @param srcReg the source register 16849 */ 16850 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 16851 public final void emitBT_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 16852 int miStart = mi; 16853 // no group 1 to 4 prefix byte 16854 generateREXprefix(false, srcReg, dstIndex, dstBase); 16855 setMachineCodes(mi++, (byte) 0x0F); 16856 setMachineCodes(mi++, (byte) 0xA3); 16857 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 16858 if (lister != null) lister.RXDR(miStart, "BT", dstBase, dstIndex, dstScale, dstDisp, srcReg); 16859 } 16860 16861 /** 16862 * Generate a register-displacement--register BT. That is, 16863 * <PRE> 16864 * [dstBase + dstDisp] BT= srcReg 16865 * </PRE> 16866 * 16867 * @param dstBase the base register 16868 * @param dstDisp the destination displacement 16869 * @param srcReg the source register 16870 */ 16871 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 16872 public final void emitBT_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 16873 int miStart = mi; 16874 // no group 1 to 4 prefix byte 16875 generateREXprefix(false, srcReg, null, dstBase); 16876 setMachineCodes(mi++, (byte) 0x0F); 16877 setMachineCodes(mi++, (byte) 0xA3); 16878 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 16879 if (lister != null) lister.RDR(miStart, "BT", dstBase, dstDisp, srcReg); 16880 } 16881 16882 /** 16883 * Generate a register--register BT. That is, 16884 * <PRE> 16885 * dstReg BT= srcReg 16886 * </PRE> 16887 * 16888 * @param dstReg the destination register 16889 * @param srcReg the source register 16890 */ 16891 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 16892 public final void emitBT_Reg_Reg(GPR dstReg, GPR srcReg) { 16893 int miStart = mi; 16894 // no group 1 to 4 prefix byte 16895 generateREXprefix(false, srcReg, null, dstReg); 16896 setMachineCodes(mi++, (byte) 0x0F); 16897 setMachineCodes(mi++, (byte) 0xA3); 16898 emitRegRegOperands(dstReg, srcReg); 16899 if (lister != null) lister.RR(miStart, "BT", dstReg, srcReg); 16900 } 16901 16902 /** 16903 * Generate a register(indirect)--register BT. That is, 16904 * <PRE> 16905 * [dstBase] BT= (quad) srcReg 16906 * </PRE> 16907 * 16908 * @param dstBase the destination base 16909 * @param srcReg the source register 16910 */ 16911 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 16912 public final void emitBT_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 16913 int miStart = mi; 16914 // no group 1 to 4 prefix byte 16915 generateREXprefix(true, srcReg, null, dstBase); 16916 setMachineCodes(mi++, (byte) 0x0F); 16917 setMachineCodes(mi++, (byte) 0xA3); 16918 emitRegIndirectRegOperands(dstBase, srcReg); 16919 if (lister != null) lister.RNR(miStart, "BT", dstBase, srcReg); 16920 } 16921 16922 /** 16923 * Generate a register-offset--register BT. That is, 16924 * <PRE> 16925 * [dstReg<<dstScale + dstDisp] BT= (quad) srcReg 16926 * </PRE> 16927 * 16928 * @param dstIndex the destination index register 16929 * @param dstScale the destination shift amount 16930 * @param dstDisp the destination displacement 16931 * @param srcReg the source register 16932 */ 16933 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 16934 public final void emitBT_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 16935 int miStart = mi; 16936 // no group 1 to 4 prefix byte 16937 generateREXprefix(true, srcReg, dstIndex, null); 16938 setMachineCodes(mi++, (byte) 0x0F); 16939 setMachineCodes(mi++, (byte) 0xA3); 16940 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 16941 if (lister != null) lister.RFDR(miStart, "BT", dstIndex, dstScale, dstDisp, srcReg); 16942 } 16943 16944 /** 16945 * Generate a absolute--register BT. That is, 16946 * <PRE> 16947 * [dstDisp] BT= (quad) srcReg 16948 * </PRE> 16949 * 16950 * @param dstDisp the destination address 16951 * @param srcReg the source register 16952 */ 16953 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 16954 public final void emitBT_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 16955 int miStart = mi; 16956 // no group 1 to 4 prefix byte 16957 generateREXprefix(true, srcReg, null, null); 16958 setMachineCodes(mi++, (byte) 0x0F); 16959 setMachineCodes(mi++, (byte) 0xA3); 16960 emitAbsRegOperands(dstDisp, srcReg); 16961 if (lister != null) lister.RAR(miStart, "BT", dstDisp, srcReg); 16962 } 16963 16964 /** 16965 * Generate a register-index--register BT. That is, 16966 * <PRE> 16967 * [dstBase + dstIndex<<dstScale + dstDisp] BT= (quad) srcReg 16968 * </PRE> 16969 * 16970 * @param dstBase the base register 16971 * @param dstIndex the destination index register 16972 * @param dstScale the destination shift amount 16973 * @param dstDisp the destination displacement 16974 * @param srcReg the source register 16975 */ 16976 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 16977 public final void emitBT_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 16978 int miStart = mi; 16979 // no group 1 to 4 prefix byte 16980 generateREXprefix(true, srcReg, dstIndex, dstBase); 16981 setMachineCodes(mi++, (byte) 0x0F); 16982 setMachineCodes(mi++, (byte) 0xA3); 16983 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 16984 if (lister != null) lister.RXDR(miStart, "BT", dstBase, dstIndex, dstScale, dstDisp, srcReg); 16985 } 16986 16987 /** 16988 * Generate a register-displacement--register BT. That is, 16989 * <PRE> 16990 * [dstBase + dstDisp] BT= (quad) srcReg 16991 * </PRE> 16992 * 16993 * @param dstBase the base register 16994 * @param dstDisp the destination displacement 16995 * @param srcReg the source register 16996 */ 16997 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 16998 public final void emitBT_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 16999 int miStart = mi; 17000 // no group 1 to 4 prefix byte 17001 generateREXprefix(true, srcReg, null, dstBase); 17002 setMachineCodes(mi++, (byte) 0x0F); 17003 setMachineCodes(mi++, (byte) 0xA3); 17004 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 17005 if (lister != null) lister.RDR(miStart, "BT", dstBase, dstDisp, srcReg); 17006 } 17007 17008 /** 17009 * Generate a register--register BT. That is, 17010 * <PRE> 17011 * dstReg BT= (quad) srcReg 17012 * </PRE> 17013 * 17014 * @param dstReg the destination register 17015 * @param srcReg the source register 17016 */ 17017 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 17018 public final void emitBT_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 17019 int miStart = mi; 17020 // no group 1 to 4 prefix byte 17021 generateREXprefix(true, srcReg, null, dstReg); 17022 setMachineCodes(mi++, (byte) 0x0F); 17023 setMachineCodes(mi++, (byte) 0xA3); 17024 emitRegRegOperands(dstReg, srcReg); 17025 if (lister != null) lister.RR(miStart, "BT", dstReg, srcReg); 17026 } 17027 17028 /** 17029 * Generate a register--immediate BT. That is, 17030 * <PRE> 17031 * dstReg BT= imm 17032 * </PRE> 17033 * 17034 * @param dstReg the destination register 17035 * @param imm immediate 17036 */ 17037 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17038 public final void emitBT_Reg_Imm(GPR dstReg, int imm) { 17039 int miStart = mi; 17040 // no group 1 to 4 prefix byte 17041 generateREXprefix(false, null, null, dstReg); 17042 setMachineCodes(mi++, (byte) 0x0F); 17043 if (fits(imm,8)) { 17044 setMachineCodes(mi++, (byte) 0xBA); 17045 // "register 0x4" is really part of the opcode 17046 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 17047 emitImm8((byte)imm); 17048 } else { 17049 throw new InternalError("Data too large for BT instruction"); 17050 } 17051 if (lister != null) lister.RI(miStart, "BT", dstReg, imm); 17052 } 17053 17054 /** 17055 * Generate a register-displacement--immediate BT. That is, 17056 * <PRE> 17057 * [dstBase + dstDisp] BT= imm 17058 * </PRE> 17059 * 17060 * @param dstBase the destination register 17061 * @param dstDisp the destination displacement 17062 * @param imm immediate 17063 */ 17064 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17065 public final void emitBT_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 17066 int miStart = mi; 17067 // no group 1 to 4 prefix byte 17068 generateREXprefix(false, null, null, dstBase); 17069 setMachineCodes(mi++, (byte) 0x0F); 17070 if (fits(imm,8)) { 17071 setMachineCodes(mi++, (byte) 0xBA); 17072 // "register 0x4" is really part of the opcode 17073 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 17074 emitImm8((byte)imm); 17075 } else { 17076 throw new InternalError("Data too large for BT instruction"); 17077 } 17078 if (lister != null) lister.RDI(miStart, "BT", dstBase, dstDisp, imm); 17079 } 17080 17081 /** 17082 * Generate a register-offset--immediate BT. That is, 17083 * <PRE> 17084 * [dstIndex<<dstScale + dstDisp] BT= imm 17085 * </PRE> 17086 * 17087 * @param dstIndex the destination index register 17088 * @param dstScale the destination shift amount 17089 * @param dstDisp the destination displacement 17090 * @param imm immediate 17091 */ 17092 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17093 public final void emitBT_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 17094 int miStart = mi; 17095 // no group 1 to 4 prefix byte 17096 generateREXprefix(false, null, dstIndex, null); 17097 setMachineCodes(mi++, (byte) 0x0F); 17098 if (fits(imm,8)) { 17099 setMachineCodes(mi++, (byte) 0xBA); 17100 // "register 0x4" is really part of the opcode 17101 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 17102 emitImm8((byte)imm); 17103 } else { 17104 throw new InternalError("Data too large for BT instruction"); 17105 } 17106 if (lister != null) lister.RFDI(miStart, "BT", dstIndex, dstScale, dstDisp, imm); 17107 } 17108 17109 /** 17110 * Generate a absolute--immediate BT. That is, 17111 * <PRE> 17112 * [dstDisp] BT= imm 17113 * </PRE> 17114 * 17115 * @param dstDisp the destination displacement 17116 * @param imm immediate 17117 */ 17118 public final void emitBT_Abs_Imm(Address dstDisp, int imm) { 17119 int miStart = mi; 17120 // no group 1 to 4 prefix byte 17121 generateREXprefix(false, null, null, null); 17122 setMachineCodes(mi++, (byte) 0x0F); 17123 if (fits(imm,8)) { 17124 setMachineCodes(mi++, (byte) 0xBA); 17125 // "register 0x4" is really part of the opcode 17126 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 17127 emitImm8((byte)imm); 17128 } else { 17129 throw new InternalError("Data too large for BT instruction"); 17130 } 17131 if (lister != null) lister.RAI(miStart, "BT", dstDisp, imm); 17132 } 17133 17134 /** 17135 * Generate a register-index--immediate BT. That is, 17136 * <PRE> 17137 * [dstBase + dstIndex<<dstScale + dstDisp] BT= imm 17138 * </PRE> 17139 * 17140 * @param dstBase the destination base register 17141 * @param dstIndex the destination index register 17142 * @param dstScale the destination shift amount 17143 * @param dstDisp the destination displacement 17144 * @param imm immediate 17145 */ 17146 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 17147 public final void emitBT_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 17148 int miStart = mi; 17149 // no group 1 to 4 prefix byte 17150 generateREXprefix(false, null, dstIndex, dstBase); 17151 setMachineCodes(mi++, (byte) 0x0F); 17152 if (fits(imm,8)) { 17153 setMachineCodes(mi++, (byte) 0xBA); 17154 // "register 0x4" is really part of the opcode 17155 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 17156 emitImm8((byte)imm); 17157 } else { 17158 throw new InternalError("Data too large for BT instruction"); 17159 } 17160 if (lister != null) lister.RXDI(miStart, "BT", dstBase, dstIndex, dstScale, dstDisp, imm); 17161 } 17162 17163 /** 17164 * Generate a register(indirect)--immediate BT. That is, 17165 * <PRE> 17166 * [dstBase] BT= imm 17167 * </PRE> 17168 * 17169 * @param dstBase the destination base register 17170 * @param imm immediate 17171 */ 17172 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17173 public final void emitBT_RegInd_Imm(GPR dstBase, int imm) { 17174 int miStart = mi; 17175 // no group 1 to 4 prefix byte 17176 generateREXprefix(false, null, null, dstBase); 17177 setMachineCodes(mi++, (byte) 0x0F); 17178 if (fits(imm,8)) { 17179 setMachineCodes(mi++, (byte) 0xBA); 17180 // "register 0x4" is really part of the opcode 17181 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 17182 emitImm8((byte)imm); 17183 } else { 17184 throw new InternalError("Data too large for BT instruction"); 17185 } 17186 if (lister != null) lister.RNI(miStart, "BT", dstBase, imm); 17187 } 17188 17189 /** 17190 * Generate a register--immediate BT. That is, 17191 * <PRE> 17192 * dstReg BT= (quad) imm 17193 * </PRE> 17194 * 17195 * @param dstReg the destination register 17196 * @param imm immediate 17197 */ 17198 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17199 public final void emitBT_Reg_Imm_Quad(GPR dstReg, int imm) { 17200 int miStart = mi; 17201 // no group 1 to 4 prefix byte 17202 generateREXprefix(true, null, null, dstReg); 17203 setMachineCodes(mi++, (byte) 0x0F); 17204 if (fits(imm,8)) { 17205 setMachineCodes(mi++, (byte) 0xBA); 17206 // "register 0x4" is really part of the opcode 17207 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 17208 emitImm8((byte)imm); 17209 } else { 17210 throw new InternalError("Data too large for BT instruction"); 17211 } 17212 if (lister != null) lister.RI(miStart, "BT", dstReg, imm); 17213 } 17214 17215 /** 17216 * Generate a register-displacement--immediate BT. That is, 17217 * <PRE> 17218 * [dstBase + dstDisp] BT= (quad) imm 17219 * </PRE> 17220 * 17221 * @param dstBase the destination register 17222 * @param dstDisp the destination displacement 17223 * @param imm immediate 17224 */ 17225 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17226 public final void emitBT_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 17227 int miStart = mi; 17228 // no group 1 to 4 prefix byte 17229 generateREXprefix(true, null, null, dstBase); 17230 setMachineCodes(mi++, (byte) 0x0F); 17231 if (fits(imm,8)) { 17232 setMachineCodes(mi++, (byte) 0xBA); 17233 // "register 0x4" is really part of the opcode 17234 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 17235 emitImm8((byte)imm); 17236 } else { 17237 throw new InternalError("Data too large for BT instruction"); 17238 } 17239 if (lister != null) lister.RDI(miStart, "BT", dstBase, dstDisp, imm); 17240 } 17241 17242 /** 17243 * Generate a register-offset--immediate BT. That is, 17244 * <PRE> 17245 * [dstIndex<<dstScale + dstDisp] BT= (quad) imm 17246 * </PRE> 17247 * 17248 * @param dstIndex the destination index register 17249 * @param dstScale the destination shift amount 17250 * @param dstDisp the destination displacement 17251 * @param imm immediate 17252 */ 17253 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17254 public final void emitBT_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 17255 int miStart = mi; 17256 // no group 1 to 4 prefix byte 17257 generateREXprefix(true, null, dstIndex, null); 17258 setMachineCodes(mi++, (byte) 0x0F); 17259 if (fits(imm,8)) { 17260 setMachineCodes(mi++, (byte) 0xBA); 17261 // "register 0x4" is really part of the opcode 17262 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 17263 emitImm8((byte)imm); 17264 } else { 17265 throw new InternalError("Data too large for BT instruction"); 17266 } 17267 if (lister != null) lister.RFDI(miStart, "BT", dstIndex, dstScale, dstDisp, imm); 17268 } 17269 17270 /** 17271 * Generate a absolute--immediate BT. That is, 17272 * <PRE> 17273 * [dstDisp] BT= (quad) imm 17274 * </PRE> 17275 * 17276 * @param dstDisp the destination displacement 17277 * @param imm immediate 17278 */ 17279 public final void emitBT_Abs_Imm_Quad(Address dstDisp, int imm) { 17280 int miStart = mi; 17281 // no group 1 to 4 prefix byte 17282 generateREXprefix(true, null, null, null); 17283 setMachineCodes(mi++, (byte) 0x0F); 17284 if (fits(imm,8)) { 17285 setMachineCodes(mi++, (byte) 0xBA); 17286 // "register 0x4" is really part of the opcode 17287 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 17288 emitImm8((byte)imm); 17289 } else { 17290 throw new InternalError("Data too large for BT instruction"); 17291 } 17292 if (lister != null) lister.RAI(miStart, "BT", dstDisp, imm); 17293 } 17294 17295 /** 17296 * Generate a register-index--immediate BT. That is, 17297 * <PRE> 17298 * [dstBase + dstIndex<<dstScale + dstDisp] BT= (quad) imm 17299 * </PRE> 17300 * 17301 * @param dstBase the destination base register 17302 * @param dstIndex the destination index register 17303 * @param dstScale the destination shift amount 17304 * @param dstDisp the destination displacement 17305 * @param imm immediate 17306 */ 17307 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 17308 public final void emitBT_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 17309 int miStart = mi; 17310 // no group 1 to 4 prefix byte 17311 generateREXprefix(true, null, dstIndex, dstBase); 17312 setMachineCodes(mi++, (byte) 0x0F); 17313 if (fits(imm,8)) { 17314 setMachineCodes(mi++, (byte) 0xBA); 17315 // "register 0x4" is really part of the opcode 17316 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 17317 emitImm8((byte)imm); 17318 } else { 17319 throw new InternalError("Data too large for BT instruction"); 17320 } 17321 if (lister != null) lister.RXDI(miStart, "BT", dstBase, dstIndex, dstScale, dstDisp, imm); 17322 } 17323 17324 /** 17325 * Generate a register(indirect)--immediate BT. That is, 17326 * <PRE> 17327 * [dstBase] BT= (quad) imm 17328 * </PRE> 17329 * 17330 * @param dstBase the destination base register 17331 * @param imm immediate 17332 */ 17333 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17334 public final void emitBT_RegInd_Imm_Quad(GPR dstBase, int imm) { 17335 int miStart = mi; 17336 // no group 1 to 4 prefix byte 17337 generateREXprefix(true, null, null, dstBase); 17338 setMachineCodes(mi++, (byte) 0x0F); 17339 if (fits(imm,8)) { 17340 setMachineCodes(mi++, (byte) 0xBA); 17341 // "register 0x4" is really part of the opcode 17342 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 17343 emitImm8((byte)imm); 17344 } else { 17345 throw new InternalError("Data too large for BT instruction"); 17346 } 17347 if (lister != null) lister.RNI(miStart, "BT", dstBase, imm); 17348 } 17349 17350 /** 17351 * Generate a register(indirect)--register BTC. That is, 17352 * <PRE> 17353 * [dstBase] BTC= srcReg 17354 * </PRE> 17355 * 17356 * @param dstBase the destination base 17357 * @param srcReg the source register 17358 */ 17359 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 17360 public final void emitBTC_RegInd_Reg(GPR dstBase, GPR srcReg) { 17361 int miStart = mi; 17362 // no group 1 to 4 prefix byte 17363 generateREXprefix(false, srcReg, null, dstBase); 17364 setMachineCodes(mi++, (byte) 0x0F); 17365 setMachineCodes(mi++, (byte) 0xBB); 17366 emitRegIndirectRegOperands(dstBase, srcReg); 17367 if (lister != null) lister.RNR(miStart, "BTC", dstBase, srcReg); 17368 } 17369 17370 /** 17371 * Generate a register-offset--register BTC. That is, 17372 * <PRE> 17373 * [dstReg<<dstScale + dstDisp] BTC= srcReg 17374 * </PRE> 17375 * 17376 * @param dstIndex the destination index register 17377 * @param dstScale the destination shift amount 17378 * @param dstDisp the destination displacement 17379 * @param srcReg the source register 17380 */ 17381 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 17382 public final void emitBTC_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 17383 int miStart = mi; 17384 // no group 1 to 4 prefix byte 17385 generateREXprefix(false, srcReg, dstIndex, null); 17386 setMachineCodes(mi++, (byte) 0x0F); 17387 setMachineCodes(mi++, (byte) 0xBB); 17388 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 17389 if (lister != null) lister.RFDR(miStart, "BTC", dstIndex, dstScale, dstDisp, srcReg); 17390 } 17391 17392 /** 17393 * Generate a absolute--register BTC. That is, 17394 * <PRE> 17395 * [dstDisp] BTC= srcReg 17396 * </PRE> 17397 * 17398 * @param dstDisp the destination address 17399 * @param srcReg the source register 17400 */ 17401 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 17402 public final void emitBTC_Abs_Reg(Address dstDisp, GPR srcReg) { 17403 int miStart = mi; 17404 // no group 1 to 4 prefix byte 17405 generateREXprefix(false, srcReg, null, null); 17406 setMachineCodes(mi++, (byte) 0x0F); 17407 setMachineCodes(mi++, (byte) 0xBB); 17408 emitAbsRegOperands(dstDisp, srcReg); 17409 if (lister != null) lister.RAR(miStart, "BTC", dstDisp, srcReg); 17410 } 17411 17412 /** 17413 * Generate a register-index--register BTC. That is, 17414 * <PRE> 17415 * [dstBase + dstIndex<<dstScale + dstDisp] BTC= srcReg 17416 * </PRE> 17417 * 17418 * @param dstBase the base register 17419 * @param dstIndex the destination index register 17420 * @param dstScale the destination shift amount 17421 * @param dstDisp the destination displacement 17422 * @param srcReg the source register 17423 */ 17424 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 17425 public final void emitBTC_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 17426 int miStart = mi; 17427 // no group 1 to 4 prefix byte 17428 generateREXprefix(false, srcReg, dstIndex, dstBase); 17429 setMachineCodes(mi++, (byte) 0x0F); 17430 setMachineCodes(mi++, (byte) 0xBB); 17431 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 17432 if (lister != null) lister.RXDR(miStart, "BTC", dstBase, dstIndex, dstScale, dstDisp, srcReg); 17433 } 17434 17435 /** 17436 * Generate a register-displacement--register BTC. That is, 17437 * <PRE> 17438 * [dstBase + dstDisp] BTC= srcReg 17439 * </PRE> 17440 * 17441 * @param dstBase the base register 17442 * @param dstDisp the destination displacement 17443 * @param srcReg the source register 17444 */ 17445 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 17446 public final void emitBTC_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 17447 int miStart = mi; 17448 // no group 1 to 4 prefix byte 17449 generateREXprefix(false, srcReg, null, dstBase); 17450 setMachineCodes(mi++, (byte) 0x0F); 17451 setMachineCodes(mi++, (byte) 0xBB); 17452 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 17453 if (lister != null) lister.RDR(miStart, "BTC", dstBase, dstDisp, srcReg); 17454 } 17455 17456 /** 17457 * Generate a register--register BTC. That is, 17458 * <PRE> 17459 * dstReg BTC= srcReg 17460 * </PRE> 17461 * 17462 * @param dstReg the destination register 17463 * @param srcReg the source register 17464 */ 17465 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 17466 public final void emitBTC_Reg_Reg(GPR dstReg, GPR srcReg) { 17467 int miStart = mi; 17468 // no group 1 to 4 prefix byte 17469 generateREXprefix(false, srcReg, null, dstReg); 17470 setMachineCodes(mi++, (byte) 0x0F); 17471 setMachineCodes(mi++, (byte) 0xBB); 17472 emitRegRegOperands(dstReg, srcReg); 17473 if (lister != null) lister.RR(miStart, "BTC", dstReg, srcReg); 17474 } 17475 17476 /** 17477 * Generate a register(indirect)--register BTC. That is, 17478 * <PRE> 17479 * [dstBase] BTC= (quad) srcReg 17480 * </PRE> 17481 * 17482 * @param dstBase the destination base 17483 * @param srcReg the source register 17484 */ 17485 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 17486 public final void emitBTC_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 17487 int miStart = mi; 17488 // no group 1 to 4 prefix byte 17489 generateREXprefix(true, srcReg, null, dstBase); 17490 setMachineCodes(mi++, (byte) 0x0F); 17491 setMachineCodes(mi++, (byte) 0xBB); 17492 emitRegIndirectRegOperands(dstBase, srcReg); 17493 if (lister != null) lister.RNR(miStart, "BTC", dstBase, srcReg); 17494 } 17495 17496 /** 17497 * Generate a register-offset--register BTC. That is, 17498 * <PRE> 17499 * [dstReg<<dstScale + dstDisp] BTC= (quad) srcReg 17500 * </PRE> 17501 * 17502 * @param dstIndex the destination index register 17503 * @param dstScale the destination shift amount 17504 * @param dstDisp the destination displacement 17505 * @param srcReg the source register 17506 */ 17507 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 17508 public final void emitBTC_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 17509 int miStart = mi; 17510 // no group 1 to 4 prefix byte 17511 generateREXprefix(true, srcReg, dstIndex, null); 17512 setMachineCodes(mi++, (byte) 0x0F); 17513 setMachineCodes(mi++, (byte) 0xBB); 17514 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 17515 if (lister != null) lister.RFDR(miStart, "BTC", dstIndex, dstScale, dstDisp, srcReg); 17516 } 17517 17518 /** 17519 * Generate a absolute--register BTC. That is, 17520 * <PRE> 17521 * [dstDisp] BTC= (quad) srcReg 17522 * </PRE> 17523 * 17524 * @param dstDisp the destination address 17525 * @param srcReg the source register 17526 */ 17527 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 17528 public final void emitBTC_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 17529 int miStart = mi; 17530 // no group 1 to 4 prefix byte 17531 generateREXprefix(true, srcReg, null, null); 17532 setMachineCodes(mi++, (byte) 0x0F); 17533 setMachineCodes(mi++, (byte) 0xBB); 17534 emitAbsRegOperands(dstDisp, srcReg); 17535 if (lister != null) lister.RAR(miStart, "BTC", dstDisp, srcReg); 17536 } 17537 17538 /** 17539 * Generate a register-index--register BTC. That is, 17540 * <PRE> 17541 * [dstBase + dstIndex<<dstScale + dstDisp] BTC= (quad) srcReg 17542 * </PRE> 17543 * 17544 * @param dstBase the base register 17545 * @param dstIndex the destination index register 17546 * @param dstScale the destination shift amount 17547 * @param dstDisp the destination displacement 17548 * @param srcReg the source register 17549 */ 17550 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 17551 public final void emitBTC_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 17552 int miStart = mi; 17553 // no group 1 to 4 prefix byte 17554 generateREXprefix(true, srcReg, dstIndex, dstBase); 17555 setMachineCodes(mi++, (byte) 0x0F); 17556 setMachineCodes(mi++, (byte) 0xBB); 17557 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 17558 if (lister != null) lister.RXDR(miStart, "BTC", dstBase, dstIndex, dstScale, dstDisp, srcReg); 17559 } 17560 17561 /** 17562 * Generate a register-displacement--register BTC. That is, 17563 * <PRE> 17564 * [dstBase + dstDisp] BTC= (quad) srcReg 17565 * </PRE> 17566 * 17567 * @param dstBase the base register 17568 * @param dstDisp the destination displacement 17569 * @param srcReg the source register 17570 */ 17571 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 17572 public final void emitBTC_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 17573 int miStart = mi; 17574 // no group 1 to 4 prefix byte 17575 generateREXprefix(true, srcReg, null, dstBase); 17576 setMachineCodes(mi++, (byte) 0x0F); 17577 setMachineCodes(mi++, (byte) 0xBB); 17578 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 17579 if (lister != null) lister.RDR(miStart, "BTC", dstBase, dstDisp, srcReg); 17580 } 17581 17582 /** 17583 * Generate a register--register BTC. That is, 17584 * <PRE> 17585 * dstReg BTC= (quad) srcReg 17586 * </PRE> 17587 * 17588 * @param dstReg the destination register 17589 * @param srcReg the source register 17590 */ 17591 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 17592 public final void emitBTC_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 17593 int miStart = mi; 17594 // no group 1 to 4 prefix byte 17595 generateREXprefix(true, srcReg, null, dstReg); 17596 setMachineCodes(mi++, (byte) 0x0F); 17597 setMachineCodes(mi++, (byte) 0xBB); 17598 emitRegRegOperands(dstReg, srcReg); 17599 if (lister != null) lister.RR(miStart, "BTC", dstReg, srcReg); 17600 } 17601 17602 /** 17603 * Generate a register--immediate BTC. That is, 17604 * <PRE> 17605 * dstReg BTC= imm 17606 * </PRE> 17607 * 17608 * @param dstReg the destination register 17609 * @param imm immediate 17610 */ 17611 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17612 public final void emitBTC_Reg_Imm(GPR dstReg, int imm) { 17613 int miStart = mi; 17614 // no group 1 to 4 prefix byte 17615 generateREXprefix(false, null, null, dstReg); 17616 setMachineCodes(mi++, (byte) 0x0F); 17617 if (fits(imm,8)) { 17618 setMachineCodes(mi++, (byte) 0xBA); 17619 // "register 0x7" is really part of the opcode 17620 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 17621 emitImm8((byte)imm); 17622 } else { 17623 throw new InternalError("Data too large for BTC instruction"); 17624 } 17625 if (lister != null) lister.RI(miStart, "BTC", dstReg, imm); 17626 } 17627 17628 /** 17629 * Generate a register-displacement--immediate BTC. That is, 17630 * <PRE> 17631 * [dstBase + dstDisp] BTC= imm 17632 * </PRE> 17633 * 17634 * @param dstBase the destination register 17635 * @param dstDisp the destination displacement 17636 * @param imm immediate 17637 */ 17638 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17639 public final void emitBTC_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 17640 int miStart = mi; 17641 // no group 1 to 4 prefix byte 17642 generateREXprefix(false, null, null, dstBase); 17643 setMachineCodes(mi++, (byte) 0x0F); 17644 if (fits(imm,8)) { 17645 setMachineCodes(mi++, (byte) 0xBA); 17646 // "register 0x7" is really part of the opcode 17647 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 17648 emitImm8((byte)imm); 17649 } else { 17650 throw new InternalError("Data too large for BTC instruction"); 17651 } 17652 if (lister != null) lister.RDI(miStart, "BTC", dstBase, dstDisp, imm); 17653 } 17654 17655 /** 17656 * Generate a register-offset--immediate BTC. That is, 17657 * <PRE> 17658 * [dstIndex<<dstScale + dstDisp] BTC= imm 17659 * </PRE> 17660 * 17661 * @param dstIndex the destination index register 17662 * @param dstScale the destination shift amount 17663 * @param dstDisp the destination displacement 17664 * @param imm immediate 17665 */ 17666 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17667 public final void emitBTC_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 17668 int miStart = mi; 17669 // no group 1 to 4 prefix byte 17670 generateREXprefix(false, null, dstIndex, null); 17671 setMachineCodes(mi++, (byte) 0x0F); 17672 if (fits(imm,8)) { 17673 setMachineCodes(mi++, (byte) 0xBA); 17674 // "register 0x7" is really part of the opcode 17675 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 17676 emitImm8((byte)imm); 17677 } else { 17678 throw new InternalError("Data too large for BTC instruction"); 17679 } 17680 if (lister != null) lister.RFDI(miStart, "BTC", dstIndex, dstScale, dstDisp, imm); 17681 } 17682 17683 /** 17684 * Generate a absolute--immediate BTC. That is, 17685 * <PRE> 17686 * [dstDisp] BTC= imm 17687 * </PRE> 17688 * 17689 * @param dstDisp the destination displacement 17690 * @param imm immediate 17691 */ 17692 public final void emitBTC_Abs_Imm(Address dstDisp, int imm) { 17693 int miStart = mi; 17694 // no group 1 to 4 prefix byte 17695 generateREXprefix(false, null, null, null); 17696 setMachineCodes(mi++, (byte) 0x0F); 17697 if (fits(imm,8)) { 17698 setMachineCodes(mi++, (byte) 0xBA); 17699 // "register 0x7" is really part of the opcode 17700 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 17701 emitImm8((byte)imm); 17702 } else { 17703 throw new InternalError("Data too large for BTC instruction"); 17704 } 17705 if (lister != null) lister.RAI(miStart, "BTC", dstDisp, imm); 17706 } 17707 17708 /** 17709 * Generate a register-index--immediate BTC. That is, 17710 * <PRE> 17711 * [dstBase + dstIndex<<dstScale + dstDisp] BTC= imm 17712 * </PRE> 17713 * 17714 * @param dstBase the destination base register 17715 * @param dstIndex the destination index register 17716 * @param dstScale the destination shift amount 17717 * @param dstDisp the destination displacement 17718 * @param imm immediate 17719 */ 17720 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 17721 public final void emitBTC_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 17722 int miStart = mi; 17723 // no group 1 to 4 prefix byte 17724 generateREXprefix(false, null, dstIndex, dstBase); 17725 setMachineCodes(mi++, (byte) 0x0F); 17726 if (fits(imm,8)) { 17727 setMachineCodes(mi++, (byte) 0xBA); 17728 // "register 0x7" is really part of the opcode 17729 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 17730 emitImm8((byte)imm); 17731 } else { 17732 throw new InternalError("Data too large for BTC instruction"); 17733 } 17734 if (lister != null) lister.RXDI(miStart, "BTC", dstBase, dstIndex, dstScale, dstDisp, imm); 17735 } 17736 17737 /** 17738 * Generate a register(indirect)--immediate BTC. That is, 17739 * <PRE> 17740 * [dstBase] BTC= imm 17741 * </PRE> 17742 * 17743 * @param dstBase the destination base register 17744 * @param imm immediate 17745 */ 17746 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17747 public final void emitBTC_RegInd_Imm(GPR dstBase, int imm) { 17748 int miStart = mi; 17749 // no group 1 to 4 prefix byte 17750 generateREXprefix(false, null, null, dstBase); 17751 setMachineCodes(mi++, (byte) 0x0F); 17752 if (fits(imm,8)) { 17753 setMachineCodes(mi++, (byte) 0xBA); 17754 // "register 0x7" is really part of the opcode 17755 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 17756 emitImm8((byte)imm); 17757 } else { 17758 throw new InternalError("Data too large for BTC instruction"); 17759 } 17760 if (lister != null) lister.RNI(miStart, "BTC", dstBase, imm); 17761 } 17762 17763 /** 17764 * Generate a register--immediate BTC. That is, 17765 * <PRE> 17766 * dstReg BTC= (quad) imm 17767 * </PRE> 17768 * 17769 * @param dstReg the destination register 17770 * @param imm immediate 17771 */ 17772 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17773 public final void emitBTC_Reg_Imm_Quad(GPR dstReg, int imm) { 17774 int miStart = mi; 17775 // no group 1 to 4 prefix byte 17776 generateREXprefix(true, null, null, dstReg); 17777 setMachineCodes(mi++, (byte) 0x0F); 17778 if (fits(imm,8)) { 17779 setMachineCodes(mi++, (byte) 0xBA); 17780 // "register 0x7" is really part of the opcode 17781 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 17782 emitImm8((byte)imm); 17783 } else { 17784 throw new InternalError("Data too large for BTC instruction"); 17785 } 17786 if (lister != null) lister.RI(miStart, "BTC", dstReg, imm); 17787 } 17788 17789 /** 17790 * Generate a register-displacement--immediate BTC. That is, 17791 * <PRE> 17792 * [dstBase + dstDisp] BTC= (quad) imm 17793 * </PRE> 17794 * 17795 * @param dstBase the destination register 17796 * @param dstDisp the destination displacement 17797 * @param imm immediate 17798 */ 17799 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17800 public final void emitBTC_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 17801 int miStart = mi; 17802 // no group 1 to 4 prefix byte 17803 generateREXprefix(true, null, null, dstBase); 17804 setMachineCodes(mi++, (byte) 0x0F); 17805 if (fits(imm,8)) { 17806 setMachineCodes(mi++, (byte) 0xBA); 17807 // "register 0x7" is really part of the opcode 17808 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 17809 emitImm8((byte)imm); 17810 } else { 17811 throw new InternalError("Data too large for BTC instruction"); 17812 } 17813 if (lister != null) lister.RDI(miStart, "BTC", dstBase, dstDisp, imm); 17814 } 17815 17816 /** 17817 * Generate a register-offset--immediate BTC. That is, 17818 * <PRE> 17819 * [dstIndex<<dstScale + dstDisp] BTC= (quad) imm 17820 * </PRE> 17821 * 17822 * @param dstIndex the destination index register 17823 * @param dstScale the destination shift amount 17824 * @param dstDisp the destination displacement 17825 * @param imm immediate 17826 */ 17827 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17828 public final void emitBTC_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 17829 int miStart = mi; 17830 // no group 1 to 4 prefix byte 17831 generateREXprefix(true, null, dstIndex, null); 17832 setMachineCodes(mi++, (byte) 0x0F); 17833 if (fits(imm,8)) { 17834 setMachineCodes(mi++, (byte) 0xBA); 17835 // "register 0x7" is really part of the opcode 17836 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 17837 emitImm8((byte)imm); 17838 } else { 17839 throw new InternalError("Data too large for BTC instruction"); 17840 } 17841 if (lister != null) lister.RFDI(miStart, "BTC", dstIndex, dstScale, dstDisp, imm); 17842 } 17843 17844 /** 17845 * Generate a absolute--immediate BTC. That is, 17846 * <PRE> 17847 * [dstDisp] BTC= (quad) imm 17848 * </PRE> 17849 * 17850 * @param dstDisp the destination displacement 17851 * @param imm immediate 17852 */ 17853 public final void emitBTC_Abs_Imm_Quad(Address dstDisp, int imm) { 17854 int miStart = mi; 17855 // no group 1 to 4 prefix byte 17856 generateREXprefix(true, null, null, null); 17857 setMachineCodes(mi++, (byte) 0x0F); 17858 if (fits(imm,8)) { 17859 setMachineCodes(mi++, (byte) 0xBA); 17860 // "register 0x7" is really part of the opcode 17861 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 17862 emitImm8((byte)imm); 17863 } else { 17864 throw new InternalError("Data too large for BTC instruction"); 17865 } 17866 if (lister != null) lister.RAI(miStart, "BTC", dstDisp, imm); 17867 } 17868 17869 /** 17870 * Generate a register-index--immediate BTC. That is, 17871 * <PRE> 17872 * [dstBase + dstIndex<<dstScale + dstDisp] BTC= (quad) imm 17873 * </PRE> 17874 * 17875 * @param dstBase the destination base register 17876 * @param dstIndex the destination index register 17877 * @param dstScale the destination shift amount 17878 * @param dstDisp the destination displacement 17879 * @param imm immediate 17880 */ 17881 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 17882 public final void emitBTC_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 17883 int miStart = mi; 17884 // no group 1 to 4 prefix byte 17885 generateREXprefix(true, null, dstIndex, dstBase); 17886 setMachineCodes(mi++, (byte) 0x0F); 17887 if (fits(imm,8)) { 17888 setMachineCodes(mi++, (byte) 0xBA); 17889 // "register 0x7" is really part of the opcode 17890 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 17891 emitImm8((byte)imm); 17892 } else { 17893 throw new InternalError("Data too large for BTC instruction"); 17894 } 17895 if (lister != null) lister.RXDI(miStart, "BTC", dstBase, dstIndex, dstScale, dstDisp, imm); 17896 } 17897 17898 /** 17899 * Generate a register(indirect)--immediate BTC. That is, 17900 * <PRE> 17901 * [dstBase] BTC= (quad) imm 17902 * </PRE> 17903 * 17904 * @param dstBase the destination base register 17905 * @param imm immediate 17906 */ 17907 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 17908 public final void emitBTC_RegInd_Imm_Quad(GPR dstBase, int imm) { 17909 int miStart = mi; 17910 // no group 1 to 4 prefix byte 17911 generateREXprefix(true, null, null, dstBase); 17912 setMachineCodes(mi++, (byte) 0x0F); 17913 if (fits(imm,8)) { 17914 setMachineCodes(mi++, (byte) 0xBA); 17915 // "register 0x7" is really part of the opcode 17916 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 17917 emitImm8((byte)imm); 17918 } else { 17919 throw new InternalError("Data too large for BTC instruction"); 17920 } 17921 if (lister != null) lister.RNI(miStart, "BTC", dstBase, imm); 17922 } 17923 17924 /** 17925 * Generate a register(indirect)--register BTR. That is, 17926 * <PRE> 17927 * [dstBase] BTR= srcReg 17928 * </PRE> 17929 * 17930 * @param dstBase the destination base 17931 * @param srcReg the source register 17932 */ 17933 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 17934 public final void emitBTR_RegInd_Reg(GPR dstBase, GPR srcReg) { 17935 int miStart = mi; 17936 // no group 1 to 4 prefix byte 17937 generateREXprefix(false, srcReg, null, dstBase); 17938 setMachineCodes(mi++, (byte) 0x0F); 17939 setMachineCodes(mi++, (byte) 0xB3); 17940 emitRegIndirectRegOperands(dstBase, srcReg); 17941 if (lister != null) lister.RNR(miStart, "BTR", dstBase, srcReg); 17942 } 17943 17944 /** 17945 * Generate a register-offset--register BTR. That is, 17946 * <PRE> 17947 * [dstReg<<dstScale + dstDisp] BTR= srcReg 17948 * </PRE> 17949 * 17950 * @param dstIndex the destination index register 17951 * @param dstScale the destination shift amount 17952 * @param dstDisp the destination displacement 17953 * @param srcReg the source register 17954 */ 17955 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 17956 public final void emitBTR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 17957 int miStart = mi; 17958 // no group 1 to 4 prefix byte 17959 generateREXprefix(false, srcReg, dstIndex, null); 17960 setMachineCodes(mi++, (byte) 0x0F); 17961 setMachineCodes(mi++, (byte) 0xB3); 17962 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 17963 if (lister != null) lister.RFDR(miStart, "BTR", dstIndex, dstScale, dstDisp, srcReg); 17964 } 17965 17966 /** 17967 * Generate a absolute--register BTR. That is, 17968 * <PRE> 17969 * [dstDisp] BTR= srcReg 17970 * </PRE> 17971 * 17972 * @param dstDisp the destination address 17973 * @param srcReg the source register 17974 */ 17975 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 17976 public final void emitBTR_Abs_Reg(Address dstDisp, GPR srcReg) { 17977 int miStart = mi; 17978 // no group 1 to 4 prefix byte 17979 generateREXprefix(false, srcReg, null, null); 17980 setMachineCodes(mi++, (byte) 0x0F); 17981 setMachineCodes(mi++, (byte) 0xB3); 17982 emitAbsRegOperands(dstDisp, srcReg); 17983 if (lister != null) lister.RAR(miStart, "BTR", dstDisp, srcReg); 17984 } 17985 17986 /** 17987 * Generate a register-index--register BTR. That is, 17988 * <PRE> 17989 * [dstBase + dstIndex<<dstScale + dstDisp] BTR= srcReg 17990 * </PRE> 17991 * 17992 * @param dstBase the base register 17993 * @param dstIndex the destination index register 17994 * @param dstScale the destination shift amount 17995 * @param dstDisp the destination displacement 17996 * @param srcReg the source register 17997 */ 17998 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 17999 public final void emitBTR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 18000 int miStart = mi; 18001 // no group 1 to 4 prefix byte 18002 generateREXprefix(false, srcReg, dstIndex, dstBase); 18003 setMachineCodes(mi++, (byte) 0x0F); 18004 setMachineCodes(mi++, (byte) 0xB3); 18005 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 18006 if (lister != null) lister.RXDR(miStart, "BTR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 18007 } 18008 18009 /** 18010 * Generate a register-displacement--register BTR. That is, 18011 * <PRE> 18012 * [dstBase + dstDisp] BTR= srcReg 18013 * </PRE> 18014 * 18015 * @param dstBase the base register 18016 * @param dstDisp the destination displacement 18017 * @param srcReg the source register 18018 */ 18019 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 18020 public final void emitBTR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 18021 int miStart = mi; 18022 // no group 1 to 4 prefix byte 18023 generateREXprefix(false, srcReg, null, dstBase); 18024 setMachineCodes(mi++, (byte) 0x0F); 18025 setMachineCodes(mi++, (byte) 0xB3); 18026 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 18027 if (lister != null) lister.RDR(miStart, "BTR", dstBase, dstDisp, srcReg); 18028 } 18029 18030 /** 18031 * Generate a register--register BTR. That is, 18032 * <PRE> 18033 * dstReg BTR= srcReg 18034 * </PRE> 18035 * 18036 * @param dstReg the destination register 18037 * @param srcReg the source register 18038 */ 18039 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 18040 public final void emitBTR_Reg_Reg(GPR dstReg, GPR srcReg) { 18041 int miStart = mi; 18042 // no group 1 to 4 prefix byte 18043 generateREXprefix(false, srcReg, null, dstReg); 18044 setMachineCodes(mi++, (byte) 0x0F); 18045 setMachineCodes(mi++, (byte) 0xB3); 18046 emitRegRegOperands(dstReg, srcReg); 18047 if (lister != null) lister.RR(miStart, "BTR", dstReg, srcReg); 18048 } 18049 18050 /** 18051 * Generate a register(indirect)--register BTR. That is, 18052 * <PRE> 18053 * [dstBase] BTR= (quad) srcReg 18054 * </PRE> 18055 * 18056 * @param dstBase the destination base 18057 * @param srcReg the source register 18058 */ 18059 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 18060 public final void emitBTR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 18061 int miStart = mi; 18062 // no group 1 to 4 prefix byte 18063 generateREXprefix(true, srcReg, null, dstBase); 18064 setMachineCodes(mi++, (byte) 0x0F); 18065 setMachineCodes(mi++, (byte) 0xB3); 18066 emitRegIndirectRegOperands(dstBase, srcReg); 18067 if (lister != null) lister.RNR(miStart, "BTR", dstBase, srcReg); 18068 } 18069 18070 /** 18071 * Generate a register-offset--register BTR. That is, 18072 * <PRE> 18073 * [dstReg<<dstScale + dstDisp] BTR= (quad) srcReg 18074 * </PRE> 18075 * 18076 * @param dstIndex the destination index register 18077 * @param dstScale the destination shift amount 18078 * @param dstDisp the destination displacement 18079 * @param srcReg the source register 18080 */ 18081 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 18082 public final void emitBTR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 18083 int miStart = mi; 18084 // no group 1 to 4 prefix byte 18085 generateREXprefix(true, srcReg, dstIndex, null); 18086 setMachineCodes(mi++, (byte) 0x0F); 18087 setMachineCodes(mi++, (byte) 0xB3); 18088 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 18089 if (lister != null) lister.RFDR(miStart, "BTR", dstIndex, dstScale, dstDisp, srcReg); 18090 } 18091 18092 /** 18093 * Generate a absolute--register BTR. That is, 18094 * <PRE> 18095 * [dstDisp] BTR= (quad) srcReg 18096 * </PRE> 18097 * 18098 * @param dstDisp the destination address 18099 * @param srcReg the source register 18100 */ 18101 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 18102 public final void emitBTR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 18103 int miStart = mi; 18104 // no group 1 to 4 prefix byte 18105 generateREXprefix(true, srcReg, null, null); 18106 setMachineCodes(mi++, (byte) 0x0F); 18107 setMachineCodes(mi++, (byte) 0xB3); 18108 emitAbsRegOperands(dstDisp, srcReg); 18109 if (lister != null) lister.RAR(miStart, "BTR", dstDisp, srcReg); 18110 } 18111 18112 /** 18113 * Generate a register-index--register BTR. That is, 18114 * <PRE> 18115 * [dstBase + dstIndex<<dstScale + dstDisp] BTR= (quad) srcReg 18116 * </PRE> 18117 * 18118 * @param dstBase the base register 18119 * @param dstIndex the destination index register 18120 * @param dstScale the destination shift amount 18121 * @param dstDisp the destination displacement 18122 * @param srcReg the source register 18123 */ 18124 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 18125 public final void emitBTR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 18126 int miStart = mi; 18127 // no group 1 to 4 prefix byte 18128 generateREXprefix(true, srcReg, dstIndex, dstBase); 18129 setMachineCodes(mi++, (byte) 0x0F); 18130 setMachineCodes(mi++, (byte) 0xB3); 18131 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 18132 if (lister != null) lister.RXDR(miStart, "BTR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 18133 } 18134 18135 /** 18136 * Generate a register-displacement--register BTR. That is, 18137 * <PRE> 18138 * [dstBase + dstDisp] BTR= (quad) srcReg 18139 * </PRE> 18140 * 18141 * @param dstBase the base register 18142 * @param dstDisp the destination displacement 18143 * @param srcReg the source register 18144 */ 18145 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 18146 public final void emitBTR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 18147 int miStart = mi; 18148 // no group 1 to 4 prefix byte 18149 generateREXprefix(true, srcReg, null, dstBase); 18150 setMachineCodes(mi++, (byte) 0x0F); 18151 setMachineCodes(mi++, (byte) 0xB3); 18152 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 18153 if (lister != null) lister.RDR(miStart, "BTR", dstBase, dstDisp, srcReg); 18154 } 18155 18156 /** 18157 * Generate a register--register BTR. That is, 18158 * <PRE> 18159 * dstReg BTR= (quad) srcReg 18160 * </PRE> 18161 * 18162 * @param dstReg the destination register 18163 * @param srcReg the source register 18164 */ 18165 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 18166 public final void emitBTR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 18167 int miStart = mi; 18168 // no group 1 to 4 prefix byte 18169 generateREXprefix(true, srcReg, null, dstReg); 18170 setMachineCodes(mi++, (byte) 0x0F); 18171 setMachineCodes(mi++, (byte) 0xB3); 18172 emitRegRegOperands(dstReg, srcReg); 18173 if (lister != null) lister.RR(miStart, "BTR", dstReg, srcReg); 18174 } 18175 18176 /** 18177 * Generate a register--immediate BTR. That is, 18178 * <PRE> 18179 * dstReg BTR= imm 18180 * </PRE> 18181 * 18182 * @param dstReg the destination register 18183 * @param imm immediate 18184 */ 18185 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18186 public final void emitBTR_Reg_Imm(GPR dstReg, int imm) { 18187 int miStart = mi; 18188 // no group 1 to 4 prefix byte 18189 generateREXprefix(false, null, null, dstReg); 18190 setMachineCodes(mi++, (byte) 0x0F); 18191 if (fits(imm,8)) { 18192 setMachineCodes(mi++, (byte) 0xBA); 18193 // "register 0x6" is really part of the opcode 18194 emitRegRegOperands(dstReg, GPR.getForOpcode(0x6)); 18195 emitImm8((byte)imm); 18196 } else { 18197 throw new InternalError("Data too large for BTR instruction"); 18198 } 18199 if (lister != null) lister.RI(miStart, "BTR", dstReg, imm); 18200 } 18201 18202 /** 18203 * Generate a register-displacement--immediate BTR. That is, 18204 * <PRE> 18205 * [dstBase + dstDisp] BTR= imm 18206 * </PRE> 18207 * 18208 * @param dstBase the destination register 18209 * @param dstDisp the destination displacement 18210 * @param imm immediate 18211 */ 18212 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18213 public final void emitBTR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 18214 int miStart = mi; 18215 // no group 1 to 4 prefix byte 18216 generateREXprefix(false, null, null, dstBase); 18217 setMachineCodes(mi++, (byte) 0x0F); 18218 if (fits(imm,8)) { 18219 setMachineCodes(mi++, (byte) 0xBA); 18220 // "register 0x6" is really part of the opcode 18221 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6)); 18222 emitImm8((byte)imm); 18223 } else { 18224 throw new InternalError("Data too large for BTR instruction"); 18225 } 18226 if (lister != null) lister.RDI(miStart, "BTR", dstBase, dstDisp, imm); 18227 } 18228 18229 /** 18230 * Generate a register-offset--immediate BTR. That is, 18231 * <PRE> 18232 * [dstIndex<<dstScale + dstDisp] BTR= imm 18233 * </PRE> 18234 * 18235 * @param dstIndex the destination index register 18236 * @param dstScale the destination shift amount 18237 * @param dstDisp the destination displacement 18238 * @param imm immediate 18239 */ 18240 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18241 public final void emitBTR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 18242 int miStart = mi; 18243 // no group 1 to 4 prefix byte 18244 generateREXprefix(false, null, dstIndex, null); 18245 setMachineCodes(mi++, (byte) 0x0F); 18246 if (fits(imm,8)) { 18247 setMachineCodes(mi++, (byte) 0xBA); 18248 // "register 0x6" is really part of the opcode 18249 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 18250 emitImm8((byte)imm); 18251 } else { 18252 throw new InternalError("Data too large for BTR instruction"); 18253 } 18254 if (lister != null) lister.RFDI(miStart, "BTR", dstIndex, dstScale, dstDisp, imm); 18255 } 18256 18257 /** 18258 * Generate a absolute--immediate BTR. That is, 18259 * <PRE> 18260 * [dstDisp] BTR= imm 18261 * </PRE> 18262 * 18263 * @param dstDisp the destination displacement 18264 * @param imm immediate 18265 */ 18266 public final void emitBTR_Abs_Imm(Address dstDisp, int imm) { 18267 int miStart = mi; 18268 // no group 1 to 4 prefix byte 18269 generateREXprefix(false, null, null, null); 18270 setMachineCodes(mi++, (byte) 0x0F); 18271 if (fits(imm,8)) { 18272 setMachineCodes(mi++, (byte) 0xBA); 18273 // "register 0x6" is really part of the opcode 18274 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6)); 18275 emitImm8((byte)imm); 18276 } else { 18277 throw new InternalError("Data too large for BTR instruction"); 18278 } 18279 if (lister != null) lister.RAI(miStart, "BTR", dstDisp, imm); 18280 } 18281 18282 /** 18283 * Generate a register-index--immediate BTR. That is, 18284 * <PRE> 18285 * [dstBase + dstIndex<<dstScale + dstDisp] BTR= imm 18286 * </PRE> 18287 * 18288 * @param dstBase the destination base register 18289 * @param dstIndex the destination index register 18290 * @param dstScale the destination shift amount 18291 * @param dstDisp the destination displacement 18292 * @param imm immediate 18293 */ 18294 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 18295 public final void emitBTR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 18296 int miStart = mi; 18297 // no group 1 to 4 prefix byte 18298 generateREXprefix(false, null, dstIndex, dstBase); 18299 setMachineCodes(mi++, (byte) 0x0F); 18300 if (fits(imm,8)) { 18301 setMachineCodes(mi++, (byte) 0xBA); 18302 // "register 0x6" is really part of the opcode 18303 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 18304 emitImm8((byte)imm); 18305 } else { 18306 throw new InternalError("Data too large for BTR instruction"); 18307 } 18308 if (lister != null) lister.RXDI(miStart, "BTR", dstBase, dstIndex, dstScale, dstDisp, imm); 18309 } 18310 18311 /** 18312 * Generate a register(indirect)--immediate BTR. That is, 18313 * <PRE> 18314 * [dstBase] BTR= imm 18315 * </PRE> 18316 * 18317 * @param dstBase the destination base register 18318 * @param imm immediate 18319 */ 18320 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18321 public final void emitBTR_RegInd_Imm(GPR dstBase, int imm) { 18322 int miStart = mi; 18323 // no group 1 to 4 prefix byte 18324 generateREXprefix(false, null, null, dstBase); 18325 setMachineCodes(mi++, (byte) 0x0F); 18326 if (fits(imm,8)) { 18327 setMachineCodes(mi++, (byte) 0xBA); 18328 // "register 0x6" is really part of the opcode 18329 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6)); 18330 emitImm8((byte)imm); 18331 } else { 18332 throw new InternalError("Data too large for BTR instruction"); 18333 } 18334 if (lister != null) lister.RNI(miStart, "BTR", dstBase, imm); 18335 } 18336 18337 /** 18338 * Generate a register--immediate BTR. That is, 18339 * <PRE> 18340 * dstReg BTR= (quad) imm 18341 * </PRE> 18342 * 18343 * @param dstReg the destination register 18344 * @param imm immediate 18345 */ 18346 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18347 public final void emitBTR_Reg_Imm_Quad(GPR dstReg, int imm) { 18348 int miStart = mi; 18349 // no group 1 to 4 prefix byte 18350 generateREXprefix(true, null, null, dstReg); 18351 setMachineCodes(mi++, (byte) 0x0F); 18352 if (fits(imm,8)) { 18353 setMachineCodes(mi++, (byte) 0xBA); 18354 // "register 0x6" is really part of the opcode 18355 emitRegRegOperands(dstReg, GPR.getForOpcode(0x6)); 18356 emitImm8((byte)imm); 18357 } else { 18358 throw new InternalError("Data too large for BTR instruction"); 18359 } 18360 if (lister != null) lister.RI(miStart, "BTR", dstReg, imm); 18361 } 18362 18363 /** 18364 * Generate a register-displacement--immediate BTR. That is, 18365 * <PRE> 18366 * [dstBase + dstDisp] BTR= (quad) imm 18367 * </PRE> 18368 * 18369 * @param dstBase the destination register 18370 * @param dstDisp the destination displacement 18371 * @param imm immediate 18372 */ 18373 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18374 public final void emitBTR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 18375 int miStart = mi; 18376 // no group 1 to 4 prefix byte 18377 generateREXprefix(true, null, null, dstBase); 18378 setMachineCodes(mi++, (byte) 0x0F); 18379 if (fits(imm,8)) { 18380 setMachineCodes(mi++, (byte) 0xBA); 18381 // "register 0x6" is really part of the opcode 18382 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6)); 18383 emitImm8((byte)imm); 18384 } else { 18385 throw new InternalError("Data too large for BTR instruction"); 18386 } 18387 if (lister != null) lister.RDI(miStart, "BTR", dstBase, dstDisp, imm); 18388 } 18389 18390 /** 18391 * Generate a register-offset--immediate BTR. That is, 18392 * <PRE> 18393 * [dstIndex<<dstScale + dstDisp] BTR= (quad) imm 18394 * </PRE> 18395 * 18396 * @param dstIndex the destination index register 18397 * @param dstScale the destination shift amount 18398 * @param dstDisp the destination displacement 18399 * @param imm immediate 18400 */ 18401 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18402 public final void emitBTR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 18403 int miStart = mi; 18404 // no group 1 to 4 prefix byte 18405 generateREXprefix(true, null, dstIndex, null); 18406 setMachineCodes(mi++, (byte) 0x0F); 18407 if (fits(imm,8)) { 18408 setMachineCodes(mi++, (byte) 0xBA); 18409 // "register 0x6" is really part of the opcode 18410 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 18411 emitImm8((byte)imm); 18412 } else { 18413 throw new InternalError("Data too large for BTR instruction"); 18414 } 18415 if (lister != null) lister.RFDI(miStart, "BTR", dstIndex, dstScale, dstDisp, imm); 18416 } 18417 18418 /** 18419 * Generate a absolute--immediate BTR. That is, 18420 * <PRE> 18421 * [dstDisp] BTR= (quad) imm 18422 * </PRE> 18423 * 18424 * @param dstDisp the destination displacement 18425 * @param imm immediate 18426 */ 18427 public final void emitBTR_Abs_Imm_Quad(Address dstDisp, int imm) { 18428 int miStart = mi; 18429 // no group 1 to 4 prefix byte 18430 generateREXprefix(true, null, null, null); 18431 setMachineCodes(mi++, (byte) 0x0F); 18432 if (fits(imm,8)) { 18433 setMachineCodes(mi++, (byte) 0xBA); 18434 // "register 0x6" is really part of the opcode 18435 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6)); 18436 emitImm8((byte)imm); 18437 } else { 18438 throw new InternalError("Data too large for BTR instruction"); 18439 } 18440 if (lister != null) lister.RAI(miStart, "BTR", dstDisp, imm); 18441 } 18442 18443 /** 18444 * Generate a register-index--immediate BTR. That is, 18445 * <PRE> 18446 * [dstBase + dstIndex<<dstScale + dstDisp] BTR= (quad) imm 18447 * </PRE> 18448 * 18449 * @param dstBase the destination base register 18450 * @param dstIndex the destination index register 18451 * @param dstScale the destination shift amount 18452 * @param dstDisp the destination displacement 18453 * @param imm immediate 18454 */ 18455 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 18456 public final void emitBTR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 18457 int miStart = mi; 18458 // no group 1 to 4 prefix byte 18459 generateREXprefix(true, null, dstIndex, dstBase); 18460 setMachineCodes(mi++, (byte) 0x0F); 18461 if (fits(imm,8)) { 18462 setMachineCodes(mi++, (byte) 0xBA); 18463 // "register 0x6" is really part of the opcode 18464 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6)); 18465 emitImm8((byte)imm); 18466 } else { 18467 throw new InternalError("Data too large for BTR instruction"); 18468 } 18469 if (lister != null) lister.RXDI(miStart, "BTR", dstBase, dstIndex, dstScale, dstDisp, imm); 18470 } 18471 18472 /** 18473 * Generate a register(indirect)--immediate BTR. That is, 18474 * <PRE> 18475 * [dstBase] BTR= (quad) imm 18476 * </PRE> 18477 * 18478 * @param dstBase the destination base register 18479 * @param imm immediate 18480 */ 18481 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18482 public final void emitBTR_RegInd_Imm_Quad(GPR dstBase, int imm) { 18483 int miStart = mi; 18484 // no group 1 to 4 prefix byte 18485 generateREXprefix(true, null, null, dstBase); 18486 setMachineCodes(mi++, (byte) 0x0F); 18487 if (fits(imm,8)) { 18488 setMachineCodes(mi++, (byte) 0xBA); 18489 // "register 0x6" is really part of the opcode 18490 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6)); 18491 emitImm8((byte)imm); 18492 } else { 18493 throw new InternalError("Data too large for BTR instruction"); 18494 } 18495 if (lister != null) lister.RNI(miStart, "BTR", dstBase, imm); 18496 } 18497 18498 /** 18499 * Generate a register(indirect)--register BTS. That is, 18500 * <PRE> 18501 * [dstBase] BTS= srcReg 18502 * </PRE> 18503 * 18504 * @param dstBase the destination base 18505 * @param srcReg the source register 18506 */ 18507 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 18508 public final void emitBTS_RegInd_Reg(GPR dstBase, GPR srcReg) { 18509 int miStart = mi; 18510 // no group 1 to 4 prefix byte 18511 generateREXprefix(false, srcReg, null, dstBase); 18512 setMachineCodes(mi++, (byte) 0x0F); 18513 setMachineCodes(mi++, (byte) 0xAB); 18514 emitRegIndirectRegOperands(dstBase, srcReg); 18515 if (lister != null) lister.RNR(miStart, "BTS", dstBase, srcReg); 18516 } 18517 18518 /** 18519 * Generate a register-offset--register BTS. That is, 18520 * <PRE> 18521 * [dstReg<<dstScale + dstDisp] BTS= srcReg 18522 * </PRE> 18523 * 18524 * @param dstIndex the destination index register 18525 * @param dstScale the destination shift amount 18526 * @param dstDisp the destination displacement 18527 * @param srcReg the source register 18528 */ 18529 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 18530 public final void emitBTS_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 18531 int miStart = mi; 18532 // no group 1 to 4 prefix byte 18533 generateREXprefix(false, srcReg, dstIndex, null); 18534 setMachineCodes(mi++, (byte) 0x0F); 18535 setMachineCodes(mi++, (byte) 0xAB); 18536 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 18537 if (lister != null) lister.RFDR(miStart, "BTS", dstIndex, dstScale, dstDisp, srcReg); 18538 } 18539 18540 /** 18541 * Generate a absolute--register BTS. That is, 18542 * <PRE> 18543 * [dstDisp] BTS= srcReg 18544 * </PRE> 18545 * 18546 * @param dstDisp the destination address 18547 * @param srcReg the source register 18548 */ 18549 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 18550 public final void emitBTS_Abs_Reg(Address dstDisp, GPR srcReg) { 18551 int miStart = mi; 18552 // no group 1 to 4 prefix byte 18553 generateREXprefix(false, srcReg, null, null); 18554 setMachineCodes(mi++, (byte) 0x0F); 18555 setMachineCodes(mi++, (byte) 0xAB); 18556 emitAbsRegOperands(dstDisp, srcReg); 18557 if (lister != null) lister.RAR(miStart, "BTS", dstDisp, srcReg); 18558 } 18559 18560 /** 18561 * Generate a register-index--register BTS. That is, 18562 * <PRE> 18563 * [dstBase + dstIndex<<dstScale + dstDisp] BTS= srcReg 18564 * </PRE> 18565 * 18566 * @param dstBase the base register 18567 * @param dstIndex the destination index register 18568 * @param dstScale the destination shift amount 18569 * @param dstDisp the destination displacement 18570 * @param srcReg the source register 18571 */ 18572 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 18573 public final void emitBTS_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 18574 int miStart = mi; 18575 // no group 1 to 4 prefix byte 18576 generateREXprefix(false, srcReg, dstIndex, dstBase); 18577 setMachineCodes(mi++, (byte) 0x0F); 18578 setMachineCodes(mi++, (byte) 0xAB); 18579 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 18580 if (lister != null) lister.RXDR(miStart, "BTS", dstBase, dstIndex, dstScale, dstDisp, srcReg); 18581 } 18582 18583 /** 18584 * Generate a register-displacement--register BTS. That is, 18585 * <PRE> 18586 * [dstBase + dstDisp] BTS= srcReg 18587 * </PRE> 18588 * 18589 * @param dstBase the base register 18590 * @param dstDisp the destination displacement 18591 * @param srcReg the source register 18592 */ 18593 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 18594 public final void emitBTS_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 18595 int miStart = mi; 18596 // no group 1 to 4 prefix byte 18597 generateREXprefix(false, srcReg, null, dstBase); 18598 setMachineCodes(mi++, (byte) 0x0F); 18599 setMachineCodes(mi++, (byte) 0xAB); 18600 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 18601 if (lister != null) lister.RDR(miStart, "BTS", dstBase, dstDisp, srcReg); 18602 } 18603 18604 /** 18605 * Generate a register--register BTS. That is, 18606 * <PRE> 18607 * dstReg BTS= srcReg 18608 * </PRE> 18609 * 18610 * @param dstReg the destination register 18611 * @param srcReg the source register 18612 */ 18613 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 18614 public final void emitBTS_Reg_Reg(GPR dstReg, GPR srcReg) { 18615 int miStart = mi; 18616 // no group 1 to 4 prefix byte 18617 generateREXprefix(false, srcReg, null, dstReg); 18618 setMachineCodes(mi++, (byte) 0x0F); 18619 setMachineCodes(mi++, (byte) 0xAB); 18620 emitRegRegOperands(dstReg, srcReg); 18621 if (lister != null) lister.RR(miStart, "BTS", dstReg, srcReg); 18622 } 18623 18624 /** 18625 * Generate a register(indirect)--register BTS. That is, 18626 * <PRE> 18627 * [dstBase] BTS= (quad) srcReg 18628 * </PRE> 18629 * 18630 * @param dstBase the destination base 18631 * @param srcReg the source register 18632 */ 18633 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 18634 public final void emitBTS_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 18635 int miStart = mi; 18636 // no group 1 to 4 prefix byte 18637 generateREXprefix(true, srcReg, null, dstBase); 18638 setMachineCodes(mi++, (byte) 0x0F); 18639 setMachineCodes(mi++, (byte) 0xAB); 18640 emitRegIndirectRegOperands(dstBase, srcReg); 18641 if (lister != null) lister.RNR(miStart, "BTS", dstBase, srcReg); 18642 } 18643 18644 /** 18645 * Generate a register-offset--register BTS. That is, 18646 * <PRE> 18647 * [dstReg<<dstScale + dstDisp] BTS= (quad) srcReg 18648 * </PRE> 18649 * 18650 * @param dstIndex the destination index register 18651 * @param dstScale the destination shift amount 18652 * @param dstDisp the destination displacement 18653 * @param srcReg the source register 18654 */ 18655 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 18656 public final void emitBTS_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 18657 int miStart = mi; 18658 // no group 1 to 4 prefix byte 18659 generateREXprefix(true, srcReg, dstIndex, null); 18660 setMachineCodes(mi++, (byte) 0x0F); 18661 setMachineCodes(mi++, (byte) 0xAB); 18662 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 18663 if (lister != null) lister.RFDR(miStart, "BTS", dstIndex, dstScale, dstDisp, srcReg); 18664 } 18665 18666 /** 18667 * Generate a absolute--register BTS. That is, 18668 * <PRE> 18669 * [dstDisp] BTS= (quad) srcReg 18670 * </PRE> 18671 * 18672 * @param dstDisp the destination address 18673 * @param srcReg the source register 18674 */ 18675 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 18676 public final void emitBTS_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 18677 int miStart = mi; 18678 // no group 1 to 4 prefix byte 18679 generateREXprefix(true, srcReg, null, null); 18680 setMachineCodes(mi++, (byte) 0x0F); 18681 setMachineCodes(mi++, (byte) 0xAB); 18682 emitAbsRegOperands(dstDisp, srcReg); 18683 if (lister != null) lister.RAR(miStart, "BTS", dstDisp, srcReg); 18684 } 18685 18686 /** 18687 * Generate a register-index--register BTS. That is, 18688 * <PRE> 18689 * [dstBase + dstIndex<<dstScale + dstDisp] BTS= (quad) srcReg 18690 * </PRE> 18691 * 18692 * @param dstBase the base register 18693 * @param dstIndex the destination index register 18694 * @param dstScale the destination shift amount 18695 * @param dstDisp the destination displacement 18696 * @param srcReg the source register 18697 */ 18698 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 18699 public final void emitBTS_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 18700 int miStart = mi; 18701 // no group 1 to 4 prefix byte 18702 generateREXprefix(true, srcReg, dstIndex, dstBase); 18703 setMachineCodes(mi++, (byte) 0x0F); 18704 setMachineCodes(mi++, (byte) 0xAB); 18705 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 18706 if (lister != null) lister.RXDR(miStart, "BTS", dstBase, dstIndex, dstScale, dstDisp, srcReg); 18707 } 18708 18709 /** 18710 * Generate a register-displacement--register BTS. That is, 18711 * <PRE> 18712 * [dstBase + dstDisp] BTS= (quad) srcReg 18713 * </PRE> 18714 * 18715 * @param dstBase the base register 18716 * @param dstDisp the destination displacement 18717 * @param srcReg the source register 18718 */ 18719 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 18720 public final void emitBTS_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 18721 int miStart = mi; 18722 // no group 1 to 4 prefix byte 18723 generateREXprefix(true, srcReg, null, dstBase); 18724 setMachineCodes(mi++, (byte) 0x0F); 18725 setMachineCodes(mi++, (byte) 0xAB); 18726 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 18727 if (lister != null) lister.RDR(miStart, "BTS", dstBase, dstDisp, srcReg); 18728 } 18729 18730 /** 18731 * Generate a register--register BTS. That is, 18732 * <PRE> 18733 * dstReg BTS= (quad) srcReg 18734 * </PRE> 18735 * 18736 * @param dstReg the destination register 18737 * @param srcReg the source register 18738 */ 18739 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 18740 public final void emitBTS_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 18741 int miStart = mi; 18742 // no group 1 to 4 prefix byte 18743 generateREXprefix(true, srcReg, null, dstReg); 18744 setMachineCodes(mi++, (byte) 0x0F); 18745 setMachineCodes(mi++, (byte) 0xAB); 18746 emitRegRegOperands(dstReg, srcReg); 18747 if (lister != null) lister.RR(miStart, "BTS", dstReg, srcReg); 18748 } 18749 18750 /** 18751 * Generate a register--immediate BTS. That is, 18752 * <PRE> 18753 * dstReg BTS= imm 18754 * </PRE> 18755 * 18756 * @param dstReg the destination register 18757 * @param imm immediate 18758 */ 18759 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18760 public final void emitBTS_Reg_Imm(GPR dstReg, int imm) { 18761 int miStart = mi; 18762 // no group 1 to 4 prefix byte 18763 generateREXprefix(false, null, null, dstReg); 18764 setMachineCodes(mi++, (byte) 0x0F); 18765 if (fits(imm,8)) { 18766 setMachineCodes(mi++, (byte) 0xBA); 18767 // "register 0x5" is really part of the opcode 18768 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 18769 emitImm8((byte)imm); 18770 } else { 18771 throw new InternalError("Data too large for BTS instruction"); 18772 } 18773 if (lister != null) lister.RI(miStart, "BTS", dstReg, imm); 18774 } 18775 18776 /** 18777 * Generate a register-displacement--immediate BTS. That is, 18778 * <PRE> 18779 * [dstBase + dstDisp] BTS= imm 18780 * </PRE> 18781 * 18782 * @param dstBase the destination register 18783 * @param dstDisp the destination displacement 18784 * @param imm immediate 18785 */ 18786 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18787 public final void emitBTS_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 18788 int miStart = mi; 18789 // no group 1 to 4 prefix byte 18790 generateREXprefix(false, null, null, dstBase); 18791 setMachineCodes(mi++, (byte) 0x0F); 18792 if (fits(imm,8)) { 18793 setMachineCodes(mi++, (byte) 0xBA); 18794 // "register 0x5" is really part of the opcode 18795 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 18796 emitImm8((byte)imm); 18797 } else { 18798 throw new InternalError("Data too large for BTS instruction"); 18799 } 18800 if (lister != null) lister.RDI(miStart, "BTS", dstBase, dstDisp, imm); 18801 } 18802 18803 /** 18804 * Generate a register-offset--immediate BTS. That is, 18805 * <PRE> 18806 * [dstIndex<<dstScale + dstDisp] BTS= imm 18807 * </PRE> 18808 * 18809 * @param dstIndex the destination index register 18810 * @param dstScale the destination shift amount 18811 * @param dstDisp the destination displacement 18812 * @param imm immediate 18813 */ 18814 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18815 public final void emitBTS_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 18816 int miStart = mi; 18817 // no group 1 to 4 prefix byte 18818 generateREXprefix(false, null, dstIndex, null); 18819 setMachineCodes(mi++, (byte) 0x0F); 18820 if (fits(imm,8)) { 18821 setMachineCodes(mi++, (byte) 0xBA); 18822 // "register 0x5" is really part of the opcode 18823 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 18824 emitImm8((byte)imm); 18825 } else { 18826 throw new InternalError("Data too large for BTS instruction"); 18827 } 18828 if (lister != null) lister.RFDI(miStart, "BTS", dstIndex, dstScale, dstDisp, imm); 18829 } 18830 18831 /** 18832 * Generate a absolute--immediate BTS. That is, 18833 * <PRE> 18834 * [dstDisp] BTS= imm 18835 * </PRE> 18836 * 18837 * @param dstDisp the destination displacement 18838 * @param imm immediate 18839 */ 18840 public final void emitBTS_Abs_Imm(Address dstDisp, int imm) { 18841 int miStart = mi; 18842 // no group 1 to 4 prefix byte 18843 generateREXprefix(false, null, null, null); 18844 setMachineCodes(mi++, (byte) 0x0F); 18845 if (fits(imm,8)) { 18846 setMachineCodes(mi++, (byte) 0xBA); 18847 // "register 0x5" is really part of the opcode 18848 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 18849 emitImm8((byte)imm); 18850 } else { 18851 throw new InternalError("Data too large for BTS instruction"); 18852 } 18853 if (lister != null) lister.RAI(miStart, "BTS", dstDisp, imm); 18854 } 18855 18856 /** 18857 * Generate a register-index--immediate BTS. That is, 18858 * <PRE> 18859 * [dstBase + dstIndex<<dstScale + dstDisp] BTS= imm 18860 * </PRE> 18861 * 18862 * @param dstBase the destination base register 18863 * @param dstIndex the destination index register 18864 * @param dstScale the destination shift amount 18865 * @param dstDisp the destination displacement 18866 * @param imm immediate 18867 */ 18868 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 18869 public final void emitBTS_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 18870 int miStart = mi; 18871 // no group 1 to 4 prefix byte 18872 generateREXprefix(false, null, dstIndex, dstBase); 18873 setMachineCodes(mi++, (byte) 0x0F); 18874 if (fits(imm,8)) { 18875 setMachineCodes(mi++, (byte) 0xBA); 18876 // "register 0x5" is really part of the opcode 18877 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 18878 emitImm8((byte)imm); 18879 } else { 18880 throw new InternalError("Data too large for BTS instruction"); 18881 } 18882 if (lister != null) lister.RXDI(miStart, "BTS", dstBase, dstIndex, dstScale, dstDisp, imm); 18883 } 18884 18885 /** 18886 * Generate a register(indirect)--immediate BTS. That is, 18887 * <PRE> 18888 * [dstBase] BTS= imm 18889 * </PRE> 18890 * 18891 * @param dstBase the destination base register 18892 * @param imm immediate 18893 */ 18894 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18895 public final void emitBTS_RegInd_Imm(GPR dstBase, int imm) { 18896 int miStart = mi; 18897 // no group 1 to 4 prefix byte 18898 generateREXprefix(false, null, null, dstBase); 18899 setMachineCodes(mi++, (byte) 0x0F); 18900 if (fits(imm,8)) { 18901 setMachineCodes(mi++, (byte) 0xBA); 18902 // "register 0x5" is really part of the opcode 18903 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 18904 emitImm8((byte)imm); 18905 } else { 18906 throw new InternalError("Data too large for BTS instruction"); 18907 } 18908 if (lister != null) lister.RNI(miStart, "BTS", dstBase, imm); 18909 } 18910 18911 /** 18912 * Generate a register--immediate BTS. That is, 18913 * <PRE> 18914 * dstReg BTS= (quad) imm 18915 * </PRE> 18916 * 18917 * @param dstReg the destination register 18918 * @param imm immediate 18919 */ 18920 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18921 public final void emitBTS_Reg_Imm_Quad(GPR dstReg, int imm) { 18922 int miStart = mi; 18923 // no group 1 to 4 prefix byte 18924 generateREXprefix(true, null, null, dstReg); 18925 setMachineCodes(mi++, (byte) 0x0F); 18926 if (fits(imm,8)) { 18927 setMachineCodes(mi++, (byte) 0xBA); 18928 // "register 0x5" is really part of the opcode 18929 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 18930 emitImm8((byte)imm); 18931 } else { 18932 throw new InternalError("Data too large for BTS instruction"); 18933 } 18934 if (lister != null) lister.RI(miStart, "BTS", dstReg, imm); 18935 } 18936 18937 /** 18938 * Generate a register-displacement--immediate BTS. That is, 18939 * <PRE> 18940 * [dstBase + dstDisp] BTS= (quad) imm 18941 * </PRE> 18942 * 18943 * @param dstBase the destination register 18944 * @param dstDisp the destination displacement 18945 * @param imm immediate 18946 */ 18947 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18948 public final void emitBTS_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 18949 int miStart = mi; 18950 // no group 1 to 4 prefix byte 18951 generateREXprefix(true, null, null, dstBase); 18952 setMachineCodes(mi++, (byte) 0x0F); 18953 if (fits(imm,8)) { 18954 setMachineCodes(mi++, (byte) 0xBA); 18955 // "register 0x5" is really part of the opcode 18956 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 18957 emitImm8((byte)imm); 18958 } else { 18959 throw new InternalError("Data too large for BTS instruction"); 18960 } 18961 if (lister != null) lister.RDI(miStart, "BTS", dstBase, dstDisp, imm); 18962 } 18963 18964 /** 18965 * Generate a register-offset--immediate BTS. That is, 18966 * <PRE> 18967 * [dstIndex<<dstScale + dstDisp] BTS= (quad) imm 18968 * </PRE> 18969 * 18970 * @param dstIndex the destination index register 18971 * @param dstScale the destination shift amount 18972 * @param dstDisp the destination displacement 18973 * @param imm immediate 18974 */ 18975 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 18976 public final void emitBTS_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 18977 int miStart = mi; 18978 // no group 1 to 4 prefix byte 18979 generateREXprefix(true, null, dstIndex, null); 18980 setMachineCodes(mi++, (byte) 0x0F); 18981 if (fits(imm,8)) { 18982 setMachineCodes(mi++, (byte) 0xBA); 18983 // "register 0x5" is really part of the opcode 18984 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 18985 emitImm8((byte)imm); 18986 } else { 18987 throw new InternalError("Data too large for BTS instruction"); 18988 } 18989 if (lister != null) lister.RFDI(miStart, "BTS", dstIndex, dstScale, dstDisp, imm); 18990 } 18991 18992 /** 18993 * Generate a absolute--immediate BTS. That is, 18994 * <PRE> 18995 * [dstDisp] BTS= (quad) imm 18996 * </PRE> 18997 * 18998 * @param dstDisp the destination displacement 18999 * @param imm immediate 19000 */ 19001 public final void emitBTS_Abs_Imm_Quad(Address dstDisp, int imm) { 19002 int miStart = mi; 19003 // no group 1 to 4 prefix byte 19004 generateREXprefix(true, null, null, null); 19005 setMachineCodes(mi++, (byte) 0x0F); 19006 if (fits(imm,8)) { 19007 setMachineCodes(mi++, (byte) 0xBA); 19008 // "register 0x5" is really part of the opcode 19009 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 19010 emitImm8((byte)imm); 19011 } else { 19012 throw new InternalError("Data too large for BTS instruction"); 19013 } 19014 if (lister != null) lister.RAI(miStart, "BTS", dstDisp, imm); 19015 } 19016 19017 /** 19018 * Generate a register-index--immediate BTS. That is, 19019 * <PRE> 19020 * [dstBase + dstIndex<<dstScale + dstDisp] BTS= (quad) imm 19021 * </PRE> 19022 * 19023 * @param dstBase the destination base register 19024 * @param dstIndex the destination index register 19025 * @param dstScale the destination shift amount 19026 * @param dstDisp the destination displacement 19027 * @param imm immediate 19028 */ 19029 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 19030 public final void emitBTS_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 19031 int miStart = mi; 19032 // no group 1 to 4 prefix byte 19033 generateREXprefix(true, null, dstIndex, dstBase); 19034 setMachineCodes(mi++, (byte) 0x0F); 19035 if (fits(imm,8)) { 19036 setMachineCodes(mi++, (byte) 0xBA); 19037 // "register 0x5" is really part of the opcode 19038 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 19039 emitImm8((byte)imm); 19040 } else { 19041 throw new InternalError("Data too large for BTS instruction"); 19042 } 19043 if (lister != null) lister.RXDI(miStart, "BTS", dstBase, dstIndex, dstScale, dstDisp, imm); 19044 } 19045 19046 /** 19047 * Generate a register(indirect)--immediate BTS. That is, 19048 * <PRE> 19049 * [dstBase] BTS= (quad) imm 19050 * </PRE> 19051 * 19052 * @param dstBase the destination base register 19053 * @param imm immediate 19054 */ 19055 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19056 public final void emitBTS_RegInd_Imm_Quad(GPR dstBase, int imm) { 19057 int miStart = mi; 19058 // no group 1 to 4 prefix byte 19059 generateREXprefix(true, null, null, dstBase); 19060 setMachineCodes(mi++, (byte) 0x0F); 19061 if (fits(imm,8)) { 19062 setMachineCodes(mi++, (byte) 0xBA); 19063 // "register 0x5" is really part of the opcode 19064 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 19065 emitImm8((byte)imm); 19066 } else { 19067 throw new InternalError("Data too large for BTS instruction"); 19068 } 19069 if (lister != null) lister.RNI(miStart, "BTS", dstBase, imm); 19070 } 19071 19072 /** 19073 * Generate a CALL to a label or immediate. That is, 19074 * <PRE> 19075 * pc = {future address from label | imm} 19076 * </PRE> 19077 * 19078 * @param imm offset to immediate CALL to. 0 means use 19079 * label. Immediate is assumed to be within current instructions. 19080 * @param label label to branch to (used when imm == 0) 19081 */ 19082 public final void emitCALL_ImmOrLabel(int imm, int label) { 19083 if (imm == 0) 19084 emitCALL_Label(label); 19085 else 19086 emitCALL_Imm(imm); 19087 } 19088 19089 /** 19090 * Branch to the given target with a CALL instruction 19091 * <PRE> 19092 * IP = (instruction @ label) 19093 * </PRE> 19094 * 19095 * This emit method is expecting only a forward branch (that is 19096 * what the Label operand means); it creates a ForwardReference 19097 * to the given label, and puts it into the assembler's list of 19098 * references to resolve. This emitter knows the branch is 19099 * unconditional, so it uses 19100 * {@link org.jikesrvm.compilers.common.assembler.ForwardReference.UnconditionalBranch} 19101 * as the forward reference type to create. 19102 * 19103 * All forward branches have a label as the branch target; clients 19104 * can arbirarily associate labels and instructions, but must be 19105 * consistent in giving the chosen label as the target of branches 19106 * to an instruction and calling resolveForwardBranches with the 19107 * given label immediately before emitting the target instruction. 19108 * See the header comments of ForwardReference for more details. 19109 * 19110 * @param label the label associated with the branch target instrucion 19111 */ 19112 public final void emitCALL_Label(int label) { 19113 int miStart = mi; 19114 ForwardReference r = 19115 new ForwardReference.UnconditionalBranch(mi, label); 19116 forwardRefs = ForwardReference.enqueue(forwardRefs, r); 19117 setMachineCodes(mi++, (byte) 0xE8); 19118 mi += 4; // leave space for displacement 19119 if (lister != null) lister.I(miStart, "CALL", label); 19120 } 19121 19122 /** 19123 * Generate a CALL to immediate. That is, 19124 * <PRE> 19125 * pc = imm 19126 * </PRE> 19127 * 19128 * @param imm offset to immediate CALL to (within current instructions) 19129 */ 19130 public final void emitCALL_Imm(int imm) { 19131 int miStart = mi; 19132 setMachineCodes(mi++, (byte) 0xE8); 19133 // offset of next instruction (this instruction is 5 bytes, 19134 // but we just accounted for one of them in the mi++ above) 19135 emitImm32(imm - (mi + 4)); 19136 if (lister != null) lister.I(miStart, "CALL", imm); 19137 } 19138 19139 /** 19140 * Generate a CALL to register. That is, 19141 * <PRE> 19142 * pc = dstReg 19143 * </PRE> 19144 * 19145 * @param dstReg register containing destination address 19146 */ 19147 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19148 public final void emitCALL_Reg(GPR dstReg) { 19149 int miStart = mi; 19150 generateREXprefix(false, null, null, dstReg); 19151 setMachineCodes(mi++, (byte) 0xFF); 19152 // "register 0x2" is really part of the CALL opcode 19153 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 19154 if (lister != null) lister.R(miStart, "CALL", dstReg); 19155 } 19156 19157 /** 19158 * Generate a CALL to register and displacement. That is, 19159 * <PRE> 19160 * pc = [dstBase + dstDisp] 19161 * </PRE> 19162 * 19163 * @param dstBase the destination base address register 19164 * @param dstDisp the destination displacement 19165 */ 19166 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19167 public final void emitCALL_RegDisp(GPR dstBase, Offset dstDisp) { 19168 int miStart = mi; 19169 generateREXprefix(false, null, null, dstBase); 19170 setMachineCodes(mi++, (byte) 0xFF); 19171 // "register 0x2" is really part of the CALL opcode 19172 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 19173 if (lister != null) lister.RD(miStart, "CALL", dstBase, dstDisp); 19174 } 19175 19176 /** 19177 * Generate a CALL to register indirect. That is, 19178 * <PRE> 19179 * pc = [dstBase] 19180 * </PRE> 19181 * 19182 * @param dstBase the destination base address register 19183 */ 19184 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19185 public final void emitCALL_RegInd(GPR dstBase) { 19186 int miStart = mi; 19187 generateREXprefix(false, null, null, dstBase); 19188 setMachineCodes(mi++, (byte) 0xFF); 19189 // "register 0x2" is really part of the CALL opcode 19190 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 19191 if (lister != null) lister.RN(miStart, "CALL", dstBase); 19192 } 19193 19194 /** 19195 * Generate a CALL to register offset. That is, 19196 * <PRE> 19197 * pc = [dstIndex<<dstScale + dstDisp] 19198 * </PRE> 19199 * 19200 * @param dstIndex the destination index register 19201 * @param dstScale the destination shift amount 19202 * @param dstDisp the destination displacement 19203 */ 19204 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19205 public final void emitCALL_RegOff(GPR dstIndex, short dstScale, Offset dstDisp) { 19206 int miStart = mi; 19207 generateREXprefix(false, null, dstIndex, null); 19208 setMachineCodes(mi++, (byte) 0xFF); 19209 // "register 0x2" is really part of the CALL opcode 19210 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 19211 if (lister != null) lister.RFD(miStart, "CALL", dstIndex, dstScale, dstDisp); 19212 } 19213 19214 /** 19215 * Generate a CALL to absolute address. That is, 19216 * <PRE> 19217 * pc = [dstDisp] 19218 * </PRE> 19219 * 19220 * @param dstDisp the destination displacement 19221 */ 19222 public final void emitCALL_Abs(Address dstDisp) { 19223 int miStart = mi; 19224 setMachineCodes(mi++, (byte) 0xFF); 19225 // "register 0x2" is really part of the CALL opcode 19226 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 19227 if (lister != null) lister.RA(miStart, "CALL", dstDisp); 19228 } 19229 19230 /** 19231 * Generate a CALL to register offset. That is, 19232 * <PRE> 19233 * pc = [dstBase + dstIndex<<dstScale + dstDisp] 19234 * </PRE> 19235 * 19236 * @param dstBase the destination base register 19237 * @param dstIndex the destination index register 19238 * @param dstScale the destination shift amount 19239 * @param dstDisp the destination displacement 19240 */ 19241 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 19242 public final void emitCALL_RegIdx(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp) { 19243 int miStart = mi; 19244 generateREXprefix(false, null, dstIndex, dstBase); 19245 setMachineCodes(mi++, (byte) 0xFF); 19246 // "register 0x2" is really part of the CALL opcode 19247 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 19248 if (lister != null) lister.RXD(miStart, "CALL", dstBase, dstIndex, dstScale, dstDisp); 19249 } 19250 19251 /** 19252 * Generate a JMP to a label or immediate. That is, 19253 * <PRE> 19254 * pc = {future address from label | imm} 19255 * </PRE> 19256 * 19257 * @param imm offset to immediate JMP to. 0 means use 19258 * label. Immediate is assumed to be within current instructions. 19259 * @param label label to branch to (used when imm == 0) 19260 */ 19261 public final void emitJMP_ImmOrLabel(int imm, int label) { 19262 if (imm == 0) 19263 emitJMP_Label(label); 19264 else 19265 emitJMP_Imm(imm); 19266 } 19267 19268 /** 19269 * Branch to the given target with a JMP instruction 19270 * <PRE> 19271 * IP = (instruction @ label) 19272 * </PRE> 19273 * 19274 * This emit method is expecting only a forward branch (that is 19275 * what the Label operand means); it creates a ForwardReference 19276 * to the given label, and puts it into the assembler's list of 19277 * references to resolve. This emitter knows the branch is 19278 * unconditional, so it uses 19279 * {@link org.jikesrvm.compilers.common.assembler.ForwardReference.UnconditionalBranch} 19280 * as the forward reference type to create. 19281 * 19282 * All forward branches have a label as the branch target; clients 19283 * can arbirarily associate labels and instructions, but must be 19284 * consistent in giving the chosen label as the target of branches 19285 * to an instruction and calling resolveForwardBranches with the 19286 * given label immediately before emitting the target instruction. 19287 * See the header comments of ForwardReference for more details. 19288 * 19289 * @param label the label associated with the branch target instrucion 19290 */ 19291 public final void emitJMP_Label(int label) { 19292 int miStart = mi; 19293 ForwardReference r = 19294 new ForwardReference.UnconditionalBranch(mi, label); 19295 forwardRefs = ForwardReference.enqueue(forwardRefs, r); 19296 setMachineCodes(mi++, (byte) 0xE9); 19297 mi += 4; // leave space for displacement 19298 if (lister != null) lister.I(miStart, "JMP", label); 19299 } 19300 19301 /** 19302 * Generate a JMP to immediate. That is, 19303 * <PRE> 19304 * pc = imm 19305 * </PRE> 19306 * 19307 * @param imm offset to immediate JMP to (within current instructions) 19308 */ 19309 public final void emitJMP_Imm(int imm) { 19310 int miStart = mi; 19311 // can we fit the offset from the next instruction into 8 19312 // bits, assuming this instruction is 2 bytes (which it will 19313 // be if the offset fits into 8 bits)? 19314 int relOffset = imm - (mi + 2); 19315 if (fits(relOffset,8)) { 19316 // yes, so use short form. 19317 setMachineCodes(mi++, (byte) 0xEB); 19318 emitImm8((byte) relOffset); 19319 } else { 19320 // no, must use 32 bit offset and ignore relOffset to 19321 // account for the fact that this instruction now has to 19322 // be 5 bytes long. 19323 setMachineCodes(mi++, (byte) 0xE9); 19324 // offset of next instruction (this instruction is 5 bytes, 19325 // but we just accounted for one of them in the mi++ above) 19326 emitImm32(imm - (mi + 4)); 19327 } 19328 if (lister != null) lister.I(miStart, "JMP", imm); 19329 } 19330 19331 /** 19332 * Generate a JMP to register. That is, 19333 * <PRE> 19334 * pc = dstReg 19335 * </PRE> 19336 * 19337 * @param dstReg register containing destination address 19338 */ 19339 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19340 public final void emitJMP_Reg(GPR dstReg) { 19341 int miStart = mi; 19342 generateREXprefix(false, null, null, dstReg); 19343 setMachineCodes(mi++, (byte) 0xFF); 19344 // "register 0x4" is really part of the JMP opcode 19345 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 19346 if (lister != null) lister.R(miStart, "JMP", dstReg); 19347 } 19348 19349 /** 19350 * Generate a JMP to register and displacement. That is, 19351 * <PRE> 19352 * pc = [dstBase + dstDisp] 19353 * </PRE> 19354 * 19355 * @param dstBase the destination base address register 19356 * @param dstDisp the destination displacement 19357 */ 19358 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19359 public final void emitJMP_RegDisp(GPR dstBase, Offset dstDisp) { 19360 int miStart = mi; 19361 generateREXprefix(false, null, null, dstBase); 19362 setMachineCodes(mi++, (byte) 0xFF); 19363 // "register 0x4" is really part of the JMP opcode 19364 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 19365 if (lister != null) lister.RD(miStart, "JMP", dstBase, dstDisp); 19366 } 19367 19368 /** 19369 * Generate a JMP to register indirect. That is, 19370 * <PRE> 19371 * pc = [dstBase] 19372 * </PRE> 19373 * 19374 * @param dstBase the destination base address register 19375 */ 19376 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19377 public final void emitJMP_RegInd(GPR dstBase) { 19378 int miStart = mi; 19379 generateREXprefix(false, null, null, dstBase); 19380 setMachineCodes(mi++, (byte) 0xFF); 19381 // "register 0x4" is really part of the JMP opcode 19382 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 19383 if (lister != null) lister.RN(miStart, "JMP", dstBase); 19384 } 19385 19386 /** 19387 * Generate a JMP to register offset. That is, 19388 * <PRE> 19389 * pc = [dstIndex<<dstScale + dstDisp] 19390 * </PRE> 19391 * 19392 * @param dstIndex the destination index register 19393 * @param dstScale the destination shift amount 19394 * @param dstDisp the destination displacement 19395 */ 19396 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19397 public final void emitJMP_RegOff(GPR dstIndex, short dstScale, Offset dstDisp) { 19398 int miStart = mi; 19399 generateREXprefix(false, null, dstIndex, null); 19400 setMachineCodes(mi++, (byte) 0xFF); 19401 // "register 0x4" is really part of the JMP opcode 19402 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 19403 if (lister != null) lister.RFD(miStart, "JMP", dstIndex, dstScale, dstDisp); 19404 } 19405 19406 /** 19407 * Generate a JMP to absolute address. That is, 19408 * <PRE> 19409 * pc = [dstDisp] 19410 * </PRE> 19411 * 19412 * @param dstDisp the destination displacement 19413 */ 19414 public final void emitJMP_Abs(Address dstDisp) { 19415 int miStart = mi; 19416 setMachineCodes(mi++, (byte) 0xFF); 19417 // "register 0x4" is really part of the JMP opcode 19418 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 19419 if (lister != null) lister.RA(miStart, "JMP", dstDisp); 19420 } 19421 19422 /** 19423 * Generate a JMP to register offset. That is, 19424 * <PRE> 19425 * pc = [dstBase + dstIndex<<dstScale + dstDisp] 19426 * </PRE> 19427 * 19428 * @param dstBase the destination base register 19429 * @param dstIndex the destination index register 19430 * @param dstScale the destination shift amount 19431 * @param dstDisp the destination displacement 19432 */ 19433 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 19434 public final void emitJMP_RegIdx(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp) { 19435 int miStart = mi; 19436 generateREXprefix(false, null, dstIndex, dstBase); 19437 setMachineCodes(mi++, (byte) 0xFF); 19438 // "register 0x4" is really part of the JMP opcode 19439 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 19440 if (lister != null) lister.RXD(miStart, "JMP", dstBase, dstIndex, dstScale, dstDisp); 19441 } 19442 19443 /** 19444 * Generate a DEC on a register. That is, 19445 * <PRE> 19446 * -- reg 19447 * </PRE> 19448 * 19449 * @param reg register to operate upon 19450 */ 19451 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19452 public void emitDEC_Reg(GPR reg) { 19453 int miStart = mi; 19454 // no group 1 to 4 prefix byte 19455 generateREXprefix(false, null, null, reg); 19456 if (!VM.buildFor32Addr()) { 19457 setMachineCodes(mi++, (byte) (0xFF)); 19458 emitRegRegOperands(reg, GPR.getForOpcode(0x1)); 19459 } else { 19460 setMachineCodes(mi++, (byte) (0x48 | (reg.value() & 7))); 19461 } 19462 if (lister != null) lister.R(miStart, "DEC", reg); 19463 } 19464 /** 19465 * Generate a DEC to register-displacement offset. That is, 19466 * <PRE> 19467 * -- [base + disp] 19468 * </PRE> 19469 * 19470 * @param base the destination base register 19471 * @param disp the destination displacement 19472 */ 19473 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19474 public final void emitDEC_RegDisp(GPR base, Offset disp) { 19475 int miStart = mi; 19476 // no group 1 to 4 prefix byte 19477 generateREXprefix(false, null, null, base); 19478 setMachineCodes(mi++, (byte) 0xFF); 19479 // "register 0x1" is really part of the opcode 19480 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x1)); 19481 if (lister != null) lister.RD(miStart, "DEC", base, disp); 19482 } 19483 19484 /** 19485 * Generate a DEC to register indirect. That is, 19486 * <PRE> 19487 * -- [reg] 19488 * </PRE> 19489 * 19490 * @param base the destination base register 19491 */ 19492 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19493 public final void emitDEC_RegInd(GPR base) { 19494 int miStart = mi; 19495 // no group 1 to 4 prefix byte 19496 generateREXprefix(false, null, null, base); 19497 setMachineCodes(mi++, (byte) 0xFF); 19498 // "register 0x1" is really part of the opcode 19499 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x1)); 19500 if (lister != null) lister.RN(miStart, "DEC", base); 19501 } 19502 19503 /** 19504 * Generate a DEC to register offset. That is, 19505 * <PRE> 19506 * -- [index<<scale + disp] 19507 * </PRE> 19508 * 19509 * @param index the destination index register 19510 * @param scale the destination shift amount 19511 * @param disp the destination displacement 19512 */ 19513 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19514 public final void emitDEC_RegOff(GPR index, short scale, Offset disp) { 19515 int miStart = mi; 19516 // no group 1 to 4 prefix byte 19517 generateREXprefix(false, null, index, null); 19518 setMachineCodes(mi++, (byte) 0xFF); 19519 // "register 0x1" is really part of the opcode 19520 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x1)); 19521 if (lister != null) lister.RFD(miStart, "DEC", index, scale, disp); 19522 } 19523 19524 /** 19525 * Generate a DEC to absolute address. That is, 19526 * <PRE> 19527 * -- [disp] 19528 * </PRE> 19529 * 19530 * @param disp the destination displacement 19531 */ 19532 public final void emitDEC_Abs(Address disp) { 19533 int miStart = mi; 19534 // no group 1 to 4 prefix byte 19535 generateREXprefix(false, null, null, null); 19536 setMachineCodes(mi++, (byte) 0xFF); 19537 // "register 0x1" is really part of the opcode 19538 emitAbsRegOperands(disp, GPR.getForOpcode(0x1)); 19539 if (lister != null) lister.RA(miStart, "DEC", disp); 19540 } 19541 19542 /** 19543 * Generate a DEC to register offset. That is, 19544 * <PRE> 19545 * -- [base + index<<scale + disp] 19546 * </PRE> 19547 * 19548 * @param base the destination base register 19549 * @param index the destination index register 19550 * @param scale the destination shift amount 19551 * @param disp the destination displacement 19552 */ 19553 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 19554 public final void emitDEC_RegIdx(GPR base, GPR index, short scale, Offset disp) { 19555 int miStart = mi; 19556 // no group 1 to 4 prefix byte 19557 generateREXprefix(false, null, index, base); 19558 setMachineCodes(mi++, (byte) 0xFF); 19559 // "register 0x1" is really part of the opcode 19560 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x1)); 19561 if (lister != null) lister.RXD(miStart, "DEC", base, index, scale, disp); 19562 } 19563 19564 /** 19565 * Generate a DEC on a register. That is, 19566 * <PRE> 19567 * -- (byte) reg 19568 * </PRE> 19569 * 19570 * @param reg register to operate upon 19571 */ 19572 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19573 public final void emitDEC_Reg_Byte(GPR reg) { 19574 int miStart = mi; 19575 // no group 1 to 4 prefix byte 19576 generateREXprefix(false, null, null, reg); 19577 setMachineCodes(mi++, (byte) 0xFE); 19578 emitRegRegOperands(reg, GPR.getForOpcode(0x1)); 19579 if (lister != null) lister.R(miStart, "DEC", reg); 19580 } 19581 /** 19582 * Generate a DEC to register-displacement offset. That is, 19583 * <PRE> 19584 * -- (byte) [base + disp] 19585 * </PRE> 19586 * 19587 * @param base the destination base register 19588 * @param disp the destination displacement 19589 */ 19590 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19591 public final void emitDEC_RegDisp_Byte(GPR base, Offset disp) { 19592 int miStart = mi; 19593 // no group 1 to 4 prefix byte 19594 generateREXprefix(false, null, null, base); 19595 setMachineCodes(mi++, (byte) 0xFE); 19596 // "register 0x1" is really part of the opcode 19597 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x1)); 19598 if (lister != null) lister.RD(miStart, "DEC", base, disp); 19599 } 19600 19601 /** 19602 * Generate a DEC to register indirect. That is, 19603 * <PRE> 19604 * -- (byte) [reg] 19605 * </PRE> 19606 * 19607 * @param base the destination base register 19608 */ 19609 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19610 public final void emitDEC_RegInd_Byte(GPR base) { 19611 int miStart = mi; 19612 // no group 1 to 4 prefix byte 19613 generateREXprefix(false, null, null, base); 19614 setMachineCodes(mi++, (byte) 0xFE); 19615 // "register 0x1" is really part of the opcode 19616 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x1)); 19617 if (lister != null) lister.RN(miStart, "DEC", base); 19618 } 19619 19620 /** 19621 * Generate a DEC to register offset. That is, 19622 * <PRE> 19623 * -- (byte) [index<<scale + disp] 19624 * </PRE> 19625 * 19626 * @param index the destination index register 19627 * @param scale the destination shift amount 19628 * @param disp the destination displacement 19629 */ 19630 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19631 public final void emitDEC_RegOff_Byte(GPR index, short scale, Offset disp) { 19632 int miStart = mi; 19633 // no group 1 to 4 prefix byte 19634 generateREXprefix(false, null, index, null); 19635 setMachineCodes(mi++, (byte) 0xFE); 19636 // "register 0x1" is really part of the opcode 19637 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x1)); 19638 if (lister != null) lister.RFD(miStart, "DEC", index, scale, disp); 19639 } 19640 19641 /** 19642 * Generate a DEC to absolute address. That is, 19643 * <PRE> 19644 * -- (byte) [disp] 19645 * </PRE> 19646 * 19647 * @param disp the destination displacement 19648 */ 19649 public final void emitDEC_Abs_Byte(Address disp) { 19650 int miStart = mi; 19651 // no group 1 to 4 prefix byte 19652 generateREXprefix(false, null, null, null); 19653 setMachineCodes(mi++, (byte) 0xFE); 19654 // "register 0x1" is really part of the opcode 19655 emitAbsRegOperands(disp, GPR.getForOpcode(0x1)); 19656 if (lister != null) lister.RA(miStart, "DEC", disp); 19657 } 19658 19659 /** 19660 * Generate a DEC to register offset. That is, 19661 * <PRE> 19662 * -- (byte) [base + index<<scale + disp] 19663 * </PRE> 19664 * 19665 * @param base the destination base register 19666 * @param index the destination index register 19667 * @param scale the destination shift amount 19668 * @param disp the destination displacement 19669 */ 19670 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 19671 public final void emitDEC_RegIdx_Byte(GPR base, GPR index, short scale, Offset disp) { 19672 int miStart = mi; 19673 // no group 1 to 4 prefix byte 19674 generateREXprefix(false, null, index, base); 19675 setMachineCodes(mi++, (byte) 0xFE); 19676 // "register 0x1" is really part of the opcode 19677 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x1)); 19678 if (lister != null) lister.RXD(miStart, "DEC", base, index, scale, disp); 19679 } 19680 19681 /** 19682 * Generate a DEC on a register. That is, 19683 * <PRE> 19684 * -- (word) reg 19685 * </PRE> 19686 * 19687 * @param reg register to operate upon 19688 */ 19689 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19690 public void emitDEC_Reg_Word(GPR reg) { 19691 int miStart = mi; 19692 setMachineCodes(mi++, (byte) 0x66); 19693 generateREXprefix(false, null, null, reg); 19694 if (!VM.buildFor32Addr()) { 19695 setMachineCodes(mi++, (byte) (0xFF)); 19696 emitRegRegOperands(reg, GPR.getForOpcode(0x1)); 19697 } else { 19698 setMachineCodes(mi++, (byte) (0x48 | (reg.value() & 7))); 19699 } 19700 if (lister != null) lister.R(miStart, "DEC", reg); 19701 } 19702 /** 19703 * Generate a DEC to register-displacement offset. That is, 19704 * <PRE> 19705 * -- (word) [base + disp] 19706 * </PRE> 19707 * 19708 * @param base the destination base register 19709 * @param disp the destination displacement 19710 */ 19711 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19712 public final void emitDEC_RegDisp_Word(GPR base, Offset disp) { 19713 int miStart = mi; 19714 setMachineCodes(mi++, (byte) 0x66); 19715 generateREXprefix(false, null, null, base); 19716 setMachineCodes(mi++, (byte) 0xFF); 19717 // "register 0x1" is really part of the opcode 19718 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x1)); 19719 if (lister != null) lister.RD(miStart, "DEC", base, disp); 19720 } 19721 19722 /** 19723 * Generate a DEC to register indirect. That is, 19724 * <PRE> 19725 * -- (word) [reg] 19726 * </PRE> 19727 * 19728 * @param base the destination base register 19729 */ 19730 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19731 public final void emitDEC_RegInd_Word(GPR base) { 19732 int miStart = mi; 19733 setMachineCodes(mi++, (byte) 0x66); 19734 generateREXprefix(false, null, null, base); 19735 setMachineCodes(mi++, (byte) 0xFF); 19736 // "register 0x1" is really part of the opcode 19737 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x1)); 19738 if (lister != null) lister.RN(miStart, "DEC", base); 19739 } 19740 19741 /** 19742 * Generate a DEC to register offset. That is, 19743 * <PRE> 19744 * -- (word) [index<<scale + disp] 19745 * </PRE> 19746 * 19747 * @param index the destination index register 19748 * @param scale the destination shift amount 19749 * @param disp the destination displacement 19750 */ 19751 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19752 public final void emitDEC_RegOff_Word(GPR index, short scale, Offset disp) { 19753 int miStart = mi; 19754 setMachineCodes(mi++, (byte) 0x66); 19755 generateREXprefix(false, null, index, null); 19756 setMachineCodes(mi++, (byte) 0xFF); 19757 // "register 0x1" is really part of the opcode 19758 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x1)); 19759 if (lister != null) lister.RFD(miStart, "DEC", index, scale, disp); 19760 } 19761 19762 /** 19763 * Generate a DEC to absolute address. That is, 19764 * <PRE> 19765 * -- (word) [disp] 19766 * </PRE> 19767 * 19768 * @param disp the destination displacement 19769 */ 19770 public final void emitDEC_Abs_Word(Address disp) { 19771 int miStart = mi; 19772 setMachineCodes(mi++, (byte) 0x66); 19773 generateREXprefix(false, null, null, null); 19774 setMachineCodes(mi++, (byte) 0xFF); 19775 // "register 0x1" is really part of the opcode 19776 emitAbsRegOperands(disp, GPR.getForOpcode(0x1)); 19777 if (lister != null) lister.RA(miStart, "DEC", disp); 19778 } 19779 19780 /** 19781 * Generate a DEC to register offset. That is, 19782 * <PRE> 19783 * -- (word) [base + index<<scale + disp] 19784 * </PRE> 19785 * 19786 * @param base the destination base register 19787 * @param index the destination index register 19788 * @param scale the destination shift amount 19789 * @param disp the destination displacement 19790 */ 19791 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 19792 public final void emitDEC_RegIdx_Word(GPR base, GPR index, short scale, Offset disp) { 19793 int miStart = mi; 19794 setMachineCodes(mi++, (byte) 0x66); 19795 generateREXprefix(false, null, index, base); 19796 setMachineCodes(mi++, (byte) 0xFF); 19797 // "register 0x1" is really part of the opcode 19798 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x1)); 19799 if (lister != null) lister.RXD(miStart, "DEC", base, index, scale, disp); 19800 } 19801 19802 /** 19803 * Generate a DEC on a register. That is, 19804 * <PRE> 19805 * -- (quad) reg 19806 * </PRE> 19807 * 19808 * @param reg register to operate upon 19809 */ 19810 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19811 public void emitDEC_Reg_Quad(GPR reg) { 19812 int miStart = mi; 19813 // no group 1 to 4 prefix byte 19814 generateREXprefix(true, null, null, reg); 19815 if (!VM.buildFor32Addr()) { 19816 setMachineCodes(mi++, (byte) (0xFF)); 19817 emitRegRegOperands(reg, GPR.getForOpcode(0x1)); 19818 } else { 19819 setMachineCodes(mi++, (byte) (0x48 | (reg.value() & 7))); 19820 } 19821 if (lister != null) lister.R(miStart, "DEC", reg); 19822 } 19823 /** 19824 * Generate a DEC to register-displacement offset. That is, 19825 * <PRE> 19826 * -- (quad) [base + disp] 19827 * </PRE> 19828 * 19829 * @param base the destination base register 19830 * @param disp the destination displacement 19831 */ 19832 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19833 public final void emitDEC_RegDisp_Quad(GPR base, Offset disp) { 19834 int miStart = mi; 19835 // no group 1 to 4 prefix byte 19836 generateREXprefix(true, null, null, base); 19837 setMachineCodes(mi++, (byte) 0xFF); 19838 // "register 0x1" is really part of the opcode 19839 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x1)); 19840 if (lister != null) lister.RD(miStart, "DEC", base, disp); 19841 } 19842 19843 /** 19844 * Generate a DEC to register indirect. That is, 19845 * <PRE> 19846 * -- (quad) [reg] 19847 * </PRE> 19848 * 19849 * @param base the destination base register 19850 */ 19851 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19852 public final void emitDEC_RegInd_Quad(GPR base) { 19853 int miStart = mi; 19854 // no group 1 to 4 prefix byte 19855 generateREXprefix(true, null, null, base); 19856 setMachineCodes(mi++, (byte) 0xFF); 19857 // "register 0x1" is really part of the opcode 19858 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x1)); 19859 if (lister != null) lister.RN(miStart, "DEC", base); 19860 } 19861 19862 /** 19863 * Generate a DEC to register offset. That is, 19864 * <PRE> 19865 * -- (quad) [index<<scale + disp] 19866 * </PRE> 19867 * 19868 * @param index the destination index register 19869 * @param scale the destination shift amount 19870 * @param disp the destination displacement 19871 */ 19872 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19873 public final void emitDEC_RegOff_Quad(GPR index, short scale, Offset disp) { 19874 int miStart = mi; 19875 // no group 1 to 4 prefix byte 19876 generateREXprefix(true, null, index, null); 19877 setMachineCodes(mi++, (byte) 0xFF); 19878 // "register 0x1" is really part of the opcode 19879 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x1)); 19880 if (lister != null) lister.RFD(miStart, "DEC", index, scale, disp); 19881 } 19882 19883 /** 19884 * Generate a DEC to absolute address. That is, 19885 * <PRE> 19886 * -- (quad) [disp] 19887 * </PRE> 19888 * 19889 * @param disp the destination displacement 19890 */ 19891 public final void emitDEC_Abs_Quad(Address disp) { 19892 int miStart = mi; 19893 // no group 1 to 4 prefix byte 19894 generateREXprefix(true, null, null, null); 19895 setMachineCodes(mi++, (byte) 0xFF); 19896 // "register 0x1" is really part of the opcode 19897 emitAbsRegOperands(disp, GPR.getForOpcode(0x1)); 19898 if (lister != null) lister.RA(miStart, "DEC", disp); 19899 } 19900 19901 /** 19902 * Generate a DEC to register offset. That is, 19903 * <PRE> 19904 * -- (quad) [base + index<<scale + disp] 19905 * </PRE> 19906 * 19907 * @param base the destination base register 19908 * @param index the destination index register 19909 * @param scale the destination shift amount 19910 * @param disp the destination displacement 19911 */ 19912 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 19913 public final void emitDEC_RegIdx_Quad(GPR base, GPR index, short scale, Offset disp) { 19914 int miStart = mi; 19915 // no group 1 to 4 prefix byte 19916 generateREXprefix(true, null, index, base); 19917 setMachineCodes(mi++, (byte) 0xFF); 19918 // "register 0x1" is really part of the opcode 19919 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x1)); 19920 if (lister != null) lister.RXD(miStart, "DEC", base, index, scale, disp); 19921 } 19922 19923 /** 19924 * Generate a INC on a register. That is, 19925 * <PRE> 19926 * ++ reg 19927 * </PRE> 19928 * 19929 * @param reg register to operate upon 19930 */ 19931 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19932 public void emitINC_Reg(GPR reg) { 19933 int miStart = mi; 19934 // no group 1 to 4 prefix byte 19935 generateREXprefix(false, null, null, reg); 19936 if (!VM.buildFor32Addr()) { 19937 setMachineCodes(mi++, (byte) (0xFF)); 19938 emitRegRegOperands(reg, GPR.getForOpcode(0x0)); 19939 } else { 19940 setMachineCodes(mi++, (byte) (0x40 | (reg.value() & 7))); 19941 } 19942 if (lister != null) lister.R(miStart, "INC", reg); 19943 } 19944 /** 19945 * Generate a INC to register-displacement offset. That is, 19946 * <PRE> 19947 * ++ [base + disp] 19948 * </PRE> 19949 * 19950 * @param base the destination base register 19951 * @param disp the destination displacement 19952 */ 19953 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19954 public final void emitINC_RegDisp(GPR base, Offset disp) { 19955 int miStart = mi; 19956 // no group 1 to 4 prefix byte 19957 generateREXprefix(false, null, null, base); 19958 setMachineCodes(mi++, (byte) 0xFF); 19959 // "register 0x0" is really part of the opcode 19960 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x0)); 19961 if (lister != null) lister.RD(miStart, "INC", base, disp); 19962 } 19963 19964 /** 19965 * Generate a INC to register indirect. That is, 19966 * <PRE> 19967 * ++ [reg] 19968 * </PRE> 19969 * 19970 * @param base the destination base register 19971 */ 19972 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19973 public final void emitINC_RegInd(GPR base) { 19974 int miStart = mi; 19975 // no group 1 to 4 prefix byte 19976 generateREXprefix(false, null, null, base); 19977 setMachineCodes(mi++, (byte) 0xFF); 19978 // "register 0x0" is really part of the opcode 19979 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x0)); 19980 if (lister != null) lister.RN(miStart, "INC", base); 19981 } 19982 19983 /** 19984 * Generate a INC to register offset. That is, 19985 * <PRE> 19986 * ++ [index<<scale + disp] 19987 * </PRE> 19988 * 19989 * @param index the destination index register 19990 * @param scale the destination shift amount 19991 * @param disp the destination displacement 19992 */ 19993 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 19994 public final void emitINC_RegOff(GPR index, short scale, Offset disp) { 19995 int miStart = mi; 19996 // no group 1 to 4 prefix byte 19997 generateREXprefix(false, null, index, null); 19998 setMachineCodes(mi++, (byte) 0xFF); 19999 // "register 0x0" is really part of the opcode 20000 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x0)); 20001 if (lister != null) lister.RFD(miStart, "INC", index, scale, disp); 20002 } 20003 20004 /** 20005 * Generate a INC to absolute address. That is, 20006 * <PRE> 20007 * ++ [disp] 20008 * </PRE> 20009 * 20010 * @param disp the destination displacement 20011 */ 20012 public final void emitINC_Abs(Address disp) { 20013 int miStart = mi; 20014 // no group 1 to 4 prefix byte 20015 generateREXprefix(false, null, null, null); 20016 setMachineCodes(mi++, (byte) 0xFF); 20017 // "register 0x0" is really part of the opcode 20018 emitAbsRegOperands(disp, GPR.getForOpcode(0x0)); 20019 if (lister != null) lister.RA(miStart, "INC", disp); 20020 } 20021 20022 /** 20023 * Generate a INC to register offset. That is, 20024 * <PRE> 20025 * ++ [base + index<<scale + disp] 20026 * </PRE> 20027 * 20028 * @param base the destination base register 20029 * @param index the destination index register 20030 * @param scale the destination shift amount 20031 * @param disp the destination displacement 20032 */ 20033 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 20034 public final void emitINC_RegIdx(GPR base, GPR index, short scale, Offset disp) { 20035 int miStart = mi; 20036 // no group 1 to 4 prefix byte 20037 generateREXprefix(false, null, index, base); 20038 setMachineCodes(mi++, (byte) 0xFF); 20039 // "register 0x0" is really part of the opcode 20040 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x0)); 20041 if (lister != null) lister.RXD(miStart, "INC", base, index, scale, disp); 20042 } 20043 20044 /** 20045 * Generate a INC on a register. That is, 20046 * <PRE> 20047 * ++ (byte) reg 20048 * </PRE> 20049 * 20050 * @param reg register to operate upon 20051 */ 20052 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20053 public final void emitINC_Reg_Byte(GPR reg) { 20054 int miStart = mi; 20055 // no group 1 to 4 prefix byte 20056 generateREXprefix(false, null, null, reg); 20057 setMachineCodes(mi++, (byte) 0xFE); 20058 emitRegRegOperands(reg, GPR.getForOpcode(0x0)); 20059 if (lister != null) lister.R(miStart, "INC", reg); 20060 } 20061 /** 20062 * Generate a INC to register-displacement offset. That is, 20063 * <PRE> 20064 * ++ (byte) [base + disp] 20065 * </PRE> 20066 * 20067 * @param base the destination base register 20068 * @param disp the destination displacement 20069 */ 20070 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20071 public final void emitINC_RegDisp_Byte(GPR base, Offset disp) { 20072 int miStart = mi; 20073 // no group 1 to 4 prefix byte 20074 generateREXprefix(false, null, null, base); 20075 setMachineCodes(mi++, (byte) 0xFE); 20076 // "register 0x0" is really part of the opcode 20077 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x0)); 20078 if (lister != null) lister.RD(miStart, "INC", base, disp); 20079 } 20080 20081 /** 20082 * Generate a INC to register indirect. That is, 20083 * <PRE> 20084 * ++ (byte) [reg] 20085 * </PRE> 20086 * 20087 * @param base the destination base register 20088 */ 20089 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20090 public final void emitINC_RegInd_Byte(GPR base) { 20091 int miStart = mi; 20092 // no group 1 to 4 prefix byte 20093 generateREXprefix(false, null, null, base); 20094 setMachineCodes(mi++, (byte) 0xFE); 20095 // "register 0x0" is really part of the opcode 20096 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x0)); 20097 if (lister != null) lister.RN(miStart, "INC", base); 20098 } 20099 20100 /** 20101 * Generate a INC to register offset. That is, 20102 * <PRE> 20103 * ++ (byte) [index<<scale + disp] 20104 * </PRE> 20105 * 20106 * @param index the destination index register 20107 * @param scale the destination shift amount 20108 * @param disp the destination displacement 20109 */ 20110 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20111 public final void emitINC_RegOff_Byte(GPR index, short scale, Offset disp) { 20112 int miStart = mi; 20113 // no group 1 to 4 prefix byte 20114 generateREXprefix(false, null, index, null); 20115 setMachineCodes(mi++, (byte) 0xFE); 20116 // "register 0x0" is really part of the opcode 20117 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x0)); 20118 if (lister != null) lister.RFD(miStart, "INC", index, scale, disp); 20119 } 20120 20121 /** 20122 * Generate a INC to absolute address. That is, 20123 * <PRE> 20124 * ++ (byte) [disp] 20125 * </PRE> 20126 * 20127 * @param disp the destination displacement 20128 */ 20129 public final void emitINC_Abs_Byte(Address disp) { 20130 int miStart = mi; 20131 // no group 1 to 4 prefix byte 20132 generateREXprefix(false, null, null, null); 20133 setMachineCodes(mi++, (byte) 0xFE); 20134 // "register 0x0" is really part of the opcode 20135 emitAbsRegOperands(disp, GPR.getForOpcode(0x0)); 20136 if (lister != null) lister.RA(miStart, "INC", disp); 20137 } 20138 20139 /** 20140 * Generate a INC to register offset. That is, 20141 * <PRE> 20142 * ++ (byte) [base + index<<scale + disp] 20143 * </PRE> 20144 * 20145 * @param base the destination base register 20146 * @param index the destination index register 20147 * @param scale the destination shift amount 20148 * @param disp the destination displacement 20149 */ 20150 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 20151 public final void emitINC_RegIdx_Byte(GPR base, GPR index, short scale, Offset disp) { 20152 int miStart = mi; 20153 // no group 1 to 4 prefix byte 20154 generateREXprefix(false, null, index, base); 20155 setMachineCodes(mi++, (byte) 0xFE); 20156 // "register 0x0" is really part of the opcode 20157 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x0)); 20158 if (lister != null) lister.RXD(miStart, "INC", base, index, scale, disp); 20159 } 20160 20161 /** 20162 * Generate a INC on a register. That is, 20163 * <PRE> 20164 * ++ (word) reg 20165 * </PRE> 20166 * 20167 * @param reg register to operate upon 20168 */ 20169 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20170 public void emitINC_Reg_Word(GPR reg) { 20171 int miStart = mi; 20172 setMachineCodes(mi++, (byte) 0x66); 20173 generateREXprefix(false, null, null, reg); 20174 if (!VM.buildFor32Addr()) { 20175 setMachineCodes(mi++, (byte) (0xFF)); 20176 emitRegRegOperands(reg, GPR.getForOpcode(0x0)); 20177 } else { 20178 setMachineCodes(mi++, (byte) (0x40 | (reg.value() & 7))); 20179 } 20180 if (lister != null) lister.R(miStart, "INC", reg); 20181 } 20182 /** 20183 * Generate a INC to register-displacement offset. That is, 20184 * <PRE> 20185 * ++ (word) [base + disp] 20186 * </PRE> 20187 * 20188 * @param base the destination base register 20189 * @param disp the destination displacement 20190 */ 20191 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20192 public final void emitINC_RegDisp_Word(GPR base, Offset disp) { 20193 int miStart = mi; 20194 setMachineCodes(mi++, (byte) 0x66); 20195 generateREXprefix(false, null, null, base); 20196 setMachineCodes(mi++, (byte) 0xFF); 20197 // "register 0x0" is really part of the opcode 20198 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x0)); 20199 if (lister != null) lister.RD(miStart, "INC", base, disp); 20200 } 20201 20202 /** 20203 * Generate a INC to register indirect. That is, 20204 * <PRE> 20205 * ++ (word) [reg] 20206 * </PRE> 20207 * 20208 * @param base the destination base register 20209 */ 20210 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20211 public final void emitINC_RegInd_Word(GPR base) { 20212 int miStart = mi; 20213 setMachineCodes(mi++, (byte) 0x66); 20214 generateREXprefix(false, null, null, base); 20215 setMachineCodes(mi++, (byte) 0xFF); 20216 // "register 0x0" is really part of the opcode 20217 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x0)); 20218 if (lister != null) lister.RN(miStart, "INC", base); 20219 } 20220 20221 /** 20222 * Generate a INC to register offset. That is, 20223 * <PRE> 20224 * ++ (word) [index<<scale + disp] 20225 * </PRE> 20226 * 20227 * @param index the destination index register 20228 * @param scale the destination shift amount 20229 * @param disp the destination displacement 20230 */ 20231 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20232 public final void emitINC_RegOff_Word(GPR index, short scale, Offset disp) { 20233 int miStart = mi; 20234 setMachineCodes(mi++, (byte) 0x66); 20235 generateREXprefix(false, null, index, null); 20236 setMachineCodes(mi++, (byte) 0xFF); 20237 // "register 0x0" is really part of the opcode 20238 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x0)); 20239 if (lister != null) lister.RFD(miStart, "INC", index, scale, disp); 20240 } 20241 20242 /** 20243 * Generate a INC to absolute address. That is, 20244 * <PRE> 20245 * ++ (word) [disp] 20246 * </PRE> 20247 * 20248 * @param disp the destination displacement 20249 */ 20250 public final void emitINC_Abs_Word(Address disp) { 20251 int miStart = mi; 20252 setMachineCodes(mi++, (byte) 0x66); 20253 generateREXprefix(false, null, null, null); 20254 setMachineCodes(mi++, (byte) 0xFF); 20255 // "register 0x0" is really part of the opcode 20256 emitAbsRegOperands(disp, GPR.getForOpcode(0x0)); 20257 if (lister != null) lister.RA(miStart, "INC", disp); 20258 } 20259 20260 /** 20261 * Generate a INC to register offset. That is, 20262 * <PRE> 20263 * ++ (word) [base + index<<scale + disp] 20264 * </PRE> 20265 * 20266 * @param base the destination base register 20267 * @param index the destination index register 20268 * @param scale the destination shift amount 20269 * @param disp the destination displacement 20270 */ 20271 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 20272 public final void emitINC_RegIdx_Word(GPR base, GPR index, short scale, Offset disp) { 20273 int miStart = mi; 20274 setMachineCodes(mi++, (byte) 0x66); 20275 generateREXprefix(false, null, index, base); 20276 setMachineCodes(mi++, (byte) 0xFF); 20277 // "register 0x0" is really part of the opcode 20278 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x0)); 20279 if (lister != null) lister.RXD(miStart, "INC", base, index, scale, disp); 20280 } 20281 20282 /** 20283 * Generate a INC on a register. That is, 20284 * <PRE> 20285 * ++ (quad) reg 20286 * </PRE> 20287 * 20288 * @param reg register to operate upon 20289 */ 20290 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20291 public void emitINC_Reg_Quad(GPR reg) { 20292 int miStart = mi; 20293 // no group 1 to 4 prefix byte 20294 generateREXprefix(true, null, null, reg); 20295 if (!VM.buildFor32Addr()) { 20296 setMachineCodes(mi++, (byte) (0xFF)); 20297 emitRegRegOperands(reg, GPR.getForOpcode(0x0)); 20298 } else { 20299 setMachineCodes(mi++, (byte) (0x40 | (reg.value() & 7))); 20300 } 20301 if (lister != null) lister.R(miStart, "INC", reg); 20302 } 20303 /** 20304 * Generate a INC to register-displacement offset. That is, 20305 * <PRE> 20306 * ++ (quad) [base + disp] 20307 * </PRE> 20308 * 20309 * @param base the destination base register 20310 * @param disp the destination displacement 20311 */ 20312 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20313 public final void emitINC_RegDisp_Quad(GPR base, Offset disp) { 20314 int miStart = mi; 20315 // no group 1 to 4 prefix byte 20316 generateREXprefix(true, null, null, base); 20317 setMachineCodes(mi++, (byte) 0xFF); 20318 // "register 0x0" is really part of the opcode 20319 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x0)); 20320 if (lister != null) lister.RD(miStart, "INC", base, disp); 20321 } 20322 20323 /** 20324 * Generate a INC to register indirect. That is, 20325 * <PRE> 20326 * ++ (quad) [reg] 20327 * </PRE> 20328 * 20329 * @param base the destination base register 20330 */ 20331 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20332 public final void emitINC_RegInd_Quad(GPR base) { 20333 int miStart = mi; 20334 // no group 1 to 4 prefix byte 20335 generateREXprefix(true, null, null, base); 20336 setMachineCodes(mi++, (byte) 0xFF); 20337 // "register 0x0" is really part of the opcode 20338 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x0)); 20339 if (lister != null) lister.RN(miStart, "INC", base); 20340 } 20341 20342 /** 20343 * Generate a INC to register offset. That is, 20344 * <PRE> 20345 * ++ (quad) [index<<scale + disp] 20346 * </PRE> 20347 * 20348 * @param index the destination index register 20349 * @param scale the destination shift amount 20350 * @param disp the destination displacement 20351 */ 20352 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20353 public final void emitINC_RegOff_Quad(GPR index, short scale, Offset disp) { 20354 int miStart = mi; 20355 // no group 1 to 4 prefix byte 20356 generateREXprefix(true, null, index, null); 20357 setMachineCodes(mi++, (byte) 0xFF); 20358 // "register 0x0" is really part of the opcode 20359 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x0)); 20360 if (lister != null) lister.RFD(miStart, "INC", index, scale, disp); 20361 } 20362 20363 /** 20364 * Generate a INC to absolute address. That is, 20365 * <PRE> 20366 * ++ (quad) [disp] 20367 * </PRE> 20368 * 20369 * @param disp the destination displacement 20370 */ 20371 public final void emitINC_Abs_Quad(Address disp) { 20372 int miStart = mi; 20373 // no group 1 to 4 prefix byte 20374 generateREXprefix(true, null, null, null); 20375 setMachineCodes(mi++, (byte) 0xFF); 20376 // "register 0x0" is really part of the opcode 20377 emitAbsRegOperands(disp, GPR.getForOpcode(0x0)); 20378 if (lister != null) lister.RA(miStart, "INC", disp); 20379 } 20380 20381 /** 20382 * Generate a INC to register offset. That is, 20383 * <PRE> 20384 * ++ (quad) [base + index<<scale + disp] 20385 * </PRE> 20386 * 20387 * @param base the destination base register 20388 * @param index the destination index register 20389 * @param scale the destination shift amount 20390 * @param disp the destination displacement 20391 */ 20392 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 20393 public final void emitINC_RegIdx_Quad(GPR base, GPR index, short scale, Offset disp) { 20394 int miStart = mi; 20395 // no group 1 to 4 prefix byte 20396 generateREXprefix(true, null, index, base); 20397 setMachineCodes(mi++, (byte) 0xFF); 20398 // "register 0x0" is really part of the opcode 20399 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x0)); 20400 if (lister != null) lister.RXD(miStart, "INC", base, index, scale, disp); 20401 } 20402 20403 /** 20404 * Generate a NEG on a register. That is, 20405 * <PRE> 20406 * - reg 20407 * </PRE> 20408 * 20409 * @param reg register to operate upon 20410 */ 20411 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20412 public final void emitNEG_Reg(GPR reg) { 20413 int miStart = mi; 20414 // no group 1 to 4 prefix byte 20415 generateREXprefix(false, null, null, reg); 20416 setMachineCodes(mi++, (byte) 0xF7); 20417 emitRegRegOperands(reg, GPR.getForOpcode(0x3)); 20418 if (lister != null) lister.R(miStart, "NEG", reg); 20419 } 20420 /** 20421 * Generate a NEG to register-displacement offset. That is, 20422 * <PRE> 20423 * - [base + disp] 20424 * </PRE> 20425 * 20426 * @param base the destination base register 20427 * @param disp the destination displacement 20428 */ 20429 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20430 public final void emitNEG_RegDisp(GPR base, Offset disp) { 20431 int miStart = mi; 20432 // no group 1 to 4 prefix byte 20433 generateREXprefix(false, null, null, base); 20434 setMachineCodes(mi++, (byte) 0xF7); 20435 // "register 0x3" is really part of the opcode 20436 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x3)); 20437 if (lister != null) lister.RD(miStart, "NEG", base, disp); 20438 } 20439 20440 /** 20441 * Generate a NEG to register indirect. That is, 20442 * <PRE> 20443 * - [reg] 20444 * </PRE> 20445 * 20446 * @param base the destination base register 20447 */ 20448 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20449 public final void emitNEG_RegInd(GPR base) { 20450 int miStart = mi; 20451 // no group 1 to 4 prefix byte 20452 generateREXprefix(false, null, null, base); 20453 setMachineCodes(mi++, (byte) 0xF7); 20454 // "register 0x3" is really part of the opcode 20455 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x3)); 20456 if (lister != null) lister.RN(miStart, "NEG", base); 20457 } 20458 20459 /** 20460 * Generate a NEG to register offset. That is, 20461 * <PRE> 20462 * - [index<<scale + disp] 20463 * </PRE> 20464 * 20465 * @param index the destination index register 20466 * @param scale the destination shift amount 20467 * @param disp the destination displacement 20468 */ 20469 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20470 public final void emitNEG_RegOff(GPR index, short scale, Offset disp) { 20471 int miStart = mi; 20472 // no group 1 to 4 prefix byte 20473 generateREXprefix(false, null, index, null); 20474 setMachineCodes(mi++, (byte) 0xF7); 20475 // "register 0x3" is really part of the opcode 20476 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x3)); 20477 if (lister != null) lister.RFD(miStart, "NEG", index, scale, disp); 20478 } 20479 20480 /** 20481 * Generate a NEG to absolute address. That is, 20482 * <PRE> 20483 * - [disp] 20484 * </PRE> 20485 * 20486 * @param disp the destination displacement 20487 */ 20488 public final void emitNEG_Abs(Address disp) { 20489 int miStart = mi; 20490 // no group 1 to 4 prefix byte 20491 generateREXprefix(false, null, null, null); 20492 setMachineCodes(mi++, (byte) 0xF7); 20493 // "register 0x3" is really part of the opcode 20494 emitAbsRegOperands(disp, GPR.getForOpcode(0x3)); 20495 if (lister != null) lister.RA(miStart, "NEG", disp); 20496 } 20497 20498 /** 20499 * Generate a NEG to register offset. That is, 20500 * <PRE> 20501 * - [base + index<<scale + disp] 20502 * </PRE> 20503 * 20504 * @param base the destination base register 20505 * @param index the destination index register 20506 * @param scale the destination shift amount 20507 * @param disp the destination displacement 20508 */ 20509 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 20510 public final void emitNEG_RegIdx(GPR base, GPR index, short scale, Offset disp) { 20511 int miStart = mi; 20512 // no group 1 to 4 prefix byte 20513 generateREXprefix(false, null, index, base); 20514 setMachineCodes(mi++, (byte) 0xF7); 20515 // "register 0x3" is really part of the opcode 20516 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x3)); 20517 if (lister != null) lister.RXD(miStart, "NEG", base, index, scale, disp); 20518 } 20519 20520 /** 20521 * Generate a NEG on a register. That is, 20522 * <PRE> 20523 * - (byte) reg 20524 * </PRE> 20525 * 20526 * @param reg register to operate upon 20527 */ 20528 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20529 public final void emitNEG_Reg_Byte(GPR reg) { 20530 int miStart = mi; 20531 // no group 1 to 4 prefix byte 20532 generateREXprefix(false, null, null, reg); 20533 setMachineCodes(mi++, (byte) 0xF6); 20534 emitRegRegOperands(reg, GPR.getForOpcode(0x3)); 20535 if (lister != null) lister.R(miStart, "NEG", reg); 20536 } 20537 /** 20538 * Generate a NEG to register-displacement offset. That is, 20539 * <PRE> 20540 * - (byte) [base + disp] 20541 * </PRE> 20542 * 20543 * @param base the destination base register 20544 * @param disp the destination displacement 20545 */ 20546 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20547 public final void emitNEG_RegDisp_Byte(GPR base, Offset disp) { 20548 int miStart = mi; 20549 // no group 1 to 4 prefix byte 20550 generateREXprefix(false, null, null, base); 20551 setMachineCodes(mi++, (byte) 0xF6); 20552 // "register 0x3" is really part of the opcode 20553 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x3)); 20554 if (lister != null) lister.RD(miStart, "NEG", base, disp); 20555 } 20556 20557 /** 20558 * Generate a NEG to register indirect. That is, 20559 * <PRE> 20560 * - (byte) [reg] 20561 * </PRE> 20562 * 20563 * @param base the destination base register 20564 */ 20565 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20566 public final void emitNEG_RegInd_Byte(GPR base) { 20567 int miStart = mi; 20568 // no group 1 to 4 prefix byte 20569 generateREXprefix(false, null, null, base); 20570 setMachineCodes(mi++, (byte) 0xF6); 20571 // "register 0x3" is really part of the opcode 20572 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x3)); 20573 if (lister != null) lister.RN(miStart, "NEG", base); 20574 } 20575 20576 /** 20577 * Generate a NEG to register offset. That is, 20578 * <PRE> 20579 * - (byte) [index<<scale + disp] 20580 * </PRE> 20581 * 20582 * @param index the destination index register 20583 * @param scale the destination shift amount 20584 * @param disp the destination displacement 20585 */ 20586 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20587 public final void emitNEG_RegOff_Byte(GPR index, short scale, Offset disp) { 20588 int miStart = mi; 20589 // no group 1 to 4 prefix byte 20590 generateREXprefix(false, null, index, null); 20591 setMachineCodes(mi++, (byte) 0xF6); 20592 // "register 0x3" is really part of the opcode 20593 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x3)); 20594 if (lister != null) lister.RFD(miStart, "NEG", index, scale, disp); 20595 } 20596 20597 /** 20598 * Generate a NEG to absolute address. That is, 20599 * <PRE> 20600 * - (byte) [disp] 20601 * </PRE> 20602 * 20603 * @param disp the destination displacement 20604 */ 20605 public final void emitNEG_Abs_Byte(Address disp) { 20606 int miStart = mi; 20607 // no group 1 to 4 prefix byte 20608 generateREXprefix(false, null, null, null); 20609 setMachineCodes(mi++, (byte) 0xF6); 20610 // "register 0x3" is really part of the opcode 20611 emitAbsRegOperands(disp, GPR.getForOpcode(0x3)); 20612 if (lister != null) lister.RA(miStart, "NEG", disp); 20613 } 20614 20615 /** 20616 * Generate a NEG to register offset. That is, 20617 * <PRE> 20618 * - (byte) [base + index<<scale + disp] 20619 * </PRE> 20620 * 20621 * @param base the destination base register 20622 * @param index the destination index register 20623 * @param scale the destination shift amount 20624 * @param disp the destination displacement 20625 */ 20626 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 20627 public final void emitNEG_RegIdx_Byte(GPR base, GPR index, short scale, Offset disp) { 20628 int miStart = mi; 20629 // no group 1 to 4 prefix byte 20630 generateREXprefix(false, null, index, base); 20631 setMachineCodes(mi++, (byte) 0xF6); 20632 // "register 0x3" is really part of the opcode 20633 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x3)); 20634 if (lister != null) lister.RXD(miStart, "NEG", base, index, scale, disp); 20635 } 20636 20637 /** 20638 * Generate a NEG on a register. That is, 20639 * <PRE> 20640 * - (word) reg 20641 * </PRE> 20642 * 20643 * @param reg register to operate upon 20644 */ 20645 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20646 public final void emitNEG_Reg_Word(GPR reg) { 20647 int miStart = mi; 20648 setMachineCodes(mi++, (byte) 0x66); 20649 generateREXprefix(false, null, null, reg); 20650 setMachineCodes(mi++, (byte) 0xF7); 20651 emitRegRegOperands(reg, GPR.getForOpcode(0x3)); 20652 if (lister != null) lister.R(miStart, "NEG", reg); 20653 } 20654 /** 20655 * Generate a NEG to register-displacement offset. That is, 20656 * <PRE> 20657 * - (word) [base + disp] 20658 * </PRE> 20659 * 20660 * @param base the destination base register 20661 * @param disp the destination displacement 20662 */ 20663 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20664 public final void emitNEG_RegDisp_Word(GPR base, Offset disp) { 20665 int miStart = mi; 20666 setMachineCodes(mi++, (byte) 0x66); 20667 generateREXprefix(false, null, null, base); 20668 setMachineCodes(mi++, (byte) 0xF7); 20669 // "register 0x3" is really part of the opcode 20670 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x3)); 20671 if (lister != null) lister.RD(miStart, "NEG", base, disp); 20672 } 20673 20674 /** 20675 * Generate a NEG to register indirect. That is, 20676 * <PRE> 20677 * - (word) [reg] 20678 * </PRE> 20679 * 20680 * @param base the destination base register 20681 */ 20682 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20683 public final void emitNEG_RegInd_Word(GPR base) { 20684 int miStart = mi; 20685 setMachineCodes(mi++, (byte) 0x66); 20686 generateREXprefix(false, null, null, base); 20687 setMachineCodes(mi++, (byte) 0xF7); 20688 // "register 0x3" is really part of the opcode 20689 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x3)); 20690 if (lister != null) lister.RN(miStart, "NEG", base); 20691 } 20692 20693 /** 20694 * Generate a NEG to register offset. That is, 20695 * <PRE> 20696 * - (word) [index<<scale + disp] 20697 * </PRE> 20698 * 20699 * @param index the destination index register 20700 * @param scale the destination shift amount 20701 * @param disp the destination displacement 20702 */ 20703 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20704 public final void emitNEG_RegOff_Word(GPR index, short scale, Offset disp) { 20705 int miStart = mi; 20706 setMachineCodes(mi++, (byte) 0x66); 20707 generateREXprefix(false, null, index, null); 20708 setMachineCodes(mi++, (byte) 0xF7); 20709 // "register 0x3" is really part of the opcode 20710 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x3)); 20711 if (lister != null) lister.RFD(miStart, "NEG", index, scale, disp); 20712 } 20713 20714 /** 20715 * Generate a NEG to absolute address. That is, 20716 * <PRE> 20717 * - (word) [disp] 20718 * </PRE> 20719 * 20720 * @param disp the destination displacement 20721 */ 20722 public final void emitNEG_Abs_Word(Address disp) { 20723 int miStart = mi; 20724 setMachineCodes(mi++, (byte) 0x66); 20725 generateREXprefix(false, null, null, null); 20726 setMachineCodes(mi++, (byte) 0xF7); 20727 // "register 0x3" is really part of the opcode 20728 emitAbsRegOperands(disp, GPR.getForOpcode(0x3)); 20729 if (lister != null) lister.RA(miStart, "NEG", disp); 20730 } 20731 20732 /** 20733 * Generate a NEG to register offset. That is, 20734 * <PRE> 20735 * - (word) [base + index<<scale + disp] 20736 * </PRE> 20737 * 20738 * @param base the destination base register 20739 * @param index the destination index register 20740 * @param scale the destination shift amount 20741 * @param disp the destination displacement 20742 */ 20743 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 20744 public final void emitNEG_RegIdx_Word(GPR base, GPR index, short scale, Offset disp) { 20745 int miStart = mi; 20746 setMachineCodes(mi++, (byte) 0x66); 20747 generateREXprefix(false, null, index, base); 20748 setMachineCodes(mi++, (byte) 0xF7); 20749 // "register 0x3" is really part of the opcode 20750 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x3)); 20751 if (lister != null) lister.RXD(miStart, "NEG", base, index, scale, disp); 20752 } 20753 20754 /** 20755 * Generate a NEG on a register. That is, 20756 * <PRE> 20757 * - (quad) reg 20758 * </PRE> 20759 * 20760 * @param reg register to operate upon 20761 */ 20762 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20763 public final void emitNEG_Reg_Quad(GPR reg) { 20764 int miStart = mi; 20765 // no group 1 to 4 prefix byte 20766 generateREXprefix(true, null, null, reg); 20767 setMachineCodes(mi++, (byte) 0xF7); 20768 emitRegRegOperands(reg, GPR.getForOpcode(0x3)); 20769 if (lister != null) lister.R(miStart, "NEG", reg); 20770 } 20771 /** 20772 * Generate a NEG to register-displacement offset. That is, 20773 * <PRE> 20774 * - (quad) [base + disp] 20775 * </PRE> 20776 * 20777 * @param base the destination base register 20778 * @param disp the destination displacement 20779 */ 20780 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20781 public final void emitNEG_RegDisp_Quad(GPR base, Offset disp) { 20782 int miStart = mi; 20783 // no group 1 to 4 prefix byte 20784 generateREXprefix(true, null, null, base); 20785 setMachineCodes(mi++, (byte) 0xF7); 20786 // "register 0x3" is really part of the opcode 20787 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x3)); 20788 if (lister != null) lister.RD(miStart, "NEG", base, disp); 20789 } 20790 20791 /** 20792 * Generate a NEG to register indirect. That is, 20793 * <PRE> 20794 * - (quad) [reg] 20795 * </PRE> 20796 * 20797 * @param base the destination base register 20798 */ 20799 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20800 public final void emitNEG_RegInd_Quad(GPR base) { 20801 int miStart = mi; 20802 // no group 1 to 4 prefix byte 20803 generateREXprefix(true, null, null, base); 20804 setMachineCodes(mi++, (byte) 0xF7); 20805 // "register 0x3" is really part of the opcode 20806 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x3)); 20807 if (lister != null) lister.RN(miStart, "NEG", base); 20808 } 20809 20810 /** 20811 * Generate a NEG to register offset. That is, 20812 * <PRE> 20813 * - (quad) [index<<scale + disp] 20814 * </PRE> 20815 * 20816 * @param index the destination index register 20817 * @param scale the destination shift amount 20818 * @param disp the destination displacement 20819 */ 20820 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20821 public final void emitNEG_RegOff_Quad(GPR index, short scale, Offset disp) { 20822 int miStart = mi; 20823 // no group 1 to 4 prefix byte 20824 generateREXprefix(true, null, index, null); 20825 setMachineCodes(mi++, (byte) 0xF7); 20826 // "register 0x3" is really part of the opcode 20827 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x3)); 20828 if (lister != null) lister.RFD(miStart, "NEG", index, scale, disp); 20829 } 20830 20831 /** 20832 * Generate a NEG to absolute address. That is, 20833 * <PRE> 20834 * - (quad) [disp] 20835 * </PRE> 20836 * 20837 * @param disp the destination displacement 20838 */ 20839 public final void emitNEG_Abs_Quad(Address disp) { 20840 int miStart = mi; 20841 // no group 1 to 4 prefix byte 20842 generateREXprefix(true, null, null, null); 20843 setMachineCodes(mi++, (byte) 0xF7); 20844 // "register 0x3" is really part of the opcode 20845 emitAbsRegOperands(disp, GPR.getForOpcode(0x3)); 20846 if (lister != null) lister.RA(miStart, "NEG", disp); 20847 } 20848 20849 /** 20850 * Generate a NEG to register offset. That is, 20851 * <PRE> 20852 * - (quad) [base + index<<scale + disp] 20853 * </PRE> 20854 * 20855 * @param base the destination base register 20856 * @param index the destination index register 20857 * @param scale the destination shift amount 20858 * @param disp the destination displacement 20859 */ 20860 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 20861 public final void emitNEG_RegIdx_Quad(GPR base, GPR index, short scale, Offset disp) { 20862 int miStart = mi; 20863 // no group 1 to 4 prefix byte 20864 generateREXprefix(true, null, index, base); 20865 setMachineCodes(mi++, (byte) 0xF7); 20866 // "register 0x3" is really part of the opcode 20867 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x3)); 20868 if (lister != null) lister.RXD(miStart, "NEG", base, index, scale, disp); 20869 } 20870 20871 /** 20872 * Generate a NOT on a register. That is, 20873 * <PRE> 20874 * ~ reg 20875 * </PRE> 20876 * 20877 * @param reg register to operate upon 20878 */ 20879 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20880 public final void emitNOT_Reg(GPR reg) { 20881 int miStart = mi; 20882 // no group 1 to 4 prefix byte 20883 generateREXprefix(false, null, null, reg); 20884 setMachineCodes(mi++, (byte) 0xF7); 20885 emitRegRegOperands(reg, GPR.getForOpcode(0x2)); 20886 if (lister != null) lister.R(miStart, "NOT", reg); 20887 } 20888 /** 20889 * Generate a NOT to register-displacement offset. That is, 20890 * <PRE> 20891 * ~ [base + disp] 20892 * </PRE> 20893 * 20894 * @param base the destination base register 20895 * @param disp the destination displacement 20896 */ 20897 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20898 public final void emitNOT_RegDisp(GPR base, Offset disp) { 20899 int miStart = mi; 20900 // no group 1 to 4 prefix byte 20901 generateREXprefix(false, null, null, base); 20902 setMachineCodes(mi++, (byte) 0xF7); 20903 // "register 0x2" is really part of the opcode 20904 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x2)); 20905 if (lister != null) lister.RD(miStart, "NOT", base, disp); 20906 } 20907 20908 /** 20909 * Generate a NOT to register indirect. That is, 20910 * <PRE> 20911 * ~ [reg] 20912 * </PRE> 20913 * 20914 * @param base the destination base register 20915 */ 20916 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20917 public final void emitNOT_RegInd(GPR base) { 20918 int miStart = mi; 20919 // no group 1 to 4 prefix byte 20920 generateREXprefix(false, null, null, base); 20921 setMachineCodes(mi++, (byte) 0xF7); 20922 // "register 0x2" is really part of the opcode 20923 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x2)); 20924 if (lister != null) lister.RN(miStart, "NOT", base); 20925 } 20926 20927 /** 20928 * Generate a NOT to register offset. That is, 20929 * <PRE> 20930 * ~ [index<<scale + disp] 20931 * </PRE> 20932 * 20933 * @param index the destination index register 20934 * @param scale the destination shift amount 20935 * @param disp the destination displacement 20936 */ 20937 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20938 public final void emitNOT_RegOff(GPR index, short scale, Offset disp) { 20939 int miStart = mi; 20940 // no group 1 to 4 prefix byte 20941 generateREXprefix(false, null, index, null); 20942 setMachineCodes(mi++, (byte) 0xF7); 20943 // "register 0x2" is really part of the opcode 20944 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x2)); 20945 if (lister != null) lister.RFD(miStart, "NOT", index, scale, disp); 20946 } 20947 20948 /** 20949 * Generate a NOT to absolute address. That is, 20950 * <PRE> 20951 * ~ [disp] 20952 * </PRE> 20953 * 20954 * @param disp the destination displacement 20955 */ 20956 public final void emitNOT_Abs(Address disp) { 20957 int miStart = mi; 20958 // no group 1 to 4 prefix byte 20959 generateREXprefix(false, null, null, null); 20960 setMachineCodes(mi++, (byte) 0xF7); 20961 // "register 0x2" is really part of the opcode 20962 emitAbsRegOperands(disp, GPR.getForOpcode(0x2)); 20963 if (lister != null) lister.RA(miStart, "NOT", disp); 20964 } 20965 20966 /** 20967 * Generate a NOT to register offset. That is, 20968 * <PRE> 20969 * ~ [base + index<<scale + disp] 20970 * </PRE> 20971 * 20972 * @param base the destination base register 20973 * @param index the destination index register 20974 * @param scale the destination shift amount 20975 * @param disp the destination displacement 20976 */ 20977 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 20978 public final void emitNOT_RegIdx(GPR base, GPR index, short scale, Offset disp) { 20979 int miStart = mi; 20980 // no group 1 to 4 prefix byte 20981 generateREXprefix(false, null, index, base); 20982 setMachineCodes(mi++, (byte) 0xF7); 20983 // "register 0x2" is really part of the opcode 20984 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x2)); 20985 if (lister != null) lister.RXD(miStart, "NOT", base, index, scale, disp); 20986 } 20987 20988 /** 20989 * Generate a NOT on a register. That is, 20990 * <PRE> 20991 * ~ (byte) reg 20992 * </PRE> 20993 * 20994 * @param reg register to operate upon 20995 */ 20996 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 20997 public final void emitNOT_Reg_Byte(GPR reg) { 20998 int miStart = mi; 20999 // no group 1 to 4 prefix byte 21000 generateREXprefix(false, null, null, reg); 21001 setMachineCodes(mi++, (byte) 0xF6); 21002 emitRegRegOperands(reg, GPR.getForOpcode(0x2)); 21003 if (lister != null) lister.R(miStart, "NOT", reg); 21004 } 21005 /** 21006 * Generate a NOT to register-displacement offset. That is, 21007 * <PRE> 21008 * ~ (byte) [base + disp] 21009 * </PRE> 21010 * 21011 * @param base the destination base register 21012 * @param disp the destination displacement 21013 */ 21014 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21015 public final void emitNOT_RegDisp_Byte(GPR base, Offset disp) { 21016 int miStart = mi; 21017 // no group 1 to 4 prefix byte 21018 generateREXprefix(false, null, null, base); 21019 setMachineCodes(mi++, (byte) 0xF6); 21020 // "register 0x2" is really part of the opcode 21021 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x2)); 21022 if (lister != null) lister.RD(miStart, "NOT", base, disp); 21023 } 21024 21025 /** 21026 * Generate a NOT to register indirect. That is, 21027 * <PRE> 21028 * ~ (byte) [reg] 21029 * </PRE> 21030 * 21031 * @param base the destination base register 21032 */ 21033 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21034 public final void emitNOT_RegInd_Byte(GPR base) { 21035 int miStart = mi; 21036 // no group 1 to 4 prefix byte 21037 generateREXprefix(false, null, null, base); 21038 setMachineCodes(mi++, (byte) 0xF6); 21039 // "register 0x2" is really part of the opcode 21040 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x2)); 21041 if (lister != null) lister.RN(miStart, "NOT", base); 21042 } 21043 21044 /** 21045 * Generate a NOT to register offset. That is, 21046 * <PRE> 21047 * ~ (byte) [index<<scale + disp] 21048 * </PRE> 21049 * 21050 * @param index the destination index register 21051 * @param scale the destination shift amount 21052 * @param disp the destination displacement 21053 */ 21054 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21055 public final void emitNOT_RegOff_Byte(GPR index, short scale, Offset disp) { 21056 int miStart = mi; 21057 // no group 1 to 4 prefix byte 21058 generateREXprefix(false, null, index, null); 21059 setMachineCodes(mi++, (byte) 0xF6); 21060 // "register 0x2" is really part of the opcode 21061 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x2)); 21062 if (lister != null) lister.RFD(miStart, "NOT", index, scale, disp); 21063 } 21064 21065 /** 21066 * Generate a NOT to absolute address. That is, 21067 * <PRE> 21068 * ~ (byte) [disp] 21069 * </PRE> 21070 * 21071 * @param disp the destination displacement 21072 */ 21073 public final void emitNOT_Abs_Byte(Address disp) { 21074 int miStart = mi; 21075 // no group 1 to 4 prefix byte 21076 generateREXprefix(false, null, null, null); 21077 setMachineCodes(mi++, (byte) 0xF6); 21078 // "register 0x2" is really part of the opcode 21079 emitAbsRegOperands(disp, GPR.getForOpcode(0x2)); 21080 if (lister != null) lister.RA(miStart, "NOT", disp); 21081 } 21082 21083 /** 21084 * Generate a NOT to register offset. That is, 21085 * <PRE> 21086 * ~ (byte) [base + index<<scale + disp] 21087 * </PRE> 21088 * 21089 * @param base the destination base register 21090 * @param index the destination index register 21091 * @param scale the destination shift amount 21092 * @param disp the destination displacement 21093 */ 21094 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21095 public final void emitNOT_RegIdx_Byte(GPR base, GPR index, short scale, Offset disp) { 21096 int miStart = mi; 21097 // no group 1 to 4 prefix byte 21098 generateREXprefix(false, null, index, base); 21099 setMachineCodes(mi++, (byte) 0xF6); 21100 // "register 0x2" is really part of the opcode 21101 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x2)); 21102 if (lister != null) lister.RXD(miStart, "NOT", base, index, scale, disp); 21103 } 21104 21105 /** 21106 * Generate a NOT on a register. That is, 21107 * <PRE> 21108 * ~ (word) reg 21109 * </PRE> 21110 * 21111 * @param reg register to operate upon 21112 */ 21113 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21114 public final void emitNOT_Reg_Word(GPR reg) { 21115 int miStart = mi; 21116 setMachineCodes(mi++, (byte) 0x66); 21117 generateREXprefix(false, null, null, reg); 21118 setMachineCodes(mi++, (byte) 0xF7); 21119 emitRegRegOperands(reg, GPR.getForOpcode(0x2)); 21120 if (lister != null) lister.R(miStart, "NOT", reg); 21121 } 21122 /** 21123 * Generate a NOT to register-displacement offset. That is, 21124 * <PRE> 21125 * ~ (word) [base + disp] 21126 * </PRE> 21127 * 21128 * @param base the destination base register 21129 * @param disp the destination displacement 21130 */ 21131 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21132 public final void emitNOT_RegDisp_Word(GPR base, Offset disp) { 21133 int miStart = mi; 21134 setMachineCodes(mi++, (byte) 0x66); 21135 generateREXprefix(false, null, null, base); 21136 setMachineCodes(mi++, (byte) 0xF7); 21137 // "register 0x2" is really part of the opcode 21138 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x2)); 21139 if (lister != null) lister.RD(miStart, "NOT", base, disp); 21140 } 21141 21142 /** 21143 * Generate a NOT to register indirect. That is, 21144 * <PRE> 21145 * ~ (word) [reg] 21146 * </PRE> 21147 * 21148 * @param base the destination base register 21149 */ 21150 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21151 public final void emitNOT_RegInd_Word(GPR base) { 21152 int miStart = mi; 21153 setMachineCodes(mi++, (byte) 0x66); 21154 generateREXprefix(false, null, null, base); 21155 setMachineCodes(mi++, (byte) 0xF7); 21156 // "register 0x2" is really part of the opcode 21157 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x2)); 21158 if (lister != null) lister.RN(miStart, "NOT", base); 21159 } 21160 21161 /** 21162 * Generate a NOT to register offset. That is, 21163 * <PRE> 21164 * ~ (word) [index<<scale + disp] 21165 * </PRE> 21166 * 21167 * @param index the destination index register 21168 * @param scale the destination shift amount 21169 * @param disp the destination displacement 21170 */ 21171 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21172 public final void emitNOT_RegOff_Word(GPR index, short scale, Offset disp) { 21173 int miStart = mi; 21174 setMachineCodes(mi++, (byte) 0x66); 21175 generateREXprefix(false, null, index, null); 21176 setMachineCodes(mi++, (byte) 0xF7); 21177 // "register 0x2" is really part of the opcode 21178 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x2)); 21179 if (lister != null) lister.RFD(miStart, "NOT", index, scale, disp); 21180 } 21181 21182 /** 21183 * Generate a NOT to absolute address. That is, 21184 * <PRE> 21185 * ~ (word) [disp] 21186 * </PRE> 21187 * 21188 * @param disp the destination displacement 21189 */ 21190 public final void emitNOT_Abs_Word(Address disp) { 21191 int miStart = mi; 21192 setMachineCodes(mi++, (byte) 0x66); 21193 generateREXprefix(false, null, null, null); 21194 setMachineCodes(mi++, (byte) 0xF7); 21195 // "register 0x2" is really part of the opcode 21196 emitAbsRegOperands(disp, GPR.getForOpcode(0x2)); 21197 if (lister != null) lister.RA(miStart, "NOT", disp); 21198 } 21199 21200 /** 21201 * Generate a NOT to register offset. That is, 21202 * <PRE> 21203 * ~ (word) [base + index<<scale + disp] 21204 * </PRE> 21205 * 21206 * @param base the destination base register 21207 * @param index the destination index register 21208 * @param scale the destination shift amount 21209 * @param disp the destination displacement 21210 */ 21211 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21212 public final void emitNOT_RegIdx_Word(GPR base, GPR index, short scale, Offset disp) { 21213 int miStart = mi; 21214 setMachineCodes(mi++, (byte) 0x66); 21215 generateREXprefix(false, null, index, base); 21216 setMachineCodes(mi++, (byte) 0xF7); 21217 // "register 0x2" is really part of the opcode 21218 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x2)); 21219 if (lister != null) lister.RXD(miStart, "NOT", base, index, scale, disp); 21220 } 21221 21222 /** 21223 * Generate a NOT on a register. That is, 21224 * <PRE> 21225 * ~ (quad) reg 21226 * </PRE> 21227 * 21228 * @param reg register to operate upon 21229 */ 21230 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21231 public final void emitNOT_Reg_Quad(GPR reg) { 21232 int miStart = mi; 21233 // no group 1 to 4 prefix byte 21234 generateREXprefix(true, null, null, reg); 21235 setMachineCodes(mi++, (byte) 0xF7); 21236 emitRegRegOperands(reg, GPR.getForOpcode(0x2)); 21237 if (lister != null) lister.R(miStart, "NOT", reg); 21238 } 21239 /** 21240 * Generate a NOT to register-displacement offset. That is, 21241 * <PRE> 21242 * ~ (quad) [base + disp] 21243 * </PRE> 21244 * 21245 * @param base the destination base register 21246 * @param disp the destination displacement 21247 */ 21248 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21249 public final void emitNOT_RegDisp_Quad(GPR base, Offset disp) { 21250 int miStart = mi; 21251 // no group 1 to 4 prefix byte 21252 generateREXprefix(true, null, null, base); 21253 setMachineCodes(mi++, (byte) 0xF7); 21254 // "register 0x2" is really part of the opcode 21255 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x2)); 21256 if (lister != null) lister.RD(miStart, "NOT", base, disp); 21257 } 21258 21259 /** 21260 * Generate a NOT to register indirect. That is, 21261 * <PRE> 21262 * ~ (quad) [reg] 21263 * </PRE> 21264 * 21265 * @param base the destination base register 21266 */ 21267 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21268 public final void emitNOT_RegInd_Quad(GPR base) { 21269 int miStart = mi; 21270 // no group 1 to 4 prefix byte 21271 generateREXprefix(true, null, null, base); 21272 setMachineCodes(mi++, (byte) 0xF7); 21273 // "register 0x2" is really part of the opcode 21274 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x2)); 21275 if (lister != null) lister.RN(miStart, "NOT", base); 21276 } 21277 21278 /** 21279 * Generate a NOT to register offset. That is, 21280 * <PRE> 21281 * ~ (quad) [index<<scale + disp] 21282 * </PRE> 21283 * 21284 * @param index the destination index register 21285 * @param scale the destination shift amount 21286 * @param disp the destination displacement 21287 */ 21288 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21289 public final void emitNOT_RegOff_Quad(GPR index, short scale, Offset disp) { 21290 int miStart = mi; 21291 // no group 1 to 4 prefix byte 21292 generateREXprefix(true, null, index, null); 21293 setMachineCodes(mi++, (byte) 0xF7); 21294 // "register 0x2" is really part of the opcode 21295 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x2)); 21296 if (lister != null) lister.RFD(miStart, "NOT", index, scale, disp); 21297 } 21298 21299 /** 21300 * Generate a NOT to absolute address. That is, 21301 * <PRE> 21302 * ~ (quad) [disp] 21303 * </PRE> 21304 * 21305 * @param disp the destination displacement 21306 */ 21307 public final void emitNOT_Abs_Quad(Address disp) { 21308 int miStart = mi; 21309 // no group 1 to 4 prefix byte 21310 generateREXprefix(true, null, null, null); 21311 setMachineCodes(mi++, (byte) 0xF7); 21312 // "register 0x2" is really part of the opcode 21313 emitAbsRegOperands(disp, GPR.getForOpcode(0x2)); 21314 if (lister != null) lister.RA(miStart, "NOT", disp); 21315 } 21316 21317 /** 21318 * Generate a NOT to register offset. That is, 21319 * <PRE> 21320 * ~ (quad) [base + index<<scale + disp] 21321 * </PRE> 21322 * 21323 * @param base the destination base register 21324 * @param index the destination index register 21325 * @param scale the destination shift amount 21326 * @param disp the destination displacement 21327 */ 21328 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21329 public final void emitNOT_RegIdx_Quad(GPR base, GPR index, short scale, Offset disp) { 21330 int miStart = mi; 21331 // no group 1 to 4 prefix byte 21332 generateREXprefix(true, null, index, base); 21333 setMachineCodes(mi++, (byte) 0xF7); 21334 // "register 0x2" is really part of the opcode 21335 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x2)); 21336 if (lister != null) lister.RXD(miStart, "NOT", base, index, scale, disp); 21337 } 21338 21339 /** 21340 * Generate a MUL by register. That is, 21341 * <PRE> 21342 * EAX:EDX = EAX * srcReg 21343 * </PRE> 21344 * 21345 * @param dstReg must always be EAX/R0 21346 * @param srcReg the source register 21347 */ 21348 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21349 public final void emitMUL_Reg_Reg(GPR dstReg, GPR srcReg) { 21350 int miStart = mi; 21351 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21352 generateREXprefix(false, null, null, srcReg); 21353 setMachineCodes(mi++, (byte) 0xF7); 21354 emitRegRegOperands(srcReg, GPR.getForOpcode(0x4)); 21355 if (lister != null) lister.RR(miStart, "MUL", dstReg, srcReg); 21356 } 21357 21358 /** 21359 * Generate a MUL by register displacement. That is, 21360 * <PRE> 21361 * EAX:EDX = EAX * [srcBase + srcDisp] 21362 * </PRE> 21363 * 21364 * @param dstReg must always be EAX/R0 21365 * @param srcBase the source base register 21366 * @param srcDisp the source displacement 21367 */ 21368 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21369 public final void emitMUL_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 21370 int miStart = mi; 21371 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21372 generateREXprefix(false, null, null, srcBase); 21373 setMachineCodes(mi++, (byte) 0xF7); 21374 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x4)); 21375 if (lister != null) lister.RRD(miStart, "MUL", dstReg, srcBase, srcDisp); 21376 } 21377 21378 /** 21379 * Generate a MUL by register indirect. That is, 21380 * <PRE> 21381 * EAX:EDX = EAX * [srcBase] 21382 * </PRE> 21383 * 21384 * @param dstReg must always be EAX/R0 21385 * @param srcBase the source base register 21386 */ 21387 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21388 public final void emitMUL_Reg_RegInd(GPR dstReg, GPR srcBase) { 21389 int miStart = mi; 21390 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21391 generateREXprefix(false, null, null, srcBase); 21392 setMachineCodes(mi++, (byte) 0xF7); 21393 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x4)); 21394 if (lister != null) lister.RRN(miStart, "MUL", dstReg, srcBase); 21395 } 21396 21397 /** 21398 * Generate a MUL by register indexed. That is, 21399 * <PRE> 21400 * EAX:EDX = EAX * [srcBase + srcIndex<<srcScale + srcDisp] 21401 * </PRE> 21402 * 21403 * @param dstReg must always be EAX/R0 21404 * @param srcBase the source base register 21405 * @param srcIndex the source index register 21406 * @param srcScale the source scale of the index 21407 * @param srcDisp the source displacement 21408 */ 21409 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 21410 public final void emitMUL_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 21411 int miStart = mi; 21412 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21413 generateREXprefix(false, null, srcIndex, srcBase); 21414 setMachineCodes(mi++, (byte) 0xF7); 21415 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x4)); 21416 if (lister != null) lister.RRXD(miStart, "MUL", dstReg, srcBase, srcIndex, srcScale, srcDisp); 21417 } 21418 21419 /** 21420 * Generate a MUL by register offseted. That is, 21421 * <PRE> 21422 * EAX:EDX = EAX * [srcIndex<<srcScale + srcDisp] 21423 * </PRE> 21424 * 21425 * @param dstReg must always be EAX/R0 21426 * @param srcIndex the source index register 21427 * @param srcScale the source scale of the index 21428 * @param srcDisp the source displacement 21429 */ 21430 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21431 public final void emitMUL_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 21432 int miStart = mi; 21433 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21434 generateREXprefix(false, null, srcIndex, null); 21435 setMachineCodes(mi++, (byte) 0xF7); 21436 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x4)); 21437 if (lister != null) lister.RRFD(miStart, "MUL", dstReg, srcIndex, srcScale, srcDisp); 21438 } 21439 21440 /** 21441 * Generate a MUL by absolute address. That is, 21442 * <PRE> 21443 * EAX:EDX = EAX * [srcDisp] 21444 * </PRE> 21445 * 21446 * @param dstReg must always be EAX/R0 21447 * @param srcDisp the source displacement 21448 */ 21449 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21450 public final void emitMUL_Reg_Abs(GPR dstReg, Address srcDisp) { 21451 int miStart = mi; 21452 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21453 generateREXprefix(false, null, null, null); 21454 setMachineCodes(mi++, (byte) 0xF7); 21455 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x4)); 21456 if (lister != null) lister.RRA(miStart, "MUL", dstReg, srcDisp); 21457 } 21458 21459 /** 21460 * Generate a MUL by register. That is, 21461 * <PRE> 21462 * EAX:EDX = EAX * srcReg 21463 * </PRE> 21464 * 21465 * @param dstReg must always be EAX/R0 21466 * @param srcReg the source register 21467 */ 21468 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21469 public final void emitMUL_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 21470 int miStart = mi; 21471 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21472 generateREXprefix(true, null, null, srcReg); 21473 setMachineCodes(mi++, (byte) 0xF7); 21474 emitRegRegOperands(srcReg, GPR.getForOpcode(0x4)); 21475 if (lister != null) lister.RR(miStart, "MUL", dstReg, srcReg); 21476 } 21477 21478 /** 21479 * Generate a MUL by register displacement. That is, 21480 * <PRE> 21481 * EAX:EDX = EAX * [srcBase + srcDisp] 21482 * </PRE> 21483 * 21484 * @param dstReg must always be EAX/R0 21485 * @param srcBase the source base register 21486 * @param srcDisp the source displacement 21487 */ 21488 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21489 public final void emitMUL_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 21490 int miStart = mi; 21491 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21492 generateREXprefix(true, null, null, srcBase); 21493 setMachineCodes(mi++, (byte) 0xF7); 21494 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x4)); 21495 if (lister != null) lister.RRD(miStart, "MUL", dstReg, srcBase, srcDisp); 21496 } 21497 21498 /** 21499 * Generate a MUL by register indirect. That is, 21500 * <PRE> 21501 * EAX:EDX = EAX * [srcBase] 21502 * </PRE> 21503 * 21504 * @param dstReg must always be EAX/R0 21505 * @param srcBase the source base register 21506 */ 21507 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21508 public final void emitMUL_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 21509 int miStart = mi; 21510 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21511 generateREXprefix(true, null, null, srcBase); 21512 setMachineCodes(mi++, (byte) 0xF7); 21513 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x4)); 21514 if (lister != null) lister.RRN(miStart, "MUL", dstReg, srcBase); 21515 } 21516 21517 /** 21518 * Generate a MUL by register indexed. That is, 21519 * <PRE> 21520 * EAX:EDX = EAX * [srcBase + srcIndex<<srcScale + srcDisp] 21521 * </PRE> 21522 * 21523 * @param dstReg must always be EAX/R0 21524 * @param srcBase the source base register 21525 * @param srcIndex the source index register 21526 * @param srcScale the source scale of the index 21527 * @param srcDisp the source displacement 21528 */ 21529 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 21530 public final void emitMUL_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 21531 int miStart = mi; 21532 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21533 generateREXprefix(true, null, srcIndex, srcBase); 21534 setMachineCodes(mi++, (byte) 0xF7); 21535 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x4)); 21536 if (lister != null) lister.RRXD(miStart, "MUL", dstReg, srcBase, srcIndex, srcScale, srcDisp); 21537 } 21538 21539 /** 21540 * Generate a MUL by register offseted. That is, 21541 * <PRE> 21542 * EAX:EDX = EAX * [srcIndex<<srcScale + srcDisp] 21543 * </PRE> 21544 * 21545 * @param dstReg must always be EAX/R0 21546 * @param srcIndex the source index register 21547 * @param srcScale the source scale of the index 21548 * @param srcDisp the source displacement 21549 */ 21550 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21551 public final void emitMUL_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 21552 int miStart = mi; 21553 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21554 generateREXprefix(true, null, srcIndex, null); 21555 setMachineCodes(mi++, (byte) 0xF7); 21556 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x4)); 21557 if (lister != null) lister.RRFD(miStart, "MUL", dstReg, srcIndex, srcScale, srcDisp); 21558 } 21559 21560 /** 21561 * Generate a MUL by absolute address. That is, 21562 * <PRE> 21563 * EAX:EDX = EAX * [srcDisp] 21564 * </PRE> 21565 * 21566 * @param dstReg must always be EAX/R0 21567 * @param srcDisp the source displacement 21568 */ 21569 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21570 public final void emitMUL_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 21571 int miStart = mi; 21572 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21573 generateREXprefix(true, null, null, null); 21574 setMachineCodes(mi++, (byte) 0xF7); 21575 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x4)); 21576 if (lister != null) lister.RRA(miStart, "MUL", dstReg, srcDisp); 21577 } 21578 21579 /** 21580 * Generate a IMUL1 by register. That is, 21581 * <PRE> 21582 * EAX:EDX = EAX * srcReg 21583 * </PRE> 21584 * 21585 * @param dstReg must always be EAX/R0 21586 * @param srcReg the source register 21587 */ 21588 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21589 public final void emitIMUL1_Reg_Reg(GPR dstReg, GPR srcReg) { 21590 int miStart = mi; 21591 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21592 generateREXprefix(false, null, null, srcReg); 21593 setMachineCodes(mi++, (byte) 0xF7); 21594 emitRegRegOperands(srcReg, GPR.getForOpcode(0x5)); 21595 if (lister != null) lister.RR(miStart, "IMUL1", dstReg, srcReg); 21596 } 21597 21598 /** 21599 * Generate a IMUL1 by register displacement. That is, 21600 * <PRE> 21601 * EAX:EDX = EAX * [srcBase + srcDisp] 21602 * </PRE> 21603 * 21604 * @param dstReg must always be EAX/R0 21605 * @param srcBase the source base register 21606 * @param srcDisp the source displacement 21607 */ 21608 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21609 public final void emitIMUL1_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 21610 int miStart = mi; 21611 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21612 generateREXprefix(false, null, null, srcBase); 21613 setMachineCodes(mi++, (byte) 0xF7); 21614 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x5)); 21615 if (lister != null) lister.RRD(miStart, "IMUL1", dstReg, srcBase, srcDisp); 21616 } 21617 21618 /** 21619 * Generate a IMUL1 by register indirect. That is, 21620 * <PRE> 21621 * EAX:EDX = EAX * [srcBase] 21622 * </PRE> 21623 * 21624 * @param dstReg must always be EAX/R0 21625 * @param srcBase the source base register 21626 */ 21627 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21628 public final void emitIMUL1_Reg_RegInd(GPR dstReg, GPR srcBase) { 21629 int miStart = mi; 21630 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21631 generateREXprefix(false, null, null, srcBase); 21632 setMachineCodes(mi++, (byte) 0xF7); 21633 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x5)); 21634 if (lister != null) lister.RRN(miStart, "IMUL1", dstReg, srcBase); 21635 } 21636 21637 /** 21638 * Generate a IMUL1 by register indexed. That is, 21639 * <PRE> 21640 * EAX:EDX = EAX * [srcBase + srcIndex<<srcScale + srcDisp] 21641 * </PRE> 21642 * 21643 * @param dstReg must always be EAX/R0 21644 * @param srcBase the source base register 21645 * @param srcIndex the source index register 21646 * @param srcScale the source scale of the index 21647 * @param srcDisp the source displacement 21648 */ 21649 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 21650 public final void emitIMUL1_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 21651 int miStart = mi; 21652 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21653 generateREXprefix(false, null, srcIndex, srcBase); 21654 setMachineCodes(mi++, (byte) 0xF7); 21655 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x5)); 21656 if (lister != null) lister.RRXD(miStart, "IMUL1", dstReg, srcBase, srcIndex, srcScale, srcDisp); 21657 } 21658 21659 /** 21660 * Generate a IMUL1 by register offseted. That is, 21661 * <PRE> 21662 * EAX:EDX = EAX * [srcIndex<<srcScale + srcDisp] 21663 * </PRE> 21664 * 21665 * @param dstReg must always be EAX/R0 21666 * @param srcIndex the source index register 21667 * @param srcScale the source scale of the index 21668 * @param srcDisp the source displacement 21669 */ 21670 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21671 public final void emitIMUL1_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 21672 int miStart = mi; 21673 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21674 generateREXprefix(false, null, srcIndex, null); 21675 setMachineCodes(mi++, (byte) 0xF7); 21676 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x5)); 21677 if (lister != null) lister.RRFD(miStart, "IMUL1", dstReg, srcIndex, srcScale, srcDisp); 21678 } 21679 21680 /** 21681 * Generate a IMUL1 by absolute address. That is, 21682 * <PRE> 21683 * EAX:EDX = EAX * [srcDisp] 21684 * </PRE> 21685 * 21686 * @param dstReg must always be EAX/R0 21687 * @param srcDisp the source displacement 21688 */ 21689 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21690 public final void emitIMUL1_Reg_Abs(GPR dstReg, Address srcDisp) { 21691 int miStart = mi; 21692 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21693 generateREXprefix(false, null, null, null); 21694 setMachineCodes(mi++, (byte) 0xF7); 21695 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x5)); 21696 if (lister != null) lister.RRA(miStart, "IMUL1", dstReg, srcDisp); 21697 } 21698 21699 /** 21700 * Generate a IMUL1 by register. That is, 21701 * <PRE> 21702 * EAX:EDX = EAX * srcReg 21703 * </PRE> 21704 * 21705 * @param dstReg must always be EAX/R0 21706 * @param srcReg the source register 21707 */ 21708 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21709 public final void emitIMUL1_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 21710 int miStart = mi; 21711 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21712 generateREXprefix(true, null, null, srcReg); 21713 setMachineCodes(mi++, (byte) 0xF7); 21714 emitRegRegOperands(srcReg, GPR.getForOpcode(0x5)); 21715 if (lister != null) lister.RR(miStart, "IMUL1", dstReg, srcReg); 21716 } 21717 21718 /** 21719 * Generate a IMUL1 by register displacement. That is, 21720 * <PRE> 21721 * EAX:EDX = EAX * [srcBase + srcDisp] 21722 * </PRE> 21723 * 21724 * @param dstReg must always be EAX/R0 21725 * @param srcBase the source base register 21726 * @param srcDisp the source displacement 21727 */ 21728 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21729 public final void emitIMUL1_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 21730 int miStart = mi; 21731 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21732 generateREXprefix(true, null, null, srcBase); 21733 setMachineCodes(mi++, (byte) 0xF7); 21734 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x5)); 21735 if (lister != null) lister.RRD(miStart, "IMUL1", dstReg, srcBase, srcDisp); 21736 } 21737 21738 /** 21739 * Generate a IMUL1 by register indirect. That is, 21740 * <PRE> 21741 * EAX:EDX = EAX * [srcBase] 21742 * </PRE> 21743 * 21744 * @param dstReg must always be EAX/R0 21745 * @param srcBase the source base register 21746 */ 21747 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21748 public final void emitIMUL1_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 21749 int miStart = mi; 21750 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21751 generateREXprefix(true, null, null, srcBase); 21752 setMachineCodes(mi++, (byte) 0xF7); 21753 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x5)); 21754 if (lister != null) lister.RRN(miStart, "IMUL1", dstReg, srcBase); 21755 } 21756 21757 /** 21758 * Generate a IMUL1 by register indexed. That is, 21759 * <PRE> 21760 * EAX:EDX = EAX * [srcBase + srcIndex<<srcScale + srcDisp] 21761 * </PRE> 21762 * 21763 * @param dstReg must always be EAX/R0 21764 * @param srcBase the source base register 21765 * @param srcIndex the source index register 21766 * @param srcScale the source scale of the index 21767 * @param srcDisp the source displacement 21768 */ 21769 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 21770 public final void emitIMUL1_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 21771 int miStart = mi; 21772 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21773 generateREXprefix(true, null, srcIndex, srcBase); 21774 setMachineCodes(mi++, (byte) 0xF7); 21775 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x5)); 21776 if (lister != null) lister.RRXD(miStart, "IMUL1", dstReg, srcBase, srcIndex, srcScale, srcDisp); 21777 } 21778 21779 /** 21780 * Generate a IMUL1 by register offseted. That is, 21781 * <PRE> 21782 * EAX:EDX = EAX * [srcIndex<<srcScale + srcDisp] 21783 * </PRE> 21784 * 21785 * @param dstReg must always be EAX/R0 21786 * @param srcIndex the source index register 21787 * @param srcScale the source scale of the index 21788 * @param srcDisp the source displacement 21789 */ 21790 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21791 public final void emitIMUL1_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 21792 int miStart = mi; 21793 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21794 generateREXprefix(true, null, srcIndex, null); 21795 setMachineCodes(mi++, (byte) 0xF7); 21796 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x5)); 21797 if (lister != null) lister.RRFD(miStart, "IMUL1", dstReg, srcIndex, srcScale, srcDisp); 21798 } 21799 21800 /** 21801 * Generate a IMUL1 by absolute address. That is, 21802 * <PRE> 21803 * EAX:EDX = EAX * [srcDisp] 21804 * </PRE> 21805 * 21806 * @param dstReg must always be EAX/R0 21807 * @param srcDisp the source displacement 21808 */ 21809 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21810 public final void emitIMUL1_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 21811 int miStart = mi; 21812 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21813 generateREXprefix(true, null, null, null); 21814 setMachineCodes(mi++, (byte) 0xF7); 21815 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x5)); 21816 if (lister != null) lister.RRA(miStart, "IMUL1", dstReg, srcDisp); 21817 } 21818 21819 /** 21820 * Generate a DIV by register. That is, 21821 * <PRE> 21822 * EAX:EDX = EAX / srcReg 21823 * </PRE> 21824 * 21825 * @param dstReg must always be EAX/R0 21826 * @param srcReg the source register 21827 */ 21828 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21829 public final void emitDIV_Reg_Reg(GPR dstReg, GPR srcReg) { 21830 int miStart = mi; 21831 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21832 generateREXprefix(false, null, null, srcReg); 21833 setMachineCodes(mi++, (byte) 0xF7); 21834 emitRegRegOperands(srcReg, GPR.getForOpcode(0x6)); 21835 if (lister != null) lister.RR(miStart, "DIV", dstReg, srcReg); 21836 } 21837 21838 /** 21839 * Generate a DIV by register displacement. That is, 21840 * <PRE> 21841 * EAX:EDX = EAX / [srcBase + srcDisp] 21842 * </PRE> 21843 * 21844 * @param dstReg must always be EAX/R0 21845 * @param srcBase the source base register 21846 * @param srcDisp the source displacement 21847 */ 21848 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21849 public final void emitDIV_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 21850 int miStart = mi; 21851 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21852 generateREXprefix(false, null, null, srcBase); 21853 setMachineCodes(mi++, (byte) 0xF7); 21854 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x6)); 21855 if (lister != null) lister.RRD(miStart, "DIV", dstReg, srcBase, srcDisp); 21856 } 21857 21858 /** 21859 * Generate a DIV by register indirect. That is, 21860 * <PRE> 21861 * EAX:EDX = EAX / [srcBase] 21862 * </PRE> 21863 * 21864 * @param dstReg must always be EAX/R0 21865 * @param srcBase the source base register 21866 */ 21867 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21868 public final void emitDIV_Reg_RegInd(GPR dstReg, GPR srcBase) { 21869 int miStart = mi; 21870 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21871 generateREXprefix(false, null, null, srcBase); 21872 setMachineCodes(mi++, (byte) 0xF7); 21873 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x6)); 21874 if (lister != null) lister.RRN(miStart, "DIV", dstReg, srcBase); 21875 } 21876 21877 /** 21878 * Generate a DIV by register indexed. That is, 21879 * <PRE> 21880 * EAX:EDX = EAX / [srcBase + srcIndex<<srcScale + srcDisp] 21881 * </PRE> 21882 * 21883 * @param dstReg must always be EAX/R0 21884 * @param srcBase the source base register 21885 * @param srcIndex the source index register 21886 * @param srcScale the source scale of the index 21887 * @param srcDisp the source displacement 21888 */ 21889 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 21890 public final void emitDIV_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 21891 int miStart = mi; 21892 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21893 generateREXprefix(false, null, srcIndex, srcBase); 21894 setMachineCodes(mi++, (byte) 0xF7); 21895 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x6)); 21896 if (lister != null) lister.RRXD(miStart, "DIV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 21897 } 21898 21899 /** 21900 * Generate a DIV by register offseted. That is, 21901 * <PRE> 21902 * EAX:EDX = EAX / [srcIndex<<srcScale + srcDisp] 21903 * </PRE> 21904 * 21905 * @param dstReg must always be EAX/R0 21906 * @param srcIndex the source index register 21907 * @param srcScale the source scale of the index 21908 * @param srcDisp the source displacement 21909 */ 21910 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21911 public final void emitDIV_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 21912 int miStart = mi; 21913 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21914 generateREXprefix(false, null, srcIndex, null); 21915 setMachineCodes(mi++, (byte) 0xF7); 21916 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x6)); 21917 if (lister != null) lister.RRFD(miStart, "DIV", dstReg, srcIndex, srcScale, srcDisp); 21918 } 21919 21920 /** 21921 * Generate a DIV by absolute address. That is, 21922 * <PRE> 21923 * EAX:EDX = EAX / [srcDisp] 21924 * </PRE> 21925 * 21926 * @param dstReg must always be EAX/R0 21927 * @param srcDisp the source displacement 21928 */ 21929 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 21930 public final void emitDIV_Reg_Abs(GPR dstReg, Address srcDisp) { 21931 int miStart = mi; 21932 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21933 generateREXprefix(false, null, null, null); 21934 setMachineCodes(mi++, (byte) 0xF7); 21935 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x6)); 21936 if (lister != null) lister.RRA(miStart, "DIV", dstReg, srcDisp); 21937 } 21938 21939 /** 21940 * Generate a DIV by register. That is, 21941 * <PRE> 21942 * EAX:EDX = EAX / srcReg 21943 * </PRE> 21944 * 21945 * @param dstReg must always be EAX/R0 21946 * @param srcReg the source register 21947 */ 21948 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21949 public final void emitDIV_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 21950 int miStart = mi; 21951 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21952 generateREXprefix(true, null, null, srcReg); 21953 setMachineCodes(mi++, (byte) 0xF7); 21954 emitRegRegOperands(srcReg, GPR.getForOpcode(0x6)); 21955 if (lister != null) lister.RR(miStart, "DIV", dstReg, srcReg); 21956 } 21957 21958 /** 21959 * Generate a DIV by register displacement. That is, 21960 * <PRE> 21961 * EAX:EDX = EAX / [srcBase + srcDisp] 21962 * </PRE> 21963 * 21964 * @param dstReg must always be EAX/R0 21965 * @param srcBase the source base register 21966 * @param srcDisp the source displacement 21967 */ 21968 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21969 public final void emitDIV_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 21970 int miStart = mi; 21971 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21972 generateREXprefix(true, null, null, srcBase); 21973 setMachineCodes(mi++, (byte) 0xF7); 21974 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x6)); 21975 if (lister != null) lister.RRD(miStart, "DIV", dstReg, srcBase, srcDisp); 21976 } 21977 21978 /** 21979 * Generate a DIV by register indirect. That is, 21980 * <PRE> 21981 * EAX:EDX = EAX / [srcBase] 21982 * </PRE> 21983 * 21984 * @param dstReg must always be EAX/R0 21985 * @param srcBase the source base register 21986 */ 21987 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 21988 public final void emitDIV_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 21989 int miStart = mi; 21990 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 21991 generateREXprefix(true, null, null, srcBase); 21992 setMachineCodes(mi++, (byte) 0xF7); 21993 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x6)); 21994 if (lister != null) lister.RRN(miStart, "DIV", dstReg, srcBase); 21995 } 21996 21997 /** 21998 * Generate a DIV by register indexed. That is, 21999 * <PRE> 22000 * EAX:EDX = EAX / [srcBase + srcIndex<<srcScale + srcDisp] 22001 * </PRE> 22002 * 22003 * @param dstReg must always be EAX/R0 22004 * @param srcBase the source base register 22005 * @param srcIndex the source index register 22006 * @param srcScale the source scale of the index 22007 * @param srcDisp the source displacement 22008 */ 22009 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 22010 public final void emitDIV_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 22011 int miStart = mi; 22012 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22013 generateREXprefix(true, null, srcIndex, srcBase); 22014 setMachineCodes(mi++, (byte) 0xF7); 22015 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x6)); 22016 if (lister != null) lister.RRXD(miStart, "DIV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 22017 } 22018 22019 /** 22020 * Generate a DIV by register offseted. That is, 22021 * <PRE> 22022 * EAX:EDX = EAX / [srcIndex<<srcScale + srcDisp] 22023 * </PRE> 22024 * 22025 * @param dstReg must always be EAX/R0 22026 * @param srcIndex the source index register 22027 * @param srcScale the source scale of the index 22028 * @param srcDisp the source displacement 22029 */ 22030 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22031 public final void emitDIV_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 22032 int miStart = mi; 22033 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22034 generateREXprefix(true, null, srcIndex, null); 22035 setMachineCodes(mi++, (byte) 0xF7); 22036 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x6)); 22037 if (lister != null) lister.RRFD(miStart, "DIV", dstReg, srcIndex, srcScale, srcDisp); 22038 } 22039 22040 /** 22041 * Generate a DIV by absolute address. That is, 22042 * <PRE> 22043 * EAX:EDX = EAX / [srcDisp] 22044 * </PRE> 22045 * 22046 * @param dstReg must always be EAX/R0 22047 * @param srcDisp the source displacement 22048 */ 22049 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 22050 public final void emitDIV_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 22051 int miStart = mi; 22052 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22053 generateREXprefix(true, null, null, null); 22054 setMachineCodes(mi++, (byte) 0xF7); 22055 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x6)); 22056 if (lister != null) lister.RRA(miStart, "DIV", dstReg, srcDisp); 22057 } 22058 22059 /** 22060 * Generate a IDIV by register. That is, 22061 * <PRE> 22062 * EAX:EDX = EAX u/ srcReg 22063 * </PRE> 22064 * 22065 * @param dstReg must always be EAX/R0 22066 * @param srcReg the source register 22067 */ 22068 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22069 public final void emitIDIV_Reg_Reg(GPR dstReg, GPR srcReg) { 22070 int miStart = mi; 22071 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22072 generateREXprefix(false, null, null, srcReg); 22073 setMachineCodes(mi++, (byte) 0xF7); 22074 emitRegRegOperands(srcReg, GPR.getForOpcode(0x7)); 22075 if (lister != null) lister.RR(miStart, "IDIV", dstReg, srcReg); 22076 } 22077 22078 /** 22079 * Generate a IDIV by register displacement. That is, 22080 * <PRE> 22081 * EAX:EDX = EAX u/ [srcBase + srcDisp] 22082 * </PRE> 22083 * 22084 * @param dstReg must always be EAX/R0 22085 * @param srcBase the source base register 22086 * @param srcDisp the source displacement 22087 */ 22088 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22089 public final void emitIDIV_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 22090 int miStart = mi; 22091 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22092 generateREXprefix(false, null, null, srcBase); 22093 setMachineCodes(mi++, (byte) 0xF7); 22094 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x7)); 22095 if (lister != null) lister.RRD(miStart, "IDIV", dstReg, srcBase, srcDisp); 22096 } 22097 22098 /** 22099 * Generate a IDIV by register indirect. That is, 22100 * <PRE> 22101 * EAX:EDX = EAX u/ [srcBase] 22102 * </PRE> 22103 * 22104 * @param dstReg must always be EAX/R0 22105 * @param srcBase the source base register 22106 */ 22107 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22108 public final void emitIDIV_Reg_RegInd(GPR dstReg, GPR srcBase) { 22109 int miStart = mi; 22110 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22111 generateREXprefix(false, null, null, srcBase); 22112 setMachineCodes(mi++, (byte) 0xF7); 22113 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x7)); 22114 if (lister != null) lister.RRN(miStart, "IDIV", dstReg, srcBase); 22115 } 22116 22117 /** 22118 * Generate a IDIV by register indexed. That is, 22119 * <PRE> 22120 * EAX:EDX = EAX u/ [srcBase + srcIndex<<srcScale + srcDisp] 22121 * </PRE> 22122 * 22123 * @param dstReg must always be EAX/R0 22124 * @param srcBase the source base register 22125 * @param srcIndex the source index register 22126 * @param srcScale the source scale of the index 22127 * @param srcDisp the source displacement 22128 */ 22129 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 22130 public final void emitIDIV_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 22131 int miStart = mi; 22132 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22133 generateREXprefix(false, null, srcIndex, srcBase); 22134 setMachineCodes(mi++, (byte) 0xF7); 22135 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x7)); 22136 if (lister != null) lister.RRXD(miStart, "IDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 22137 } 22138 22139 /** 22140 * Generate a IDIV by register offseted. That is, 22141 * <PRE> 22142 * EAX:EDX = EAX u/ [srcIndex<<srcScale + srcDisp] 22143 * </PRE> 22144 * 22145 * @param dstReg must always be EAX/R0 22146 * @param srcIndex the source index register 22147 * @param srcScale the source scale of the index 22148 * @param srcDisp the source displacement 22149 */ 22150 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22151 public final void emitIDIV_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 22152 int miStart = mi; 22153 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22154 generateREXprefix(false, null, srcIndex, null); 22155 setMachineCodes(mi++, (byte) 0xF7); 22156 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x7)); 22157 if (lister != null) lister.RRFD(miStart, "IDIV", dstReg, srcIndex, srcScale, srcDisp); 22158 } 22159 22160 /** 22161 * Generate a IDIV by absolute address. That is, 22162 * <PRE> 22163 * EAX:EDX = EAX u/ [srcDisp] 22164 * </PRE> 22165 * 22166 * @param dstReg must always be EAX/R0 22167 * @param srcDisp the source displacement 22168 */ 22169 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 22170 public final void emitIDIV_Reg_Abs(GPR dstReg, Address srcDisp) { 22171 int miStart = mi; 22172 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22173 generateREXprefix(false, null, null, null); 22174 setMachineCodes(mi++, (byte) 0xF7); 22175 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x7)); 22176 if (lister != null) lister.RRA(miStart, "IDIV", dstReg, srcDisp); 22177 } 22178 22179 /** 22180 * Generate a IDIV by register. That is, 22181 * <PRE> 22182 * EAX:EDX = EAX u/ srcReg 22183 * </PRE> 22184 * 22185 * @param dstReg must always be EAX/R0 22186 * @param srcReg the source register 22187 */ 22188 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22189 public final void emitIDIV_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 22190 int miStart = mi; 22191 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22192 generateREXprefix(true, null, null, srcReg); 22193 setMachineCodes(mi++, (byte) 0xF7); 22194 emitRegRegOperands(srcReg, GPR.getForOpcode(0x7)); 22195 if (lister != null) lister.RR(miStart, "IDIV", dstReg, srcReg); 22196 } 22197 22198 /** 22199 * Generate a IDIV by register displacement. That is, 22200 * <PRE> 22201 * EAX:EDX = EAX u/ [srcBase + srcDisp] 22202 * </PRE> 22203 * 22204 * @param dstReg must always be EAX/R0 22205 * @param srcBase the source base register 22206 * @param srcDisp the source displacement 22207 */ 22208 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22209 public final void emitIDIV_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 22210 int miStart = mi; 22211 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22212 generateREXprefix(true, null, null, srcBase); 22213 setMachineCodes(mi++, (byte) 0xF7); 22214 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x7)); 22215 if (lister != null) lister.RRD(miStart, "IDIV", dstReg, srcBase, srcDisp); 22216 } 22217 22218 /** 22219 * Generate a IDIV by register indirect. That is, 22220 * <PRE> 22221 * EAX:EDX = EAX u/ [srcBase] 22222 * </PRE> 22223 * 22224 * @param dstReg must always be EAX/R0 22225 * @param srcBase the source base register 22226 */ 22227 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22228 public final void emitIDIV_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 22229 int miStart = mi; 22230 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22231 generateREXprefix(true, null, null, srcBase); 22232 setMachineCodes(mi++, (byte) 0xF7); 22233 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x7)); 22234 if (lister != null) lister.RRN(miStart, "IDIV", dstReg, srcBase); 22235 } 22236 22237 /** 22238 * Generate a IDIV by register indexed. That is, 22239 * <PRE> 22240 * EAX:EDX = EAX u/ [srcBase + srcIndex<<srcScale + srcDisp] 22241 * </PRE> 22242 * 22243 * @param dstReg must always be EAX/R0 22244 * @param srcBase the source base register 22245 * @param srcIndex the source index register 22246 * @param srcScale the source scale of the index 22247 * @param srcDisp the source displacement 22248 */ 22249 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 22250 public final void emitIDIV_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 22251 int miStart = mi; 22252 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22253 generateREXprefix(true, null, srcIndex, srcBase); 22254 setMachineCodes(mi++, (byte) 0xF7); 22255 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x7)); 22256 if (lister != null) lister.RRXD(miStart, "IDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 22257 } 22258 22259 /** 22260 * Generate a IDIV by register offseted. That is, 22261 * <PRE> 22262 * EAX:EDX = EAX u/ [srcIndex<<srcScale + srcDisp] 22263 * </PRE> 22264 * 22265 * @param dstReg must always be EAX/R0 22266 * @param srcIndex the source index register 22267 * @param srcScale the source scale of the index 22268 * @param srcDisp the source displacement 22269 */ 22270 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22271 public final void emitIDIV_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 22272 int miStart = mi; 22273 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22274 generateREXprefix(true, null, srcIndex, null); 22275 setMachineCodes(mi++, (byte) 0xF7); 22276 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x7)); 22277 if (lister != null) lister.RRFD(miStart, "IDIV", dstReg, srcIndex, srcScale, srcDisp); 22278 } 22279 22280 /** 22281 * Generate a IDIV by absolute address. That is, 22282 * <PRE> 22283 * EAX:EDX = EAX u/ [srcDisp] 22284 * </PRE> 22285 * 22286 * @param dstReg must always be EAX/R0 22287 * @param srcDisp the source displacement 22288 */ 22289 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 22290 public final void emitIDIV_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 22291 int miStart = mi; 22292 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 22293 generateREXprefix(true, null, null, null); 22294 setMachineCodes(mi++, (byte) 0xF7); 22295 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x7)); 22296 if (lister != null) lister.RRA(miStart, "IDIV", dstReg, srcDisp); 22297 } 22298 22299 /** 22300 * Generate a register(indirect)--register MOV. That is, 22301 * <PRE> 22302 * [dstBase] := srcReg 22303 * </PRE> 22304 * 22305 * @param dstBase the destination base 22306 * @param srcReg the source register 22307 */ 22308 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22309 public final void emitMOV_RegInd_Reg(GPR dstBase, GPR srcReg) { 22310 int miStart = mi; 22311 // no group 1 to 4 prefix byte 22312 generateREXprefix(false, srcReg, null, dstBase); 22313 // single byte opcode 22314 setMachineCodes(mi++, (byte) 0x89); 22315 emitRegIndirectRegOperands(dstBase, srcReg); 22316 if (lister != null) lister.RNR(miStart, "MOV", dstBase, srcReg); 22317 } 22318 22319 /** 22320 * Generate a register-offset--register MOV. That is, 22321 * <PRE> 22322 * [dstReg<<dstScale + dstDisp] := srcReg 22323 * </PRE> 22324 * 22325 * @param dstIndex the destination index register 22326 * @param dstScale the destination shift amount 22327 * @param dstDisp the destination displacement 22328 * @param srcReg the source register 22329 */ 22330 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 22331 public final void emitMOV_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 22332 int miStart = mi; 22333 // no group 1 to 4 prefix byte 22334 generateREXprefix(false, srcReg, dstIndex, null); 22335 // single byte opcode 22336 setMachineCodes(mi++, (byte) 0x89); 22337 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 22338 if (lister != null) lister.RFDR(miStart, "MOV", dstIndex, dstScale, dstDisp, srcReg); 22339 } 22340 22341 /** 22342 * Generate a absolute--register MOV. That is, 22343 * <PRE> 22344 * [dstDisp] := srcReg 22345 * </PRE> 22346 * 22347 * @param dstDisp the destination address 22348 * @param srcReg the source register 22349 */ 22350 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 22351 public final void emitMOV_Abs_Reg(Address dstDisp, GPR srcReg) { 22352 int miStart = mi; 22353 // no group 1 to 4 prefix byte 22354 generateREXprefix(false, srcReg, null, null); 22355 // single byte opcode 22356 setMachineCodes(mi++, (byte) 0x89); 22357 emitAbsRegOperands(dstDisp, srcReg); 22358 if (lister != null) lister.RAR(miStart, "MOV", dstDisp, srcReg); 22359 } 22360 22361 /** 22362 * Generate a register-index--register MOV. That is, 22363 * <PRE> 22364 * [dstBase + dstIndex<<dstScale + dstDisp] := srcReg 22365 * </PRE> 22366 * 22367 * @param dstBase the base register 22368 * @param dstIndex the destination index register 22369 * @param dstScale the destination shift amount 22370 * @param dstDisp the destination displacement 22371 * @param srcReg the source register 22372 */ 22373 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 22374 public final void emitMOV_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 22375 int miStart = mi; 22376 // no group 1 to 4 prefix byte 22377 generateREXprefix(false, srcReg, dstIndex, dstBase); 22378 // single byte opcode 22379 setMachineCodes(mi++, (byte) 0x89); 22380 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 22381 if (lister != null) lister.RXDR(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, srcReg); 22382 } 22383 22384 /** 22385 * Generate a register-displacement--register MOV. That is, 22386 * <PRE> 22387 * [dstBase + dstDisp] := srcReg 22388 * </PRE> 22389 * 22390 * @param dstBase the base register 22391 * @param dstDisp the destination displacement 22392 * @param srcReg the source register 22393 */ 22394 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 22395 public final void emitMOV_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 22396 int miStart = mi; 22397 // no group 1 to 4 prefix byte 22398 generateREXprefix(false, srcReg, null, dstBase); 22399 // single byte opcode 22400 setMachineCodes(mi++, (byte) 0x89); 22401 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 22402 if (lister != null) lister.RDR(miStart, "MOV", dstBase, dstDisp, srcReg); 22403 } 22404 22405 /** 22406 * Generate a register--register MOV. That is, 22407 * <PRE> 22408 * dstReg := srcReg 22409 * </PRE> 22410 * 22411 * @param dstReg the destination register 22412 * @param srcReg the source register 22413 */ 22414 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22415 public final void emitMOV_Reg_Reg(GPR dstReg, GPR srcReg) { 22416 int miStart = mi; 22417 // no group 1 to 4 prefix byte 22418 generateREXprefix(false, srcReg, null, dstReg); 22419 // single byte opcode 22420 setMachineCodes(mi++, (byte) 0x89); 22421 emitRegRegOperands(dstReg, srcReg); 22422 if (lister != null) lister.RR(miStart, "MOV", dstReg, srcReg); 22423 } 22424 22425 /** 22426 * Generate a register--register-displacement MOV. That is, 22427 * <PRE> 22428 * dstReg := [srcReg + srcDisp] 22429 * </PRE> 22430 * 22431 * @param dstReg the destination register 22432 * @param srcBase the source register 22433 * @param srcDisp the source displacement 22434 */ 22435 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22436 public final void emitMOV_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 22437 int miStart = mi; 22438 // no group 1 to 4 prefix byte 22439 generateREXprefix(false, dstReg, null, srcBase); 22440 // single byte opcode 22441 setMachineCodes(mi++, (byte) 0x8B); 22442 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 22443 if (lister != null) lister.RRD(miStart, "MOV", dstReg, srcBase, srcDisp); 22444 } 22445 22446 /** 22447 * Generate a register--register-offset MOV. That is, 22448 * <PRE> 22449 * dstReg := [srcIndex<<srcScale + srcDisp] 22450 * </PRE> 22451 * 22452 * @param dstReg the destination register 22453 * @param srcIndex the source index register 22454 * @param srcScale the source shift amount 22455 * @param srcDisp the source displacement 22456 */ 22457 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22458 public final void emitMOV_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 22459 int miStart = mi; 22460 // no group 1 to 4 prefix byte 22461 generateREXprefix(false, dstReg, srcIndex, null); 22462 // single byte opcode 22463 setMachineCodes(mi++, (byte) 0x8B); 22464 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 22465 if (lister != null) lister.RRFD(miStart, "MOV", dstReg, srcIndex, srcScale, srcDisp); 22466 } 22467 22468 /** 22469 * Generate a register--register-offset MOV. That is, 22470 * <PRE> 22471 * dstReg := [srcDisp] 22472 * </PRE> 22473 * 22474 * @param dstReg the destination register 22475 * @param srcDisp the source displacement 22476 */ 22477 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 22478 public final void emitMOV_Reg_Abs(GPR dstReg, Address srcDisp) { 22479 int miStart = mi; 22480 // no group 1 to 4 prefix byte 22481 generateREXprefix(false, dstReg, null, null); 22482 // single byte opcode 22483 setMachineCodes(mi++, (byte) 0x8B); 22484 emitAbsRegOperands(srcDisp, dstReg); 22485 if (lister != null) lister.RRA(miStart, "MOV", dstReg, srcDisp); 22486 } 22487 22488 /** 22489 * Generate a register--register-offset MOV. That is, 22490 * <PRE> 22491 * dstReg := [srcBase + srcIndex<<srcScale + srcDisp] 22492 * </PRE> 22493 * 22494 * @param dstReg the destination register 22495 * @param srcBase the source base register 22496 * @param srcIndex the source index register 22497 * @param srcScale the source shift amount 22498 * @param srcDisp the source displacement 22499 */ 22500 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 22501 public final void emitMOV_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 22502 int miStart = mi; 22503 // no group 1 to 4 prefix byte 22504 generateREXprefix(false, dstReg, srcIndex, srcBase); 22505 // single byte opcode 22506 setMachineCodes(mi++, (byte) 0x8B); 22507 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 22508 if (lister != null) lister.RRXD(miStart, "MOV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 22509 } 22510 22511 /** 22512 * Generate a register--register(indirect) MOV. That is, 22513 * <PRE> 22514 * dstReg := [srcBase] 22515 * </PRE> 22516 * 22517 * @param dstReg the destination register 22518 * @param srcBase the source base register 22519 */ 22520 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22521 public final void emitMOV_Reg_RegInd(GPR dstReg, GPR srcBase) { 22522 int miStart = mi; 22523 // no group 1 to 4 prefix byte 22524 generateREXprefix(false, dstReg, null, srcBase); 22525 // single byte opcode 22526 setMachineCodes(mi++, (byte) 0x8B); 22527 emitRegIndirectRegOperands(srcBase, dstReg); 22528 if (lister != null) lister.RRN(miStart, "MOV", dstReg, srcBase); 22529 } 22530 22531 /** 22532 * Generate a register(indirect)--register MOV. That is, 22533 * <PRE> 22534 * [dstBase] := (byte) srcReg 22535 * </PRE> 22536 * 22537 * @param dstBase the destination base 22538 * @param srcReg the source register 22539 */ 22540 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22541 public final void emitMOV_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 22542 int miStart = mi; 22543 // no group 1 to 4 prefix byte 22544 generateREXprefix(false, srcReg, null, dstBase); 22545 // single byte opcode 22546 setMachineCodes(mi++, (byte) 0x88); 22547 emitRegIndirectRegOperands(dstBase, srcReg); 22548 if (lister != null) lister.RNR(miStart, "MOV", dstBase, srcReg); 22549 } 22550 22551 /** 22552 * Generate a register-offset--register MOV. That is, 22553 * <PRE> 22554 * [dstReg<<dstScale + dstDisp] := (byte) srcReg 22555 * </PRE> 22556 * 22557 * @param dstIndex the destination index register 22558 * @param dstScale the destination shift amount 22559 * @param dstDisp the destination displacement 22560 * @param srcReg the source register 22561 */ 22562 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 22563 public final void emitMOV_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 22564 int miStart = mi; 22565 // no group 1 to 4 prefix byte 22566 generateREXprefix(false, srcReg, dstIndex, null); 22567 // single byte opcode 22568 setMachineCodes(mi++, (byte) 0x88); 22569 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 22570 if (lister != null) lister.RFDR(miStart, "MOV", dstIndex, dstScale, dstDisp, srcReg); 22571 } 22572 22573 /** 22574 * Generate a absolute--register MOV. That is, 22575 * <PRE> 22576 * [dstDisp] := (byte) srcReg 22577 * </PRE> 22578 * 22579 * @param dstDisp the destination address 22580 * @param srcReg the source register 22581 */ 22582 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 22583 public final void emitMOV_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 22584 int miStart = mi; 22585 // no group 1 to 4 prefix byte 22586 generateREXprefix(false, srcReg, null, null); 22587 // single byte opcode 22588 setMachineCodes(mi++, (byte) 0x88); 22589 emitAbsRegOperands(dstDisp, srcReg); 22590 if (lister != null) lister.RAR(miStart, "MOV", dstDisp, srcReg); 22591 } 22592 22593 /** 22594 * Generate a register-index--register MOV. That is, 22595 * <PRE> 22596 * [dstBase + dstIndex<<dstScale + dstDisp] := (byte) srcReg 22597 * </PRE> 22598 * 22599 * @param dstBase the base register 22600 * @param dstIndex the destination index register 22601 * @param dstScale the destination shift amount 22602 * @param dstDisp the destination displacement 22603 * @param srcReg the source register 22604 */ 22605 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 22606 public final void emitMOV_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 22607 int miStart = mi; 22608 // no group 1 to 4 prefix byte 22609 generateREXprefix(false, srcReg, dstIndex, dstBase); 22610 // single byte opcode 22611 setMachineCodes(mi++, (byte) 0x88); 22612 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 22613 if (lister != null) lister.RXDR(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, srcReg); 22614 } 22615 22616 /** 22617 * Generate a register-displacement--register MOV. That is, 22618 * <PRE> 22619 * [dstBase + dstDisp] := (byte) srcReg 22620 * </PRE> 22621 * 22622 * @param dstBase the base register 22623 * @param dstDisp the destination displacement 22624 * @param srcReg the source register 22625 */ 22626 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 22627 public final void emitMOV_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 22628 int miStart = mi; 22629 // no group 1 to 4 prefix byte 22630 generateREXprefix(false, srcReg, null, dstBase); 22631 // single byte opcode 22632 setMachineCodes(mi++, (byte) 0x88); 22633 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 22634 if (lister != null) lister.RDR(miStart, "MOV", dstBase, dstDisp, srcReg); 22635 } 22636 22637 /** 22638 * Generate a register--register MOV. That is, 22639 * <PRE> 22640 * dstReg := (byte) srcReg 22641 * </PRE> 22642 * 22643 * @param dstReg the destination register 22644 * @param srcReg the source register 22645 */ 22646 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22647 public final void emitMOV_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 22648 int miStart = mi; 22649 // no group 1 to 4 prefix byte 22650 generateREXprefix(false, srcReg, null, dstReg); 22651 // single byte opcode 22652 setMachineCodes(mi++, (byte) 0x88); 22653 emitRegRegOperands(dstReg, srcReg); 22654 if (lister != null) lister.RR(miStart, "MOV", dstReg, srcReg); 22655 } 22656 22657 /** 22658 * Generate a register--register-displacement MOV. That is, 22659 * <PRE> 22660 * dstReg := (byte) [srcReg + srcDisp] 22661 * </PRE> 22662 * 22663 * @param dstReg the destination register 22664 * @param srcBase the source register 22665 * @param srcDisp the source displacement 22666 */ 22667 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22668 public final void emitMOV_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 22669 int miStart = mi; 22670 // no group 1 to 4 prefix byte 22671 generateREXprefix(false, dstReg, null, srcBase); 22672 // single byte opcode 22673 setMachineCodes(mi++, (byte) 0x8A); 22674 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 22675 if (lister != null) lister.RRD(miStart, "MOV", dstReg, srcBase, srcDisp); 22676 } 22677 22678 /** 22679 * Generate a register--register-offset MOV. That is, 22680 * <PRE> 22681 * dstReg := (byte) [srcIndex<<srcScale + srcDisp] 22682 * </PRE> 22683 * 22684 * @param dstReg the destination register 22685 * @param srcIndex the source index register 22686 * @param srcScale the source shift amount 22687 * @param srcDisp the source displacement 22688 */ 22689 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22690 public final void emitMOV_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 22691 int miStart = mi; 22692 // no group 1 to 4 prefix byte 22693 generateREXprefix(false, dstReg, srcIndex, null); 22694 // single byte opcode 22695 setMachineCodes(mi++, (byte) 0x8A); 22696 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 22697 if (lister != null) lister.RRFD(miStart, "MOV", dstReg, srcIndex, srcScale, srcDisp); 22698 } 22699 22700 /** 22701 * Generate a register--register-offset MOV. That is, 22702 * <PRE> 22703 * dstReg := (byte) [srcDisp] 22704 * </PRE> 22705 * 22706 * @param dstReg the destination register 22707 * @param srcDisp the source displacement 22708 */ 22709 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 22710 public final void emitMOV_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 22711 int miStart = mi; 22712 // no group 1 to 4 prefix byte 22713 generateREXprefix(false, dstReg, null, null); 22714 // single byte opcode 22715 setMachineCodes(mi++, (byte) 0x8A); 22716 emitAbsRegOperands(srcDisp, dstReg); 22717 if (lister != null) lister.RRA(miStart, "MOV", dstReg, srcDisp); 22718 } 22719 22720 /** 22721 * Generate a register--register-offset MOV. That is, 22722 * <PRE> 22723 * dstReg := (byte) [srcBase + srcIndex<<srcScale + srcDisp] 22724 * </PRE> 22725 * 22726 * @param dstReg the destination register 22727 * @param srcBase the source base register 22728 * @param srcIndex the source index register 22729 * @param srcScale the source shift amount 22730 * @param srcDisp the source displacement 22731 */ 22732 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 22733 public final void emitMOV_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 22734 int miStart = mi; 22735 // no group 1 to 4 prefix byte 22736 generateREXprefix(false, dstReg, srcIndex, srcBase); 22737 // single byte opcode 22738 setMachineCodes(mi++, (byte) 0x8A); 22739 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 22740 if (lister != null) lister.RRXD(miStart, "MOV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 22741 } 22742 22743 /** 22744 * Generate a register--register(indirect) MOV. That is, 22745 * <PRE> 22746 * dstReg := (byte) [srcBase] 22747 * </PRE> 22748 * 22749 * @param dstReg the destination register 22750 * @param srcBase the source base register 22751 */ 22752 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22753 public final void emitMOV_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 22754 int miStart = mi; 22755 // no group 1 to 4 prefix byte 22756 generateREXprefix(false, dstReg, null, srcBase); 22757 // single byte opcode 22758 setMachineCodes(mi++, (byte) 0x8A); 22759 emitRegIndirectRegOperands(srcBase, dstReg); 22760 if (lister != null) lister.RRN(miStart, "MOV", dstReg, srcBase); 22761 } 22762 22763 /** 22764 * Generate a register(indirect)--register MOV. That is, 22765 * <PRE> 22766 * [dstBase] := (word) srcReg 22767 * </PRE> 22768 * 22769 * @param dstBase the destination base 22770 * @param srcReg the source register 22771 */ 22772 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22773 public final void emitMOV_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 22774 int miStart = mi; 22775 setMachineCodes(mi++, (byte) 0x66); 22776 generateREXprefix(false, srcReg, null, dstBase); 22777 // single byte opcode 22778 setMachineCodes(mi++, (byte) 0x89); 22779 emitRegIndirectRegOperands(dstBase, srcReg); 22780 if (lister != null) lister.RNR(miStart, "MOV", dstBase, srcReg); 22781 } 22782 22783 /** 22784 * Generate a register-offset--register MOV. That is, 22785 * <PRE> 22786 * [dstReg<<dstScale + dstDisp] := (word) srcReg 22787 * </PRE> 22788 * 22789 * @param dstIndex the destination index register 22790 * @param dstScale the destination shift amount 22791 * @param dstDisp the destination displacement 22792 * @param srcReg the source register 22793 */ 22794 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 22795 public final void emitMOV_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 22796 int miStart = mi; 22797 setMachineCodes(mi++, (byte) 0x66); 22798 generateREXprefix(false, srcReg, dstIndex, null); 22799 // single byte opcode 22800 setMachineCodes(mi++, (byte) 0x89); 22801 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 22802 if (lister != null) lister.RFDR(miStart, "MOV", dstIndex, dstScale, dstDisp, srcReg); 22803 } 22804 22805 /** 22806 * Generate a absolute--register MOV. That is, 22807 * <PRE> 22808 * [dstDisp] := (word) srcReg 22809 * </PRE> 22810 * 22811 * @param dstDisp the destination address 22812 * @param srcReg the source register 22813 */ 22814 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 22815 public final void emitMOV_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 22816 int miStart = mi; 22817 setMachineCodes(mi++, (byte) 0x66); 22818 generateREXprefix(false, srcReg, null, null); 22819 // single byte opcode 22820 setMachineCodes(mi++, (byte) 0x89); 22821 emitAbsRegOperands(dstDisp, srcReg); 22822 if (lister != null) lister.RAR(miStart, "MOV", dstDisp, srcReg); 22823 } 22824 22825 /** 22826 * Generate a register-index--register MOV. That is, 22827 * <PRE> 22828 * [dstBase + dstIndex<<dstScale + dstDisp] := (word) srcReg 22829 * </PRE> 22830 * 22831 * @param dstBase the base register 22832 * @param dstIndex the destination index register 22833 * @param dstScale the destination shift amount 22834 * @param dstDisp the destination displacement 22835 * @param srcReg the source register 22836 */ 22837 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 22838 public final void emitMOV_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 22839 int miStart = mi; 22840 setMachineCodes(mi++, (byte) 0x66); 22841 generateREXprefix(false, srcReg, dstIndex, dstBase); 22842 // single byte opcode 22843 setMachineCodes(mi++, (byte) 0x89); 22844 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 22845 if (lister != null) lister.RXDR(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, srcReg); 22846 } 22847 22848 /** 22849 * Generate a register-displacement--register MOV. That is, 22850 * <PRE> 22851 * [dstBase + dstDisp] := (word) srcReg 22852 * </PRE> 22853 * 22854 * @param dstBase the base register 22855 * @param dstDisp the destination displacement 22856 * @param srcReg the source register 22857 */ 22858 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 22859 public final void emitMOV_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 22860 int miStart = mi; 22861 setMachineCodes(mi++, (byte) 0x66); 22862 generateREXprefix(false, srcReg, null, dstBase); 22863 // single byte opcode 22864 setMachineCodes(mi++, (byte) 0x89); 22865 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 22866 if (lister != null) lister.RDR(miStart, "MOV", dstBase, dstDisp, srcReg); 22867 } 22868 22869 /** 22870 * Generate a register--register MOV. That is, 22871 * <PRE> 22872 * dstReg := (word) srcReg 22873 * </PRE> 22874 * 22875 * @param dstReg the destination register 22876 * @param srcReg the source register 22877 */ 22878 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22879 public final void emitMOV_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 22880 int miStart = mi; 22881 setMachineCodes(mi++, (byte) 0x66); 22882 generateREXprefix(false, srcReg, null, dstReg); 22883 // single byte opcode 22884 setMachineCodes(mi++, (byte) 0x89); 22885 emitRegRegOperands(dstReg, srcReg); 22886 if (lister != null) lister.RR(miStart, "MOV", dstReg, srcReg); 22887 } 22888 22889 /** 22890 * Generate a register--register-displacement MOV. That is, 22891 * <PRE> 22892 * dstReg := (word) [srcReg + srcDisp] 22893 * </PRE> 22894 * 22895 * @param dstReg the destination register 22896 * @param srcBase the source register 22897 * @param srcDisp the source displacement 22898 */ 22899 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22900 public final void emitMOV_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 22901 int miStart = mi; 22902 setMachineCodes(mi++, (byte) 0x66); 22903 generateREXprefix(false, dstReg, null, srcBase); 22904 // single byte opcode 22905 setMachineCodes(mi++, (byte) 0x8B); 22906 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 22907 if (lister != null) lister.RRD(miStart, "MOV", dstReg, srcBase, srcDisp); 22908 } 22909 22910 /** 22911 * Generate a register--register-offset MOV. That is, 22912 * <PRE> 22913 * dstReg := (word) [srcIndex<<srcScale + srcDisp] 22914 * </PRE> 22915 * 22916 * @param dstReg the destination register 22917 * @param srcIndex the source index register 22918 * @param srcScale the source shift amount 22919 * @param srcDisp the source displacement 22920 */ 22921 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22922 public final void emitMOV_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 22923 int miStart = mi; 22924 setMachineCodes(mi++, (byte) 0x66); 22925 generateREXprefix(false, dstReg, srcIndex, null); 22926 // single byte opcode 22927 setMachineCodes(mi++, (byte) 0x8B); 22928 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 22929 if (lister != null) lister.RRFD(miStart, "MOV", dstReg, srcIndex, srcScale, srcDisp); 22930 } 22931 22932 /** 22933 * Generate a register--register-offset MOV. That is, 22934 * <PRE> 22935 * dstReg := (word) [srcDisp] 22936 * </PRE> 22937 * 22938 * @param dstReg the destination register 22939 * @param srcDisp the source displacement 22940 */ 22941 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 22942 public final void emitMOV_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 22943 int miStart = mi; 22944 setMachineCodes(mi++, (byte) 0x66); 22945 generateREXprefix(false, dstReg, null, null); 22946 // single byte opcode 22947 setMachineCodes(mi++, (byte) 0x8B); 22948 emitAbsRegOperands(srcDisp, dstReg); 22949 if (lister != null) lister.RRA(miStart, "MOV", dstReg, srcDisp); 22950 } 22951 22952 /** 22953 * Generate a register--register-offset MOV. That is, 22954 * <PRE> 22955 * dstReg := (word) [srcBase + srcIndex<<srcScale + srcDisp] 22956 * </PRE> 22957 * 22958 * @param dstReg the destination register 22959 * @param srcBase the source base register 22960 * @param srcIndex the source index register 22961 * @param srcScale the source shift amount 22962 * @param srcDisp the source displacement 22963 */ 22964 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 22965 public final void emitMOV_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 22966 int miStart = mi; 22967 setMachineCodes(mi++, (byte) 0x66); 22968 generateREXprefix(false, dstReg, srcIndex, srcBase); 22969 // single byte opcode 22970 setMachineCodes(mi++, (byte) 0x8B); 22971 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 22972 if (lister != null) lister.RRXD(miStart, "MOV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 22973 } 22974 22975 /** 22976 * Generate a register--register(indirect) MOV. That is, 22977 * <PRE> 22978 * dstReg := (word) [srcBase] 22979 * </PRE> 22980 * 22981 * @param dstReg the destination register 22982 * @param srcBase the source base register 22983 */ 22984 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 22985 public final void emitMOV_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 22986 int miStart = mi; 22987 setMachineCodes(mi++, (byte) 0x66); 22988 generateREXprefix(false, dstReg, null, srcBase); 22989 // single byte opcode 22990 setMachineCodes(mi++, (byte) 0x8B); 22991 emitRegIndirectRegOperands(srcBase, dstReg); 22992 if (lister != null) lister.RRN(miStart, "MOV", dstReg, srcBase); 22993 } 22994 22995 /** 22996 * Generate a register(indirect)--register MOV. That is, 22997 * <PRE> 22998 * [dstBase] := (quad) srcReg 22999 * </PRE> 23000 * 23001 * @param dstBase the destination base 23002 * @param srcReg the source register 23003 */ 23004 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23005 public final void emitMOV_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 23006 int miStart = mi; 23007 // no group 1 to 4 prefix byte 23008 generateREXprefix(true, srcReg, null, dstBase); 23009 // single byte opcode 23010 setMachineCodes(mi++, (byte) 0x89); 23011 emitRegIndirectRegOperands(dstBase, srcReg); 23012 if (lister != null) lister.RNR(miStart, "MOV", dstBase, srcReg); 23013 } 23014 23015 /** 23016 * Generate a register-offset--register MOV. That is, 23017 * <PRE> 23018 * [dstReg<<dstScale + dstDisp] := (quad) srcReg 23019 * </PRE> 23020 * 23021 * @param dstIndex the destination index register 23022 * @param dstScale the destination shift amount 23023 * @param dstDisp the destination displacement 23024 * @param srcReg the source register 23025 */ 23026 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 23027 public final void emitMOV_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 23028 int miStart = mi; 23029 // no group 1 to 4 prefix byte 23030 generateREXprefix(true, srcReg, dstIndex, null); 23031 // single byte opcode 23032 setMachineCodes(mi++, (byte) 0x89); 23033 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 23034 if (lister != null) lister.RFDR(miStart, "MOV", dstIndex, dstScale, dstDisp, srcReg); 23035 } 23036 23037 /** 23038 * Generate a absolute--register MOV. That is, 23039 * <PRE> 23040 * [dstDisp] := (quad) srcReg 23041 * </PRE> 23042 * 23043 * @param dstDisp the destination address 23044 * @param srcReg the source register 23045 */ 23046 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 23047 public final void emitMOV_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 23048 int miStart = mi; 23049 // no group 1 to 4 prefix byte 23050 generateREXprefix(true, srcReg, null, null); 23051 // single byte opcode 23052 setMachineCodes(mi++, (byte) 0x89); 23053 emitAbsRegOperands(dstDisp, srcReg); 23054 if (lister != null) lister.RAR(miStart, "MOV", dstDisp, srcReg); 23055 } 23056 23057 /** 23058 * Generate a register-index--register MOV. That is, 23059 * <PRE> 23060 * [dstBase + dstIndex<<dstScale + dstDisp] := (quad) srcReg 23061 * </PRE> 23062 * 23063 * @param dstBase the base register 23064 * @param dstIndex the destination index register 23065 * @param dstScale the destination shift amount 23066 * @param dstDisp the destination displacement 23067 * @param srcReg the source register 23068 */ 23069 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 23070 public final void emitMOV_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 23071 int miStart = mi; 23072 // no group 1 to 4 prefix byte 23073 generateREXprefix(true, srcReg, dstIndex, dstBase); 23074 // single byte opcode 23075 setMachineCodes(mi++, (byte) 0x89); 23076 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 23077 if (lister != null) lister.RXDR(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, srcReg); 23078 } 23079 23080 /** 23081 * Generate a register-displacement--register MOV. That is, 23082 * <PRE> 23083 * [dstBase + dstDisp] := (quad) srcReg 23084 * </PRE> 23085 * 23086 * @param dstBase the base register 23087 * @param dstDisp the destination displacement 23088 * @param srcReg the source register 23089 */ 23090 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 23091 public final void emitMOV_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 23092 int miStart = mi; 23093 // no group 1 to 4 prefix byte 23094 generateREXprefix(true, srcReg, null, dstBase); 23095 // single byte opcode 23096 setMachineCodes(mi++, (byte) 0x89); 23097 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 23098 if (lister != null) lister.RDR(miStart, "MOV", dstBase, dstDisp, srcReg); 23099 } 23100 23101 /** 23102 * Generate a register--register MOV. That is, 23103 * <PRE> 23104 * dstReg := (quad) srcReg 23105 * </PRE> 23106 * 23107 * @param dstReg the destination register 23108 * @param srcReg the source register 23109 */ 23110 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23111 public final void emitMOV_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 23112 int miStart = mi; 23113 // no group 1 to 4 prefix byte 23114 generateREXprefix(true, srcReg, null, dstReg); 23115 // single byte opcode 23116 setMachineCodes(mi++, (byte) 0x89); 23117 emitRegRegOperands(dstReg, srcReg); 23118 if (lister != null) lister.RR(miStart, "MOV", dstReg, srcReg); 23119 } 23120 23121 /** 23122 * Generate a register--register-displacement MOV. That is, 23123 * <PRE> 23124 * dstReg := (quad) [srcReg + srcDisp] 23125 * </PRE> 23126 * 23127 * @param dstReg the destination register 23128 * @param srcBase the source register 23129 * @param srcDisp the source displacement 23130 */ 23131 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23132 public final void emitMOV_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 23133 int miStart = mi; 23134 // no group 1 to 4 prefix byte 23135 generateREXprefix(true, dstReg, null, srcBase); 23136 // single byte opcode 23137 setMachineCodes(mi++, (byte) 0x8B); 23138 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 23139 if (lister != null) lister.RRD(miStart, "MOV", dstReg, srcBase, srcDisp); 23140 } 23141 23142 /** 23143 * Generate a register--register-offset MOV. That is, 23144 * <PRE> 23145 * dstReg := (quad) [srcIndex<<srcScale + srcDisp] 23146 * </PRE> 23147 * 23148 * @param dstReg the destination register 23149 * @param srcIndex the source index register 23150 * @param srcScale the source shift amount 23151 * @param srcDisp the source displacement 23152 */ 23153 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23154 public final void emitMOV_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 23155 int miStart = mi; 23156 // no group 1 to 4 prefix byte 23157 generateREXprefix(true, dstReg, srcIndex, null); 23158 // single byte opcode 23159 setMachineCodes(mi++, (byte) 0x8B); 23160 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 23161 if (lister != null) lister.RRFD(miStart, "MOV", dstReg, srcIndex, srcScale, srcDisp); 23162 } 23163 23164 /** 23165 * Generate a register--register-offset MOV. That is, 23166 * <PRE> 23167 * dstReg := (quad) [srcDisp] 23168 * </PRE> 23169 * 23170 * @param dstReg the destination register 23171 * @param srcDisp the source displacement 23172 */ 23173 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23174 public final void emitMOV_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 23175 int miStart = mi; 23176 // no group 1 to 4 prefix byte 23177 generateREXprefix(true, dstReg, null, null); 23178 // single byte opcode 23179 setMachineCodes(mi++, (byte) 0x8B); 23180 emitAbsRegOperands(srcDisp, dstReg); 23181 if (lister != null) lister.RRA(miStart, "MOV", dstReg, srcDisp); 23182 } 23183 23184 /** 23185 * Generate a register--register-offset MOV. That is, 23186 * <PRE> 23187 * dstReg := (quad) [srcBase + srcIndex<<srcScale + srcDisp] 23188 * </PRE> 23189 * 23190 * @param dstReg the destination register 23191 * @param srcBase the source base register 23192 * @param srcIndex the source index register 23193 * @param srcScale the source shift amount 23194 * @param srcDisp the source displacement 23195 */ 23196 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 23197 public final void emitMOV_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 23198 int miStart = mi; 23199 // no group 1 to 4 prefix byte 23200 generateREXprefix(true, dstReg, srcIndex, srcBase); 23201 // single byte opcode 23202 setMachineCodes(mi++, (byte) 0x8B); 23203 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 23204 if (lister != null) lister.RRXD(miStart, "MOV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 23205 } 23206 23207 /** 23208 * Generate a register--register(indirect) MOV. That is, 23209 * <PRE> 23210 * dstReg := (quad) [srcBase] 23211 * </PRE> 23212 * 23213 * @param dstReg the destination register 23214 * @param srcBase the source base register 23215 */ 23216 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23217 public final void emitMOV_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 23218 int miStart = mi; 23219 // no group 1 to 4 prefix byte 23220 generateREXprefix(true, dstReg, null, srcBase); 23221 // single byte opcode 23222 setMachineCodes(mi++, (byte) 0x8B); 23223 emitRegIndirectRegOperands(srcBase, dstReg); 23224 if (lister != null) lister.RRN(miStart, "MOV", dstReg, srcBase); 23225 } 23226 23227 /** 23228 * Generate a register-indirect--immediate MOV. That is, 23229 * <PRE> 23230 * [dstBase] MOV = imm 23231 * </PRE> 23232 * 23233 * @param dstBase the destination base register 23234 * @param imm immediate 23235 */ 23236 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23237 public final void emitMOV_RegInd_Imm_Byte(GPR dstBase, int imm) { 23238 int miStart = mi; 23239 // no prefix byte 23240 generateREXprefix(false, null, null, dstBase); 23241 setMachineCodes(mi++, (byte) 0xC6); 23242 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 23243 emitImm8(imm); 23244 if (lister != null) lister.RNI(miStart, "MOV", dstBase, imm); 23245 } 23246 23247 /** 23248 * Generate a register-displacement--immediate MOV. That is, 23249 * <PRE> 23250 * [dstBase + dstDisp] MOV = imm 23251 * </PRE> 23252 * 23253 * @param dstBase the destination base register 23254 * @param dstDisp the destination displacement 23255 * @param imm immediate 23256 */ 23257 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23258 public final void emitMOV_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 23259 int miStart = mi; 23260 // no prefix byte 23261 generateREXprefix(false, null, null, dstBase); 23262 setMachineCodes(mi++, (byte) 0xC6); 23263 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 23264 emitImm8(imm); 23265 if (lister != null) lister.RDI(miStart, "MOV", dstBase, dstDisp, imm); 23266 } 23267 23268 /** 23269 * Generate a register-index--immediate MOV. That is, 23270 * <PRE> 23271 * [dstBase + dstIndex<<scale + dstDisp] MOV = imm 23272 * </PRE> 23273 * 23274 * @param dstBase the destination base register 23275 * @param dstIndex the destination index register 23276 * @param dstScale the destination shift amount 23277 * @param dstDisp the destination displacement 23278 * @param imm immediate 23279 */ 23280 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23281 public final void emitMOV_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 23282 int miStart = mi; 23283 // no prefix byte 23284 generateREXprefix(false, null, dstIndex, dstBase); 23285 setMachineCodes(mi++, (byte) 0xC6); 23286 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 23287 emitImm8(imm); 23288 if (lister != null) lister.RXDI(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, imm); 23289 } 23290 23291 /** 23292 * Generate a register-index--immediate MOV. That is, 23293 * <PRE> 23294 * [dstIndex<<scale + dstDisp] MOV = imm 23295 * </PRE> 23296 * 23297 * @param dstIndex the destination index register 23298 * @param dstScale the destination shift amount 23299 * @param dstDisp the destination displacement 23300 * @param imm immediate 23301 */ 23302 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23303 public final void emitMOV_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 23304 int miStart = mi; 23305 // no prefix byte 23306 generateREXprefix(false, null, dstIndex, null); 23307 setMachineCodes(mi++, (byte) 0xC6); 23308 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 23309 emitImm8(imm); 23310 if (lister != null) lister.RFDI(miStart, "MOV", dstIndex, dstScale, dstDisp, imm); 23311 } 23312 23313 /** 23314 * Generate an absolute MOV. That is, 23315 * <PRE> 23316 * [dstDisp] MOV = imm 23317 * </PRE> 23318 * 23319 * @param dstDisp the destination displacement 23320 * @param imm immediate 23321 */ 23322 public final void emitMOV_Abs_Imm_Byte(Address dstDisp, int imm) { 23323 int miStart = mi; 23324 // no prefix byte 23325 generateREXprefix(false, null, null, null); 23326 setMachineCodes(mi++, (byte) 0xC6); 23327 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 23328 emitImm8(imm); 23329 if (lister != null) lister.RAI(miStart, "MOV", dstDisp, imm); 23330 } 23331 23332 /** 23333 * Generate a register-indirect--immediate MOV. That is, 23334 * <PRE> 23335 * [dstBase] MOV = imm 23336 * </PRE> 23337 * 23338 * @param dstBase the destination base register 23339 * @param imm immediate 23340 */ 23341 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23342 public final void emitMOV_RegInd_Imm_Word(GPR dstBase, int imm) { 23343 int miStart = mi; 23344 setMachineCodes(mi++, (byte) 0x66); 23345 generateREXprefix(false, null, null, dstBase); 23346 setMachineCodes(mi++, (byte) 0xC7); 23347 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 23348 emitImm16(imm); 23349 if (lister != null) lister.RNI(miStart, "MOV", dstBase, imm); 23350 } 23351 23352 /** 23353 * Generate a register-displacement--immediate MOV. That is, 23354 * <PRE> 23355 * [dstBase + dstDisp] MOV = imm 23356 * </PRE> 23357 * 23358 * @param dstBase the destination base register 23359 * @param dstDisp the destination displacement 23360 * @param imm immediate 23361 */ 23362 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23363 public final void emitMOV_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 23364 int miStart = mi; 23365 setMachineCodes(mi++, (byte) 0x66); 23366 generateREXprefix(false, null, null, dstBase); 23367 setMachineCodes(mi++, (byte) 0xC7); 23368 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 23369 emitImm16(imm); 23370 if (lister != null) lister.RDI(miStart, "MOV", dstBase, dstDisp, imm); 23371 } 23372 23373 /** 23374 * Generate a register-index--immediate MOV. That is, 23375 * <PRE> 23376 * [dstBase + dstIndex<<scale + dstDisp] MOV = imm 23377 * </PRE> 23378 * 23379 * @param dstBase the destination base register 23380 * @param dstIndex the destination index register 23381 * @param dstScale the destination shift amount 23382 * @param dstDisp the destination displacement 23383 * @param imm immediate 23384 */ 23385 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23386 public final void emitMOV_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 23387 int miStart = mi; 23388 setMachineCodes(mi++, (byte) 0x66); 23389 generateREXprefix(false, null, dstIndex, dstBase); 23390 setMachineCodes(mi++, (byte) 0xC7); 23391 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 23392 emitImm16(imm); 23393 if (lister != null) lister.RXDI(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, imm); 23394 } 23395 23396 /** 23397 * Generate a register-index--immediate MOV. That is, 23398 * <PRE> 23399 * [dstIndex<<scale + dstDisp] MOV = imm 23400 * </PRE> 23401 * 23402 * @param dstIndex the destination index register 23403 * @param dstScale the destination shift amount 23404 * @param dstDisp the destination displacement 23405 * @param imm immediate 23406 */ 23407 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23408 public final void emitMOV_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 23409 int miStart = mi; 23410 setMachineCodes(mi++, (byte) 0x66); 23411 generateREXprefix(false, null, dstIndex, null); 23412 setMachineCodes(mi++, (byte) 0xC7); 23413 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 23414 emitImm16(imm); 23415 if (lister != null) lister.RFDI(miStart, "MOV", dstIndex, dstScale, dstDisp, imm); 23416 } 23417 23418 /** 23419 * Generate an absolute MOV. That is, 23420 * <PRE> 23421 * [dstDisp] MOV = imm 23422 * </PRE> 23423 * 23424 * @param dstDisp the destination displacement 23425 * @param imm immediate 23426 */ 23427 public final void emitMOV_Abs_Imm_Word(Address dstDisp, int imm) { 23428 int miStart = mi; 23429 setMachineCodes(mi++, (byte) 0x66); 23430 generateREXprefix(false, null, null, null); 23431 setMachineCodes(mi++, (byte) 0xC7); 23432 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 23433 emitImm16(imm); 23434 if (lister != null) lister.RAI(miStart, "MOV", dstDisp, imm); 23435 } 23436 23437 /** 23438 * Generate a register-indirect--immediate MOV. That is, 23439 * <PRE> 23440 * [dstBase] MOV = imm 23441 * </PRE> 23442 * 23443 * @param dstBase the destination base register 23444 * @param imm immediate 23445 */ 23446 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23447 public final void emitMOV_RegInd_Imm(GPR dstBase, int imm) { 23448 int miStart = mi; 23449 // no prefix byte 23450 generateREXprefix(false, null, null, dstBase); 23451 setMachineCodes(mi++, (byte) 0xC7); 23452 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 23453 emitImm32(imm); 23454 if (lister != null) lister.RNI(miStart, "MOV", dstBase, imm); 23455 } 23456 23457 /** 23458 * Generate a register-displacement--immediate MOV. That is, 23459 * <PRE> 23460 * [dstBase + dstDisp] MOV = imm 23461 * </PRE> 23462 * 23463 * @param dstBase the destination base register 23464 * @param dstDisp the destination displacement 23465 * @param imm immediate 23466 */ 23467 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23468 public final void emitMOV_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 23469 int miStart = mi; 23470 // no prefix byte 23471 generateREXprefix(false, null, null, dstBase); 23472 setMachineCodes(mi++, (byte) 0xC7); 23473 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 23474 emitImm32(imm); 23475 if (lister != null) lister.RDI(miStart, "MOV", dstBase, dstDisp, imm); 23476 } 23477 23478 /** 23479 * Generate a register-index--immediate MOV. That is, 23480 * <PRE> 23481 * [dstBase + dstIndex<<scale + dstDisp] MOV = imm 23482 * </PRE> 23483 * 23484 * @param dstBase the destination base register 23485 * @param dstIndex the destination index register 23486 * @param dstScale the destination shift amount 23487 * @param dstDisp the destination displacement 23488 * @param imm immediate 23489 */ 23490 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23491 public final void emitMOV_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 23492 int miStart = mi; 23493 // no prefix byte 23494 generateREXprefix(false, null, dstIndex, dstBase); 23495 setMachineCodes(mi++, (byte) 0xC7); 23496 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 23497 emitImm32(imm); 23498 if (lister != null) lister.RXDI(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, imm); 23499 } 23500 23501 /** 23502 * Generate a register-index--immediate MOV. That is, 23503 * <PRE> 23504 * [dstIndex<<scale + dstDisp] MOV = imm 23505 * </PRE> 23506 * 23507 * @param dstIndex the destination index register 23508 * @param dstScale the destination shift amount 23509 * @param dstDisp the destination displacement 23510 * @param imm immediate 23511 */ 23512 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23513 public final void emitMOV_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 23514 int miStart = mi; 23515 // no prefix byte 23516 generateREXprefix(false, null, dstIndex, null); 23517 setMachineCodes(mi++, (byte) 0xC7); 23518 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 23519 emitImm32(imm); 23520 if (lister != null) lister.RFDI(miStart, "MOV", dstIndex, dstScale, dstDisp, imm); 23521 } 23522 23523 /** 23524 * Generate an absolute MOV. That is, 23525 * <PRE> 23526 * [dstDisp] MOV = imm 23527 * </PRE> 23528 * 23529 * @param dstDisp the destination displacement 23530 * @param imm immediate 23531 */ 23532 public final void emitMOV_Abs_Imm(Address dstDisp, int imm) { 23533 int miStart = mi; 23534 // no prefix byte 23535 generateREXprefix(false, null, null, null); 23536 setMachineCodes(mi++, (byte) 0xC7); 23537 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 23538 emitImm32(imm); 23539 if (lister != null) lister.RAI(miStart, "MOV", dstDisp, imm); 23540 } 23541 23542 /** 23543 * Generate a register-indirect--immediate MOV. That is, 23544 * <PRE> 23545 * [dstBase] MOV = imm 23546 * </PRE> 23547 * 23548 * @param dstBase the destination base register 23549 * @param imm immediate 23550 */ 23551 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23552 public final void emitMOV_RegInd_Imm_Quad(GPR dstBase, int imm) { 23553 int miStart = mi; 23554 // no prefix byte 23555 generateREXprefix(true, null, null, dstBase); 23556 setMachineCodes(mi++, (byte) 0xC7); 23557 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 23558 emitImm32(imm); 23559 if (lister != null) lister.RNI(miStart, "MOV", dstBase, imm); 23560 } 23561 23562 /** 23563 * Generate a register-displacement--immediate MOV. That is, 23564 * <PRE> 23565 * [dstBase + dstDisp] MOV = imm 23566 * </PRE> 23567 * 23568 * @param dstBase the destination base register 23569 * @param dstDisp the destination displacement 23570 * @param imm immediate 23571 */ 23572 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23573 public final void emitMOV_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 23574 int miStart = mi; 23575 // no prefix byte 23576 generateREXprefix(true, null, null, dstBase); 23577 setMachineCodes(mi++, (byte) 0xC7); 23578 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 23579 emitImm32(imm); 23580 if (lister != null) lister.RDI(miStart, "MOV", dstBase, dstDisp, imm); 23581 } 23582 23583 /** 23584 * Generate a register-index--immediate MOV. That is, 23585 * <PRE> 23586 * [dstBase + dstIndex<<scale + dstDisp] MOV = imm 23587 * </PRE> 23588 * 23589 * @param dstBase the destination base register 23590 * @param dstIndex the destination index register 23591 * @param dstScale the destination shift amount 23592 * @param dstDisp the destination displacement 23593 * @param imm immediate 23594 */ 23595 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23596 public final void emitMOV_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 23597 int miStart = mi; 23598 // no prefix byte 23599 generateREXprefix(true, null, dstIndex, dstBase); 23600 setMachineCodes(mi++, (byte) 0xC7); 23601 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 23602 emitImm32(imm); 23603 if (lister != null) lister.RXDI(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, imm); 23604 } 23605 23606 /** 23607 * Generate a register-index--immediate MOV. That is, 23608 * <PRE> 23609 * [dstIndex<<scale + dstDisp] MOV = imm 23610 * </PRE> 23611 * 23612 * @param dstIndex the destination index register 23613 * @param dstScale the destination shift amount 23614 * @param dstDisp the destination displacement 23615 * @param imm immediate 23616 */ 23617 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23618 public final void emitMOV_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 23619 int miStart = mi; 23620 // no prefix byte 23621 generateREXprefix(true, null, dstIndex, null); 23622 setMachineCodes(mi++, (byte) 0xC7); 23623 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 23624 emitImm32(imm); 23625 if (lister != null) lister.RFDI(miStart, "MOV", dstIndex, dstScale, dstDisp, imm); 23626 } 23627 23628 /** 23629 * Generate an absolute MOV. That is, 23630 * <PRE> 23631 * [dstDisp] MOV = imm 23632 * </PRE> 23633 * 23634 * @param dstDisp the destination displacement 23635 * @param imm immediate 23636 */ 23637 public final void emitMOV_Abs_Imm_Quad(Address dstDisp, int imm) { 23638 int miStart = mi; 23639 // no prefix byte 23640 generateREXprefix(true, null, null, null); 23641 setMachineCodes(mi++, (byte) 0xC7); 23642 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 23643 emitImm32(imm); 23644 if (lister != null) lister.RAI(miStart, "MOV", dstDisp, imm); 23645 } 23646 23647 /** 23648 * Generate a move sign extended from register. That is, 23649 * <PRE> 23650 * dstReg := (byte) srcReg (sign extended) 23651 * </PRE> 23652 * 23653 * @param dstReg the destination register 23654 * @param srcReg the source register 23655 */ 23656 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23657 public final void emitMOVSX_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 23658 int miStart = mi; 23659 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 23660 generateREXprefix(false, dstReg, null, srcReg); 23661 setMachineCodes(mi++, (byte) 0x0F); 23662 setMachineCodes(mi++, (byte) 0xBE); 23663 emitRegRegOperands(srcReg, dstReg); 23664 if (lister != null) lister.RR(miStart, "MOVSX", dstReg, srcReg); 23665 } 23666 23667 /** 23668 * Generate a move sign extended from register displacement. That is, 23669 * <PRE> 23670 * dstReg := (byte) [srcBase + srcDisp] (sign extended) 23671 * </PRE> 23672 * 23673 * @param dstReg the destination register 23674 * @param srcBase the source base register 23675 * @param srcDisp the source displacement 23676 */ 23677 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23678 public final void emitMOVSX_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 23679 int miStart = mi; 23680 generateREXprefix(false, dstReg, null, srcBase); 23681 setMachineCodes(mi++, (byte) 0x0F); 23682 setMachineCodes(mi++, (byte) 0xBE); 23683 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 23684 if (lister != null) lister.RRD(miStart, "MOVSX", dstReg, srcBase, srcDisp); 23685 } 23686 23687 /** 23688 * Generate a move sign extended from register indirect. That is, 23689 * <PRE> 23690 * dstReg := (byte) [srcBase] (sign extended) 23691 * </PRE> 23692 * 23693 * @param dstReg the destination register 23694 * @param srcBase the source base register 23695 */ 23696 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23697 public final void emitMOVSX_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 23698 int miStart = mi; 23699 generateREXprefix(false, dstReg, null, srcBase); 23700 setMachineCodes(mi++, (byte) 0x0F); 23701 setMachineCodes(mi++, (byte) 0xBE); 23702 emitRegIndirectRegOperands(srcBase, dstReg); 23703 if (lister != null) lister.RRN(miStart, "MOVSX", dstReg, srcBase); 23704 } 23705 23706 /** 23707 * Generate a move sign extended from register offset. That is, 23708 * <PRE> 23709 * dstReg := (byte) [srcIndex<<srcScale + srcDisp] (sign extended) 23710 * </PRE> 23711 * 23712 * @param dstReg the destination register 23713 * @param srcIndex the source index register 23714 * @param srcScale the source scale of the index 23715 * @param srcDisp the source displacement 23716 */ 23717 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23718 public final void emitMOVSX_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 23719 int miStart = mi; 23720 generateREXprefix(false, dstReg, srcIndex, null); 23721 setMachineCodes(mi++, (byte) 0x0F); 23722 setMachineCodes(mi++, (byte) 0xBE); 23723 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 23724 if (lister != null) lister.RRFD(miStart, "MOVSX", dstReg, srcIndex, srcScale, srcDisp); 23725 } 23726 23727 /** 23728 * Generate a move sign extended from an absolute address. That is, 23729 * <PRE> 23730 * dstReg := (byte) [srcDisp] (sign extended) 23731 * </PRE> 23732 * 23733 * @param dstReg the destination register 23734 * @param srcDisp the source displacement 23735 */ 23736 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23737 public final void emitMOVSX_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 23738 int miStart = mi; 23739 generateREXprefix(false, dstReg, null, null); 23740 setMachineCodes(mi++, (byte) 0x0F); 23741 setMachineCodes(mi++, (byte) 0xBE); 23742 emitAbsRegOperands(srcDisp, dstReg); 23743 if (lister != null) lister.RRA(miStart, "MOVSX", dstReg, srcDisp); 23744 } 23745 23746 /** 23747 * Generate a move sign extended by register indexed. That is, 23748 * <PRE> 23749 * dstReg := (byte) [srcBase + srcIndex<<srcScale + srcDisp] (sign extended) 23750 * </PRE> 23751 * 23752 * @param dstReg the destination register 23753 * @param srcBase the source base register 23754 * @param srcIndex the source index register 23755 * @param srcScale the source scale of the index 23756 * @param srcDisp the source displacement 23757 */ 23758 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 23759 public final void emitMOVSX_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 23760 int miStart = mi; 23761 generateREXprefix(false, dstReg, srcIndex, srcBase); 23762 setMachineCodes(mi++, (byte) 0x0F); 23763 setMachineCodes(mi++, (byte) 0xBE); 23764 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 23765 if (lister != null) lister.RRXD(miStart, "MOVSX", dstReg, srcBase, srcIndex, srcScale, srcDisp); 23766 } 23767 23768 /** 23769 * Generate a move sign extended from register. That is, 23770 * <PRE> 23771 * dstReg := (word) srcReg (sign extended) 23772 * </PRE> 23773 * 23774 * @param dstReg the destination register 23775 * @param srcReg the source register 23776 */ 23777 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23778 public final void emitMOVSX_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 23779 int miStart = mi; 23780 generateREXprefix(false, dstReg, null, srcReg); 23781 setMachineCodes(mi++, (byte) 0x0F); 23782 setMachineCodes(mi++, (byte) 0xBF); 23783 emitRegRegOperands(srcReg, dstReg); 23784 if (lister != null) lister.RR(miStart, "MOVSX", dstReg, srcReg); 23785 } 23786 23787 /** 23788 * Generate a move sign extended from register displacement. That is, 23789 * <PRE> 23790 * dstReg := (word) [srcBase + srcDisp] (sign extended) 23791 * </PRE> 23792 * 23793 * @param dstReg the destination register 23794 * @param srcBase the source base register 23795 * @param srcDisp the source displacement 23796 */ 23797 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23798 public final void emitMOVSX_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 23799 int miStart = mi; 23800 generateREXprefix(false, dstReg, null, srcBase); 23801 setMachineCodes(mi++, (byte) 0x0F); 23802 setMachineCodes(mi++, (byte) 0xBF); 23803 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 23804 if (lister != null) lister.RRD(miStart, "MOVSX", dstReg, srcBase, srcDisp); 23805 } 23806 23807 /** 23808 * Generate a move sign extended from register indirect. That is, 23809 * <PRE> 23810 * dstReg := (word) [srcBase] (sign extended) 23811 * </PRE> 23812 * 23813 * @param dstReg the destination register 23814 * @param srcBase the source base register 23815 */ 23816 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23817 public final void emitMOVSX_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 23818 int miStart = mi; 23819 generateREXprefix(false, dstReg, null, srcBase); 23820 setMachineCodes(mi++, (byte) 0x0F); 23821 setMachineCodes(mi++, (byte) 0xBF); 23822 emitRegIndirectRegOperands(srcBase, dstReg); 23823 if (lister != null) lister.RRN(miStart, "MOVSX", dstReg, srcBase); 23824 } 23825 23826 /** 23827 * Generate a move sign extended from register offset. That is, 23828 * <PRE> 23829 * dstReg := (word) [srcIndex<<srcScale + srcDisp] (sign extended) 23830 * </PRE> 23831 * 23832 * @param dstReg the destination register 23833 * @param srcIndex the source index register 23834 * @param srcScale the source scale of the index 23835 * @param srcDisp the source displacement 23836 */ 23837 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23838 public final void emitMOVSX_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 23839 int miStart = mi; 23840 generateREXprefix(false, dstReg, srcIndex, null); 23841 setMachineCodes(mi++, (byte) 0x0F); 23842 setMachineCodes(mi++, (byte) 0xBF); 23843 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 23844 if (lister != null) lister.RRFD(miStart, "MOVSX", dstReg, srcIndex, srcScale, srcDisp); 23845 } 23846 23847 /** 23848 * Generate a move sign extended from an absolute address. That is, 23849 * <PRE> 23850 * dstReg := (word) [srcDisp] (sign extended) 23851 * </PRE> 23852 * 23853 * @param dstReg the destination register 23854 * @param srcDisp the source displacement 23855 */ 23856 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23857 public final void emitMOVSX_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 23858 int miStart = mi; 23859 generateREXprefix(false, dstReg, null, null); 23860 setMachineCodes(mi++, (byte) 0x0F); 23861 setMachineCodes(mi++, (byte) 0xBF); 23862 emitAbsRegOperands(srcDisp, dstReg); 23863 if (lister != null) lister.RRA(miStart, "MOVSX", dstReg, srcDisp); 23864 } 23865 23866 /** 23867 * Generate a move sign extended by register indexed. That is, 23868 * <PRE> 23869 * dstReg := (word) [srcBase + srcIndex<<srcScale + srcDisp] (sign extended) 23870 * </PRE> 23871 * 23872 * @param dstReg the destination register 23873 * @param srcBase the source base register 23874 * @param srcIndex the source index register 23875 * @param srcScale the source scale of the index 23876 * @param srcDisp the source displacement 23877 */ 23878 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 23879 public final void emitMOVSX_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 23880 int miStart = mi; 23881 generateREXprefix(false, dstReg, srcIndex, srcBase); 23882 setMachineCodes(mi++, (byte) 0x0F); 23883 setMachineCodes(mi++, (byte) 0xBF); 23884 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 23885 if (lister != null) lister.RRXD(miStart, "MOVSX", dstReg, srcBase, srcIndex, srcScale, srcDisp); 23886 } 23887 23888 /** 23889 * Generate a move sign extended from register. That is, 23890 * <PRE> 23891 * dstReg := (byte) srcReg (sign extended) 23892 * </PRE> 23893 * 23894 * @param dstReg the destination register 23895 * @param srcReg the source register 23896 */ 23897 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23898 public final void emitMOVSXQ_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 23899 int miStart = mi; 23900 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 23901 generateREXprefix(true, dstReg, null, srcReg); 23902 setMachineCodes(mi++, (byte) 0x0F); 23903 setMachineCodes(mi++, (byte) 0xBE); 23904 emitRegRegOperands(srcReg, dstReg); 23905 if (lister != null) lister.RR(miStart, "MOVSXQ", dstReg, srcReg); 23906 } 23907 23908 /** 23909 * Generate a move sign extended from register displacement. That is, 23910 * <PRE> 23911 * dstReg := (byte) [srcBase + srcDisp] (sign extended) 23912 * </PRE> 23913 * 23914 * @param dstReg the destination register 23915 * @param srcBase the source base register 23916 * @param srcDisp the source displacement 23917 */ 23918 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23919 public final void emitMOVSXQ_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 23920 int miStart = mi; 23921 generateREXprefix(true, dstReg, null, srcBase); 23922 setMachineCodes(mi++, (byte) 0x0F); 23923 setMachineCodes(mi++, (byte) 0xBE); 23924 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 23925 if (lister != null) lister.RRD(miStart, "MOVSXQ", dstReg, srcBase, srcDisp); 23926 } 23927 23928 /** 23929 * Generate a move sign extended from register indirect. That is, 23930 * <PRE> 23931 * dstReg := (byte) [srcBase] (sign extended) 23932 * </PRE> 23933 * 23934 * @param dstReg the destination register 23935 * @param srcBase the source base register 23936 */ 23937 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23938 public final void emitMOVSXQ_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 23939 int miStart = mi; 23940 generateREXprefix(true, dstReg, null, srcBase); 23941 setMachineCodes(mi++, (byte) 0x0F); 23942 setMachineCodes(mi++, (byte) 0xBE); 23943 emitRegIndirectRegOperands(srcBase, dstReg); 23944 if (lister != null) lister.RRN(miStart, "MOVSXQ", dstReg, srcBase); 23945 } 23946 23947 /** 23948 * Generate a move sign extended from register offset. That is, 23949 * <PRE> 23950 * dstReg := (byte) [srcIndex<<srcScale + srcDisp] (sign extended) 23951 * </PRE> 23952 * 23953 * @param dstReg the destination register 23954 * @param srcIndex the source index register 23955 * @param srcScale the source scale of the index 23956 * @param srcDisp the source displacement 23957 */ 23958 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 23959 public final void emitMOVSXQ_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 23960 int miStart = mi; 23961 generateREXprefix(true, dstReg, srcIndex, null); 23962 setMachineCodes(mi++, (byte) 0x0F); 23963 setMachineCodes(mi++, (byte) 0xBE); 23964 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 23965 if (lister != null) lister.RRFD(miStart, "MOVSXQ", dstReg, srcIndex, srcScale, srcDisp); 23966 } 23967 23968 /** 23969 * Generate a move sign extended from an absolute address. That is, 23970 * <PRE> 23971 * dstReg := (byte) [srcDisp] (sign extended) 23972 * </PRE> 23973 * 23974 * @param dstReg the destination register 23975 * @param srcDisp the source displacement 23976 */ 23977 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 23978 public final void emitMOVSXQ_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 23979 int miStart = mi; 23980 generateREXprefix(true, dstReg, null, null); 23981 setMachineCodes(mi++, (byte) 0x0F); 23982 setMachineCodes(mi++, (byte) 0xBE); 23983 emitAbsRegOperands(srcDisp, dstReg); 23984 if (lister != null) lister.RRA(miStart, "MOVSXQ", dstReg, srcDisp); 23985 } 23986 23987 /** 23988 * Generate a move sign extended by register indexed. That is, 23989 * <PRE> 23990 * dstReg := (byte) [srcBase + srcIndex<<srcScale + srcDisp] (sign extended) 23991 * </PRE> 23992 * 23993 * @param dstReg the destination register 23994 * @param srcBase the source base register 23995 * @param srcIndex the source index register 23996 * @param srcScale the source scale of the index 23997 * @param srcDisp the source displacement 23998 */ 23999 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 24000 public final void emitMOVSXQ_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 24001 int miStart = mi; 24002 generateREXprefix(true, dstReg, srcIndex, srcBase); 24003 setMachineCodes(mi++, (byte) 0x0F); 24004 setMachineCodes(mi++, (byte) 0xBE); 24005 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 24006 if (lister != null) lister.RRXD(miStart, "MOVSXQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 24007 } 24008 24009 /** 24010 * Generate a move sign extended from register. That is, 24011 * <PRE> 24012 * dstReg := (word) srcReg (sign extended) 24013 * </PRE> 24014 * 24015 * @param dstReg the destination register 24016 * @param srcReg the source register 24017 */ 24018 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24019 public final void emitMOVSXQ_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 24020 int miStart = mi; 24021 generateREXprefix(true, dstReg, null, srcReg); 24022 setMachineCodes(mi++, (byte) 0x0F); 24023 setMachineCodes(mi++, (byte) 0xBF); 24024 emitRegRegOperands(srcReg, dstReg); 24025 if (lister != null) lister.RR(miStart, "MOVSXQ", dstReg, srcReg); 24026 } 24027 24028 /** 24029 * Generate a move sign extended from register displacement. That is, 24030 * <PRE> 24031 * dstReg := (word) [srcBase + srcDisp] (sign extended) 24032 * </PRE> 24033 * 24034 * @param dstReg the destination register 24035 * @param srcBase the source base register 24036 * @param srcDisp the source displacement 24037 */ 24038 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24039 public final void emitMOVSXQ_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 24040 int miStart = mi; 24041 generateREXprefix(true, dstReg, null, srcBase); 24042 setMachineCodes(mi++, (byte) 0x0F); 24043 setMachineCodes(mi++, (byte) 0xBF); 24044 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 24045 if (lister != null) lister.RRD(miStart, "MOVSXQ", dstReg, srcBase, srcDisp); 24046 } 24047 24048 /** 24049 * Generate a move sign extended from register indirect. That is, 24050 * <PRE> 24051 * dstReg := (word) [srcBase] (sign extended) 24052 * </PRE> 24053 * 24054 * @param dstReg the destination register 24055 * @param srcBase the source base register 24056 */ 24057 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24058 public final void emitMOVSXQ_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 24059 int miStart = mi; 24060 generateREXprefix(true, dstReg, null, srcBase); 24061 setMachineCodes(mi++, (byte) 0x0F); 24062 setMachineCodes(mi++, (byte) 0xBF); 24063 emitRegIndirectRegOperands(srcBase, dstReg); 24064 if (lister != null) lister.RRN(miStart, "MOVSXQ", dstReg, srcBase); 24065 } 24066 24067 /** 24068 * Generate a move sign extended from register offset. That is, 24069 * <PRE> 24070 * dstReg := (word) [srcIndex<<srcScale + srcDisp] (sign extended) 24071 * </PRE> 24072 * 24073 * @param dstReg the destination register 24074 * @param srcIndex the source index register 24075 * @param srcScale the source scale of the index 24076 * @param srcDisp the source displacement 24077 */ 24078 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24079 public final void emitMOVSXQ_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 24080 int miStart = mi; 24081 generateREXprefix(true, dstReg, srcIndex, null); 24082 setMachineCodes(mi++, (byte) 0x0F); 24083 setMachineCodes(mi++, (byte) 0xBF); 24084 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 24085 if (lister != null) lister.RRFD(miStart, "MOVSXQ", dstReg, srcIndex, srcScale, srcDisp); 24086 } 24087 24088 /** 24089 * Generate a move sign extended from an absolute address. That is, 24090 * <PRE> 24091 * dstReg := (word) [srcDisp] (sign extended) 24092 * </PRE> 24093 * 24094 * @param dstReg the destination register 24095 * @param srcDisp the source displacement 24096 */ 24097 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 24098 public final void emitMOVSXQ_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 24099 int miStart = mi; 24100 generateREXprefix(true, dstReg, null, null); 24101 setMachineCodes(mi++, (byte) 0x0F); 24102 setMachineCodes(mi++, (byte) 0xBF); 24103 emitAbsRegOperands(srcDisp, dstReg); 24104 if (lister != null) lister.RRA(miStart, "MOVSXQ", dstReg, srcDisp); 24105 } 24106 24107 /** 24108 * Generate a move sign extended by register indexed. That is, 24109 * <PRE> 24110 * dstReg := (word) [srcBase + srcIndex<<srcScale + srcDisp] (sign extended) 24111 * </PRE> 24112 * 24113 * @param dstReg the destination register 24114 * @param srcBase the source base register 24115 * @param srcIndex the source index register 24116 * @param srcScale the source scale of the index 24117 * @param srcDisp the source displacement 24118 */ 24119 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 24120 public final void emitMOVSXQ_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 24121 int miStart = mi; 24122 generateREXprefix(true, dstReg, srcIndex, srcBase); 24123 setMachineCodes(mi++, (byte) 0x0F); 24124 setMachineCodes(mi++, (byte) 0xBF); 24125 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 24126 if (lister != null) lister.RRXD(miStart, "MOVSXQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 24127 } 24128 24129 /** 24130 * Generate a move zero extended from register. That is, 24131 * <PRE> 24132 * dstReg := (byte) srcReg (zero extended) 24133 * </PRE> 24134 * 24135 * @param dstReg the destination register 24136 * @param srcReg the source register 24137 */ 24138 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24139 public final void emitMOVZX_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 24140 int miStart = mi; 24141 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 24142 generateREXprefix(false, dstReg, null, srcReg); 24143 setMachineCodes(mi++, (byte) 0x0F); 24144 setMachineCodes(mi++, (byte) 0xB6); 24145 emitRegRegOperands(srcReg, dstReg); 24146 if (lister != null) lister.RR(miStart, "MOVZX", dstReg, srcReg); 24147 } 24148 24149 /** 24150 * Generate a move zero extended from register displacement. That is, 24151 * <PRE> 24152 * dstReg := (byte) [srcBase + srcDisp] (zero extended) 24153 * </PRE> 24154 * 24155 * @param dstReg the destination register 24156 * @param srcBase the source base register 24157 * @param srcDisp the source displacement 24158 */ 24159 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24160 public final void emitMOVZX_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 24161 int miStart = mi; 24162 generateREXprefix(false, dstReg, null, srcBase); 24163 setMachineCodes(mi++, (byte) 0x0F); 24164 setMachineCodes(mi++, (byte) 0xB6); 24165 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 24166 if (lister != null) lister.RRD(miStart, "MOVZX", dstReg, srcBase, srcDisp); 24167 } 24168 24169 /** 24170 * Generate a move zero extended from register indirect. That is, 24171 * <PRE> 24172 * dstReg := (byte) [srcBase] (zero extended) 24173 * </PRE> 24174 * 24175 * @param dstReg the destination register 24176 * @param srcBase the source base register 24177 */ 24178 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24179 public final void emitMOVZX_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 24180 int miStart = mi; 24181 generateREXprefix(false, dstReg, null, srcBase); 24182 setMachineCodes(mi++, (byte) 0x0F); 24183 setMachineCodes(mi++, (byte) 0xB6); 24184 emitRegIndirectRegOperands(srcBase, dstReg); 24185 if (lister != null) lister.RRN(miStart, "MOVZX", dstReg, srcBase); 24186 } 24187 24188 /** 24189 * Generate a move zero extended from register offset. That is, 24190 * <PRE> 24191 * dstReg := (byte) [srcIndex<<srcScale + srcDisp] (zero extended) 24192 * </PRE> 24193 * 24194 * @param dstReg the destination register 24195 * @param srcIndex the source index register 24196 * @param srcScale the source scale of the index 24197 * @param srcDisp the source displacement 24198 */ 24199 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24200 public final void emitMOVZX_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 24201 int miStart = mi; 24202 generateREXprefix(false, dstReg, srcIndex, null); 24203 setMachineCodes(mi++, (byte) 0x0F); 24204 setMachineCodes(mi++, (byte) 0xB6); 24205 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 24206 if (lister != null) lister.RRFD(miStart, "MOVZX", dstReg, srcIndex, srcScale, srcDisp); 24207 } 24208 24209 /** 24210 * Generate a move zero extended from an absolute address. That is, 24211 * <PRE> 24212 * dstReg := (byte) [srcDisp] (zero extended) 24213 * </PRE> 24214 * 24215 * @param dstReg the destination register 24216 * @param srcDisp the source displacement 24217 */ 24218 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 24219 public final void emitMOVZX_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 24220 int miStart = mi; 24221 generateREXprefix(false, dstReg, null, null); 24222 setMachineCodes(mi++, (byte) 0x0F); 24223 setMachineCodes(mi++, (byte) 0xB6); 24224 emitAbsRegOperands(srcDisp, dstReg); 24225 if (lister != null) lister.RRA(miStart, "MOVZX", dstReg, srcDisp); 24226 } 24227 24228 /** 24229 * Generate a move zero extended by register indexed. That is, 24230 * <PRE> 24231 * dstReg := (byte) [srcBase + srcIndex<<srcScale + srcDisp] (zero extended) 24232 * </PRE> 24233 * 24234 * @param dstReg the destination register 24235 * @param srcBase the source base register 24236 * @param srcIndex the source index register 24237 * @param srcScale the source scale of the index 24238 * @param srcDisp the source displacement 24239 */ 24240 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 24241 public final void emitMOVZX_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 24242 int miStart = mi; 24243 generateREXprefix(false, dstReg, srcIndex, srcBase); 24244 setMachineCodes(mi++, (byte) 0x0F); 24245 setMachineCodes(mi++, (byte) 0xB6); 24246 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 24247 if (lister != null) lister.RRXD(miStart, "MOVZX", dstReg, srcBase, srcIndex, srcScale, srcDisp); 24248 } 24249 24250 /** 24251 * Generate a move zero extended from register. That is, 24252 * <PRE> 24253 * dstReg := (word) srcReg (zero extended) 24254 * </PRE> 24255 * 24256 * @param dstReg the destination register 24257 * @param srcReg the source register 24258 */ 24259 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24260 public final void emitMOVZX_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 24261 int miStart = mi; 24262 generateREXprefix(false, dstReg, null, srcReg); 24263 setMachineCodes(mi++, (byte) 0x0F); 24264 setMachineCodes(mi++, (byte) 0xB7); 24265 emitRegRegOperands(srcReg, dstReg); 24266 if (lister != null) lister.RR(miStart, "MOVZX", dstReg, srcReg); 24267 } 24268 24269 /** 24270 * Generate a move zero extended from register displacement. That is, 24271 * <PRE> 24272 * dstReg := (word) [srcBase + srcDisp] (zero extended) 24273 * </PRE> 24274 * 24275 * @param dstReg the destination register 24276 * @param srcBase the source base register 24277 * @param srcDisp the source displacement 24278 */ 24279 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24280 public final void emitMOVZX_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 24281 int miStart = mi; 24282 generateREXprefix(false, dstReg, null, srcBase); 24283 setMachineCodes(mi++, (byte) 0x0F); 24284 setMachineCodes(mi++, (byte) 0xB7); 24285 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 24286 if (lister != null) lister.RRD(miStart, "MOVZX", dstReg, srcBase, srcDisp); 24287 } 24288 24289 /** 24290 * Generate a move zero extended from register indirect. That is, 24291 * <PRE> 24292 * dstReg := (word) [srcBase] (zero extended) 24293 * </PRE> 24294 * 24295 * @param dstReg the destination register 24296 * @param srcBase the source base register 24297 */ 24298 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24299 public final void emitMOVZX_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 24300 int miStart = mi; 24301 generateREXprefix(false, dstReg, null, srcBase); 24302 setMachineCodes(mi++, (byte) 0x0F); 24303 setMachineCodes(mi++, (byte) 0xB7); 24304 emitRegIndirectRegOperands(srcBase, dstReg); 24305 if (lister != null) lister.RRN(miStart, "MOVZX", dstReg, srcBase); 24306 } 24307 24308 /** 24309 * Generate a move zero extended from register offset. That is, 24310 * <PRE> 24311 * dstReg := (word) [srcIndex<<srcScale + srcDisp] (zero extended) 24312 * </PRE> 24313 * 24314 * @param dstReg the destination register 24315 * @param srcIndex the source index register 24316 * @param srcScale the source scale of the index 24317 * @param srcDisp the source displacement 24318 */ 24319 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24320 public final void emitMOVZX_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 24321 int miStart = mi; 24322 generateREXprefix(false, dstReg, srcIndex, null); 24323 setMachineCodes(mi++, (byte) 0x0F); 24324 setMachineCodes(mi++, (byte) 0xB7); 24325 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 24326 if (lister != null) lister.RRFD(miStart, "MOVZX", dstReg, srcIndex, srcScale, srcDisp); 24327 } 24328 24329 /** 24330 * Generate a move zero extended from an absolute address. That is, 24331 * <PRE> 24332 * dstReg := (word) [srcDisp] (zero extended) 24333 * </PRE> 24334 * 24335 * @param dstReg the destination register 24336 * @param srcDisp the source displacement 24337 */ 24338 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 24339 public final void emitMOVZX_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 24340 int miStart = mi; 24341 generateREXprefix(false, dstReg, null, null); 24342 setMachineCodes(mi++, (byte) 0x0F); 24343 setMachineCodes(mi++, (byte) 0xB7); 24344 emitAbsRegOperands(srcDisp, dstReg); 24345 if (lister != null) lister.RRA(miStart, "MOVZX", dstReg, srcDisp); 24346 } 24347 24348 /** 24349 * Generate a move zero extended by register indexed. That is, 24350 * <PRE> 24351 * dstReg := (word) [srcBase + srcIndex<<srcScale + srcDisp] (zero extended) 24352 * </PRE> 24353 * 24354 * @param dstReg the destination register 24355 * @param srcBase the source base register 24356 * @param srcIndex the source index register 24357 * @param srcScale the source scale of the index 24358 * @param srcDisp the source displacement 24359 */ 24360 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 24361 public final void emitMOVZX_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 24362 int miStart = mi; 24363 generateREXprefix(false, dstReg, srcIndex, srcBase); 24364 setMachineCodes(mi++, (byte) 0x0F); 24365 setMachineCodes(mi++, (byte) 0xB7); 24366 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 24367 if (lister != null) lister.RRXD(miStart, "MOVZX", dstReg, srcBase, srcIndex, srcScale, srcDisp); 24368 } 24369 24370 /** 24371 * Generate a move zero extended from register. That is, 24372 * <PRE> 24373 * dstReg := (byte) srcReg (zero extended) 24374 * </PRE> 24375 * 24376 * @param dstReg the destination register 24377 * @param srcReg the source register 24378 */ 24379 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24380 public final void emitMOVZXQ_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 24381 int miStart = mi; 24382 if (VM.VerifyAssertions) VM._assert(srcReg.isValidAs8bitRegister()); 24383 generateREXprefix(true, dstReg, null, srcReg); 24384 setMachineCodes(mi++, (byte) 0x0F); 24385 setMachineCodes(mi++, (byte) 0xB6); 24386 emitRegRegOperands(srcReg, dstReg); 24387 if (lister != null) lister.RR(miStart, "MOVZXQ", dstReg, srcReg); 24388 } 24389 24390 /** 24391 * Generate a move zero extended from register displacement. That is, 24392 * <PRE> 24393 * dstReg := (byte) [srcBase + srcDisp] (zero extended) 24394 * </PRE> 24395 * 24396 * @param dstReg the destination register 24397 * @param srcBase the source base register 24398 * @param srcDisp the source displacement 24399 */ 24400 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24401 public final void emitMOVZXQ_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) { 24402 int miStart = mi; 24403 generateREXprefix(true, dstReg, null, srcBase); 24404 setMachineCodes(mi++, (byte) 0x0F); 24405 setMachineCodes(mi++, (byte) 0xB6); 24406 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 24407 if (lister != null) lister.RRD(miStart, "MOVZXQ", dstReg, srcBase, srcDisp); 24408 } 24409 24410 /** 24411 * Generate a move zero extended from register indirect. That is, 24412 * <PRE> 24413 * dstReg := (byte) [srcBase] (zero extended) 24414 * </PRE> 24415 * 24416 * @param dstReg the destination register 24417 * @param srcBase the source base register 24418 */ 24419 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24420 public final void emitMOVZXQ_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) { 24421 int miStart = mi; 24422 generateREXprefix(true, dstReg, null, srcBase); 24423 setMachineCodes(mi++, (byte) 0x0F); 24424 setMachineCodes(mi++, (byte) 0xB6); 24425 emitRegIndirectRegOperands(srcBase, dstReg); 24426 if (lister != null) lister.RRN(miStart, "MOVZXQ", dstReg, srcBase); 24427 } 24428 24429 /** 24430 * Generate a move zero extended from register offset. That is, 24431 * <PRE> 24432 * dstReg := (byte) [srcIndex<<srcScale + srcDisp] (zero extended) 24433 * </PRE> 24434 * 24435 * @param dstReg the destination register 24436 * @param srcIndex the source index register 24437 * @param srcScale the source scale of the index 24438 * @param srcDisp the source displacement 24439 */ 24440 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24441 public final void emitMOVZXQ_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 24442 int miStart = mi; 24443 generateREXprefix(true, dstReg, srcIndex, null); 24444 setMachineCodes(mi++, (byte) 0x0F); 24445 setMachineCodes(mi++, (byte) 0xB6); 24446 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 24447 if (lister != null) lister.RRFD(miStart, "MOVZXQ", dstReg, srcIndex, srcScale, srcDisp); 24448 } 24449 24450 /** 24451 * Generate a move zero extended from an absolute address. That is, 24452 * <PRE> 24453 * dstReg := (byte) [srcDisp] (zero extended) 24454 * </PRE> 24455 * 24456 * @param dstReg the destination register 24457 * @param srcDisp the source displacement 24458 */ 24459 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 24460 public final void emitMOVZXQ_Reg_Abs_Byte(GPR dstReg, Address srcDisp) { 24461 int miStart = mi; 24462 generateREXprefix(true, dstReg, null, null); 24463 setMachineCodes(mi++, (byte) 0x0F); 24464 setMachineCodes(mi++, (byte) 0xB6); 24465 emitAbsRegOperands(srcDisp, dstReg); 24466 if (lister != null) lister.RRA(miStart, "MOVZXQ", dstReg, srcDisp); 24467 } 24468 24469 /** 24470 * Generate a move zero extended by register indexed. That is, 24471 * <PRE> 24472 * dstReg := (byte) [srcBase + srcIndex<<srcScale + srcDisp] (zero extended) 24473 * </PRE> 24474 * 24475 * @param dstReg the destination register 24476 * @param srcBase the source base register 24477 * @param srcIndex the source index register 24478 * @param srcScale the source scale of the index 24479 * @param srcDisp the source displacement 24480 */ 24481 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 24482 public final void emitMOVZXQ_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 24483 int miStart = mi; 24484 generateREXprefix(true, dstReg, srcIndex, srcBase); 24485 setMachineCodes(mi++, (byte) 0x0F); 24486 setMachineCodes(mi++, (byte) 0xB6); 24487 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 24488 if (lister != null) lister.RRXD(miStart, "MOVZXQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 24489 } 24490 24491 /** 24492 * Generate a move zero extended from register. That is, 24493 * <PRE> 24494 * dstReg := (word) srcReg (zero extended) 24495 * </PRE> 24496 * 24497 * @param dstReg the destination register 24498 * @param srcReg the source register 24499 */ 24500 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24501 public final void emitMOVZXQ_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 24502 int miStart = mi; 24503 generateREXprefix(true, dstReg, null, srcReg); 24504 setMachineCodes(mi++, (byte) 0x0F); 24505 setMachineCodes(mi++, (byte) 0xB7); 24506 emitRegRegOperands(srcReg, dstReg); 24507 if (lister != null) lister.RR(miStart, "MOVZXQ", dstReg, srcReg); 24508 } 24509 24510 /** 24511 * Generate a move zero extended from register displacement. That is, 24512 * <PRE> 24513 * dstReg := (word) [srcBase + srcDisp] (zero extended) 24514 * </PRE> 24515 * 24516 * @param dstReg the destination register 24517 * @param srcBase the source base register 24518 * @param srcDisp the source displacement 24519 */ 24520 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24521 public final void emitMOVZXQ_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) { 24522 int miStart = mi; 24523 generateREXprefix(true, dstReg, null, srcBase); 24524 setMachineCodes(mi++, (byte) 0x0F); 24525 setMachineCodes(mi++, (byte) 0xB7); 24526 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 24527 if (lister != null) lister.RRD(miStart, "MOVZXQ", dstReg, srcBase, srcDisp); 24528 } 24529 24530 /** 24531 * Generate a move zero extended from register indirect. That is, 24532 * <PRE> 24533 * dstReg := (word) [srcBase] (zero extended) 24534 * </PRE> 24535 * 24536 * @param dstReg the destination register 24537 * @param srcBase the source base register 24538 */ 24539 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24540 public final void emitMOVZXQ_Reg_RegInd_Word(GPR dstReg, GPR srcBase) { 24541 int miStart = mi; 24542 generateREXprefix(true, dstReg, null, srcBase); 24543 setMachineCodes(mi++, (byte) 0x0F); 24544 setMachineCodes(mi++, (byte) 0xB7); 24545 emitRegIndirectRegOperands(srcBase, dstReg); 24546 if (lister != null) lister.RRN(miStart, "MOVZXQ", dstReg, srcBase); 24547 } 24548 24549 /** 24550 * Generate a move zero extended from register offset. That is, 24551 * <PRE> 24552 * dstReg := (word) [srcIndex<<srcScale + srcDisp] (zero extended) 24553 * </PRE> 24554 * 24555 * @param dstReg the destination register 24556 * @param srcIndex the source index register 24557 * @param srcScale the source scale of the index 24558 * @param srcDisp the source displacement 24559 */ 24560 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24561 public final void emitMOVZXQ_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 24562 int miStart = mi; 24563 generateREXprefix(true, dstReg, srcIndex, null); 24564 setMachineCodes(mi++, (byte) 0x0F); 24565 setMachineCodes(mi++, (byte) 0xB7); 24566 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 24567 if (lister != null) lister.RRFD(miStart, "MOVZXQ", dstReg, srcIndex, srcScale, srcDisp); 24568 } 24569 24570 /** 24571 * Generate a move zero extended from an absolute address. That is, 24572 * <PRE> 24573 * dstReg := (word) [srcDisp] (zero extended) 24574 * </PRE> 24575 * 24576 * @param dstReg the destination register 24577 * @param srcDisp the source displacement 24578 */ 24579 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 24580 public final void emitMOVZXQ_Reg_Abs_Word(GPR dstReg, Address srcDisp) { 24581 int miStart = mi; 24582 generateREXprefix(true, dstReg, null, null); 24583 setMachineCodes(mi++, (byte) 0x0F); 24584 setMachineCodes(mi++, (byte) 0xB7); 24585 emitAbsRegOperands(srcDisp, dstReg); 24586 if (lister != null) lister.RRA(miStart, "MOVZXQ", dstReg, srcDisp); 24587 } 24588 24589 /** 24590 * Generate a move zero extended by register indexed. That is, 24591 * <PRE> 24592 * dstReg := (word) [srcBase + srcIndex<<srcScale + srcDisp] (zero extended) 24593 * </PRE> 24594 * 24595 * @param dstReg the destination register 24596 * @param srcBase the source base register 24597 * @param srcIndex the source index register 24598 * @param srcScale the source scale of the index 24599 * @param srcDisp the source displacement 24600 */ 24601 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 24602 public final void emitMOVZXQ_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 24603 int miStart = mi; 24604 generateREXprefix(true, dstReg, srcIndex, srcBase); 24605 setMachineCodes(mi++, (byte) 0x0F); 24606 setMachineCodes(mi++, (byte) 0xB7); 24607 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 24608 if (lister != null) lister.RRXD(miStart, "MOVZXQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 24609 } 24610 24611 /** 24612 * Generate a register(indirect)--register CMPXCHG. That is, 24613 * <PRE> 24614 * [dstBase] <->= srcReg 24615 * </PRE> 24616 * 24617 * @param dstBase the destination base 24618 * @param srcReg the source register 24619 */ 24620 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24621 public final void emitCMPXCHG_RegInd_Reg(GPR dstBase, GPR srcReg) { 24622 int miStart = mi; 24623 // no group 1 to 4 prefix byte 24624 generateREXprefix(false, srcReg, null, dstBase); 24625 setMachineCodes(mi++, (byte) 0x0F); 24626 setMachineCodes(mi++, (byte) 0xB1); 24627 emitRegIndirectRegOperands(dstBase, srcReg); 24628 if (lister != null) lister.RNR(miStart, "CMPXCHG", dstBase, srcReg); 24629 } 24630 24631 /** 24632 * Generate a register-offset--register CMPXCHG. That is, 24633 * <PRE> 24634 * [dstReg<<dstScale + dstDisp] <->= srcReg 24635 * </PRE> 24636 * 24637 * @param dstIndex the destination index register 24638 * @param dstScale the destination shift amount 24639 * @param dstDisp the destination displacement 24640 * @param srcReg the source register 24641 */ 24642 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 24643 public final void emitCMPXCHG_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 24644 int miStart = mi; 24645 // no group 1 to 4 prefix byte 24646 generateREXprefix(false, srcReg, dstIndex, null); 24647 setMachineCodes(mi++, (byte) 0x0F); 24648 setMachineCodes(mi++, (byte) 0xB1); 24649 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 24650 if (lister != null) lister.RFDR(miStart, "CMPXCHG", dstIndex, dstScale, dstDisp, srcReg); 24651 } 24652 24653 /** 24654 * Generate a absolute--register CMPXCHG. That is, 24655 * <PRE> 24656 * [dstDisp] <->= srcReg 24657 * </PRE> 24658 * 24659 * @param dstDisp the destination address 24660 * @param srcReg the source register 24661 */ 24662 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 24663 public final void emitCMPXCHG_Abs_Reg(Address dstDisp, GPR srcReg) { 24664 int miStart = mi; 24665 // no group 1 to 4 prefix byte 24666 generateREXprefix(false, srcReg, null, null); 24667 setMachineCodes(mi++, (byte) 0x0F); 24668 setMachineCodes(mi++, (byte) 0xB1); 24669 emitAbsRegOperands(dstDisp, srcReg); 24670 if (lister != null) lister.RAR(miStart, "CMPXCHG", dstDisp, srcReg); 24671 } 24672 24673 /** 24674 * Generate a register-index--register CMPXCHG. That is, 24675 * <PRE> 24676 * [dstBase + dstIndex<<dstScale + dstDisp] <->= srcReg 24677 * </PRE> 24678 * 24679 * @param dstBase the base register 24680 * @param dstIndex the destination index register 24681 * @param dstScale the destination shift amount 24682 * @param dstDisp the destination displacement 24683 * @param srcReg the source register 24684 */ 24685 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 24686 public final void emitCMPXCHG_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 24687 int miStart = mi; 24688 // no group 1 to 4 prefix byte 24689 generateREXprefix(false, srcReg, dstIndex, dstBase); 24690 setMachineCodes(mi++, (byte) 0x0F); 24691 setMachineCodes(mi++, (byte) 0xB1); 24692 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 24693 if (lister != null) lister.RXDR(miStart, "CMPXCHG", dstBase, dstIndex, dstScale, dstDisp, srcReg); 24694 } 24695 24696 /** 24697 * Generate a register-displacement--register CMPXCHG. That is, 24698 * <PRE> 24699 * [dstBase + dstDisp] <->= srcReg 24700 * </PRE> 24701 * 24702 * @param dstBase the base register 24703 * @param dstDisp the destination displacement 24704 * @param srcReg the source register 24705 */ 24706 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 24707 public final void emitCMPXCHG_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 24708 int miStart = mi; 24709 // no group 1 to 4 prefix byte 24710 generateREXprefix(false, srcReg, null, dstBase); 24711 setMachineCodes(mi++, (byte) 0x0F); 24712 setMachineCodes(mi++, (byte) 0xB1); 24713 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 24714 if (lister != null) lister.RDR(miStart, "CMPXCHG", dstBase, dstDisp, srcReg); 24715 } 24716 24717 /** 24718 * Generate a register--register CMPXCHG. That is, 24719 * <PRE> 24720 * dstReg <->= srcReg 24721 * </PRE> 24722 * 24723 * @param dstReg the destination register 24724 * @param srcReg the source register 24725 */ 24726 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24727 public final void emitCMPXCHG_Reg_Reg(GPR dstReg, GPR srcReg) { 24728 int miStart = mi; 24729 // no group 1 to 4 prefix byte 24730 generateREXprefix(false, srcReg, null, dstReg); 24731 setMachineCodes(mi++, (byte) 0x0F); 24732 setMachineCodes(mi++, (byte) 0xB1); 24733 emitRegRegOperands(dstReg, srcReg); 24734 if (lister != null) lister.RR(miStart, "CMPXCHG", dstReg, srcReg); 24735 } 24736 24737 /** 24738 * Generate a register(indirect)--register CMPXCHG. That is, 24739 * <PRE> 24740 * [dstBase] <->= (quad) srcReg 24741 * </PRE> 24742 * 24743 * @param dstBase the destination base 24744 * @param srcReg the source register 24745 */ 24746 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24747 public final void emitCMPXCHG_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 24748 int miStart = mi; 24749 // no group 1 to 4 prefix byte 24750 generateREXprefix(true, srcReg, null, dstBase); 24751 setMachineCodes(mi++, (byte) 0x0F); 24752 setMachineCodes(mi++, (byte) 0xB1); 24753 emitRegIndirectRegOperands(dstBase, srcReg); 24754 if (lister != null) lister.RNR(miStart, "CMPXCHG", dstBase, srcReg); 24755 } 24756 24757 /** 24758 * Generate a register-offset--register CMPXCHG. That is, 24759 * <PRE> 24760 * [dstReg<<dstScale + dstDisp] <->= (quad) srcReg 24761 * </PRE> 24762 * 24763 * @param dstIndex the destination index register 24764 * @param dstScale the destination shift amount 24765 * @param dstDisp the destination displacement 24766 * @param srcReg the source register 24767 */ 24768 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 24769 public final void emitCMPXCHG_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 24770 int miStart = mi; 24771 // no group 1 to 4 prefix byte 24772 generateREXprefix(true, srcReg, dstIndex, null); 24773 setMachineCodes(mi++, (byte) 0x0F); 24774 setMachineCodes(mi++, (byte) 0xB1); 24775 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 24776 if (lister != null) lister.RFDR(miStart, "CMPXCHG", dstIndex, dstScale, dstDisp, srcReg); 24777 } 24778 24779 /** 24780 * Generate a absolute--register CMPXCHG. That is, 24781 * <PRE> 24782 * [dstDisp] <->= (quad) srcReg 24783 * </PRE> 24784 * 24785 * @param dstDisp the destination address 24786 * @param srcReg the source register 24787 */ 24788 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 24789 public final void emitCMPXCHG_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 24790 int miStart = mi; 24791 // no group 1 to 4 prefix byte 24792 generateREXprefix(true, srcReg, null, null); 24793 setMachineCodes(mi++, (byte) 0x0F); 24794 setMachineCodes(mi++, (byte) 0xB1); 24795 emitAbsRegOperands(dstDisp, srcReg); 24796 if (lister != null) lister.RAR(miStart, "CMPXCHG", dstDisp, srcReg); 24797 } 24798 24799 /** 24800 * Generate a register-index--register CMPXCHG. That is, 24801 * <PRE> 24802 * [dstBase + dstIndex<<dstScale + dstDisp] <->= (quad) srcReg 24803 * </PRE> 24804 * 24805 * @param dstBase the base register 24806 * @param dstIndex the destination index register 24807 * @param dstScale the destination shift amount 24808 * @param dstDisp the destination displacement 24809 * @param srcReg the source register 24810 */ 24811 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 24812 public final void emitCMPXCHG_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 24813 int miStart = mi; 24814 // no group 1 to 4 prefix byte 24815 generateREXprefix(true, srcReg, dstIndex, dstBase); 24816 setMachineCodes(mi++, (byte) 0x0F); 24817 setMachineCodes(mi++, (byte) 0xB1); 24818 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 24819 if (lister != null) lister.RXDR(miStart, "CMPXCHG", dstBase, dstIndex, dstScale, dstDisp, srcReg); 24820 } 24821 24822 /** 24823 * Generate a register-displacement--register CMPXCHG. That is, 24824 * <PRE> 24825 * [dstBase + dstDisp] <->= (quad) srcReg 24826 * </PRE> 24827 * 24828 * @param dstBase the base register 24829 * @param dstDisp the destination displacement 24830 * @param srcReg the source register 24831 */ 24832 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 24833 public final void emitCMPXCHG_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 24834 int miStart = mi; 24835 // no group 1 to 4 prefix byte 24836 generateREXprefix(true, srcReg, null, dstBase); 24837 setMachineCodes(mi++, (byte) 0x0F); 24838 setMachineCodes(mi++, (byte) 0xB1); 24839 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 24840 if (lister != null) lister.RDR(miStart, "CMPXCHG", dstBase, dstDisp, srcReg); 24841 } 24842 24843 /** 24844 * Generate a register--register CMPXCHG. That is, 24845 * <PRE> 24846 * dstReg <->= (quad) srcReg 24847 * </PRE> 24848 * 24849 * @param dstReg the destination register 24850 * @param srcReg the source register 24851 */ 24852 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 24853 public final void emitCMPXCHG_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 24854 int miStart = mi; 24855 // no group 1 to 4 prefix byte 24856 generateREXprefix(true, srcReg, null, dstReg); 24857 setMachineCodes(mi++, (byte) 0x0F); 24858 setMachineCodes(mi++, (byte) 0xB1); 24859 emitRegRegOperands(dstReg, srcReg); 24860 if (lister != null) lister.RR(miStart, "CMPXCHG", dstReg, srcReg); 24861 } 24862 24863 /** 24864 * Generate a register--immediate ROL. That is, 24865 * <PRE> 24866 * rotate left of dstReg by imm 24867 * </PRE> 24868 * 24869 * @param dstReg the destination register 24870 * @param imm immediate 24871 */ 24872 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 24873 public final void emitROL_Reg_Imm_Byte(GPR dstReg, int imm) { 24874 int miStart = mi; 24875 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 24876 // no size prefix 24877 generateREXprefix(false, null, null, dstReg); 24878 if (imm == 1) { 24879 setMachineCodes(mi++, (byte) 0xD0); 24880 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 24881 } else { 24882 setMachineCodes(mi++, (byte) 0xC0); 24883 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 24884 emitImm8((byte)imm); 24885 } 24886 if (lister != null) lister.RI(miStart, "ROL", dstReg, imm); 24887 } 24888 24889 /** 24890 * Generate a register-indirect--immediate ROL. That is, 24891 * <PRE> 24892 * rotate left of [dstBase] by imm 24893 * </PRE> 24894 * 24895 * @param dstBase the destination base register 24896 * @param imm immediate 24897 */ 24898 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 24899 public final void emitROL_RegInd_Imm_Byte(GPR dstBase, int imm) { 24900 int miStart = mi; 24901 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 24902 // no size prefix 24903 generateREXprefix(false, null, null, dstBase); 24904 if (imm == 1) { 24905 setMachineCodes(mi++, (byte) 0xD0); 24906 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 24907 } else { 24908 setMachineCodes(mi++, (byte) 0xC0); 24909 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 24910 emitImm8((byte)imm); 24911 } 24912 if (lister != null) lister.RNI(miStart, "ROL", dstBase, imm); 24913 } 24914 24915 /** 24916 * Generate a register-displacement--immediate ROL. That is, 24917 * <PRE> 24918 * rotate left of [dstBase + dstDisp] by imm 24919 * </PRE> 24920 * 24921 * @param dstBase the destination base register 24922 * @param dstDisp the destination displacement 24923 * @param imm immediate 24924 */ 24925 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 24926 public final void emitROL_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 24927 int miStart = mi; 24928 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 24929 // no size prefix 24930 generateREXprefix(false, null, null, dstBase); 24931 if (imm == 1) { 24932 setMachineCodes(mi++, (byte) 0xD0); 24933 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 24934 } else { 24935 setMachineCodes(mi++, (byte) 0xC0); 24936 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 24937 emitImm8((byte)imm); 24938 } 24939 if (lister != null) lister.RDI(miStart, "ROL", dstBase, dstDisp, imm); 24940 } 24941 24942 /** 24943 * Generate a register-offset--immediate ROL. That is, 24944 * <PRE> 24945 * rotate left of [dstIndex<<dstScale + dstDisp] by imm 24946 * </PRE> 24947 * 24948 * @param dstIndex the destination index register 24949 * @param dstScale the destination shift amount 24950 * @param dstDisp the destination displacement 24951 * @param imm immediate 24952 */ 24953 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 24954 public final void emitROL_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 24955 int miStart = mi; 24956 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 24957 // no size prefix 24958 generateREXprefix(false, null, dstIndex, null); 24959 if (imm == 1) { 24960 setMachineCodes(mi++, (byte) 0xD0); 24961 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 24962 } else { 24963 setMachineCodes(mi++, (byte) 0xC0); 24964 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 24965 emitImm8((byte)imm); 24966 } 24967 if (lister != null) lister.RFDI(miStart, "ROL", dstIndex, dstScale, dstDisp, imm); 24968 } 24969 24970 /** 24971 * Generate a absolute--immediate ROL. That is, 24972 * <PRE> 24973 * rotate left of [dstDisp] by imm 24974 * </PRE> 24975 * 24976 * @param dstDisp the destination displacement 24977 * @param imm immediate 24978 */ 24979 public final void emitROL_Abs_Imm_Byte(Address dstDisp, int imm) { 24980 int miStart = mi; 24981 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 24982 // no size prefix 24983 generateREXprefix(false, null, null, null); 24984 if (imm == 1) { 24985 setMachineCodes(mi++, (byte) 0xD0); 24986 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 24987 } else { 24988 setMachineCodes(mi++, (byte) 0xC0); 24989 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 24990 emitImm8((byte)imm); 24991 } 24992 if (lister != null) lister.RAI(miStart, "ROL", dstDisp, imm); 24993 } 24994 24995 /** 24996 * Generate a register-index--immediate ROL. That is, 24997 * <PRE> 24998 * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 24999 * </PRE> 25000 * 25001 * @param dstBase the destination base register 25002 * @param dstIndex the destination index register 25003 * @param dstScale the destination shift amount 25004 * @param dstDisp the destination displacement 25005 * @param imm immediate 25006 */ 25007 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25008 public final void emitROL_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 25009 int miStart = mi; 25010 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25011 // no size prefix 25012 generateREXprefix(false, null, dstIndex, dstBase); 25013 if (imm == 1) { 25014 setMachineCodes(mi++, (byte) 0xD0); 25015 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25016 } else { 25017 setMachineCodes(mi++, (byte) 0xC0); 25018 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25019 emitImm8((byte)imm); 25020 } 25021 if (lister != null) lister.RXDI(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, imm); 25022 } 25023 25024 /** 25025 * Generate a register--register ROL. That is, 25026 * <PRE> 25027 * rotate left of dstReg by srcReg 25028 * </PRE> 25029 * 25030 * @param dstReg the destination register 25031 * @param srcReg must always be ECX 25032 */ 25033 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25034 public final void emitROL_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 25035 int miStart = mi; 25036 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 25037 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25038 // no size prefix 25039 generateREXprefix(false, null, null, dstReg); 25040 setMachineCodes(mi++, (byte) 0xD2); 25041 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 25042 if (lister != null) lister.RR(miStart, "ROL", dstReg, srcReg); 25043 } 25044 25045 /** 25046 * Generate a register-indirect--register ROL. That is, 25047 * <PRE> 25048 * rotate left of [dstBase] by srcReg 25049 * </PRE> 25050 * 25051 * @param dstBase the destination register 25052 * @param srcReg must always be ECX 25053 */ 25054 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25055 public final void emitROL_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 25056 int miStart = mi; 25057 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25058 // no size prefix 25059 generateREXprefix(false, null, null, dstBase); 25060 setMachineCodes(mi++, (byte) 0xD2); 25061 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 25062 if (lister != null) lister.RNR(miStart, "ROL", dstBase, srcReg); 25063 } 25064 25065 /** 25066 * Generate a register-displacement--register ROL. That is, 25067 * <PRE> 25068 * rotate left of [dstBase + dstDisp] by srcReg 25069 * </PRE> 25070 * 25071 * @param dstBase the destination base register 25072 * @param dstDisp the destination displacement 25073 * @param srcReg must always be ECX 25074 */ 25075 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 25076 public final void emitROL_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 25077 int miStart = mi; 25078 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25079 // no size prefix 25080 generateREXprefix(false, null, null, dstBase); 25081 setMachineCodes(mi++, (byte) 0xD2); 25082 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 25083 if (lister != null) lister.RDR(miStart, "ROL", dstBase, dstDisp, srcReg); 25084 } 25085 25086 /** 25087 * Generate a register-offset--register ROL. That is, 25088 * <PRE> 25089 * rotate left of [dstIndex<<dstScale + dstDisp] by srcReg 25090 * </PRE> 25091 * 25092 * @param dstIndex the destination index register 25093 * @param dstScale the destination shift amount 25094 * @param dstDisp the destination displacement 25095 * @param srcReg must always be ECX 25096 */ 25097 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 25098 public final void emitROL_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 25099 int miStart = mi; 25100 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25101 // no size prefix 25102 generateREXprefix(false, null, dstIndex, null); 25103 setMachineCodes(mi++, (byte) 0xD2); 25104 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25105 if (lister != null) lister.RFDR(miStart, "ROL", dstIndex, dstScale, dstDisp, srcReg); 25106 } 25107 25108 /** 25109 * Generate an absolute--register ROL. That is, 25110 * <PRE> 25111 * rotate left of [dstDisp] by srcReg 25112 * </PRE> 25113 * 25114 * @param dstDisp the destination displacement 25115 * @param srcReg must always be ECX 25116 */ 25117 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 25118 public final void emitROL_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 25119 int miStart = mi; 25120 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25121 // no size prefix 25122 generateREXprefix(false, null, null, null); 25123 setMachineCodes(mi++, (byte) 0xD2); 25124 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 25125 if (lister != null) lister.RAR(miStart, "ROL", dstDisp, srcReg); 25126 } 25127 25128 /** 25129 * Generate a register-displacement--register ROL. That is, 25130 * <PRE> 25131 * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 25132 * </PRE> 25133 * 25134 * @param dstBase the destination base register 25135 * @param dstIndex the destination index register 25136 * @param dstScale the destination shift amount 25137 * @param dstDisp the destination displacement 25138 * @param srcReg must always be ECX 25139 */ 25140 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 25141 public final void emitROL_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 25142 int miStart = mi; 25143 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25144 // no size prefix 25145 generateREXprefix(false, null, dstIndex, dstBase); 25146 setMachineCodes(mi++, (byte) 0xD2); 25147 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25148 if (lister != null) lister.RXDR(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 25149 } 25150 25151 /** 25152 * Generate a register--immediate ROL. That is, 25153 * <PRE> 25154 * rotate left of dstReg by imm 25155 * </PRE> 25156 * 25157 * @param dstReg the destination register 25158 * @param imm immediate 25159 */ 25160 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25161 public final void emitROL_Reg_Imm_Word(GPR dstReg, int imm) { 25162 int miStart = mi; 25163 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25164 setMachineCodes(mi++, (byte) 0x66); 25165 generateREXprefix(false, null, null, dstReg); 25166 if (imm == 1) { 25167 setMachineCodes(mi++, (byte) 0xD1); 25168 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 25169 } else { 25170 setMachineCodes(mi++, (byte) 0xC1); 25171 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 25172 emitImm8((byte)imm); 25173 } 25174 if (lister != null) lister.RI(miStart, "ROL", dstReg, imm); 25175 } 25176 25177 /** 25178 * Generate a register-indirect--immediate ROL. That is, 25179 * <PRE> 25180 * rotate left of [dstBase] by imm 25181 * </PRE> 25182 * 25183 * @param dstBase the destination base register 25184 * @param imm immediate 25185 */ 25186 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25187 public final void emitROL_RegInd_Imm_Word(GPR dstBase, int imm) { 25188 int miStart = mi; 25189 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25190 setMachineCodes(mi++, (byte) 0x66); 25191 generateREXprefix(false, null, null, dstBase); 25192 if (imm == 1) { 25193 setMachineCodes(mi++, (byte) 0xD1); 25194 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 25195 } else { 25196 setMachineCodes(mi++, (byte) 0xC1); 25197 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 25198 emitImm8((byte)imm); 25199 } 25200 if (lister != null) lister.RNI(miStart, "ROL", dstBase, imm); 25201 } 25202 25203 /** 25204 * Generate a register-displacement--immediate ROL. That is, 25205 * <PRE> 25206 * rotate left of [dstBase + dstDisp] by imm 25207 * </PRE> 25208 * 25209 * @param dstBase the destination base register 25210 * @param dstDisp the destination displacement 25211 * @param imm immediate 25212 */ 25213 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25214 public final void emitROL_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 25215 int miStart = mi; 25216 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25217 setMachineCodes(mi++, (byte) 0x66); 25218 generateREXprefix(false, null, null, dstBase); 25219 if (imm == 1) { 25220 setMachineCodes(mi++, (byte) 0xD1); 25221 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 25222 } else { 25223 setMachineCodes(mi++, (byte) 0xC1); 25224 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 25225 emitImm8((byte)imm); 25226 } 25227 if (lister != null) lister.RDI(miStart, "ROL", dstBase, dstDisp, imm); 25228 } 25229 25230 /** 25231 * Generate a register-offset--immediate ROL. That is, 25232 * <PRE> 25233 * rotate left of [dstIndex<<dstScale + dstDisp] by imm 25234 * </PRE> 25235 * 25236 * @param dstIndex the destination index register 25237 * @param dstScale the destination shift amount 25238 * @param dstDisp the destination displacement 25239 * @param imm immediate 25240 */ 25241 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25242 public final void emitROL_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 25243 int miStart = mi; 25244 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25245 setMachineCodes(mi++, (byte) 0x66); 25246 generateREXprefix(false, null, dstIndex, null); 25247 if (imm == 1) { 25248 setMachineCodes(mi++, (byte) 0xD1); 25249 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25250 } else { 25251 setMachineCodes(mi++, (byte) 0xC1); 25252 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25253 emitImm8((byte)imm); 25254 } 25255 if (lister != null) lister.RFDI(miStart, "ROL", dstIndex, dstScale, dstDisp, imm); 25256 } 25257 25258 /** 25259 * Generate a absolute--immediate ROL. That is, 25260 * <PRE> 25261 * rotate left of [dstDisp] by imm 25262 * </PRE> 25263 * 25264 * @param dstDisp the destination displacement 25265 * @param imm immediate 25266 */ 25267 public final void emitROL_Abs_Imm_Word(Address dstDisp, int imm) { 25268 int miStart = mi; 25269 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25270 setMachineCodes(mi++, (byte) 0x66); 25271 generateREXprefix(false, null, null, null); 25272 if (imm == 1) { 25273 setMachineCodes(mi++, (byte) 0xD1); 25274 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 25275 } else { 25276 setMachineCodes(mi++, (byte) 0xC1); 25277 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 25278 emitImm8((byte)imm); 25279 } 25280 if (lister != null) lister.RAI(miStart, "ROL", dstDisp, imm); 25281 } 25282 25283 /** 25284 * Generate a register-index--immediate ROL. That is, 25285 * <PRE> 25286 * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 25287 * </PRE> 25288 * 25289 * @param dstBase the destination base register 25290 * @param dstIndex the destination index register 25291 * @param dstScale the destination shift amount 25292 * @param dstDisp the destination displacement 25293 * @param imm immediate 25294 */ 25295 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25296 public final void emitROL_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 25297 int miStart = mi; 25298 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25299 setMachineCodes(mi++, (byte) 0x66); 25300 generateREXprefix(false, null, dstIndex, dstBase); 25301 if (imm == 1) { 25302 setMachineCodes(mi++, (byte) 0xD1); 25303 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25304 } else { 25305 setMachineCodes(mi++, (byte) 0xC1); 25306 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25307 emitImm8((byte)imm); 25308 } 25309 if (lister != null) lister.RXDI(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, imm); 25310 } 25311 25312 /** 25313 * Generate a register--register ROL. That is, 25314 * <PRE> 25315 * rotate left of dstReg by srcReg 25316 * </PRE> 25317 * 25318 * @param dstReg the destination register 25319 * @param srcReg must always be ECX 25320 */ 25321 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25322 public final void emitROL_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 25323 int miStart = mi; 25324 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25325 setMachineCodes(mi++, (byte) 0x66); 25326 generateREXprefix(false, null, null, dstReg); 25327 setMachineCodes(mi++, (byte) 0xD3); 25328 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 25329 if (lister != null) lister.RR(miStart, "ROL", dstReg, srcReg); 25330 } 25331 25332 /** 25333 * Generate a register-indirect--register ROL. That is, 25334 * <PRE> 25335 * rotate left of [dstBase] by srcReg 25336 * </PRE> 25337 * 25338 * @param dstBase the destination register 25339 * @param srcReg must always be ECX 25340 */ 25341 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25342 public final void emitROL_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 25343 int miStart = mi; 25344 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25345 setMachineCodes(mi++, (byte) 0x66); 25346 generateREXprefix(false, null, null, dstBase); 25347 setMachineCodes(mi++, (byte) 0xD3); 25348 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 25349 if (lister != null) lister.RNR(miStart, "ROL", dstBase, srcReg); 25350 } 25351 25352 /** 25353 * Generate a register-displacement--register ROL. That is, 25354 * <PRE> 25355 * rotate left of [dstBase + dstDisp] by srcReg 25356 * </PRE> 25357 * 25358 * @param dstBase the destination base register 25359 * @param dstDisp the destination displacement 25360 * @param srcReg must always be ECX 25361 */ 25362 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 25363 public final void emitROL_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 25364 int miStart = mi; 25365 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25366 setMachineCodes(mi++, (byte) 0x66); 25367 generateREXprefix(false, null, null, dstBase); 25368 setMachineCodes(mi++, (byte) 0xD3); 25369 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 25370 if (lister != null) lister.RDR(miStart, "ROL", dstBase, dstDisp, srcReg); 25371 } 25372 25373 /** 25374 * Generate a register-offset--register ROL. That is, 25375 * <PRE> 25376 * rotate left of [dstIndex<<dstScale + dstDisp] by srcReg 25377 * </PRE> 25378 * 25379 * @param dstIndex the destination index register 25380 * @param dstScale the destination shift amount 25381 * @param dstDisp the destination displacement 25382 * @param srcReg must always be ECX 25383 */ 25384 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 25385 public final void emitROL_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 25386 int miStart = mi; 25387 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25388 setMachineCodes(mi++, (byte) 0x66); 25389 generateREXprefix(false, null, dstIndex, null); 25390 setMachineCodes(mi++, (byte) 0xD3); 25391 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25392 if (lister != null) lister.RFDR(miStart, "ROL", dstIndex, dstScale, dstDisp, srcReg); 25393 } 25394 25395 /** 25396 * Generate an absolute--register ROL. That is, 25397 * <PRE> 25398 * rotate left of [dstDisp] by srcReg 25399 * </PRE> 25400 * 25401 * @param dstDisp the destination displacement 25402 * @param srcReg must always be ECX 25403 */ 25404 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 25405 public final void emitROL_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 25406 int miStart = mi; 25407 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25408 setMachineCodes(mi++, (byte) 0x66); 25409 generateREXprefix(false, null, null, null); 25410 setMachineCodes(mi++, (byte) 0xD3); 25411 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 25412 if (lister != null) lister.RAR(miStart, "ROL", dstDisp, srcReg); 25413 } 25414 25415 /** 25416 * Generate a register-displacement--register ROL. That is, 25417 * <PRE> 25418 * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 25419 * </PRE> 25420 * 25421 * @param dstBase the destination base register 25422 * @param dstIndex the destination index register 25423 * @param dstScale the destination shift amount 25424 * @param dstDisp the destination displacement 25425 * @param srcReg must always be ECX 25426 */ 25427 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 25428 public final void emitROL_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 25429 int miStart = mi; 25430 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25431 setMachineCodes(mi++, (byte) 0x66); 25432 generateREXprefix(false, null, dstIndex, dstBase); 25433 setMachineCodes(mi++, (byte) 0xD3); 25434 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25435 if (lister != null) lister.RXDR(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 25436 } 25437 25438 /** 25439 * Generate a register--immediate ROL. That is, 25440 * <PRE> 25441 * rotate left of dstReg by imm 25442 * </PRE> 25443 * 25444 * @param dstReg the destination register 25445 * @param imm immediate 25446 */ 25447 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25448 public final void emitROL_Reg_Imm(GPR dstReg, int imm) { 25449 int miStart = mi; 25450 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25451 // no size prefix 25452 generateREXprefix(false, null, null, dstReg); 25453 if (imm == 1) { 25454 setMachineCodes(mi++, (byte) 0xD1); 25455 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 25456 } else { 25457 setMachineCodes(mi++, (byte) 0xC1); 25458 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 25459 emitImm8((byte)imm); 25460 } 25461 if (lister != null) lister.RI(miStart, "ROL", dstReg, imm); 25462 } 25463 25464 /** 25465 * Generate a register-indirect--immediate ROL. That is, 25466 * <PRE> 25467 * rotate left of [dstBase] by imm 25468 * </PRE> 25469 * 25470 * @param dstBase the destination base register 25471 * @param imm immediate 25472 */ 25473 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25474 public final void emitROL_RegInd_Imm(GPR dstBase, int imm) { 25475 int miStart = mi; 25476 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25477 // no size prefix 25478 generateREXprefix(false, null, null, dstBase); 25479 if (imm == 1) { 25480 setMachineCodes(mi++, (byte) 0xD1); 25481 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 25482 } else { 25483 setMachineCodes(mi++, (byte) 0xC1); 25484 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 25485 emitImm8((byte)imm); 25486 } 25487 if (lister != null) lister.RNI(miStart, "ROL", dstBase, imm); 25488 } 25489 25490 /** 25491 * Generate a register-displacement--immediate ROL. That is, 25492 * <PRE> 25493 * rotate left of [dstBase + dstDisp] by imm 25494 * </PRE> 25495 * 25496 * @param dstBase the destination base register 25497 * @param dstDisp the destination displacement 25498 * @param imm immediate 25499 */ 25500 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25501 public final void emitROL_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 25502 int miStart = mi; 25503 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25504 // no size prefix 25505 generateREXprefix(false, null, null, dstBase); 25506 if (imm == 1) { 25507 setMachineCodes(mi++, (byte) 0xD1); 25508 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 25509 } else { 25510 setMachineCodes(mi++, (byte) 0xC1); 25511 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 25512 emitImm8((byte)imm); 25513 } 25514 if (lister != null) lister.RDI(miStart, "ROL", dstBase, dstDisp, imm); 25515 } 25516 25517 /** 25518 * Generate a register-offset--immediate ROL. That is, 25519 * <PRE> 25520 * rotate left of [dstIndex<<dstScale + dstDisp] by imm 25521 * </PRE> 25522 * 25523 * @param dstIndex the destination index register 25524 * @param dstScale the destination shift amount 25525 * @param dstDisp the destination displacement 25526 * @param imm immediate 25527 */ 25528 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25529 public final void emitROL_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 25530 int miStart = mi; 25531 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25532 // no size prefix 25533 generateREXprefix(false, null, dstIndex, null); 25534 if (imm == 1) { 25535 setMachineCodes(mi++, (byte) 0xD1); 25536 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25537 } else { 25538 setMachineCodes(mi++, (byte) 0xC1); 25539 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25540 emitImm8((byte)imm); 25541 } 25542 if (lister != null) lister.RFDI(miStart, "ROL", dstIndex, dstScale, dstDisp, imm); 25543 } 25544 25545 /** 25546 * Generate a absolute--immediate ROL. That is, 25547 * <PRE> 25548 * rotate left of [dstDisp] by imm 25549 * </PRE> 25550 * 25551 * @param dstDisp the destination displacement 25552 * @param imm immediate 25553 */ 25554 public final void emitROL_Abs_Imm(Address dstDisp, int imm) { 25555 int miStart = mi; 25556 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25557 // no size prefix 25558 generateREXprefix(false, null, null, null); 25559 if (imm == 1) { 25560 setMachineCodes(mi++, (byte) 0xD1); 25561 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 25562 } else { 25563 setMachineCodes(mi++, (byte) 0xC1); 25564 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 25565 emitImm8((byte)imm); 25566 } 25567 if (lister != null) lister.RAI(miStart, "ROL", dstDisp, imm); 25568 } 25569 25570 /** 25571 * Generate a register-index--immediate ROL. That is, 25572 * <PRE> 25573 * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 25574 * </PRE> 25575 * 25576 * @param dstBase the destination base register 25577 * @param dstIndex the destination index register 25578 * @param dstScale the destination shift amount 25579 * @param dstDisp the destination displacement 25580 * @param imm immediate 25581 */ 25582 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25583 public final void emitROL_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 25584 int miStart = mi; 25585 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25586 // no size prefix 25587 generateREXprefix(false, null, dstIndex, dstBase); 25588 if (imm == 1) { 25589 setMachineCodes(mi++, (byte) 0xD1); 25590 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25591 } else { 25592 setMachineCodes(mi++, (byte) 0xC1); 25593 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25594 emitImm8((byte)imm); 25595 } 25596 if (lister != null) lister.RXDI(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, imm); 25597 } 25598 25599 /** 25600 * Generate a register--register ROL. That is, 25601 * <PRE> 25602 * rotate left of dstReg by srcReg 25603 * </PRE> 25604 * 25605 * @param dstReg the destination register 25606 * @param srcReg must always be ECX 25607 */ 25608 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25609 public final void emitROL_Reg_Reg(GPR dstReg, GPR srcReg) { 25610 int miStart = mi; 25611 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25612 // no size prefix 25613 generateREXprefix(false, null, null, dstReg); 25614 setMachineCodes(mi++, (byte) 0xD3); 25615 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 25616 if (lister != null) lister.RR(miStart, "ROL", dstReg, srcReg); 25617 } 25618 25619 /** 25620 * Generate a register-indirect--register ROL. That is, 25621 * <PRE> 25622 * rotate left of [dstBase] by srcReg 25623 * </PRE> 25624 * 25625 * @param dstBase the destination register 25626 * @param srcReg must always be ECX 25627 */ 25628 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25629 public final void emitROL_RegInd_Reg(GPR dstBase, GPR srcReg) { 25630 int miStart = mi; 25631 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25632 // no size prefix 25633 generateREXprefix(false, null, null, dstBase); 25634 setMachineCodes(mi++, (byte) 0xD3); 25635 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 25636 if (lister != null) lister.RNR(miStart, "ROL", dstBase, srcReg); 25637 } 25638 25639 /** 25640 * Generate a register-displacement--register ROL. That is, 25641 * <PRE> 25642 * rotate left of [dstBase + dstDisp] by srcReg 25643 * </PRE> 25644 * 25645 * @param dstBase the destination base register 25646 * @param dstDisp the destination displacement 25647 * @param srcReg must always be ECX 25648 */ 25649 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 25650 public final void emitROL_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 25651 int miStart = mi; 25652 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25653 // no size prefix 25654 generateREXprefix(false, null, null, dstBase); 25655 setMachineCodes(mi++, (byte) 0xD3); 25656 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 25657 if (lister != null) lister.RDR(miStart, "ROL", dstBase, dstDisp, srcReg); 25658 } 25659 25660 /** 25661 * Generate a register-offset--register ROL. That is, 25662 * <PRE> 25663 * rotate left of [dstIndex<<dstScale + dstDisp] by srcReg 25664 * </PRE> 25665 * 25666 * @param dstIndex the destination index register 25667 * @param dstScale the destination shift amount 25668 * @param dstDisp the destination displacement 25669 * @param srcReg must always be ECX 25670 */ 25671 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 25672 public final void emitROL_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 25673 int miStart = mi; 25674 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25675 // no size prefix 25676 generateREXprefix(false, null, dstIndex, null); 25677 setMachineCodes(mi++, (byte) 0xD3); 25678 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25679 if (lister != null) lister.RFDR(miStart, "ROL", dstIndex, dstScale, dstDisp, srcReg); 25680 } 25681 25682 /** 25683 * Generate an absolute--register ROL. That is, 25684 * <PRE> 25685 * rotate left of [dstDisp] by srcReg 25686 * </PRE> 25687 * 25688 * @param dstDisp the destination displacement 25689 * @param srcReg must always be ECX 25690 */ 25691 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 25692 public final void emitROL_Abs_Reg(Address dstDisp, GPR srcReg) { 25693 int miStart = mi; 25694 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25695 // no size prefix 25696 generateREXprefix(false, null, null, null); 25697 setMachineCodes(mi++, (byte) 0xD3); 25698 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 25699 if (lister != null) lister.RAR(miStart, "ROL", dstDisp, srcReg); 25700 } 25701 25702 /** 25703 * Generate a register-displacement--register ROL. That is, 25704 * <PRE> 25705 * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 25706 * </PRE> 25707 * 25708 * @param dstBase the destination base register 25709 * @param dstIndex the destination index register 25710 * @param dstScale the destination shift amount 25711 * @param dstDisp the destination displacement 25712 * @param srcReg must always be ECX 25713 */ 25714 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 25715 public final void emitROL_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 25716 int miStart = mi; 25717 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25718 // no size prefix 25719 generateREXprefix(false, null, dstIndex, dstBase); 25720 setMachineCodes(mi++, (byte) 0xD3); 25721 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25722 if (lister != null) lister.RXDR(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 25723 } 25724 25725 /** 25726 * Generate a register--immediate ROL. That is, 25727 * <PRE> 25728 * rotate left of dstReg by imm 25729 * </PRE> 25730 * 25731 * @param dstReg the destination register 25732 * @param imm immediate 25733 */ 25734 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25735 public final void emitROL_Reg_Imm_Quad(GPR dstReg, int imm) { 25736 int miStart = mi; 25737 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25738 // no size prefix 25739 generateREXprefix(true, null, null, dstReg); 25740 if (imm == 1) { 25741 setMachineCodes(mi++, (byte) 0xD1); 25742 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 25743 } else { 25744 setMachineCodes(mi++, (byte) 0xC1); 25745 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 25746 emitImm8((byte)imm); 25747 } 25748 if (lister != null) lister.RI(miStart, "ROL", dstReg, imm); 25749 } 25750 25751 /** 25752 * Generate a register-indirect--immediate ROL. That is, 25753 * <PRE> 25754 * rotate left of [dstBase] by imm 25755 * </PRE> 25756 * 25757 * @param dstBase the destination base register 25758 * @param imm immediate 25759 */ 25760 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25761 public final void emitROL_RegInd_Imm_Quad(GPR dstBase, int imm) { 25762 int miStart = mi; 25763 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25764 // no size prefix 25765 generateREXprefix(true, null, null, dstBase); 25766 if (imm == 1) { 25767 setMachineCodes(mi++, (byte) 0xD1); 25768 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 25769 } else { 25770 setMachineCodes(mi++, (byte) 0xC1); 25771 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 25772 emitImm8((byte)imm); 25773 } 25774 if (lister != null) lister.RNI(miStart, "ROL", dstBase, imm); 25775 } 25776 25777 /** 25778 * Generate a register-displacement--immediate ROL. That is, 25779 * <PRE> 25780 * rotate left of [dstBase + dstDisp] by imm 25781 * </PRE> 25782 * 25783 * @param dstBase the destination base register 25784 * @param dstDisp the destination displacement 25785 * @param imm immediate 25786 */ 25787 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25788 public final void emitROL_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 25789 int miStart = mi; 25790 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25791 // no size prefix 25792 generateREXprefix(true, null, null, dstBase); 25793 if (imm == 1) { 25794 setMachineCodes(mi++, (byte) 0xD1); 25795 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 25796 } else { 25797 setMachineCodes(mi++, (byte) 0xC1); 25798 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 25799 emitImm8((byte)imm); 25800 } 25801 if (lister != null) lister.RDI(miStart, "ROL", dstBase, dstDisp, imm); 25802 } 25803 25804 /** 25805 * Generate a register-offset--immediate ROL. That is, 25806 * <PRE> 25807 * rotate left of [dstIndex<<dstScale + dstDisp] by imm 25808 * </PRE> 25809 * 25810 * @param dstIndex the destination index register 25811 * @param dstScale the destination shift amount 25812 * @param dstDisp the destination displacement 25813 * @param imm immediate 25814 */ 25815 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 25816 public final void emitROL_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 25817 int miStart = mi; 25818 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25819 // no size prefix 25820 generateREXprefix(true, null, dstIndex, null); 25821 if (imm == 1) { 25822 setMachineCodes(mi++, (byte) 0xD1); 25823 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25824 } else { 25825 setMachineCodes(mi++, (byte) 0xC1); 25826 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25827 emitImm8((byte)imm); 25828 } 25829 if (lister != null) lister.RFDI(miStart, "ROL", dstIndex, dstScale, dstDisp, imm); 25830 } 25831 25832 /** 25833 * Generate a absolute--immediate ROL. That is, 25834 * <PRE> 25835 * rotate left of [dstDisp] by imm 25836 * </PRE> 25837 * 25838 * @param dstDisp the destination displacement 25839 * @param imm immediate 25840 */ 25841 public final void emitROL_Abs_Imm_Quad(Address dstDisp, int imm) { 25842 int miStart = mi; 25843 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25844 // no size prefix 25845 generateREXprefix(true, null, null, null); 25846 if (imm == 1) { 25847 setMachineCodes(mi++, (byte) 0xD1); 25848 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 25849 } else { 25850 setMachineCodes(mi++, (byte) 0xC1); 25851 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 25852 emitImm8((byte)imm); 25853 } 25854 if (lister != null) lister.RAI(miStart, "ROL", dstDisp, imm); 25855 } 25856 25857 /** 25858 * Generate a register-index--immediate ROL. That is, 25859 * <PRE> 25860 * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 25861 * </PRE> 25862 * 25863 * @param dstBase the destination base register 25864 * @param dstIndex the destination index register 25865 * @param dstScale the destination shift amount 25866 * @param dstDisp the destination displacement 25867 * @param imm immediate 25868 */ 25869 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25870 public final void emitROL_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 25871 int miStart = mi; 25872 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 25873 // no size prefix 25874 generateREXprefix(true, null, dstIndex, dstBase); 25875 if (imm == 1) { 25876 setMachineCodes(mi++, (byte) 0xD1); 25877 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25878 } else { 25879 setMachineCodes(mi++, (byte) 0xC1); 25880 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25881 emitImm8((byte)imm); 25882 } 25883 if (lister != null) lister.RXDI(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, imm); 25884 } 25885 25886 /** 25887 * Generate a register--register ROL. That is, 25888 * <PRE> 25889 * rotate left of dstReg by srcReg 25890 * </PRE> 25891 * 25892 * @param dstReg the destination register 25893 * @param srcReg must always be ECX 25894 */ 25895 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25896 public final void emitROL_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 25897 int miStart = mi; 25898 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25899 // no size prefix 25900 generateREXprefix(true, null, null, dstReg); 25901 setMachineCodes(mi++, (byte) 0xD3); 25902 emitRegRegOperands(dstReg, GPR.getForOpcode(0x0)); 25903 if (lister != null) lister.RR(miStart, "ROL", dstReg, srcReg); 25904 } 25905 25906 /** 25907 * Generate a register-indirect--register ROL. That is, 25908 * <PRE> 25909 * rotate left of [dstBase] by srcReg 25910 * </PRE> 25911 * 25912 * @param dstBase the destination register 25913 * @param srcReg must always be ECX 25914 */ 25915 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 25916 public final void emitROL_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 25917 int miStart = mi; 25918 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25919 // no size prefix 25920 generateREXprefix(true, null, null, dstBase); 25921 setMachineCodes(mi++, (byte) 0xD3); 25922 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0)); 25923 if (lister != null) lister.RNR(miStart, "ROL", dstBase, srcReg); 25924 } 25925 25926 /** 25927 * Generate a register-displacement--register ROL. That is, 25928 * <PRE> 25929 * rotate left of [dstBase + dstDisp] by srcReg 25930 * </PRE> 25931 * 25932 * @param dstBase the destination base register 25933 * @param dstDisp the destination displacement 25934 * @param srcReg must always be ECX 25935 */ 25936 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 25937 public final void emitROL_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 25938 int miStart = mi; 25939 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25940 // no size prefix 25941 generateREXprefix(true, null, null, dstBase); 25942 setMachineCodes(mi++, (byte) 0xD3); 25943 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0)); 25944 if (lister != null) lister.RDR(miStart, "ROL", dstBase, dstDisp, srcReg); 25945 } 25946 25947 /** 25948 * Generate a register-offset--register ROL. That is, 25949 * <PRE> 25950 * rotate left of [dstIndex<<dstScale + dstDisp] by srcReg 25951 * </PRE> 25952 * 25953 * @param dstIndex the destination index register 25954 * @param dstScale the destination shift amount 25955 * @param dstDisp the destination displacement 25956 * @param srcReg must always be ECX 25957 */ 25958 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 25959 public final void emitROL_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 25960 int miStart = mi; 25961 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25962 // no size prefix 25963 generateREXprefix(true, null, dstIndex, null); 25964 setMachineCodes(mi++, (byte) 0xD3); 25965 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 25966 if (lister != null) lister.RFDR(miStart, "ROL", dstIndex, dstScale, dstDisp, srcReg); 25967 } 25968 25969 /** 25970 * Generate an absolute--register ROL. That is, 25971 * <PRE> 25972 * rotate left of [dstDisp] by srcReg 25973 * </PRE> 25974 * 25975 * @param dstDisp the destination displacement 25976 * @param srcReg must always be ECX 25977 */ 25978 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 25979 public final void emitROL_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 25980 int miStart = mi; 25981 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 25982 // no size prefix 25983 generateREXprefix(true, null, null, null); 25984 setMachineCodes(mi++, (byte) 0xD3); 25985 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0)); 25986 if (lister != null) lister.RAR(miStart, "ROL", dstDisp, srcReg); 25987 } 25988 25989 /** 25990 * Generate a register-displacement--register ROL. That is, 25991 * <PRE> 25992 * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 25993 * </PRE> 25994 * 25995 * @param dstBase the destination base register 25996 * @param dstIndex the destination index register 25997 * @param dstScale the destination shift amount 25998 * @param dstDisp the destination displacement 25999 * @param srcReg must always be ECX 26000 */ 26001 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 26002 public final void emitROL_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 26003 int miStart = mi; 26004 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26005 // no size prefix 26006 generateREXprefix(true, null, dstIndex, dstBase); 26007 setMachineCodes(mi++, (byte) 0xD3); 26008 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0)); 26009 if (lister != null) lister.RXDR(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 26010 } 26011 26012 /** 26013 * Generate a register--immediate ROR. That is, 26014 * <PRE> 26015 * rotate right of dstReg by imm 26016 * </PRE> 26017 * 26018 * @param dstReg the destination register 26019 * @param imm immediate 26020 */ 26021 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26022 public final void emitROR_Reg_Imm_Byte(GPR dstReg, int imm) { 26023 int miStart = mi; 26024 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26025 // no size prefix 26026 generateREXprefix(false, null, null, dstReg); 26027 if (imm == 1) { 26028 setMachineCodes(mi++, (byte) 0xD0); 26029 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26030 } else { 26031 setMachineCodes(mi++, (byte) 0xC0); 26032 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26033 emitImm8((byte)imm); 26034 } 26035 if (lister != null) lister.RI(miStart, "ROR", dstReg, imm); 26036 } 26037 26038 /** 26039 * Generate a register-indirect--immediate ROR. That is, 26040 * <PRE> 26041 * rotate right of [dstBase] by imm 26042 * </PRE> 26043 * 26044 * @param dstBase the destination base register 26045 * @param imm immediate 26046 */ 26047 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26048 public final void emitROR_RegInd_Imm_Byte(GPR dstBase, int imm) { 26049 int miStart = mi; 26050 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26051 // no size prefix 26052 generateREXprefix(false, null, null, dstBase); 26053 if (imm == 1) { 26054 setMachineCodes(mi++, (byte) 0xD0); 26055 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26056 } else { 26057 setMachineCodes(mi++, (byte) 0xC0); 26058 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26059 emitImm8((byte)imm); 26060 } 26061 if (lister != null) lister.RNI(miStart, "ROR", dstBase, imm); 26062 } 26063 26064 /** 26065 * Generate a register-displacement--immediate ROR. That is, 26066 * <PRE> 26067 * rotate right of [dstBase + dstDisp] by imm 26068 * </PRE> 26069 * 26070 * @param dstBase the destination base register 26071 * @param dstDisp the destination displacement 26072 * @param imm immediate 26073 */ 26074 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26075 public final void emitROR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 26076 int miStart = mi; 26077 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26078 // no size prefix 26079 generateREXprefix(false, null, null, dstBase); 26080 if (imm == 1) { 26081 setMachineCodes(mi++, (byte) 0xD0); 26082 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26083 } else { 26084 setMachineCodes(mi++, (byte) 0xC0); 26085 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26086 emitImm8((byte)imm); 26087 } 26088 if (lister != null) lister.RDI(miStart, "ROR", dstBase, dstDisp, imm); 26089 } 26090 26091 /** 26092 * Generate a register-offset--immediate ROR. That is, 26093 * <PRE> 26094 * rotate right of [dstIndex<<dstScale + dstDisp] by imm 26095 * </PRE> 26096 * 26097 * @param dstIndex the destination index register 26098 * @param dstScale the destination shift amount 26099 * @param dstDisp the destination displacement 26100 * @param imm immediate 26101 */ 26102 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26103 public final void emitROR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 26104 int miStart = mi; 26105 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26106 // no size prefix 26107 generateREXprefix(false, null, dstIndex, null); 26108 if (imm == 1) { 26109 setMachineCodes(mi++, (byte) 0xD0); 26110 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26111 } else { 26112 setMachineCodes(mi++, (byte) 0xC0); 26113 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26114 emitImm8((byte)imm); 26115 } 26116 if (lister != null) lister.RFDI(miStart, "ROR", dstIndex, dstScale, dstDisp, imm); 26117 } 26118 26119 /** 26120 * Generate a absolute--immediate ROR. That is, 26121 * <PRE> 26122 * rotate right of [dstDisp] by imm 26123 * </PRE> 26124 * 26125 * @param dstDisp the destination displacement 26126 * @param imm immediate 26127 */ 26128 public final void emitROR_Abs_Imm_Byte(Address dstDisp, int imm) { 26129 int miStart = mi; 26130 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26131 // no size prefix 26132 generateREXprefix(false, null, null, null); 26133 if (imm == 1) { 26134 setMachineCodes(mi++, (byte) 0xD0); 26135 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 26136 } else { 26137 setMachineCodes(mi++, (byte) 0xC0); 26138 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 26139 emitImm8((byte)imm); 26140 } 26141 if (lister != null) lister.RAI(miStart, "ROR", dstDisp, imm); 26142 } 26143 26144 /** 26145 * Generate a register-index--immediate ROR. That is, 26146 * <PRE> 26147 * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 26148 * </PRE> 26149 * 26150 * @param dstBase the destination base register 26151 * @param dstIndex the destination index register 26152 * @param dstScale the destination shift amount 26153 * @param dstDisp the destination displacement 26154 * @param imm immediate 26155 */ 26156 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 26157 public final void emitROR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 26158 int miStart = mi; 26159 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26160 // no size prefix 26161 generateREXprefix(false, null, dstIndex, dstBase); 26162 if (imm == 1) { 26163 setMachineCodes(mi++, (byte) 0xD0); 26164 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26165 } else { 26166 setMachineCodes(mi++, (byte) 0xC0); 26167 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26168 emitImm8((byte)imm); 26169 } 26170 if (lister != null) lister.RXDI(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, imm); 26171 } 26172 26173 /** 26174 * Generate a register--register ROR. That is, 26175 * <PRE> 26176 * rotate right of dstReg by srcReg 26177 * </PRE> 26178 * 26179 * @param dstReg the destination register 26180 * @param srcReg must always be ECX 26181 */ 26182 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 26183 public final void emitROR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 26184 int miStart = mi; 26185 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 26186 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26187 // no size prefix 26188 generateREXprefix(false, null, null, dstReg); 26189 setMachineCodes(mi++, (byte) 0xD2); 26190 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26191 if (lister != null) lister.RR(miStart, "ROR", dstReg, srcReg); 26192 } 26193 26194 /** 26195 * Generate a register-indirect--register ROR. That is, 26196 * <PRE> 26197 * rotate right of [dstBase] by srcReg 26198 * </PRE> 26199 * 26200 * @param dstBase the destination register 26201 * @param srcReg must always be ECX 26202 */ 26203 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 26204 public final void emitROR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 26205 int miStart = mi; 26206 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26207 // no size prefix 26208 generateREXprefix(false, null, null, dstBase); 26209 setMachineCodes(mi++, (byte) 0xD2); 26210 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26211 if (lister != null) lister.RNR(miStart, "ROR", dstBase, srcReg); 26212 } 26213 26214 /** 26215 * Generate a register-displacement--register ROR. That is, 26216 * <PRE> 26217 * rotate right of [dstBase + dstDisp] by srcReg 26218 * </PRE> 26219 * 26220 * @param dstBase the destination base register 26221 * @param dstDisp the destination displacement 26222 * @param srcReg must always be ECX 26223 */ 26224 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 26225 public final void emitROR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 26226 int miStart = mi; 26227 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26228 // no size prefix 26229 generateREXprefix(false, null, null, dstBase); 26230 setMachineCodes(mi++, (byte) 0xD2); 26231 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26232 if (lister != null) lister.RDR(miStart, "ROR", dstBase, dstDisp, srcReg); 26233 } 26234 26235 /** 26236 * Generate a register-offset--register ROR. That is, 26237 * <PRE> 26238 * rotate right of [dstIndex<<dstScale + dstDisp] by srcReg 26239 * </PRE> 26240 * 26241 * @param dstIndex the destination index register 26242 * @param dstScale the destination shift amount 26243 * @param dstDisp the destination displacement 26244 * @param srcReg must always be ECX 26245 */ 26246 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 26247 public final void emitROR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 26248 int miStart = mi; 26249 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26250 // no size prefix 26251 generateREXprefix(false, null, dstIndex, null); 26252 setMachineCodes(mi++, (byte) 0xD2); 26253 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26254 if (lister != null) lister.RFDR(miStart, "ROR", dstIndex, dstScale, dstDisp, srcReg); 26255 } 26256 26257 /** 26258 * Generate an absolute--register ROR. That is, 26259 * <PRE> 26260 * rotate right of [dstDisp] by srcReg 26261 * </PRE> 26262 * 26263 * @param dstDisp the destination displacement 26264 * @param srcReg must always be ECX 26265 */ 26266 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 26267 public final void emitROR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 26268 int miStart = mi; 26269 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26270 // no size prefix 26271 generateREXprefix(false, null, null, null); 26272 setMachineCodes(mi++, (byte) 0xD2); 26273 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 26274 if (lister != null) lister.RAR(miStart, "ROR", dstDisp, srcReg); 26275 } 26276 26277 /** 26278 * Generate a register-displacement--register ROR. That is, 26279 * <PRE> 26280 * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 26281 * </PRE> 26282 * 26283 * @param dstBase the destination base register 26284 * @param dstIndex the destination index register 26285 * @param dstScale the destination shift amount 26286 * @param dstDisp the destination displacement 26287 * @param srcReg must always be ECX 26288 */ 26289 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 26290 public final void emitROR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 26291 int miStart = mi; 26292 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26293 // no size prefix 26294 generateREXprefix(false, null, dstIndex, dstBase); 26295 setMachineCodes(mi++, (byte) 0xD2); 26296 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26297 if (lister != null) lister.RXDR(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 26298 } 26299 26300 /** 26301 * Generate a register--immediate ROR. That is, 26302 * <PRE> 26303 * rotate right of dstReg by imm 26304 * </PRE> 26305 * 26306 * @param dstReg the destination register 26307 * @param imm immediate 26308 */ 26309 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26310 public final void emitROR_Reg_Imm_Word(GPR dstReg, int imm) { 26311 int miStart = mi; 26312 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26313 setMachineCodes(mi++, (byte) 0x66); 26314 generateREXprefix(false, null, null, dstReg); 26315 if (imm == 1) { 26316 setMachineCodes(mi++, (byte) 0xD1); 26317 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26318 } else { 26319 setMachineCodes(mi++, (byte) 0xC1); 26320 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26321 emitImm8((byte)imm); 26322 } 26323 if (lister != null) lister.RI(miStart, "ROR", dstReg, imm); 26324 } 26325 26326 /** 26327 * Generate a register-indirect--immediate ROR. That is, 26328 * <PRE> 26329 * rotate right of [dstBase] by imm 26330 * </PRE> 26331 * 26332 * @param dstBase the destination base register 26333 * @param imm immediate 26334 */ 26335 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26336 public final void emitROR_RegInd_Imm_Word(GPR dstBase, int imm) { 26337 int miStart = mi; 26338 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26339 setMachineCodes(mi++, (byte) 0x66); 26340 generateREXprefix(false, null, null, dstBase); 26341 if (imm == 1) { 26342 setMachineCodes(mi++, (byte) 0xD1); 26343 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26344 } else { 26345 setMachineCodes(mi++, (byte) 0xC1); 26346 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26347 emitImm8((byte)imm); 26348 } 26349 if (lister != null) lister.RNI(miStart, "ROR", dstBase, imm); 26350 } 26351 26352 /** 26353 * Generate a register-displacement--immediate ROR. That is, 26354 * <PRE> 26355 * rotate right of [dstBase + dstDisp] by imm 26356 * </PRE> 26357 * 26358 * @param dstBase the destination base register 26359 * @param dstDisp the destination displacement 26360 * @param imm immediate 26361 */ 26362 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26363 public final void emitROR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 26364 int miStart = mi; 26365 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26366 setMachineCodes(mi++, (byte) 0x66); 26367 generateREXprefix(false, null, null, dstBase); 26368 if (imm == 1) { 26369 setMachineCodes(mi++, (byte) 0xD1); 26370 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26371 } else { 26372 setMachineCodes(mi++, (byte) 0xC1); 26373 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26374 emitImm8((byte)imm); 26375 } 26376 if (lister != null) lister.RDI(miStart, "ROR", dstBase, dstDisp, imm); 26377 } 26378 26379 /** 26380 * Generate a register-offset--immediate ROR. That is, 26381 * <PRE> 26382 * rotate right of [dstIndex<<dstScale + dstDisp] by imm 26383 * </PRE> 26384 * 26385 * @param dstIndex the destination index register 26386 * @param dstScale the destination shift amount 26387 * @param dstDisp the destination displacement 26388 * @param imm immediate 26389 */ 26390 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26391 public final void emitROR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 26392 int miStart = mi; 26393 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26394 setMachineCodes(mi++, (byte) 0x66); 26395 generateREXprefix(false, null, dstIndex, null); 26396 if (imm == 1) { 26397 setMachineCodes(mi++, (byte) 0xD1); 26398 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26399 } else { 26400 setMachineCodes(mi++, (byte) 0xC1); 26401 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26402 emitImm8((byte)imm); 26403 } 26404 if (lister != null) lister.RFDI(miStart, "ROR", dstIndex, dstScale, dstDisp, imm); 26405 } 26406 26407 /** 26408 * Generate a absolute--immediate ROR. That is, 26409 * <PRE> 26410 * rotate right of [dstDisp] by imm 26411 * </PRE> 26412 * 26413 * @param dstDisp the destination displacement 26414 * @param imm immediate 26415 */ 26416 public final void emitROR_Abs_Imm_Word(Address dstDisp, int imm) { 26417 int miStart = mi; 26418 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26419 setMachineCodes(mi++, (byte) 0x66); 26420 generateREXprefix(false, null, null, null); 26421 if (imm == 1) { 26422 setMachineCodes(mi++, (byte) 0xD1); 26423 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 26424 } else { 26425 setMachineCodes(mi++, (byte) 0xC1); 26426 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 26427 emitImm8((byte)imm); 26428 } 26429 if (lister != null) lister.RAI(miStart, "ROR", dstDisp, imm); 26430 } 26431 26432 /** 26433 * Generate a register-index--immediate ROR. That is, 26434 * <PRE> 26435 * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 26436 * </PRE> 26437 * 26438 * @param dstBase the destination base register 26439 * @param dstIndex the destination index register 26440 * @param dstScale the destination shift amount 26441 * @param dstDisp the destination displacement 26442 * @param imm immediate 26443 */ 26444 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 26445 public final void emitROR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 26446 int miStart = mi; 26447 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26448 setMachineCodes(mi++, (byte) 0x66); 26449 generateREXprefix(false, null, dstIndex, dstBase); 26450 if (imm == 1) { 26451 setMachineCodes(mi++, (byte) 0xD1); 26452 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26453 } else { 26454 setMachineCodes(mi++, (byte) 0xC1); 26455 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26456 emitImm8((byte)imm); 26457 } 26458 if (lister != null) lister.RXDI(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, imm); 26459 } 26460 26461 /** 26462 * Generate a register--register ROR. That is, 26463 * <PRE> 26464 * rotate right of dstReg by srcReg 26465 * </PRE> 26466 * 26467 * @param dstReg the destination register 26468 * @param srcReg must always be ECX 26469 */ 26470 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 26471 public final void emitROR_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 26472 int miStart = mi; 26473 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26474 setMachineCodes(mi++, (byte) 0x66); 26475 generateREXprefix(false, null, null, dstReg); 26476 setMachineCodes(mi++, (byte) 0xD3); 26477 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26478 if (lister != null) lister.RR(miStart, "ROR", dstReg, srcReg); 26479 } 26480 26481 /** 26482 * Generate a register-indirect--register ROR. That is, 26483 * <PRE> 26484 * rotate right of [dstBase] by srcReg 26485 * </PRE> 26486 * 26487 * @param dstBase the destination register 26488 * @param srcReg must always be ECX 26489 */ 26490 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 26491 public final void emitROR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 26492 int miStart = mi; 26493 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26494 setMachineCodes(mi++, (byte) 0x66); 26495 generateREXprefix(false, null, null, dstBase); 26496 setMachineCodes(mi++, (byte) 0xD3); 26497 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26498 if (lister != null) lister.RNR(miStart, "ROR", dstBase, srcReg); 26499 } 26500 26501 /** 26502 * Generate a register-displacement--register ROR. That is, 26503 * <PRE> 26504 * rotate right of [dstBase + dstDisp] by srcReg 26505 * </PRE> 26506 * 26507 * @param dstBase the destination base register 26508 * @param dstDisp the destination displacement 26509 * @param srcReg must always be ECX 26510 */ 26511 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 26512 public final void emitROR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 26513 int miStart = mi; 26514 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26515 setMachineCodes(mi++, (byte) 0x66); 26516 generateREXprefix(false, null, null, dstBase); 26517 setMachineCodes(mi++, (byte) 0xD3); 26518 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26519 if (lister != null) lister.RDR(miStart, "ROR", dstBase, dstDisp, srcReg); 26520 } 26521 26522 /** 26523 * Generate a register-offset--register ROR. That is, 26524 * <PRE> 26525 * rotate right of [dstIndex<<dstScale + dstDisp] by srcReg 26526 * </PRE> 26527 * 26528 * @param dstIndex the destination index register 26529 * @param dstScale the destination shift amount 26530 * @param dstDisp the destination displacement 26531 * @param srcReg must always be ECX 26532 */ 26533 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 26534 public final void emitROR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 26535 int miStart = mi; 26536 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26537 setMachineCodes(mi++, (byte) 0x66); 26538 generateREXprefix(false, null, dstIndex, null); 26539 setMachineCodes(mi++, (byte) 0xD3); 26540 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26541 if (lister != null) lister.RFDR(miStart, "ROR", dstIndex, dstScale, dstDisp, srcReg); 26542 } 26543 26544 /** 26545 * Generate an absolute--register ROR. That is, 26546 * <PRE> 26547 * rotate right of [dstDisp] by srcReg 26548 * </PRE> 26549 * 26550 * @param dstDisp the destination displacement 26551 * @param srcReg must always be ECX 26552 */ 26553 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 26554 public final void emitROR_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 26555 int miStart = mi; 26556 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26557 setMachineCodes(mi++, (byte) 0x66); 26558 generateREXprefix(false, null, null, null); 26559 setMachineCodes(mi++, (byte) 0xD3); 26560 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 26561 if (lister != null) lister.RAR(miStart, "ROR", dstDisp, srcReg); 26562 } 26563 26564 /** 26565 * Generate a register-displacement--register ROR. That is, 26566 * <PRE> 26567 * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 26568 * </PRE> 26569 * 26570 * @param dstBase the destination base register 26571 * @param dstIndex the destination index register 26572 * @param dstScale the destination shift amount 26573 * @param dstDisp the destination displacement 26574 * @param srcReg must always be ECX 26575 */ 26576 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 26577 public final void emitROR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 26578 int miStart = mi; 26579 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26580 setMachineCodes(mi++, (byte) 0x66); 26581 generateREXprefix(false, null, dstIndex, dstBase); 26582 setMachineCodes(mi++, (byte) 0xD3); 26583 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26584 if (lister != null) lister.RXDR(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 26585 } 26586 26587 /** 26588 * Generate a register--immediate ROR. That is, 26589 * <PRE> 26590 * rotate right of dstReg by imm 26591 * </PRE> 26592 * 26593 * @param dstReg the destination register 26594 * @param imm immediate 26595 */ 26596 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26597 public final void emitROR_Reg_Imm(GPR dstReg, int imm) { 26598 int miStart = mi; 26599 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26600 // no size prefix 26601 generateREXprefix(false, null, null, dstReg); 26602 if (imm == 1) { 26603 setMachineCodes(mi++, (byte) 0xD1); 26604 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26605 } else { 26606 setMachineCodes(mi++, (byte) 0xC1); 26607 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26608 emitImm8((byte)imm); 26609 } 26610 if (lister != null) lister.RI(miStart, "ROR", dstReg, imm); 26611 } 26612 26613 /** 26614 * Generate a register-indirect--immediate ROR. That is, 26615 * <PRE> 26616 * rotate right of [dstBase] by imm 26617 * </PRE> 26618 * 26619 * @param dstBase the destination base register 26620 * @param imm immediate 26621 */ 26622 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26623 public final void emitROR_RegInd_Imm(GPR dstBase, int imm) { 26624 int miStart = mi; 26625 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26626 // no size prefix 26627 generateREXprefix(false, null, null, dstBase); 26628 if (imm == 1) { 26629 setMachineCodes(mi++, (byte) 0xD1); 26630 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26631 } else { 26632 setMachineCodes(mi++, (byte) 0xC1); 26633 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26634 emitImm8((byte)imm); 26635 } 26636 if (lister != null) lister.RNI(miStart, "ROR", dstBase, imm); 26637 } 26638 26639 /** 26640 * Generate a register-displacement--immediate ROR. That is, 26641 * <PRE> 26642 * rotate right of [dstBase + dstDisp] by imm 26643 * </PRE> 26644 * 26645 * @param dstBase the destination base register 26646 * @param dstDisp the destination displacement 26647 * @param imm immediate 26648 */ 26649 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26650 public final void emitROR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 26651 int miStart = mi; 26652 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26653 // no size prefix 26654 generateREXprefix(false, null, null, dstBase); 26655 if (imm == 1) { 26656 setMachineCodes(mi++, (byte) 0xD1); 26657 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26658 } else { 26659 setMachineCodes(mi++, (byte) 0xC1); 26660 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26661 emitImm8((byte)imm); 26662 } 26663 if (lister != null) lister.RDI(miStart, "ROR", dstBase, dstDisp, imm); 26664 } 26665 26666 /** 26667 * Generate a register-offset--immediate ROR. That is, 26668 * <PRE> 26669 * rotate right of [dstIndex<<dstScale + dstDisp] by imm 26670 * </PRE> 26671 * 26672 * @param dstIndex the destination index register 26673 * @param dstScale the destination shift amount 26674 * @param dstDisp the destination displacement 26675 * @param imm immediate 26676 */ 26677 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26678 public final void emitROR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 26679 int miStart = mi; 26680 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26681 // no size prefix 26682 generateREXprefix(false, null, dstIndex, null); 26683 if (imm == 1) { 26684 setMachineCodes(mi++, (byte) 0xD1); 26685 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26686 } else { 26687 setMachineCodes(mi++, (byte) 0xC1); 26688 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26689 emitImm8((byte)imm); 26690 } 26691 if (lister != null) lister.RFDI(miStart, "ROR", dstIndex, dstScale, dstDisp, imm); 26692 } 26693 26694 /** 26695 * Generate a absolute--immediate ROR. That is, 26696 * <PRE> 26697 * rotate right of [dstDisp] by imm 26698 * </PRE> 26699 * 26700 * @param dstDisp the destination displacement 26701 * @param imm immediate 26702 */ 26703 public final void emitROR_Abs_Imm(Address dstDisp, int imm) { 26704 int miStart = mi; 26705 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26706 // no size prefix 26707 generateREXprefix(false, null, null, null); 26708 if (imm == 1) { 26709 setMachineCodes(mi++, (byte) 0xD1); 26710 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 26711 } else { 26712 setMachineCodes(mi++, (byte) 0xC1); 26713 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 26714 emitImm8((byte)imm); 26715 } 26716 if (lister != null) lister.RAI(miStart, "ROR", dstDisp, imm); 26717 } 26718 26719 /** 26720 * Generate a register-index--immediate ROR. That is, 26721 * <PRE> 26722 * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 26723 * </PRE> 26724 * 26725 * @param dstBase the destination base register 26726 * @param dstIndex the destination index register 26727 * @param dstScale the destination shift amount 26728 * @param dstDisp the destination displacement 26729 * @param imm immediate 26730 */ 26731 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 26732 public final void emitROR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 26733 int miStart = mi; 26734 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26735 // no size prefix 26736 generateREXprefix(false, null, dstIndex, dstBase); 26737 if (imm == 1) { 26738 setMachineCodes(mi++, (byte) 0xD1); 26739 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26740 } else { 26741 setMachineCodes(mi++, (byte) 0xC1); 26742 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26743 emitImm8((byte)imm); 26744 } 26745 if (lister != null) lister.RXDI(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, imm); 26746 } 26747 26748 /** 26749 * Generate a register--register ROR. That is, 26750 * <PRE> 26751 * rotate right of dstReg by srcReg 26752 * </PRE> 26753 * 26754 * @param dstReg the destination register 26755 * @param srcReg must always be ECX 26756 */ 26757 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 26758 public final void emitROR_Reg_Reg(GPR dstReg, GPR srcReg) { 26759 int miStart = mi; 26760 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26761 // no size prefix 26762 generateREXprefix(false, null, null, dstReg); 26763 setMachineCodes(mi++, (byte) 0xD3); 26764 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26765 if (lister != null) lister.RR(miStart, "ROR", dstReg, srcReg); 26766 } 26767 26768 /** 26769 * Generate a register-indirect--register ROR. That is, 26770 * <PRE> 26771 * rotate right of [dstBase] by srcReg 26772 * </PRE> 26773 * 26774 * @param dstBase the destination register 26775 * @param srcReg must always be ECX 26776 */ 26777 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 26778 public final void emitROR_RegInd_Reg(GPR dstBase, GPR srcReg) { 26779 int miStart = mi; 26780 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26781 // no size prefix 26782 generateREXprefix(false, null, null, dstBase); 26783 setMachineCodes(mi++, (byte) 0xD3); 26784 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26785 if (lister != null) lister.RNR(miStart, "ROR", dstBase, srcReg); 26786 } 26787 26788 /** 26789 * Generate a register-displacement--register ROR. That is, 26790 * <PRE> 26791 * rotate right of [dstBase + dstDisp] by srcReg 26792 * </PRE> 26793 * 26794 * @param dstBase the destination base register 26795 * @param dstDisp the destination displacement 26796 * @param srcReg must always be ECX 26797 */ 26798 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 26799 public final void emitROR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 26800 int miStart = mi; 26801 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26802 // no size prefix 26803 generateREXprefix(false, null, null, dstBase); 26804 setMachineCodes(mi++, (byte) 0xD3); 26805 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26806 if (lister != null) lister.RDR(miStart, "ROR", dstBase, dstDisp, srcReg); 26807 } 26808 26809 /** 26810 * Generate a register-offset--register ROR. That is, 26811 * <PRE> 26812 * rotate right of [dstIndex<<dstScale + dstDisp] by srcReg 26813 * </PRE> 26814 * 26815 * @param dstIndex the destination index register 26816 * @param dstScale the destination shift amount 26817 * @param dstDisp the destination displacement 26818 * @param srcReg must always be ECX 26819 */ 26820 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 26821 public final void emitROR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 26822 int miStart = mi; 26823 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26824 // no size prefix 26825 generateREXprefix(false, null, dstIndex, null); 26826 setMachineCodes(mi++, (byte) 0xD3); 26827 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26828 if (lister != null) lister.RFDR(miStart, "ROR", dstIndex, dstScale, dstDisp, srcReg); 26829 } 26830 26831 /** 26832 * Generate an absolute--register ROR. That is, 26833 * <PRE> 26834 * rotate right of [dstDisp] by srcReg 26835 * </PRE> 26836 * 26837 * @param dstDisp the destination displacement 26838 * @param srcReg must always be ECX 26839 */ 26840 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 26841 public final void emitROR_Abs_Reg(Address dstDisp, GPR srcReg) { 26842 int miStart = mi; 26843 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26844 // no size prefix 26845 generateREXprefix(false, null, null, null); 26846 setMachineCodes(mi++, (byte) 0xD3); 26847 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 26848 if (lister != null) lister.RAR(miStart, "ROR", dstDisp, srcReg); 26849 } 26850 26851 /** 26852 * Generate a register-displacement--register ROR. That is, 26853 * <PRE> 26854 * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 26855 * </PRE> 26856 * 26857 * @param dstBase the destination base register 26858 * @param dstIndex the destination index register 26859 * @param dstScale the destination shift amount 26860 * @param dstDisp the destination displacement 26861 * @param srcReg must always be ECX 26862 */ 26863 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 26864 public final void emitROR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 26865 int miStart = mi; 26866 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 26867 // no size prefix 26868 generateREXprefix(false, null, dstIndex, dstBase); 26869 setMachineCodes(mi++, (byte) 0xD3); 26870 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26871 if (lister != null) lister.RXDR(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 26872 } 26873 26874 /** 26875 * Generate a register--immediate ROR. That is, 26876 * <PRE> 26877 * rotate right of dstReg by imm 26878 * </PRE> 26879 * 26880 * @param dstReg the destination register 26881 * @param imm immediate 26882 */ 26883 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26884 public final void emitROR_Reg_Imm_Quad(GPR dstReg, int imm) { 26885 int miStart = mi; 26886 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26887 // no size prefix 26888 generateREXprefix(true, null, null, dstReg); 26889 if (imm == 1) { 26890 setMachineCodes(mi++, (byte) 0xD1); 26891 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26892 } else { 26893 setMachineCodes(mi++, (byte) 0xC1); 26894 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 26895 emitImm8((byte)imm); 26896 } 26897 if (lister != null) lister.RI(miStart, "ROR", dstReg, imm); 26898 } 26899 26900 /** 26901 * Generate a register-indirect--immediate ROR. That is, 26902 * <PRE> 26903 * rotate right of [dstBase] by imm 26904 * </PRE> 26905 * 26906 * @param dstBase the destination base register 26907 * @param imm immediate 26908 */ 26909 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26910 public final void emitROR_RegInd_Imm_Quad(GPR dstBase, int imm) { 26911 int miStart = mi; 26912 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26913 // no size prefix 26914 generateREXprefix(true, null, null, dstBase); 26915 if (imm == 1) { 26916 setMachineCodes(mi++, (byte) 0xD1); 26917 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26918 } else { 26919 setMachineCodes(mi++, (byte) 0xC1); 26920 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 26921 emitImm8((byte)imm); 26922 } 26923 if (lister != null) lister.RNI(miStart, "ROR", dstBase, imm); 26924 } 26925 26926 /** 26927 * Generate a register-displacement--immediate ROR. That is, 26928 * <PRE> 26929 * rotate right of [dstBase + dstDisp] by imm 26930 * </PRE> 26931 * 26932 * @param dstBase the destination base register 26933 * @param dstDisp the destination displacement 26934 * @param imm immediate 26935 */ 26936 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26937 public final void emitROR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 26938 int miStart = mi; 26939 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26940 // no size prefix 26941 generateREXprefix(true, null, null, dstBase); 26942 if (imm == 1) { 26943 setMachineCodes(mi++, (byte) 0xD1); 26944 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26945 } else { 26946 setMachineCodes(mi++, (byte) 0xC1); 26947 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 26948 emitImm8((byte)imm); 26949 } 26950 if (lister != null) lister.RDI(miStart, "ROR", dstBase, dstDisp, imm); 26951 } 26952 26953 /** 26954 * Generate a register-offset--immediate ROR. That is, 26955 * <PRE> 26956 * rotate right of [dstIndex<<dstScale + dstDisp] by imm 26957 * </PRE> 26958 * 26959 * @param dstIndex the destination index register 26960 * @param dstScale the destination shift amount 26961 * @param dstDisp the destination displacement 26962 * @param imm immediate 26963 */ 26964 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 26965 public final void emitROR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 26966 int miStart = mi; 26967 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26968 // no size prefix 26969 generateREXprefix(true, null, dstIndex, null); 26970 if (imm == 1) { 26971 setMachineCodes(mi++, (byte) 0xD1); 26972 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26973 } else { 26974 setMachineCodes(mi++, (byte) 0xC1); 26975 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 26976 emitImm8((byte)imm); 26977 } 26978 if (lister != null) lister.RFDI(miStart, "ROR", dstIndex, dstScale, dstDisp, imm); 26979 } 26980 26981 /** 26982 * Generate a absolute--immediate ROR. That is, 26983 * <PRE> 26984 * rotate right of [dstDisp] by imm 26985 * </PRE> 26986 * 26987 * @param dstDisp the destination displacement 26988 * @param imm immediate 26989 */ 26990 public final void emitROR_Abs_Imm_Quad(Address dstDisp, int imm) { 26991 int miStart = mi; 26992 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 26993 // no size prefix 26994 generateREXprefix(true, null, null, null); 26995 if (imm == 1) { 26996 setMachineCodes(mi++, (byte) 0xD1); 26997 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 26998 } else { 26999 setMachineCodes(mi++, (byte) 0xC1); 27000 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 27001 emitImm8((byte)imm); 27002 } 27003 if (lister != null) lister.RAI(miStart, "ROR", dstDisp, imm); 27004 } 27005 27006 /** 27007 * Generate a register-index--immediate ROR. That is, 27008 * <PRE> 27009 * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 27010 * </PRE> 27011 * 27012 * @param dstBase the destination base register 27013 * @param dstIndex the destination index register 27014 * @param dstScale the destination shift amount 27015 * @param dstDisp the destination displacement 27016 * @param imm immediate 27017 */ 27018 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27019 public final void emitROR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 27020 int miStart = mi; 27021 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27022 // no size prefix 27023 generateREXprefix(true, null, dstIndex, dstBase); 27024 if (imm == 1) { 27025 setMachineCodes(mi++, (byte) 0xD1); 27026 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 27027 } else { 27028 setMachineCodes(mi++, (byte) 0xC1); 27029 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 27030 emitImm8((byte)imm); 27031 } 27032 if (lister != null) lister.RXDI(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, imm); 27033 } 27034 27035 /** 27036 * Generate a register--register ROR. That is, 27037 * <PRE> 27038 * rotate right of dstReg by srcReg 27039 * </PRE> 27040 * 27041 * @param dstReg the destination register 27042 * @param srcReg must always be ECX 27043 */ 27044 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27045 public final void emitROR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 27046 int miStart = mi; 27047 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27048 // no size prefix 27049 generateREXprefix(true, null, null, dstReg); 27050 setMachineCodes(mi++, (byte) 0xD3); 27051 emitRegRegOperands(dstReg, GPR.getForOpcode(0x1)); 27052 if (lister != null) lister.RR(miStart, "ROR", dstReg, srcReg); 27053 } 27054 27055 /** 27056 * Generate a register-indirect--register ROR. That is, 27057 * <PRE> 27058 * rotate right of [dstBase] by srcReg 27059 * </PRE> 27060 * 27061 * @param dstBase the destination register 27062 * @param srcReg must always be ECX 27063 */ 27064 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27065 public final void emitROR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 27066 int miStart = mi; 27067 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27068 // no size prefix 27069 generateREXprefix(true, null, null, dstBase); 27070 setMachineCodes(mi++, (byte) 0xD3); 27071 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1)); 27072 if (lister != null) lister.RNR(miStart, "ROR", dstBase, srcReg); 27073 } 27074 27075 /** 27076 * Generate a register-displacement--register ROR. That is, 27077 * <PRE> 27078 * rotate right of [dstBase + dstDisp] by srcReg 27079 * </PRE> 27080 * 27081 * @param dstBase the destination base register 27082 * @param dstDisp the destination displacement 27083 * @param srcReg must always be ECX 27084 */ 27085 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 27086 public final void emitROR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 27087 int miStart = mi; 27088 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27089 // no size prefix 27090 generateREXprefix(true, null, null, dstBase); 27091 setMachineCodes(mi++, (byte) 0xD3); 27092 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1)); 27093 if (lister != null) lister.RDR(miStart, "ROR", dstBase, dstDisp, srcReg); 27094 } 27095 27096 /** 27097 * Generate a register-offset--register ROR. That is, 27098 * <PRE> 27099 * rotate right of [dstIndex<<dstScale + dstDisp] by srcReg 27100 * </PRE> 27101 * 27102 * @param dstIndex the destination index register 27103 * @param dstScale the destination shift amount 27104 * @param dstDisp the destination displacement 27105 * @param srcReg must always be ECX 27106 */ 27107 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 27108 public final void emitROR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 27109 int miStart = mi; 27110 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27111 // no size prefix 27112 generateREXprefix(true, null, dstIndex, null); 27113 setMachineCodes(mi++, (byte) 0xD3); 27114 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 27115 if (lister != null) lister.RFDR(miStart, "ROR", dstIndex, dstScale, dstDisp, srcReg); 27116 } 27117 27118 /** 27119 * Generate an absolute--register ROR. That is, 27120 * <PRE> 27121 * rotate right of [dstDisp] by srcReg 27122 * </PRE> 27123 * 27124 * @param dstDisp the destination displacement 27125 * @param srcReg must always be ECX 27126 */ 27127 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 27128 public final void emitROR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 27129 int miStart = mi; 27130 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27131 // no size prefix 27132 generateREXprefix(true, null, null, null); 27133 setMachineCodes(mi++, (byte) 0xD3); 27134 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1)); 27135 if (lister != null) lister.RAR(miStart, "ROR", dstDisp, srcReg); 27136 } 27137 27138 /** 27139 * Generate a register-displacement--register ROR. That is, 27140 * <PRE> 27141 * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 27142 * </PRE> 27143 * 27144 * @param dstBase the destination base register 27145 * @param dstIndex the destination index register 27146 * @param dstScale the destination shift amount 27147 * @param dstDisp the destination displacement 27148 * @param srcReg must always be ECX 27149 */ 27150 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 27151 public final void emitROR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 27152 int miStart = mi; 27153 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27154 // no size prefix 27155 generateREXprefix(true, null, dstIndex, dstBase); 27156 setMachineCodes(mi++, (byte) 0xD3); 27157 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1)); 27158 if (lister != null) lister.RXDR(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 27159 } 27160 27161 /** 27162 * Generate a register--immediate RCL. That is, 27163 * <PRE> 27164 * rotate left with carry of dstReg by imm 27165 * </PRE> 27166 * 27167 * @param dstReg the destination register 27168 * @param imm immediate 27169 */ 27170 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27171 public final void emitRCL_Reg_Imm_Byte(GPR dstReg, int imm) { 27172 int miStart = mi; 27173 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27174 // no size prefix 27175 generateREXprefix(false, null, null, dstReg); 27176 if (imm == 1) { 27177 setMachineCodes(mi++, (byte) 0xD0); 27178 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 27179 } else { 27180 setMachineCodes(mi++, (byte) 0xC0); 27181 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 27182 emitImm8((byte)imm); 27183 } 27184 if (lister != null) lister.RI(miStart, "RCL", dstReg, imm); 27185 } 27186 27187 /** 27188 * Generate a register-indirect--immediate RCL. That is, 27189 * <PRE> 27190 * rotate left with carry of [dstBase] by imm 27191 * </PRE> 27192 * 27193 * @param dstBase the destination base register 27194 * @param imm immediate 27195 */ 27196 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27197 public final void emitRCL_RegInd_Imm_Byte(GPR dstBase, int imm) { 27198 int miStart = mi; 27199 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27200 // no size prefix 27201 generateREXprefix(false, null, null, dstBase); 27202 if (imm == 1) { 27203 setMachineCodes(mi++, (byte) 0xD0); 27204 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 27205 } else { 27206 setMachineCodes(mi++, (byte) 0xC0); 27207 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 27208 emitImm8((byte)imm); 27209 } 27210 if (lister != null) lister.RNI(miStart, "RCL", dstBase, imm); 27211 } 27212 27213 /** 27214 * Generate a register-displacement--immediate RCL. That is, 27215 * <PRE> 27216 * rotate left with carry of [dstBase + dstDisp] by imm 27217 * </PRE> 27218 * 27219 * @param dstBase the destination base register 27220 * @param dstDisp the destination displacement 27221 * @param imm immediate 27222 */ 27223 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27224 public final void emitRCL_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 27225 int miStart = mi; 27226 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27227 // no size prefix 27228 generateREXprefix(false, null, null, dstBase); 27229 if (imm == 1) { 27230 setMachineCodes(mi++, (byte) 0xD0); 27231 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 27232 } else { 27233 setMachineCodes(mi++, (byte) 0xC0); 27234 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 27235 emitImm8((byte)imm); 27236 } 27237 if (lister != null) lister.RDI(miStart, "RCL", dstBase, dstDisp, imm); 27238 } 27239 27240 /** 27241 * Generate a register-offset--immediate RCL. That is, 27242 * <PRE> 27243 * rotate left with carry of [dstIndex<<dstScale + dstDisp] by imm 27244 * </PRE> 27245 * 27246 * @param dstIndex the destination index register 27247 * @param dstScale the destination shift amount 27248 * @param dstDisp the destination displacement 27249 * @param imm immediate 27250 */ 27251 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27252 public final void emitRCL_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 27253 int miStart = mi; 27254 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27255 // no size prefix 27256 generateREXprefix(false, null, dstIndex, null); 27257 if (imm == 1) { 27258 setMachineCodes(mi++, (byte) 0xD0); 27259 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27260 } else { 27261 setMachineCodes(mi++, (byte) 0xC0); 27262 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27263 emitImm8((byte)imm); 27264 } 27265 if (lister != null) lister.RFDI(miStart, "RCL", dstIndex, dstScale, dstDisp, imm); 27266 } 27267 27268 /** 27269 * Generate a absolute--immediate RCL. That is, 27270 * <PRE> 27271 * rotate left with carry of [dstDisp] by imm 27272 * </PRE> 27273 * 27274 * @param dstDisp the destination displacement 27275 * @param imm immediate 27276 */ 27277 public final void emitRCL_Abs_Imm_Byte(Address dstDisp, int imm) { 27278 int miStart = mi; 27279 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27280 // no size prefix 27281 generateREXprefix(false, null, null, null); 27282 if (imm == 1) { 27283 setMachineCodes(mi++, (byte) 0xD0); 27284 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 27285 } else { 27286 setMachineCodes(mi++, (byte) 0xC0); 27287 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 27288 emitImm8((byte)imm); 27289 } 27290 if (lister != null) lister.RAI(miStart, "RCL", dstDisp, imm); 27291 } 27292 27293 /** 27294 * Generate a register-index--immediate RCL. That is, 27295 * <PRE> 27296 * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm 27297 * </PRE> 27298 * 27299 * @param dstBase the destination base register 27300 * @param dstIndex the destination index register 27301 * @param dstScale the destination shift amount 27302 * @param dstDisp the destination displacement 27303 * @param imm immediate 27304 */ 27305 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27306 public final void emitRCL_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 27307 int miStart = mi; 27308 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27309 // no size prefix 27310 generateREXprefix(false, null, dstIndex, dstBase); 27311 if (imm == 1) { 27312 setMachineCodes(mi++, (byte) 0xD0); 27313 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27314 } else { 27315 setMachineCodes(mi++, (byte) 0xC0); 27316 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27317 emitImm8((byte)imm); 27318 } 27319 if (lister != null) lister.RXDI(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, imm); 27320 } 27321 27322 /** 27323 * Generate a register--register RCL. That is, 27324 * <PRE> 27325 * rotate left with carry of dstReg by srcReg 27326 * </PRE> 27327 * 27328 * @param dstReg the destination register 27329 * @param srcReg must always be ECX 27330 */ 27331 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27332 public final void emitRCL_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 27333 int miStart = mi; 27334 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 27335 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27336 // no size prefix 27337 generateREXprefix(false, null, null, dstReg); 27338 setMachineCodes(mi++, (byte) 0xD2); 27339 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 27340 if (lister != null) lister.RR(miStart, "RCL", dstReg, srcReg); 27341 } 27342 27343 /** 27344 * Generate a register-indirect--register RCL. That is, 27345 * <PRE> 27346 * rotate left with carry of [dstBase] by srcReg 27347 * </PRE> 27348 * 27349 * @param dstBase the destination register 27350 * @param srcReg must always be ECX 27351 */ 27352 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27353 public final void emitRCL_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 27354 int miStart = mi; 27355 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27356 // no size prefix 27357 generateREXprefix(false, null, null, dstBase); 27358 setMachineCodes(mi++, (byte) 0xD2); 27359 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 27360 if (lister != null) lister.RNR(miStart, "RCL", dstBase, srcReg); 27361 } 27362 27363 /** 27364 * Generate a register-displacement--register RCL. That is, 27365 * <PRE> 27366 * rotate left with carry of [dstBase + dstDisp] by srcReg 27367 * </PRE> 27368 * 27369 * @param dstBase the destination base register 27370 * @param dstDisp the destination displacement 27371 * @param srcReg must always be ECX 27372 */ 27373 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 27374 public final void emitRCL_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 27375 int miStart = mi; 27376 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27377 // no size prefix 27378 generateREXprefix(false, null, null, dstBase); 27379 setMachineCodes(mi++, (byte) 0xD2); 27380 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 27381 if (lister != null) lister.RDR(miStart, "RCL", dstBase, dstDisp, srcReg); 27382 } 27383 27384 /** 27385 * Generate a register-offset--register RCL. That is, 27386 * <PRE> 27387 * rotate left with carry of [dstIndex<<dstScale + dstDisp] by srcReg 27388 * </PRE> 27389 * 27390 * @param dstIndex the destination index register 27391 * @param dstScale the destination shift amount 27392 * @param dstDisp the destination displacement 27393 * @param srcReg must always be ECX 27394 */ 27395 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 27396 public final void emitRCL_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 27397 int miStart = mi; 27398 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27399 // no size prefix 27400 generateREXprefix(false, null, dstIndex, null); 27401 setMachineCodes(mi++, (byte) 0xD2); 27402 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27403 if (lister != null) lister.RFDR(miStart, "RCL", dstIndex, dstScale, dstDisp, srcReg); 27404 } 27405 27406 /** 27407 * Generate an absolute--register RCL. That is, 27408 * <PRE> 27409 * rotate left with carry of [dstDisp] by srcReg 27410 * </PRE> 27411 * 27412 * @param dstDisp the destination displacement 27413 * @param srcReg must always be ECX 27414 */ 27415 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 27416 public final void emitRCL_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 27417 int miStart = mi; 27418 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27419 // no size prefix 27420 generateREXprefix(false, null, null, null); 27421 setMachineCodes(mi++, (byte) 0xD2); 27422 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 27423 if (lister != null) lister.RAR(miStart, "RCL", dstDisp, srcReg); 27424 } 27425 27426 /** 27427 * Generate a register-displacement--register RCL. That is, 27428 * <PRE> 27429 * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 27430 * </PRE> 27431 * 27432 * @param dstBase the destination base register 27433 * @param dstIndex the destination index register 27434 * @param dstScale the destination shift amount 27435 * @param dstDisp the destination displacement 27436 * @param srcReg must always be ECX 27437 */ 27438 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 27439 public final void emitRCL_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 27440 int miStart = mi; 27441 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27442 // no size prefix 27443 generateREXprefix(false, null, dstIndex, dstBase); 27444 setMachineCodes(mi++, (byte) 0xD2); 27445 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27446 if (lister != null) lister.RXDR(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 27447 } 27448 27449 /** 27450 * Generate a register--immediate RCL. That is, 27451 * <PRE> 27452 * rotate left with carry of dstReg by imm 27453 * </PRE> 27454 * 27455 * @param dstReg the destination register 27456 * @param imm immediate 27457 */ 27458 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27459 public final void emitRCL_Reg_Imm_Word(GPR dstReg, int imm) { 27460 int miStart = mi; 27461 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27462 setMachineCodes(mi++, (byte) 0x66); 27463 generateREXprefix(false, null, null, dstReg); 27464 if (imm == 1) { 27465 setMachineCodes(mi++, (byte) 0xD1); 27466 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 27467 } else { 27468 setMachineCodes(mi++, (byte) 0xC1); 27469 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 27470 emitImm8((byte)imm); 27471 } 27472 if (lister != null) lister.RI(miStart, "RCL", dstReg, imm); 27473 } 27474 27475 /** 27476 * Generate a register-indirect--immediate RCL. That is, 27477 * <PRE> 27478 * rotate left with carry of [dstBase] by imm 27479 * </PRE> 27480 * 27481 * @param dstBase the destination base register 27482 * @param imm immediate 27483 */ 27484 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27485 public final void emitRCL_RegInd_Imm_Word(GPR dstBase, int imm) { 27486 int miStart = mi; 27487 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27488 setMachineCodes(mi++, (byte) 0x66); 27489 generateREXprefix(false, null, null, dstBase); 27490 if (imm == 1) { 27491 setMachineCodes(mi++, (byte) 0xD1); 27492 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 27493 } else { 27494 setMachineCodes(mi++, (byte) 0xC1); 27495 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 27496 emitImm8((byte)imm); 27497 } 27498 if (lister != null) lister.RNI(miStart, "RCL", dstBase, imm); 27499 } 27500 27501 /** 27502 * Generate a register-displacement--immediate RCL. That is, 27503 * <PRE> 27504 * rotate left with carry of [dstBase + dstDisp] by imm 27505 * </PRE> 27506 * 27507 * @param dstBase the destination base register 27508 * @param dstDisp the destination displacement 27509 * @param imm immediate 27510 */ 27511 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27512 public final void emitRCL_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 27513 int miStart = mi; 27514 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27515 setMachineCodes(mi++, (byte) 0x66); 27516 generateREXprefix(false, null, null, dstBase); 27517 if (imm == 1) { 27518 setMachineCodes(mi++, (byte) 0xD1); 27519 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 27520 } else { 27521 setMachineCodes(mi++, (byte) 0xC1); 27522 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 27523 emitImm8((byte)imm); 27524 } 27525 if (lister != null) lister.RDI(miStart, "RCL", dstBase, dstDisp, imm); 27526 } 27527 27528 /** 27529 * Generate a register-offset--immediate RCL. That is, 27530 * <PRE> 27531 * rotate left with carry of [dstIndex<<dstScale + dstDisp] by imm 27532 * </PRE> 27533 * 27534 * @param dstIndex the destination index register 27535 * @param dstScale the destination shift amount 27536 * @param dstDisp the destination displacement 27537 * @param imm immediate 27538 */ 27539 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27540 public final void emitRCL_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 27541 int miStart = mi; 27542 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27543 setMachineCodes(mi++, (byte) 0x66); 27544 generateREXprefix(false, null, dstIndex, null); 27545 if (imm == 1) { 27546 setMachineCodes(mi++, (byte) 0xD1); 27547 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27548 } else { 27549 setMachineCodes(mi++, (byte) 0xC1); 27550 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27551 emitImm8((byte)imm); 27552 } 27553 if (lister != null) lister.RFDI(miStart, "RCL", dstIndex, dstScale, dstDisp, imm); 27554 } 27555 27556 /** 27557 * Generate a absolute--immediate RCL. That is, 27558 * <PRE> 27559 * rotate left with carry of [dstDisp] by imm 27560 * </PRE> 27561 * 27562 * @param dstDisp the destination displacement 27563 * @param imm immediate 27564 */ 27565 public final void emitRCL_Abs_Imm_Word(Address dstDisp, int imm) { 27566 int miStart = mi; 27567 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27568 setMachineCodes(mi++, (byte) 0x66); 27569 generateREXprefix(false, null, null, null); 27570 if (imm == 1) { 27571 setMachineCodes(mi++, (byte) 0xD1); 27572 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 27573 } else { 27574 setMachineCodes(mi++, (byte) 0xC1); 27575 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 27576 emitImm8((byte)imm); 27577 } 27578 if (lister != null) lister.RAI(miStart, "RCL", dstDisp, imm); 27579 } 27580 27581 /** 27582 * Generate a register-index--immediate RCL. That is, 27583 * <PRE> 27584 * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm 27585 * </PRE> 27586 * 27587 * @param dstBase the destination base register 27588 * @param dstIndex the destination index register 27589 * @param dstScale the destination shift amount 27590 * @param dstDisp the destination displacement 27591 * @param imm immediate 27592 */ 27593 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27594 public final void emitRCL_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 27595 int miStart = mi; 27596 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27597 setMachineCodes(mi++, (byte) 0x66); 27598 generateREXprefix(false, null, dstIndex, dstBase); 27599 if (imm == 1) { 27600 setMachineCodes(mi++, (byte) 0xD1); 27601 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27602 } else { 27603 setMachineCodes(mi++, (byte) 0xC1); 27604 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27605 emitImm8((byte)imm); 27606 } 27607 if (lister != null) lister.RXDI(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, imm); 27608 } 27609 27610 /** 27611 * Generate a register--register RCL. That is, 27612 * <PRE> 27613 * rotate left with carry of dstReg by srcReg 27614 * </PRE> 27615 * 27616 * @param dstReg the destination register 27617 * @param srcReg must always be ECX 27618 */ 27619 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27620 public final void emitRCL_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 27621 int miStart = mi; 27622 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27623 setMachineCodes(mi++, (byte) 0x66); 27624 generateREXprefix(false, null, null, dstReg); 27625 setMachineCodes(mi++, (byte) 0xD3); 27626 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 27627 if (lister != null) lister.RR(miStart, "RCL", dstReg, srcReg); 27628 } 27629 27630 /** 27631 * Generate a register-indirect--register RCL. That is, 27632 * <PRE> 27633 * rotate left with carry of [dstBase] by srcReg 27634 * </PRE> 27635 * 27636 * @param dstBase the destination register 27637 * @param srcReg must always be ECX 27638 */ 27639 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27640 public final void emitRCL_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 27641 int miStart = mi; 27642 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27643 setMachineCodes(mi++, (byte) 0x66); 27644 generateREXprefix(false, null, null, dstBase); 27645 setMachineCodes(mi++, (byte) 0xD3); 27646 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 27647 if (lister != null) lister.RNR(miStart, "RCL", dstBase, srcReg); 27648 } 27649 27650 /** 27651 * Generate a register-displacement--register RCL. That is, 27652 * <PRE> 27653 * rotate left with carry of [dstBase + dstDisp] by srcReg 27654 * </PRE> 27655 * 27656 * @param dstBase the destination base register 27657 * @param dstDisp the destination displacement 27658 * @param srcReg must always be ECX 27659 */ 27660 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 27661 public final void emitRCL_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 27662 int miStart = mi; 27663 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27664 setMachineCodes(mi++, (byte) 0x66); 27665 generateREXprefix(false, null, null, dstBase); 27666 setMachineCodes(mi++, (byte) 0xD3); 27667 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 27668 if (lister != null) lister.RDR(miStart, "RCL", dstBase, dstDisp, srcReg); 27669 } 27670 27671 /** 27672 * Generate a register-offset--register RCL. That is, 27673 * <PRE> 27674 * rotate left with carry of [dstIndex<<dstScale + dstDisp] by srcReg 27675 * </PRE> 27676 * 27677 * @param dstIndex the destination index register 27678 * @param dstScale the destination shift amount 27679 * @param dstDisp the destination displacement 27680 * @param srcReg must always be ECX 27681 */ 27682 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 27683 public final void emitRCL_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 27684 int miStart = mi; 27685 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27686 setMachineCodes(mi++, (byte) 0x66); 27687 generateREXprefix(false, null, dstIndex, null); 27688 setMachineCodes(mi++, (byte) 0xD3); 27689 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27690 if (lister != null) lister.RFDR(miStart, "RCL", dstIndex, dstScale, dstDisp, srcReg); 27691 } 27692 27693 /** 27694 * Generate an absolute--register RCL. That is, 27695 * <PRE> 27696 * rotate left with carry of [dstDisp] by srcReg 27697 * </PRE> 27698 * 27699 * @param dstDisp the destination displacement 27700 * @param srcReg must always be ECX 27701 */ 27702 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 27703 public final void emitRCL_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 27704 int miStart = mi; 27705 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27706 setMachineCodes(mi++, (byte) 0x66); 27707 generateREXprefix(false, null, null, null); 27708 setMachineCodes(mi++, (byte) 0xD3); 27709 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 27710 if (lister != null) lister.RAR(miStart, "RCL", dstDisp, srcReg); 27711 } 27712 27713 /** 27714 * Generate a register-displacement--register RCL. That is, 27715 * <PRE> 27716 * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 27717 * </PRE> 27718 * 27719 * @param dstBase the destination base register 27720 * @param dstIndex the destination index register 27721 * @param dstScale the destination shift amount 27722 * @param dstDisp the destination displacement 27723 * @param srcReg must always be ECX 27724 */ 27725 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 27726 public final void emitRCL_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 27727 int miStart = mi; 27728 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27729 setMachineCodes(mi++, (byte) 0x66); 27730 generateREXprefix(false, null, dstIndex, dstBase); 27731 setMachineCodes(mi++, (byte) 0xD3); 27732 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27733 if (lister != null) lister.RXDR(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 27734 } 27735 27736 /** 27737 * Generate a register--immediate RCL. That is, 27738 * <PRE> 27739 * rotate left with carry of dstReg by imm 27740 * </PRE> 27741 * 27742 * @param dstReg the destination register 27743 * @param imm immediate 27744 */ 27745 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27746 public final void emitRCL_Reg_Imm(GPR dstReg, int imm) { 27747 int miStart = mi; 27748 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27749 // no size prefix 27750 generateREXprefix(false, null, null, dstReg); 27751 if (imm == 1) { 27752 setMachineCodes(mi++, (byte) 0xD1); 27753 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 27754 } else { 27755 setMachineCodes(mi++, (byte) 0xC1); 27756 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 27757 emitImm8((byte)imm); 27758 } 27759 if (lister != null) lister.RI(miStart, "RCL", dstReg, imm); 27760 } 27761 27762 /** 27763 * Generate a register-indirect--immediate RCL. That is, 27764 * <PRE> 27765 * rotate left with carry of [dstBase] by imm 27766 * </PRE> 27767 * 27768 * @param dstBase the destination base register 27769 * @param imm immediate 27770 */ 27771 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27772 public final void emitRCL_RegInd_Imm(GPR dstBase, int imm) { 27773 int miStart = mi; 27774 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27775 // no size prefix 27776 generateREXprefix(false, null, null, dstBase); 27777 if (imm == 1) { 27778 setMachineCodes(mi++, (byte) 0xD1); 27779 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 27780 } else { 27781 setMachineCodes(mi++, (byte) 0xC1); 27782 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 27783 emitImm8((byte)imm); 27784 } 27785 if (lister != null) lister.RNI(miStart, "RCL", dstBase, imm); 27786 } 27787 27788 /** 27789 * Generate a register-displacement--immediate RCL. That is, 27790 * <PRE> 27791 * rotate left with carry of [dstBase + dstDisp] by imm 27792 * </PRE> 27793 * 27794 * @param dstBase the destination base register 27795 * @param dstDisp the destination displacement 27796 * @param imm immediate 27797 */ 27798 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27799 public final void emitRCL_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 27800 int miStart = mi; 27801 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27802 // no size prefix 27803 generateREXprefix(false, null, null, dstBase); 27804 if (imm == 1) { 27805 setMachineCodes(mi++, (byte) 0xD1); 27806 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 27807 } else { 27808 setMachineCodes(mi++, (byte) 0xC1); 27809 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 27810 emitImm8((byte)imm); 27811 } 27812 if (lister != null) lister.RDI(miStart, "RCL", dstBase, dstDisp, imm); 27813 } 27814 27815 /** 27816 * Generate a register-offset--immediate RCL. That is, 27817 * <PRE> 27818 * rotate left with carry of [dstIndex<<dstScale + dstDisp] by imm 27819 * </PRE> 27820 * 27821 * @param dstIndex the destination index register 27822 * @param dstScale the destination shift amount 27823 * @param dstDisp the destination displacement 27824 * @param imm immediate 27825 */ 27826 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 27827 public final void emitRCL_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 27828 int miStart = mi; 27829 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27830 // no size prefix 27831 generateREXprefix(false, null, dstIndex, null); 27832 if (imm == 1) { 27833 setMachineCodes(mi++, (byte) 0xD1); 27834 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27835 } else { 27836 setMachineCodes(mi++, (byte) 0xC1); 27837 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27838 emitImm8((byte)imm); 27839 } 27840 if (lister != null) lister.RFDI(miStart, "RCL", dstIndex, dstScale, dstDisp, imm); 27841 } 27842 27843 /** 27844 * Generate a absolute--immediate RCL. That is, 27845 * <PRE> 27846 * rotate left with carry of [dstDisp] by imm 27847 * </PRE> 27848 * 27849 * @param dstDisp the destination displacement 27850 * @param imm immediate 27851 */ 27852 public final void emitRCL_Abs_Imm(Address dstDisp, int imm) { 27853 int miStart = mi; 27854 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27855 // no size prefix 27856 generateREXprefix(false, null, null, null); 27857 if (imm == 1) { 27858 setMachineCodes(mi++, (byte) 0xD1); 27859 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 27860 } else { 27861 setMachineCodes(mi++, (byte) 0xC1); 27862 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 27863 emitImm8((byte)imm); 27864 } 27865 if (lister != null) lister.RAI(miStart, "RCL", dstDisp, imm); 27866 } 27867 27868 /** 27869 * Generate a register-index--immediate RCL. That is, 27870 * <PRE> 27871 * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm 27872 * </PRE> 27873 * 27874 * @param dstBase the destination base register 27875 * @param dstIndex the destination index register 27876 * @param dstScale the destination shift amount 27877 * @param dstDisp the destination displacement 27878 * @param imm immediate 27879 */ 27880 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27881 public final void emitRCL_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 27882 int miStart = mi; 27883 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 27884 // no size prefix 27885 generateREXprefix(false, null, dstIndex, dstBase); 27886 if (imm == 1) { 27887 setMachineCodes(mi++, (byte) 0xD1); 27888 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27889 } else { 27890 setMachineCodes(mi++, (byte) 0xC1); 27891 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27892 emitImm8((byte)imm); 27893 } 27894 if (lister != null) lister.RXDI(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, imm); 27895 } 27896 27897 /** 27898 * Generate a register--register RCL. That is, 27899 * <PRE> 27900 * rotate left with carry of dstReg by srcReg 27901 * </PRE> 27902 * 27903 * @param dstReg the destination register 27904 * @param srcReg must always be ECX 27905 */ 27906 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27907 public final void emitRCL_Reg_Reg(GPR dstReg, GPR srcReg) { 27908 int miStart = mi; 27909 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27910 // no size prefix 27911 generateREXprefix(false, null, null, dstReg); 27912 setMachineCodes(mi++, (byte) 0xD3); 27913 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 27914 if (lister != null) lister.RR(miStart, "RCL", dstReg, srcReg); 27915 } 27916 27917 /** 27918 * Generate a register-indirect--register RCL. That is, 27919 * <PRE> 27920 * rotate left with carry of [dstBase] by srcReg 27921 * </PRE> 27922 * 27923 * @param dstBase the destination register 27924 * @param srcReg must always be ECX 27925 */ 27926 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 27927 public final void emitRCL_RegInd_Reg(GPR dstBase, GPR srcReg) { 27928 int miStart = mi; 27929 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27930 // no size prefix 27931 generateREXprefix(false, null, null, dstBase); 27932 setMachineCodes(mi++, (byte) 0xD3); 27933 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 27934 if (lister != null) lister.RNR(miStart, "RCL", dstBase, srcReg); 27935 } 27936 27937 /** 27938 * Generate a register-displacement--register RCL. That is, 27939 * <PRE> 27940 * rotate left with carry of [dstBase + dstDisp] by srcReg 27941 * </PRE> 27942 * 27943 * @param dstBase the destination base register 27944 * @param dstDisp the destination displacement 27945 * @param srcReg must always be ECX 27946 */ 27947 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 27948 public final void emitRCL_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 27949 int miStart = mi; 27950 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27951 // no size prefix 27952 generateREXprefix(false, null, null, dstBase); 27953 setMachineCodes(mi++, (byte) 0xD3); 27954 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 27955 if (lister != null) lister.RDR(miStart, "RCL", dstBase, dstDisp, srcReg); 27956 } 27957 27958 /** 27959 * Generate a register-offset--register RCL. That is, 27960 * <PRE> 27961 * rotate left with carry of [dstIndex<<dstScale + dstDisp] by srcReg 27962 * </PRE> 27963 * 27964 * @param dstIndex the destination index register 27965 * @param dstScale the destination shift amount 27966 * @param dstDisp the destination displacement 27967 * @param srcReg must always be ECX 27968 */ 27969 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 27970 public final void emitRCL_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 27971 int miStart = mi; 27972 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27973 // no size prefix 27974 generateREXprefix(false, null, dstIndex, null); 27975 setMachineCodes(mi++, (byte) 0xD3); 27976 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 27977 if (lister != null) lister.RFDR(miStart, "RCL", dstIndex, dstScale, dstDisp, srcReg); 27978 } 27979 27980 /** 27981 * Generate an absolute--register RCL. That is, 27982 * <PRE> 27983 * rotate left with carry of [dstDisp] by srcReg 27984 * </PRE> 27985 * 27986 * @param dstDisp the destination displacement 27987 * @param srcReg must always be ECX 27988 */ 27989 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 27990 public final void emitRCL_Abs_Reg(Address dstDisp, GPR srcReg) { 27991 int miStart = mi; 27992 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 27993 // no size prefix 27994 generateREXprefix(false, null, null, null); 27995 setMachineCodes(mi++, (byte) 0xD3); 27996 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 27997 if (lister != null) lister.RAR(miStart, "RCL", dstDisp, srcReg); 27998 } 27999 28000 /** 28001 * Generate a register-displacement--register RCL. That is, 28002 * <PRE> 28003 * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 28004 * </PRE> 28005 * 28006 * @param dstBase the destination base register 28007 * @param dstIndex the destination index register 28008 * @param dstScale the destination shift amount 28009 * @param dstDisp the destination displacement 28010 * @param srcReg must always be ECX 28011 */ 28012 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 28013 public final void emitRCL_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 28014 int miStart = mi; 28015 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28016 // no size prefix 28017 generateREXprefix(false, null, dstIndex, dstBase); 28018 setMachineCodes(mi++, (byte) 0xD3); 28019 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 28020 if (lister != null) lister.RXDR(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 28021 } 28022 28023 /** 28024 * Generate a register--immediate RCL. That is, 28025 * <PRE> 28026 * rotate left with carry of dstReg by imm 28027 * </PRE> 28028 * 28029 * @param dstReg the destination register 28030 * @param imm immediate 28031 */ 28032 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28033 public final void emitRCL_Reg_Imm_Quad(GPR dstReg, int imm) { 28034 int miStart = mi; 28035 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28036 // no size prefix 28037 generateREXprefix(true, null, null, dstReg); 28038 if (imm == 1) { 28039 setMachineCodes(mi++, (byte) 0xD1); 28040 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 28041 } else { 28042 setMachineCodes(mi++, (byte) 0xC1); 28043 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 28044 emitImm8((byte)imm); 28045 } 28046 if (lister != null) lister.RI(miStart, "RCL", dstReg, imm); 28047 } 28048 28049 /** 28050 * Generate a register-indirect--immediate RCL. That is, 28051 * <PRE> 28052 * rotate left with carry of [dstBase] by imm 28053 * </PRE> 28054 * 28055 * @param dstBase the destination base register 28056 * @param imm immediate 28057 */ 28058 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28059 public final void emitRCL_RegInd_Imm_Quad(GPR dstBase, int imm) { 28060 int miStart = mi; 28061 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28062 // no size prefix 28063 generateREXprefix(true, null, null, dstBase); 28064 if (imm == 1) { 28065 setMachineCodes(mi++, (byte) 0xD1); 28066 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 28067 } else { 28068 setMachineCodes(mi++, (byte) 0xC1); 28069 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 28070 emitImm8((byte)imm); 28071 } 28072 if (lister != null) lister.RNI(miStart, "RCL", dstBase, imm); 28073 } 28074 28075 /** 28076 * Generate a register-displacement--immediate RCL. That is, 28077 * <PRE> 28078 * rotate left with carry of [dstBase + dstDisp] by imm 28079 * </PRE> 28080 * 28081 * @param dstBase the destination base register 28082 * @param dstDisp the destination displacement 28083 * @param imm immediate 28084 */ 28085 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28086 public final void emitRCL_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 28087 int miStart = mi; 28088 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28089 // no size prefix 28090 generateREXprefix(true, null, null, dstBase); 28091 if (imm == 1) { 28092 setMachineCodes(mi++, (byte) 0xD1); 28093 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 28094 } else { 28095 setMachineCodes(mi++, (byte) 0xC1); 28096 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 28097 emitImm8((byte)imm); 28098 } 28099 if (lister != null) lister.RDI(miStart, "RCL", dstBase, dstDisp, imm); 28100 } 28101 28102 /** 28103 * Generate a register-offset--immediate RCL. That is, 28104 * <PRE> 28105 * rotate left with carry of [dstIndex<<dstScale + dstDisp] by imm 28106 * </PRE> 28107 * 28108 * @param dstIndex the destination index register 28109 * @param dstScale the destination shift amount 28110 * @param dstDisp the destination displacement 28111 * @param imm immediate 28112 */ 28113 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28114 public final void emitRCL_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 28115 int miStart = mi; 28116 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28117 // no size prefix 28118 generateREXprefix(true, null, dstIndex, null); 28119 if (imm == 1) { 28120 setMachineCodes(mi++, (byte) 0xD1); 28121 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 28122 } else { 28123 setMachineCodes(mi++, (byte) 0xC1); 28124 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 28125 emitImm8((byte)imm); 28126 } 28127 if (lister != null) lister.RFDI(miStart, "RCL", dstIndex, dstScale, dstDisp, imm); 28128 } 28129 28130 /** 28131 * Generate a absolute--immediate RCL. That is, 28132 * <PRE> 28133 * rotate left with carry of [dstDisp] by imm 28134 * </PRE> 28135 * 28136 * @param dstDisp the destination displacement 28137 * @param imm immediate 28138 */ 28139 public final void emitRCL_Abs_Imm_Quad(Address dstDisp, int imm) { 28140 int miStart = mi; 28141 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28142 // no size prefix 28143 generateREXprefix(true, null, null, null); 28144 if (imm == 1) { 28145 setMachineCodes(mi++, (byte) 0xD1); 28146 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 28147 } else { 28148 setMachineCodes(mi++, (byte) 0xC1); 28149 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 28150 emitImm8((byte)imm); 28151 } 28152 if (lister != null) lister.RAI(miStart, "RCL", dstDisp, imm); 28153 } 28154 28155 /** 28156 * Generate a register-index--immediate RCL. That is, 28157 * <PRE> 28158 * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm 28159 * </PRE> 28160 * 28161 * @param dstBase the destination base register 28162 * @param dstIndex the destination index register 28163 * @param dstScale the destination shift amount 28164 * @param dstDisp the destination displacement 28165 * @param imm immediate 28166 */ 28167 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 28168 public final void emitRCL_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 28169 int miStart = mi; 28170 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28171 // no size prefix 28172 generateREXprefix(true, null, dstIndex, dstBase); 28173 if (imm == 1) { 28174 setMachineCodes(mi++, (byte) 0xD1); 28175 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 28176 } else { 28177 setMachineCodes(mi++, (byte) 0xC1); 28178 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 28179 emitImm8((byte)imm); 28180 } 28181 if (lister != null) lister.RXDI(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, imm); 28182 } 28183 28184 /** 28185 * Generate a register--register RCL. That is, 28186 * <PRE> 28187 * rotate left with carry of dstReg by srcReg 28188 * </PRE> 28189 * 28190 * @param dstReg the destination register 28191 * @param srcReg must always be ECX 28192 */ 28193 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 28194 public final void emitRCL_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 28195 int miStart = mi; 28196 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28197 // no size prefix 28198 generateREXprefix(true, null, null, dstReg); 28199 setMachineCodes(mi++, (byte) 0xD3); 28200 emitRegRegOperands(dstReg, GPR.getForOpcode(0x2)); 28201 if (lister != null) lister.RR(miStart, "RCL", dstReg, srcReg); 28202 } 28203 28204 /** 28205 * Generate a register-indirect--register RCL. That is, 28206 * <PRE> 28207 * rotate left with carry of [dstBase] by srcReg 28208 * </PRE> 28209 * 28210 * @param dstBase the destination register 28211 * @param srcReg must always be ECX 28212 */ 28213 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 28214 public final void emitRCL_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 28215 int miStart = mi; 28216 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28217 // no size prefix 28218 generateREXprefix(true, null, null, dstBase); 28219 setMachineCodes(mi++, (byte) 0xD3); 28220 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2)); 28221 if (lister != null) lister.RNR(miStart, "RCL", dstBase, srcReg); 28222 } 28223 28224 /** 28225 * Generate a register-displacement--register RCL. That is, 28226 * <PRE> 28227 * rotate left with carry of [dstBase + dstDisp] by srcReg 28228 * </PRE> 28229 * 28230 * @param dstBase the destination base register 28231 * @param dstDisp the destination displacement 28232 * @param srcReg must always be ECX 28233 */ 28234 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 28235 public final void emitRCL_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 28236 int miStart = mi; 28237 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28238 // no size prefix 28239 generateREXprefix(true, null, null, dstBase); 28240 setMachineCodes(mi++, (byte) 0xD3); 28241 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2)); 28242 if (lister != null) lister.RDR(miStart, "RCL", dstBase, dstDisp, srcReg); 28243 } 28244 28245 /** 28246 * Generate a register-offset--register RCL. That is, 28247 * <PRE> 28248 * rotate left with carry of [dstIndex<<dstScale + dstDisp] by srcReg 28249 * </PRE> 28250 * 28251 * @param dstIndex the destination index register 28252 * @param dstScale the destination shift amount 28253 * @param dstDisp the destination displacement 28254 * @param srcReg must always be ECX 28255 */ 28256 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 28257 public final void emitRCL_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 28258 int miStart = mi; 28259 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28260 // no size prefix 28261 generateREXprefix(true, null, dstIndex, null); 28262 setMachineCodes(mi++, (byte) 0xD3); 28263 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 28264 if (lister != null) lister.RFDR(miStart, "RCL", dstIndex, dstScale, dstDisp, srcReg); 28265 } 28266 28267 /** 28268 * Generate an absolute--register RCL. That is, 28269 * <PRE> 28270 * rotate left with carry of [dstDisp] by srcReg 28271 * </PRE> 28272 * 28273 * @param dstDisp the destination displacement 28274 * @param srcReg must always be ECX 28275 */ 28276 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 28277 public final void emitRCL_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 28278 int miStart = mi; 28279 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28280 // no size prefix 28281 generateREXprefix(true, null, null, null); 28282 setMachineCodes(mi++, (byte) 0xD3); 28283 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2)); 28284 if (lister != null) lister.RAR(miStart, "RCL", dstDisp, srcReg); 28285 } 28286 28287 /** 28288 * Generate a register-displacement--register RCL. That is, 28289 * <PRE> 28290 * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 28291 * </PRE> 28292 * 28293 * @param dstBase the destination base register 28294 * @param dstIndex the destination index register 28295 * @param dstScale the destination shift amount 28296 * @param dstDisp the destination displacement 28297 * @param srcReg must always be ECX 28298 */ 28299 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 28300 public final void emitRCL_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 28301 int miStart = mi; 28302 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28303 // no size prefix 28304 generateREXprefix(true, null, dstIndex, dstBase); 28305 setMachineCodes(mi++, (byte) 0xD3); 28306 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2)); 28307 if (lister != null) lister.RXDR(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 28308 } 28309 28310 /** 28311 * Generate a register--immediate RCR. That is, 28312 * <PRE> 28313 * rotate right with carry of dstReg by imm 28314 * </PRE> 28315 * 28316 * @param dstReg the destination register 28317 * @param imm immediate 28318 */ 28319 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28320 public final void emitRCR_Reg_Imm_Byte(GPR dstReg, int imm) { 28321 int miStart = mi; 28322 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28323 // no size prefix 28324 generateREXprefix(false, null, null, dstReg); 28325 if (imm == 1) { 28326 setMachineCodes(mi++, (byte) 0xD0); 28327 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 28328 } else { 28329 setMachineCodes(mi++, (byte) 0xC0); 28330 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 28331 emitImm8((byte)imm); 28332 } 28333 if (lister != null) lister.RI(miStart, "RCR", dstReg, imm); 28334 } 28335 28336 /** 28337 * Generate a register-indirect--immediate RCR. That is, 28338 * <PRE> 28339 * rotate right with carry of [dstBase] by imm 28340 * </PRE> 28341 * 28342 * @param dstBase the destination base register 28343 * @param imm immediate 28344 */ 28345 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28346 public final void emitRCR_RegInd_Imm_Byte(GPR dstBase, int imm) { 28347 int miStart = mi; 28348 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28349 // no size prefix 28350 generateREXprefix(false, null, null, dstBase); 28351 if (imm == 1) { 28352 setMachineCodes(mi++, (byte) 0xD0); 28353 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 28354 } else { 28355 setMachineCodes(mi++, (byte) 0xC0); 28356 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 28357 emitImm8((byte)imm); 28358 } 28359 if (lister != null) lister.RNI(miStart, "RCR", dstBase, imm); 28360 } 28361 28362 /** 28363 * Generate a register-displacement--immediate RCR. That is, 28364 * <PRE> 28365 * rotate right with carry of [dstBase + dstDisp] by imm 28366 * </PRE> 28367 * 28368 * @param dstBase the destination base register 28369 * @param dstDisp the destination displacement 28370 * @param imm immediate 28371 */ 28372 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28373 public final void emitRCR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 28374 int miStart = mi; 28375 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28376 // no size prefix 28377 generateREXprefix(false, null, null, dstBase); 28378 if (imm == 1) { 28379 setMachineCodes(mi++, (byte) 0xD0); 28380 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 28381 } else { 28382 setMachineCodes(mi++, (byte) 0xC0); 28383 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 28384 emitImm8((byte)imm); 28385 } 28386 if (lister != null) lister.RDI(miStart, "RCR", dstBase, dstDisp, imm); 28387 } 28388 28389 /** 28390 * Generate a register-offset--immediate RCR. That is, 28391 * <PRE> 28392 * rotate right with carry of [dstIndex<<dstScale + dstDisp] by imm 28393 * </PRE> 28394 * 28395 * @param dstIndex the destination index register 28396 * @param dstScale the destination shift amount 28397 * @param dstDisp the destination displacement 28398 * @param imm immediate 28399 */ 28400 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28401 public final void emitRCR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 28402 int miStart = mi; 28403 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28404 // no size prefix 28405 generateREXprefix(false, null, dstIndex, null); 28406 if (imm == 1) { 28407 setMachineCodes(mi++, (byte) 0xD0); 28408 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28409 } else { 28410 setMachineCodes(mi++, (byte) 0xC0); 28411 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28412 emitImm8((byte)imm); 28413 } 28414 if (lister != null) lister.RFDI(miStart, "RCR", dstIndex, dstScale, dstDisp, imm); 28415 } 28416 28417 /** 28418 * Generate a absolute--immediate RCR. That is, 28419 * <PRE> 28420 * rotate right with carry of [dstDisp] by imm 28421 * </PRE> 28422 * 28423 * @param dstDisp the destination displacement 28424 * @param imm immediate 28425 */ 28426 public final void emitRCR_Abs_Imm_Byte(Address dstDisp, int imm) { 28427 int miStart = mi; 28428 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28429 // no size prefix 28430 generateREXprefix(false, null, null, null); 28431 if (imm == 1) { 28432 setMachineCodes(mi++, (byte) 0xD0); 28433 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 28434 } else { 28435 setMachineCodes(mi++, (byte) 0xC0); 28436 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 28437 emitImm8((byte)imm); 28438 } 28439 if (lister != null) lister.RAI(miStart, "RCR", dstDisp, imm); 28440 } 28441 28442 /** 28443 * Generate a register-index--immediate RCR. That is, 28444 * <PRE> 28445 * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm 28446 * </PRE> 28447 * 28448 * @param dstBase the destination base register 28449 * @param dstIndex the destination index register 28450 * @param dstScale the destination shift amount 28451 * @param dstDisp the destination displacement 28452 * @param imm immediate 28453 */ 28454 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 28455 public final void emitRCR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 28456 int miStart = mi; 28457 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28458 // no size prefix 28459 generateREXprefix(false, null, dstIndex, dstBase); 28460 if (imm == 1) { 28461 setMachineCodes(mi++, (byte) 0xD0); 28462 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28463 } else { 28464 setMachineCodes(mi++, (byte) 0xC0); 28465 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28466 emitImm8((byte)imm); 28467 } 28468 if (lister != null) lister.RXDI(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, imm); 28469 } 28470 28471 /** 28472 * Generate a register--register RCR. That is, 28473 * <PRE> 28474 * rotate right with carry of dstReg by srcReg 28475 * </PRE> 28476 * 28477 * @param dstReg the destination register 28478 * @param srcReg must always be ECX 28479 */ 28480 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 28481 public final void emitRCR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 28482 int miStart = mi; 28483 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 28484 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28485 // no size prefix 28486 generateREXprefix(false, null, null, dstReg); 28487 setMachineCodes(mi++, (byte) 0xD2); 28488 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 28489 if (lister != null) lister.RR(miStart, "RCR", dstReg, srcReg); 28490 } 28491 28492 /** 28493 * Generate a register-indirect--register RCR. That is, 28494 * <PRE> 28495 * rotate right with carry of [dstBase] by srcReg 28496 * </PRE> 28497 * 28498 * @param dstBase the destination register 28499 * @param srcReg must always be ECX 28500 */ 28501 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 28502 public final void emitRCR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 28503 int miStart = mi; 28504 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28505 // no size prefix 28506 generateREXprefix(false, null, null, dstBase); 28507 setMachineCodes(mi++, (byte) 0xD2); 28508 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 28509 if (lister != null) lister.RNR(miStart, "RCR", dstBase, srcReg); 28510 } 28511 28512 /** 28513 * Generate a register-displacement--register RCR. That is, 28514 * <PRE> 28515 * rotate right with carry of [dstBase + dstDisp] by srcReg 28516 * </PRE> 28517 * 28518 * @param dstBase the destination base register 28519 * @param dstDisp the destination displacement 28520 * @param srcReg must always be ECX 28521 */ 28522 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 28523 public final void emitRCR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 28524 int miStart = mi; 28525 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28526 // no size prefix 28527 generateREXprefix(false, null, null, dstBase); 28528 setMachineCodes(mi++, (byte) 0xD2); 28529 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 28530 if (lister != null) lister.RDR(miStart, "RCR", dstBase, dstDisp, srcReg); 28531 } 28532 28533 /** 28534 * Generate a register-offset--register RCR. That is, 28535 * <PRE> 28536 * rotate right with carry of [dstIndex<<dstScale + dstDisp] by srcReg 28537 * </PRE> 28538 * 28539 * @param dstIndex the destination index register 28540 * @param dstScale the destination shift amount 28541 * @param dstDisp the destination displacement 28542 * @param srcReg must always be ECX 28543 */ 28544 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 28545 public final void emitRCR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 28546 int miStart = mi; 28547 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28548 // no size prefix 28549 generateREXprefix(false, null, dstIndex, null); 28550 setMachineCodes(mi++, (byte) 0xD2); 28551 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28552 if (lister != null) lister.RFDR(miStart, "RCR", dstIndex, dstScale, dstDisp, srcReg); 28553 } 28554 28555 /** 28556 * Generate an absolute--register RCR. That is, 28557 * <PRE> 28558 * rotate right with carry of [dstDisp] by srcReg 28559 * </PRE> 28560 * 28561 * @param dstDisp the destination displacement 28562 * @param srcReg must always be ECX 28563 */ 28564 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 28565 public final void emitRCR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 28566 int miStart = mi; 28567 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28568 // no size prefix 28569 generateREXprefix(false, null, null, null); 28570 setMachineCodes(mi++, (byte) 0xD2); 28571 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 28572 if (lister != null) lister.RAR(miStart, "RCR", dstDisp, srcReg); 28573 } 28574 28575 /** 28576 * Generate a register-displacement--register RCR. That is, 28577 * <PRE> 28578 * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 28579 * </PRE> 28580 * 28581 * @param dstBase the destination base register 28582 * @param dstIndex the destination index register 28583 * @param dstScale the destination shift amount 28584 * @param dstDisp the destination displacement 28585 * @param srcReg must always be ECX 28586 */ 28587 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 28588 public final void emitRCR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 28589 int miStart = mi; 28590 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28591 // no size prefix 28592 generateREXprefix(false, null, dstIndex, dstBase); 28593 setMachineCodes(mi++, (byte) 0xD2); 28594 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28595 if (lister != null) lister.RXDR(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 28596 } 28597 28598 /** 28599 * Generate a register--immediate RCR. That is, 28600 * <PRE> 28601 * rotate right with carry of dstReg by imm 28602 * </PRE> 28603 * 28604 * @param dstReg the destination register 28605 * @param imm immediate 28606 */ 28607 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28608 public final void emitRCR_Reg_Imm_Word(GPR dstReg, int imm) { 28609 int miStart = mi; 28610 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28611 setMachineCodes(mi++, (byte) 0x66); 28612 generateREXprefix(false, null, null, dstReg); 28613 if (imm == 1) { 28614 setMachineCodes(mi++, (byte) 0xD1); 28615 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 28616 } else { 28617 setMachineCodes(mi++, (byte) 0xC1); 28618 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 28619 emitImm8((byte)imm); 28620 } 28621 if (lister != null) lister.RI(miStart, "RCR", dstReg, imm); 28622 } 28623 28624 /** 28625 * Generate a register-indirect--immediate RCR. That is, 28626 * <PRE> 28627 * rotate right with carry of [dstBase] by imm 28628 * </PRE> 28629 * 28630 * @param dstBase the destination base register 28631 * @param imm immediate 28632 */ 28633 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28634 public final void emitRCR_RegInd_Imm_Word(GPR dstBase, int imm) { 28635 int miStart = mi; 28636 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28637 setMachineCodes(mi++, (byte) 0x66); 28638 generateREXprefix(false, null, null, dstBase); 28639 if (imm == 1) { 28640 setMachineCodes(mi++, (byte) 0xD1); 28641 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 28642 } else { 28643 setMachineCodes(mi++, (byte) 0xC1); 28644 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 28645 emitImm8((byte)imm); 28646 } 28647 if (lister != null) lister.RNI(miStart, "RCR", dstBase, imm); 28648 } 28649 28650 /** 28651 * Generate a register-displacement--immediate RCR. That is, 28652 * <PRE> 28653 * rotate right with carry of [dstBase + dstDisp] by imm 28654 * </PRE> 28655 * 28656 * @param dstBase the destination base register 28657 * @param dstDisp the destination displacement 28658 * @param imm immediate 28659 */ 28660 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28661 public final void emitRCR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 28662 int miStart = mi; 28663 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28664 setMachineCodes(mi++, (byte) 0x66); 28665 generateREXprefix(false, null, null, dstBase); 28666 if (imm == 1) { 28667 setMachineCodes(mi++, (byte) 0xD1); 28668 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 28669 } else { 28670 setMachineCodes(mi++, (byte) 0xC1); 28671 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 28672 emitImm8((byte)imm); 28673 } 28674 if (lister != null) lister.RDI(miStart, "RCR", dstBase, dstDisp, imm); 28675 } 28676 28677 /** 28678 * Generate a register-offset--immediate RCR. That is, 28679 * <PRE> 28680 * rotate right with carry of [dstIndex<<dstScale + dstDisp] by imm 28681 * </PRE> 28682 * 28683 * @param dstIndex the destination index register 28684 * @param dstScale the destination shift amount 28685 * @param dstDisp the destination displacement 28686 * @param imm immediate 28687 */ 28688 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28689 public final void emitRCR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 28690 int miStart = mi; 28691 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28692 setMachineCodes(mi++, (byte) 0x66); 28693 generateREXprefix(false, null, dstIndex, null); 28694 if (imm == 1) { 28695 setMachineCodes(mi++, (byte) 0xD1); 28696 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28697 } else { 28698 setMachineCodes(mi++, (byte) 0xC1); 28699 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28700 emitImm8((byte)imm); 28701 } 28702 if (lister != null) lister.RFDI(miStart, "RCR", dstIndex, dstScale, dstDisp, imm); 28703 } 28704 28705 /** 28706 * Generate a absolute--immediate RCR. That is, 28707 * <PRE> 28708 * rotate right with carry of [dstDisp] by imm 28709 * </PRE> 28710 * 28711 * @param dstDisp the destination displacement 28712 * @param imm immediate 28713 */ 28714 public final void emitRCR_Abs_Imm_Word(Address dstDisp, int imm) { 28715 int miStart = mi; 28716 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28717 setMachineCodes(mi++, (byte) 0x66); 28718 generateREXprefix(false, null, null, null); 28719 if (imm == 1) { 28720 setMachineCodes(mi++, (byte) 0xD1); 28721 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 28722 } else { 28723 setMachineCodes(mi++, (byte) 0xC1); 28724 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 28725 emitImm8((byte)imm); 28726 } 28727 if (lister != null) lister.RAI(miStart, "RCR", dstDisp, imm); 28728 } 28729 28730 /** 28731 * Generate a register-index--immediate RCR. That is, 28732 * <PRE> 28733 * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm 28734 * </PRE> 28735 * 28736 * @param dstBase the destination base register 28737 * @param dstIndex the destination index register 28738 * @param dstScale the destination shift amount 28739 * @param dstDisp the destination displacement 28740 * @param imm immediate 28741 */ 28742 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 28743 public final void emitRCR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 28744 int miStart = mi; 28745 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28746 setMachineCodes(mi++, (byte) 0x66); 28747 generateREXprefix(false, null, dstIndex, dstBase); 28748 if (imm == 1) { 28749 setMachineCodes(mi++, (byte) 0xD1); 28750 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28751 } else { 28752 setMachineCodes(mi++, (byte) 0xC1); 28753 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28754 emitImm8((byte)imm); 28755 } 28756 if (lister != null) lister.RXDI(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, imm); 28757 } 28758 28759 /** 28760 * Generate a register--register RCR. That is, 28761 * <PRE> 28762 * rotate right with carry of dstReg by srcReg 28763 * </PRE> 28764 * 28765 * @param dstReg the destination register 28766 * @param srcReg must always be ECX 28767 */ 28768 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 28769 public final void emitRCR_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 28770 int miStart = mi; 28771 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28772 setMachineCodes(mi++, (byte) 0x66); 28773 generateREXprefix(false, null, null, dstReg); 28774 setMachineCodes(mi++, (byte) 0xD3); 28775 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 28776 if (lister != null) lister.RR(miStart, "RCR", dstReg, srcReg); 28777 } 28778 28779 /** 28780 * Generate a register-indirect--register RCR. That is, 28781 * <PRE> 28782 * rotate right with carry of [dstBase] by srcReg 28783 * </PRE> 28784 * 28785 * @param dstBase the destination register 28786 * @param srcReg must always be ECX 28787 */ 28788 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 28789 public final void emitRCR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 28790 int miStart = mi; 28791 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28792 setMachineCodes(mi++, (byte) 0x66); 28793 generateREXprefix(false, null, null, dstBase); 28794 setMachineCodes(mi++, (byte) 0xD3); 28795 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 28796 if (lister != null) lister.RNR(miStart, "RCR", dstBase, srcReg); 28797 } 28798 28799 /** 28800 * Generate a register-displacement--register RCR. That is, 28801 * <PRE> 28802 * rotate right with carry of [dstBase + dstDisp] by srcReg 28803 * </PRE> 28804 * 28805 * @param dstBase the destination base register 28806 * @param dstDisp the destination displacement 28807 * @param srcReg must always be ECX 28808 */ 28809 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 28810 public final void emitRCR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 28811 int miStart = mi; 28812 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28813 setMachineCodes(mi++, (byte) 0x66); 28814 generateREXprefix(false, null, null, dstBase); 28815 setMachineCodes(mi++, (byte) 0xD3); 28816 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 28817 if (lister != null) lister.RDR(miStart, "RCR", dstBase, dstDisp, srcReg); 28818 } 28819 28820 /** 28821 * Generate a register-offset--register RCR. That is, 28822 * <PRE> 28823 * rotate right with carry of [dstIndex<<dstScale + dstDisp] by srcReg 28824 * </PRE> 28825 * 28826 * @param dstIndex the destination index register 28827 * @param dstScale the destination shift amount 28828 * @param dstDisp the destination displacement 28829 * @param srcReg must always be ECX 28830 */ 28831 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 28832 public final void emitRCR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 28833 int miStart = mi; 28834 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28835 setMachineCodes(mi++, (byte) 0x66); 28836 generateREXprefix(false, null, dstIndex, null); 28837 setMachineCodes(mi++, (byte) 0xD3); 28838 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28839 if (lister != null) lister.RFDR(miStart, "RCR", dstIndex, dstScale, dstDisp, srcReg); 28840 } 28841 28842 /** 28843 * Generate an absolute--register RCR. That is, 28844 * <PRE> 28845 * rotate right with carry of [dstDisp] by srcReg 28846 * </PRE> 28847 * 28848 * @param dstDisp the destination displacement 28849 * @param srcReg must always be ECX 28850 */ 28851 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 28852 public final void emitRCR_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 28853 int miStart = mi; 28854 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28855 setMachineCodes(mi++, (byte) 0x66); 28856 generateREXprefix(false, null, null, null); 28857 setMachineCodes(mi++, (byte) 0xD3); 28858 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 28859 if (lister != null) lister.RAR(miStart, "RCR", dstDisp, srcReg); 28860 } 28861 28862 /** 28863 * Generate a register-displacement--register RCR. That is, 28864 * <PRE> 28865 * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 28866 * </PRE> 28867 * 28868 * @param dstBase the destination base register 28869 * @param dstIndex the destination index register 28870 * @param dstScale the destination shift amount 28871 * @param dstDisp the destination displacement 28872 * @param srcReg must always be ECX 28873 */ 28874 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 28875 public final void emitRCR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 28876 int miStart = mi; 28877 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 28878 setMachineCodes(mi++, (byte) 0x66); 28879 generateREXprefix(false, null, dstIndex, dstBase); 28880 setMachineCodes(mi++, (byte) 0xD3); 28881 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28882 if (lister != null) lister.RXDR(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 28883 } 28884 28885 /** 28886 * Generate a register--immediate RCR. That is, 28887 * <PRE> 28888 * rotate right with carry of dstReg by imm 28889 * </PRE> 28890 * 28891 * @param dstReg the destination register 28892 * @param imm immediate 28893 */ 28894 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28895 public final void emitRCR_Reg_Imm(GPR dstReg, int imm) { 28896 int miStart = mi; 28897 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28898 // no size prefix 28899 generateREXprefix(false, null, null, dstReg); 28900 if (imm == 1) { 28901 setMachineCodes(mi++, (byte) 0xD1); 28902 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 28903 } else { 28904 setMachineCodes(mi++, (byte) 0xC1); 28905 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 28906 emitImm8((byte)imm); 28907 } 28908 if (lister != null) lister.RI(miStart, "RCR", dstReg, imm); 28909 } 28910 28911 /** 28912 * Generate a register-indirect--immediate RCR. That is, 28913 * <PRE> 28914 * rotate right with carry of [dstBase] by imm 28915 * </PRE> 28916 * 28917 * @param dstBase the destination base register 28918 * @param imm immediate 28919 */ 28920 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28921 public final void emitRCR_RegInd_Imm(GPR dstBase, int imm) { 28922 int miStart = mi; 28923 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28924 // no size prefix 28925 generateREXprefix(false, null, null, dstBase); 28926 if (imm == 1) { 28927 setMachineCodes(mi++, (byte) 0xD1); 28928 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 28929 } else { 28930 setMachineCodes(mi++, (byte) 0xC1); 28931 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 28932 emitImm8((byte)imm); 28933 } 28934 if (lister != null) lister.RNI(miStart, "RCR", dstBase, imm); 28935 } 28936 28937 /** 28938 * Generate a register-displacement--immediate RCR. That is, 28939 * <PRE> 28940 * rotate right with carry of [dstBase + dstDisp] by imm 28941 * </PRE> 28942 * 28943 * @param dstBase the destination base register 28944 * @param dstDisp the destination displacement 28945 * @param imm immediate 28946 */ 28947 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28948 public final void emitRCR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 28949 int miStart = mi; 28950 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28951 // no size prefix 28952 generateREXprefix(false, null, null, dstBase); 28953 if (imm == 1) { 28954 setMachineCodes(mi++, (byte) 0xD1); 28955 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 28956 } else { 28957 setMachineCodes(mi++, (byte) 0xC1); 28958 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 28959 emitImm8((byte)imm); 28960 } 28961 if (lister != null) lister.RDI(miStart, "RCR", dstBase, dstDisp, imm); 28962 } 28963 28964 /** 28965 * Generate a register-offset--immediate RCR. That is, 28966 * <PRE> 28967 * rotate right with carry of [dstIndex<<dstScale + dstDisp] by imm 28968 * </PRE> 28969 * 28970 * @param dstIndex the destination index register 28971 * @param dstScale the destination shift amount 28972 * @param dstDisp the destination displacement 28973 * @param imm immediate 28974 */ 28975 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 28976 public final void emitRCR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 28977 int miStart = mi; 28978 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 28979 // no size prefix 28980 generateREXprefix(false, null, dstIndex, null); 28981 if (imm == 1) { 28982 setMachineCodes(mi++, (byte) 0xD1); 28983 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28984 } else { 28985 setMachineCodes(mi++, (byte) 0xC1); 28986 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 28987 emitImm8((byte)imm); 28988 } 28989 if (lister != null) lister.RFDI(miStart, "RCR", dstIndex, dstScale, dstDisp, imm); 28990 } 28991 28992 /** 28993 * Generate a absolute--immediate RCR. That is, 28994 * <PRE> 28995 * rotate right with carry of [dstDisp] by imm 28996 * </PRE> 28997 * 28998 * @param dstDisp the destination displacement 28999 * @param imm immediate 29000 */ 29001 public final void emitRCR_Abs_Imm(Address dstDisp, int imm) { 29002 int miStart = mi; 29003 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29004 // no size prefix 29005 generateREXprefix(false, null, null, null); 29006 if (imm == 1) { 29007 setMachineCodes(mi++, (byte) 0xD1); 29008 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 29009 } else { 29010 setMachineCodes(mi++, (byte) 0xC1); 29011 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 29012 emitImm8((byte)imm); 29013 } 29014 if (lister != null) lister.RAI(miStart, "RCR", dstDisp, imm); 29015 } 29016 29017 /** 29018 * Generate a register-index--immediate RCR. That is, 29019 * <PRE> 29020 * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm 29021 * </PRE> 29022 * 29023 * @param dstBase the destination base register 29024 * @param dstIndex the destination index register 29025 * @param dstScale the destination shift amount 29026 * @param dstDisp the destination displacement 29027 * @param imm immediate 29028 */ 29029 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29030 public final void emitRCR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 29031 int miStart = mi; 29032 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29033 // no size prefix 29034 generateREXprefix(false, null, dstIndex, dstBase); 29035 if (imm == 1) { 29036 setMachineCodes(mi++, (byte) 0xD1); 29037 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 29038 } else { 29039 setMachineCodes(mi++, (byte) 0xC1); 29040 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 29041 emitImm8((byte)imm); 29042 } 29043 if (lister != null) lister.RXDI(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, imm); 29044 } 29045 29046 /** 29047 * Generate a register--register RCR. That is, 29048 * <PRE> 29049 * rotate right with carry of dstReg by srcReg 29050 * </PRE> 29051 * 29052 * @param dstReg the destination register 29053 * @param srcReg must always be ECX 29054 */ 29055 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29056 public final void emitRCR_Reg_Reg(GPR dstReg, GPR srcReg) { 29057 int miStart = mi; 29058 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29059 // no size prefix 29060 generateREXprefix(false, null, null, dstReg); 29061 setMachineCodes(mi++, (byte) 0xD3); 29062 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 29063 if (lister != null) lister.RR(miStart, "RCR", dstReg, srcReg); 29064 } 29065 29066 /** 29067 * Generate a register-indirect--register RCR. That is, 29068 * <PRE> 29069 * rotate right with carry of [dstBase] by srcReg 29070 * </PRE> 29071 * 29072 * @param dstBase the destination register 29073 * @param srcReg must always be ECX 29074 */ 29075 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29076 public final void emitRCR_RegInd_Reg(GPR dstBase, GPR srcReg) { 29077 int miStart = mi; 29078 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29079 // no size prefix 29080 generateREXprefix(false, null, null, dstBase); 29081 setMachineCodes(mi++, (byte) 0xD3); 29082 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 29083 if (lister != null) lister.RNR(miStart, "RCR", dstBase, srcReg); 29084 } 29085 29086 /** 29087 * Generate a register-displacement--register RCR. That is, 29088 * <PRE> 29089 * rotate right with carry of [dstBase + dstDisp] by srcReg 29090 * </PRE> 29091 * 29092 * @param dstBase the destination base register 29093 * @param dstDisp the destination displacement 29094 * @param srcReg must always be ECX 29095 */ 29096 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 29097 public final void emitRCR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 29098 int miStart = mi; 29099 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29100 // no size prefix 29101 generateREXprefix(false, null, null, dstBase); 29102 setMachineCodes(mi++, (byte) 0xD3); 29103 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 29104 if (lister != null) lister.RDR(miStart, "RCR", dstBase, dstDisp, srcReg); 29105 } 29106 29107 /** 29108 * Generate a register-offset--register RCR. That is, 29109 * <PRE> 29110 * rotate right with carry of [dstIndex<<dstScale + dstDisp] by srcReg 29111 * </PRE> 29112 * 29113 * @param dstIndex the destination index register 29114 * @param dstScale the destination shift amount 29115 * @param dstDisp the destination displacement 29116 * @param srcReg must always be ECX 29117 */ 29118 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 29119 public final void emitRCR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 29120 int miStart = mi; 29121 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29122 // no size prefix 29123 generateREXprefix(false, null, dstIndex, null); 29124 setMachineCodes(mi++, (byte) 0xD3); 29125 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 29126 if (lister != null) lister.RFDR(miStart, "RCR", dstIndex, dstScale, dstDisp, srcReg); 29127 } 29128 29129 /** 29130 * Generate an absolute--register RCR. That is, 29131 * <PRE> 29132 * rotate right with carry of [dstDisp] by srcReg 29133 * </PRE> 29134 * 29135 * @param dstDisp the destination displacement 29136 * @param srcReg must always be ECX 29137 */ 29138 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 29139 public final void emitRCR_Abs_Reg(Address dstDisp, GPR srcReg) { 29140 int miStart = mi; 29141 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29142 // no size prefix 29143 generateREXprefix(false, null, null, null); 29144 setMachineCodes(mi++, (byte) 0xD3); 29145 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 29146 if (lister != null) lister.RAR(miStart, "RCR", dstDisp, srcReg); 29147 } 29148 29149 /** 29150 * Generate a register-displacement--register RCR. That is, 29151 * <PRE> 29152 * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 29153 * </PRE> 29154 * 29155 * @param dstBase the destination base register 29156 * @param dstIndex the destination index register 29157 * @param dstScale the destination shift amount 29158 * @param dstDisp the destination displacement 29159 * @param srcReg must always be ECX 29160 */ 29161 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 29162 public final void emitRCR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 29163 int miStart = mi; 29164 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29165 // no size prefix 29166 generateREXprefix(false, null, dstIndex, dstBase); 29167 setMachineCodes(mi++, (byte) 0xD3); 29168 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 29169 if (lister != null) lister.RXDR(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 29170 } 29171 29172 /** 29173 * Generate a register--immediate RCR. That is, 29174 * <PRE> 29175 * rotate right with carry of dstReg by imm 29176 * </PRE> 29177 * 29178 * @param dstReg the destination register 29179 * @param imm immediate 29180 */ 29181 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29182 public final void emitRCR_Reg_Imm_Quad(GPR dstReg, int imm) { 29183 int miStart = mi; 29184 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29185 // no size prefix 29186 generateREXprefix(true, null, null, dstReg); 29187 if (imm == 1) { 29188 setMachineCodes(mi++, (byte) 0xD1); 29189 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 29190 } else { 29191 setMachineCodes(mi++, (byte) 0xC1); 29192 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 29193 emitImm8((byte)imm); 29194 } 29195 if (lister != null) lister.RI(miStart, "RCR", dstReg, imm); 29196 } 29197 29198 /** 29199 * Generate a register-indirect--immediate RCR. That is, 29200 * <PRE> 29201 * rotate right with carry of [dstBase] by imm 29202 * </PRE> 29203 * 29204 * @param dstBase the destination base register 29205 * @param imm immediate 29206 */ 29207 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29208 public final void emitRCR_RegInd_Imm_Quad(GPR dstBase, int imm) { 29209 int miStart = mi; 29210 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29211 // no size prefix 29212 generateREXprefix(true, null, null, dstBase); 29213 if (imm == 1) { 29214 setMachineCodes(mi++, (byte) 0xD1); 29215 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 29216 } else { 29217 setMachineCodes(mi++, (byte) 0xC1); 29218 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 29219 emitImm8((byte)imm); 29220 } 29221 if (lister != null) lister.RNI(miStart, "RCR", dstBase, imm); 29222 } 29223 29224 /** 29225 * Generate a register-displacement--immediate RCR. That is, 29226 * <PRE> 29227 * rotate right with carry of [dstBase + dstDisp] by imm 29228 * </PRE> 29229 * 29230 * @param dstBase the destination base register 29231 * @param dstDisp the destination displacement 29232 * @param imm immediate 29233 */ 29234 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29235 public final void emitRCR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 29236 int miStart = mi; 29237 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29238 // no size prefix 29239 generateREXprefix(true, null, null, dstBase); 29240 if (imm == 1) { 29241 setMachineCodes(mi++, (byte) 0xD1); 29242 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 29243 } else { 29244 setMachineCodes(mi++, (byte) 0xC1); 29245 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 29246 emitImm8((byte)imm); 29247 } 29248 if (lister != null) lister.RDI(miStart, "RCR", dstBase, dstDisp, imm); 29249 } 29250 29251 /** 29252 * Generate a register-offset--immediate RCR. That is, 29253 * <PRE> 29254 * rotate right with carry of [dstIndex<<dstScale + dstDisp] by imm 29255 * </PRE> 29256 * 29257 * @param dstIndex the destination index register 29258 * @param dstScale the destination shift amount 29259 * @param dstDisp the destination displacement 29260 * @param imm immediate 29261 */ 29262 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29263 public final void emitRCR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 29264 int miStart = mi; 29265 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29266 // no size prefix 29267 generateREXprefix(true, null, dstIndex, null); 29268 if (imm == 1) { 29269 setMachineCodes(mi++, (byte) 0xD1); 29270 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 29271 } else { 29272 setMachineCodes(mi++, (byte) 0xC1); 29273 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 29274 emitImm8((byte)imm); 29275 } 29276 if (lister != null) lister.RFDI(miStart, "RCR", dstIndex, dstScale, dstDisp, imm); 29277 } 29278 29279 /** 29280 * Generate a absolute--immediate RCR. That is, 29281 * <PRE> 29282 * rotate right with carry of [dstDisp] by imm 29283 * </PRE> 29284 * 29285 * @param dstDisp the destination displacement 29286 * @param imm immediate 29287 */ 29288 public final void emitRCR_Abs_Imm_Quad(Address dstDisp, int imm) { 29289 int miStart = mi; 29290 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29291 // no size prefix 29292 generateREXprefix(true, null, null, null); 29293 if (imm == 1) { 29294 setMachineCodes(mi++, (byte) 0xD1); 29295 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 29296 } else { 29297 setMachineCodes(mi++, (byte) 0xC1); 29298 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 29299 emitImm8((byte)imm); 29300 } 29301 if (lister != null) lister.RAI(miStart, "RCR", dstDisp, imm); 29302 } 29303 29304 /** 29305 * Generate a register-index--immediate RCR. That is, 29306 * <PRE> 29307 * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm 29308 * </PRE> 29309 * 29310 * @param dstBase the destination base register 29311 * @param dstIndex the destination index register 29312 * @param dstScale the destination shift amount 29313 * @param dstDisp the destination displacement 29314 * @param imm immediate 29315 */ 29316 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29317 public final void emitRCR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 29318 int miStart = mi; 29319 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29320 // no size prefix 29321 generateREXprefix(true, null, dstIndex, dstBase); 29322 if (imm == 1) { 29323 setMachineCodes(mi++, (byte) 0xD1); 29324 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 29325 } else { 29326 setMachineCodes(mi++, (byte) 0xC1); 29327 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 29328 emitImm8((byte)imm); 29329 } 29330 if (lister != null) lister.RXDI(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, imm); 29331 } 29332 29333 /** 29334 * Generate a register--register RCR. That is, 29335 * <PRE> 29336 * rotate right with carry of dstReg by srcReg 29337 * </PRE> 29338 * 29339 * @param dstReg the destination register 29340 * @param srcReg must always be ECX 29341 */ 29342 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29343 public final void emitRCR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 29344 int miStart = mi; 29345 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29346 // no size prefix 29347 generateREXprefix(true, null, null, dstReg); 29348 setMachineCodes(mi++, (byte) 0xD3); 29349 emitRegRegOperands(dstReg, GPR.getForOpcode(0x3)); 29350 if (lister != null) lister.RR(miStart, "RCR", dstReg, srcReg); 29351 } 29352 29353 /** 29354 * Generate a register-indirect--register RCR. That is, 29355 * <PRE> 29356 * rotate right with carry of [dstBase] by srcReg 29357 * </PRE> 29358 * 29359 * @param dstBase the destination register 29360 * @param srcReg must always be ECX 29361 */ 29362 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29363 public final void emitRCR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 29364 int miStart = mi; 29365 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29366 // no size prefix 29367 generateREXprefix(true, null, null, dstBase); 29368 setMachineCodes(mi++, (byte) 0xD3); 29369 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3)); 29370 if (lister != null) lister.RNR(miStart, "RCR", dstBase, srcReg); 29371 } 29372 29373 /** 29374 * Generate a register-displacement--register RCR. That is, 29375 * <PRE> 29376 * rotate right with carry of [dstBase + dstDisp] by srcReg 29377 * </PRE> 29378 * 29379 * @param dstBase the destination base register 29380 * @param dstDisp the destination displacement 29381 * @param srcReg must always be ECX 29382 */ 29383 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 29384 public final void emitRCR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 29385 int miStart = mi; 29386 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29387 // no size prefix 29388 generateREXprefix(true, null, null, dstBase); 29389 setMachineCodes(mi++, (byte) 0xD3); 29390 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3)); 29391 if (lister != null) lister.RDR(miStart, "RCR", dstBase, dstDisp, srcReg); 29392 } 29393 29394 /** 29395 * Generate a register-offset--register RCR. That is, 29396 * <PRE> 29397 * rotate right with carry of [dstIndex<<dstScale + dstDisp] by srcReg 29398 * </PRE> 29399 * 29400 * @param dstIndex the destination index register 29401 * @param dstScale the destination shift amount 29402 * @param dstDisp the destination displacement 29403 * @param srcReg must always be ECX 29404 */ 29405 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 29406 public final void emitRCR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 29407 int miStart = mi; 29408 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29409 // no size prefix 29410 generateREXprefix(true, null, dstIndex, null); 29411 setMachineCodes(mi++, (byte) 0xD3); 29412 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 29413 if (lister != null) lister.RFDR(miStart, "RCR", dstIndex, dstScale, dstDisp, srcReg); 29414 } 29415 29416 /** 29417 * Generate an absolute--register RCR. That is, 29418 * <PRE> 29419 * rotate right with carry of [dstDisp] by srcReg 29420 * </PRE> 29421 * 29422 * @param dstDisp the destination displacement 29423 * @param srcReg must always be ECX 29424 */ 29425 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 29426 public final void emitRCR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 29427 int miStart = mi; 29428 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29429 // no size prefix 29430 generateREXprefix(true, null, null, null); 29431 setMachineCodes(mi++, (byte) 0xD3); 29432 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3)); 29433 if (lister != null) lister.RAR(miStart, "RCR", dstDisp, srcReg); 29434 } 29435 29436 /** 29437 * Generate a register-displacement--register RCR. That is, 29438 * <PRE> 29439 * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 29440 * </PRE> 29441 * 29442 * @param dstBase the destination base register 29443 * @param dstIndex the destination index register 29444 * @param dstScale the destination shift amount 29445 * @param dstDisp the destination displacement 29446 * @param srcReg must always be ECX 29447 */ 29448 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 29449 public final void emitRCR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 29450 int miStart = mi; 29451 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29452 // no size prefix 29453 generateREXprefix(true, null, dstIndex, dstBase); 29454 setMachineCodes(mi++, (byte) 0xD3); 29455 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3)); 29456 if (lister != null) lister.RXDR(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 29457 } 29458 29459 /** 29460 * Generate a register--immediate SAL. That is, 29461 * <PRE> 29462 * arithemetic shift left of dstReg by imm 29463 * </PRE> 29464 * 29465 * @param dstReg the destination register 29466 * @param imm immediate 29467 */ 29468 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29469 public final void emitSAL_Reg_Imm_Byte(GPR dstReg, int imm) { 29470 int miStart = mi; 29471 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29472 // no size prefix 29473 generateREXprefix(false, null, null, dstReg); 29474 if (imm == 1) { 29475 setMachineCodes(mi++, (byte) 0xD0); 29476 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 29477 } else { 29478 setMachineCodes(mi++, (byte) 0xC0); 29479 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 29480 emitImm8((byte)imm); 29481 } 29482 if (lister != null) lister.RI(miStart, "SAL", dstReg, imm); 29483 } 29484 29485 /** 29486 * Generate a register-indirect--immediate SAL. That is, 29487 * <PRE> 29488 * arithemetic shift left of [dstBase] by imm 29489 * </PRE> 29490 * 29491 * @param dstBase the destination base register 29492 * @param imm immediate 29493 */ 29494 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29495 public final void emitSAL_RegInd_Imm_Byte(GPR dstBase, int imm) { 29496 int miStart = mi; 29497 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29498 // no size prefix 29499 generateREXprefix(false, null, null, dstBase); 29500 if (imm == 1) { 29501 setMachineCodes(mi++, (byte) 0xD0); 29502 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 29503 } else { 29504 setMachineCodes(mi++, (byte) 0xC0); 29505 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 29506 emitImm8((byte)imm); 29507 } 29508 if (lister != null) lister.RNI(miStart, "SAL", dstBase, imm); 29509 } 29510 29511 /** 29512 * Generate a register-displacement--immediate SAL. That is, 29513 * <PRE> 29514 * arithemetic shift left of [dstBase + dstDisp] by imm 29515 * </PRE> 29516 * 29517 * @param dstBase the destination base register 29518 * @param dstDisp the destination displacement 29519 * @param imm immediate 29520 */ 29521 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29522 public final void emitSAL_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 29523 int miStart = mi; 29524 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29525 // no size prefix 29526 generateREXprefix(false, null, null, dstBase); 29527 if (imm == 1) { 29528 setMachineCodes(mi++, (byte) 0xD0); 29529 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 29530 } else { 29531 setMachineCodes(mi++, (byte) 0xC0); 29532 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 29533 emitImm8((byte)imm); 29534 } 29535 if (lister != null) lister.RDI(miStart, "SAL", dstBase, dstDisp, imm); 29536 } 29537 29538 /** 29539 * Generate a register-offset--immediate SAL. That is, 29540 * <PRE> 29541 * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by imm 29542 * </PRE> 29543 * 29544 * @param dstIndex the destination index register 29545 * @param dstScale the destination shift amount 29546 * @param dstDisp the destination displacement 29547 * @param imm immediate 29548 */ 29549 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29550 public final void emitSAL_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 29551 int miStart = mi; 29552 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29553 // no size prefix 29554 generateREXprefix(false, null, dstIndex, null); 29555 if (imm == 1) { 29556 setMachineCodes(mi++, (byte) 0xD0); 29557 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29558 } else { 29559 setMachineCodes(mi++, (byte) 0xC0); 29560 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29561 emitImm8((byte)imm); 29562 } 29563 if (lister != null) lister.RFDI(miStart, "SAL", dstIndex, dstScale, dstDisp, imm); 29564 } 29565 29566 /** 29567 * Generate a absolute--immediate SAL. That is, 29568 * <PRE> 29569 * arithemetic shift left of [dstDisp] by imm 29570 * </PRE> 29571 * 29572 * @param dstDisp the destination displacement 29573 * @param imm immediate 29574 */ 29575 public final void emitSAL_Abs_Imm_Byte(Address dstDisp, int imm) { 29576 int miStart = mi; 29577 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29578 // no size prefix 29579 generateREXprefix(false, null, null, null); 29580 if (imm == 1) { 29581 setMachineCodes(mi++, (byte) 0xD0); 29582 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 29583 } else { 29584 setMachineCodes(mi++, (byte) 0xC0); 29585 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 29586 emitImm8((byte)imm); 29587 } 29588 if (lister != null) lister.RAI(miStart, "SAL", dstDisp, imm); 29589 } 29590 29591 /** 29592 * Generate a register-index--immediate SAL. That is, 29593 * <PRE> 29594 * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 29595 * </PRE> 29596 * 29597 * @param dstBase the destination base register 29598 * @param dstIndex the destination index register 29599 * @param dstScale the destination shift amount 29600 * @param dstDisp the destination displacement 29601 * @param imm immediate 29602 */ 29603 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29604 public final void emitSAL_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 29605 int miStart = mi; 29606 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29607 // no size prefix 29608 generateREXprefix(false, null, dstIndex, dstBase); 29609 if (imm == 1) { 29610 setMachineCodes(mi++, (byte) 0xD0); 29611 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29612 } else { 29613 setMachineCodes(mi++, (byte) 0xC0); 29614 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29615 emitImm8((byte)imm); 29616 } 29617 if (lister != null) lister.RXDI(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, imm); 29618 } 29619 29620 /** 29621 * Generate a register--register SAL. That is, 29622 * <PRE> 29623 * arithemetic shift left of dstReg by srcReg 29624 * </PRE> 29625 * 29626 * @param dstReg the destination register 29627 * @param srcReg must always be ECX 29628 */ 29629 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29630 public final void emitSAL_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 29631 int miStart = mi; 29632 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 29633 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29634 // no size prefix 29635 generateREXprefix(false, null, null, dstReg); 29636 setMachineCodes(mi++, (byte) 0xD2); 29637 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 29638 if (lister != null) lister.RR(miStart, "SAL", dstReg, srcReg); 29639 } 29640 29641 /** 29642 * Generate a register-indirect--register SAL. That is, 29643 * <PRE> 29644 * arithemetic shift left of [dstBase] by srcReg 29645 * </PRE> 29646 * 29647 * @param dstBase the destination register 29648 * @param srcReg must always be ECX 29649 */ 29650 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29651 public final void emitSAL_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 29652 int miStart = mi; 29653 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29654 // no size prefix 29655 generateREXprefix(false, null, null, dstBase); 29656 setMachineCodes(mi++, (byte) 0xD2); 29657 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 29658 if (lister != null) lister.RNR(miStart, "SAL", dstBase, srcReg); 29659 } 29660 29661 /** 29662 * Generate a register-displacement--register SAL. That is, 29663 * <PRE> 29664 * arithemetic shift left of [dstBase + dstDisp] by srcReg 29665 * </PRE> 29666 * 29667 * @param dstBase the destination base register 29668 * @param dstDisp the destination displacement 29669 * @param srcReg must always be ECX 29670 */ 29671 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 29672 public final void emitSAL_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 29673 int miStart = mi; 29674 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29675 // no size prefix 29676 generateREXprefix(false, null, null, dstBase); 29677 setMachineCodes(mi++, (byte) 0xD2); 29678 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 29679 if (lister != null) lister.RDR(miStart, "SAL", dstBase, dstDisp, srcReg); 29680 } 29681 29682 /** 29683 * Generate a register-offset--register SAL. That is, 29684 * <PRE> 29685 * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by srcReg 29686 * </PRE> 29687 * 29688 * @param dstIndex the destination index register 29689 * @param dstScale the destination shift amount 29690 * @param dstDisp the destination displacement 29691 * @param srcReg must always be ECX 29692 */ 29693 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 29694 public final void emitSAL_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 29695 int miStart = mi; 29696 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29697 // no size prefix 29698 generateREXprefix(false, null, dstIndex, null); 29699 setMachineCodes(mi++, (byte) 0xD2); 29700 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29701 if (lister != null) lister.RFDR(miStart, "SAL", dstIndex, dstScale, dstDisp, srcReg); 29702 } 29703 29704 /** 29705 * Generate an absolute--register SAL. That is, 29706 * <PRE> 29707 * arithemetic shift left of [dstDisp] by srcReg 29708 * </PRE> 29709 * 29710 * @param dstDisp the destination displacement 29711 * @param srcReg must always be ECX 29712 */ 29713 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 29714 public final void emitSAL_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 29715 int miStart = mi; 29716 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29717 // no size prefix 29718 generateREXprefix(false, null, null, null); 29719 setMachineCodes(mi++, (byte) 0xD2); 29720 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 29721 if (lister != null) lister.RAR(miStart, "SAL", dstDisp, srcReg); 29722 } 29723 29724 /** 29725 * Generate a register-displacement--register SAL. That is, 29726 * <PRE> 29727 * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 29728 * </PRE> 29729 * 29730 * @param dstBase the destination base register 29731 * @param dstIndex the destination index register 29732 * @param dstScale the destination shift amount 29733 * @param dstDisp the destination displacement 29734 * @param srcReg must always be ECX 29735 */ 29736 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 29737 public final void emitSAL_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 29738 int miStart = mi; 29739 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29740 // no size prefix 29741 generateREXprefix(false, null, dstIndex, dstBase); 29742 setMachineCodes(mi++, (byte) 0xD2); 29743 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29744 if (lister != null) lister.RXDR(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 29745 } 29746 29747 /** 29748 * Generate a register--immediate SAL. That is, 29749 * <PRE> 29750 * arithemetic shift left of dstReg by imm 29751 * </PRE> 29752 * 29753 * @param dstReg the destination register 29754 * @param imm immediate 29755 */ 29756 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29757 public final void emitSAL_Reg_Imm_Word(GPR dstReg, int imm) { 29758 int miStart = mi; 29759 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29760 setMachineCodes(mi++, (byte) 0x66); 29761 generateREXprefix(false, null, null, dstReg); 29762 if (imm == 1) { 29763 setMachineCodes(mi++, (byte) 0xD1); 29764 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 29765 } else { 29766 setMachineCodes(mi++, (byte) 0xC1); 29767 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 29768 emitImm8((byte)imm); 29769 } 29770 if (lister != null) lister.RI(miStart, "SAL", dstReg, imm); 29771 } 29772 29773 /** 29774 * Generate a register-indirect--immediate SAL. That is, 29775 * <PRE> 29776 * arithemetic shift left of [dstBase] by imm 29777 * </PRE> 29778 * 29779 * @param dstBase the destination base register 29780 * @param imm immediate 29781 */ 29782 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29783 public final void emitSAL_RegInd_Imm_Word(GPR dstBase, int imm) { 29784 int miStart = mi; 29785 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29786 setMachineCodes(mi++, (byte) 0x66); 29787 generateREXprefix(false, null, null, dstBase); 29788 if (imm == 1) { 29789 setMachineCodes(mi++, (byte) 0xD1); 29790 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 29791 } else { 29792 setMachineCodes(mi++, (byte) 0xC1); 29793 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 29794 emitImm8((byte)imm); 29795 } 29796 if (lister != null) lister.RNI(miStart, "SAL", dstBase, imm); 29797 } 29798 29799 /** 29800 * Generate a register-displacement--immediate SAL. That is, 29801 * <PRE> 29802 * arithemetic shift left of [dstBase + dstDisp] by imm 29803 * </PRE> 29804 * 29805 * @param dstBase the destination base register 29806 * @param dstDisp the destination displacement 29807 * @param imm immediate 29808 */ 29809 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29810 public final void emitSAL_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 29811 int miStart = mi; 29812 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29813 setMachineCodes(mi++, (byte) 0x66); 29814 generateREXprefix(false, null, null, dstBase); 29815 if (imm == 1) { 29816 setMachineCodes(mi++, (byte) 0xD1); 29817 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 29818 } else { 29819 setMachineCodes(mi++, (byte) 0xC1); 29820 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 29821 emitImm8((byte)imm); 29822 } 29823 if (lister != null) lister.RDI(miStart, "SAL", dstBase, dstDisp, imm); 29824 } 29825 29826 /** 29827 * Generate a register-offset--immediate SAL. That is, 29828 * <PRE> 29829 * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by imm 29830 * </PRE> 29831 * 29832 * @param dstIndex the destination index register 29833 * @param dstScale the destination shift amount 29834 * @param dstDisp the destination displacement 29835 * @param imm immediate 29836 */ 29837 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 29838 public final void emitSAL_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 29839 int miStart = mi; 29840 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29841 setMachineCodes(mi++, (byte) 0x66); 29842 generateREXprefix(false, null, dstIndex, null); 29843 if (imm == 1) { 29844 setMachineCodes(mi++, (byte) 0xD1); 29845 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29846 } else { 29847 setMachineCodes(mi++, (byte) 0xC1); 29848 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29849 emitImm8((byte)imm); 29850 } 29851 if (lister != null) lister.RFDI(miStart, "SAL", dstIndex, dstScale, dstDisp, imm); 29852 } 29853 29854 /** 29855 * Generate a absolute--immediate SAL. That is, 29856 * <PRE> 29857 * arithemetic shift left of [dstDisp] by imm 29858 * </PRE> 29859 * 29860 * @param dstDisp the destination displacement 29861 * @param imm immediate 29862 */ 29863 public final void emitSAL_Abs_Imm_Word(Address dstDisp, int imm) { 29864 int miStart = mi; 29865 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29866 setMachineCodes(mi++, (byte) 0x66); 29867 generateREXprefix(false, null, null, null); 29868 if (imm == 1) { 29869 setMachineCodes(mi++, (byte) 0xD1); 29870 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 29871 } else { 29872 setMachineCodes(mi++, (byte) 0xC1); 29873 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 29874 emitImm8((byte)imm); 29875 } 29876 if (lister != null) lister.RAI(miStart, "SAL", dstDisp, imm); 29877 } 29878 29879 /** 29880 * Generate a register-index--immediate SAL. That is, 29881 * <PRE> 29882 * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 29883 * </PRE> 29884 * 29885 * @param dstBase the destination base register 29886 * @param dstIndex the destination index register 29887 * @param dstScale the destination shift amount 29888 * @param dstDisp the destination displacement 29889 * @param imm immediate 29890 */ 29891 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29892 public final void emitSAL_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 29893 int miStart = mi; 29894 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 29895 setMachineCodes(mi++, (byte) 0x66); 29896 generateREXprefix(false, null, dstIndex, dstBase); 29897 if (imm == 1) { 29898 setMachineCodes(mi++, (byte) 0xD1); 29899 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29900 } else { 29901 setMachineCodes(mi++, (byte) 0xC1); 29902 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29903 emitImm8((byte)imm); 29904 } 29905 if (lister != null) lister.RXDI(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, imm); 29906 } 29907 29908 /** 29909 * Generate a register--register SAL. That is, 29910 * <PRE> 29911 * arithemetic shift left of dstReg by srcReg 29912 * </PRE> 29913 * 29914 * @param dstReg the destination register 29915 * @param srcReg must always be ECX 29916 */ 29917 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29918 public final void emitSAL_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 29919 int miStart = mi; 29920 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29921 setMachineCodes(mi++, (byte) 0x66); 29922 generateREXprefix(false, null, null, dstReg); 29923 setMachineCodes(mi++, (byte) 0xD3); 29924 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 29925 if (lister != null) lister.RR(miStart, "SAL", dstReg, srcReg); 29926 } 29927 29928 /** 29929 * Generate a register-indirect--register SAL. That is, 29930 * <PRE> 29931 * arithemetic shift left of [dstBase] by srcReg 29932 * </PRE> 29933 * 29934 * @param dstBase the destination register 29935 * @param srcReg must always be ECX 29936 */ 29937 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 29938 public final void emitSAL_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 29939 int miStart = mi; 29940 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29941 setMachineCodes(mi++, (byte) 0x66); 29942 generateREXprefix(false, null, null, dstBase); 29943 setMachineCodes(mi++, (byte) 0xD3); 29944 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 29945 if (lister != null) lister.RNR(miStart, "SAL", dstBase, srcReg); 29946 } 29947 29948 /** 29949 * Generate a register-displacement--register SAL. That is, 29950 * <PRE> 29951 * arithemetic shift left of [dstBase + dstDisp] by srcReg 29952 * </PRE> 29953 * 29954 * @param dstBase the destination base register 29955 * @param dstDisp the destination displacement 29956 * @param srcReg must always be ECX 29957 */ 29958 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 29959 public final void emitSAL_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 29960 int miStart = mi; 29961 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29962 setMachineCodes(mi++, (byte) 0x66); 29963 generateREXprefix(false, null, null, dstBase); 29964 setMachineCodes(mi++, (byte) 0xD3); 29965 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 29966 if (lister != null) lister.RDR(miStart, "SAL", dstBase, dstDisp, srcReg); 29967 } 29968 29969 /** 29970 * Generate a register-offset--register SAL. That is, 29971 * <PRE> 29972 * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by srcReg 29973 * </PRE> 29974 * 29975 * @param dstIndex the destination index register 29976 * @param dstScale the destination shift amount 29977 * @param dstDisp the destination displacement 29978 * @param srcReg must always be ECX 29979 */ 29980 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 29981 public final void emitSAL_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 29982 int miStart = mi; 29983 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 29984 setMachineCodes(mi++, (byte) 0x66); 29985 generateREXprefix(false, null, dstIndex, null); 29986 setMachineCodes(mi++, (byte) 0xD3); 29987 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 29988 if (lister != null) lister.RFDR(miStart, "SAL", dstIndex, dstScale, dstDisp, srcReg); 29989 } 29990 29991 /** 29992 * Generate an absolute--register SAL. That is, 29993 * <PRE> 29994 * arithemetic shift left of [dstDisp] by srcReg 29995 * </PRE> 29996 * 29997 * @param dstDisp the destination displacement 29998 * @param srcReg must always be ECX 29999 */ 30000 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 30001 public final void emitSAL_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 30002 int miStart = mi; 30003 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30004 setMachineCodes(mi++, (byte) 0x66); 30005 generateREXprefix(false, null, null, null); 30006 setMachineCodes(mi++, (byte) 0xD3); 30007 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 30008 if (lister != null) lister.RAR(miStart, "SAL", dstDisp, srcReg); 30009 } 30010 30011 /** 30012 * Generate a register-displacement--register SAL. That is, 30013 * <PRE> 30014 * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 30015 * </PRE> 30016 * 30017 * @param dstBase the destination base register 30018 * @param dstIndex the destination index register 30019 * @param dstScale the destination shift amount 30020 * @param dstDisp the destination displacement 30021 * @param srcReg must always be ECX 30022 */ 30023 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 30024 public final void emitSAL_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 30025 int miStart = mi; 30026 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30027 setMachineCodes(mi++, (byte) 0x66); 30028 generateREXprefix(false, null, dstIndex, dstBase); 30029 setMachineCodes(mi++, (byte) 0xD3); 30030 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30031 if (lister != null) lister.RXDR(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 30032 } 30033 30034 /** 30035 * Generate a register--immediate SAL. That is, 30036 * <PRE> 30037 * arithemetic shift left of dstReg by imm 30038 * </PRE> 30039 * 30040 * @param dstReg the destination register 30041 * @param imm immediate 30042 */ 30043 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30044 public final void emitSAL_Reg_Imm(GPR dstReg, int imm) { 30045 int miStart = mi; 30046 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30047 // no size prefix 30048 generateREXprefix(false, null, null, dstReg); 30049 if (imm == 1) { 30050 setMachineCodes(mi++, (byte) 0xD1); 30051 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30052 } else { 30053 setMachineCodes(mi++, (byte) 0xC1); 30054 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30055 emitImm8((byte)imm); 30056 } 30057 if (lister != null) lister.RI(miStart, "SAL", dstReg, imm); 30058 } 30059 30060 /** 30061 * Generate a register-indirect--immediate SAL. That is, 30062 * <PRE> 30063 * arithemetic shift left of [dstBase] by imm 30064 * </PRE> 30065 * 30066 * @param dstBase the destination base register 30067 * @param imm immediate 30068 */ 30069 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30070 public final void emitSAL_RegInd_Imm(GPR dstBase, int imm) { 30071 int miStart = mi; 30072 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30073 // no size prefix 30074 generateREXprefix(false, null, null, dstBase); 30075 if (imm == 1) { 30076 setMachineCodes(mi++, (byte) 0xD1); 30077 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30078 } else { 30079 setMachineCodes(mi++, (byte) 0xC1); 30080 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30081 emitImm8((byte)imm); 30082 } 30083 if (lister != null) lister.RNI(miStart, "SAL", dstBase, imm); 30084 } 30085 30086 /** 30087 * Generate a register-displacement--immediate SAL. That is, 30088 * <PRE> 30089 * arithemetic shift left of [dstBase + dstDisp] by imm 30090 * </PRE> 30091 * 30092 * @param dstBase the destination base register 30093 * @param dstDisp the destination displacement 30094 * @param imm immediate 30095 */ 30096 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30097 public final void emitSAL_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 30098 int miStart = mi; 30099 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30100 // no size prefix 30101 generateREXprefix(false, null, null, dstBase); 30102 if (imm == 1) { 30103 setMachineCodes(mi++, (byte) 0xD1); 30104 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30105 } else { 30106 setMachineCodes(mi++, (byte) 0xC1); 30107 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30108 emitImm8((byte)imm); 30109 } 30110 if (lister != null) lister.RDI(miStart, "SAL", dstBase, dstDisp, imm); 30111 } 30112 30113 /** 30114 * Generate a register-offset--immediate SAL. That is, 30115 * <PRE> 30116 * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by imm 30117 * </PRE> 30118 * 30119 * @param dstIndex the destination index register 30120 * @param dstScale the destination shift amount 30121 * @param dstDisp the destination displacement 30122 * @param imm immediate 30123 */ 30124 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30125 public final void emitSAL_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 30126 int miStart = mi; 30127 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30128 // no size prefix 30129 generateREXprefix(false, null, dstIndex, null); 30130 if (imm == 1) { 30131 setMachineCodes(mi++, (byte) 0xD1); 30132 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30133 } else { 30134 setMachineCodes(mi++, (byte) 0xC1); 30135 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30136 emitImm8((byte)imm); 30137 } 30138 if (lister != null) lister.RFDI(miStart, "SAL", dstIndex, dstScale, dstDisp, imm); 30139 } 30140 30141 /** 30142 * Generate a absolute--immediate SAL. That is, 30143 * <PRE> 30144 * arithemetic shift left of [dstDisp] by imm 30145 * </PRE> 30146 * 30147 * @param dstDisp the destination displacement 30148 * @param imm immediate 30149 */ 30150 public final void emitSAL_Abs_Imm(Address dstDisp, int imm) { 30151 int miStart = mi; 30152 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30153 // no size prefix 30154 generateREXprefix(false, null, null, null); 30155 if (imm == 1) { 30156 setMachineCodes(mi++, (byte) 0xD1); 30157 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 30158 } else { 30159 setMachineCodes(mi++, (byte) 0xC1); 30160 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 30161 emitImm8((byte)imm); 30162 } 30163 if (lister != null) lister.RAI(miStart, "SAL", dstDisp, imm); 30164 } 30165 30166 /** 30167 * Generate a register-index--immediate SAL. That is, 30168 * <PRE> 30169 * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 30170 * </PRE> 30171 * 30172 * @param dstBase the destination base register 30173 * @param dstIndex the destination index register 30174 * @param dstScale the destination shift amount 30175 * @param dstDisp the destination displacement 30176 * @param imm immediate 30177 */ 30178 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 30179 public final void emitSAL_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 30180 int miStart = mi; 30181 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30182 // no size prefix 30183 generateREXprefix(false, null, dstIndex, dstBase); 30184 if (imm == 1) { 30185 setMachineCodes(mi++, (byte) 0xD1); 30186 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30187 } else { 30188 setMachineCodes(mi++, (byte) 0xC1); 30189 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30190 emitImm8((byte)imm); 30191 } 30192 if (lister != null) lister.RXDI(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, imm); 30193 } 30194 30195 /** 30196 * Generate a register--register SAL. That is, 30197 * <PRE> 30198 * arithemetic shift left of dstReg by srcReg 30199 * </PRE> 30200 * 30201 * @param dstReg the destination register 30202 * @param srcReg must always be ECX 30203 */ 30204 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 30205 public final void emitSAL_Reg_Reg(GPR dstReg, GPR srcReg) { 30206 int miStart = mi; 30207 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30208 // no size prefix 30209 generateREXprefix(false, null, null, dstReg); 30210 setMachineCodes(mi++, (byte) 0xD3); 30211 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30212 if (lister != null) lister.RR(miStart, "SAL", dstReg, srcReg); 30213 } 30214 30215 /** 30216 * Generate a register-indirect--register SAL. That is, 30217 * <PRE> 30218 * arithemetic shift left of [dstBase] by srcReg 30219 * </PRE> 30220 * 30221 * @param dstBase the destination register 30222 * @param srcReg must always be ECX 30223 */ 30224 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 30225 public final void emitSAL_RegInd_Reg(GPR dstBase, GPR srcReg) { 30226 int miStart = mi; 30227 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30228 // no size prefix 30229 generateREXprefix(false, null, null, dstBase); 30230 setMachineCodes(mi++, (byte) 0xD3); 30231 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30232 if (lister != null) lister.RNR(miStart, "SAL", dstBase, srcReg); 30233 } 30234 30235 /** 30236 * Generate a register-displacement--register SAL. That is, 30237 * <PRE> 30238 * arithemetic shift left of [dstBase + dstDisp] by srcReg 30239 * </PRE> 30240 * 30241 * @param dstBase the destination base register 30242 * @param dstDisp the destination displacement 30243 * @param srcReg must always be ECX 30244 */ 30245 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 30246 public final void emitSAL_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 30247 int miStart = mi; 30248 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30249 // no size prefix 30250 generateREXprefix(false, null, null, dstBase); 30251 setMachineCodes(mi++, (byte) 0xD3); 30252 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30253 if (lister != null) lister.RDR(miStart, "SAL", dstBase, dstDisp, srcReg); 30254 } 30255 30256 /** 30257 * Generate a register-offset--register SAL. That is, 30258 * <PRE> 30259 * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by srcReg 30260 * </PRE> 30261 * 30262 * @param dstIndex the destination index register 30263 * @param dstScale the destination shift amount 30264 * @param dstDisp the destination displacement 30265 * @param srcReg must always be ECX 30266 */ 30267 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 30268 public final void emitSAL_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 30269 int miStart = mi; 30270 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30271 // no size prefix 30272 generateREXprefix(false, null, dstIndex, null); 30273 setMachineCodes(mi++, (byte) 0xD3); 30274 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30275 if (lister != null) lister.RFDR(miStart, "SAL", dstIndex, dstScale, dstDisp, srcReg); 30276 } 30277 30278 /** 30279 * Generate an absolute--register SAL. That is, 30280 * <PRE> 30281 * arithemetic shift left of [dstDisp] by srcReg 30282 * </PRE> 30283 * 30284 * @param dstDisp the destination displacement 30285 * @param srcReg must always be ECX 30286 */ 30287 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 30288 public final void emitSAL_Abs_Reg(Address dstDisp, GPR srcReg) { 30289 int miStart = mi; 30290 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30291 // no size prefix 30292 generateREXprefix(false, null, null, null); 30293 setMachineCodes(mi++, (byte) 0xD3); 30294 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 30295 if (lister != null) lister.RAR(miStart, "SAL", dstDisp, srcReg); 30296 } 30297 30298 /** 30299 * Generate a register-displacement--register SAL. That is, 30300 * <PRE> 30301 * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 30302 * </PRE> 30303 * 30304 * @param dstBase the destination base register 30305 * @param dstIndex the destination index register 30306 * @param dstScale the destination shift amount 30307 * @param dstDisp the destination displacement 30308 * @param srcReg must always be ECX 30309 */ 30310 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 30311 public final void emitSAL_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 30312 int miStart = mi; 30313 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30314 // no size prefix 30315 generateREXprefix(false, null, dstIndex, dstBase); 30316 setMachineCodes(mi++, (byte) 0xD3); 30317 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30318 if (lister != null) lister.RXDR(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 30319 } 30320 30321 /** 30322 * Generate a register--immediate SAL. That is, 30323 * <PRE> 30324 * arithemetic shift left of dstReg by imm 30325 * </PRE> 30326 * 30327 * @param dstReg the destination register 30328 * @param imm immediate 30329 */ 30330 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30331 public final void emitSAL_Reg_Imm_Quad(GPR dstReg, int imm) { 30332 int miStart = mi; 30333 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30334 // no size prefix 30335 generateREXprefix(true, null, null, dstReg); 30336 if (imm == 1) { 30337 setMachineCodes(mi++, (byte) 0xD1); 30338 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30339 } else { 30340 setMachineCodes(mi++, (byte) 0xC1); 30341 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30342 emitImm8((byte)imm); 30343 } 30344 if (lister != null) lister.RI(miStart, "SAL", dstReg, imm); 30345 } 30346 30347 /** 30348 * Generate a register-indirect--immediate SAL. That is, 30349 * <PRE> 30350 * arithemetic shift left of [dstBase] by imm 30351 * </PRE> 30352 * 30353 * @param dstBase the destination base register 30354 * @param imm immediate 30355 */ 30356 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30357 public final void emitSAL_RegInd_Imm_Quad(GPR dstBase, int imm) { 30358 int miStart = mi; 30359 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30360 // no size prefix 30361 generateREXprefix(true, null, null, dstBase); 30362 if (imm == 1) { 30363 setMachineCodes(mi++, (byte) 0xD1); 30364 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30365 } else { 30366 setMachineCodes(mi++, (byte) 0xC1); 30367 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30368 emitImm8((byte)imm); 30369 } 30370 if (lister != null) lister.RNI(miStart, "SAL", dstBase, imm); 30371 } 30372 30373 /** 30374 * Generate a register-displacement--immediate SAL. That is, 30375 * <PRE> 30376 * arithemetic shift left of [dstBase + dstDisp] by imm 30377 * </PRE> 30378 * 30379 * @param dstBase the destination base register 30380 * @param dstDisp the destination displacement 30381 * @param imm immediate 30382 */ 30383 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30384 public final void emitSAL_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 30385 int miStart = mi; 30386 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30387 // no size prefix 30388 generateREXprefix(true, null, null, dstBase); 30389 if (imm == 1) { 30390 setMachineCodes(mi++, (byte) 0xD1); 30391 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30392 } else { 30393 setMachineCodes(mi++, (byte) 0xC1); 30394 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30395 emitImm8((byte)imm); 30396 } 30397 if (lister != null) lister.RDI(miStart, "SAL", dstBase, dstDisp, imm); 30398 } 30399 30400 /** 30401 * Generate a register-offset--immediate SAL. That is, 30402 * <PRE> 30403 * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by imm 30404 * </PRE> 30405 * 30406 * @param dstIndex the destination index register 30407 * @param dstScale the destination shift amount 30408 * @param dstDisp the destination displacement 30409 * @param imm immediate 30410 */ 30411 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30412 public final void emitSAL_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 30413 int miStart = mi; 30414 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30415 // no size prefix 30416 generateREXprefix(true, null, dstIndex, null); 30417 if (imm == 1) { 30418 setMachineCodes(mi++, (byte) 0xD1); 30419 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30420 } else { 30421 setMachineCodes(mi++, (byte) 0xC1); 30422 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30423 emitImm8((byte)imm); 30424 } 30425 if (lister != null) lister.RFDI(miStart, "SAL", dstIndex, dstScale, dstDisp, imm); 30426 } 30427 30428 /** 30429 * Generate a absolute--immediate SAL. That is, 30430 * <PRE> 30431 * arithemetic shift left of [dstDisp] by imm 30432 * </PRE> 30433 * 30434 * @param dstDisp the destination displacement 30435 * @param imm immediate 30436 */ 30437 public final void emitSAL_Abs_Imm_Quad(Address dstDisp, int imm) { 30438 int miStart = mi; 30439 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30440 // no size prefix 30441 generateREXprefix(true, null, null, null); 30442 if (imm == 1) { 30443 setMachineCodes(mi++, (byte) 0xD1); 30444 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 30445 } else { 30446 setMachineCodes(mi++, (byte) 0xC1); 30447 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 30448 emitImm8((byte)imm); 30449 } 30450 if (lister != null) lister.RAI(miStart, "SAL", dstDisp, imm); 30451 } 30452 30453 /** 30454 * Generate a register-index--immediate SAL. That is, 30455 * <PRE> 30456 * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 30457 * </PRE> 30458 * 30459 * @param dstBase the destination base register 30460 * @param dstIndex the destination index register 30461 * @param dstScale the destination shift amount 30462 * @param dstDisp the destination displacement 30463 * @param imm immediate 30464 */ 30465 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 30466 public final void emitSAL_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 30467 int miStart = mi; 30468 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30469 // no size prefix 30470 generateREXprefix(true, null, dstIndex, dstBase); 30471 if (imm == 1) { 30472 setMachineCodes(mi++, (byte) 0xD1); 30473 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30474 } else { 30475 setMachineCodes(mi++, (byte) 0xC1); 30476 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30477 emitImm8((byte)imm); 30478 } 30479 if (lister != null) lister.RXDI(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, imm); 30480 } 30481 30482 /** 30483 * Generate a register--register SAL. That is, 30484 * <PRE> 30485 * arithemetic shift left of dstReg by srcReg 30486 * </PRE> 30487 * 30488 * @param dstReg the destination register 30489 * @param srcReg must always be ECX 30490 */ 30491 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 30492 public final void emitSAL_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 30493 int miStart = mi; 30494 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30495 // no size prefix 30496 generateREXprefix(true, null, null, dstReg); 30497 setMachineCodes(mi++, (byte) 0xD3); 30498 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30499 if (lister != null) lister.RR(miStart, "SAL", dstReg, srcReg); 30500 } 30501 30502 /** 30503 * Generate a register-indirect--register SAL. That is, 30504 * <PRE> 30505 * arithemetic shift left of [dstBase] by srcReg 30506 * </PRE> 30507 * 30508 * @param dstBase the destination register 30509 * @param srcReg must always be ECX 30510 */ 30511 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 30512 public final void emitSAL_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 30513 int miStart = mi; 30514 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30515 // no size prefix 30516 generateREXprefix(true, null, null, dstBase); 30517 setMachineCodes(mi++, (byte) 0xD3); 30518 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30519 if (lister != null) lister.RNR(miStart, "SAL", dstBase, srcReg); 30520 } 30521 30522 /** 30523 * Generate a register-displacement--register SAL. That is, 30524 * <PRE> 30525 * arithemetic shift left of [dstBase + dstDisp] by srcReg 30526 * </PRE> 30527 * 30528 * @param dstBase the destination base register 30529 * @param dstDisp the destination displacement 30530 * @param srcReg must always be ECX 30531 */ 30532 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 30533 public final void emitSAL_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 30534 int miStart = mi; 30535 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30536 // no size prefix 30537 generateREXprefix(true, null, null, dstBase); 30538 setMachineCodes(mi++, (byte) 0xD3); 30539 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30540 if (lister != null) lister.RDR(miStart, "SAL", dstBase, dstDisp, srcReg); 30541 } 30542 30543 /** 30544 * Generate a register-offset--register SAL. That is, 30545 * <PRE> 30546 * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by srcReg 30547 * </PRE> 30548 * 30549 * @param dstIndex the destination index register 30550 * @param dstScale the destination shift amount 30551 * @param dstDisp the destination displacement 30552 * @param srcReg must always be ECX 30553 */ 30554 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 30555 public final void emitSAL_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 30556 int miStart = mi; 30557 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30558 // no size prefix 30559 generateREXprefix(true, null, dstIndex, null); 30560 setMachineCodes(mi++, (byte) 0xD3); 30561 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30562 if (lister != null) lister.RFDR(miStart, "SAL", dstIndex, dstScale, dstDisp, srcReg); 30563 } 30564 30565 /** 30566 * Generate an absolute--register SAL. That is, 30567 * <PRE> 30568 * arithemetic shift left of [dstDisp] by srcReg 30569 * </PRE> 30570 * 30571 * @param dstDisp the destination displacement 30572 * @param srcReg must always be ECX 30573 */ 30574 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 30575 public final void emitSAL_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 30576 int miStart = mi; 30577 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30578 // no size prefix 30579 generateREXprefix(true, null, null, null); 30580 setMachineCodes(mi++, (byte) 0xD3); 30581 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 30582 if (lister != null) lister.RAR(miStart, "SAL", dstDisp, srcReg); 30583 } 30584 30585 /** 30586 * Generate a register-displacement--register SAL. That is, 30587 * <PRE> 30588 * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 30589 * </PRE> 30590 * 30591 * @param dstBase the destination base register 30592 * @param dstIndex the destination index register 30593 * @param dstScale the destination shift amount 30594 * @param dstDisp the destination displacement 30595 * @param srcReg must always be ECX 30596 */ 30597 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 30598 public final void emitSAL_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 30599 int miStart = mi; 30600 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30601 // no size prefix 30602 generateREXprefix(true, null, dstIndex, dstBase); 30603 setMachineCodes(mi++, (byte) 0xD3); 30604 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30605 if (lister != null) lister.RXDR(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 30606 } 30607 30608 /** 30609 * Generate a register--immediate SHL. That is, 30610 * <PRE> 30611 * logical shift left of dstReg by imm 30612 * </PRE> 30613 * 30614 * @param dstReg the destination register 30615 * @param imm immediate 30616 */ 30617 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30618 public final void emitSHL_Reg_Imm_Byte(GPR dstReg, int imm) { 30619 int miStart = mi; 30620 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30621 // no size prefix 30622 generateREXprefix(false, null, null, dstReg); 30623 if (imm == 1) { 30624 setMachineCodes(mi++, (byte) 0xD0); 30625 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30626 } else { 30627 setMachineCodes(mi++, (byte) 0xC0); 30628 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30629 emitImm8((byte)imm); 30630 } 30631 if (lister != null) lister.RI(miStart, "SHL", dstReg, imm); 30632 } 30633 30634 /** 30635 * Generate a register-indirect--immediate SHL. That is, 30636 * <PRE> 30637 * logical shift left of [dstBase] by imm 30638 * </PRE> 30639 * 30640 * @param dstBase the destination base register 30641 * @param imm immediate 30642 */ 30643 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30644 public final void emitSHL_RegInd_Imm_Byte(GPR dstBase, int imm) { 30645 int miStart = mi; 30646 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30647 // no size prefix 30648 generateREXprefix(false, null, null, dstBase); 30649 if (imm == 1) { 30650 setMachineCodes(mi++, (byte) 0xD0); 30651 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30652 } else { 30653 setMachineCodes(mi++, (byte) 0xC0); 30654 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30655 emitImm8((byte)imm); 30656 } 30657 if (lister != null) lister.RNI(miStart, "SHL", dstBase, imm); 30658 } 30659 30660 /** 30661 * Generate a register-displacement--immediate SHL. That is, 30662 * <PRE> 30663 * logical shift left of [dstBase + dstDisp] by imm 30664 * </PRE> 30665 * 30666 * @param dstBase the destination base register 30667 * @param dstDisp the destination displacement 30668 * @param imm immediate 30669 */ 30670 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30671 public final void emitSHL_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 30672 int miStart = mi; 30673 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30674 // no size prefix 30675 generateREXprefix(false, null, null, dstBase); 30676 if (imm == 1) { 30677 setMachineCodes(mi++, (byte) 0xD0); 30678 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30679 } else { 30680 setMachineCodes(mi++, (byte) 0xC0); 30681 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30682 emitImm8((byte)imm); 30683 } 30684 if (lister != null) lister.RDI(miStart, "SHL", dstBase, dstDisp, imm); 30685 } 30686 30687 /** 30688 * Generate a register-offset--immediate SHL. That is, 30689 * <PRE> 30690 * logical shift left of [dstIndex<<dstScale + dstDisp] by imm 30691 * </PRE> 30692 * 30693 * @param dstIndex the destination index register 30694 * @param dstScale the destination shift amount 30695 * @param dstDisp the destination displacement 30696 * @param imm immediate 30697 */ 30698 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30699 public final void emitSHL_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 30700 int miStart = mi; 30701 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30702 // no size prefix 30703 generateREXprefix(false, null, dstIndex, null); 30704 if (imm == 1) { 30705 setMachineCodes(mi++, (byte) 0xD0); 30706 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30707 } else { 30708 setMachineCodes(mi++, (byte) 0xC0); 30709 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30710 emitImm8((byte)imm); 30711 } 30712 if (lister != null) lister.RFDI(miStart, "SHL", dstIndex, dstScale, dstDisp, imm); 30713 } 30714 30715 /** 30716 * Generate a absolute--immediate SHL. That is, 30717 * <PRE> 30718 * logical shift left of [dstDisp] by imm 30719 * </PRE> 30720 * 30721 * @param dstDisp the destination displacement 30722 * @param imm immediate 30723 */ 30724 public final void emitSHL_Abs_Imm_Byte(Address dstDisp, int imm) { 30725 int miStart = mi; 30726 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30727 // no size prefix 30728 generateREXprefix(false, null, null, null); 30729 if (imm == 1) { 30730 setMachineCodes(mi++, (byte) 0xD0); 30731 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 30732 } else { 30733 setMachineCodes(mi++, (byte) 0xC0); 30734 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 30735 emitImm8((byte)imm); 30736 } 30737 if (lister != null) lister.RAI(miStart, "SHL", dstDisp, imm); 30738 } 30739 30740 /** 30741 * Generate a register-index--immediate SHL. That is, 30742 * <PRE> 30743 * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 30744 * </PRE> 30745 * 30746 * @param dstBase the destination base register 30747 * @param dstIndex the destination index register 30748 * @param dstScale the destination shift amount 30749 * @param dstDisp the destination displacement 30750 * @param imm immediate 30751 */ 30752 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 30753 public final void emitSHL_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 30754 int miStart = mi; 30755 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30756 // no size prefix 30757 generateREXprefix(false, null, dstIndex, dstBase); 30758 if (imm == 1) { 30759 setMachineCodes(mi++, (byte) 0xD0); 30760 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30761 } else { 30762 setMachineCodes(mi++, (byte) 0xC0); 30763 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30764 emitImm8((byte)imm); 30765 } 30766 if (lister != null) lister.RXDI(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, imm); 30767 } 30768 30769 /** 30770 * Generate a register--register SHL. That is, 30771 * <PRE> 30772 * logical shift left of dstReg by srcReg 30773 * </PRE> 30774 * 30775 * @param dstReg the destination register 30776 * @param srcReg must always be ECX 30777 */ 30778 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 30779 public final void emitSHL_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 30780 int miStart = mi; 30781 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 30782 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30783 // no size prefix 30784 generateREXprefix(false, null, null, dstReg); 30785 setMachineCodes(mi++, (byte) 0xD2); 30786 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30787 if (lister != null) lister.RR(miStart, "SHL", dstReg, srcReg); 30788 } 30789 30790 /** 30791 * Generate a register-indirect--register SHL. That is, 30792 * <PRE> 30793 * logical shift left of [dstBase] by srcReg 30794 * </PRE> 30795 * 30796 * @param dstBase the destination register 30797 * @param srcReg must always be ECX 30798 */ 30799 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 30800 public final void emitSHL_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 30801 int miStart = mi; 30802 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30803 // no size prefix 30804 generateREXprefix(false, null, null, dstBase); 30805 setMachineCodes(mi++, (byte) 0xD2); 30806 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30807 if (lister != null) lister.RNR(miStart, "SHL", dstBase, srcReg); 30808 } 30809 30810 /** 30811 * Generate a register-displacement--register SHL. That is, 30812 * <PRE> 30813 * logical shift left of [dstBase + dstDisp] by srcReg 30814 * </PRE> 30815 * 30816 * @param dstBase the destination base register 30817 * @param dstDisp the destination displacement 30818 * @param srcReg must always be ECX 30819 */ 30820 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 30821 public final void emitSHL_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 30822 int miStart = mi; 30823 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30824 // no size prefix 30825 generateREXprefix(false, null, null, dstBase); 30826 setMachineCodes(mi++, (byte) 0xD2); 30827 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30828 if (lister != null) lister.RDR(miStart, "SHL", dstBase, dstDisp, srcReg); 30829 } 30830 30831 /** 30832 * Generate a register-offset--register SHL. That is, 30833 * <PRE> 30834 * logical shift left of [dstIndex<<dstScale + dstDisp] by srcReg 30835 * </PRE> 30836 * 30837 * @param dstIndex the destination index register 30838 * @param dstScale the destination shift amount 30839 * @param dstDisp the destination displacement 30840 * @param srcReg must always be ECX 30841 */ 30842 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 30843 public final void emitSHL_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 30844 int miStart = mi; 30845 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30846 // no size prefix 30847 generateREXprefix(false, null, dstIndex, null); 30848 setMachineCodes(mi++, (byte) 0xD2); 30849 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30850 if (lister != null) lister.RFDR(miStart, "SHL", dstIndex, dstScale, dstDisp, srcReg); 30851 } 30852 30853 /** 30854 * Generate an absolute--register SHL. That is, 30855 * <PRE> 30856 * logical shift left of [dstDisp] by srcReg 30857 * </PRE> 30858 * 30859 * @param dstDisp the destination displacement 30860 * @param srcReg must always be ECX 30861 */ 30862 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 30863 public final void emitSHL_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 30864 int miStart = mi; 30865 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30866 // no size prefix 30867 generateREXprefix(false, null, null, null); 30868 setMachineCodes(mi++, (byte) 0xD2); 30869 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 30870 if (lister != null) lister.RAR(miStart, "SHL", dstDisp, srcReg); 30871 } 30872 30873 /** 30874 * Generate a register-displacement--register SHL. That is, 30875 * <PRE> 30876 * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 30877 * </PRE> 30878 * 30879 * @param dstBase the destination base register 30880 * @param dstIndex the destination index register 30881 * @param dstScale the destination shift amount 30882 * @param dstDisp the destination displacement 30883 * @param srcReg must always be ECX 30884 */ 30885 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 30886 public final void emitSHL_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 30887 int miStart = mi; 30888 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 30889 // no size prefix 30890 generateREXprefix(false, null, dstIndex, dstBase); 30891 setMachineCodes(mi++, (byte) 0xD2); 30892 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30893 if (lister != null) lister.RXDR(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 30894 } 30895 30896 /** 30897 * Generate a register--immediate SHL. That is, 30898 * <PRE> 30899 * logical shift left of dstReg by imm 30900 * </PRE> 30901 * 30902 * @param dstReg the destination register 30903 * @param imm immediate 30904 */ 30905 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30906 public final void emitSHL_Reg_Imm_Word(GPR dstReg, int imm) { 30907 int miStart = mi; 30908 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30909 setMachineCodes(mi++, (byte) 0x66); 30910 generateREXprefix(false, null, null, dstReg); 30911 if (imm == 1) { 30912 setMachineCodes(mi++, (byte) 0xD1); 30913 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30914 } else { 30915 setMachineCodes(mi++, (byte) 0xC1); 30916 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 30917 emitImm8((byte)imm); 30918 } 30919 if (lister != null) lister.RI(miStart, "SHL", dstReg, imm); 30920 } 30921 30922 /** 30923 * Generate a register-indirect--immediate SHL. That is, 30924 * <PRE> 30925 * logical shift left of [dstBase] by imm 30926 * </PRE> 30927 * 30928 * @param dstBase the destination base register 30929 * @param imm immediate 30930 */ 30931 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30932 public final void emitSHL_RegInd_Imm_Word(GPR dstBase, int imm) { 30933 int miStart = mi; 30934 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30935 setMachineCodes(mi++, (byte) 0x66); 30936 generateREXprefix(false, null, null, dstBase); 30937 if (imm == 1) { 30938 setMachineCodes(mi++, (byte) 0xD1); 30939 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30940 } else { 30941 setMachineCodes(mi++, (byte) 0xC1); 30942 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 30943 emitImm8((byte)imm); 30944 } 30945 if (lister != null) lister.RNI(miStart, "SHL", dstBase, imm); 30946 } 30947 30948 /** 30949 * Generate a register-displacement--immediate SHL. That is, 30950 * <PRE> 30951 * logical shift left of [dstBase + dstDisp] by imm 30952 * </PRE> 30953 * 30954 * @param dstBase the destination base register 30955 * @param dstDisp the destination displacement 30956 * @param imm immediate 30957 */ 30958 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30959 public final void emitSHL_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 30960 int miStart = mi; 30961 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30962 setMachineCodes(mi++, (byte) 0x66); 30963 generateREXprefix(false, null, null, dstBase); 30964 if (imm == 1) { 30965 setMachineCodes(mi++, (byte) 0xD1); 30966 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30967 } else { 30968 setMachineCodes(mi++, (byte) 0xC1); 30969 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 30970 emitImm8((byte)imm); 30971 } 30972 if (lister != null) lister.RDI(miStart, "SHL", dstBase, dstDisp, imm); 30973 } 30974 30975 /** 30976 * Generate a register-offset--immediate SHL. That is, 30977 * <PRE> 30978 * logical shift left of [dstIndex<<dstScale + dstDisp] by imm 30979 * </PRE> 30980 * 30981 * @param dstIndex the destination index register 30982 * @param dstScale the destination shift amount 30983 * @param dstDisp the destination displacement 30984 * @param imm immediate 30985 */ 30986 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 30987 public final void emitSHL_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 30988 int miStart = mi; 30989 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 30990 setMachineCodes(mi++, (byte) 0x66); 30991 generateREXprefix(false, null, dstIndex, null); 30992 if (imm == 1) { 30993 setMachineCodes(mi++, (byte) 0xD1); 30994 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30995 } else { 30996 setMachineCodes(mi++, (byte) 0xC1); 30997 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 30998 emitImm8((byte)imm); 30999 } 31000 if (lister != null) lister.RFDI(miStart, "SHL", dstIndex, dstScale, dstDisp, imm); 31001 } 31002 31003 /** 31004 * Generate a absolute--immediate SHL. That is, 31005 * <PRE> 31006 * logical shift left of [dstDisp] by imm 31007 * </PRE> 31008 * 31009 * @param dstDisp the destination displacement 31010 * @param imm immediate 31011 */ 31012 public final void emitSHL_Abs_Imm_Word(Address dstDisp, int imm) { 31013 int miStart = mi; 31014 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31015 setMachineCodes(mi++, (byte) 0x66); 31016 generateREXprefix(false, null, null, null); 31017 if (imm == 1) { 31018 setMachineCodes(mi++, (byte) 0xD1); 31019 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 31020 } else { 31021 setMachineCodes(mi++, (byte) 0xC1); 31022 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 31023 emitImm8((byte)imm); 31024 } 31025 if (lister != null) lister.RAI(miStart, "SHL", dstDisp, imm); 31026 } 31027 31028 /** 31029 * Generate a register-index--immediate SHL. That is, 31030 * <PRE> 31031 * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 31032 * </PRE> 31033 * 31034 * @param dstBase the destination base register 31035 * @param dstIndex the destination index register 31036 * @param dstScale the destination shift amount 31037 * @param dstDisp the destination displacement 31038 * @param imm immediate 31039 */ 31040 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31041 public final void emitSHL_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 31042 int miStart = mi; 31043 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31044 setMachineCodes(mi++, (byte) 0x66); 31045 generateREXprefix(false, null, dstIndex, dstBase); 31046 if (imm == 1) { 31047 setMachineCodes(mi++, (byte) 0xD1); 31048 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31049 } else { 31050 setMachineCodes(mi++, (byte) 0xC1); 31051 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31052 emitImm8((byte)imm); 31053 } 31054 if (lister != null) lister.RXDI(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, imm); 31055 } 31056 31057 /** 31058 * Generate a register--register SHL. That is, 31059 * <PRE> 31060 * logical shift left of dstReg by srcReg 31061 * </PRE> 31062 * 31063 * @param dstReg the destination register 31064 * @param srcReg must always be ECX 31065 */ 31066 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31067 public final void emitSHL_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 31068 int miStart = mi; 31069 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31070 setMachineCodes(mi++, (byte) 0x66); 31071 generateREXprefix(false, null, null, dstReg); 31072 setMachineCodes(mi++, (byte) 0xD3); 31073 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 31074 if (lister != null) lister.RR(miStart, "SHL", dstReg, srcReg); 31075 } 31076 31077 /** 31078 * Generate a register-indirect--register SHL. That is, 31079 * <PRE> 31080 * logical shift left of [dstBase] by srcReg 31081 * </PRE> 31082 * 31083 * @param dstBase the destination register 31084 * @param srcReg must always be ECX 31085 */ 31086 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31087 public final void emitSHL_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 31088 int miStart = mi; 31089 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31090 setMachineCodes(mi++, (byte) 0x66); 31091 generateREXprefix(false, null, null, dstBase); 31092 setMachineCodes(mi++, (byte) 0xD3); 31093 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 31094 if (lister != null) lister.RNR(miStart, "SHL", dstBase, srcReg); 31095 } 31096 31097 /** 31098 * Generate a register-displacement--register SHL. That is, 31099 * <PRE> 31100 * logical shift left of [dstBase + dstDisp] by srcReg 31101 * </PRE> 31102 * 31103 * @param dstBase the destination base register 31104 * @param dstDisp the destination displacement 31105 * @param srcReg must always be ECX 31106 */ 31107 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 31108 public final void emitSHL_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 31109 int miStart = mi; 31110 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31111 setMachineCodes(mi++, (byte) 0x66); 31112 generateREXprefix(false, null, null, dstBase); 31113 setMachineCodes(mi++, (byte) 0xD3); 31114 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 31115 if (lister != null) lister.RDR(miStart, "SHL", dstBase, dstDisp, srcReg); 31116 } 31117 31118 /** 31119 * Generate a register-offset--register SHL. That is, 31120 * <PRE> 31121 * logical shift left of [dstIndex<<dstScale + dstDisp] by srcReg 31122 * </PRE> 31123 * 31124 * @param dstIndex the destination index register 31125 * @param dstScale the destination shift amount 31126 * @param dstDisp the destination displacement 31127 * @param srcReg must always be ECX 31128 */ 31129 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 31130 public final void emitSHL_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 31131 int miStart = mi; 31132 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31133 setMachineCodes(mi++, (byte) 0x66); 31134 generateREXprefix(false, null, dstIndex, null); 31135 setMachineCodes(mi++, (byte) 0xD3); 31136 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31137 if (lister != null) lister.RFDR(miStart, "SHL", dstIndex, dstScale, dstDisp, srcReg); 31138 } 31139 31140 /** 31141 * Generate an absolute--register SHL. That is, 31142 * <PRE> 31143 * logical shift left of [dstDisp] by srcReg 31144 * </PRE> 31145 * 31146 * @param dstDisp the destination displacement 31147 * @param srcReg must always be ECX 31148 */ 31149 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 31150 public final void emitSHL_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 31151 int miStart = mi; 31152 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31153 setMachineCodes(mi++, (byte) 0x66); 31154 generateREXprefix(false, null, null, null); 31155 setMachineCodes(mi++, (byte) 0xD3); 31156 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 31157 if (lister != null) lister.RAR(miStart, "SHL", dstDisp, srcReg); 31158 } 31159 31160 /** 31161 * Generate a register-displacement--register SHL. That is, 31162 * <PRE> 31163 * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 31164 * </PRE> 31165 * 31166 * @param dstBase the destination base register 31167 * @param dstIndex the destination index register 31168 * @param dstScale the destination shift amount 31169 * @param dstDisp the destination displacement 31170 * @param srcReg must always be ECX 31171 */ 31172 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 31173 public final void emitSHL_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 31174 int miStart = mi; 31175 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31176 setMachineCodes(mi++, (byte) 0x66); 31177 generateREXprefix(false, null, dstIndex, dstBase); 31178 setMachineCodes(mi++, (byte) 0xD3); 31179 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31180 if (lister != null) lister.RXDR(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 31181 } 31182 31183 /** 31184 * Generate a register--immediate SHL. That is, 31185 * <PRE> 31186 * logical shift left of dstReg by imm 31187 * </PRE> 31188 * 31189 * @param dstReg the destination register 31190 * @param imm immediate 31191 */ 31192 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31193 public final void emitSHL_Reg_Imm(GPR dstReg, int imm) { 31194 int miStart = mi; 31195 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31196 // no size prefix 31197 generateREXprefix(false, null, null, dstReg); 31198 if (imm == 1) { 31199 setMachineCodes(mi++, (byte) 0xD1); 31200 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 31201 } else { 31202 setMachineCodes(mi++, (byte) 0xC1); 31203 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 31204 emitImm8((byte)imm); 31205 } 31206 if (lister != null) lister.RI(miStart, "SHL", dstReg, imm); 31207 } 31208 31209 /** 31210 * Generate a register-indirect--immediate SHL. That is, 31211 * <PRE> 31212 * logical shift left of [dstBase] by imm 31213 * </PRE> 31214 * 31215 * @param dstBase the destination base register 31216 * @param imm immediate 31217 */ 31218 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31219 public final void emitSHL_RegInd_Imm(GPR dstBase, int imm) { 31220 int miStart = mi; 31221 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31222 // no size prefix 31223 generateREXprefix(false, null, null, dstBase); 31224 if (imm == 1) { 31225 setMachineCodes(mi++, (byte) 0xD1); 31226 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 31227 } else { 31228 setMachineCodes(mi++, (byte) 0xC1); 31229 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 31230 emitImm8((byte)imm); 31231 } 31232 if (lister != null) lister.RNI(miStart, "SHL", dstBase, imm); 31233 } 31234 31235 /** 31236 * Generate a register-displacement--immediate SHL. That is, 31237 * <PRE> 31238 * logical shift left of [dstBase + dstDisp] by imm 31239 * </PRE> 31240 * 31241 * @param dstBase the destination base register 31242 * @param dstDisp the destination displacement 31243 * @param imm immediate 31244 */ 31245 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31246 public final void emitSHL_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 31247 int miStart = mi; 31248 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31249 // no size prefix 31250 generateREXprefix(false, null, null, dstBase); 31251 if (imm == 1) { 31252 setMachineCodes(mi++, (byte) 0xD1); 31253 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 31254 } else { 31255 setMachineCodes(mi++, (byte) 0xC1); 31256 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 31257 emitImm8((byte)imm); 31258 } 31259 if (lister != null) lister.RDI(miStart, "SHL", dstBase, dstDisp, imm); 31260 } 31261 31262 /** 31263 * Generate a register-offset--immediate SHL. That is, 31264 * <PRE> 31265 * logical shift left of [dstIndex<<dstScale + dstDisp] by imm 31266 * </PRE> 31267 * 31268 * @param dstIndex the destination index register 31269 * @param dstScale the destination shift amount 31270 * @param dstDisp the destination displacement 31271 * @param imm immediate 31272 */ 31273 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31274 public final void emitSHL_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 31275 int miStart = mi; 31276 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31277 // no size prefix 31278 generateREXprefix(false, null, dstIndex, null); 31279 if (imm == 1) { 31280 setMachineCodes(mi++, (byte) 0xD1); 31281 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31282 } else { 31283 setMachineCodes(mi++, (byte) 0xC1); 31284 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31285 emitImm8((byte)imm); 31286 } 31287 if (lister != null) lister.RFDI(miStart, "SHL", dstIndex, dstScale, dstDisp, imm); 31288 } 31289 31290 /** 31291 * Generate a absolute--immediate SHL. That is, 31292 * <PRE> 31293 * logical shift left of [dstDisp] by imm 31294 * </PRE> 31295 * 31296 * @param dstDisp the destination displacement 31297 * @param imm immediate 31298 */ 31299 public final void emitSHL_Abs_Imm(Address dstDisp, int imm) { 31300 int miStart = mi; 31301 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31302 // no size prefix 31303 generateREXprefix(false, null, null, null); 31304 if (imm == 1) { 31305 setMachineCodes(mi++, (byte) 0xD1); 31306 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 31307 } else { 31308 setMachineCodes(mi++, (byte) 0xC1); 31309 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 31310 emitImm8((byte)imm); 31311 } 31312 if (lister != null) lister.RAI(miStart, "SHL", dstDisp, imm); 31313 } 31314 31315 /** 31316 * Generate a register-index--immediate SHL. That is, 31317 * <PRE> 31318 * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 31319 * </PRE> 31320 * 31321 * @param dstBase the destination base register 31322 * @param dstIndex the destination index register 31323 * @param dstScale the destination shift amount 31324 * @param dstDisp the destination displacement 31325 * @param imm immediate 31326 */ 31327 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31328 public final void emitSHL_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 31329 int miStart = mi; 31330 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31331 // no size prefix 31332 generateREXprefix(false, null, dstIndex, dstBase); 31333 if (imm == 1) { 31334 setMachineCodes(mi++, (byte) 0xD1); 31335 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31336 } else { 31337 setMachineCodes(mi++, (byte) 0xC1); 31338 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31339 emitImm8((byte)imm); 31340 } 31341 if (lister != null) lister.RXDI(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, imm); 31342 } 31343 31344 /** 31345 * Generate a register--register SHL. That is, 31346 * <PRE> 31347 * logical shift left of dstReg by srcReg 31348 * </PRE> 31349 * 31350 * @param dstReg the destination register 31351 * @param srcReg must always be ECX 31352 */ 31353 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31354 public final void emitSHL_Reg_Reg(GPR dstReg, GPR srcReg) { 31355 int miStart = mi; 31356 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31357 // no size prefix 31358 generateREXprefix(false, null, null, dstReg); 31359 setMachineCodes(mi++, (byte) 0xD3); 31360 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 31361 if (lister != null) lister.RR(miStart, "SHL", dstReg, srcReg); 31362 } 31363 31364 /** 31365 * Generate a register-indirect--register SHL. That is, 31366 * <PRE> 31367 * logical shift left of [dstBase] by srcReg 31368 * </PRE> 31369 * 31370 * @param dstBase the destination register 31371 * @param srcReg must always be ECX 31372 */ 31373 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31374 public final void emitSHL_RegInd_Reg(GPR dstBase, GPR srcReg) { 31375 int miStart = mi; 31376 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31377 // no size prefix 31378 generateREXprefix(false, null, null, dstBase); 31379 setMachineCodes(mi++, (byte) 0xD3); 31380 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 31381 if (lister != null) lister.RNR(miStart, "SHL", dstBase, srcReg); 31382 } 31383 31384 /** 31385 * Generate a register-displacement--register SHL. That is, 31386 * <PRE> 31387 * logical shift left of [dstBase + dstDisp] by srcReg 31388 * </PRE> 31389 * 31390 * @param dstBase the destination base register 31391 * @param dstDisp the destination displacement 31392 * @param srcReg must always be ECX 31393 */ 31394 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 31395 public final void emitSHL_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 31396 int miStart = mi; 31397 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31398 // no size prefix 31399 generateREXprefix(false, null, null, dstBase); 31400 setMachineCodes(mi++, (byte) 0xD3); 31401 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 31402 if (lister != null) lister.RDR(miStart, "SHL", dstBase, dstDisp, srcReg); 31403 } 31404 31405 /** 31406 * Generate a register-offset--register SHL. That is, 31407 * <PRE> 31408 * logical shift left of [dstIndex<<dstScale + dstDisp] by srcReg 31409 * </PRE> 31410 * 31411 * @param dstIndex the destination index register 31412 * @param dstScale the destination shift amount 31413 * @param dstDisp the destination displacement 31414 * @param srcReg must always be ECX 31415 */ 31416 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 31417 public final void emitSHL_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 31418 int miStart = mi; 31419 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31420 // no size prefix 31421 generateREXprefix(false, null, dstIndex, null); 31422 setMachineCodes(mi++, (byte) 0xD3); 31423 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31424 if (lister != null) lister.RFDR(miStart, "SHL", dstIndex, dstScale, dstDisp, srcReg); 31425 } 31426 31427 /** 31428 * Generate an absolute--register SHL. That is, 31429 * <PRE> 31430 * logical shift left of [dstDisp] by srcReg 31431 * </PRE> 31432 * 31433 * @param dstDisp the destination displacement 31434 * @param srcReg must always be ECX 31435 */ 31436 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 31437 public final void emitSHL_Abs_Reg(Address dstDisp, GPR srcReg) { 31438 int miStart = mi; 31439 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31440 // no size prefix 31441 generateREXprefix(false, null, null, null); 31442 setMachineCodes(mi++, (byte) 0xD3); 31443 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 31444 if (lister != null) lister.RAR(miStart, "SHL", dstDisp, srcReg); 31445 } 31446 31447 /** 31448 * Generate a register-displacement--register SHL. That is, 31449 * <PRE> 31450 * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 31451 * </PRE> 31452 * 31453 * @param dstBase the destination base register 31454 * @param dstIndex the destination index register 31455 * @param dstScale the destination shift amount 31456 * @param dstDisp the destination displacement 31457 * @param srcReg must always be ECX 31458 */ 31459 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 31460 public final void emitSHL_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 31461 int miStart = mi; 31462 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31463 // no size prefix 31464 generateREXprefix(false, null, dstIndex, dstBase); 31465 setMachineCodes(mi++, (byte) 0xD3); 31466 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31467 if (lister != null) lister.RXDR(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 31468 } 31469 31470 /** 31471 * Generate a register--immediate SHL. That is, 31472 * <PRE> 31473 * logical shift left of dstReg by imm 31474 * </PRE> 31475 * 31476 * @param dstReg the destination register 31477 * @param imm immediate 31478 */ 31479 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31480 public final void emitSHL_Reg_Imm_Quad(GPR dstReg, int imm) { 31481 int miStart = mi; 31482 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31483 // no size prefix 31484 generateREXprefix(true, null, null, dstReg); 31485 if (imm == 1) { 31486 setMachineCodes(mi++, (byte) 0xD1); 31487 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 31488 } else { 31489 setMachineCodes(mi++, (byte) 0xC1); 31490 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 31491 emitImm8((byte)imm); 31492 } 31493 if (lister != null) lister.RI(miStart, "SHL", dstReg, imm); 31494 } 31495 31496 /** 31497 * Generate a register-indirect--immediate SHL. That is, 31498 * <PRE> 31499 * logical shift left of [dstBase] by imm 31500 * </PRE> 31501 * 31502 * @param dstBase the destination base register 31503 * @param imm immediate 31504 */ 31505 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31506 public final void emitSHL_RegInd_Imm_Quad(GPR dstBase, int imm) { 31507 int miStart = mi; 31508 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31509 // no size prefix 31510 generateREXprefix(true, null, null, dstBase); 31511 if (imm == 1) { 31512 setMachineCodes(mi++, (byte) 0xD1); 31513 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 31514 } else { 31515 setMachineCodes(mi++, (byte) 0xC1); 31516 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 31517 emitImm8((byte)imm); 31518 } 31519 if (lister != null) lister.RNI(miStart, "SHL", dstBase, imm); 31520 } 31521 31522 /** 31523 * Generate a register-displacement--immediate SHL. That is, 31524 * <PRE> 31525 * logical shift left of [dstBase + dstDisp] by imm 31526 * </PRE> 31527 * 31528 * @param dstBase the destination base register 31529 * @param dstDisp the destination displacement 31530 * @param imm immediate 31531 */ 31532 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31533 public final void emitSHL_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 31534 int miStart = mi; 31535 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31536 // no size prefix 31537 generateREXprefix(true, null, null, dstBase); 31538 if (imm == 1) { 31539 setMachineCodes(mi++, (byte) 0xD1); 31540 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 31541 } else { 31542 setMachineCodes(mi++, (byte) 0xC1); 31543 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 31544 emitImm8((byte)imm); 31545 } 31546 if (lister != null) lister.RDI(miStart, "SHL", dstBase, dstDisp, imm); 31547 } 31548 31549 /** 31550 * Generate a register-offset--immediate SHL. That is, 31551 * <PRE> 31552 * logical shift left of [dstIndex<<dstScale + dstDisp] by imm 31553 * </PRE> 31554 * 31555 * @param dstIndex the destination index register 31556 * @param dstScale the destination shift amount 31557 * @param dstDisp the destination displacement 31558 * @param imm immediate 31559 */ 31560 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31561 public final void emitSHL_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 31562 int miStart = mi; 31563 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31564 // no size prefix 31565 generateREXprefix(true, null, dstIndex, null); 31566 if (imm == 1) { 31567 setMachineCodes(mi++, (byte) 0xD1); 31568 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31569 } else { 31570 setMachineCodes(mi++, (byte) 0xC1); 31571 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31572 emitImm8((byte)imm); 31573 } 31574 if (lister != null) lister.RFDI(miStart, "SHL", dstIndex, dstScale, dstDisp, imm); 31575 } 31576 31577 /** 31578 * Generate a absolute--immediate SHL. That is, 31579 * <PRE> 31580 * logical shift left of [dstDisp] by imm 31581 * </PRE> 31582 * 31583 * @param dstDisp the destination displacement 31584 * @param imm immediate 31585 */ 31586 public final void emitSHL_Abs_Imm_Quad(Address dstDisp, int imm) { 31587 int miStart = mi; 31588 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31589 // no size prefix 31590 generateREXprefix(true, null, null, null); 31591 if (imm == 1) { 31592 setMachineCodes(mi++, (byte) 0xD1); 31593 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 31594 } else { 31595 setMachineCodes(mi++, (byte) 0xC1); 31596 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 31597 emitImm8((byte)imm); 31598 } 31599 if (lister != null) lister.RAI(miStart, "SHL", dstDisp, imm); 31600 } 31601 31602 /** 31603 * Generate a register-index--immediate SHL. That is, 31604 * <PRE> 31605 * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm 31606 * </PRE> 31607 * 31608 * @param dstBase the destination base register 31609 * @param dstIndex the destination index register 31610 * @param dstScale the destination shift amount 31611 * @param dstDisp the destination displacement 31612 * @param imm immediate 31613 */ 31614 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31615 public final void emitSHL_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 31616 int miStart = mi; 31617 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31618 // no size prefix 31619 generateREXprefix(true, null, dstIndex, dstBase); 31620 if (imm == 1) { 31621 setMachineCodes(mi++, (byte) 0xD1); 31622 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31623 } else { 31624 setMachineCodes(mi++, (byte) 0xC1); 31625 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31626 emitImm8((byte)imm); 31627 } 31628 if (lister != null) lister.RXDI(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, imm); 31629 } 31630 31631 /** 31632 * Generate a register--register SHL. That is, 31633 * <PRE> 31634 * logical shift left of dstReg by srcReg 31635 * </PRE> 31636 * 31637 * @param dstReg the destination register 31638 * @param srcReg must always be ECX 31639 */ 31640 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31641 public final void emitSHL_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 31642 int miStart = mi; 31643 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31644 // no size prefix 31645 generateREXprefix(true, null, null, dstReg); 31646 setMachineCodes(mi++, (byte) 0xD3); 31647 emitRegRegOperands(dstReg, GPR.getForOpcode(0x4)); 31648 if (lister != null) lister.RR(miStart, "SHL", dstReg, srcReg); 31649 } 31650 31651 /** 31652 * Generate a register-indirect--register SHL. That is, 31653 * <PRE> 31654 * logical shift left of [dstBase] by srcReg 31655 * </PRE> 31656 * 31657 * @param dstBase the destination register 31658 * @param srcReg must always be ECX 31659 */ 31660 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31661 public final void emitSHL_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 31662 int miStart = mi; 31663 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31664 // no size prefix 31665 generateREXprefix(true, null, null, dstBase); 31666 setMachineCodes(mi++, (byte) 0xD3); 31667 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4)); 31668 if (lister != null) lister.RNR(miStart, "SHL", dstBase, srcReg); 31669 } 31670 31671 /** 31672 * Generate a register-displacement--register SHL. That is, 31673 * <PRE> 31674 * logical shift left of [dstBase + dstDisp] by srcReg 31675 * </PRE> 31676 * 31677 * @param dstBase the destination base register 31678 * @param dstDisp the destination displacement 31679 * @param srcReg must always be ECX 31680 */ 31681 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 31682 public final void emitSHL_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 31683 int miStart = mi; 31684 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31685 // no size prefix 31686 generateREXprefix(true, null, null, dstBase); 31687 setMachineCodes(mi++, (byte) 0xD3); 31688 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4)); 31689 if (lister != null) lister.RDR(miStart, "SHL", dstBase, dstDisp, srcReg); 31690 } 31691 31692 /** 31693 * Generate a register-offset--register SHL. That is, 31694 * <PRE> 31695 * logical shift left of [dstIndex<<dstScale + dstDisp] by srcReg 31696 * </PRE> 31697 * 31698 * @param dstIndex the destination index register 31699 * @param dstScale the destination shift amount 31700 * @param dstDisp the destination displacement 31701 * @param srcReg must always be ECX 31702 */ 31703 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 31704 public final void emitSHL_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 31705 int miStart = mi; 31706 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31707 // no size prefix 31708 generateREXprefix(true, null, dstIndex, null); 31709 setMachineCodes(mi++, (byte) 0xD3); 31710 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31711 if (lister != null) lister.RFDR(miStart, "SHL", dstIndex, dstScale, dstDisp, srcReg); 31712 } 31713 31714 /** 31715 * Generate an absolute--register SHL. That is, 31716 * <PRE> 31717 * logical shift left of [dstDisp] by srcReg 31718 * </PRE> 31719 * 31720 * @param dstDisp the destination displacement 31721 * @param srcReg must always be ECX 31722 */ 31723 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 31724 public final void emitSHL_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 31725 int miStart = mi; 31726 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31727 // no size prefix 31728 generateREXprefix(true, null, null, null); 31729 setMachineCodes(mi++, (byte) 0xD3); 31730 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4)); 31731 if (lister != null) lister.RAR(miStart, "SHL", dstDisp, srcReg); 31732 } 31733 31734 /** 31735 * Generate a register-displacement--register SHL. That is, 31736 * <PRE> 31737 * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 31738 * </PRE> 31739 * 31740 * @param dstBase the destination base register 31741 * @param dstIndex the destination index register 31742 * @param dstScale the destination shift amount 31743 * @param dstDisp the destination displacement 31744 * @param srcReg must always be ECX 31745 */ 31746 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 31747 public final void emitSHL_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 31748 int miStart = mi; 31749 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31750 // no size prefix 31751 generateREXprefix(true, null, dstIndex, dstBase); 31752 setMachineCodes(mi++, (byte) 0xD3); 31753 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4)); 31754 if (lister != null) lister.RXDR(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, srcReg); 31755 } 31756 31757 /** 31758 * Generate a register--immediate SHR. That is, 31759 * <PRE> 31760 * logical shift right of dstReg by imm 31761 * </PRE> 31762 * 31763 * @param dstReg the destination register 31764 * @param imm immediate 31765 */ 31766 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31767 public final void emitSHR_Reg_Imm_Byte(GPR dstReg, int imm) { 31768 int miStart = mi; 31769 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31770 // no size prefix 31771 generateREXprefix(false, null, null, dstReg); 31772 if (imm == 1) { 31773 setMachineCodes(mi++, (byte) 0xD0); 31774 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 31775 } else { 31776 setMachineCodes(mi++, (byte) 0xC0); 31777 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 31778 emitImm8((byte)imm); 31779 } 31780 if (lister != null) lister.RI(miStart, "SHR", dstReg, imm); 31781 } 31782 31783 /** 31784 * Generate a register-indirect--immediate SHR. That is, 31785 * <PRE> 31786 * logical shift right of [dstBase] by imm 31787 * </PRE> 31788 * 31789 * @param dstBase the destination base register 31790 * @param imm immediate 31791 */ 31792 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31793 public final void emitSHR_RegInd_Imm_Byte(GPR dstBase, int imm) { 31794 int miStart = mi; 31795 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31796 // no size prefix 31797 generateREXprefix(false, null, null, dstBase); 31798 if (imm == 1) { 31799 setMachineCodes(mi++, (byte) 0xD0); 31800 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 31801 } else { 31802 setMachineCodes(mi++, (byte) 0xC0); 31803 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 31804 emitImm8((byte)imm); 31805 } 31806 if (lister != null) lister.RNI(miStart, "SHR", dstBase, imm); 31807 } 31808 31809 /** 31810 * Generate a register-displacement--immediate SHR. That is, 31811 * <PRE> 31812 * logical shift right of [dstBase + dstDisp] by imm 31813 * </PRE> 31814 * 31815 * @param dstBase the destination base register 31816 * @param dstDisp the destination displacement 31817 * @param imm immediate 31818 */ 31819 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31820 public final void emitSHR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 31821 int miStart = mi; 31822 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31823 // no size prefix 31824 generateREXprefix(false, null, null, dstBase); 31825 if (imm == 1) { 31826 setMachineCodes(mi++, (byte) 0xD0); 31827 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 31828 } else { 31829 setMachineCodes(mi++, (byte) 0xC0); 31830 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 31831 emitImm8((byte)imm); 31832 } 31833 if (lister != null) lister.RDI(miStart, "SHR", dstBase, dstDisp, imm); 31834 } 31835 31836 /** 31837 * Generate a register-offset--immediate SHR. That is, 31838 * <PRE> 31839 * logical shift right of [dstIndex<<dstScale + dstDisp] by imm 31840 * </PRE> 31841 * 31842 * @param dstIndex the destination index register 31843 * @param dstScale the destination shift amount 31844 * @param dstDisp the destination displacement 31845 * @param imm immediate 31846 */ 31847 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 31848 public final void emitSHR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 31849 int miStart = mi; 31850 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31851 // no size prefix 31852 generateREXprefix(false, null, dstIndex, null); 31853 if (imm == 1) { 31854 setMachineCodes(mi++, (byte) 0xD0); 31855 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 31856 } else { 31857 setMachineCodes(mi++, (byte) 0xC0); 31858 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 31859 emitImm8((byte)imm); 31860 } 31861 if (lister != null) lister.RFDI(miStart, "SHR", dstIndex, dstScale, dstDisp, imm); 31862 } 31863 31864 /** 31865 * Generate a absolute--immediate SHR. That is, 31866 * <PRE> 31867 * logical shift right of [dstDisp] by imm 31868 * </PRE> 31869 * 31870 * @param dstDisp the destination displacement 31871 * @param imm immediate 31872 */ 31873 public final void emitSHR_Abs_Imm_Byte(Address dstDisp, int imm) { 31874 int miStart = mi; 31875 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31876 // no size prefix 31877 generateREXprefix(false, null, null, null); 31878 if (imm == 1) { 31879 setMachineCodes(mi++, (byte) 0xD0); 31880 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 31881 } else { 31882 setMachineCodes(mi++, (byte) 0xC0); 31883 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 31884 emitImm8((byte)imm); 31885 } 31886 if (lister != null) lister.RAI(miStart, "SHR", dstDisp, imm); 31887 } 31888 31889 /** 31890 * Generate a register-index--immediate SHR. That is, 31891 * <PRE> 31892 * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 31893 * </PRE> 31894 * 31895 * @param dstBase the destination base register 31896 * @param dstIndex the destination index register 31897 * @param dstScale the destination shift amount 31898 * @param dstDisp the destination displacement 31899 * @param imm immediate 31900 */ 31901 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31902 public final void emitSHR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 31903 int miStart = mi; 31904 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 31905 // no size prefix 31906 generateREXprefix(false, null, dstIndex, dstBase); 31907 if (imm == 1) { 31908 setMachineCodes(mi++, (byte) 0xD0); 31909 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 31910 } else { 31911 setMachineCodes(mi++, (byte) 0xC0); 31912 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 31913 emitImm8((byte)imm); 31914 } 31915 if (lister != null) lister.RXDI(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, imm); 31916 } 31917 31918 /** 31919 * Generate a register--register SHR. That is, 31920 * <PRE> 31921 * logical shift right of dstReg by srcReg 31922 * </PRE> 31923 * 31924 * @param dstReg the destination register 31925 * @param srcReg must always be ECX 31926 */ 31927 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31928 public final void emitSHR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 31929 int miStart = mi; 31930 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 31931 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31932 // no size prefix 31933 generateREXprefix(false, null, null, dstReg); 31934 setMachineCodes(mi++, (byte) 0xD2); 31935 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 31936 if (lister != null) lister.RR(miStart, "SHR", dstReg, srcReg); 31937 } 31938 31939 /** 31940 * Generate a register-indirect--register SHR. That is, 31941 * <PRE> 31942 * logical shift right of [dstBase] by srcReg 31943 * </PRE> 31944 * 31945 * @param dstBase the destination register 31946 * @param srcReg must always be ECX 31947 */ 31948 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 31949 public final void emitSHR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 31950 int miStart = mi; 31951 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31952 // no size prefix 31953 generateREXprefix(false, null, null, dstBase); 31954 setMachineCodes(mi++, (byte) 0xD2); 31955 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 31956 if (lister != null) lister.RNR(miStart, "SHR", dstBase, srcReg); 31957 } 31958 31959 /** 31960 * Generate a register-displacement--register SHR. That is, 31961 * <PRE> 31962 * logical shift right of [dstBase + dstDisp] by srcReg 31963 * </PRE> 31964 * 31965 * @param dstBase the destination base register 31966 * @param dstDisp the destination displacement 31967 * @param srcReg must always be ECX 31968 */ 31969 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 31970 public final void emitSHR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 31971 int miStart = mi; 31972 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31973 // no size prefix 31974 generateREXprefix(false, null, null, dstBase); 31975 setMachineCodes(mi++, (byte) 0xD2); 31976 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 31977 if (lister != null) lister.RDR(miStart, "SHR", dstBase, dstDisp, srcReg); 31978 } 31979 31980 /** 31981 * Generate a register-offset--register SHR. That is, 31982 * <PRE> 31983 * logical shift right of [dstIndex<<dstScale + dstDisp] by srcReg 31984 * </PRE> 31985 * 31986 * @param dstIndex the destination index register 31987 * @param dstScale the destination shift amount 31988 * @param dstDisp the destination displacement 31989 * @param srcReg must always be ECX 31990 */ 31991 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 31992 public final void emitSHR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 31993 int miStart = mi; 31994 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 31995 // no size prefix 31996 generateREXprefix(false, null, dstIndex, null); 31997 setMachineCodes(mi++, (byte) 0xD2); 31998 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 31999 if (lister != null) lister.RFDR(miStart, "SHR", dstIndex, dstScale, dstDisp, srcReg); 32000 } 32001 32002 /** 32003 * Generate an absolute--register SHR. That is, 32004 * <PRE> 32005 * logical shift right of [dstDisp] by srcReg 32006 * </PRE> 32007 * 32008 * @param dstDisp the destination displacement 32009 * @param srcReg must always be ECX 32010 */ 32011 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 32012 public final void emitSHR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 32013 int miStart = mi; 32014 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32015 // no size prefix 32016 generateREXprefix(false, null, null, null); 32017 setMachineCodes(mi++, (byte) 0xD2); 32018 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 32019 if (lister != null) lister.RAR(miStart, "SHR", dstDisp, srcReg); 32020 } 32021 32022 /** 32023 * Generate a register-displacement--register SHR. That is, 32024 * <PRE> 32025 * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 32026 * </PRE> 32027 * 32028 * @param dstBase the destination base register 32029 * @param dstIndex the destination index register 32030 * @param dstScale the destination shift amount 32031 * @param dstDisp the destination displacement 32032 * @param srcReg must always be ECX 32033 */ 32034 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 32035 public final void emitSHR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 32036 int miStart = mi; 32037 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32038 // no size prefix 32039 generateREXprefix(false, null, dstIndex, dstBase); 32040 setMachineCodes(mi++, (byte) 0xD2); 32041 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32042 if (lister != null) lister.RXDR(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 32043 } 32044 32045 /** 32046 * Generate a register--immediate SHR. That is, 32047 * <PRE> 32048 * logical shift right of dstReg by imm 32049 * </PRE> 32050 * 32051 * @param dstReg the destination register 32052 * @param imm immediate 32053 */ 32054 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32055 public final void emitSHR_Reg_Imm_Word(GPR dstReg, int imm) { 32056 int miStart = mi; 32057 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32058 setMachineCodes(mi++, (byte) 0x66); 32059 generateREXprefix(false, null, null, dstReg); 32060 if (imm == 1) { 32061 setMachineCodes(mi++, (byte) 0xD1); 32062 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 32063 } else { 32064 setMachineCodes(mi++, (byte) 0xC1); 32065 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 32066 emitImm8((byte)imm); 32067 } 32068 if (lister != null) lister.RI(miStart, "SHR", dstReg, imm); 32069 } 32070 32071 /** 32072 * Generate a register-indirect--immediate SHR. That is, 32073 * <PRE> 32074 * logical shift right of [dstBase] by imm 32075 * </PRE> 32076 * 32077 * @param dstBase the destination base register 32078 * @param imm immediate 32079 */ 32080 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32081 public final void emitSHR_RegInd_Imm_Word(GPR dstBase, int imm) { 32082 int miStart = mi; 32083 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32084 setMachineCodes(mi++, (byte) 0x66); 32085 generateREXprefix(false, null, null, dstBase); 32086 if (imm == 1) { 32087 setMachineCodes(mi++, (byte) 0xD1); 32088 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 32089 } else { 32090 setMachineCodes(mi++, (byte) 0xC1); 32091 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 32092 emitImm8((byte)imm); 32093 } 32094 if (lister != null) lister.RNI(miStart, "SHR", dstBase, imm); 32095 } 32096 32097 /** 32098 * Generate a register-displacement--immediate SHR. That is, 32099 * <PRE> 32100 * logical shift right of [dstBase + dstDisp] by imm 32101 * </PRE> 32102 * 32103 * @param dstBase the destination base register 32104 * @param dstDisp the destination displacement 32105 * @param imm immediate 32106 */ 32107 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32108 public final void emitSHR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 32109 int miStart = mi; 32110 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32111 setMachineCodes(mi++, (byte) 0x66); 32112 generateREXprefix(false, null, null, dstBase); 32113 if (imm == 1) { 32114 setMachineCodes(mi++, (byte) 0xD1); 32115 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 32116 } else { 32117 setMachineCodes(mi++, (byte) 0xC1); 32118 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 32119 emitImm8((byte)imm); 32120 } 32121 if (lister != null) lister.RDI(miStart, "SHR", dstBase, dstDisp, imm); 32122 } 32123 32124 /** 32125 * Generate a register-offset--immediate SHR. That is, 32126 * <PRE> 32127 * logical shift right of [dstIndex<<dstScale + dstDisp] by imm 32128 * </PRE> 32129 * 32130 * @param dstIndex the destination index register 32131 * @param dstScale the destination shift amount 32132 * @param dstDisp the destination displacement 32133 * @param imm immediate 32134 */ 32135 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32136 public final void emitSHR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 32137 int miStart = mi; 32138 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32139 setMachineCodes(mi++, (byte) 0x66); 32140 generateREXprefix(false, null, dstIndex, null); 32141 if (imm == 1) { 32142 setMachineCodes(mi++, (byte) 0xD1); 32143 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32144 } else { 32145 setMachineCodes(mi++, (byte) 0xC1); 32146 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32147 emitImm8((byte)imm); 32148 } 32149 if (lister != null) lister.RFDI(miStart, "SHR", dstIndex, dstScale, dstDisp, imm); 32150 } 32151 32152 /** 32153 * Generate a absolute--immediate SHR. That is, 32154 * <PRE> 32155 * logical shift right of [dstDisp] by imm 32156 * </PRE> 32157 * 32158 * @param dstDisp the destination displacement 32159 * @param imm immediate 32160 */ 32161 public final void emitSHR_Abs_Imm_Word(Address dstDisp, int imm) { 32162 int miStart = mi; 32163 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32164 setMachineCodes(mi++, (byte) 0x66); 32165 generateREXprefix(false, null, null, null); 32166 if (imm == 1) { 32167 setMachineCodes(mi++, (byte) 0xD1); 32168 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 32169 } else { 32170 setMachineCodes(mi++, (byte) 0xC1); 32171 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 32172 emitImm8((byte)imm); 32173 } 32174 if (lister != null) lister.RAI(miStart, "SHR", dstDisp, imm); 32175 } 32176 32177 /** 32178 * Generate a register-index--immediate SHR. That is, 32179 * <PRE> 32180 * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 32181 * </PRE> 32182 * 32183 * @param dstBase the destination base register 32184 * @param dstIndex the destination index register 32185 * @param dstScale the destination shift amount 32186 * @param dstDisp the destination displacement 32187 * @param imm immediate 32188 */ 32189 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 32190 public final void emitSHR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 32191 int miStart = mi; 32192 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32193 setMachineCodes(mi++, (byte) 0x66); 32194 generateREXprefix(false, null, dstIndex, dstBase); 32195 if (imm == 1) { 32196 setMachineCodes(mi++, (byte) 0xD1); 32197 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32198 } else { 32199 setMachineCodes(mi++, (byte) 0xC1); 32200 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32201 emitImm8((byte)imm); 32202 } 32203 if (lister != null) lister.RXDI(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, imm); 32204 } 32205 32206 /** 32207 * Generate a register--register SHR. That is, 32208 * <PRE> 32209 * logical shift right of dstReg by srcReg 32210 * </PRE> 32211 * 32212 * @param dstReg the destination register 32213 * @param srcReg must always be ECX 32214 */ 32215 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 32216 public final void emitSHR_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 32217 int miStart = mi; 32218 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32219 setMachineCodes(mi++, (byte) 0x66); 32220 generateREXprefix(false, null, null, dstReg); 32221 setMachineCodes(mi++, (byte) 0xD3); 32222 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 32223 if (lister != null) lister.RR(miStart, "SHR", dstReg, srcReg); 32224 } 32225 32226 /** 32227 * Generate a register-indirect--register SHR. That is, 32228 * <PRE> 32229 * logical shift right of [dstBase] by srcReg 32230 * </PRE> 32231 * 32232 * @param dstBase the destination register 32233 * @param srcReg must always be ECX 32234 */ 32235 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 32236 public final void emitSHR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 32237 int miStart = mi; 32238 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32239 setMachineCodes(mi++, (byte) 0x66); 32240 generateREXprefix(false, null, null, dstBase); 32241 setMachineCodes(mi++, (byte) 0xD3); 32242 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 32243 if (lister != null) lister.RNR(miStart, "SHR", dstBase, srcReg); 32244 } 32245 32246 /** 32247 * Generate a register-displacement--register SHR. That is, 32248 * <PRE> 32249 * logical shift right of [dstBase + dstDisp] by srcReg 32250 * </PRE> 32251 * 32252 * @param dstBase the destination base register 32253 * @param dstDisp the destination displacement 32254 * @param srcReg must always be ECX 32255 */ 32256 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 32257 public final void emitSHR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 32258 int miStart = mi; 32259 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32260 setMachineCodes(mi++, (byte) 0x66); 32261 generateREXprefix(false, null, null, dstBase); 32262 setMachineCodes(mi++, (byte) 0xD3); 32263 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 32264 if (lister != null) lister.RDR(miStart, "SHR", dstBase, dstDisp, srcReg); 32265 } 32266 32267 /** 32268 * Generate a register-offset--register SHR. That is, 32269 * <PRE> 32270 * logical shift right of [dstIndex<<dstScale + dstDisp] by srcReg 32271 * </PRE> 32272 * 32273 * @param dstIndex the destination index register 32274 * @param dstScale the destination shift amount 32275 * @param dstDisp the destination displacement 32276 * @param srcReg must always be ECX 32277 */ 32278 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 32279 public final void emitSHR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 32280 int miStart = mi; 32281 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32282 setMachineCodes(mi++, (byte) 0x66); 32283 generateREXprefix(false, null, dstIndex, null); 32284 setMachineCodes(mi++, (byte) 0xD3); 32285 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32286 if (lister != null) lister.RFDR(miStart, "SHR", dstIndex, dstScale, dstDisp, srcReg); 32287 } 32288 32289 /** 32290 * Generate an absolute--register SHR. That is, 32291 * <PRE> 32292 * logical shift right of [dstDisp] by srcReg 32293 * </PRE> 32294 * 32295 * @param dstDisp the destination displacement 32296 * @param srcReg must always be ECX 32297 */ 32298 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 32299 public final void emitSHR_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 32300 int miStart = mi; 32301 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32302 setMachineCodes(mi++, (byte) 0x66); 32303 generateREXprefix(false, null, null, null); 32304 setMachineCodes(mi++, (byte) 0xD3); 32305 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 32306 if (lister != null) lister.RAR(miStart, "SHR", dstDisp, srcReg); 32307 } 32308 32309 /** 32310 * Generate a register-displacement--register SHR. That is, 32311 * <PRE> 32312 * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 32313 * </PRE> 32314 * 32315 * @param dstBase the destination base register 32316 * @param dstIndex the destination index register 32317 * @param dstScale the destination shift amount 32318 * @param dstDisp the destination displacement 32319 * @param srcReg must always be ECX 32320 */ 32321 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 32322 public final void emitSHR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 32323 int miStart = mi; 32324 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32325 setMachineCodes(mi++, (byte) 0x66); 32326 generateREXprefix(false, null, dstIndex, dstBase); 32327 setMachineCodes(mi++, (byte) 0xD3); 32328 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32329 if (lister != null) lister.RXDR(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 32330 } 32331 32332 /** 32333 * Generate a register--immediate SHR. That is, 32334 * <PRE> 32335 * logical shift right of dstReg by imm 32336 * </PRE> 32337 * 32338 * @param dstReg the destination register 32339 * @param imm immediate 32340 */ 32341 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32342 public final void emitSHR_Reg_Imm(GPR dstReg, int imm) { 32343 int miStart = mi; 32344 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32345 // no size prefix 32346 generateREXprefix(false, null, null, dstReg); 32347 if (imm == 1) { 32348 setMachineCodes(mi++, (byte) 0xD1); 32349 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 32350 } else { 32351 setMachineCodes(mi++, (byte) 0xC1); 32352 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 32353 emitImm8((byte)imm); 32354 } 32355 if (lister != null) lister.RI(miStart, "SHR", dstReg, imm); 32356 } 32357 32358 /** 32359 * Generate a register-indirect--immediate SHR. That is, 32360 * <PRE> 32361 * logical shift right of [dstBase] by imm 32362 * </PRE> 32363 * 32364 * @param dstBase the destination base register 32365 * @param imm immediate 32366 */ 32367 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32368 public final void emitSHR_RegInd_Imm(GPR dstBase, int imm) { 32369 int miStart = mi; 32370 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32371 // no size prefix 32372 generateREXprefix(false, null, null, dstBase); 32373 if (imm == 1) { 32374 setMachineCodes(mi++, (byte) 0xD1); 32375 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 32376 } else { 32377 setMachineCodes(mi++, (byte) 0xC1); 32378 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 32379 emitImm8((byte)imm); 32380 } 32381 if (lister != null) lister.RNI(miStart, "SHR", dstBase, imm); 32382 } 32383 32384 /** 32385 * Generate a register-displacement--immediate SHR. That is, 32386 * <PRE> 32387 * logical shift right of [dstBase + dstDisp] by imm 32388 * </PRE> 32389 * 32390 * @param dstBase the destination base register 32391 * @param dstDisp the destination displacement 32392 * @param imm immediate 32393 */ 32394 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32395 public final void emitSHR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 32396 int miStart = mi; 32397 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32398 // no size prefix 32399 generateREXprefix(false, null, null, dstBase); 32400 if (imm == 1) { 32401 setMachineCodes(mi++, (byte) 0xD1); 32402 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 32403 } else { 32404 setMachineCodes(mi++, (byte) 0xC1); 32405 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 32406 emitImm8((byte)imm); 32407 } 32408 if (lister != null) lister.RDI(miStart, "SHR", dstBase, dstDisp, imm); 32409 } 32410 32411 /** 32412 * Generate a register-offset--immediate SHR. That is, 32413 * <PRE> 32414 * logical shift right of [dstIndex<<dstScale + dstDisp] by imm 32415 * </PRE> 32416 * 32417 * @param dstIndex the destination index register 32418 * @param dstScale the destination shift amount 32419 * @param dstDisp the destination displacement 32420 * @param imm immediate 32421 */ 32422 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32423 public final void emitSHR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 32424 int miStart = mi; 32425 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32426 // no size prefix 32427 generateREXprefix(false, null, dstIndex, null); 32428 if (imm == 1) { 32429 setMachineCodes(mi++, (byte) 0xD1); 32430 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32431 } else { 32432 setMachineCodes(mi++, (byte) 0xC1); 32433 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32434 emitImm8((byte)imm); 32435 } 32436 if (lister != null) lister.RFDI(miStart, "SHR", dstIndex, dstScale, dstDisp, imm); 32437 } 32438 32439 /** 32440 * Generate a absolute--immediate SHR. That is, 32441 * <PRE> 32442 * logical shift right of [dstDisp] by imm 32443 * </PRE> 32444 * 32445 * @param dstDisp the destination displacement 32446 * @param imm immediate 32447 */ 32448 public final void emitSHR_Abs_Imm(Address dstDisp, int imm) { 32449 int miStart = mi; 32450 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32451 // no size prefix 32452 generateREXprefix(false, null, null, null); 32453 if (imm == 1) { 32454 setMachineCodes(mi++, (byte) 0xD1); 32455 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 32456 } else { 32457 setMachineCodes(mi++, (byte) 0xC1); 32458 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 32459 emitImm8((byte)imm); 32460 } 32461 if (lister != null) lister.RAI(miStart, "SHR", dstDisp, imm); 32462 } 32463 32464 /** 32465 * Generate a register-index--immediate SHR. That is, 32466 * <PRE> 32467 * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 32468 * </PRE> 32469 * 32470 * @param dstBase the destination base register 32471 * @param dstIndex the destination index register 32472 * @param dstScale the destination shift amount 32473 * @param dstDisp the destination displacement 32474 * @param imm immediate 32475 */ 32476 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 32477 public final void emitSHR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 32478 int miStart = mi; 32479 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32480 // no size prefix 32481 generateREXprefix(false, null, dstIndex, dstBase); 32482 if (imm == 1) { 32483 setMachineCodes(mi++, (byte) 0xD1); 32484 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32485 } else { 32486 setMachineCodes(mi++, (byte) 0xC1); 32487 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32488 emitImm8((byte)imm); 32489 } 32490 if (lister != null) lister.RXDI(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, imm); 32491 } 32492 32493 /** 32494 * Generate a register--register SHR. That is, 32495 * <PRE> 32496 * logical shift right of dstReg by srcReg 32497 * </PRE> 32498 * 32499 * @param dstReg the destination register 32500 * @param srcReg must always be ECX 32501 */ 32502 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 32503 public final void emitSHR_Reg_Reg(GPR dstReg, GPR srcReg) { 32504 int miStart = mi; 32505 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32506 // no size prefix 32507 generateREXprefix(false, null, null, dstReg); 32508 setMachineCodes(mi++, (byte) 0xD3); 32509 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 32510 if (lister != null) lister.RR(miStart, "SHR", dstReg, srcReg); 32511 } 32512 32513 /** 32514 * Generate a register-indirect--register SHR. That is, 32515 * <PRE> 32516 * logical shift right of [dstBase] by srcReg 32517 * </PRE> 32518 * 32519 * @param dstBase the destination register 32520 * @param srcReg must always be ECX 32521 */ 32522 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 32523 public final void emitSHR_RegInd_Reg(GPR dstBase, GPR srcReg) { 32524 int miStart = mi; 32525 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32526 // no size prefix 32527 generateREXprefix(false, null, null, dstBase); 32528 setMachineCodes(mi++, (byte) 0xD3); 32529 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 32530 if (lister != null) lister.RNR(miStart, "SHR", dstBase, srcReg); 32531 } 32532 32533 /** 32534 * Generate a register-displacement--register SHR. That is, 32535 * <PRE> 32536 * logical shift right of [dstBase + dstDisp] by srcReg 32537 * </PRE> 32538 * 32539 * @param dstBase the destination base register 32540 * @param dstDisp the destination displacement 32541 * @param srcReg must always be ECX 32542 */ 32543 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 32544 public final void emitSHR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 32545 int miStart = mi; 32546 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32547 // no size prefix 32548 generateREXprefix(false, null, null, dstBase); 32549 setMachineCodes(mi++, (byte) 0xD3); 32550 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 32551 if (lister != null) lister.RDR(miStart, "SHR", dstBase, dstDisp, srcReg); 32552 } 32553 32554 /** 32555 * Generate a register-offset--register SHR. That is, 32556 * <PRE> 32557 * logical shift right of [dstIndex<<dstScale + dstDisp] by srcReg 32558 * </PRE> 32559 * 32560 * @param dstIndex the destination index register 32561 * @param dstScale the destination shift amount 32562 * @param dstDisp the destination displacement 32563 * @param srcReg must always be ECX 32564 */ 32565 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 32566 public final void emitSHR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 32567 int miStart = mi; 32568 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32569 // no size prefix 32570 generateREXprefix(false, null, dstIndex, null); 32571 setMachineCodes(mi++, (byte) 0xD3); 32572 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32573 if (lister != null) lister.RFDR(miStart, "SHR", dstIndex, dstScale, dstDisp, srcReg); 32574 } 32575 32576 /** 32577 * Generate an absolute--register SHR. That is, 32578 * <PRE> 32579 * logical shift right of [dstDisp] by srcReg 32580 * </PRE> 32581 * 32582 * @param dstDisp the destination displacement 32583 * @param srcReg must always be ECX 32584 */ 32585 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 32586 public final void emitSHR_Abs_Reg(Address dstDisp, GPR srcReg) { 32587 int miStart = mi; 32588 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32589 // no size prefix 32590 generateREXprefix(false, null, null, null); 32591 setMachineCodes(mi++, (byte) 0xD3); 32592 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 32593 if (lister != null) lister.RAR(miStart, "SHR", dstDisp, srcReg); 32594 } 32595 32596 /** 32597 * Generate a register-displacement--register SHR. That is, 32598 * <PRE> 32599 * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 32600 * </PRE> 32601 * 32602 * @param dstBase the destination base register 32603 * @param dstIndex the destination index register 32604 * @param dstScale the destination shift amount 32605 * @param dstDisp the destination displacement 32606 * @param srcReg must always be ECX 32607 */ 32608 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 32609 public final void emitSHR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 32610 int miStart = mi; 32611 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32612 // no size prefix 32613 generateREXprefix(false, null, dstIndex, dstBase); 32614 setMachineCodes(mi++, (byte) 0xD3); 32615 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32616 if (lister != null) lister.RXDR(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 32617 } 32618 32619 /** 32620 * Generate a register--immediate SHR. That is, 32621 * <PRE> 32622 * logical shift right of dstReg by imm 32623 * </PRE> 32624 * 32625 * @param dstReg the destination register 32626 * @param imm immediate 32627 */ 32628 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32629 public final void emitSHR_Reg_Imm_Quad(GPR dstReg, int imm) { 32630 int miStart = mi; 32631 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32632 // no size prefix 32633 generateREXprefix(true, null, null, dstReg); 32634 if (imm == 1) { 32635 setMachineCodes(mi++, (byte) 0xD1); 32636 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 32637 } else { 32638 setMachineCodes(mi++, (byte) 0xC1); 32639 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 32640 emitImm8((byte)imm); 32641 } 32642 if (lister != null) lister.RI(miStart, "SHR", dstReg, imm); 32643 } 32644 32645 /** 32646 * Generate a register-indirect--immediate SHR. That is, 32647 * <PRE> 32648 * logical shift right of [dstBase] by imm 32649 * </PRE> 32650 * 32651 * @param dstBase the destination base register 32652 * @param imm immediate 32653 */ 32654 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32655 public final void emitSHR_RegInd_Imm_Quad(GPR dstBase, int imm) { 32656 int miStart = mi; 32657 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32658 // no size prefix 32659 generateREXprefix(true, null, null, dstBase); 32660 if (imm == 1) { 32661 setMachineCodes(mi++, (byte) 0xD1); 32662 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 32663 } else { 32664 setMachineCodes(mi++, (byte) 0xC1); 32665 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 32666 emitImm8((byte)imm); 32667 } 32668 if (lister != null) lister.RNI(miStart, "SHR", dstBase, imm); 32669 } 32670 32671 /** 32672 * Generate a register-displacement--immediate SHR. That is, 32673 * <PRE> 32674 * logical shift right of [dstBase + dstDisp] by imm 32675 * </PRE> 32676 * 32677 * @param dstBase the destination base register 32678 * @param dstDisp the destination displacement 32679 * @param imm immediate 32680 */ 32681 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32682 public final void emitSHR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 32683 int miStart = mi; 32684 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32685 // no size prefix 32686 generateREXprefix(true, null, null, dstBase); 32687 if (imm == 1) { 32688 setMachineCodes(mi++, (byte) 0xD1); 32689 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 32690 } else { 32691 setMachineCodes(mi++, (byte) 0xC1); 32692 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 32693 emitImm8((byte)imm); 32694 } 32695 if (lister != null) lister.RDI(miStart, "SHR", dstBase, dstDisp, imm); 32696 } 32697 32698 /** 32699 * Generate a register-offset--immediate SHR. That is, 32700 * <PRE> 32701 * logical shift right of [dstIndex<<dstScale + dstDisp] by imm 32702 * </PRE> 32703 * 32704 * @param dstIndex the destination index register 32705 * @param dstScale the destination shift amount 32706 * @param dstDisp the destination displacement 32707 * @param imm immediate 32708 */ 32709 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32710 public final void emitSHR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 32711 int miStart = mi; 32712 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32713 // no size prefix 32714 generateREXprefix(true, null, dstIndex, null); 32715 if (imm == 1) { 32716 setMachineCodes(mi++, (byte) 0xD1); 32717 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32718 } else { 32719 setMachineCodes(mi++, (byte) 0xC1); 32720 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32721 emitImm8((byte)imm); 32722 } 32723 if (lister != null) lister.RFDI(miStart, "SHR", dstIndex, dstScale, dstDisp, imm); 32724 } 32725 32726 /** 32727 * Generate a absolute--immediate SHR. That is, 32728 * <PRE> 32729 * logical shift right of [dstDisp] by imm 32730 * </PRE> 32731 * 32732 * @param dstDisp the destination displacement 32733 * @param imm immediate 32734 */ 32735 public final void emitSHR_Abs_Imm_Quad(Address dstDisp, int imm) { 32736 int miStart = mi; 32737 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32738 // no size prefix 32739 generateREXprefix(true, null, null, null); 32740 if (imm == 1) { 32741 setMachineCodes(mi++, (byte) 0xD1); 32742 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 32743 } else { 32744 setMachineCodes(mi++, (byte) 0xC1); 32745 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 32746 emitImm8((byte)imm); 32747 } 32748 if (lister != null) lister.RAI(miStart, "SHR", dstDisp, imm); 32749 } 32750 32751 /** 32752 * Generate a register-index--immediate SHR. That is, 32753 * <PRE> 32754 * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 32755 * </PRE> 32756 * 32757 * @param dstBase the destination base register 32758 * @param dstIndex the destination index register 32759 * @param dstScale the destination shift amount 32760 * @param dstDisp the destination displacement 32761 * @param imm immediate 32762 */ 32763 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 32764 public final void emitSHR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 32765 int miStart = mi; 32766 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32767 // no size prefix 32768 generateREXprefix(true, null, dstIndex, dstBase); 32769 if (imm == 1) { 32770 setMachineCodes(mi++, (byte) 0xD1); 32771 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32772 } else { 32773 setMachineCodes(mi++, (byte) 0xC1); 32774 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32775 emitImm8((byte)imm); 32776 } 32777 if (lister != null) lister.RXDI(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, imm); 32778 } 32779 32780 /** 32781 * Generate a register--register SHR. That is, 32782 * <PRE> 32783 * logical shift right of dstReg by srcReg 32784 * </PRE> 32785 * 32786 * @param dstReg the destination register 32787 * @param srcReg must always be ECX 32788 */ 32789 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 32790 public final void emitSHR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 32791 int miStart = mi; 32792 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32793 // no size prefix 32794 generateREXprefix(true, null, null, dstReg); 32795 setMachineCodes(mi++, (byte) 0xD3); 32796 emitRegRegOperands(dstReg, GPR.getForOpcode(0x5)); 32797 if (lister != null) lister.RR(miStart, "SHR", dstReg, srcReg); 32798 } 32799 32800 /** 32801 * Generate a register-indirect--register SHR. That is, 32802 * <PRE> 32803 * logical shift right of [dstBase] by srcReg 32804 * </PRE> 32805 * 32806 * @param dstBase the destination register 32807 * @param srcReg must always be ECX 32808 */ 32809 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 32810 public final void emitSHR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 32811 int miStart = mi; 32812 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32813 // no size prefix 32814 generateREXprefix(true, null, null, dstBase); 32815 setMachineCodes(mi++, (byte) 0xD3); 32816 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5)); 32817 if (lister != null) lister.RNR(miStart, "SHR", dstBase, srcReg); 32818 } 32819 32820 /** 32821 * Generate a register-displacement--register SHR. That is, 32822 * <PRE> 32823 * logical shift right of [dstBase + dstDisp] by srcReg 32824 * </PRE> 32825 * 32826 * @param dstBase the destination base register 32827 * @param dstDisp the destination displacement 32828 * @param srcReg must always be ECX 32829 */ 32830 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 32831 public final void emitSHR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 32832 int miStart = mi; 32833 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32834 // no size prefix 32835 generateREXprefix(true, null, null, dstBase); 32836 setMachineCodes(mi++, (byte) 0xD3); 32837 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5)); 32838 if (lister != null) lister.RDR(miStart, "SHR", dstBase, dstDisp, srcReg); 32839 } 32840 32841 /** 32842 * Generate a register-offset--register SHR. That is, 32843 * <PRE> 32844 * logical shift right of [dstIndex<<dstScale + dstDisp] by srcReg 32845 * </PRE> 32846 * 32847 * @param dstIndex the destination index register 32848 * @param dstScale the destination shift amount 32849 * @param dstDisp the destination displacement 32850 * @param srcReg must always be ECX 32851 */ 32852 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 32853 public final void emitSHR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 32854 int miStart = mi; 32855 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32856 // no size prefix 32857 generateREXprefix(true, null, dstIndex, null); 32858 setMachineCodes(mi++, (byte) 0xD3); 32859 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32860 if (lister != null) lister.RFDR(miStart, "SHR", dstIndex, dstScale, dstDisp, srcReg); 32861 } 32862 32863 /** 32864 * Generate an absolute--register SHR. That is, 32865 * <PRE> 32866 * logical shift right of [dstDisp] by srcReg 32867 * </PRE> 32868 * 32869 * @param dstDisp the destination displacement 32870 * @param srcReg must always be ECX 32871 */ 32872 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 32873 public final void emitSHR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 32874 int miStart = mi; 32875 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32876 // no size prefix 32877 generateREXprefix(true, null, null, null); 32878 setMachineCodes(mi++, (byte) 0xD3); 32879 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5)); 32880 if (lister != null) lister.RAR(miStart, "SHR", dstDisp, srcReg); 32881 } 32882 32883 /** 32884 * Generate a register-displacement--register SHR. That is, 32885 * <PRE> 32886 * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 32887 * </PRE> 32888 * 32889 * @param dstBase the destination base register 32890 * @param dstIndex the destination index register 32891 * @param dstScale the destination shift amount 32892 * @param dstDisp the destination displacement 32893 * @param srcReg must always be ECX 32894 */ 32895 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 32896 public final void emitSHR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 32897 int miStart = mi; 32898 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 32899 // no size prefix 32900 generateREXprefix(true, null, dstIndex, dstBase); 32901 setMachineCodes(mi++, (byte) 0xD3); 32902 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5)); 32903 if (lister != null) lister.RXDR(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 32904 } 32905 32906 /** 32907 * Generate a register--immediate SAR. That is, 32908 * <PRE> 32909 * arithemetic shift right of dstReg by imm 32910 * </PRE> 32911 * 32912 * @param dstReg the destination register 32913 * @param imm immediate 32914 */ 32915 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32916 public final void emitSAR_Reg_Imm_Byte(GPR dstReg, int imm) { 32917 int miStart = mi; 32918 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32919 // no size prefix 32920 generateREXprefix(false, null, null, dstReg); 32921 if (imm == 1) { 32922 setMachineCodes(mi++, (byte) 0xD0); 32923 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 32924 } else { 32925 setMachineCodes(mi++, (byte) 0xC0); 32926 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 32927 emitImm8((byte)imm); 32928 } 32929 if (lister != null) lister.RI(miStart, "SAR", dstReg, imm); 32930 } 32931 32932 /** 32933 * Generate a register-indirect--immediate SAR. That is, 32934 * <PRE> 32935 * arithemetic shift right of [dstBase] by imm 32936 * </PRE> 32937 * 32938 * @param dstBase the destination base register 32939 * @param imm immediate 32940 */ 32941 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32942 public final void emitSAR_RegInd_Imm_Byte(GPR dstBase, int imm) { 32943 int miStart = mi; 32944 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32945 // no size prefix 32946 generateREXprefix(false, null, null, dstBase); 32947 if (imm == 1) { 32948 setMachineCodes(mi++, (byte) 0xD0); 32949 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 32950 } else { 32951 setMachineCodes(mi++, (byte) 0xC0); 32952 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 32953 emitImm8((byte)imm); 32954 } 32955 if (lister != null) lister.RNI(miStart, "SAR", dstBase, imm); 32956 } 32957 32958 /** 32959 * Generate a register-displacement--immediate SAR. That is, 32960 * <PRE> 32961 * arithemetic shift right of [dstBase + dstDisp] by imm 32962 * </PRE> 32963 * 32964 * @param dstBase the destination base register 32965 * @param dstDisp the destination displacement 32966 * @param imm immediate 32967 */ 32968 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32969 public final void emitSAR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) { 32970 int miStart = mi; 32971 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 32972 // no size prefix 32973 generateREXprefix(false, null, null, dstBase); 32974 if (imm == 1) { 32975 setMachineCodes(mi++, (byte) 0xD0); 32976 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 32977 } else { 32978 setMachineCodes(mi++, (byte) 0xC0); 32979 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 32980 emitImm8((byte)imm); 32981 } 32982 if (lister != null) lister.RDI(miStart, "SAR", dstBase, dstDisp, imm); 32983 } 32984 32985 /** 32986 * Generate a register-offset--immediate SAR. That is, 32987 * <PRE> 32988 * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by imm 32989 * </PRE> 32990 * 32991 * @param dstIndex the destination index register 32992 * @param dstScale the destination shift amount 32993 * @param dstDisp the destination displacement 32994 * @param imm immediate 32995 */ 32996 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 32997 public final void emitSAR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 32998 int miStart = mi; 32999 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33000 // no size prefix 33001 generateREXprefix(false, null, dstIndex, null); 33002 if (imm == 1) { 33003 setMachineCodes(mi++, (byte) 0xD0); 33004 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33005 } else { 33006 setMachineCodes(mi++, (byte) 0xC0); 33007 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33008 emitImm8((byte)imm); 33009 } 33010 if (lister != null) lister.RFDI(miStart, "SAR", dstIndex, dstScale, dstDisp, imm); 33011 } 33012 33013 /** 33014 * Generate a absolute--immediate SAR. That is, 33015 * <PRE> 33016 * arithemetic shift right of [dstDisp] by imm 33017 * </PRE> 33018 * 33019 * @param dstDisp the destination displacement 33020 * @param imm immediate 33021 */ 33022 public final void emitSAR_Abs_Imm_Byte(Address dstDisp, int imm) { 33023 int miStart = mi; 33024 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33025 // no size prefix 33026 generateREXprefix(false, null, null, null); 33027 if (imm == 1) { 33028 setMachineCodes(mi++, (byte) 0xD0); 33029 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33030 } else { 33031 setMachineCodes(mi++, (byte) 0xC0); 33032 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33033 emitImm8((byte)imm); 33034 } 33035 if (lister != null) lister.RAI(miStart, "SAR", dstDisp, imm); 33036 } 33037 33038 /** 33039 * Generate a register-index--immediate SAR. That is, 33040 * <PRE> 33041 * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 33042 * </PRE> 33043 * 33044 * @param dstBase the destination base register 33045 * @param dstIndex the destination index register 33046 * @param dstScale the destination shift amount 33047 * @param dstDisp the destination displacement 33048 * @param imm immediate 33049 */ 33050 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33051 public final void emitSAR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 33052 int miStart = mi; 33053 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33054 // no size prefix 33055 generateREXprefix(false, null, dstIndex, dstBase); 33056 if (imm == 1) { 33057 setMachineCodes(mi++, (byte) 0xD0); 33058 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33059 } else { 33060 setMachineCodes(mi++, (byte) 0xC0); 33061 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33062 emitImm8((byte)imm); 33063 } 33064 if (lister != null) lister.RXDI(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, imm); 33065 } 33066 33067 /** 33068 * Generate a register--register SAR. That is, 33069 * <PRE> 33070 * arithemetic shift right of dstReg by srcReg 33071 * </PRE> 33072 * 33073 * @param dstReg the destination register 33074 * @param srcReg must always be ECX 33075 */ 33076 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33077 public final void emitSAR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) { 33078 int miStart = mi; 33079 if (VM.VerifyAssertions) VM._assert(dstReg.isValidAs8bitRegister()); 33080 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33081 // no size prefix 33082 generateREXprefix(false, null, null, dstReg); 33083 setMachineCodes(mi++, (byte) 0xD2); 33084 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 33085 if (lister != null) lister.RR(miStart, "SAR", dstReg, srcReg); 33086 } 33087 33088 /** 33089 * Generate a register-indirect--register SAR. That is, 33090 * <PRE> 33091 * arithemetic shift right of [dstBase] by srcReg 33092 * </PRE> 33093 * 33094 * @param dstBase the destination register 33095 * @param srcReg must always be ECX 33096 */ 33097 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33098 public final void emitSAR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) { 33099 int miStart = mi; 33100 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33101 // no size prefix 33102 generateREXprefix(false, null, null, dstBase); 33103 setMachineCodes(mi++, (byte) 0xD2); 33104 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 33105 if (lister != null) lister.RNR(miStart, "SAR", dstBase, srcReg); 33106 } 33107 33108 /** 33109 * Generate a register-displacement--register SAR. That is, 33110 * <PRE> 33111 * arithemetic shift right of [dstBase + dstDisp] by srcReg 33112 * </PRE> 33113 * 33114 * @param dstBase the destination base register 33115 * @param dstDisp the destination displacement 33116 * @param srcReg must always be ECX 33117 */ 33118 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 33119 public final void emitSAR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) { 33120 int miStart = mi; 33121 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33122 // no size prefix 33123 generateREXprefix(false, null, null, dstBase); 33124 setMachineCodes(mi++, (byte) 0xD2); 33125 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 33126 if (lister != null) lister.RDR(miStart, "SAR", dstBase, dstDisp, srcReg); 33127 } 33128 33129 /** 33130 * Generate a register-offset--register SAR. That is, 33131 * <PRE> 33132 * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by srcReg 33133 * </PRE> 33134 * 33135 * @param dstIndex the destination index register 33136 * @param dstScale the destination shift amount 33137 * @param dstDisp the destination displacement 33138 * @param srcReg must always be ECX 33139 */ 33140 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 33141 public final void emitSAR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 33142 int miStart = mi; 33143 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33144 // no size prefix 33145 generateREXprefix(false, null, dstIndex, null); 33146 setMachineCodes(mi++, (byte) 0xD2); 33147 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33148 if (lister != null) lister.RFDR(miStart, "SAR", dstIndex, dstScale, dstDisp, srcReg); 33149 } 33150 33151 /** 33152 * Generate an absolute--register SAR. That is, 33153 * <PRE> 33154 * arithemetic shift right of [dstDisp] by srcReg 33155 * </PRE> 33156 * 33157 * @param dstDisp the destination displacement 33158 * @param srcReg must always be ECX 33159 */ 33160 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 33161 public final void emitSAR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) { 33162 int miStart = mi; 33163 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33164 // no size prefix 33165 generateREXprefix(false, null, null, null); 33166 setMachineCodes(mi++, (byte) 0xD2); 33167 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33168 if (lister != null) lister.RAR(miStart, "SAR", dstDisp, srcReg); 33169 } 33170 33171 /** 33172 * Generate a register-displacement--register SAR. That is, 33173 * <PRE> 33174 * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 33175 * </PRE> 33176 * 33177 * @param dstBase the destination base register 33178 * @param dstIndex the destination index register 33179 * @param dstScale the destination shift amount 33180 * @param dstDisp the destination displacement 33181 * @param srcReg must always be ECX 33182 */ 33183 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 33184 public final void emitSAR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 33185 int miStart = mi; 33186 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33187 // no size prefix 33188 generateREXprefix(false, null, dstIndex, dstBase); 33189 setMachineCodes(mi++, (byte) 0xD2); 33190 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33191 if (lister != null) lister.RXDR(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 33192 } 33193 33194 /** 33195 * Generate a register--immediate SAR. That is, 33196 * <PRE> 33197 * arithemetic shift right of dstReg by imm 33198 * </PRE> 33199 * 33200 * @param dstReg the destination register 33201 * @param imm immediate 33202 */ 33203 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33204 public final void emitSAR_Reg_Imm_Word(GPR dstReg, int imm) { 33205 int miStart = mi; 33206 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33207 setMachineCodes(mi++, (byte) 0x66); 33208 generateREXprefix(false, null, null, dstReg); 33209 if (imm == 1) { 33210 setMachineCodes(mi++, (byte) 0xD1); 33211 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 33212 } else { 33213 setMachineCodes(mi++, (byte) 0xC1); 33214 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 33215 emitImm8((byte)imm); 33216 } 33217 if (lister != null) lister.RI(miStart, "SAR", dstReg, imm); 33218 } 33219 33220 /** 33221 * Generate a register-indirect--immediate SAR. That is, 33222 * <PRE> 33223 * arithemetic shift right of [dstBase] by imm 33224 * </PRE> 33225 * 33226 * @param dstBase the destination base register 33227 * @param imm immediate 33228 */ 33229 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33230 public final void emitSAR_RegInd_Imm_Word(GPR dstBase, int imm) { 33231 int miStart = mi; 33232 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33233 setMachineCodes(mi++, (byte) 0x66); 33234 generateREXprefix(false, null, null, dstBase); 33235 if (imm == 1) { 33236 setMachineCodes(mi++, (byte) 0xD1); 33237 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 33238 } else { 33239 setMachineCodes(mi++, (byte) 0xC1); 33240 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 33241 emitImm8((byte)imm); 33242 } 33243 if (lister != null) lister.RNI(miStart, "SAR", dstBase, imm); 33244 } 33245 33246 /** 33247 * Generate a register-displacement--immediate SAR. That is, 33248 * <PRE> 33249 * arithemetic shift right of [dstBase + dstDisp] by imm 33250 * </PRE> 33251 * 33252 * @param dstBase the destination base register 33253 * @param dstDisp the destination displacement 33254 * @param imm immediate 33255 */ 33256 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33257 public final void emitSAR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) { 33258 int miStart = mi; 33259 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33260 setMachineCodes(mi++, (byte) 0x66); 33261 generateREXprefix(false, null, null, dstBase); 33262 if (imm == 1) { 33263 setMachineCodes(mi++, (byte) 0xD1); 33264 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 33265 } else { 33266 setMachineCodes(mi++, (byte) 0xC1); 33267 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 33268 emitImm8((byte)imm); 33269 } 33270 if (lister != null) lister.RDI(miStart, "SAR", dstBase, dstDisp, imm); 33271 } 33272 33273 /** 33274 * Generate a register-offset--immediate SAR. That is, 33275 * <PRE> 33276 * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by imm 33277 * </PRE> 33278 * 33279 * @param dstIndex the destination index register 33280 * @param dstScale the destination shift amount 33281 * @param dstDisp the destination displacement 33282 * @param imm immediate 33283 */ 33284 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33285 public final void emitSAR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 33286 int miStart = mi; 33287 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33288 setMachineCodes(mi++, (byte) 0x66); 33289 generateREXprefix(false, null, dstIndex, null); 33290 if (imm == 1) { 33291 setMachineCodes(mi++, (byte) 0xD1); 33292 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33293 } else { 33294 setMachineCodes(mi++, (byte) 0xC1); 33295 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33296 emitImm8((byte)imm); 33297 } 33298 if (lister != null) lister.RFDI(miStart, "SAR", dstIndex, dstScale, dstDisp, imm); 33299 } 33300 33301 /** 33302 * Generate a absolute--immediate SAR. That is, 33303 * <PRE> 33304 * arithemetic shift right of [dstDisp] by imm 33305 * </PRE> 33306 * 33307 * @param dstDisp the destination displacement 33308 * @param imm immediate 33309 */ 33310 public final void emitSAR_Abs_Imm_Word(Address dstDisp, int imm) { 33311 int miStart = mi; 33312 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33313 setMachineCodes(mi++, (byte) 0x66); 33314 generateREXprefix(false, null, null, null); 33315 if (imm == 1) { 33316 setMachineCodes(mi++, (byte) 0xD1); 33317 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33318 } else { 33319 setMachineCodes(mi++, (byte) 0xC1); 33320 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33321 emitImm8((byte)imm); 33322 } 33323 if (lister != null) lister.RAI(miStart, "SAR", dstDisp, imm); 33324 } 33325 33326 /** 33327 * Generate a register-index--immediate SAR. That is, 33328 * <PRE> 33329 * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 33330 * </PRE> 33331 * 33332 * @param dstBase the destination base register 33333 * @param dstIndex the destination index register 33334 * @param dstScale the destination shift amount 33335 * @param dstDisp the destination displacement 33336 * @param imm immediate 33337 */ 33338 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33339 public final void emitSAR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 33340 int miStart = mi; 33341 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33342 setMachineCodes(mi++, (byte) 0x66); 33343 generateREXprefix(false, null, dstIndex, dstBase); 33344 if (imm == 1) { 33345 setMachineCodes(mi++, (byte) 0xD1); 33346 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33347 } else { 33348 setMachineCodes(mi++, (byte) 0xC1); 33349 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33350 emitImm8((byte)imm); 33351 } 33352 if (lister != null) lister.RXDI(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, imm); 33353 } 33354 33355 /** 33356 * Generate a register--register SAR. That is, 33357 * <PRE> 33358 * arithemetic shift right of dstReg by srcReg 33359 * </PRE> 33360 * 33361 * @param dstReg the destination register 33362 * @param srcReg must always be ECX 33363 */ 33364 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33365 public final void emitSAR_Reg_Reg_Word(GPR dstReg, GPR srcReg) { 33366 int miStart = mi; 33367 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33368 setMachineCodes(mi++, (byte) 0x66); 33369 generateREXprefix(false, null, null, dstReg); 33370 setMachineCodes(mi++, (byte) 0xD3); 33371 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 33372 if (lister != null) lister.RR(miStart, "SAR", dstReg, srcReg); 33373 } 33374 33375 /** 33376 * Generate a register-indirect--register SAR. That is, 33377 * <PRE> 33378 * arithemetic shift right of [dstBase] by srcReg 33379 * </PRE> 33380 * 33381 * @param dstBase the destination register 33382 * @param srcReg must always be ECX 33383 */ 33384 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33385 public final void emitSAR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) { 33386 int miStart = mi; 33387 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33388 setMachineCodes(mi++, (byte) 0x66); 33389 generateREXprefix(false, null, null, dstBase); 33390 setMachineCodes(mi++, (byte) 0xD3); 33391 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 33392 if (lister != null) lister.RNR(miStart, "SAR", dstBase, srcReg); 33393 } 33394 33395 /** 33396 * Generate a register-displacement--register SAR. That is, 33397 * <PRE> 33398 * arithemetic shift right of [dstBase + dstDisp] by srcReg 33399 * </PRE> 33400 * 33401 * @param dstBase the destination base register 33402 * @param dstDisp the destination displacement 33403 * @param srcReg must always be ECX 33404 */ 33405 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 33406 public final void emitSAR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) { 33407 int miStart = mi; 33408 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33409 setMachineCodes(mi++, (byte) 0x66); 33410 generateREXprefix(false, null, null, dstBase); 33411 setMachineCodes(mi++, (byte) 0xD3); 33412 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 33413 if (lister != null) lister.RDR(miStart, "SAR", dstBase, dstDisp, srcReg); 33414 } 33415 33416 /** 33417 * Generate a register-offset--register SAR. That is, 33418 * <PRE> 33419 * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by srcReg 33420 * </PRE> 33421 * 33422 * @param dstIndex the destination index register 33423 * @param dstScale the destination shift amount 33424 * @param dstDisp the destination displacement 33425 * @param srcReg must always be ECX 33426 */ 33427 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 33428 public final void emitSAR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 33429 int miStart = mi; 33430 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33431 setMachineCodes(mi++, (byte) 0x66); 33432 generateREXprefix(false, null, dstIndex, null); 33433 setMachineCodes(mi++, (byte) 0xD3); 33434 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33435 if (lister != null) lister.RFDR(miStart, "SAR", dstIndex, dstScale, dstDisp, srcReg); 33436 } 33437 33438 /** 33439 * Generate an absolute--register SAR. That is, 33440 * <PRE> 33441 * arithemetic shift right of [dstDisp] by srcReg 33442 * </PRE> 33443 * 33444 * @param dstDisp the destination displacement 33445 * @param srcReg must always be ECX 33446 */ 33447 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 33448 public final void emitSAR_Abs_Reg_Word(Address dstDisp, GPR srcReg) { 33449 int miStart = mi; 33450 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33451 setMachineCodes(mi++, (byte) 0x66); 33452 generateREXprefix(false, null, null, null); 33453 setMachineCodes(mi++, (byte) 0xD3); 33454 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33455 if (lister != null) lister.RAR(miStart, "SAR", dstDisp, srcReg); 33456 } 33457 33458 /** 33459 * Generate a register-displacement--register SAR. That is, 33460 * <PRE> 33461 * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 33462 * </PRE> 33463 * 33464 * @param dstBase the destination base register 33465 * @param dstIndex the destination index register 33466 * @param dstScale the destination shift amount 33467 * @param dstDisp the destination displacement 33468 * @param srcReg must always be ECX 33469 */ 33470 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 33471 public final void emitSAR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 33472 int miStart = mi; 33473 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33474 setMachineCodes(mi++, (byte) 0x66); 33475 generateREXprefix(false, null, dstIndex, dstBase); 33476 setMachineCodes(mi++, (byte) 0xD3); 33477 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33478 if (lister != null) lister.RXDR(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 33479 } 33480 33481 /** 33482 * Generate a register--immediate SAR. That is, 33483 * <PRE> 33484 * arithemetic shift right of dstReg by imm 33485 * </PRE> 33486 * 33487 * @param dstReg the destination register 33488 * @param imm immediate 33489 */ 33490 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33491 public final void emitSAR_Reg_Imm(GPR dstReg, int imm) { 33492 int miStart = mi; 33493 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33494 // no size prefix 33495 generateREXprefix(false, null, null, dstReg); 33496 if (imm == 1) { 33497 setMachineCodes(mi++, (byte) 0xD1); 33498 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 33499 } else { 33500 setMachineCodes(mi++, (byte) 0xC1); 33501 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 33502 emitImm8((byte)imm); 33503 } 33504 if (lister != null) lister.RI(miStart, "SAR", dstReg, imm); 33505 } 33506 33507 /** 33508 * Generate a register-indirect--immediate SAR. That is, 33509 * <PRE> 33510 * arithemetic shift right of [dstBase] by imm 33511 * </PRE> 33512 * 33513 * @param dstBase the destination base register 33514 * @param imm immediate 33515 */ 33516 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33517 public final void emitSAR_RegInd_Imm(GPR dstBase, int imm) { 33518 int miStart = mi; 33519 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33520 // no size prefix 33521 generateREXprefix(false, null, null, dstBase); 33522 if (imm == 1) { 33523 setMachineCodes(mi++, (byte) 0xD1); 33524 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 33525 } else { 33526 setMachineCodes(mi++, (byte) 0xC1); 33527 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 33528 emitImm8((byte)imm); 33529 } 33530 if (lister != null) lister.RNI(miStart, "SAR", dstBase, imm); 33531 } 33532 33533 /** 33534 * Generate a register-displacement--immediate SAR. That is, 33535 * <PRE> 33536 * arithemetic shift right of [dstBase + dstDisp] by imm 33537 * </PRE> 33538 * 33539 * @param dstBase the destination base register 33540 * @param dstDisp the destination displacement 33541 * @param imm immediate 33542 */ 33543 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33544 public final void emitSAR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) { 33545 int miStart = mi; 33546 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33547 // no size prefix 33548 generateREXprefix(false, null, null, dstBase); 33549 if (imm == 1) { 33550 setMachineCodes(mi++, (byte) 0xD1); 33551 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 33552 } else { 33553 setMachineCodes(mi++, (byte) 0xC1); 33554 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 33555 emitImm8((byte)imm); 33556 } 33557 if (lister != null) lister.RDI(miStart, "SAR", dstBase, dstDisp, imm); 33558 } 33559 33560 /** 33561 * Generate a register-offset--immediate SAR. That is, 33562 * <PRE> 33563 * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by imm 33564 * </PRE> 33565 * 33566 * @param dstIndex the destination index register 33567 * @param dstScale the destination shift amount 33568 * @param dstDisp the destination displacement 33569 * @param imm immediate 33570 */ 33571 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33572 public final void emitSAR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 33573 int miStart = mi; 33574 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33575 // no size prefix 33576 generateREXprefix(false, null, dstIndex, null); 33577 if (imm == 1) { 33578 setMachineCodes(mi++, (byte) 0xD1); 33579 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33580 } else { 33581 setMachineCodes(mi++, (byte) 0xC1); 33582 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33583 emitImm8((byte)imm); 33584 } 33585 if (lister != null) lister.RFDI(miStart, "SAR", dstIndex, dstScale, dstDisp, imm); 33586 } 33587 33588 /** 33589 * Generate a absolute--immediate SAR. That is, 33590 * <PRE> 33591 * arithemetic shift right of [dstDisp] by imm 33592 * </PRE> 33593 * 33594 * @param dstDisp the destination displacement 33595 * @param imm immediate 33596 */ 33597 public final void emitSAR_Abs_Imm(Address dstDisp, int imm) { 33598 int miStart = mi; 33599 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33600 // no size prefix 33601 generateREXprefix(false, null, null, null); 33602 if (imm == 1) { 33603 setMachineCodes(mi++, (byte) 0xD1); 33604 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33605 } else { 33606 setMachineCodes(mi++, (byte) 0xC1); 33607 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33608 emitImm8((byte)imm); 33609 } 33610 if (lister != null) lister.RAI(miStart, "SAR", dstDisp, imm); 33611 } 33612 33613 /** 33614 * Generate a register-index--immediate SAR. That is, 33615 * <PRE> 33616 * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 33617 * </PRE> 33618 * 33619 * @param dstBase the destination base register 33620 * @param dstIndex the destination index register 33621 * @param dstScale the destination shift amount 33622 * @param dstDisp the destination displacement 33623 * @param imm immediate 33624 */ 33625 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33626 public final void emitSAR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 33627 int miStart = mi; 33628 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33629 // no size prefix 33630 generateREXprefix(false, null, dstIndex, dstBase); 33631 if (imm == 1) { 33632 setMachineCodes(mi++, (byte) 0xD1); 33633 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33634 } else { 33635 setMachineCodes(mi++, (byte) 0xC1); 33636 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33637 emitImm8((byte)imm); 33638 } 33639 if (lister != null) lister.RXDI(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, imm); 33640 } 33641 33642 /** 33643 * Generate a register--register SAR. That is, 33644 * <PRE> 33645 * arithemetic shift right of dstReg by srcReg 33646 * </PRE> 33647 * 33648 * @param dstReg the destination register 33649 * @param srcReg must always be ECX 33650 */ 33651 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33652 public final void emitSAR_Reg_Reg(GPR dstReg, GPR srcReg) { 33653 int miStart = mi; 33654 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33655 // no size prefix 33656 generateREXprefix(false, null, null, dstReg); 33657 setMachineCodes(mi++, (byte) 0xD3); 33658 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 33659 if (lister != null) lister.RR(miStart, "SAR", dstReg, srcReg); 33660 } 33661 33662 /** 33663 * Generate a register-indirect--register SAR. That is, 33664 * <PRE> 33665 * arithemetic shift right of [dstBase] by srcReg 33666 * </PRE> 33667 * 33668 * @param dstBase the destination register 33669 * @param srcReg must always be ECX 33670 */ 33671 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33672 public final void emitSAR_RegInd_Reg(GPR dstBase, GPR srcReg) { 33673 int miStart = mi; 33674 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33675 // no size prefix 33676 generateREXprefix(false, null, null, dstBase); 33677 setMachineCodes(mi++, (byte) 0xD3); 33678 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 33679 if (lister != null) lister.RNR(miStart, "SAR", dstBase, srcReg); 33680 } 33681 33682 /** 33683 * Generate a register-displacement--register SAR. That is, 33684 * <PRE> 33685 * arithemetic shift right of [dstBase + dstDisp] by srcReg 33686 * </PRE> 33687 * 33688 * @param dstBase the destination base register 33689 * @param dstDisp the destination displacement 33690 * @param srcReg must always be ECX 33691 */ 33692 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 33693 public final void emitSAR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) { 33694 int miStart = mi; 33695 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33696 // no size prefix 33697 generateREXprefix(false, null, null, dstBase); 33698 setMachineCodes(mi++, (byte) 0xD3); 33699 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 33700 if (lister != null) lister.RDR(miStart, "SAR", dstBase, dstDisp, srcReg); 33701 } 33702 33703 /** 33704 * Generate a register-offset--register SAR. That is, 33705 * <PRE> 33706 * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by srcReg 33707 * </PRE> 33708 * 33709 * @param dstIndex the destination index register 33710 * @param dstScale the destination shift amount 33711 * @param dstDisp the destination displacement 33712 * @param srcReg must always be ECX 33713 */ 33714 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 33715 public final void emitSAR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 33716 int miStart = mi; 33717 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33718 // no size prefix 33719 generateREXprefix(false, null, dstIndex, null); 33720 setMachineCodes(mi++, (byte) 0xD3); 33721 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33722 if (lister != null) lister.RFDR(miStart, "SAR", dstIndex, dstScale, dstDisp, srcReg); 33723 } 33724 33725 /** 33726 * Generate an absolute--register SAR. That is, 33727 * <PRE> 33728 * arithemetic shift right of [dstDisp] by srcReg 33729 * </PRE> 33730 * 33731 * @param dstDisp the destination displacement 33732 * @param srcReg must always be ECX 33733 */ 33734 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 33735 public final void emitSAR_Abs_Reg(Address dstDisp, GPR srcReg) { 33736 int miStart = mi; 33737 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33738 // no size prefix 33739 generateREXprefix(false, null, null, null); 33740 setMachineCodes(mi++, (byte) 0xD3); 33741 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33742 if (lister != null) lister.RAR(miStart, "SAR", dstDisp, srcReg); 33743 } 33744 33745 /** 33746 * Generate a register-displacement--register SAR. That is, 33747 * <PRE> 33748 * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 33749 * </PRE> 33750 * 33751 * @param dstBase the destination base register 33752 * @param dstIndex the destination index register 33753 * @param dstScale the destination shift amount 33754 * @param dstDisp the destination displacement 33755 * @param srcReg must always be ECX 33756 */ 33757 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 33758 public final void emitSAR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 33759 int miStart = mi; 33760 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33761 // no size prefix 33762 generateREXprefix(false, null, dstIndex, dstBase); 33763 setMachineCodes(mi++, (byte) 0xD3); 33764 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33765 if (lister != null) lister.RXDR(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 33766 } 33767 33768 /** 33769 * Generate a register--immediate SAR. That is, 33770 * <PRE> 33771 * arithemetic shift right of dstReg by imm 33772 * </PRE> 33773 * 33774 * @param dstReg the destination register 33775 * @param imm immediate 33776 */ 33777 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33778 public final void emitSAR_Reg_Imm_Quad(GPR dstReg, int imm) { 33779 int miStart = mi; 33780 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33781 // no size prefix 33782 generateREXprefix(true, null, null, dstReg); 33783 if (imm == 1) { 33784 setMachineCodes(mi++, (byte) 0xD1); 33785 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 33786 } else { 33787 setMachineCodes(mi++, (byte) 0xC1); 33788 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 33789 emitImm8((byte)imm); 33790 } 33791 if (lister != null) lister.RI(miStart, "SAR", dstReg, imm); 33792 } 33793 33794 /** 33795 * Generate a register-indirect--immediate SAR. That is, 33796 * <PRE> 33797 * arithemetic shift right of [dstBase] by imm 33798 * </PRE> 33799 * 33800 * @param dstBase the destination base register 33801 * @param imm immediate 33802 */ 33803 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33804 public final void emitSAR_RegInd_Imm_Quad(GPR dstBase, int imm) { 33805 int miStart = mi; 33806 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33807 // no size prefix 33808 generateREXprefix(true, null, null, dstBase); 33809 if (imm == 1) { 33810 setMachineCodes(mi++, (byte) 0xD1); 33811 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 33812 } else { 33813 setMachineCodes(mi++, (byte) 0xC1); 33814 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 33815 emitImm8((byte)imm); 33816 } 33817 if (lister != null) lister.RNI(miStart, "SAR", dstBase, imm); 33818 } 33819 33820 /** 33821 * Generate a register-displacement--immediate SAR. That is, 33822 * <PRE> 33823 * arithemetic shift right of [dstBase + dstDisp] by imm 33824 * </PRE> 33825 * 33826 * @param dstBase the destination base register 33827 * @param dstDisp the destination displacement 33828 * @param imm immediate 33829 */ 33830 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33831 public final void emitSAR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) { 33832 int miStart = mi; 33833 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33834 // no size prefix 33835 generateREXprefix(true, null, null, dstBase); 33836 if (imm == 1) { 33837 setMachineCodes(mi++, (byte) 0xD1); 33838 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 33839 } else { 33840 setMachineCodes(mi++, (byte) 0xC1); 33841 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 33842 emitImm8((byte)imm); 33843 } 33844 if (lister != null) lister.RDI(miStart, "SAR", dstBase, dstDisp, imm); 33845 } 33846 33847 /** 33848 * Generate a register-offset--immediate SAR. That is, 33849 * <PRE> 33850 * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by imm 33851 * </PRE> 33852 * 33853 * @param dstIndex the destination index register 33854 * @param dstScale the destination shift amount 33855 * @param dstDisp the destination displacement 33856 * @param imm immediate 33857 */ 33858 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 33859 public final void emitSAR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 33860 int miStart = mi; 33861 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33862 // no size prefix 33863 generateREXprefix(true, null, dstIndex, null); 33864 if (imm == 1) { 33865 setMachineCodes(mi++, (byte) 0xD1); 33866 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33867 } else { 33868 setMachineCodes(mi++, (byte) 0xC1); 33869 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33870 emitImm8((byte)imm); 33871 } 33872 if (lister != null) lister.RFDI(miStart, "SAR", dstIndex, dstScale, dstDisp, imm); 33873 } 33874 33875 /** 33876 * Generate a absolute--immediate SAR. That is, 33877 * <PRE> 33878 * arithemetic shift right of [dstDisp] by imm 33879 * </PRE> 33880 * 33881 * @param dstDisp the destination displacement 33882 * @param imm immediate 33883 */ 33884 public final void emitSAR_Abs_Imm_Quad(Address dstDisp, int imm) { 33885 int miStart = mi; 33886 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33887 // no size prefix 33888 generateREXprefix(true, null, null, null); 33889 if (imm == 1) { 33890 setMachineCodes(mi++, (byte) 0xD1); 33891 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33892 } else { 33893 setMachineCodes(mi++, (byte) 0xC1); 33894 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 33895 emitImm8((byte)imm); 33896 } 33897 if (lister != null) lister.RAI(miStart, "SAR", dstDisp, imm); 33898 } 33899 33900 /** 33901 * Generate a register-index--immediate SAR. That is, 33902 * <PRE> 33903 * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm 33904 * </PRE> 33905 * 33906 * @param dstBase the destination base register 33907 * @param dstIndex the destination index register 33908 * @param dstScale the destination shift amount 33909 * @param dstDisp the destination displacement 33910 * @param imm immediate 33911 */ 33912 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33913 public final void emitSAR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) { 33914 int miStart = mi; 33915 if (VM.VerifyAssertions) VM._assert(fits(imm,8)); 33916 // no size prefix 33917 generateREXprefix(true, null, dstIndex, dstBase); 33918 if (imm == 1) { 33919 setMachineCodes(mi++, (byte) 0xD1); 33920 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33921 } else { 33922 setMachineCodes(mi++, (byte) 0xC1); 33923 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 33924 emitImm8((byte)imm); 33925 } 33926 if (lister != null) lister.RXDI(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, imm); 33927 } 33928 33929 /** 33930 * Generate a register--register SAR. That is, 33931 * <PRE> 33932 * arithemetic shift right of dstReg by srcReg 33933 * </PRE> 33934 * 33935 * @param dstReg the destination register 33936 * @param srcReg must always be ECX 33937 */ 33938 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33939 public final void emitSAR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) { 33940 int miStart = mi; 33941 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33942 // no size prefix 33943 generateREXprefix(true, null, null, dstReg); 33944 setMachineCodes(mi++, (byte) 0xD3); 33945 emitRegRegOperands(dstReg, GPR.getForOpcode(0x7)); 33946 if (lister != null) lister.RR(miStart, "SAR", dstReg, srcReg); 33947 } 33948 33949 /** 33950 * Generate a register-indirect--register SAR. That is, 33951 * <PRE> 33952 * arithemetic shift right of [dstBase] by srcReg 33953 * </PRE> 33954 * 33955 * @param dstBase the destination register 33956 * @param srcReg must always be ECX 33957 */ 33958 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 33959 public final void emitSAR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) { 33960 int miStart = mi; 33961 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33962 // no size prefix 33963 generateREXprefix(true, null, null, dstBase); 33964 setMachineCodes(mi++, (byte) 0xD3); 33965 emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7)); 33966 if (lister != null) lister.RNR(miStart, "SAR", dstBase, srcReg); 33967 } 33968 33969 /** 33970 * Generate a register-displacement--register SAR. That is, 33971 * <PRE> 33972 * arithemetic shift right of [dstBase + dstDisp] by srcReg 33973 * </PRE> 33974 * 33975 * @param dstBase the destination base register 33976 * @param dstDisp the destination displacement 33977 * @param srcReg must always be ECX 33978 */ 33979 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 33980 public final void emitSAR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) { 33981 int miStart = mi; 33982 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 33983 // no size prefix 33984 generateREXprefix(true, null, null, dstBase); 33985 setMachineCodes(mi++, (byte) 0xD3); 33986 emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7)); 33987 if (lister != null) lister.RDR(miStart, "SAR", dstBase, dstDisp, srcReg); 33988 } 33989 33990 /** 33991 * Generate a register-offset--register SAR. That is, 33992 * <PRE> 33993 * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by srcReg 33994 * </PRE> 33995 * 33996 * @param dstIndex the destination index register 33997 * @param dstScale the destination shift amount 33998 * @param dstDisp the destination displacement 33999 * @param srcReg must always be ECX 34000 */ 34001 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 34002 public final void emitSAR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 34003 int miStart = mi; 34004 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 34005 // no size prefix 34006 generateREXprefix(true, null, dstIndex, null); 34007 setMachineCodes(mi++, (byte) 0xD3); 34008 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 34009 if (lister != null) lister.RFDR(miStart, "SAR", dstIndex, dstScale, dstDisp, srcReg); 34010 } 34011 34012 /** 34013 * Generate an absolute--register SAR. That is, 34014 * <PRE> 34015 * arithemetic shift right of [dstDisp] by srcReg 34016 * </PRE> 34017 * 34018 * @param dstDisp the destination displacement 34019 * @param srcReg must always be ECX 34020 */ 34021 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 34022 public final void emitSAR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) { 34023 int miStart = mi; 34024 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 34025 // no size prefix 34026 generateREXprefix(true, null, null, null); 34027 setMachineCodes(mi++, (byte) 0xD3); 34028 emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7)); 34029 if (lister != null) lister.RAR(miStart, "SAR", dstDisp, srcReg); 34030 } 34031 34032 /** 34033 * Generate a register-displacement--register SAR. That is, 34034 * <PRE> 34035 * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg 34036 * </PRE> 34037 * 34038 * @param dstBase the destination base register 34039 * @param dstIndex the destination index register 34040 * @param dstScale the destination shift amount 34041 * @param dstDisp the destination displacement 34042 * @param srcReg must always be ECX 34043 */ 34044 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 34045 public final void emitSAR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) { 34046 int miStart = mi; 34047 if (VM.VerifyAssertions) VM._assert(srcReg == ECX); 34048 // no size prefix 34049 generateREXprefix(true, null, dstIndex, dstBase); 34050 setMachineCodes(mi++, (byte) 0xD3); 34051 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7)); 34052 if (lister != null) lister.RXDR(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, srcReg); 34053 } 34054 34055 /** 34056 * Generate a register--register--immediate SHLD. That is, 34057 * <PRE> 34058 * left <<= shiftBy (with bits from right shifted in) 34059 * </PRE> 34060 * 34061 * @param left the destination register 34062 * @param right the register containing bits that are shifted in 34063 * @param shiftBy the amount to shift by 34064 */ 34065 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 34066 public final void emitSHLD_Reg_Reg_Imm(GPR left, GPR right, int shiftBy) { 34067 int miStart = mi; 34068 generateREXprefix(false, right, null, left); 34069 setMachineCodes(mi++, (byte) 0x0F); 34070 setMachineCodes(mi++, (byte) 0xA4); 34071 emitRegRegOperands(left, right); 34072 emitImm8((byte)shiftBy); 34073 if (lister != null) lister.RRI(miStart, "SHLD", left, right, shiftBy); 34074 } 34075 34076 /** 34077 * Generate a register-indirect--register--immediate SHLD. That is, 34078 * <PRE> 34079 * [left] <<= shiftBy (with bits from right shifted in) 34080 * </PRE> 34081 * 34082 * @param left the destination base register 34083 * @param right the register containing bits that are shifted in 34084 * @param shiftBy the amount to shift by 34085 */ 34086 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 34087 public final void emitSHLD_RegInd_Reg_Imm(GPR left, GPR right, int shiftBy) { 34088 int miStart = mi; 34089 generateREXprefix(false, right, null, left); 34090 setMachineCodes(mi++, (byte) 0x0F); 34091 setMachineCodes(mi++, (byte) 0xA4); 34092 emitRegIndirectRegOperands(left, right); 34093 emitImm8((byte)shiftBy); 34094 if (lister != null) lister.RNRI(miStart, "SHLD", left, right, shiftBy); 34095 } 34096 34097 /** 34098 * Generate a register-displacement--register--immediate SHLD. That is, 34099 * <PRE> 34100 * [left + disp] <<= shiftBy (with bits from right shifted in) 34101 * </PRE> 34102 * 34103 * @param left the destination base register 34104 * @param disp the destination displacement 34105 * @param right the register containing bits that are shifted in 34106 * @param shiftBy the amount to shift by 34107 */ 34108 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 34109 public final void emitSHLD_RegDisp_Reg_Imm(GPR left, Offset disp, GPR right, int shiftBy) { 34110 int miStart = mi; 34111 generateREXprefix(false, right, null, left); 34112 setMachineCodes(mi++, (byte) 0x0F); 34113 setMachineCodes(mi++, (byte) 0xA4); 34114 emitRegDispRegOperands(left, disp, right); 34115 emitImm8((byte)shiftBy); 34116 if (lister != null) lister.RDRI(miStart, "SHLD", left, disp, right, shiftBy); 34117 } 34118 34119 /** 34120 * Generate a register-index--register--immediate SHLD. That is, 34121 * <PRE> 34122 * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34123 * </PRE> 34124 * 34125 * @param leftBase the destination base register 34126 * @param leftIndex the destination index register 34127 * @param scale the destination scale 34128 * @param disp the destination displacement 34129 * @param right the register containing bits that are shifted in 34130 * @param shiftBy the amount to shift by 34131 */ 34132 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 34133 public final void emitSHLD_RegIdx_Reg_Imm(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) { 34134 int miStart = mi; 34135 generateREXprefix(false, right, leftIndex, leftBase); 34136 setMachineCodes(mi++, (byte) 0x0F); 34137 setMachineCodes(mi++, (byte) 0xA4); 34138 emitSIBRegOperands(leftBase, leftIndex, scale, disp, right); 34139 emitImm8((byte)shiftBy); 34140 if (lister != null) lister.RXDRI(miStart, "SHLD", leftBase, leftIndex, scale, disp, right, shiftBy); 34141 } 34142 34143 /** 34144 * Generate a register-offset--register--immediate SHLD. That is, 34145 * <PRE> 34146 * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34147 * </PRE> 34148 * 34149 * @param leftIndex the destination index register 34150 * @param scale the destination scale 34151 * @param disp the destination displacement 34152 * @param right the register containing bits that are shifted in 34153 * @param shiftBy the amount to shift by 34154 */ 34155 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 34156 public final void emitSHLD_RegOff_Reg_Imm(GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) { 34157 int miStart = mi; 34158 generateREXprefix(false, right, leftIndex, null); 34159 setMachineCodes(mi++, (byte) 0x0F); 34160 setMachineCodes(mi++, (byte) 0xA4); 34161 emitRegOffRegOperands(leftIndex, scale, disp, right); 34162 emitImm8((byte)shiftBy); 34163 if (lister != null) lister.RFDRI(miStart, "SHLD", leftIndex, scale, disp, right, shiftBy); 34164 } 34165 34166 /** 34167 * Generate an absolute--register--immediate SHLD. That is, 34168 * <PRE> 34169 * [disp] <<= shiftBy (with bits from right shifted in) 34170 * </PRE> 34171 * 34172 * @param disp the destination displacement 34173 * @param right the register containing bits that are shifted in 34174 * @param shiftBy the amount to shift by 34175 */ 34176 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 34177 public final void emitSHLD_Abs_Reg_Imm(Address disp, GPR right, int shiftBy) { 34178 int miStart = mi; 34179 generateREXprefix(false, right, null, null); 34180 setMachineCodes(mi++, (byte) 0x0F); 34181 setMachineCodes(mi++, (byte) 0xA4); 34182 emitAbsRegOperands(disp, right); 34183 emitImm8((byte)shiftBy); 34184 if (lister != null) lister.RARI(miStart, "SHLD", disp, right, shiftBy); 34185 } 34186 34187 /** 34188 * Generate a register--register--register SHLD. That is, 34189 * <PRE> 34190 * left <<= shiftBy (with bits from right shifted in) 34191 * </PRE> 34192 * 34193 * @param left the destination register 34194 * @param right the register containing bits that are shifted in 34195 * @param shiftBy must be ECX 34196 */ 34197 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 34198 public final void emitSHLD_Reg_Reg_Reg(GPR left, GPR right, GPR shiftBy) { 34199 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34200 int miStart = mi; 34201 generateREXprefix(false, right, null, left); 34202 setMachineCodes(mi++, (byte) 0x0F); 34203 setMachineCodes(mi++, (byte) 0xA5); 34204 emitRegRegOperands(left, right); 34205 if (lister != null) lister.RRR(miStart, "SHLD", left, right, shiftBy); 34206 } 34207 34208 /** 34209 * Generate a register-indirect--register--register SHLD. That is, 34210 * <PRE> 34211 * [left] <<= shiftBy (with bits from right shifted in) 34212 * </PRE> 34213 * 34214 * @param left the destination base register 34215 * @param right the register containing bits that are shifted in 34216 * @param shiftBy must be ECX 34217 */ 34218 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 34219 public final void emitSHLD_RegInd_Reg_Reg(GPR left, GPR right, GPR shiftBy) { 34220 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34221 int miStart = mi; 34222 generateREXprefix(false, right, null, left); 34223 setMachineCodes(mi++, (byte) 0x0F); 34224 setMachineCodes(mi++, (byte) 0xA5); 34225 emitRegIndirectRegOperands(left, right); 34226 if (lister != null) lister.RNRR(miStart, "SHLD", left, right, shiftBy); 34227 } 34228 34229 /** 34230 * Generate a register-displacement--register--register SHLD. That is, 34231 * <PRE> 34232 * [left + disp] <<= shiftBy (with bits from right shifted in) 34233 * </PRE> 34234 * 34235 * @param left the destination base register 34236 * @param disp the destination displacement 34237 * @param right the register containing bits that are shifted in 34238 * @param shiftBy must be ECX 34239 */ 34240 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3,4}) 34241 public final void emitSHLD_RegDisp_Reg_Reg(GPR left, Offset disp, GPR right, GPR shiftBy) { 34242 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34243 int miStart = mi; 34244 generateREXprefix(false, right, null, left); 34245 setMachineCodes(mi++, (byte) 0x0F); 34246 setMachineCodes(mi++, (byte) 0xA5); 34247 emitRegDispRegOperands(left, disp, right); 34248 if (lister != null) lister.RDRR(miStart, "SHLD", left, disp, right, shiftBy); 34249 } 34250 34251 /** 34252 * Generate a register-index--register--register SHLD. That is, 34253 * <PRE> 34254 * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34255 * </PRE> 34256 * 34257 * @param leftBase the destination base register 34258 * @param leftIndex the destination index register 34259 * @param scale the destination scale 34260 * @param disp the destination displacement 34261 * @param right the register containing bits that are shifted in 34262 * @param shiftBy must be ECX 34263 */ 34264 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5,6}) 34265 public final void emitSHLD_RegIdx_Reg_Reg(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) { 34266 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34267 int miStart = mi; 34268 generateREXprefix(false, right, leftIndex, leftBase); 34269 setMachineCodes(mi++, (byte) 0x0F); 34270 setMachineCodes(mi++, (byte) 0xA5); 34271 emitSIBRegOperands(leftBase, leftIndex, scale, disp, right); 34272 if (lister != null) lister.RXDRR(miStart, "SHLD", leftBase, leftIndex, scale, disp, right, shiftBy); 34273 } 34274 34275 /** 34276 * Generate a register-index--register--register SHLD. That is, 34277 * <PRE> 34278 * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34279 * </PRE> 34280 * 34281 * @param leftIndex the destination index register 34282 * @param scale the destination scale 34283 * @param disp the destination displacement 34284 * @param right the register containing bits that are shifted in 34285 * @param shiftBy must be ECX 34286 */ 34287 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4,5}) 34288 public final void emitSHLD_RegOff_Reg_Reg(GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) { 34289 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34290 int miStart = mi; 34291 generateREXprefix(false, right, leftIndex, null); 34292 setMachineCodes(mi++, (byte) 0x0F); 34293 setMachineCodes(mi++, (byte) 0xA5); 34294 emitRegOffRegOperands(leftIndex, scale, disp, right); 34295 if (lister != null) lister.RFDRR(miStart, "SHLD", leftIndex, scale, disp, right, shiftBy); 34296 } 34297 34298 /** 34299 * Generate a register-index--register--register SHLD. That is, 34300 * <PRE> 34301 * [disp] <<= shiftBy (with bits from right shifted in) 34302 * </PRE> 34303 * 34304 * @param disp the destination displacement 34305 * @param right the register containing bits that are shifted in 34306 * @param shiftBy must be ECX 34307 */ 34308 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 34309 public final void emitSHLD_Abs_Reg_Reg(Address disp, GPR right, GPR shiftBy) { 34310 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34311 int miStart = mi; 34312 generateREXprefix(false, right, null, null); 34313 setMachineCodes(mi++, (byte) 0x0F); 34314 setMachineCodes(mi++, (byte) 0xA5); 34315 emitAbsRegOperands(disp, right); 34316 if (lister != null) lister.RARR(miStart, "SHLD", disp, right, shiftBy); 34317 } 34318 34319 /** 34320 * Generate a register--register--immediate SHLD. That is, 34321 * <PRE> 34322 * left <<= shiftBy (with bits from right shifted in) 34323 * </PRE> 34324 * 34325 * @param left the destination register 34326 * @param right the register containing bits that are shifted in 34327 * @param shiftBy the amount to shift by 34328 */ 34329 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 34330 public final void emitSHLD_Reg_Reg_Imm_Quad(GPR left, GPR right, int shiftBy) { 34331 int miStart = mi; 34332 generateREXprefix(true, right, null, left); 34333 setMachineCodes(mi++, (byte) 0x0F); 34334 setMachineCodes(mi++, (byte) 0xA4); 34335 emitRegRegOperands(left, right); 34336 emitImm8((byte)shiftBy); 34337 if (lister != null) lister.RRI(miStart, "SHLD", left, right, shiftBy); 34338 } 34339 34340 /** 34341 * Generate a register-indirect--register--immediate SHLD. That is, 34342 * <PRE> 34343 * [left] <<= shiftBy (with bits from right shifted in) 34344 * </PRE> 34345 * 34346 * @param left the destination base register 34347 * @param right the register containing bits that are shifted in 34348 * @param shiftBy the amount to shift by 34349 */ 34350 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 34351 public final void emitSHLD_RegInd_Reg_Imm_Quad(GPR left, GPR right, int shiftBy) { 34352 int miStart = mi; 34353 generateREXprefix(true, right, null, left); 34354 setMachineCodes(mi++, (byte) 0x0F); 34355 setMachineCodes(mi++, (byte) 0xA4); 34356 emitRegIndirectRegOperands(left, right); 34357 emitImm8((byte)shiftBy); 34358 if (lister != null) lister.RNRI(miStart, "SHLD", left, right, shiftBy); 34359 } 34360 34361 /** 34362 * Generate a register-displacement--register--immediate SHLD. That is, 34363 * <PRE> 34364 * [left + disp] <<= shiftBy (with bits from right shifted in) 34365 * </PRE> 34366 * 34367 * @param left the destination base register 34368 * @param disp the destination displacement 34369 * @param right the register containing bits that are shifted in 34370 * @param shiftBy the amount to shift by 34371 */ 34372 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 34373 public final void emitSHLD_RegDisp_Reg_Imm_Quad(GPR left, Offset disp, GPR right, int shiftBy) { 34374 int miStart = mi; 34375 generateREXprefix(true, right, null, left); 34376 setMachineCodes(mi++, (byte) 0x0F); 34377 setMachineCodes(mi++, (byte) 0xA4); 34378 emitRegDispRegOperands(left, disp, right); 34379 emitImm8((byte)shiftBy); 34380 if (lister != null) lister.RDRI(miStart, "SHLD", left, disp, right, shiftBy); 34381 } 34382 34383 /** 34384 * Generate a register-index--register--immediate SHLD. That is, 34385 * <PRE> 34386 * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34387 * </PRE> 34388 * 34389 * @param leftBase the destination base register 34390 * @param leftIndex the destination index register 34391 * @param scale the destination scale 34392 * @param disp the destination displacement 34393 * @param right the register containing bits that are shifted in 34394 * @param shiftBy the amount to shift by 34395 */ 34396 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 34397 public final void emitSHLD_RegIdx_Reg_Imm_Quad(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) { 34398 int miStart = mi; 34399 generateREXprefix(true, right, leftIndex, leftBase); 34400 setMachineCodes(mi++, (byte) 0x0F); 34401 setMachineCodes(mi++, (byte) 0xA4); 34402 emitSIBRegOperands(leftBase, leftIndex, scale, disp, right); 34403 emitImm8((byte)shiftBy); 34404 if (lister != null) lister.RXDRI(miStart, "SHLD", leftBase, leftIndex, scale, disp, right, shiftBy); 34405 } 34406 34407 /** 34408 * Generate a register-offset--register--immediate SHLD. That is, 34409 * <PRE> 34410 * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34411 * </PRE> 34412 * 34413 * @param leftIndex the destination index register 34414 * @param scale the destination scale 34415 * @param disp the destination displacement 34416 * @param right the register containing bits that are shifted in 34417 * @param shiftBy the amount to shift by 34418 */ 34419 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 34420 public final void emitSHLD_RegOff_Reg_Imm_Quad(GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) { 34421 int miStart = mi; 34422 generateREXprefix(true, right, leftIndex, null); 34423 setMachineCodes(mi++, (byte) 0x0F); 34424 setMachineCodes(mi++, (byte) 0xA4); 34425 emitRegOffRegOperands(leftIndex, scale, disp, right); 34426 emitImm8((byte)shiftBy); 34427 if (lister != null) lister.RFDRI(miStart, "SHLD", leftIndex, scale, disp, right, shiftBy); 34428 } 34429 34430 /** 34431 * Generate an absolute--register--immediate SHLD. That is, 34432 * <PRE> 34433 * [disp] <<= shiftBy (with bits from right shifted in) 34434 * </PRE> 34435 * 34436 * @param disp the destination displacement 34437 * @param right the register containing bits that are shifted in 34438 * @param shiftBy the amount to shift by 34439 */ 34440 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 34441 public final void emitSHLD_Abs_Reg_Imm_Quad(Address disp, GPR right, int shiftBy) { 34442 int miStart = mi; 34443 generateREXprefix(true, right, null, null); 34444 setMachineCodes(mi++, (byte) 0x0F); 34445 setMachineCodes(mi++, (byte) 0xA4); 34446 emitAbsRegOperands(disp, right); 34447 emitImm8((byte)shiftBy); 34448 if (lister != null) lister.RARI(miStart, "SHLD", disp, right, shiftBy); 34449 } 34450 34451 /** 34452 * Generate a register--register--register SHLD. That is, 34453 * <PRE> 34454 * left <<= shiftBy (with bits from right shifted in) 34455 * </PRE> 34456 * 34457 * @param left the destination register 34458 * @param right the register containing bits that are shifted in 34459 * @param shiftBy must be ECX 34460 */ 34461 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 34462 public final void emitSHLD_Reg_Reg_Reg_Quad(GPR left, GPR right, GPR shiftBy) { 34463 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34464 int miStart = mi; 34465 generateREXprefix(true, right, null, left); 34466 setMachineCodes(mi++, (byte) 0x0F); 34467 setMachineCodes(mi++, (byte) 0xA5); 34468 emitRegRegOperands(left, right); 34469 if (lister != null) lister.RRR(miStart, "SHLD", left, right, shiftBy); 34470 } 34471 34472 /** 34473 * Generate a register-indirect--register--register SHLD. That is, 34474 * <PRE> 34475 * [left] <<= shiftBy (with bits from right shifted in) 34476 * </PRE> 34477 * 34478 * @param left the destination base register 34479 * @param right the register containing bits that are shifted in 34480 * @param shiftBy must be ECX 34481 */ 34482 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 34483 public final void emitSHLD_RegInd_Reg_Reg_Quad(GPR left, GPR right, GPR shiftBy) { 34484 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34485 int miStart = mi; 34486 generateREXprefix(true, right, null, left); 34487 setMachineCodes(mi++, (byte) 0x0F); 34488 setMachineCodes(mi++, (byte) 0xA5); 34489 emitRegIndirectRegOperands(left, right); 34490 if (lister != null) lister.RNRR(miStart, "SHLD", left, right, shiftBy); 34491 } 34492 34493 /** 34494 * Generate a register-displacement--register--register SHLD. That is, 34495 * <PRE> 34496 * [left + disp] <<= shiftBy (with bits from right shifted in) 34497 * </PRE> 34498 * 34499 * @param left the destination base register 34500 * @param disp the destination displacement 34501 * @param right the register containing bits that are shifted in 34502 * @param shiftBy must be ECX 34503 */ 34504 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3,4}) 34505 public final void emitSHLD_RegDisp_Reg_Reg_Quad(GPR left, Offset disp, GPR right, GPR shiftBy) { 34506 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34507 int miStart = mi; 34508 generateREXprefix(true, right, null, left); 34509 setMachineCodes(mi++, (byte) 0x0F); 34510 setMachineCodes(mi++, (byte) 0xA5); 34511 emitRegDispRegOperands(left, disp, right); 34512 if (lister != null) lister.RDRR(miStart, "SHLD", left, disp, right, shiftBy); 34513 } 34514 34515 /** 34516 * Generate a register-index--register--register SHLD. That is, 34517 * <PRE> 34518 * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34519 * </PRE> 34520 * 34521 * @param leftBase the destination base register 34522 * @param leftIndex the destination index register 34523 * @param scale the destination scale 34524 * @param disp the destination displacement 34525 * @param right the register containing bits that are shifted in 34526 * @param shiftBy must be ECX 34527 */ 34528 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5,6}) 34529 public final void emitSHLD_RegIdx_Reg_Reg_Quad(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) { 34530 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34531 int miStart = mi; 34532 generateREXprefix(true, right, leftIndex, leftBase); 34533 setMachineCodes(mi++, (byte) 0x0F); 34534 setMachineCodes(mi++, (byte) 0xA5); 34535 emitSIBRegOperands(leftBase, leftIndex, scale, disp, right); 34536 if (lister != null) lister.RXDRR(miStart, "SHLD", leftBase, leftIndex, scale, disp, right, shiftBy); 34537 } 34538 34539 /** 34540 * Generate a register-index--register--register SHLD. That is, 34541 * <PRE> 34542 * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34543 * </PRE> 34544 * 34545 * @param leftIndex the destination index register 34546 * @param scale the destination scale 34547 * @param disp the destination displacement 34548 * @param right the register containing bits that are shifted in 34549 * @param shiftBy must be ECX 34550 */ 34551 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4,5}) 34552 public final void emitSHLD_RegOff_Reg_Reg_Quad(GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) { 34553 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34554 int miStart = mi; 34555 generateREXprefix(true, right, leftIndex, null); 34556 setMachineCodes(mi++, (byte) 0x0F); 34557 setMachineCodes(mi++, (byte) 0xA5); 34558 emitRegOffRegOperands(leftIndex, scale, disp, right); 34559 if (lister != null) lister.RFDRR(miStart, "SHLD", leftIndex, scale, disp, right, shiftBy); 34560 } 34561 34562 /** 34563 * Generate a register-index--register--register SHLD. That is, 34564 * <PRE> 34565 * [disp] <<= shiftBy (with bits from right shifted in) 34566 * </PRE> 34567 * 34568 * @param disp the destination displacement 34569 * @param right the register containing bits that are shifted in 34570 * @param shiftBy must be ECX 34571 */ 34572 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 34573 public final void emitSHLD_Abs_Reg_Reg_Quad(Address disp, GPR right, GPR shiftBy) { 34574 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34575 int miStart = mi; 34576 generateREXprefix(true, right, null, null); 34577 setMachineCodes(mi++, (byte) 0x0F); 34578 setMachineCodes(mi++, (byte) 0xA5); 34579 emitAbsRegOperands(disp, right); 34580 if (lister != null) lister.RARR(miStart, "SHLD", disp, right, shiftBy); 34581 } 34582 34583 /** 34584 * Generate a register--register--immediate SHRD. That is, 34585 * <PRE> 34586 * left <<= shiftBy (with bits from right shifted in) 34587 * </PRE> 34588 * 34589 * @param left the destination register 34590 * @param right the register containing bits that are shifted in 34591 * @param shiftBy the amount to shift by 34592 */ 34593 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 34594 public final void emitSHRD_Reg_Reg_Imm(GPR left, GPR right, int shiftBy) { 34595 int miStart = mi; 34596 generateREXprefix(false, right, null, left); 34597 setMachineCodes(mi++, (byte) 0x0F); 34598 setMachineCodes(mi++, (byte) 0xAC); 34599 emitRegRegOperands(left, right); 34600 emitImm8((byte)shiftBy); 34601 if (lister != null) lister.RRI(miStart, "SHRD", left, right, shiftBy); 34602 } 34603 34604 /** 34605 * Generate a register-indirect--register--immediate SHRD. That is, 34606 * <PRE> 34607 * [left] <<= shiftBy (with bits from right shifted in) 34608 * </PRE> 34609 * 34610 * @param left the destination base register 34611 * @param right the register containing bits that are shifted in 34612 * @param shiftBy the amount to shift by 34613 */ 34614 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 34615 public final void emitSHRD_RegInd_Reg_Imm(GPR left, GPR right, int shiftBy) { 34616 int miStart = mi; 34617 generateREXprefix(false, right, null, left); 34618 setMachineCodes(mi++, (byte) 0x0F); 34619 setMachineCodes(mi++, (byte) 0xAC); 34620 emitRegIndirectRegOperands(left, right); 34621 emitImm8((byte)shiftBy); 34622 if (lister != null) lister.RNRI(miStart, "SHRD", left, right, shiftBy); 34623 } 34624 34625 /** 34626 * Generate a register-displacement--register--immediate SHRD. That is, 34627 * <PRE> 34628 * [left + disp] <<= shiftBy (with bits from right shifted in) 34629 * </PRE> 34630 * 34631 * @param left the destination base register 34632 * @param disp the destination displacement 34633 * @param right the register containing bits that are shifted in 34634 * @param shiftBy the amount to shift by 34635 */ 34636 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 34637 public final void emitSHRD_RegDisp_Reg_Imm(GPR left, Offset disp, GPR right, int shiftBy) { 34638 int miStart = mi; 34639 generateREXprefix(false, right, null, left); 34640 setMachineCodes(mi++, (byte) 0x0F); 34641 setMachineCodes(mi++, (byte) 0xAC); 34642 emitRegDispRegOperands(left, disp, right); 34643 emitImm8((byte)shiftBy); 34644 if (lister != null) lister.RDRI(miStart, "SHRD", left, disp, right, shiftBy); 34645 } 34646 34647 /** 34648 * Generate a register-index--register--immediate SHRD. That is, 34649 * <PRE> 34650 * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34651 * </PRE> 34652 * 34653 * @param leftBase the destination base register 34654 * @param leftIndex the destination index register 34655 * @param scale the destination scale 34656 * @param disp the destination displacement 34657 * @param right the register containing bits that are shifted in 34658 * @param shiftBy the amount to shift by 34659 */ 34660 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 34661 public final void emitSHRD_RegIdx_Reg_Imm(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) { 34662 int miStart = mi; 34663 generateREXprefix(false, right, leftIndex, leftBase); 34664 setMachineCodes(mi++, (byte) 0x0F); 34665 setMachineCodes(mi++, (byte) 0xAC); 34666 emitSIBRegOperands(leftBase, leftIndex, scale, disp, right); 34667 emitImm8((byte)shiftBy); 34668 if (lister != null) lister.RXDRI(miStart, "SHRD", leftBase, leftIndex, scale, disp, right, shiftBy); 34669 } 34670 34671 /** 34672 * Generate a register-offset--register--immediate SHRD. That is, 34673 * <PRE> 34674 * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34675 * </PRE> 34676 * 34677 * @param leftIndex the destination index register 34678 * @param scale the destination scale 34679 * @param disp the destination displacement 34680 * @param right the register containing bits that are shifted in 34681 * @param shiftBy the amount to shift by 34682 */ 34683 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 34684 public final void emitSHRD_RegOff_Reg_Imm(GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) { 34685 int miStart = mi; 34686 generateREXprefix(false, right, leftIndex, null); 34687 setMachineCodes(mi++, (byte) 0x0F); 34688 setMachineCodes(mi++, (byte) 0xAC); 34689 emitRegOffRegOperands(leftIndex, scale, disp, right); 34690 emitImm8((byte)shiftBy); 34691 if (lister != null) lister.RFDRI(miStart, "SHRD", leftIndex, scale, disp, right, shiftBy); 34692 } 34693 34694 /** 34695 * Generate an absolute--register--immediate SHRD. That is, 34696 * <PRE> 34697 * [disp] <<= shiftBy (with bits from right shifted in) 34698 * </PRE> 34699 * 34700 * @param disp the destination displacement 34701 * @param right the register containing bits that are shifted in 34702 * @param shiftBy the amount to shift by 34703 */ 34704 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 34705 public final void emitSHRD_Abs_Reg_Imm(Address disp, GPR right, int shiftBy) { 34706 int miStart = mi; 34707 generateREXprefix(false, right, null, null); 34708 setMachineCodes(mi++, (byte) 0x0F); 34709 setMachineCodes(mi++, (byte) 0xAC); 34710 emitAbsRegOperands(disp, right); 34711 emitImm8((byte)shiftBy); 34712 if (lister != null) lister.RARI(miStart, "SHRD", disp, right, shiftBy); 34713 } 34714 34715 /** 34716 * Generate a register--register--register SHRD. That is, 34717 * <PRE> 34718 * left <<= shiftBy (with bits from right shifted in) 34719 * </PRE> 34720 * 34721 * @param left the destination register 34722 * @param right the register containing bits that are shifted in 34723 * @param shiftBy must be ECX 34724 */ 34725 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 34726 public final void emitSHRD_Reg_Reg_Reg(GPR left, GPR right, GPR shiftBy) { 34727 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34728 int miStart = mi; 34729 generateREXprefix(false, right, null, left); 34730 setMachineCodes(mi++, (byte) 0x0F); 34731 setMachineCodes(mi++, (byte) 0xAD); 34732 emitRegRegOperands(left, right); 34733 if (lister != null) lister.RRR(miStart, "SHRD", left, right, shiftBy); 34734 } 34735 34736 /** 34737 * Generate a register-indirect--register--register SHRD. That is, 34738 * <PRE> 34739 * [left] <<= shiftBy (with bits from right shifted in) 34740 * </PRE> 34741 * 34742 * @param left the destination base register 34743 * @param right the register containing bits that are shifted in 34744 * @param shiftBy must be ECX 34745 */ 34746 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 34747 public final void emitSHRD_RegInd_Reg_Reg(GPR left, GPR right, GPR shiftBy) { 34748 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34749 int miStart = mi; 34750 generateREXprefix(false, right, null, left); 34751 setMachineCodes(mi++, (byte) 0x0F); 34752 setMachineCodes(mi++, (byte) 0xAD); 34753 emitRegIndirectRegOperands(left, right); 34754 if (lister != null) lister.RNRR(miStart, "SHRD", left, right, shiftBy); 34755 } 34756 34757 /** 34758 * Generate a register-displacement--register--register SHRD. That is, 34759 * <PRE> 34760 * [left + disp] <<= shiftBy (with bits from right shifted in) 34761 * </PRE> 34762 * 34763 * @param left the destination base register 34764 * @param disp the destination displacement 34765 * @param right the register containing bits that are shifted in 34766 * @param shiftBy must be ECX 34767 */ 34768 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3,4}) 34769 public final void emitSHRD_RegDisp_Reg_Reg(GPR left, Offset disp, GPR right, GPR shiftBy) { 34770 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34771 int miStart = mi; 34772 generateREXprefix(false, right, null, left); 34773 setMachineCodes(mi++, (byte) 0x0F); 34774 setMachineCodes(mi++, (byte) 0xAD); 34775 emitRegDispRegOperands(left, disp, right); 34776 if (lister != null) lister.RDRR(miStart, "SHRD", left, disp, right, shiftBy); 34777 } 34778 34779 /** 34780 * Generate a register-index--register--register SHRD. That is, 34781 * <PRE> 34782 * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34783 * </PRE> 34784 * 34785 * @param leftBase the destination base register 34786 * @param leftIndex the destination index register 34787 * @param scale the destination scale 34788 * @param disp the destination displacement 34789 * @param right the register containing bits that are shifted in 34790 * @param shiftBy must be ECX 34791 */ 34792 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5,6}) 34793 public final void emitSHRD_RegIdx_Reg_Reg(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) { 34794 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34795 int miStart = mi; 34796 generateREXprefix(false, right, leftIndex, leftBase); 34797 setMachineCodes(mi++, (byte) 0x0F); 34798 setMachineCodes(mi++, (byte) 0xAD); 34799 emitSIBRegOperands(leftBase, leftIndex, scale, disp, right); 34800 if (lister != null) lister.RXDRR(miStart, "SHRD", leftBase, leftIndex, scale, disp, right, shiftBy); 34801 } 34802 34803 /** 34804 * Generate a register-index--register--register SHRD. That is, 34805 * <PRE> 34806 * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34807 * </PRE> 34808 * 34809 * @param leftIndex the destination index register 34810 * @param scale the destination scale 34811 * @param disp the destination displacement 34812 * @param right the register containing bits that are shifted in 34813 * @param shiftBy must be ECX 34814 */ 34815 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4,5}) 34816 public final void emitSHRD_RegOff_Reg_Reg(GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) { 34817 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34818 int miStart = mi; 34819 generateREXprefix(false, right, leftIndex, null); 34820 setMachineCodes(mi++, (byte) 0x0F); 34821 setMachineCodes(mi++, (byte) 0xAD); 34822 emitRegOffRegOperands(leftIndex, scale, disp, right); 34823 if (lister != null) lister.RFDRR(miStart, "SHRD", leftIndex, scale, disp, right, shiftBy); 34824 } 34825 34826 /** 34827 * Generate a register-index--register--register SHRD. That is, 34828 * <PRE> 34829 * [disp] <<= shiftBy (with bits from right shifted in) 34830 * </PRE> 34831 * 34832 * @param disp the destination displacement 34833 * @param right the register containing bits that are shifted in 34834 * @param shiftBy must be ECX 34835 */ 34836 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 34837 public final void emitSHRD_Abs_Reg_Reg(Address disp, GPR right, GPR shiftBy) { 34838 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34839 int miStart = mi; 34840 generateREXprefix(false, right, null, null); 34841 setMachineCodes(mi++, (byte) 0x0F); 34842 setMachineCodes(mi++, (byte) 0xAD); 34843 emitAbsRegOperands(disp, right); 34844 if (lister != null) lister.RARR(miStart, "SHRD", disp, right, shiftBy); 34845 } 34846 34847 /** 34848 * Generate a register--register--immediate SHRD. That is, 34849 * <PRE> 34850 * left <<= shiftBy (with bits from right shifted in) 34851 * </PRE> 34852 * 34853 * @param left the destination register 34854 * @param right the register containing bits that are shifted in 34855 * @param shiftBy the amount to shift by 34856 */ 34857 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 34858 public final void emitSHRD_Reg_Reg_Imm_Quad(GPR left, GPR right, int shiftBy) { 34859 int miStart = mi; 34860 generateREXprefix(true, right, null, left); 34861 setMachineCodes(mi++, (byte) 0x0F); 34862 setMachineCodes(mi++, (byte) 0xAC); 34863 emitRegRegOperands(left, right); 34864 emitImm8((byte)shiftBy); 34865 if (lister != null) lister.RRI(miStart, "SHRD", left, right, shiftBy); 34866 } 34867 34868 /** 34869 * Generate a register-indirect--register--immediate SHRD. That is, 34870 * <PRE> 34871 * [left] <<= shiftBy (with bits from right shifted in) 34872 * </PRE> 34873 * 34874 * @param left the destination base register 34875 * @param right the register containing bits that are shifted in 34876 * @param shiftBy the amount to shift by 34877 */ 34878 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 34879 public final void emitSHRD_RegInd_Reg_Imm_Quad(GPR left, GPR right, int shiftBy) { 34880 int miStart = mi; 34881 generateREXprefix(true, right, null, left); 34882 setMachineCodes(mi++, (byte) 0x0F); 34883 setMachineCodes(mi++, (byte) 0xAC); 34884 emitRegIndirectRegOperands(left, right); 34885 emitImm8((byte)shiftBy); 34886 if (lister != null) lister.RNRI(miStart, "SHRD", left, right, shiftBy); 34887 } 34888 34889 /** 34890 * Generate a register-displacement--register--immediate SHRD. That is, 34891 * <PRE> 34892 * [left + disp] <<= shiftBy (with bits from right shifted in) 34893 * </PRE> 34894 * 34895 * @param left the destination base register 34896 * @param disp the destination displacement 34897 * @param right the register containing bits that are shifted in 34898 * @param shiftBy the amount to shift by 34899 */ 34900 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 34901 public final void emitSHRD_RegDisp_Reg_Imm_Quad(GPR left, Offset disp, GPR right, int shiftBy) { 34902 int miStart = mi; 34903 generateREXprefix(true, right, null, left); 34904 setMachineCodes(mi++, (byte) 0x0F); 34905 setMachineCodes(mi++, (byte) 0xAC); 34906 emitRegDispRegOperands(left, disp, right); 34907 emitImm8((byte)shiftBy); 34908 if (lister != null) lister.RDRI(miStart, "SHRD", left, disp, right, shiftBy); 34909 } 34910 34911 /** 34912 * Generate a register-index--register--immediate SHRD. That is, 34913 * <PRE> 34914 * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34915 * </PRE> 34916 * 34917 * @param leftBase the destination base register 34918 * @param leftIndex the destination index register 34919 * @param scale the destination scale 34920 * @param disp the destination displacement 34921 * @param right the register containing bits that are shifted in 34922 * @param shiftBy the amount to shift by 34923 */ 34924 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 34925 public final void emitSHRD_RegIdx_Reg_Imm_Quad(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) { 34926 int miStart = mi; 34927 generateREXprefix(true, right, leftIndex, leftBase); 34928 setMachineCodes(mi++, (byte) 0x0F); 34929 setMachineCodes(mi++, (byte) 0xAC); 34930 emitSIBRegOperands(leftBase, leftIndex, scale, disp, right); 34931 emitImm8((byte)shiftBy); 34932 if (lister != null) lister.RXDRI(miStart, "SHRD", leftBase, leftIndex, scale, disp, right, shiftBy); 34933 } 34934 34935 /** 34936 * Generate a register-offset--register--immediate SHRD. That is, 34937 * <PRE> 34938 * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 34939 * </PRE> 34940 * 34941 * @param leftIndex the destination index register 34942 * @param scale the destination scale 34943 * @param disp the destination displacement 34944 * @param right the register containing bits that are shifted in 34945 * @param shiftBy the amount to shift by 34946 */ 34947 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 34948 public final void emitSHRD_RegOff_Reg_Imm_Quad(GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) { 34949 int miStart = mi; 34950 generateREXprefix(true, right, leftIndex, null); 34951 setMachineCodes(mi++, (byte) 0x0F); 34952 setMachineCodes(mi++, (byte) 0xAC); 34953 emitRegOffRegOperands(leftIndex, scale, disp, right); 34954 emitImm8((byte)shiftBy); 34955 if (lister != null) lister.RFDRI(miStart, "SHRD", leftIndex, scale, disp, right, shiftBy); 34956 } 34957 34958 /** 34959 * Generate an absolute--register--immediate SHRD. That is, 34960 * <PRE> 34961 * [disp] <<= shiftBy (with bits from right shifted in) 34962 * </PRE> 34963 * 34964 * @param disp the destination displacement 34965 * @param right the register containing bits that are shifted in 34966 * @param shiftBy the amount to shift by 34967 */ 34968 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 34969 public final void emitSHRD_Abs_Reg_Imm_Quad(Address disp, GPR right, int shiftBy) { 34970 int miStart = mi; 34971 generateREXprefix(true, right, null, null); 34972 setMachineCodes(mi++, (byte) 0x0F); 34973 setMachineCodes(mi++, (byte) 0xAC); 34974 emitAbsRegOperands(disp, right); 34975 emitImm8((byte)shiftBy); 34976 if (lister != null) lister.RARI(miStart, "SHRD", disp, right, shiftBy); 34977 } 34978 34979 /** 34980 * Generate a register--register--register SHRD. That is, 34981 * <PRE> 34982 * left <<= shiftBy (with bits from right shifted in) 34983 * </PRE> 34984 * 34985 * @param left the destination register 34986 * @param right the register containing bits that are shifted in 34987 * @param shiftBy must be ECX 34988 */ 34989 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 34990 public final void emitSHRD_Reg_Reg_Reg_Quad(GPR left, GPR right, GPR shiftBy) { 34991 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 34992 int miStart = mi; 34993 generateREXprefix(true, right, null, left); 34994 setMachineCodes(mi++, (byte) 0x0F); 34995 setMachineCodes(mi++, (byte) 0xAD); 34996 emitRegRegOperands(left, right); 34997 if (lister != null) lister.RRR(miStart, "SHRD", left, right, shiftBy); 34998 } 34999 35000 /** 35001 * Generate a register-indirect--register--register SHRD. That is, 35002 * <PRE> 35003 * [left] <<= shiftBy (with bits from right shifted in) 35004 * </PRE> 35005 * 35006 * @param left the destination base register 35007 * @param right the register containing bits that are shifted in 35008 * @param shiftBy must be ECX 35009 */ 35010 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 35011 public final void emitSHRD_RegInd_Reg_Reg_Quad(GPR left, GPR right, GPR shiftBy) { 35012 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 35013 int miStart = mi; 35014 generateREXprefix(true, right, null, left); 35015 setMachineCodes(mi++, (byte) 0x0F); 35016 setMachineCodes(mi++, (byte) 0xAD); 35017 emitRegIndirectRegOperands(left, right); 35018 if (lister != null) lister.RNRR(miStart, "SHRD", left, right, shiftBy); 35019 } 35020 35021 /** 35022 * Generate a register-displacement--register--register SHRD. That is, 35023 * <PRE> 35024 * [left + disp] <<= shiftBy (with bits from right shifted in) 35025 * </PRE> 35026 * 35027 * @param left the destination base register 35028 * @param disp the destination displacement 35029 * @param right the register containing bits that are shifted in 35030 * @param shiftBy must be ECX 35031 */ 35032 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3,4}) 35033 public final void emitSHRD_RegDisp_Reg_Reg_Quad(GPR left, Offset disp, GPR right, GPR shiftBy) { 35034 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 35035 int miStart = mi; 35036 generateREXprefix(true, right, null, left); 35037 setMachineCodes(mi++, (byte) 0x0F); 35038 setMachineCodes(mi++, (byte) 0xAD); 35039 emitRegDispRegOperands(left, disp, right); 35040 if (lister != null) lister.RDRR(miStart, "SHRD", left, disp, right, shiftBy); 35041 } 35042 35043 /** 35044 * Generate a register-index--register--register SHRD. That is, 35045 * <PRE> 35046 * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 35047 * </PRE> 35048 * 35049 * @param leftBase the destination base register 35050 * @param leftIndex the destination index register 35051 * @param scale the destination scale 35052 * @param disp the destination displacement 35053 * @param right the register containing bits that are shifted in 35054 * @param shiftBy must be ECX 35055 */ 35056 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5,6}) 35057 public final void emitSHRD_RegIdx_Reg_Reg_Quad(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) { 35058 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 35059 int miStart = mi; 35060 generateREXprefix(true, right, leftIndex, leftBase); 35061 setMachineCodes(mi++, (byte) 0x0F); 35062 setMachineCodes(mi++, (byte) 0xAD); 35063 emitSIBRegOperands(leftBase, leftIndex, scale, disp, right); 35064 if (lister != null) lister.RXDRR(miStart, "SHRD", leftBase, leftIndex, scale, disp, right, shiftBy); 35065 } 35066 35067 /** 35068 * Generate a register-index--register--register SHRD. That is, 35069 * <PRE> 35070 * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in) 35071 * </PRE> 35072 * 35073 * @param leftIndex the destination index register 35074 * @param scale the destination scale 35075 * @param disp the destination displacement 35076 * @param right the register containing bits that are shifted in 35077 * @param shiftBy must be ECX 35078 */ 35079 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4,5}) 35080 public final void emitSHRD_RegOff_Reg_Reg_Quad(GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) { 35081 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 35082 int miStart = mi; 35083 generateREXprefix(true, right, leftIndex, null); 35084 setMachineCodes(mi++, (byte) 0x0F); 35085 setMachineCodes(mi++, (byte) 0xAD); 35086 emitRegOffRegOperands(leftIndex, scale, disp, right); 35087 if (lister != null) lister.RFDRR(miStart, "SHRD", leftIndex, scale, disp, right, shiftBy); 35088 } 35089 35090 /** 35091 * Generate a register-index--register--register SHRD. That is, 35092 * <PRE> 35093 * [disp] <<= shiftBy (with bits from right shifted in) 35094 * </PRE> 35095 * 35096 * @param disp the destination displacement 35097 * @param right the register containing bits that are shifted in 35098 * @param shiftBy must be ECX 35099 */ 35100 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3}) 35101 public final void emitSHRD_Abs_Reg_Reg_Quad(Address disp, GPR right, GPR shiftBy) { 35102 if (VM.VerifyAssertions) VM._assert(shiftBy == ECX); 35103 int miStart = mi; 35104 generateREXprefix(true, right, null, null); 35105 setMachineCodes(mi++, (byte) 0x0F); 35106 setMachineCodes(mi++, (byte) 0xAD); 35107 emitAbsRegOperands(disp, right); 35108 if (lister != null) lister.RARR(miStart, "SHRD", disp, right, shiftBy); 35109 } 35110 35111 /** 35112 * Generate a register POP. That is, 35113 * <PRE> 35114 * pop dstReg, SP -= 4 35115 * </PRE> 35116 * 35117 * @param reg the destination register 35118 */ 35119 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35120 public final void emitPOP_Reg (GPR reg) { 35121 int miStart = mi; 35122 generateREXprefix(false, null, null, reg); 35123 setMachineCodes(mi++, (byte) (0x58 + reg.valueForOpcode())); 35124 if (lister != null) lister.R(miStart, "POP", reg); 35125 } 35126 35127 /** 35128 * Generate a register-displacement POP. That is, 35129 * <PRE> 35130 * pop [base + disp], SP -= 4 35131 * </PRE> 35132 * 35133 * @param base the base register 35134 * @param disp the displacement 35135 */ 35136 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35137 public final void emitPOP_RegDisp (GPR base, Offset disp) { 35138 int miStart = mi; 35139 generateREXprefix(false, null, null, base); 35140 setMachineCodes(mi++, (byte) 0x8F); 35141 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x0)); 35142 if (lister != null) lister.RD(miStart, "POP", base, disp); 35143 } 35144 35145 /** 35146 * Generate a register-indirect POP. That is, 35147 * <PRE> 35148 * pop [base], SP -= 4 35149 * </PRE> 35150 * 35151 * @param base the base register 35152 */ 35153 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35154 public final void emitPOP_RegInd (GPR base) { 35155 int miStart = mi; 35156 generateREXprefix(false, null, null, base); 35157 setMachineCodes(mi++, (byte) 0x8F); 35158 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x0)); 35159 if (lister != null) lister.RN(miStart, "POP", base); 35160 } 35161 35162 /** 35163 * Generate a register-index POP. That is, 35164 * <PRE> 35165 * pop [base + index<<scale + disp], SP -= 4 35166 * </PRE> 35167 * 35168 * @param base the base register 35169 * @param index the index register 35170 * @param scale the scale 35171 * @param disp the displacement 35172 */ 35173 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35174 public final void emitPOP_RegIdx (GPR base, GPR index, short scale, Offset disp) { 35175 int miStart = mi; 35176 generateREXprefix(false, null, index, base); 35177 setMachineCodes(mi++, (byte) 0x8F); 35178 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x0)); 35179 if (lister != null) lister.RXD(miStart, "POP", base, index, scale, disp); 35180 } 35181 35182 /** 35183 * Generate a register-offset POP. That is, 35184 * <PRE> 35185 * pop [index<<scale + disp], SP -= 4 35186 * </PRE> 35187 * 35188 * @param index the index register 35189 * @param scale the scale 35190 * @param disp the displacement 35191 */ 35192 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35193 public final void emitPOP_RegOff (GPR index, short scale, Offset disp) { 35194 int miStart = mi; 35195 generateREXprefix(false, null, index, null); 35196 setMachineCodes(mi++, (byte) 0x8F); 35197 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x0)); 35198 if (lister != null) lister.RFD(miStart, "POP", index, scale, disp); 35199 } 35200 35201 /** 35202 * Generate an absolute POP. That is, 35203 * <PRE> 35204 * pop [disp], SP -= 4 35205 * </PRE> 35206 * 35207 * @param disp the displacement 35208 */ 35209 public final void emitPOP_Abs (Address disp) { 35210 int miStart = mi; 35211 setMachineCodes(mi++, (byte) 0x8F); 35212 emitAbsRegOperands(disp, GPR.getForOpcode(0x0)); 35213 if (lister != null) lister.RA(miStart, "POP", disp); 35214 } 35215 35216 /** 35217 * Generate a register PUSH. That is, 35218 * <PRE> 35219 * push dstReg, SP += 4 35220 * </PRE> 35221 * 35222 * @param reg the destination register 35223 */ 35224 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35225 public final void emitPUSH_Reg (GPR reg) { 35226 int miStart = mi; 35227 generateREXprefix(false, null, null, reg); 35228 setMachineCodes(mi++, (byte) (0x50 + reg.valueForOpcode())); 35229 if (lister != null) lister.R(miStart, "PUSH", reg); 35230 } 35231 35232 /** 35233 * Generate a register-displacement PUSH. That is, 35234 * <PRE> 35235 * push [base + disp], SP += 4 35236 * </PRE> 35237 * 35238 * @param base the base register 35239 * @param disp the displacement 35240 */ 35241 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35242 public final void emitPUSH_RegDisp (GPR base, Offset disp) { 35243 int miStart = mi; 35244 generateREXprefix(false, null, null, base); 35245 setMachineCodes(mi++, (byte) 0xFF); 35246 emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x6)); 35247 if (lister != null) lister.RD(miStart, "PUSH", base, disp); 35248 } 35249 35250 /** 35251 * Generate a register-indirect PUSH. That is, 35252 * <PRE> 35253 * push [base], SP += 4 35254 * </PRE> 35255 * 35256 * @param base the base register 35257 */ 35258 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35259 public final void emitPUSH_RegInd (GPR base) { 35260 int miStart = mi; 35261 generateREXprefix(false, null, null, base); 35262 setMachineCodes(mi++, (byte) 0xFF); 35263 emitRegIndirectRegOperands(base, GPR.getForOpcode(0x6)); 35264 if (lister != null) lister.RN(miStart, "PUSH", base); 35265 } 35266 35267 /** 35268 * Generate a register-index PUSH. That is, 35269 * <PRE> 35270 * push [base + index<<scale + disp], SP += 4 35271 * </PRE> 35272 * 35273 * @param base the base register 35274 * @param index the index register 35275 * @param scale the scale 35276 * @param disp the displacement 35277 */ 35278 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35279 public final void emitPUSH_RegIdx (GPR base, GPR index, short scale, Offset disp) { 35280 int miStart = mi; 35281 generateREXprefix(false, null, index, base); 35282 setMachineCodes(mi++, (byte) 0xFF); 35283 emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x6)); 35284 if (lister != null) lister.RXD(miStart, "PUSH", base, index, scale, disp); 35285 } 35286 35287 /** 35288 * Generate a register-offset PUSH. That is, 35289 * <PRE> 35290 * push [index<<scale + disp], SP += 4 35291 * </PRE> 35292 * 35293 * @param index the index register 35294 * @param scale the scale 35295 * @param disp the displacement 35296 */ 35297 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35298 public final void emitPUSH_RegOff (GPR index, short scale, Offset disp) { 35299 int miStart = mi; 35300 generateREXprefix(false, null, index, null); 35301 setMachineCodes(mi++, (byte) 0xFF); 35302 emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x6)); 35303 if (lister != null) lister.RFD(miStart, "PUSH", index, scale, disp); 35304 } 35305 35306 /** 35307 * Generate an absolute PUSH. That is, 35308 * <PRE> 35309 * push [disp], SP += 4 35310 * </PRE> 35311 * 35312 * @param disp the displacement 35313 */ 35314 public final void emitPUSH_Abs (Address disp) { 35315 int miStart = mi; 35316 setMachineCodes(mi++, (byte) 0xFF); 35317 emitAbsRegOperands(disp, GPR.getForOpcode(0x6)); 35318 if (lister != null) lister.RA(miStart, "PUSH", disp); 35319 } 35320 35321 /** 35322 * Generate an immediate PUSH. That is, 35323 * <PRE> 35324 * push imm, SP += 4 35325 * </PRE> 35326 * 35327 * @param imm the immediate value 35328 */ 35329 public final void emitPUSH_Imm(int imm) { 35330 int miStart = mi; 35331 if (fits(imm, 8)) { 35332 setMachineCodes(mi++, (byte) 0x6A); 35333 emitImm8(imm); 35334 } else { 35335 setMachineCodes(mi++, (byte) 0x68); 35336 emitImm32(imm); 35337 } 35338 if (lister != null) lister.I(miStart, "PUSH", imm); 35339 } 35340 35341 35342 /** 35343 * Generate a register--register ADDSS. That is, 35344 * <PRE> 35345 * dstReg <<= (quad) srcReg 35346 * </PRE> 35347 * 35348 * @param dstReg destination register 35349 * @param srcReg source register 35350 */ 35351 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35352 public final void emitADDSS_Reg_Reg(XMM dstReg, XMM srcReg) { 35353 int miStart = mi; 35354 setMachineCodes(mi++, (byte) 0xF3); 35355 generateREXprefix(false, dstReg, null, srcReg); 35356 setMachineCodes(mi++, (byte) 0x0F); 35357 setMachineCodes(mi++, (byte) 0x58); 35358 emitRegRegOperands(srcReg, dstReg); 35359 if (lister != null) lister.RR(miStart, "ADDSS", dstReg, srcReg); 35360 } 35361 35362 /** 35363 * Generate a register--register-displacement ADDSS. That is, 35364 * <PRE> 35365 * dstReg <<= (quad) [srcBase + srcDisp] 35366 * </PRE> 35367 * 35368 * @param dstReg destination register 35369 * @param srcBase the source base register 35370 * @param srcDisp the source displacement 35371 */ 35372 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35373 public final void emitADDSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 35374 int miStart = mi; 35375 setMachineCodes(mi++, (byte) 0xF3); 35376 generateREXprefix(false, dstReg, null, srcBase); 35377 setMachineCodes(mi++, (byte) 0x0F); 35378 setMachineCodes(mi++, (byte) 0x58); 35379 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 35380 if (lister != null) lister.RRD(miStart, "ADDSS", dstReg, srcBase, srcDisp); 35381 } 35382 35383 /** 35384 * Generate a register--register-offset ADDSS. That is, 35385 * <PRE> 35386 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 35387 * </PRE> 35388 * 35389 * @param dstReg destination register 35390 * @param srcIndex the source index register 35391 * @param srcScale the source scale 35392 * @param srcDisp the source displacement 35393 */ 35394 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35395 public final void emitADDSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 35396 int miStart = mi; 35397 setMachineCodes(mi++, (byte) 0xF3); 35398 generateREXprefix(false, dstReg, srcIndex, null); 35399 setMachineCodes(mi++, (byte) 0x0F); 35400 setMachineCodes(mi++, (byte) 0x58); 35401 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 35402 if (lister != null) lister.RRFD(miStart, "ADDSS", dstReg, srcIndex, srcScale, srcDisp); 35403 } 35404 35405 /** 35406 * Generate a register--absolute ADDSS. That is, 35407 * <PRE> 35408 * dstReg <<= (quad) [srcDisp] 35409 * </PRE> 35410 * 35411 * @param dstReg destination register 35412 * @param srcDisp the source displacement 35413 */ 35414 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35415 public final void emitADDSS_Reg_Abs(XMM dstReg, Address srcDisp) { 35416 int miStart = mi; 35417 setMachineCodes(mi++, (byte) 0xF3); 35418 generateREXprefix(false, dstReg, null, null); 35419 setMachineCodes(mi++, (byte) 0x0F); 35420 setMachineCodes(mi++, (byte) 0x58); 35421 emitAbsRegOperands(srcDisp, dstReg); 35422 if (lister != null) lister.RRA(miStart, "ADDSS", dstReg, srcDisp); 35423 } 35424 35425 /** 35426 * Generate a register--register-index ADDSS. That is, 35427 * <PRE> 35428 * dstReg <<= (quad) srcReg 35429 * </PRE> 35430 * 35431 * @param dstReg destination register 35432 * @param srcBase the source base register 35433 * @param srcIndex the source index register 35434 * @param srcScale the source scale 35435 * @param srcDisp the source displacement 35436 */ 35437 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 35438 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 35439 public final void emitADDSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 35440 int miStart = mi; 35441 setMachineCodes(mi++, (byte) 0xF3); 35442 generateREXprefix(false, dstReg, srcIndex, srcBase); 35443 setMachineCodes(mi++, (byte) 0x0F); 35444 setMachineCodes(mi++, (byte) 0x58); 35445 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 35446 if (lister != null) lister.RRXD(miStart, "ADDSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 35447 } 35448 35449 /** 35450 * Generate a register--register-indirect ADDSS. That is, 35451 * <PRE> 35452 * dstReg <<= (quad) [srcBase] 35453 * </PRE> 35454 * 35455 * @param dstReg destination register 35456 * @param srcBase the source base register 35457 */ 35458 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35459 public final void emitADDSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 35460 int miStart = mi; 35461 setMachineCodes(mi++, (byte) 0xF3); 35462 generateREXprefix(false, dstReg, null, srcBase); 35463 setMachineCodes(mi++, (byte) 0x0F); 35464 setMachineCodes(mi++, (byte) 0x58); 35465 emitRegIndirectRegOperands(srcBase, dstReg); 35466 if (lister != null) lister.RRN(miStart, "ADDSS", dstReg, srcBase); 35467 } 35468 35469 35470 /** 35471 * Generate a register--register SUBSS. That is, 35472 * <PRE> 35473 * dstReg <<= (quad) srcReg 35474 * </PRE> 35475 * 35476 * @param dstReg destination register 35477 * @param srcReg source register 35478 */ 35479 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35480 public final void emitSUBSS_Reg_Reg(XMM dstReg, XMM srcReg) { 35481 int miStart = mi; 35482 setMachineCodes(mi++, (byte) 0xF3); 35483 generateREXprefix(false, dstReg, null, srcReg); 35484 setMachineCodes(mi++, (byte) 0x0F); 35485 setMachineCodes(mi++, (byte) 0x5C); 35486 emitRegRegOperands(srcReg, dstReg); 35487 if (lister != null) lister.RR(miStart, "SUBSS", dstReg, srcReg); 35488 } 35489 35490 /** 35491 * Generate a register--register-displacement SUBSS. That is, 35492 * <PRE> 35493 * dstReg <<= (quad) [srcBase + srcDisp] 35494 * </PRE> 35495 * 35496 * @param dstReg destination register 35497 * @param srcBase the source base register 35498 * @param srcDisp the source displacement 35499 */ 35500 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35501 public final void emitSUBSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 35502 int miStart = mi; 35503 setMachineCodes(mi++, (byte) 0xF3); 35504 generateREXprefix(false, dstReg, null, srcBase); 35505 setMachineCodes(mi++, (byte) 0x0F); 35506 setMachineCodes(mi++, (byte) 0x5C); 35507 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 35508 if (lister != null) lister.RRD(miStart, "SUBSS", dstReg, srcBase, srcDisp); 35509 } 35510 35511 /** 35512 * Generate a register--register-offset SUBSS. That is, 35513 * <PRE> 35514 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 35515 * </PRE> 35516 * 35517 * @param dstReg destination register 35518 * @param srcIndex the source index register 35519 * @param srcScale the source scale 35520 * @param srcDisp the source displacement 35521 */ 35522 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35523 public final void emitSUBSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 35524 int miStart = mi; 35525 setMachineCodes(mi++, (byte) 0xF3); 35526 generateREXprefix(false, dstReg, srcIndex, null); 35527 setMachineCodes(mi++, (byte) 0x0F); 35528 setMachineCodes(mi++, (byte) 0x5C); 35529 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 35530 if (lister != null) lister.RRFD(miStart, "SUBSS", dstReg, srcIndex, srcScale, srcDisp); 35531 } 35532 35533 /** 35534 * Generate a register--absolute SUBSS. That is, 35535 * <PRE> 35536 * dstReg <<= (quad) [srcDisp] 35537 * </PRE> 35538 * 35539 * @param dstReg destination register 35540 * @param srcDisp the source displacement 35541 */ 35542 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35543 public final void emitSUBSS_Reg_Abs(XMM dstReg, Address srcDisp) { 35544 int miStart = mi; 35545 setMachineCodes(mi++, (byte) 0xF3); 35546 generateREXprefix(false, dstReg, null, null); 35547 setMachineCodes(mi++, (byte) 0x0F); 35548 setMachineCodes(mi++, (byte) 0x5C); 35549 emitAbsRegOperands(srcDisp, dstReg); 35550 if (lister != null) lister.RRA(miStart, "SUBSS", dstReg, srcDisp); 35551 } 35552 35553 /** 35554 * Generate a register--register-index SUBSS. That is, 35555 * <PRE> 35556 * dstReg <<= (quad) srcReg 35557 * </PRE> 35558 * 35559 * @param dstReg destination register 35560 * @param srcBase the source base register 35561 * @param srcIndex the source index register 35562 * @param srcScale the source scale 35563 * @param srcDisp the source displacement 35564 */ 35565 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 35566 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 35567 public final void emitSUBSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 35568 int miStart = mi; 35569 setMachineCodes(mi++, (byte) 0xF3); 35570 generateREXprefix(false, dstReg, srcIndex, srcBase); 35571 setMachineCodes(mi++, (byte) 0x0F); 35572 setMachineCodes(mi++, (byte) 0x5C); 35573 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 35574 if (lister != null) lister.RRXD(miStart, "SUBSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 35575 } 35576 35577 /** 35578 * Generate a register--register-indirect SUBSS. That is, 35579 * <PRE> 35580 * dstReg <<= (quad) [srcBase] 35581 * </PRE> 35582 * 35583 * @param dstReg destination register 35584 * @param srcBase the source base register 35585 */ 35586 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35587 public final void emitSUBSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 35588 int miStart = mi; 35589 setMachineCodes(mi++, (byte) 0xF3); 35590 generateREXprefix(false, dstReg, null, srcBase); 35591 setMachineCodes(mi++, (byte) 0x0F); 35592 setMachineCodes(mi++, (byte) 0x5C); 35593 emitRegIndirectRegOperands(srcBase, dstReg); 35594 if (lister != null) lister.RRN(miStart, "SUBSS", dstReg, srcBase); 35595 } 35596 35597 35598 /** 35599 * Generate a register--register MULSS. That is, 35600 * <PRE> 35601 * dstReg <<= (quad) srcReg 35602 * </PRE> 35603 * 35604 * @param dstReg destination register 35605 * @param srcReg source register 35606 */ 35607 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35608 public final void emitMULSS_Reg_Reg(XMM dstReg, XMM srcReg) { 35609 int miStart = mi; 35610 setMachineCodes(mi++, (byte) 0xF3); 35611 generateREXprefix(false, dstReg, null, srcReg); 35612 setMachineCodes(mi++, (byte) 0x0F); 35613 setMachineCodes(mi++, (byte) 0x59); 35614 emitRegRegOperands(srcReg, dstReg); 35615 if (lister != null) lister.RR(miStart, "MULSS", dstReg, srcReg); 35616 } 35617 35618 /** 35619 * Generate a register--register-displacement MULSS. That is, 35620 * <PRE> 35621 * dstReg <<= (quad) [srcBase + srcDisp] 35622 * </PRE> 35623 * 35624 * @param dstReg destination register 35625 * @param srcBase the source base register 35626 * @param srcDisp the source displacement 35627 */ 35628 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35629 public final void emitMULSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 35630 int miStart = mi; 35631 setMachineCodes(mi++, (byte) 0xF3); 35632 generateREXprefix(false, dstReg, null, srcBase); 35633 setMachineCodes(mi++, (byte) 0x0F); 35634 setMachineCodes(mi++, (byte) 0x59); 35635 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 35636 if (lister != null) lister.RRD(miStart, "MULSS", dstReg, srcBase, srcDisp); 35637 } 35638 35639 /** 35640 * Generate a register--register-offset MULSS. That is, 35641 * <PRE> 35642 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 35643 * </PRE> 35644 * 35645 * @param dstReg destination register 35646 * @param srcIndex the source index register 35647 * @param srcScale the source scale 35648 * @param srcDisp the source displacement 35649 */ 35650 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35651 public final void emitMULSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 35652 int miStart = mi; 35653 setMachineCodes(mi++, (byte) 0xF3); 35654 generateREXprefix(false, dstReg, srcIndex, null); 35655 setMachineCodes(mi++, (byte) 0x0F); 35656 setMachineCodes(mi++, (byte) 0x59); 35657 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 35658 if (lister != null) lister.RRFD(miStart, "MULSS", dstReg, srcIndex, srcScale, srcDisp); 35659 } 35660 35661 /** 35662 * Generate a register--absolute MULSS. That is, 35663 * <PRE> 35664 * dstReg <<= (quad) [srcDisp] 35665 * </PRE> 35666 * 35667 * @param dstReg destination register 35668 * @param srcDisp the source displacement 35669 */ 35670 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35671 public final void emitMULSS_Reg_Abs(XMM dstReg, Address srcDisp) { 35672 int miStart = mi; 35673 setMachineCodes(mi++, (byte) 0xF3); 35674 generateREXprefix(false, dstReg, null, null); 35675 setMachineCodes(mi++, (byte) 0x0F); 35676 setMachineCodes(mi++, (byte) 0x59); 35677 emitAbsRegOperands(srcDisp, dstReg); 35678 if (lister != null) lister.RRA(miStart, "MULSS", dstReg, srcDisp); 35679 } 35680 35681 /** 35682 * Generate a register--register-index MULSS. That is, 35683 * <PRE> 35684 * dstReg <<= (quad) srcReg 35685 * </PRE> 35686 * 35687 * @param dstReg destination register 35688 * @param srcBase the source base register 35689 * @param srcIndex the source index register 35690 * @param srcScale the source scale 35691 * @param srcDisp the source displacement 35692 */ 35693 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 35694 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 35695 public final void emitMULSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 35696 int miStart = mi; 35697 setMachineCodes(mi++, (byte) 0xF3); 35698 generateREXprefix(false, dstReg, srcIndex, srcBase); 35699 setMachineCodes(mi++, (byte) 0x0F); 35700 setMachineCodes(mi++, (byte) 0x59); 35701 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 35702 if (lister != null) lister.RRXD(miStart, "MULSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 35703 } 35704 35705 /** 35706 * Generate a register--register-indirect MULSS. That is, 35707 * <PRE> 35708 * dstReg <<= (quad) [srcBase] 35709 * </PRE> 35710 * 35711 * @param dstReg destination register 35712 * @param srcBase the source base register 35713 */ 35714 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35715 public final void emitMULSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 35716 int miStart = mi; 35717 setMachineCodes(mi++, (byte) 0xF3); 35718 generateREXprefix(false, dstReg, null, srcBase); 35719 setMachineCodes(mi++, (byte) 0x0F); 35720 setMachineCodes(mi++, (byte) 0x59); 35721 emitRegIndirectRegOperands(srcBase, dstReg); 35722 if (lister != null) lister.RRN(miStart, "MULSS", dstReg, srcBase); 35723 } 35724 35725 35726 /** 35727 * Generate a register--register DIVSS. That is, 35728 * <PRE> 35729 * dstReg <<= (quad) srcReg 35730 * </PRE> 35731 * 35732 * @param dstReg destination register 35733 * @param srcReg source register 35734 */ 35735 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35736 public final void emitDIVSS_Reg_Reg(XMM dstReg, XMM srcReg) { 35737 int miStart = mi; 35738 setMachineCodes(mi++, (byte) 0xF3); 35739 generateREXprefix(false, dstReg, null, srcReg); 35740 setMachineCodes(mi++, (byte) 0x0F); 35741 setMachineCodes(mi++, (byte) 0x5E); 35742 emitRegRegOperands(srcReg, dstReg); 35743 if (lister != null) lister.RR(miStart, "DIVSS", dstReg, srcReg); 35744 } 35745 35746 /** 35747 * Generate a register--register-displacement DIVSS. That is, 35748 * <PRE> 35749 * dstReg <<= (quad) [srcBase + srcDisp] 35750 * </PRE> 35751 * 35752 * @param dstReg destination register 35753 * @param srcBase the source base register 35754 * @param srcDisp the source displacement 35755 */ 35756 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35757 public final void emitDIVSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 35758 int miStart = mi; 35759 setMachineCodes(mi++, (byte) 0xF3); 35760 generateREXprefix(false, dstReg, null, srcBase); 35761 setMachineCodes(mi++, (byte) 0x0F); 35762 setMachineCodes(mi++, (byte) 0x5E); 35763 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 35764 if (lister != null) lister.RRD(miStart, "DIVSS", dstReg, srcBase, srcDisp); 35765 } 35766 35767 /** 35768 * Generate a register--register-offset DIVSS. That is, 35769 * <PRE> 35770 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 35771 * </PRE> 35772 * 35773 * @param dstReg destination register 35774 * @param srcIndex the source index register 35775 * @param srcScale the source scale 35776 * @param srcDisp the source displacement 35777 */ 35778 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35779 public final void emitDIVSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 35780 int miStart = mi; 35781 setMachineCodes(mi++, (byte) 0xF3); 35782 generateREXprefix(false, dstReg, srcIndex, null); 35783 setMachineCodes(mi++, (byte) 0x0F); 35784 setMachineCodes(mi++, (byte) 0x5E); 35785 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 35786 if (lister != null) lister.RRFD(miStart, "DIVSS", dstReg, srcIndex, srcScale, srcDisp); 35787 } 35788 35789 /** 35790 * Generate a register--absolute DIVSS. That is, 35791 * <PRE> 35792 * dstReg <<= (quad) [srcDisp] 35793 * </PRE> 35794 * 35795 * @param dstReg destination register 35796 * @param srcDisp the source displacement 35797 */ 35798 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35799 public final void emitDIVSS_Reg_Abs(XMM dstReg, Address srcDisp) { 35800 int miStart = mi; 35801 setMachineCodes(mi++, (byte) 0xF3); 35802 generateREXprefix(false, dstReg, null, null); 35803 setMachineCodes(mi++, (byte) 0x0F); 35804 setMachineCodes(mi++, (byte) 0x5E); 35805 emitAbsRegOperands(srcDisp, dstReg); 35806 if (lister != null) lister.RRA(miStart, "DIVSS", dstReg, srcDisp); 35807 } 35808 35809 /** 35810 * Generate a register--register-index DIVSS. That is, 35811 * <PRE> 35812 * dstReg <<= (quad) srcReg 35813 * </PRE> 35814 * 35815 * @param dstReg destination register 35816 * @param srcBase the source base register 35817 * @param srcIndex the source index register 35818 * @param srcScale the source scale 35819 * @param srcDisp the source displacement 35820 */ 35821 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 35822 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 35823 public final void emitDIVSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 35824 int miStart = mi; 35825 setMachineCodes(mi++, (byte) 0xF3); 35826 generateREXprefix(false, dstReg, srcIndex, srcBase); 35827 setMachineCodes(mi++, (byte) 0x0F); 35828 setMachineCodes(mi++, (byte) 0x5E); 35829 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 35830 if (lister != null) lister.RRXD(miStart, "DIVSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 35831 } 35832 35833 /** 35834 * Generate a register--register-indirect DIVSS. That is, 35835 * <PRE> 35836 * dstReg <<= (quad) [srcBase] 35837 * </PRE> 35838 * 35839 * @param dstReg destination register 35840 * @param srcBase the source base register 35841 */ 35842 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35843 public final void emitDIVSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 35844 int miStart = mi; 35845 setMachineCodes(mi++, (byte) 0xF3); 35846 generateREXprefix(false, dstReg, null, srcBase); 35847 setMachineCodes(mi++, (byte) 0x0F); 35848 setMachineCodes(mi++, (byte) 0x5E); 35849 emitRegIndirectRegOperands(srcBase, dstReg); 35850 if (lister != null) lister.RRN(miStart, "DIVSS", dstReg, srcBase); 35851 } 35852 35853 35854 /** 35855 * Generate a register--register MOVSS. That is, 35856 * <PRE> 35857 * dstReg <<= (quad) srcReg 35858 * </PRE> 35859 * 35860 * @param dstReg destination register 35861 * @param srcReg source register 35862 */ 35863 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35864 public final void emitMOVSS_Reg_Reg(XMM dstReg, XMM srcReg) { 35865 int miStart = mi; 35866 setMachineCodes(mi++, (byte) 0xF3); 35867 generateREXprefix(false, dstReg, null, srcReg); 35868 setMachineCodes(mi++, (byte) 0x0F); 35869 setMachineCodes(mi++, (byte) 0x10); 35870 emitRegRegOperands(srcReg, dstReg); 35871 if (lister != null) lister.RR(miStart, "MOVSS", dstReg, srcReg); 35872 } 35873 35874 /** 35875 * Generate a register--register-displacement MOVSS. That is, 35876 * <PRE> 35877 * dstReg <<= (quad) [srcBase + srcDisp] 35878 * </PRE> 35879 * 35880 * @param dstReg destination register 35881 * @param srcBase the source base register 35882 * @param srcDisp the source displacement 35883 */ 35884 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35885 public final void emitMOVSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 35886 int miStart = mi; 35887 setMachineCodes(mi++, (byte) 0xF3); 35888 generateREXprefix(false, dstReg, null, srcBase); 35889 setMachineCodes(mi++, (byte) 0x0F); 35890 setMachineCodes(mi++, (byte) 0x10); 35891 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 35892 if (lister != null) lister.RRD(miStart, "MOVSS", dstReg, srcBase, srcDisp); 35893 } 35894 35895 /** 35896 * Generate a register--register-offset MOVSS. That is, 35897 * <PRE> 35898 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 35899 * </PRE> 35900 * 35901 * @param dstReg destination register 35902 * @param srcIndex the source index register 35903 * @param srcScale the source scale 35904 * @param srcDisp the source displacement 35905 */ 35906 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35907 public final void emitMOVSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 35908 int miStart = mi; 35909 setMachineCodes(mi++, (byte) 0xF3); 35910 generateREXprefix(false, dstReg, srcIndex, null); 35911 setMachineCodes(mi++, (byte) 0x0F); 35912 setMachineCodes(mi++, (byte) 0x10); 35913 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 35914 if (lister != null) lister.RRFD(miStart, "MOVSS", dstReg, srcIndex, srcScale, srcDisp); 35915 } 35916 35917 /** 35918 * Generate a register--absolute MOVSS. That is, 35919 * <PRE> 35920 * dstReg <<= (quad) [srcDisp] 35921 * </PRE> 35922 * 35923 * @param dstReg destination register 35924 * @param srcDisp the source displacement 35925 */ 35926 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 35927 public final void emitMOVSS_Reg_Abs(XMM dstReg, Address srcDisp) { 35928 int miStart = mi; 35929 setMachineCodes(mi++, (byte) 0xF3); 35930 generateREXprefix(false, dstReg, null, null); 35931 setMachineCodes(mi++, (byte) 0x0F); 35932 setMachineCodes(mi++, (byte) 0x10); 35933 emitAbsRegOperands(srcDisp, dstReg); 35934 if (lister != null) lister.RRA(miStart, "MOVSS", dstReg, srcDisp); 35935 } 35936 35937 /** 35938 * Generate a register--register-index MOVSS. That is, 35939 * <PRE> 35940 * dstReg <<= (quad) srcReg 35941 * </PRE> 35942 * 35943 * @param dstReg destination register 35944 * @param srcBase the source base register 35945 * @param srcIndex the source index register 35946 * @param srcScale the source scale 35947 * @param srcDisp the source displacement 35948 */ 35949 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 35950 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 35951 public final void emitMOVSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 35952 int miStart = mi; 35953 setMachineCodes(mi++, (byte) 0xF3); 35954 generateREXprefix(false, dstReg, srcIndex, srcBase); 35955 setMachineCodes(mi++, (byte) 0x0F); 35956 setMachineCodes(mi++, (byte) 0x10); 35957 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 35958 if (lister != null) lister.RRXD(miStart, "MOVSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 35959 } 35960 35961 /** 35962 * Generate a register--register-indirect MOVSS. That is, 35963 * <PRE> 35964 * dstReg <<= (quad) [srcBase] 35965 * </PRE> 35966 * 35967 * @param dstReg destination register 35968 * @param srcBase the source base register 35969 */ 35970 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35971 public final void emitMOVSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 35972 int miStart = mi; 35973 setMachineCodes(mi++, (byte) 0xF3); 35974 generateREXprefix(false, dstReg, null, srcBase); 35975 setMachineCodes(mi++, (byte) 0x0F); 35976 setMachineCodes(mi++, (byte) 0x10); 35977 emitRegIndirectRegOperands(srcBase, dstReg); 35978 if (lister != null) lister.RRN(miStart, "MOVSS", dstReg, srcBase); 35979 } 35980 35981 35982 /** 35983 * Generate a register-indirect--register MOVSS. That is, 35984 * <PRE> 35985 * [dstBase] <<= (quad) srcReg 35986 * </PRE> 35987 * 35988 * @param dstBase the destination base register 35989 * @param srcReg the source register 35990 */ 35991 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 35992 public final void emitMOVSS_RegInd_Reg(GPR dstBase, XMM srcReg) { 35993 int miStart = mi; 35994 setMachineCodes(mi++, (byte) 0xF3); 35995 generateREXprefix(false, srcReg, null, dstBase); 35996 setMachineCodes(mi++, (byte) 0x0F); 35997 setMachineCodes(mi++, (byte) 0x11); 35998 emitRegIndirectRegOperands(dstBase, srcReg); 35999 if (lister != null) lister.RNR(miStart, "MOVSS", dstBase, srcReg); 36000 } 36001 36002 /** 36003 * Generate a register-offset--register MOVSS. That is, 36004 * <PRE> 36005 * [dstReg<<dstScale + dstDisp] <<= (quad) srcReg 36006 * </PRE> 36007 * 36008 * @param dstIndex the destination index register 36009 * @param dstScale the destination shift amount 36010 * @param dstDisp the destination displacement 36011 * @param srcReg the source register 36012 */ 36013 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 36014 public final void emitMOVSS_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 36015 int miStart = mi; 36016 setMachineCodes(mi++, (byte) 0xF3); 36017 generateREXprefix(false, srcReg, dstIndex, null); 36018 setMachineCodes(mi++, (byte) 0x0F); 36019 setMachineCodes(mi++, (byte) 0x11); 36020 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 36021 if (lister != null) lister.RFDR(miStart, "MOVSS", dstIndex, dstScale, dstDisp, srcReg); 36022 } 36023 36024 /** 36025 * Generate a absolute--register MOVSS. That is, 36026 * <PRE> 36027 * [dstDisp] <<= (quad) srcReg 36028 * </PRE> 36029 * 36030 * @param dstDisp the destination displacement 36031 * @param srcReg the source register 36032 */ 36033 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 36034 public final void emitMOVSS_Abs_Reg(Address dstDisp, XMM srcReg) { 36035 int miStart = mi; 36036 setMachineCodes(mi++, (byte) 0xF3); 36037 generateREXprefix(false, srcReg, null, null); 36038 setMachineCodes(mi++, (byte) 0x0F); 36039 setMachineCodes(mi++, (byte) 0x11); 36040 emitAbsRegOperands(dstDisp, srcReg); 36041 if (lister != null) lister.RAR(miStart, "MOVSS", dstDisp, srcReg); 36042 } 36043 36044 /** 36045 * Generate a register-index--register MOVSS. That is, 36046 * <PRE> 36047 * [dstBase + dstIndex<<dstScale + dstDisp] <<= (quad) srcReg 36048 * </PRE> 36049 * 36050 * @param dstBase the destination base register 36051 * @param dstIndex the destination index register 36052 * @param dstScale the destination shift amount 36053 * @param dstDisp the destination displacement 36054 * @param srcReg the source register 36055 */ 36056 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 36057 public final void emitMOVSS_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 36058 int miStart = mi; 36059 setMachineCodes(mi++, (byte) 0xF3); 36060 generateREXprefix(false, srcReg, dstIndex, dstBase); 36061 setMachineCodes(mi++, (byte) 0x0F); 36062 setMachineCodes(mi++, (byte) 0x11); 36063 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 36064 if (lister != null) lister.RXDR(miStart, "MOVSS", dstBase, dstIndex, dstScale, dstDisp, srcReg); 36065 } 36066 36067 /** 36068 * Generate a register-displacement--register MOVSS. That is, 36069 * <PRE> 36070 * [dstBase + dstDisp] <<= (quad) srcReg 36071 * </PRE> 36072 * 36073 * @param dstBase the destination base register 36074 * @param dstDisp the destination displacement 36075 * @param srcReg the source register 36076 */ 36077 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 36078 public final void emitMOVSS_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) { 36079 int miStart = mi; 36080 setMachineCodes(mi++, (byte) 0xF3); 36081 generateREXprefix(false, srcReg, null, dstBase); 36082 setMachineCodes(mi++, (byte) 0x0F); 36083 setMachineCodes(mi++, (byte) 0x11); 36084 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 36085 if (lister != null) lister.RDR(miStart, "MOVSS", dstBase, dstDisp, srcReg); 36086 } 36087 36088 36089 /** 36090 * Generate a register--register MOVLPS. That is, 36091 * <PRE> 36092 * dstReg <<= (quad) srcReg 36093 * </PRE> 36094 * 36095 * @param dstReg destination register 36096 * @param srcReg source register 36097 */ 36098 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36099 public final void emitMOVLPS_Reg_Reg(XMM dstReg, XMM srcReg) { 36100 int miStart = mi; 36101 generateREXprefix(false, dstReg, null, srcReg); 36102 setMachineCodes(mi++, (byte) 0x0F); 36103 setMachineCodes(mi++, (byte) 0x12); 36104 emitRegRegOperands(srcReg, dstReg); 36105 if (lister != null) lister.RR(miStart, "MOVLPS", dstReg, srcReg); 36106 } 36107 36108 /** 36109 * Generate a register--register-displacement MOVLPS. That is, 36110 * <PRE> 36111 * dstReg <<= (quad) [srcBase + srcDisp] 36112 * </PRE> 36113 * 36114 * @param dstReg destination register 36115 * @param srcBase the source base register 36116 * @param srcDisp the source displacement 36117 */ 36118 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36119 public final void emitMOVLPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 36120 int miStart = mi; 36121 generateREXprefix(false, dstReg, null, srcBase); 36122 setMachineCodes(mi++, (byte) 0x0F); 36123 setMachineCodes(mi++, (byte) 0x12); 36124 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 36125 if (lister != null) lister.RRD(miStart, "MOVLPS", dstReg, srcBase, srcDisp); 36126 } 36127 36128 /** 36129 * Generate a register--register-offset MOVLPS. That is, 36130 * <PRE> 36131 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 36132 * </PRE> 36133 * 36134 * @param dstReg destination register 36135 * @param srcIndex the source index register 36136 * @param srcScale the source scale 36137 * @param srcDisp the source displacement 36138 */ 36139 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36140 public final void emitMOVLPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 36141 int miStart = mi; 36142 generateREXprefix(false, dstReg, srcIndex, null); 36143 setMachineCodes(mi++, (byte) 0x0F); 36144 setMachineCodes(mi++, (byte) 0x12); 36145 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 36146 if (lister != null) lister.RRFD(miStart, "MOVLPS", dstReg, srcIndex, srcScale, srcDisp); 36147 } 36148 36149 /** 36150 * Generate a register--absolute MOVLPS. That is, 36151 * <PRE> 36152 * dstReg <<= (quad) [srcDisp] 36153 * </PRE> 36154 * 36155 * @param dstReg destination register 36156 * @param srcDisp the source displacement 36157 */ 36158 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 36159 public final void emitMOVLPS_Reg_Abs(XMM dstReg, Address srcDisp) { 36160 int miStart = mi; 36161 generateREXprefix(false, dstReg, null, null); 36162 setMachineCodes(mi++, (byte) 0x0F); 36163 setMachineCodes(mi++, (byte) 0x12); 36164 emitAbsRegOperands(srcDisp, dstReg); 36165 if (lister != null) lister.RRA(miStart, "MOVLPS", dstReg, srcDisp); 36166 } 36167 36168 /** 36169 * Generate a register--register-index MOVLPS. That is, 36170 * <PRE> 36171 * dstReg <<= (quad) srcReg 36172 * </PRE> 36173 * 36174 * @param dstReg destination register 36175 * @param srcBase the source base register 36176 * @param srcIndex the source index register 36177 * @param srcScale the source scale 36178 * @param srcDisp the source displacement 36179 */ 36180 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 36181 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 36182 public final void emitMOVLPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 36183 int miStart = mi; 36184 generateREXprefix(false, dstReg, srcIndex, srcBase); 36185 setMachineCodes(mi++, (byte) 0x0F); 36186 setMachineCodes(mi++, (byte) 0x12); 36187 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 36188 if (lister != null) lister.RRXD(miStart, "MOVLPS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 36189 } 36190 36191 /** 36192 * Generate a register--register-indirect MOVLPS. That is, 36193 * <PRE> 36194 * dstReg <<= (quad) [srcBase] 36195 * </PRE> 36196 * 36197 * @param dstReg destination register 36198 * @param srcBase the source base register 36199 */ 36200 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36201 public final void emitMOVLPS_Reg_RegInd(XMM dstReg, GPR srcBase) { 36202 int miStart = mi; 36203 generateREXprefix(false, dstReg, null, srcBase); 36204 setMachineCodes(mi++, (byte) 0x0F); 36205 setMachineCodes(mi++, (byte) 0x12); 36206 emitRegIndirectRegOperands(srcBase, dstReg); 36207 if (lister != null) lister.RRN(miStart, "MOVLPS", dstReg, srcBase); 36208 } 36209 36210 36211 /** 36212 * Generate a register-indirect--register MOVLPS. That is, 36213 * <PRE> 36214 * [dstBase] <<= (quad) srcReg 36215 * </PRE> 36216 * 36217 * @param dstBase the destination base register 36218 * @param srcReg the source register 36219 */ 36220 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36221 public final void emitMOVLPS_RegInd_Reg(GPR dstBase, XMM srcReg) { 36222 int miStart = mi; 36223 generateREXprefix(false, srcReg, null, dstBase); 36224 setMachineCodes(mi++, (byte) 0x0F); 36225 setMachineCodes(mi++, (byte) 0x13); 36226 emitRegIndirectRegOperands(dstBase, srcReg); 36227 if (lister != null) lister.RNR(miStart, "MOVLPS", dstBase, srcReg); 36228 } 36229 36230 /** 36231 * Generate a register-offset--register MOVLPS. That is, 36232 * <PRE> 36233 * [dstReg<<dstScale + dstDisp] <<= (quad) srcReg 36234 * </PRE> 36235 * 36236 * @param dstIndex the destination index register 36237 * @param dstScale the destination shift amount 36238 * @param dstDisp the destination displacement 36239 * @param srcReg the source register 36240 */ 36241 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 36242 public final void emitMOVLPS_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 36243 int miStart = mi; 36244 generateREXprefix(false, srcReg, dstIndex, null); 36245 setMachineCodes(mi++, (byte) 0x0F); 36246 setMachineCodes(mi++, (byte) 0x13); 36247 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 36248 if (lister != null) lister.RFDR(miStart, "MOVLPS", dstIndex, dstScale, dstDisp, srcReg); 36249 } 36250 36251 /** 36252 * Generate a absolute--register MOVLPS. That is, 36253 * <PRE> 36254 * [dstDisp] <<= (quad) srcReg 36255 * </PRE> 36256 * 36257 * @param dstDisp the destination displacement 36258 * @param srcReg the source register 36259 */ 36260 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 36261 public final void emitMOVLPS_Abs_Reg(Address dstDisp, XMM srcReg) { 36262 int miStart = mi; 36263 generateREXprefix(false, srcReg, null, null); 36264 setMachineCodes(mi++, (byte) 0x0F); 36265 setMachineCodes(mi++, (byte) 0x13); 36266 emitAbsRegOperands(dstDisp, srcReg); 36267 if (lister != null) lister.RAR(miStart, "MOVLPS", dstDisp, srcReg); 36268 } 36269 36270 /** 36271 * Generate a register-index--register MOVLPS. That is, 36272 * <PRE> 36273 * [dstBase + dstIndex<<dstScale + dstDisp] <<= (quad) srcReg 36274 * </PRE> 36275 * 36276 * @param dstBase the destination base register 36277 * @param dstIndex the destination index register 36278 * @param dstScale the destination shift amount 36279 * @param dstDisp the destination displacement 36280 * @param srcReg the source register 36281 */ 36282 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 36283 public final void emitMOVLPS_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 36284 int miStart = mi; 36285 generateREXprefix(false, srcReg, dstIndex, dstBase); 36286 setMachineCodes(mi++, (byte) 0x0F); 36287 setMachineCodes(mi++, (byte) 0x13); 36288 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 36289 if (lister != null) lister.RXDR(miStart, "MOVLPS", dstBase, dstIndex, dstScale, dstDisp, srcReg); 36290 } 36291 36292 /** 36293 * Generate a register-displacement--register MOVLPS. That is, 36294 * <PRE> 36295 * [dstBase + dstDisp] <<= (quad) srcReg 36296 * </PRE> 36297 * 36298 * @param dstBase the destination base register 36299 * @param dstDisp the destination displacement 36300 * @param srcReg the source register 36301 */ 36302 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 36303 public final void emitMOVLPS_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) { 36304 int miStart = mi; 36305 generateREXprefix(false, srcReg, null, dstBase); 36306 setMachineCodes(mi++, (byte) 0x0F); 36307 setMachineCodes(mi++, (byte) 0x13); 36308 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 36309 if (lister != null) lister.RDR(miStart, "MOVLPS", dstBase, dstDisp, srcReg); 36310 } 36311 36312 36313 /** 36314 * Generate a register--register MOVAPS. That is, 36315 * <PRE> 36316 * dstReg <<= (quad) srcReg 36317 * </PRE> 36318 * 36319 * @param dstReg destination register 36320 * @param srcReg source register 36321 */ 36322 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36323 public final void emitMOVAPS_Reg_Reg(XMM dstReg, XMM srcReg) { 36324 int miStart = mi; 36325 generateREXprefix(false, dstReg, null, srcReg); 36326 setMachineCodes(mi++, (byte) 0x0F); 36327 setMachineCodes(mi++, (byte) 0x28); 36328 emitRegRegOperands(srcReg, dstReg); 36329 if (lister != null) lister.RR(miStart, "MOVAPS", dstReg, srcReg); 36330 } 36331 36332 /** 36333 * Generate a register--register-displacement MOVAPS. That is, 36334 * <PRE> 36335 * dstReg <<= (quad) [srcBase + srcDisp] 36336 * </PRE> 36337 * 36338 * @param dstReg destination register 36339 * @param srcBase the source base register 36340 * @param srcDisp the source displacement 36341 */ 36342 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36343 public final void emitMOVAPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 36344 int miStart = mi; 36345 generateREXprefix(false, dstReg, null, srcBase); 36346 setMachineCodes(mi++, (byte) 0x0F); 36347 setMachineCodes(mi++, (byte) 0x28); 36348 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 36349 if (lister != null) lister.RRD(miStart, "MOVAPS", dstReg, srcBase, srcDisp); 36350 } 36351 36352 /** 36353 * Generate a register--register-offset MOVAPS. That is, 36354 * <PRE> 36355 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 36356 * </PRE> 36357 * 36358 * @param dstReg destination register 36359 * @param srcIndex the source index register 36360 * @param srcScale the source scale 36361 * @param srcDisp the source displacement 36362 */ 36363 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36364 public final void emitMOVAPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 36365 int miStart = mi; 36366 generateREXprefix(false, dstReg, srcIndex, null); 36367 setMachineCodes(mi++, (byte) 0x0F); 36368 setMachineCodes(mi++, (byte) 0x28); 36369 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 36370 if (lister != null) lister.RRFD(miStart, "MOVAPS", dstReg, srcIndex, srcScale, srcDisp); 36371 } 36372 36373 /** 36374 * Generate a register--absolute MOVAPS. That is, 36375 * <PRE> 36376 * dstReg <<= (quad) [srcDisp] 36377 * </PRE> 36378 * 36379 * @param dstReg destination register 36380 * @param srcDisp the source displacement 36381 */ 36382 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 36383 public final void emitMOVAPS_Reg_Abs(XMM dstReg, Address srcDisp) { 36384 int miStart = mi; 36385 generateREXprefix(false, dstReg, null, null); 36386 setMachineCodes(mi++, (byte) 0x0F); 36387 setMachineCodes(mi++, (byte) 0x28); 36388 emitAbsRegOperands(srcDisp, dstReg); 36389 if (lister != null) lister.RRA(miStart, "MOVAPS", dstReg, srcDisp); 36390 } 36391 36392 /** 36393 * Generate a register--register-index MOVAPS. That is, 36394 * <PRE> 36395 * dstReg <<= (quad) srcReg 36396 * </PRE> 36397 * 36398 * @param dstReg destination register 36399 * @param srcBase the source base register 36400 * @param srcIndex the source index register 36401 * @param srcScale the source scale 36402 * @param srcDisp the source displacement 36403 */ 36404 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 36405 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 36406 public final void emitMOVAPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 36407 int miStart = mi; 36408 generateREXprefix(false, dstReg, srcIndex, srcBase); 36409 setMachineCodes(mi++, (byte) 0x0F); 36410 setMachineCodes(mi++, (byte) 0x28); 36411 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 36412 if (lister != null) lister.RRXD(miStart, "MOVAPS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 36413 } 36414 36415 /** 36416 * Generate a register--register-indirect MOVAPS. That is, 36417 * <PRE> 36418 * dstReg <<= (quad) [srcBase] 36419 * </PRE> 36420 * 36421 * @param dstReg destination register 36422 * @param srcBase the source base register 36423 */ 36424 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36425 public final void emitMOVAPS_Reg_RegInd(XMM dstReg, GPR srcBase) { 36426 int miStart = mi; 36427 generateREXprefix(false, dstReg, null, srcBase); 36428 setMachineCodes(mi++, (byte) 0x0F); 36429 setMachineCodes(mi++, (byte) 0x28); 36430 emitRegIndirectRegOperands(srcBase, dstReg); 36431 if (lister != null) lister.RRN(miStart, "MOVAPS", dstReg, srcBase); 36432 } 36433 36434 36435 /** 36436 * Generate a register-indirect--register MOVAPS. That is, 36437 * <PRE> 36438 * [dstBase] <<= (quad) srcReg 36439 * </PRE> 36440 * 36441 * @param dstBase the destination base register 36442 * @param srcReg the source register 36443 */ 36444 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36445 public final void emitMOVAPS_RegInd_Reg(GPR dstBase, XMM srcReg) { 36446 int miStart = mi; 36447 generateREXprefix(false, srcReg, null, dstBase); 36448 setMachineCodes(mi++, (byte) 0x0F); 36449 setMachineCodes(mi++, (byte) 0x29); 36450 emitRegIndirectRegOperands(dstBase, srcReg); 36451 if (lister != null) lister.RNR(miStart, "MOVAPS", dstBase, srcReg); 36452 } 36453 36454 /** 36455 * Generate a register-offset--register MOVAPS. That is, 36456 * <PRE> 36457 * [dstReg<<dstScale + dstDisp] <<= (quad) srcReg 36458 * </PRE> 36459 * 36460 * @param dstIndex the destination index register 36461 * @param dstScale the destination shift amount 36462 * @param dstDisp the destination displacement 36463 * @param srcReg the source register 36464 */ 36465 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 36466 public final void emitMOVAPS_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 36467 int miStart = mi; 36468 generateREXprefix(false, srcReg, dstIndex, null); 36469 setMachineCodes(mi++, (byte) 0x0F); 36470 setMachineCodes(mi++, (byte) 0x29); 36471 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 36472 if (lister != null) lister.RFDR(miStart, "MOVAPS", dstIndex, dstScale, dstDisp, srcReg); 36473 } 36474 36475 /** 36476 * Generate a absolute--register MOVAPS. That is, 36477 * <PRE> 36478 * [dstDisp] <<= (quad) srcReg 36479 * </PRE> 36480 * 36481 * @param dstDisp the destination displacement 36482 * @param srcReg the source register 36483 */ 36484 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 36485 public final void emitMOVAPS_Abs_Reg(Address dstDisp, XMM srcReg) { 36486 int miStart = mi; 36487 generateREXprefix(false, srcReg, null, null); 36488 setMachineCodes(mi++, (byte) 0x0F); 36489 setMachineCodes(mi++, (byte) 0x29); 36490 emitAbsRegOperands(dstDisp, srcReg); 36491 if (lister != null) lister.RAR(miStart, "MOVAPS", dstDisp, srcReg); 36492 } 36493 36494 /** 36495 * Generate a register-index--register MOVAPS. That is, 36496 * <PRE> 36497 * [dstBase + dstIndex<<dstScale + dstDisp] <<= (quad) srcReg 36498 * </PRE> 36499 * 36500 * @param dstBase the destination base register 36501 * @param dstIndex the destination index register 36502 * @param dstScale the destination shift amount 36503 * @param dstDisp the destination displacement 36504 * @param srcReg the source register 36505 */ 36506 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 36507 public final void emitMOVAPS_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 36508 int miStart = mi; 36509 generateREXprefix(false, srcReg, dstIndex, dstBase); 36510 setMachineCodes(mi++, (byte) 0x0F); 36511 setMachineCodes(mi++, (byte) 0x29); 36512 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 36513 if (lister != null) lister.RXDR(miStart, "MOVAPS", dstBase, dstIndex, dstScale, dstDisp, srcReg); 36514 } 36515 36516 /** 36517 * Generate a register-displacement--register MOVAPS. That is, 36518 * <PRE> 36519 * [dstBase + dstDisp] <<= (quad) srcReg 36520 * </PRE> 36521 * 36522 * @param dstBase the destination base register 36523 * @param dstDisp the destination displacement 36524 * @param srcReg the source register 36525 */ 36526 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 36527 public final void emitMOVAPS_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) { 36528 int miStart = mi; 36529 generateREXprefix(false, srcReg, null, dstBase); 36530 setMachineCodes(mi++, (byte) 0x0F); 36531 setMachineCodes(mi++, (byte) 0x29); 36532 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 36533 if (lister != null) lister.RDR(miStart, "MOVAPS", dstBase, dstDisp, srcReg); 36534 } 36535 36536 36537 /** 36538 * Generate a register--register SQRTSS. That is, 36539 * <PRE> 36540 * dstReg <<= (quad) srcReg 36541 * </PRE> 36542 * 36543 * @param dstReg destination register 36544 * @param srcReg source register 36545 */ 36546 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36547 public final void emitSQRTSS_Reg_Reg(XMM dstReg, XMM srcReg) { 36548 int miStart = mi; 36549 setMachineCodes(mi++, (byte) 0xF3); 36550 generateREXprefix(false, dstReg, null, srcReg); 36551 setMachineCodes(mi++, (byte) 0x0F); 36552 setMachineCodes(mi++, (byte) 0x51); 36553 emitRegRegOperands(srcReg, dstReg); 36554 if (lister != null) lister.RR(miStart, "SQRTSS", dstReg, srcReg); 36555 } 36556 36557 /** 36558 * Generate a register--register-displacement SQRTSS. That is, 36559 * <PRE> 36560 * dstReg <<= (quad) [srcBase + srcDisp] 36561 * </PRE> 36562 * 36563 * @param dstReg destination register 36564 * @param srcBase the source base register 36565 * @param srcDisp the source displacement 36566 */ 36567 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36568 public final void emitSQRTSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 36569 int miStart = mi; 36570 setMachineCodes(mi++, (byte) 0xF3); 36571 generateREXprefix(false, dstReg, null, srcBase); 36572 setMachineCodes(mi++, (byte) 0x0F); 36573 setMachineCodes(mi++, (byte) 0x51); 36574 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 36575 if (lister != null) lister.RRD(miStart, "SQRTSS", dstReg, srcBase, srcDisp); 36576 } 36577 36578 /** 36579 * Generate a register--register-offset SQRTSS. That is, 36580 * <PRE> 36581 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 36582 * </PRE> 36583 * 36584 * @param dstReg destination register 36585 * @param srcIndex the source index register 36586 * @param srcScale the source scale 36587 * @param srcDisp the source displacement 36588 */ 36589 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36590 public final void emitSQRTSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 36591 int miStart = mi; 36592 setMachineCodes(mi++, (byte) 0xF3); 36593 generateREXprefix(false, dstReg, srcIndex, null); 36594 setMachineCodes(mi++, (byte) 0x0F); 36595 setMachineCodes(mi++, (byte) 0x51); 36596 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 36597 if (lister != null) lister.RRFD(miStart, "SQRTSS", dstReg, srcIndex, srcScale, srcDisp); 36598 } 36599 36600 /** 36601 * Generate a register--absolute SQRTSS. That is, 36602 * <PRE> 36603 * dstReg <<= (quad) [srcDisp] 36604 * </PRE> 36605 * 36606 * @param dstReg destination register 36607 * @param srcDisp the source displacement 36608 */ 36609 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 36610 public final void emitSQRTSS_Reg_Abs(XMM dstReg, Address srcDisp) { 36611 int miStart = mi; 36612 setMachineCodes(mi++, (byte) 0xF3); 36613 generateREXprefix(false, dstReg, null, null); 36614 setMachineCodes(mi++, (byte) 0x0F); 36615 setMachineCodes(mi++, (byte) 0x51); 36616 emitAbsRegOperands(srcDisp, dstReg); 36617 if (lister != null) lister.RRA(miStart, "SQRTSS", dstReg, srcDisp); 36618 } 36619 36620 /** 36621 * Generate a register--register-index SQRTSS. That is, 36622 * <PRE> 36623 * dstReg <<= (quad) srcReg 36624 * </PRE> 36625 * 36626 * @param dstReg destination register 36627 * @param srcBase the source base register 36628 * @param srcIndex the source index register 36629 * @param srcScale the source scale 36630 * @param srcDisp the source displacement 36631 */ 36632 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 36633 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 36634 public final void emitSQRTSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 36635 int miStart = mi; 36636 setMachineCodes(mi++, (byte) 0xF3); 36637 generateREXprefix(false, dstReg, srcIndex, srcBase); 36638 setMachineCodes(mi++, (byte) 0x0F); 36639 setMachineCodes(mi++, (byte) 0x51); 36640 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 36641 if (lister != null) lister.RRXD(miStart, "SQRTSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 36642 } 36643 36644 /** 36645 * Generate a register--register-indirect SQRTSS. That is, 36646 * <PRE> 36647 * dstReg <<= (quad) [srcBase] 36648 * </PRE> 36649 * 36650 * @param dstReg destination register 36651 * @param srcBase the source base register 36652 */ 36653 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36654 public final void emitSQRTSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 36655 int miStart = mi; 36656 setMachineCodes(mi++, (byte) 0xF3); 36657 generateREXprefix(false, dstReg, null, srcBase); 36658 setMachineCodes(mi++, (byte) 0x0F); 36659 setMachineCodes(mi++, (byte) 0x51); 36660 emitRegIndirectRegOperands(srcBase, dstReg); 36661 if (lister != null) lister.RRN(miStart, "SQRTSS", dstReg, srcBase); 36662 } 36663 36664 36665 /** 36666 * Generate a register--register CVTSS2SD. That is, 36667 * <PRE> 36668 * dstReg <<= (quad) srcReg 36669 * </PRE> 36670 * 36671 * @param dstReg destination register 36672 * @param srcReg source register 36673 */ 36674 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36675 public final void emitCVTSS2SD_Reg_Reg(XMM dstReg, XMM srcReg) { 36676 int miStart = mi; 36677 setMachineCodes(mi++, (byte) 0xF3); 36678 generateREXprefix(false, dstReg, null, srcReg); 36679 setMachineCodes(mi++, (byte) 0x0F); 36680 setMachineCodes(mi++, (byte) 0x5A); 36681 emitRegRegOperands(srcReg, dstReg); 36682 if (lister != null) lister.RR(miStart, "CVTSS2SD", dstReg, srcReg); 36683 } 36684 36685 /** 36686 * Generate a register--register-displacement CVTSS2SD. That is, 36687 * <PRE> 36688 * dstReg <<= (quad) [srcBase + srcDisp] 36689 * </PRE> 36690 * 36691 * @param dstReg destination register 36692 * @param srcBase the source base register 36693 * @param srcDisp the source displacement 36694 */ 36695 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36696 public final void emitCVTSS2SD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 36697 int miStart = mi; 36698 setMachineCodes(mi++, (byte) 0xF3); 36699 generateREXprefix(false, dstReg, null, srcBase); 36700 setMachineCodes(mi++, (byte) 0x0F); 36701 setMachineCodes(mi++, (byte) 0x5A); 36702 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 36703 if (lister != null) lister.RRD(miStart, "CVTSS2SD", dstReg, srcBase, srcDisp); 36704 } 36705 36706 /** 36707 * Generate a register--register-offset CVTSS2SD. That is, 36708 * <PRE> 36709 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 36710 * </PRE> 36711 * 36712 * @param dstReg destination register 36713 * @param srcIndex the source index register 36714 * @param srcScale the source scale 36715 * @param srcDisp the source displacement 36716 */ 36717 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36718 public final void emitCVTSS2SD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 36719 int miStart = mi; 36720 setMachineCodes(mi++, (byte) 0xF3); 36721 generateREXprefix(false, dstReg, srcIndex, null); 36722 setMachineCodes(mi++, (byte) 0x0F); 36723 setMachineCodes(mi++, (byte) 0x5A); 36724 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 36725 if (lister != null) lister.RRFD(miStart, "CVTSS2SD", dstReg, srcIndex, srcScale, srcDisp); 36726 } 36727 36728 /** 36729 * Generate a register--absolute CVTSS2SD. That is, 36730 * <PRE> 36731 * dstReg <<= (quad) [srcDisp] 36732 * </PRE> 36733 * 36734 * @param dstReg destination register 36735 * @param srcDisp the source displacement 36736 */ 36737 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 36738 public final void emitCVTSS2SD_Reg_Abs(XMM dstReg, Address srcDisp) { 36739 int miStart = mi; 36740 setMachineCodes(mi++, (byte) 0xF3); 36741 generateREXprefix(false, dstReg, null, null); 36742 setMachineCodes(mi++, (byte) 0x0F); 36743 setMachineCodes(mi++, (byte) 0x5A); 36744 emitAbsRegOperands(srcDisp, dstReg); 36745 if (lister != null) lister.RRA(miStart, "CVTSS2SD", dstReg, srcDisp); 36746 } 36747 36748 /** 36749 * Generate a register--register-index CVTSS2SD. That is, 36750 * <PRE> 36751 * dstReg <<= (quad) srcReg 36752 * </PRE> 36753 * 36754 * @param dstReg destination register 36755 * @param srcBase the source base register 36756 * @param srcIndex the source index register 36757 * @param srcScale the source scale 36758 * @param srcDisp the source displacement 36759 */ 36760 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 36761 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 36762 public final void emitCVTSS2SD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 36763 int miStart = mi; 36764 setMachineCodes(mi++, (byte) 0xF3); 36765 generateREXprefix(false, dstReg, srcIndex, srcBase); 36766 setMachineCodes(mi++, (byte) 0x0F); 36767 setMachineCodes(mi++, (byte) 0x5A); 36768 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 36769 if (lister != null) lister.RRXD(miStart, "CVTSS2SD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 36770 } 36771 36772 /** 36773 * Generate a register--register-indirect CVTSS2SD. That is, 36774 * <PRE> 36775 * dstReg <<= (quad) [srcBase] 36776 * </PRE> 36777 * 36778 * @param dstReg destination register 36779 * @param srcBase the source base register 36780 */ 36781 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36782 public final void emitCVTSS2SD_Reg_RegInd(XMM dstReg, GPR srcBase) { 36783 int miStart = mi; 36784 setMachineCodes(mi++, (byte) 0xF3); 36785 generateREXprefix(false, dstReg, null, srcBase); 36786 setMachineCodes(mi++, (byte) 0x0F); 36787 setMachineCodes(mi++, (byte) 0x5A); 36788 emitRegIndirectRegOperands(srcBase, dstReg); 36789 if (lister != null) lister.RRN(miStart, "CVTSS2SD", dstReg, srcBase); 36790 } 36791 36792 36793 /** 36794 * Generate a register--register CVTSI2SS. That is, 36795 * <PRE> 36796 * dstReg <<= (quad) srcReg 36797 * </PRE> 36798 * 36799 * @param dstReg destination register 36800 * @param srcReg source register 36801 */ 36802 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36803 public final void emitCVTSI2SS_Reg_Reg(XMM dstReg, GPR srcReg) { 36804 int miStart = mi; 36805 setMachineCodes(mi++, (byte) 0xF3); 36806 generateREXprefix(false, dstReg, null, srcReg); 36807 setMachineCodes(mi++, (byte) 0x0F); 36808 setMachineCodes(mi++, (byte) 0x2A); 36809 emitRegRegOperands(srcReg, dstReg); 36810 if (lister != null) lister.RR(miStart, "CVTSI2SS", dstReg, srcReg); 36811 } 36812 36813 /** 36814 * Generate a register--register-displacement CVTSI2SS. That is, 36815 * <PRE> 36816 * dstReg <<= (quad) [srcBase + srcDisp] 36817 * </PRE> 36818 * 36819 * @param dstReg destination register 36820 * @param srcBase the source base register 36821 * @param srcDisp the source displacement 36822 */ 36823 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36824 public final void emitCVTSI2SS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 36825 int miStart = mi; 36826 setMachineCodes(mi++, (byte) 0xF3); 36827 generateREXprefix(false, dstReg, null, srcBase); 36828 setMachineCodes(mi++, (byte) 0x0F); 36829 setMachineCodes(mi++, (byte) 0x2A); 36830 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 36831 if (lister != null) lister.RRD(miStart, "CVTSI2SS", dstReg, srcBase, srcDisp); 36832 } 36833 36834 /** 36835 * Generate a register--register-offset CVTSI2SS. That is, 36836 * <PRE> 36837 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 36838 * </PRE> 36839 * 36840 * @param dstReg destination register 36841 * @param srcIndex the source index register 36842 * @param srcScale the source scale 36843 * @param srcDisp the source displacement 36844 */ 36845 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36846 public final void emitCVTSI2SS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 36847 int miStart = mi; 36848 setMachineCodes(mi++, (byte) 0xF3); 36849 generateREXprefix(false, dstReg, srcIndex, null); 36850 setMachineCodes(mi++, (byte) 0x0F); 36851 setMachineCodes(mi++, (byte) 0x2A); 36852 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 36853 if (lister != null) lister.RRFD(miStart, "CVTSI2SS", dstReg, srcIndex, srcScale, srcDisp); 36854 } 36855 36856 /** 36857 * Generate a register--absolute CVTSI2SS. That is, 36858 * <PRE> 36859 * dstReg <<= (quad) [srcDisp] 36860 * </PRE> 36861 * 36862 * @param dstReg destination register 36863 * @param srcDisp the source displacement 36864 */ 36865 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 36866 public final void emitCVTSI2SS_Reg_Abs(XMM dstReg, Address srcDisp) { 36867 int miStart = mi; 36868 setMachineCodes(mi++, (byte) 0xF3); 36869 generateREXprefix(false, dstReg, null, null); 36870 setMachineCodes(mi++, (byte) 0x0F); 36871 setMachineCodes(mi++, (byte) 0x2A); 36872 emitAbsRegOperands(srcDisp, dstReg); 36873 if (lister != null) lister.RRA(miStart, "CVTSI2SS", dstReg, srcDisp); 36874 } 36875 36876 /** 36877 * Generate a register--register-index CVTSI2SS. That is, 36878 * <PRE> 36879 * dstReg <<= (quad) srcReg 36880 * </PRE> 36881 * 36882 * @param dstReg destination register 36883 * @param srcBase the source base register 36884 * @param srcIndex the source index register 36885 * @param srcScale the source scale 36886 * @param srcDisp the source displacement 36887 */ 36888 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 36889 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 36890 public final void emitCVTSI2SS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 36891 int miStart = mi; 36892 setMachineCodes(mi++, (byte) 0xF3); 36893 generateREXprefix(false, dstReg, srcIndex, srcBase); 36894 setMachineCodes(mi++, (byte) 0x0F); 36895 setMachineCodes(mi++, (byte) 0x2A); 36896 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 36897 if (lister != null) lister.RRXD(miStart, "CVTSI2SS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 36898 } 36899 36900 /** 36901 * Generate a register--register-indirect CVTSI2SS. That is, 36902 * <PRE> 36903 * dstReg <<= (quad) [srcBase] 36904 * </PRE> 36905 * 36906 * @param dstReg destination register 36907 * @param srcBase the source base register 36908 */ 36909 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36910 public final void emitCVTSI2SS_Reg_RegInd(XMM dstReg, GPR srcBase) { 36911 int miStart = mi; 36912 setMachineCodes(mi++, (byte) 0xF3); 36913 generateREXprefix(false, dstReg, null, srcBase); 36914 setMachineCodes(mi++, (byte) 0x0F); 36915 setMachineCodes(mi++, (byte) 0x2A); 36916 emitRegIndirectRegOperands(srcBase, dstReg); 36917 if (lister != null) lister.RRN(miStart, "CVTSI2SS", dstReg, srcBase); 36918 } 36919 36920 36921 /** 36922 * Generate a register--register CVTSI2SS. That is, 36923 * <PRE> 36924 * dstReg <<= (quad) srcReg 36925 * </PRE> 36926 * 36927 * @param dstReg destination register 36928 * @param srcReg source register 36929 */ 36930 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36931 public final void emitCVTSI2SS_Reg_Reg_Quad(XMM dstReg, GPR srcReg) { 36932 int miStart = mi; 36933 setMachineCodes(mi++, (byte) 0xF3); 36934 generateREXprefix(true, dstReg, null, srcReg); 36935 setMachineCodes(mi++, (byte) 0x0F); 36936 setMachineCodes(mi++, (byte) 0x2A); 36937 emitRegRegOperands(srcReg, dstReg); 36938 if (lister != null) lister.RR(miStart, "CVTSI2SS", dstReg, srcReg); 36939 } 36940 36941 /** 36942 * Generate a register--register-displacement CVTSI2SS. That is, 36943 * <PRE> 36944 * dstReg <<= (quad) [srcBase + srcDisp] 36945 * </PRE> 36946 * 36947 * @param dstReg destination register 36948 * @param srcBase the source base register 36949 * @param srcDisp the source displacement 36950 */ 36951 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36952 public final void emitCVTSI2SS_Reg_RegDisp_Quad(XMM dstReg, GPR srcBase, Offset srcDisp) { 36953 int miStart = mi; 36954 setMachineCodes(mi++, (byte) 0xF3); 36955 generateREXprefix(true, dstReg, null, srcBase); 36956 setMachineCodes(mi++, (byte) 0x0F); 36957 setMachineCodes(mi++, (byte) 0x2A); 36958 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 36959 if (lister != null) lister.RRD(miStart, "CVTSI2SS", dstReg, srcBase, srcDisp); 36960 } 36961 36962 /** 36963 * Generate a register--register-offset CVTSI2SS. That is, 36964 * <PRE> 36965 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 36966 * </PRE> 36967 * 36968 * @param dstReg destination register 36969 * @param srcIndex the source index register 36970 * @param srcScale the source scale 36971 * @param srcDisp the source displacement 36972 */ 36973 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 36974 public final void emitCVTSI2SS_Reg_RegOff_Quad(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 36975 int miStart = mi; 36976 setMachineCodes(mi++, (byte) 0xF3); 36977 generateREXprefix(true, dstReg, srcIndex, null); 36978 setMachineCodes(mi++, (byte) 0x0F); 36979 setMachineCodes(mi++, (byte) 0x2A); 36980 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 36981 if (lister != null) lister.RRFD(miStart, "CVTSI2SS", dstReg, srcIndex, srcScale, srcDisp); 36982 } 36983 36984 /** 36985 * Generate a register--absolute CVTSI2SS. That is, 36986 * <PRE> 36987 * dstReg <<= (quad) [srcDisp] 36988 * </PRE> 36989 * 36990 * @param dstReg destination register 36991 * @param srcDisp the source displacement 36992 */ 36993 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 36994 public final void emitCVTSI2SS_Reg_Abs_Quad(XMM dstReg, Address srcDisp) { 36995 int miStart = mi; 36996 setMachineCodes(mi++, (byte) 0xF3); 36997 generateREXprefix(true, dstReg, null, null); 36998 setMachineCodes(mi++, (byte) 0x0F); 36999 setMachineCodes(mi++, (byte) 0x2A); 37000 emitAbsRegOperands(srcDisp, dstReg); 37001 if (lister != null) lister.RRA(miStart, "CVTSI2SS", dstReg, srcDisp); 37002 } 37003 37004 /** 37005 * Generate a register--register-index CVTSI2SS. That is, 37006 * <PRE> 37007 * dstReg <<= (quad) srcReg 37008 * </PRE> 37009 * 37010 * @param dstReg destination register 37011 * @param srcBase the source base register 37012 * @param srcIndex the source index register 37013 * @param srcScale the source scale 37014 * @param srcDisp the source displacement 37015 */ 37016 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 37017 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 37018 public final void emitCVTSI2SS_Reg_RegIdx_Quad(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 37019 int miStart = mi; 37020 setMachineCodes(mi++, (byte) 0xF3); 37021 generateREXprefix(true, dstReg, srcIndex, srcBase); 37022 setMachineCodes(mi++, (byte) 0x0F); 37023 setMachineCodes(mi++, (byte) 0x2A); 37024 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 37025 if (lister != null) lister.RRXD(miStart, "CVTSI2SS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 37026 } 37027 37028 /** 37029 * Generate a register--register-indirect CVTSI2SS. That is, 37030 * <PRE> 37031 * dstReg <<= (quad) [srcBase] 37032 * </PRE> 37033 * 37034 * @param dstReg destination register 37035 * @param srcBase the source base register 37036 */ 37037 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37038 public final void emitCVTSI2SS_Reg_RegInd_Quad(XMM dstReg, GPR srcBase) { 37039 int miStart = mi; 37040 setMachineCodes(mi++, (byte) 0xF3); 37041 generateREXprefix(true, dstReg, null, srcBase); 37042 setMachineCodes(mi++, (byte) 0x0F); 37043 setMachineCodes(mi++, (byte) 0x2A); 37044 emitRegIndirectRegOperands(srcBase, dstReg); 37045 if (lister != null) lister.RRN(miStart, "CVTSI2SS", dstReg, srcBase); 37046 } 37047 37048 37049 /** 37050 * Generate a register--register CVTSS2SI. That is, 37051 * <PRE> 37052 * dstReg <<= (quad) srcReg 37053 * </PRE> 37054 * 37055 * @param dstReg destination register 37056 * @param srcReg source register 37057 */ 37058 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37059 public final void emitCVTSS2SI_Reg_Reg(GPR dstReg, XMM srcReg) { 37060 int miStart = mi; 37061 setMachineCodes(mi++, (byte) 0xF3); 37062 generateREXprefix(false, dstReg, null, srcReg); 37063 setMachineCodes(mi++, (byte) 0x0F); 37064 setMachineCodes(mi++, (byte) 0x2D); 37065 emitRegRegOperands(srcReg, dstReg); 37066 if (lister != null) lister.RR(miStart, "CVTSS2SI", dstReg, srcReg); 37067 } 37068 37069 /** 37070 * Generate a register--register-displacement CVTSS2SI. That is, 37071 * <PRE> 37072 * dstReg <<= (quad) [srcBase + srcDisp] 37073 * </PRE> 37074 * 37075 * @param dstReg destination register 37076 * @param srcBase the source base register 37077 * @param srcDisp the source displacement 37078 */ 37079 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37080 public final void emitCVTSS2SI_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 37081 int miStart = mi; 37082 setMachineCodes(mi++, (byte) 0xF3); 37083 generateREXprefix(false, dstReg, null, srcBase); 37084 setMachineCodes(mi++, (byte) 0x0F); 37085 setMachineCodes(mi++, (byte) 0x2D); 37086 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 37087 if (lister != null) lister.RRD(miStart, "CVTSS2SI", dstReg, srcBase, srcDisp); 37088 } 37089 37090 /** 37091 * Generate a register--register-offset CVTSS2SI. That is, 37092 * <PRE> 37093 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 37094 * </PRE> 37095 * 37096 * @param dstReg destination register 37097 * @param srcIndex the source index register 37098 * @param srcScale the source scale 37099 * @param srcDisp the source displacement 37100 */ 37101 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37102 public final void emitCVTSS2SI_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 37103 int miStart = mi; 37104 setMachineCodes(mi++, (byte) 0xF3); 37105 generateREXprefix(false, dstReg, srcIndex, null); 37106 setMachineCodes(mi++, (byte) 0x0F); 37107 setMachineCodes(mi++, (byte) 0x2D); 37108 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 37109 if (lister != null) lister.RRFD(miStart, "CVTSS2SI", dstReg, srcIndex, srcScale, srcDisp); 37110 } 37111 37112 /** 37113 * Generate a register--absolute CVTSS2SI. That is, 37114 * <PRE> 37115 * dstReg <<= (quad) [srcDisp] 37116 * </PRE> 37117 * 37118 * @param dstReg destination register 37119 * @param srcDisp the source displacement 37120 */ 37121 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 37122 public final void emitCVTSS2SI_Reg_Abs(GPR dstReg, Address srcDisp) { 37123 int miStart = mi; 37124 setMachineCodes(mi++, (byte) 0xF3); 37125 generateREXprefix(false, dstReg, null, null); 37126 setMachineCodes(mi++, (byte) 0x0F); 37127 setMachineCodes(mi++, (byte) 0x2D); 37128 emitAbsRegOperands(srcDisp, dstReg); 37129 if (lister != null) lister.RRA(miStart, "CVTSS2SI", dstReg, srcDisp); 37130 } 37131 37132 /** 37133 * Generate a register--register-index CVTSS2SI. That is, 37134 * <PRE> 37135 * dstReg <<= (quad) srcReg 37136 * </PRE> 37137 * 37138 * @param dstReg destination register 37139 * @param srcBase the source base register 37140 * @param srcIndex the source index register 37141 * @param srcScale the source scale 37142 * @param srcDisp the source displacement 37143 */ 37144 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 37145 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 37146 public final void emitCVTSS2SI_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 37147 int miStart = mi; 37148 setMachineCodes(mi++, (byte) 0xF3); 37149 generateREXprefix(false, dstReg, srcIndex, srcBase); 37150 setMachineCodes(mi++, (byte) 0x0F); 37151 setMachineCodes(mi++, (byte) 0x2D); 37152 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 37153 if (lister != null) lister.RRXD(miStart, "CVTSS2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp); 37154 } 37155 37156 /** 37157 * Generate a register--register-indirect CVTSS2SI. That is, 37158 * <PRE> 37159 * dstReg <<= (quad) [srcBase] 37160 * </PRE> 37161 * 37162 * @param dstReg destination register 37163 * @param srcBase the source base register 37164 */ 37165 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37166 public final void emitCVTSS2SI_Reg_RegInd(GPR dstReg, GPR srcBase) { 37167 int miStart = mi; 37168 setMachineCodes(mi++, (byte) 0xF3); 37169 generateREXprefix(false, dstReg, null, srcBase); 37170 setMachineCodes(mi++, (byte) 0x0F); 37171 setMachineCodes(mi++, (byte) 0x2D); 37172 emitRegIndirectRegOperands(srcBase, dstReg); 37173 if (lister != null) lister.RRN(miStart, "CVTSS2SI", dstReg, srcBase); 37174 } 37175 37176 37177 /** 37178 * Generate a register--register CVTSS2SI. That is, 37179 * <PRE> 37180 * dstReg <<= (quad) srcReg 37181 * </PRE> 37182 * 37183 * @param dstReg destination register 37184 * @param srcReg source register 37185 */ 37186 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37187 public final void emitCVTSS2SI_Reg_Reg_Quad(GPR dstReg, XMM srcReg) { 37188 int miStart = mi; 37189 setMachineCodes(mi++, (byte) 0xF3); 37190 generateREXprefix(true, dstReg, null, srcReg); 37191 setMachineCodes(mi++, (byte) 0x0F); 37192 setMachineCodes(mi++, (byte) 0x2D); 37193 emitRegRegOperands(srcReg, dstReg); 37194 if (lister != null) lister.RR(miStart, "CVTSS2SI", dstReg, srcReg); 37195 } 37196 37197 /** 37198 * Generate a register--register-displacement CVTSS2SI. That is, 37199 * <PRE> 37200 * dstReg <<= (quad) [srcBase + srcDisp] 37201 * </PRE> 37202 * 37203 * @param dstReg destination register 37204 * @param srcBase the source base register 37205 * @param srcDisp the source displacement 37206 */ 37207 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37208 public final void emitCVTSS2SI_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 37209 int miStart = mi; 37210 setMachineCodes(mi++, (byte) 0xF3); 37211 generateREXprefix(true, dstReg, null, srcBase); 37212 setMachineCodes(mi++, (byte) 0x0F); 37213 setMachineCodes(mi++, (byte) 0x2D); 37214 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 37215 if (lister != null) lister.RRD(miStart, "CVTSS2SI", dstReg, srcBase, srcDisp); 37216 } 37217 37218 /** 37219 * Generate a register--register-offset CVTSS2SI. That is, 37220 * <PRE> 37221 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 37222 * </PRE> 37223 * 37224 * @param dstReg destination register 37225 * @param srcIndex the source index register 37226 * @param srcScale the source scale 37227 * @param srcDisp the source displacement 37228 */ 37229 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37230 public final void emitCVTSS2SI_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 37231 int miStart = mi; 37232 setMachineCodes(mi++, (byte) 0xF3); 37233 generateREXprefix(true, dstReg, srcIndex, null); 37234 setMachineCodes(mi++, (byte) 0x0F); 37235 setMachineCodes(mi++, (byte) 0x2D); 37236 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 37237 if (lister != null) lister.RRFD(miStart, "CVTSS2SI", dstReg, srcIndex, srcScale, srcDisp); 37238 } 37239 37240 /** 37241 * Generate a register--absolute CVTSS2SI. That is, 37242 * <PRE> 37243 * dstReg <<= (quad) [srcDisp] 37244 * </PRE> 37245 * 37246 * @param dstReg destination register 37247 * @param srcDisp the source displacement 37248 */ 37249 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 37250 public final void emitCVTSS2SI_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 37251 int miStart = mi; 37252 setMachineCodes(mi++, (byte) 0xF3); 37253 generateREXprefix(true, dstReg, null, null); 37254 setMachineCodes(mi++, (byte) 0x0F); 37255 setMachineCodes(mi++, (byte) 0x2D); 37256 emitAbsRegOperands(srcDisp, dstReg); 37257 if (lister != null) lister.RRA(miStart, "CVTSS2SI", dstReg, srcDisp); 37258 } 37259 37260 /** 37261 * Generate a register--register-index CVTSS2SI. That is, 37262 * <PRE> 37263 * dstReg <<= (quad) srcReg 37264 * </PRE> 37265 * 37266 * @param dstReg destination register 37267 * @param srcBase the source base register 37268 * @param srcIndex the source index register 37269 * @param srcScale the source scale 37270 * @param srcDisp the source displacement 37271 */ 37272 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 37273 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 37274 public final void emitCVTSS2SI_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 37275 int miStart = mi; 37276 setMachineCodes(mi++, (byte) 0xF3); 37277 generateREXprefix(true, dstReg, srcIndex, srcBase); 37278 setMachineCodes(mi++, (byte) 0x0F); 37279 setMachineCodes(mi++, (byte) 0x2D); 37280 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 37281 if (lister != null) lister.RRXD(miStart, "CVTSS2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp); 37282 } 37283 37284 /** 37285 * Generate a register--register-indirect CVTSS2SI. That is, 37286 * <PRE> 37287 * dstReg <<= (quad) [srcBase] 37288 * </PRE> 37289 * 37290 * @param dstReg destination register 37291 * @param srcBase the source base register 37292 */ 37293 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37294 public final void emitCVTSS2SI_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 37295 int miStart = mi; 37296 setMachineCodes(mi++, (byte) 0xF3); 37297 generateREXprefix(true, dstReg, null, srcBase); 37298 setMachineCodes(mi++, (byte) 0x0F); 37299 setMachineCodes(mi++, (byte) 0x2D); 37300 emitRegIndirectRegOperands(srcBase, dstReg); 37301 if (lister != null) lister.RRN(miStart, "CVTSS2SI", dstReg, srcBase); 37302 } 37303 37304 37305 /** 37306 * Generate a register--register CVTTSS2SI. That is, 37307 * <PRE> 37308 * dstReg <<= (quad) srcReg 37309 * </PRE> 37310 * 37311 * @param dstReg destination register 37312 * @param srcReg source register 37313 */ 37314 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37315 public final void emitCVTTSS2SI_Reg_Reg(GPR dstReg, XMM srcReg) { 37316 int miStart = mi; 37317 setMachineCodes(mi++, (byte) 0xF3); 37318 generateREXprefix(false, dstReg, null, srcReg); 37319 setMachineCodes(mi++, (byte) 0x0F); 37320 setMachineCodes(mi++, (byte) 0x2C); 37321 emitRegRegOperands(srcReg, dstReg); 37322 if (lister != null) lister.RR(miStart, "CVTTSS2SI", dstReg, srcReg); 37323 } 37324 37325 /** 37326 * Generate a register--register-displacement CVTTSS2SI. That is, 37327 * <PRE> 37328 * dstReg <<= (quad) [srcBase + srcDisp] 37329 * </PRE> 37330 * 37331 * @param dstReg destination register 37332 * @param srcBase the source base register 37333 * @param srcDisp the source displacement 37334 */ 37335 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37336 public final void emitCVTTSS2SI_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 37337 int miStart = mi; 37338 setMachineCodes(mi++, (byte) 0xF3); 37339 generateREXprefix(false, dstReg, null, srcBase); 37340 setMachineCodes(mi++, (byte) 0x0F); 37341 setMachineCodes(mi++, (byte) 0x2C); 37342 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 37343 if (lister != null) lister.RRD(miStart, "CVTTSS2SI", dstReg, srcBase, srcDisp); 37344 } 37345 37346 /** 37347 * Generate a register--register-offset CVTTSS2SI. That is, 37348 * <PRE> 37349 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 37350 * </PRE> 37351 * 37352 * @param dstReg destination register 37353 * @param srcIndex the source index register 37354 * @param srcScale the source scale 37355 * @param srcDisp the source displacement 37356 */ 37357 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37358 public final void emitCVTTSS2SI_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 37359 int miStart = mi; 37360 setMachineCodes(mi++, (byte) 0xF3); 37361 generateREXprefix(false, dstReg, srcIndex, null); 37362 setMachineCodes(mi++, (byte) 0x0F); 37363 setMachineCodes(mi++, (byte) 0x2C); 37364 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 37365 if (lister != null) lister.RRFD(miStart, "CVTTSS2SI", dstReg, srcIndex, srcScale, srcDisp); 37366 } 37367 37368 /** 37369 * Generate a register--absolute CVTTSS2SI. That is, 37370 * <PRE> 37371 * dstReg <<= (quad) [srcDisp] 37372 * </PRE> 37373 * 37374 * @param dstReg destination register 37375 * @param srcDisp the source displacement 37376 */ 37377 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 37378 public final void emitCVTTSS2SI_Reg_Abs(GPR dstReg, Address srcDisp) { 37379 int miStart = mi; 37380 setMachineCodes(mi++, (byte) 0xF3); 37381 generateREXprefix(false, dstReg, null, null); 37382 setMachineCodes(mi++, (byte) 0x0F); 37383 setMachineCodes(mi++, (byte) 0x2C); 37384 emitAbsRegOperands(srcDisp, dstReg); 37385 if (lister != null) lister.RRA(miStart, "CVTTSS2SI", dstReg, srcDisp); 37386 } 37387 37388 /** 37389 * Generate a register--register-index CVTTSS2SI. That is, 37390 * <PRE> 37391 * dstReg <<= (quad) srcReg 37392 * </PRE> 37393 * 37394 * @param dstReg destination register 37395 * @param srcBase the source base register 37396 * @param srcIndex the source index register 37397 * @param srcScale the source scale 37398 * @param srcDisp the source displacement 37399 */ 37400 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 37401 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 37402 public final void emitCVTTSS2SI_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 37403 int miStart = mi; 37404 setMachineCodes(mi++, (byte) 0xF3); 37405 generateREXprefix(false, dstReg, srcIndex, srcBase); 37406 setMachineCodes(mi++, (byte) 0x0F); 37407 setMachineCodes(mi++, (byte) 0x2C); 37408 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 37409 if (lister != null) lister.RRXD(miStart, "CVTTSS2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp); 37410 } 37411 37412 /** 37413 * Generate a register--register-indirect CVTTSS2SI. That is, 37414 * <PRE> 37415 * dstReg <<= (quad) [srcBase] 37416 * </PRE> 37417 * 37418 * @param dstReg destination register 37419 * @param srcBase the source base register 37420 */ 37421 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37422 public final void emitCVTTSS2SI_Reg_RegInd(GPR dstReg, GPR srcBase) { 37423 int miStart = mi; 37424 setMachineCodes(mi++, (byte) 0xF3); 37425 generateREXprefix(false, dstReg, null, srcBase); 37426 setMachineCodes(mi++, (byte) 0x0F); 37427 setMachineCodes(mi++, (byte) 0x2C); 37428 emitRegIndirectRegOperands(srcBase, dstReg); 37429 if (lister != null) lister.RRN(miStart, "CVTTSS2SI", dstReg, srcBase); 37430 } 37431 37432 37433 /** 37434 * Generate a register--register CVTTSS2SI. That is, 37435 * <PRE> 37436 * dstReg <<= (quad) srcReg 37437 * </PRE> 37438 * 37439 * @param dstReg destination register 37440 * @param srcReg source register 37441 */ 37442 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37443 public final void emitCVTTSS2SI_Reg_Reg_Quad(GPR dstReg, XMM srcReg) { 37444 int miStart = mi; 37445 setMachineCodes(mi++, (byte) 0xF3); 37446 generateREXprefix(true, dstReg, null, srcReg); 37447 setMachineCodes(mi++, (byte) 0x0F); 37448 setMachineCodes(mi++, (byte) 0x2C); 37449 emitRegRegOperands(srcReg, dstReg); 37450 if (lister != null) lister.RR(miStart, "CVTTSS2SI", dstReg, srcReg); 37451 } 37452 37453 /** 37454 * Generate a register--register-displacement CVTTSS2SI. That is, 37455 * <PRE> 37456 * dstReg <<= (quad) [srcBase + srcDisp] 37457 * </PRE> 37458 * 37459 * @param dstReg destination register 37460 * @param srcBase the source base register 37461 * @param srcDisp the source displacement 37462 */ 37463 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37464 public final void emitCVTTSS2SI_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 37465 int miStart = mi; 37466 setMachineCodes(mi++, (byte) 0xF3); 37467 generateREXprefix(true, dstReg, null, srcBase); 37468 setMachineCodes(mi++, (byte) 0x0F); 37469 setMachineCodes(mi++, (byte) 0x2C); 37470 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 37471 if (lister != null) lister.RRD(miStart, "CVTTSS2SI", dstReg, srcBase, srcDisp); 37472 } 37473 37474 /** 37475 * Generate a register--register-offset CVTTSS2SI. That is, 37476 * <PRE> 37477 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 37478 * </PRE> 37479 * 37480 * @param dstReg destination register 37481 * @param srcIndex the source index register 37482 * @param srcScale the source scale 37483 * @param srcDisp the source displacement 37484 */ 37485 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37486 public final void emitCVTTSS2SI_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 37487 int miStart = mi; 37488 setMachineCodes(mi++, (byte) 0xF3); 37489 generateREXprefix(true, dstReg, srcIndex, null); 37490 setMachineCodes(mi++, (byte) 0x0F); 37491 setMachineCodes(mi++, (byte) 0x2C); 37492 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 37493 if (lister != null) lister.RRFD(miStart, "CVTTSS2SI", dstReg, srcIndex, srcScale, srcDisp); 37494 } 37495 37496 /** 37497 * Generate a register--absolute CVTTSS2SI. That is, 37498 * <PRE> 37499 * dstReg <<= (quad) [srcDisp] 37500 * </PRE> 37501 * 37502 * @param dstReg destination register 37503 * @param srcDisp the source displacement 37504 */ 37505 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 37506 public final void emitCVTTSS2SI_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 37507 int miStart = mi; 37508 setMachineCodes(mi++, (byte) 0xF3); 37509 generateREXprefix(true, dstReg, null, null); 37510 setMachineCodes(mi++, (byte) 0x0F); 37511 setMachineCodes(mi++, (byte) 0x2C); 37512 emitAbsRegOperands(srcDisp, dstReg); 37513 if (lister != null) lister.RRA(miStart, "CVTTSS2SI", dstReg, srcDisp); 37514 } 37515 37516 /** 37517 * Generate a register--register-index CVTTSS2SI. That is, 37518 * <PRE> 37519 * dstReg <<= (quad) srcReg 37520 * </PRE> 37521 * 37522 * @param dstReg destination register 37523 * @param srcBase the source base register 37524 * @param srcIndex the source index register 37525 * @param srcScale the source scale 37526 * @param srcDisp the source displacement 37527 */ 37528 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 37529 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 37530 public final void emitCVTTSS2SI_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 37531 int miStart = mi; 37532 setMachineCodes(mi++, (byte) 0xF3); 37533 generateREXprefix(true, dstReg, srcIndex, srcBase); 37534 setMachineCodes(mi++, (byte) 0x0F); 37535 setMachineCodes(mi++, (byte) 0x2C); 37536 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 37537 if (lister != null) lister.RRXD(miStart, "CVTTSS2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp); 37538 } 37539 37540 /** 37541 * Generate a register--register-indirect CVTTSS2SI. That is, 37542 * <PRE> 37543 * dstReg <<= (quad) [srcBase] 37544 * </PRE> 37545 * 37546 * @param dstReg destination register 37547 * @param srcBase the source base register 37548 */ 37549 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37550 public final void emitCVTTSS2SI_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 37551 int miStart = mi; 37552 setMachineCodes(mi++, (byte) 0xF3); 37553 generateREXprefix(true, dstReg, null, srcBase); 37554 setMachineCodes(mi++, (byte) 0x0F); 37555 setMachineCodes(mi++, (byte) 0x2C); 37556 emitRegIndirectRegOperands(srcBase, dstReg); 37557 if (lister != null) lister.RRN(miStart, "CVTTSS2SI", dstReg, srcBase); 37558 } 37559 37560 37561 /** 37562 * Generate a register--register UCOMISS. That is, 37563 * <PRE> 37564 * dstReg <<= (quad) srcReg 37565 * </PRE> 37566 * 37567 * @param dstReg destination register 37568 * @param srcReg source register 37569 */ 37570 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37571 public final void emitUCOMISS_Reg_Reg(XMM dstReg, XMM srcReg) { 37572 int miStart = mi; 37573 generateREXprefix(false, dstReg, null, srcReg); 37574 setMachineCodes(mi++, (byte) 0x0F); 37575 setMachineCodes(mi++, (byte) 0x2E); 37576 emitRegRegOperands(srcReg, dstReg); 37577 if (lister != null) lister.RR(miStart, "UCOMISS", dstReg, srcReg); 37578 } 37579 37580 /** 37581 * Generate a register--register-displacement UCOMISS. That is, 37582 * <PRE> 37583 * dstReg <<= (quad) [srcBase + srcDisp] 37584 * </PRE> 37585 * 37586 * @param dstReg destination register 37587 * @param srcBase the source base register 37588 * @param srcDisp the source displacement 37589 */ 37590 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37591 public final void emitUCOMISS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 37592 int miStart = mi; 37593 generateREXprefix(false, dstReg, null, srcBase); 37594 setMachineCodes(mi++, (byte) 0x0F); 37595 setMachineCodes(mi++, (byte) 0x2E); 37596 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 37597 if (lister != null) lister.RRD(miStart, "UCOMISS", dstReg, srcBase, srcDisp); 37598 } 37599 37600 /** 37601 * Generate a register--register-offset UCOMISS. That is, 37602 * <PRE> 37603 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 37604 * </PRE> 37605 * 37606 * @param dstReg destination register 37607 * @param srcIndex the source index register 37608 * @param srcScale the source scale 37609 * @param srcDisp the source displacement 37610 */ 37611 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37612 public final void emitUCOMISS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 37613 int miStart = mi; 37614 generateREXprefix(false, dstReg, srcIndex, null); 37615 setMachineCodes(mi++, (byte) 0x0F); 37616 setMachineCodes(mi++, (byte) 0x2E); 37617 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 37618 if (lister != null) lister.RRFD(miStart, "UCOMISS", dstReg, srcIndex, srcScale, srcDisp); 37619 } 37620 37621 /** 37622 * Generate a register--absolute UCOMISS. That is, 37623 * <PRE> 37624 * dstReg <<= (quad) [srcDisp] 37625 * </PRE> 37626 * 37627 * @param dstReg destination register 37628 * @param srcDisp the source displacement 37629 */ 37630 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 37631 public final void emitUCOMISS_Reg_Abs(XMM dstReg, Address srcDisp) { 37632 int miStart = mi; 37633 generateREXprefix(false, dstReg, null, null); 37634 setMachineCodes(mi++, (byte) 0x0F); 37635 setMachineCodes(mi++, (byte) 0x2E); 37636 emitAbsRegOperands(srcDisp, dstReg); 37637 if (lister != null) lister.RRA(miStart, "UCOMISS", dstReg, srcDisp); 37638 } 37639 37640 /** 37641 * Generate a register--register-index UCOMISS. That is, 37642 * <PRE> 37643 * dstReg <<= (quad) srcReg 37644 * </PRE> 37645 * 37646 * @param dstReg destination register 37647 * @param srcBase the source base register 37648 * @param srcIndex the source index register 37649 * @param srcScale the source scale 37650 * @param srcDisp the source displacement 37651 */ 37652 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 37653 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 37654 public final void emitUCOMISS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 37655 int miStart = mi; 37656 generateREXprefix(false, dstReg, srcIndex, srcBase); 37657 setMachineCodes(mi++, (byte) 0x0F); 37658 setMachineCodes(mi++, (byte) 0x2E); 37659 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 37660 if (lister != null) lister.RRXD(miStart, "UCOMISS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 37661 } 37662 37663 /** 37664 * Generate a register--register-indirect UCOMISS. That is, 37665 * <PRE> 37666 * dstReg <<= (quad) [srcBase] 37667 * </PRE> 37668 * 37669 * @param dstReg destination register 37670 * @param srcBase the source base register 37671 */ 37672 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37673 public final void emitUCOMISS_Reg_RegInd(XMM dstReg, GPR srcBase) { 37674 int miStart = mi; 37675 generateREXprefix(false, dstReg, null, srcBase); 37676 setMachineCodes(mi++, (byte) 0x0F); 37677 setMachineCodes(mi++, (byte) 0x2E); 37678 emitRegIndirectRegOperands(srcBase, dstReg); 37679 if (lister != null) lister.RRN(miStart, "UCOMISS", dstReg, srcBase); 37680 } 37681 37682 37683 /** 37684 * Generate a register--register CMPEQSS. That is, 37685 * <PRE> 37686 * dstReg <<= (quad) srcReg 37687 * </PRE> 37688 * 37689 * @param dstReg destination register 37690 * @param srcReg source register 37691 */ 37692 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37693 public final void emitCMPEQSS_Reg_Reg(XMM dstReg, XMM srcReg) { 37694 int miStart = mi; 37695 setMachineCodes(mi++, (byte) 0xF3); 37696 generateREXprefix(false, dstReg, null, srcReg); 37697 setMachineCodes(mi++, (byte) 0x0F); 37698 setMachineCodes(mi++, (byte) 0xC2); 37699 emitRegRegOperands(srcReg, dstReg); 37700 setMachineCodes(mi++, (byte) 0); 37701 if (lister != null) lister.RR(miStart, "CMPEQSS", dstReg, srcReg); 37702 } 37703 37704 /** 37705 * Generate a register--register-displacement CMPEQSS. That is, 37706 * <PRE> 37707 * dstReg <<= (quad) [srcBase + srcDisp] 37708 * </PRE> 37709 * 37710 * @param dstReg destination register 37711 * @param srcBase the source base register 37712 * @param srcDisp the source displacement 37713 */ 37714 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37715 public final void emitCMPEQSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 37716 int miStart = mi; 37717 setMachineCodes(mi++, (byte) 0xF3); 37718 generateREXprefix(false, dstReg, null, srcBase); 37719 setMachineCodes(mi++, (byte) 0x0F); 37720 setMachineCodes(mi++, (byte) 0xC2); 37721 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 37722 setMachineCodes(mi++, (byte) 0); 37723 if (lister != null) lister.RRD(miStart, "CMPEQSS", dstReg, srcBase, srcDisp); 37724 } 37725 37726 /** 37727 * Generate a register--register-offset CMPEQSS. That is, 37728 * <PRE> 37729 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 37730 * </PRE> 37731 * 37732 * @param dstReg destination register 37733 * @param srcIndex the source index register 37734 * @param srcScale the source scale 37735 * @param srcDisp the source displacement 37736 */ 37737 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37738 public final void emitCMPEQSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 37739 int miStart = mi; 37740 setMachineCodes(mi++, (byte) 0xF3); 37741 generateREXprefix(false, dstReg, srcIndex, null); 37742 setMachineCodes(mi++, (byte) 0x0F); 37743 setMachineCodes(mi++, (byte) 0xC2); 37744 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 37745 setMachineCodes(mi++, (byte) 0); 37746 if (lister != null) lister.RRFD(miStart, "CMPEQSS", dstReg, srcIndex, srcScale, srcDisp); 37747 } 37748 37749 /** 37750 * Generate a register--absolute CMPEQSS. That is, 37751 * <PRE> 37752 * dstReg <<= (quad) [srcDisp] 37753 * </PRE> 37754 * 37755 * @param dstReg destination register 37756 * @param srcDisp the source displacement 37757 */ 37758 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 37759 public final void emitCMPEQSS_Reg_Abs(XMM dstReg, Address srcDisp) { 37760 int miStart = mi; 37761 setMachineCodes(mi++, (byte) 0xF3); 37762 generateREXprefix(false, dstReg, null, null); 37763 setMachineCodes(mi++, (byte) 0x0F); 37764 setMachineCodes(mi++, (byte) 0xC2); 37765 emitAbsRegOperands(srcDisp, dstReg); 37766 setMachineCodes(mi++, (byte) 0); 37767 if (lister != null) lister.RRA(miStart, "CMPEQSS", dstReg, srcDisp); 37768 } 37769 37770 /** 37771 * Generate a register--register-index CMPEQSS. That is, 37772 * <PRE> 37773 * dstReg <<= (quad) srcReg 37774 * </PRE> 37775 * 37776 * @param dstReg destination register 37777 * @param srcBase the source base register 37778 * @param srcIndex the source index register 37779 * @param srcScale the source scale 37780 * @param srcDisp the source displacement 37781 */ 37782 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 37783 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 37784 public final void emitCMPEQSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 37785 int miStart = mi; 37786 setMachineCodes(mi++, (byte) 0xF3); 37787 generateREXprefix(false, dstReg, srcIndex, srcBase); 37788 setMachineCodes(mi++, (byte) 0x0F); 37789 setMachineCodes(mi++, (byte) 0xC2); 37790 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 37791 setMachineCodes(mi++, (byte) 0); 37792 if (lister != null) lister.RRXD(miStart, "CMPEQSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 37793 } 37794 37795 /** 37796 * Generate a register--register-indirect CMPEQSS. That is, 37797 * <PRE> 37798 * dstReg <<= (quad) [srcBase] 37799 * </PRE> 37800 * 37801 * @param dstReg destination register 37802 * @param srcBase the source base register 37803 */ 37804 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37805 public final void emitCMPEQSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 37806 int miStart = mi; 37807 setMachineCodes(mi++, (byte) 0xF3); 37808 generateREXprefix(false, dstReg, null, srcBase); 37809 setMachineCodes(mi++, (byte) 0x0F); 37810 setMachineCodes(mi++, (byte) 0xC2); 37811 emitRegIndirectRegOperands(srcBase, dstReg); 37812 setMachineCodes(mi++, (byte) 0); 37813 if (lister != null) lister.RRN(miStart, "CMPEQSS", dstReg, srcBase); 37814 } 37815 37816 37817 /** 37818 * Generate a register--register CMPLTSS. That is, 37819 * <PRE> 37820 * dstReg <<= (quad) srcReg 37821 * </PRE> 37822 * 37823 * @param dstReg destination register 37824 * @param srcReg source register 37825 */ 37826 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37827 public final void emitCMPLTSS_Reg_Reg(XMM dstReg, XMM srcReg) { 37828 int miStart = mi; 37829 setMachineCodes(mi++, (byte) 0xF3); 37830 generateREXprefix(false, dstReg, null, srcReg); 37831 setMachineCodes(mi++, (byte) 0x0F); 37832 setMachineCodes(mi++, (byte) 0xC2); 37833 emitRegRegOperands(srcReg, dstReg); 37834 setMachineCodes(mi++, (byte) 1); 37835 if (lister != null) lister.RR(miStart, "CMPLTSS", dstReg, srcReg); 37836 } 37837 37838 /** 37839 * Generate a register--register-displacement CMPLTSS. That is, 37840 * <PRE> 37841 * dstReg <<= (quad) [srcBase + srcDisp] 37842 * </PRE> 37843 * 37844 * @param dstReg destination register 37845 * @param srcBase the source base register 37846 * @param srcDisp the source displacement 37847 */ 37848 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37849 public final void emitCMPLTSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 37850 int miStart = mi; 37851 setMachineCodes(mi++, (byte) 0xF3); 37852 generateREXprefix(false, dstReg, null, srcBase); 37853 setMachineCodes(mi++, (byte) 0x0F); 37854 setMachineCodes(mi++, (byte) 0xC2); 37855 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 37856 setMachineCodes(mi++, (byte) 1); 37857 if (lister != null) lister.RRD(miStart, "CMPLTSS", dstReg, srcBase, srcDisp); 37858 } 37859 37860 /** 37861 * Generate a register--register-offset CMPLTSS. That is, 37862 * <PRE> 37863 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 37864 * </PRE> 37865 * 37866 * @param dstReg destination register 37867 * @param srcIndex the source index register 37868 * @param srcScale the source scale 37869 * @param srcDisp the source displacement 37870 */ 37871 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37872 public final void emitCMPLTSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 37873 int miStart = mi; 37874 setMachineCodes(mi++, (byte) 0xF3); 37875 generateREXprefix(false, dstReg, srcIndex, null); 37876 setMachineCodes(mi++, (byte) 0x0F); 37877 setMachineCodes(mi++, (byte) 0xC2); 37878 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 37879 setMachineCodes(mi++, (byte) 1); 37880 if (lister != null) lister.RRFD(miStart, "CMPLTSS", dstReg, srcIndex, srcScale, srcDisp); 37881 } 37882 37883 /** 37884 * Generate a register--absolute CMPLTSS. That is, 37885 * <PRE> 37886 * dstReg <<= (quad) [srcDisp] 37887 * </PRE> 37888 * 37889 * @param dstReg destination register 37890 * @param srcDisp the source displacement 37891 */ 37892 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 37893 public final void emitCMPLTSS_Reg_Abs(XMM dstReg, Address srcDisp) { 37894 int miStart = mi; 37895 setMachineCodes(mi++, (byte) 0xF3); 37896 generateREXprefix(false, dstReg, null, null); 37897 setMachineCodes(mi++, (byte) 0x0F); 37898 setMachineCodes(mi++, (byte) 0xC2); 37899 emitAbsRegOperands(srcDisp, dstReg); 37900 setMachineCodes(mi++, (byte) 1); 37901 if (lister != null) lister.RRA(miStart, "CMPLTSS", dstReg, srcDisp); 37902 } 37903 37904 /** 37905 * Generate a register--register-index CMPLTSS. That is, 37906 * <PRE> 37907 * dstReg <<= (quad) srcReg 37908 * </PRE> 37909 * 37910 * @param dstReg destination register 37911 * @param srcBase the source base register 37912 * @param srcIndex the source index register 37913 * @param srcScale the source scale 37914 * @param srcDisp the source displacement 37915 */ 37916 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 37917 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 37918 public final void emitCMPLTSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 37919 int miStart = mi; 37920 setMachineCodes(mi++, (byte) 0xF3); 37921 generateREXprefix(false, dstReg, srcIndex, srcBase); 37922 setMachineCodes(mi++, (byte) 0x0F); 37923 setMachineCodes(mi++, (byte) 0xC2); 37924 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 37925 setMachineCodes(mi++, (byte) 1); 37926 if (lister != null) lister.RRXD(miStart, "CMPLTSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 37927 } 37928 37929 /** 37930 * Generate a register--register-indirect CMPLTSS. That is, 37931 * <PRE> 37932 * dstReg <<= (quad) [srcBase] 37933 * </PRE> 37934 * 37935 * @param dstReg destination register 37936 * @param srcBase the source base register 37937 */ 37938 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37939 public final void emitCMPLTSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 37940 int miStart = mi; 37941 setMachineCodes(mi++, (byte) 0xF3); 37942 generateREXprefix(false, dstReg, null, srcBase); 37943 setMachineCodes(mi++, (byte) 0x0F); 37944 setMachineCodes(mi++, (byte) 0xC2); 37945 emitRegIndirectRegOperands(srcBase, dstReg); 37946 setMachineCodes(mi++, (byte) 1); 37947 if (lister != null) lister.RRN(miStart, "CMPLTSS", dstReg, srcBase); 37948 } 37949 37950 37951 /** 37952 * Generate a register--register CMPLESS. That is, 37953 * <PRE> 37954 * dstReg <<= (quad) srcReg 37955 * </PRE> 37956 * 37957 * @param dstReg destination register 37958 * @param srcReg source register 37959 */ 37960 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37961 public final void emitCMPLESS_Reg_Reg(XMM dstReg, XMM srcReg) { 37962 int miStart = mi; 37963 setMachineCodes(mi++, (byte) 0xF3); 37964 generateREXprefix(false, dstReg, null, srcReg); 37965 setMachineCodes(mi++, (byte) 0x0F); 37966 setMachineCodes(mi++, (byte) 0xC2); 37967 emitRegRegOperands(srcReg, dstReg); 37968 setMachineCodes(mi++, (byte) 2); 37969 if (lister != null) lister.RR(miStart, "CMPLESS", dstReg, srcReg); 37970 } 37971 37972 /** 37973 * Generate a register--register-displacement CMPLESS. That is, 37974 * <PRE> 37975 * dstReg <<= (quad) [srcBase + srcDisp] 37976 * </PRE> 37977 * 37978 * @param dstReg destination register 37979 * @param srcBase the source base register 37980 * @param srcDisp the source displacement 37981 */ 37982 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 37983 public final void emitCMPLESS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 37984 int miStart = mi; 37985 setMachineCodes(mi++, (byte) 0xF3); 37986 generateREXprefix(false, dstReg, null, srcBase); 37987 setMachineCodes(mi++, (byte) 0x0F); 37988 setMachineCodes(mi++, (byte) 0xC2); 37989 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 37990 setMachineCodes(mi++, (byte) 2); 37991 if (lister != null) lister.RRD(miStart, "CMPLESS", dstReg, srcBase, srcDisp); 37992 } 37993 37994 /** 37995 * Generate a register--register-offset CMPLESS. That is, 37996 * <PRE> 37997 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 37998 * </PRE> 37999 * 38000 * @param dstReg destination register 38001 * @param srcIndex the source index register 38002 * @param srcScale the source scale 38003 * @param srcDisp the source displacement 38004 */ 38005 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38006 public final void emitCMPLESS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 38007 int miStart = mi; 38008 setMachineCodes(mi++, (byte) 0xF3); 38009 generateREXprefix(false, dstReg, srcIndex, null); 38010 setMachineCodes(mi++, (byte) 0x0F); 38011 setMachineCodes(mi++, (byte) 0xC2); 38012 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 38013 setMachineCodes(mi++, (byte) 2); 38014 if (lister != null) lister.RRFD(miStart, "CMPLESS", dstReg, srcIndex, srcScale, srcDisp); 38015 } 38016 38017 /** 38018 * Generate a register--absolute CMPLESS. That is, 38019 * <PRE> 38020 * dstReg <<= (quad) [srcDisp] 38021 * </PRE> 38022 * 38023 * @param dstReg destination register 38024 * @param srcDisp the source displacement 38025 */ 38026 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 38027 public final void emitCMPLESS_Reg_Abs(XMM dstReg, Address srcDisp) { 38028 int miStart = mi; 38029 setMachineCodes(mi++, (byte) 0xF3); 38030 generateREXprefix(false, dstReg, null, null); 38031 setMachineCodes(mi++, (byte) 0x0F); 38032 setMachineCodes(mi++, (byte) 0xC2); 38033 emitAbsRegOperands(srcDisp, dstReg); 38034 setMachineCodes(mi++, (byte) 2); 38035 if (lister != null) lister.RRA(miStart, "CMPLESS", dstReg, srcDisp); 38036 } 38037 38038 /** 38039 * Generate a register--register-index CMPLESS. That is, 38040 * <PRE> 38041 * dstReg <<= (quad) srcReg 38042 * </PRE> 38043 * 38044 * @param dstReg destination register 38045 * @param srcBase the source base register 38046 * @param srcIndex the source index register 38047 * @param srcScale the source scale 38048 * @param srcDisp the source displacement 38049 */ 38050 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 38051 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 38052 public final void emitCMPLESS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 38053 int miStart = mi; 38054 setMachineCodes(mi++, (byte) 0xF3); 38055 generateREXprefix(false, dstReg, srcIndex, srcBase); 38056 setMachineCodes(mi++, (byte) 0x0F); 38057 setMachineCodes(mi++, (byte) 0xC2); 38058 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 38059 setMachineCodes(mi++, (byte) 2); 38060 if (lister != null) lister.RRXD(miStart, "CMPLESS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 38061 } 38062 38063 /** 38064 * Generate a register--register-indirect CMPLESS. That is, 38065 * <PRE> 38066 * dstReg <<= (quad) [srcBase] 38067 * </PRE> 38068 * 38069 * @param dstReg destination register 38070 * @param srcBase the source base register 38071 */ 38072 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38073 public final void emitCMPLESS_Reg_RegInd(XMM dstReg, GPR srcBase) { 38074 int miStart = mi; 38075 setMachineCodes(mi++, (byte) 0xF3); 38076 generateREXprefix(false, dstReg, null, srcBase); 38077 setMachineCodes(mi++, (byte) 0x0F); 38078 setMachineCodes(mi++, (byte) 0xC2); 38079 emitRegIndirectRegOperands(srcBase, dstReg); 38080 setMachineCodes(mi++, (byte) 2); 38081 if (lister != null) lister.RRN(miStart, "CMPLESS", dstReg, srcBase); 38082 } 38083 38084 38085 /** 38086 * Generate a register--register CMPUNORDSS. That is, 38087 * <PRE> 38088 * dstReg <<= (quad) srcReg 38089 * </PRE> 38090 * 38091 * @param dstReg destination register 38092 * @param srcReg source register 38093 */ 38094 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38095 public final void emitCMPUNORDSS_Reg_Reg(XMM dstReg, XMM srcReg) { 38096 int miStart = mi; 38097 setMachineCodes(mi++, (byte) 0xF3); 38098 generateREXprefix(false, dstReg, null, srcReg); 38099 setMachineCodes(mi++, (byte) 0x0F); 38100 setMachineCodes(mi++, (byte) 0xC2); 38101 emitRegRegOperands(srcReg, dstReg); 38102 setMachineCodes(mi++, (byte) 3); 38103 if (lister != null) lister.RR(miStart, "CMPUNORDSS", dstReg, srcReg); 38104 } 38105 38106 /** 38107 * Generate a register--register-displacement CMPUNORDSS. That is, 38108 * <PRE> 38109 * dstReg <<= (quad) [srcBase + srcDisp] 38110 * </PRE> 38111 * 38112 * @param dstReg destination register 38113 * @param srcBase the source base register 38114 * @param srcDisp the source displacement 38115 */ 38116 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38117 public final void emitCMPUNORDSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 38118 int miStart = mi; 38119 setMachineCodes(mi++, (byte) 0xF3); 38120 generateREXprefix(false, dstReg, null, srcBase); 38121 setMachineCodes(mi++, (byte) 0x0F); 38122 setMachineCodes(mi++, (byte) 0xC2); 38123 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 38124 setMachineCodes(mi++, (byte) 3); 38125 if (lister != null) lister.RRD(miStart, "CMPUNORDSS", dstReg, srcBase, srcDisp); 38126 } 38127 38128 /** 38129 * Generate a register--register-offset CMPUNORDSS. That is, 38130 * <PRE> 38131 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 38132 * </PRE> 38133 * 38134 * @param dstReg destination register 38135 * @param srcIndex the source index register 38136 * @param srcScale the source scale 38137 * @param srcDisp the source displacement 38138 */ 38139 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38140 public final void emitCMPUNORDSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 38141 int miStart = mi; 38142 setMachineCodes(mi++, (byte) 0xF3); 38143 generateREXprefix(false, dstReg, srcIndex, null); 38144 setMachineCodes(mi++, (byte) 0x0F); 38145 setMachineCodes(mi++, (byte) 0xC2); 38146 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 38147 setMachineCodes(mi++, (byte) 3); 38148 if (lister != null) lister.RRFD(miStart, "CMPUNORDSS", dstReg, srcIndex, srcScale, srcDisp); 38149 } 38150 38151 /** 38152 * Generate a register--absolute CMPUNORDSS. That is, 38153 * <PRE> 38154 * dstReg <<= (quad) [srcDisp] 38155 * </PRE> 38156 * 38157 * @param dstReg destination register 38158 * @param srcDisp the source displacement 38159 */ 38160 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 38161 public final void emitCMPUNORDSS_Reg_Abs(XMM dstReg, Address srcDisp) { 38162 int miStart = mi; 38163 setMachineCodes(mi++, (byte) 0xF3); 38164 generateREXprefix(false, dstReg, null, null); 38165 setMachineCodes(mi++, (byte) 0x0F); 38166 setMachineCodes(mi++, (byte) 0xC2); 38167 emitAbsRegOperands(srcDisp, dstReg); 38168 setMachineCodes(mi++, (byte) 3); 38169 if (lister != null) lister.RRA(miStart, "CMPUNORDSS", dstReg, srcDisp); 38170 } 38171 38172 /** 38173 * Generate a register--register-index CMPUNORDSS. That is, 38174 * <PRE> 38175 * dstReg <<= (quad) srcReg 38176 * </PRE> 38177 * 38178 * @param dstReg destination register 38179 * @param srcBase the source base register 38180 * @param srcIndex the source index register 38181 * @param srcScale the source scale 38182 * @param srcDisp the source displacement 38183 */ 38184 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 38185 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 38186 public final void emitCMPUNORDSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 38187 int miStart = mi; 38188 setMachineCodes(mi++, (byte) 0xF3); 38189 generateREXprefix(false, dstReg, srcIndex, srcBase); 38190 setMachineCodes(mi++, (byte) 0x0F); 38191 setMachineCodes(mi++, (byte) 0xC2); 38192 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 38193 setMachineCodes(mi++, (byte) 3); 38194 if (lister != null) lister.RRXD(miStart, "CMPUNORDSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 38195 } 38196 38197 /** 38198 * Generate a register--register-indirect CMPUNORDSS. That is, 38199 * <PRE> 38200 * dstReg <<= (quad) [srcBase] 38201 * </PRE> 38202 * 38203 * @param dstReg destination register 38204 * @param srcBase the source base register 38205 */ 38206 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38207 public final void emitCMPUNORDSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 38208 int miStart = mi; 38209 setMachineCodes(mi++, (byte) 0xF3); 38210 generateREXprefix(false, dstReg, null, srcBase); 38211 setMachineCodes(mi++, (byte) 0x0F); 38212 setMachineCodes(mi++, (byte) 0xC2); 38213 emitRegIndirectRegOperands(srcBase, dstReg); 38214 setMachineCodes(mi++, (byte) 3); 38215 if (lister != null) lister.RRN(miStart, "CMPUNORDSS", dstReg, srcBase); 38216 } 38217 38218 38219 /** 38220 * Generate a register--register CMPNESS. That is, 38221 * <PRE> 38222 * dstReg <<= (quad) srcReg 38223 * </PRE> 38224 * 38225 * @param dstReg destination register 38226 * @param srcReg source register 38227 */ 38228 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38229 public final void emitCMPNESS_Reg_Reg(XMM dstReg, XMM srcReg) { 38230 int miStart = mi; 38231 setMachineCodes(mi++, (byte) 0xF3); 38232 generateREXprefix(false, dstReg, null, srcReg); 38233 setMachineCodes(mi++, (byte) 0x0F); 38234 setMachineCodes(mi++, (byte) 0xC2); 38235 emitRegRegOperands(srcReg, dstReg); 38236 setMachineCodes(mi++, (byte) 4); 38237 if (lister != null) lister.RR(miStart, "CMPNESS", dstReg, srcReg); 38238 } 38239 38240 /** 38241 * Generate a register--register-displacement CMPNESS. That is, 38242 * <PRE> 38243 * dstReg <<= (quad) [srcBase + srcDisp] 38244 * </PRE> 38245 * 38246 * @param dstReg destination register 38247 * @param srcBase the source base register 38248 * @param srcDisp the source displacement 38249 */ 38250 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38251 public final void emitCMPNESS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 38252 int miStart = mi; 38253 setMachineCodes(mi++, (byte) 0xF3); 38254 generateREXprefix(false, dstReg, null, srcBase); 38255 setMachineCodes(mi++, (byte) 0x0F); 38256 setMachineCodes(mi++, (byte) 0xC2); 38257 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 38258 setMachineCodes(mi++, (byte) 4); 38259 if (lister != null) lister.RRD(miStart, "CMPNESS", dstReg, srcBase, srcDisp); 38260 } 38261 38262 /** 38263 * Generate a register--register-offset CMPNESS. That is, 38264 * <PRE> 38265 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 38266 * </PRE> 38267 * 38268 * @param dstReg destination register 38269 * @param srcIndex the source index register 38270 * @param srcScale the source scale 38271 * @param srcDisp the source displacement 38272 */ 38273 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38274 public final void emitCMPNESS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 38275 int miStart = mi; 38276 setMachineCodes(mi++, (byte) 0xF3); 38277 generateREXprefix(false, dstReg, srcIndex, null); 38278 setMachineCodes(mi++, (byte) 0x0F); 38279 setMachineCodes(mi++, (byte) 0xC2); 38280 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 38281 setMachineCodes(mi++, (byte) 4); 38282 if (lister != null) lister.RRFD(miStart, "CMPNESS", dstReg, srcIndex, srcScale, srcDisp); 38283 } 38284 38285 /** 38286 * Generate a register--absolute CMPNESS. That is, 38287 * <PRE> 38288 * dstReg <<= (quad) [srcDisp] 38289 * </PRE> 38290 * 38291 * @param dstReg destination register 38292 * @param srcDisp the source displacement 38293 */ 38294 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 38295 public final void emitCMPNESS_Reg_Abs(XMM dstReg, Address srcDisp) { 38296 int miStart = mi; 38297 setMachineCodes(mi++, (byte) 0xF3); 38298 generateREXprefix(false, dstReg, null, null); 38299 setMachineCodes(mi++, (byte) 0x0F); 38300 setMachineCodes(mi++, (byte) 0xC2); 38301 emitAbsRegOperands(srcDisp, dstReg); 38302 setMachineCodes(mi++, (byte) 4); 38303 if (lister != null) lister.RRA(miStart, "CMPNESS", dstReg, srcDisp); 38304 } 38305 38306 /** 38307 * Generate a register--register-index CMPNESS. That is, 38308 * <PRE> 38309 * dstReg <<= (quad) srcReg 38310 * </PRE> 38311 * 38312 * @param dstReg destination register 38313 * @param srcBase the source base register 38314 * @param srcIndex the source index register 38315 * @param srcScale the source scale 38316 * @param srcDisp the source displacement 38317 */ 38318 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 38319 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 38320 public final void emitCMPNESS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 38321 int miStart = mi; 38322 setMachineCodes(mi++, (byte) 0xF3); 38323 generateREXprefix(false, dstReg, srcIndex, srcBase); 38324 setMachineCodes(mi++, (byte) 0x0F); 38325 setMachineCodes(mi++, (byte) 0xC2); 38326 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 38327 setMachineCodes(mi++, (byte) 4); 38328 if (lister != null) lister.RRXD(miStart, "CMPNESS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 38329 } 38330 38331 /** 38332 * Generate a register--register-indirect CMPNESS. That is, 38333 * <PRE> 38334 * dstReg <<= (quad) [srcBase] 38335 * </PRE> 38336 * 38337 * @param dstReg destination register 38338 * @param srcBase the source base register 38339 */ 38340 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38341 public final void emitCMPNESS_Reg_RegInd(XMM dstReg, GPR srcBase) { 38342 int miStart = mi; 38343 setMachineCodes(mi++, (byte) 0xF3); 38344 generateREXprefix(false, dstReg, null, srcBase); 38345 setMachineCodes(mi++, (byte) 0x0F); 38346 setMachineCodes(mi++, (byte) 0xC2); 38347 emitRegIndirectRegOperands(srcBase, dstReg); 38348 setMachineCodes(mi++, (byte) 4); 38349 if (lister != null) lister.RRN(miStart, "CMPNESS", dstReg, srcBase); 38350 } 38351 38352 38353 /** 38354 * Generate a register--register CMPNLTSS. That is, 38355 * <PRE> 38356 * dstReg <<= (quad) srcReg 38357 * </PRE> 38358 * 38359 * @param dstReg destination register 38360 * @param srcReg source register 38361 */ 38362 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38363 public final void emitCMPNLTSS_Reg_Reg(XMM dstReg, XMM srcReg) { 38364 int miStart = mi; 38365 setMachineCodes(mi++, (byte) 0xF3); 38366 generateREXprefix(false, dstReg, null, srcReg); 38367 setMachineCodes(mi++, (byte) 0x0F); 38368 setMachineCodes(mi++, (byte) 0xC2); 38369 emitRegRegOperands(srcReg, dstReg); 38370 setMachineCodes(mi++, (byte) 5); 38371 if (lister != null) lister.RR(miStart, "CMPNLTSS", dstReg, srcReg); 38372 } 38373 38374 /** 38375 * Generate a register--register-displacement CMPNLTSS. That is, 38376 * <PRE> 38377 * dstReg <<= (quad) [srcBase + srcDisp] 38378 * </PRE> 38379 * 38380 * @param dstReg destination register 38381 * @param srcBase the source base register 38382 * @param srcDisp the source displacement 38383 */ 38384 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38385 public final void emitCMPNLTSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 38386 int miStart = mi; 38387 setMachineCodes(mi++, (byte) 0xF3); 38388 generateREXprefix(false, dstReg, null, srcBase); 38389 setMachineCodes(mi++, (byte) 0x0F); 38390 setMachineCodes(mi++, (byte) 0xC2); 38391 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 38392 setMachineCodes(mi++, (byte) 5); 38393 if (lister != null) lister.RRD(miStart, "CMPNLTSS", dstReg, srcBase, srcDisp); 38394 } 38395 38396 /** 38397 * Generate a register--register-offset CMPNLTSS. That is, 38398 * <PRE> 38399 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 38400 * </PRE> 38401 * 38402 * @param dstReg destination register 38403 * @param srcIndex the source index register 38404 * @param srcScale the source scale 38405 * @param srcDisp the source displacement 38406 */ 38407 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38408 public final void emitCMPNLTSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 38409 int miStart = mi; 38410 setMachineCodes(mi++, (byte) 0xF3); 38411 generateREXprefix(false, dstReg, srcIndex, null); 38412 setMachineCodes(mi++, (byte) 0x0F); 38413 setMachineCodes(mi++, (byte) 0xC2); 38414 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 38415 setMachineCodes(mi++, (byte) 5); 38416 if (lister != null) lister.RRFD(miStart, "CMPNLTSS", dstReg, srcIndex, srcScale, srcDisp); 38417 } 38418 38419 /** 38420 * Generate a register--absolute CMPNLTSS. That is, 38421 * <PRE> 38422 * dstReg <<= (quad) [srcDisp] 38423 * </PRE> 38424 * 38425 * @param dstReg destination register 38426 * @param srcDisp the source displacement 38427 */ 38428 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 38429 public final void emitCMPNLTSS_Reg_Abs(XMM dstReg, Address srcDisp) { 38430 int miStart = mi; 38431 setMachineCodes(mi++, (byte) 0xF3); 38432 generateREXprefix(false, dstReg, null, null); 38433 setMachineCodes(mi++, (byte) 0x0F); 38434 setMachineCodes(mi++, (byte) 0xC2); 38435 emitAbsRegOperands(srcDisp, dstReg); 38436 setMachineCodes(mi++, (byte) 5); 38437 if (lister != null) lister.RRA(miStart, "CMPNLTSS", dstReg, srcDisp); 38438 } 38439 38440 /** 38441 * Generate a register--register-index CMPNLTSS. That is, 38442 * <PRE> 38443 * dstReg <<= (quad) srcReg 38444 * </PRE> 38445 * 38446 * @param dstReg destination register 38447 * @param srcBase the source base register 38448 * @param srcIndex the source index register 38449 * @param srcScale the source scale 38450 * @param srcDisp the source displacement 38451 */ 38452 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 38453 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 38454 public final void emitCMPNLTSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 38455 int miStart = mi; 38456 setMachineCodes(mi++, (byte) 0xF3); 38457 generateREXprefix(false, dstReg, srcIndex, srcBase); 38458 setMachineCodes(mi++, (byte) 0x0F); 38459 setMachineCodes(mi++, (byte) 0xC2); 38460 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 38461 setMachineCodes(mi++, (byte) 5); 38462 if (lister != null) lister.RRXD(miStart, "CMPNLTSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 38463 } 38464 38465 /** 38466 * Generate a register--register-indirect CMPNLTSS. That is, 38467 * <PRE> 38468 * dstReg <<= (quad) [srcBase] 38469 * </PRE> 38470 * 38471 * @param dstReg destination register 38472 * @param srcBase the source base register 38473 */ 38474 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38475 public final void emitCMPNLTSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 38476 int miStart = mi; 38477 setMachineCodes(mi++, (byte) 0xF3); 38478 generateREXprefix(false, dstReg, null, srcBase); 38479 setMachineCodes(mi++, (byte) 0x0F); 38480 setMachineCodes(mi++, (byte) 0xC2); 38481 emitRegIndirectRegOperands(srcBase, dstReg); 38482 setMachineCodes(mi++, (byte) 5); 38483 if (lister != null) lister.RRN(miStart, "CMPNLTSS", dstReg, srcBase); 38484 } 38485 38486 38487 /** 38488 * Generate a register--register CMPNLESS. That is, 38489 * <PRE> 38490 * dstReg <<= (quad) srcReg 38491 * </PRE> 38492 * 38493 * @param dstReg destination register 38494 * @param srcReg source register 38495 */ 38496 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38497 public final void emitCMPNLESS_Reg_Reg(XMM dstReg, XMM srcReg) { 38498 int miStart = mi; 38499 setMachineCodes(mi++, (byte) 0xF3); 38500 generateREXprefix(false, dstReg, null, srcReg); 38501 setMachineCodes(mi++, (byte) 0x0F); 38502 setMachineCodes(mi++, (byte) 0xC2); 38503 emitRegRegOperands(srcReg, dstReg); 38504 setMachineCodes(mi++, (byte) 6); 38505 if (lister != null) lister.RR(miStart, "CMPNLESS", dstReg, srcReg); 38506 } 38507 38508 /** 38509 * Generate a register--register-displacement CMPNLESS. That is, 38510 * <PRE> 38511 * dstReg <<= (quad) [srcBase + srcDisp] 38512 * </PRE> 38513 * 38514 * @param dstReg destination register 38515 * @param srcBase the source base register 38516 * @param srcDisp the source displacement 38517 */ 38518 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38519 public final void emitCMPNLESS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 38520 int miStart = mi; 38521 setMachineCodes(mi++, (byte) 0xF3); 38522 generateREXprefix(false, dstReg, null, srcBase); 38523 setMachineCodes(mi++, (byte) 0x0F); 38524 setMachineCodes(mi++, (byte) 0xC2); 38525 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 38526 setMachineCodes(mi++, (byte) 6); 38527 if (lister != null) lister.RRD(miStart, "CMPNLESS", dstReg, srcBase, srcDisp); 38528 } 38529 38530 /** 38531 * Generate a register--register-offset CMPNLESS. That is, 38532 * <PRE> 38533 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 38534 * </PRE> 38535 * 38536 * @param dstReg destination register 38537 * @param srcIndex the source index register 38538 * @param srcScale the source scale 38539 * @param srcDisp the source displacement 38540 */ 38541 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38542 public final void emitCMPNLESS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 38543 int miStart = mi; 38544 setMachineCodes(mi++, (byte) 0xF3); 38545 generateREXprefix(false, dstReg, srcIndex, null); 38546 setMachineCodes(mi++, (byte) 0x0F); 38547 setMachineCodes(mi++, (byte) 0xC2); 38548 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 38549 setMachineCodes(mi++, (byte) 6); 38550 if (lister != null) lister.RRFD(miStart, "CMPNLESS", dstReg, srcIndex, srcScale, srcDisp); 38551 } 38552 38553 /** 38554 * Generate a register--absolute CMPNLESS. That is, 38555 * <PRE> 38556 * dstReg <<= (quad) [srcDisp] 38557 * </PRE> 38558 * 38559 * @param dstReg destination register 38560 * @param srcDisp the source displacement 38561 */ 38562 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 38563 public final void emitCMPNLESS_Reg_Abs(XMM dstReg, Address srcDisp) { 38564 int miStart = mi; 38565 setMachineCodes(mi++, (byte) 0xF3); 38566 generateREXprefix(false, dstReg, null, null); 38567 setMachineCodes(mi++, (byte) 0x0F); 38568 setMachineCodes(mi++, (byte) 0xC2); 38569 emitAbsRegOperands(srcDisp, dstReg); 38570 setMachineCodes(mi++, (byte) 6); 38571 if (lister != null) lister.RRA(miStart, "CMPNLESS", dstReg, srcDisp); 38572 } 38573 38574 /** 38575 * Generate a register--register-index CMPNLESS. That is, 38576 * <PRE> 38577 * dstReg <<= (quad) srcReg 38578 * </PRE> 38579 * 38580 * @param dstReg destination register 38581 * @param srcBase the source base register 38582 * @param srcIndex the source index register 38583 * @param srcScale the source scale 38584 * @param srcDisp the source displacement 38585 */ 38586 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 38587 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 38588 public final void emitCMPNLESS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 38589 int miStart = mi; 38590 setMachineCodes(mi++, (byte) 0xF3); 38591 generateREXprefix(false, dstReg, srcIndex, srcBase); 38592 setMachineCodes(mi++, (byte) 0x0F); 38593 setMachineCodes(mi++, (byte) 0xC2); 38594 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 38595 setMachineCodes(mi++, (byte) 6); 38596 if (lister != null) lister.RRXD(miStart, "CMPNLESS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 38597 } 38598 38599 /** 38600 * Generate a register--register-indirect CMPNLESS. That is, 38601 * <PRE> 38602 * dstReg <<= (quad) [srcBase] 38603 * </PRE> 38604 * 38605 * @param dstReg destination register 38606 * @param srcBase the source base register 38607 */ 38608 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38609 public final void emitCMPNLESS_Reg_RegInd(XMM dstReg, GPR srcBase) { 38610 int miStart = mi; 38611 setMachineCodes(mi++, (byte) 0xF3); 38612 generateREXprefix(false, dstReg, null, srcBase); 38613 setMachineCodes(mi++, (byte) 0x0F); 38614 setMachineCodes(mi++, (byte) 0xC2); 38615 emitRegIndirectRegOperands(srcBase, dstReg); 38616 setMachineCodes(mi++, (byte) 6); 38617 if (lister != null) lister.RRN(miStart, "CMPNLESS", dstReg, srcBase); 38618 } 38619 38620 38621 /** 38622 * Generate a register--register CMPORDSS. That is, 38623 * <PRE> 38624 * dstReg <<= (quad) srcReg 38625 * </PRE> 38626 * 38627 * @param dstReg destination register 38628 * @param srcReg source register 38629 */ 38630 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38631 public final void emitCMPORDSS_Reg_Reg(XMM dstReg, XMM srcReg) { 38632 int miStart = mi; 38633 setMachineCodes(mi++, (byte) 0xF3); 38634 generateREXprefix(false, dstReg, null, srcReg); 38635 setMachineCodes(mi++, (byte) 0x0F); 38636 setMachineCodes(mi++, (byte) 0xC2); 38637 emitRegRegOperands(srcReg, dstReg); 38638 setMachineCodes(mi++, (byte) 7); 38639 if (lister != null) lister.RR(miStart, "CMPORDSS", dstReg, srcReg); 38640 } 38641 38642 /** 38643 * Generate a register--register-displacement CMPORDSS. That is, 38644 * <PRE> 38645 * dstReg <<= (quad) [srcBase + srcDisp] 38646 * </PRE> 38647 * 38648 * @param dstReg destination register 38649 * @param srcBase the source base register 38650 * @param srcDisp the source displacement 38651 */ 38652 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38653 public final void emitCMPORDSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 38654 int miStart = mi; 38655 setMachineCodes(mi++, (byte) 0xF3); 38656 generateREXprefix(false, dstReg, null, srcBase); 38657 setMachineCodes(mi++, (byte) 0x0F); 38658 setMachineCodes(mi++, (byte) 0xC2); 38659 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 38660 setMachineCodes(mi++, (byte) 7); 38661 if (lister != null) lister.RRD(miStart, "CMPORDSS", dstReg, srcBase, srcDisp); 38662 } 38663 38664 /** 38665 * Generate a register--register-offset CMPORDSS. That is, 38666 * <PRE> 38667 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 38668 * </PRE> 38669 * 38670 * @param dstReg destination register 38671 * @param srcIndex the source index register 38672 * @param srcScale the source scale 38673 * @param srcDisp the source displacement 38674 */ 38675 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38676 public final void emitCMPORDSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 38677 int miStart = mi; 38678 setMachineCodes(mi++, (byte) 0xF3); 38679 generateREXprefix(false, dstReg, srcIndex, null); 38680 setMachineCodes(mi++, (byte) 0x0F); 38681 setMachineCodes(mi++, (byte) 0xC2); 38682 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 38683 setMachineCodes(mi++, (byte) 7); 38684 if (lister != null) lister.RRFD(miStart, "CMPORDSS", dstReg, srcIndex, srcScale, srcDisp); 38685 } 38686 38687 /** 38688 * Generate a register--absolute CMPORDSS. That is, 38689 * <PRE> 38690 * dstReg <<= (quad) [srcDisp] 38691 * </PRE> 38692 * 38693 * @param dstReg destination register 38694 * @param srcDisp the source displacement 38695 */ 38696 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 38697 public final void emitCMPORDSS_Reg_Abs(XMM dstReg, Address srcDisp) { 38698 int miStart = mi; 38699 setMachineCodes(mi++, (byte) 0xF3); 38700 generateREXprefix(false, dstReg, null, null); 38701 setMachineCodes(mi++, (byte) 0x0F); 38702 setMachineCodes(mi++, (byte) 0xC2); 38703 emitAbsRegOperands(srcDisp, dstReg); 38704 setMachineCodes(mi++, (byte) 7); 38705 if (lister != null) lister.RRA(miStart, "CMPORDSS", dstReg, srcDisp); 38706 } 38707 38708 /** 38709 * Generate a register--register-index CMPORDSS. That is, 38710 * <PRE> 38711 * dstReg <<= (quad) srcReg 38712 * </PRE> 38713 * 38714 * @param dstReg destination register 38715 * @param srcBase the source base register 38716 * @param srcIndex the source index register 38717 * @param srcScale the source scale 38718 * @param srcDisp the source displacement 38719 */ 38720 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 38721 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 38722 public final void emitCMPORDSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 38723 int miStart = mi; 38724 setMachineCodes(mi++, (byte) 0xF3); 38725 generateREXprefix(false, dstReg, srcIndex, srcBase); 38726 setMachineCodes(mi++, (byte) 0x0F); 38727 setMachineCodes(mi++, (byte) 0xC2); 38728 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 38729 setMachineCodes(mi++, (byte) 7); 38730 if (lister != null) lister.RRXD(miStart, "CMPORDSS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 38731 } 38732 38733 /** 38734 * Generate a register--register-indirect CMPORDSS. That is, 38735 * <PRE> 38736 * dstReg <<= (quad) [srcBase] 38737 * </PRE> 38738 * 38739 * @param dstReg destination register 38740 * @param srcBase the source base register 38741 */ 38742 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38743 public final void emitCMPORDSS_Reg_RegInd(XMM dstReg, GPR srcBase) { 38744 int miStart = mi; 38745 setMachineCodes(mi++, (byte) 0xF3); 38746 generateREXprefix(false, dstReg, null, srcBase); 38747 setMachineCodes(mi++, (byte) 0x0F); 38748 setMachineCodes(mi++, (byte) 0xC2); 38749 emitRegIndirectRegOperands(srcBase, dstReg); 38750 setMachineCodes(mi++, (byte) 7); 38751 if (lister != null) lister.RRN(miStart, "CMPORDSS", dstReg, srcBase); 38752 } 38753 38754 38755 /** 38756 * Generate a register--register MOVD. That is, 38757 * <PRE> 38758 * dstReg <<= (quad) srcReg 38759 * </PRE> 38760 * 38761 * @param dstReg destination register 38762 * @param srcReg source register 38763 */ 38764 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38765 public final void emitMOVD_Reg_Reg(GPR dstReg, MM srcReg) { 38766 int miStart = mi; 38767 generateREXprefix(false, srcReg, null, dstReg); 38768 setMachineCodes(mi++, (byte) 0x0F); 38769 setMachineCodes(mi++, (byte) 0x7E); 38770 emitRegRegOperands(dstReg, srcReg); 38771 if (lister != null) lister.RR(miStart, "MOVD", dstReg, srcReg); 38772 } 38773 38774 /** 38775 * Generate a register-indirect--register MOVD. That is, 38776 * <PRE> 38777 * [dstBase] <<= (quad) srcReg 38778 * </PRE> 38779 * 38780 * @param dstBase the destination base register 38781 * @param srcReg the source register 38782 */ 38783 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38784 public final void emitMOVD_RegInd_Reg(GPR dstBase, MM srcReg) { 38785 int miStart = mi; 38786 generateREXprefix(false, srcReg, null, dstBase); 38787 setMachineCodes(mi++, (byte) 0x0F); 38788 setMachineCodes(mi++, (byte) 0x7E); 38789 emitRegIndirectRegOperands(dstBase, srcReg); 38790 if (lister != null) lister.RNR(miStart, "MOVD", dstBase, srcReg); 38791 } 38792 38793 /** 38794 * Generate a register-offset--register MOVD. That is, 38795 * <PRE> 38796 * [dstReg<<dstScale + dstDisp] <<= (quad) srcReg 38797 * </PRE> 38798 * 38799 * @param dstIndex the destination index register 38800 * @param dstScale the destination shift amount 38801 * @param dstDisp the destination displacement 38802 * @param srcReg the source register 38803 */ 38804 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 38805 public final void emitMOVD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, MM srcReg) { 38806 int miStart = mi; 38807 generateREXprefix(false, srcReg, dstIndex, null); 38808 setMachineCodes(mi++, (byte) 0x0F); 38809 setMachineCodes(mi++, (byte) 0x7E); 38810 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 38811 if (lister != null) lister.RFDR(miStart, "MOVD", dstIndex, dstScale, dstDisp, srcReg); 38812 } 38813 38814 /** 38815 * Generate a absolute--register MOVD. That is, 38816 * <PRE> 38817 * [dstDisp] <<= (quad) srcReg 38818 * </PRE> 38819 * 38820 * @param dstDisp the destination displacement 38821 * @param srcReg the source register 38822 */ 38823 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 38824 public final void emitMOVD_Abs_Reg(Address dstDisp, MM srcReg) { 38825 int miStart = mi; 38826 generateREXprefix(false, srcReg, null, null); 38827 setMachineCodes(mi++, (byte) 0x0F); 38828 setMachineCodes(mi++, (byte) 0x7E); 38829 emitAbsRegOperands(dstDisp, srcReg); 38830 if (lister != null) lister.RAR(miStart, "MOVD", dstDisp, srcReg); 38831 } 38832 38833 /** 38834 * Generate a register-index--register MOVD. That is, 38835 * <PRE> 38836 * [dstBase + dstIndex<<dstScale + dstDisp] <<= (quad) srcReg 38837 * </PRE> 38838 * 38839 * @param dstBase the destination base register 38840 * @param dstIndex the destination index register 38841 * @param dstScale the destination shift amount 38842 * @param dstDisp the destination displacement 38843 * @param srcReg the source register 38844 */ 38845 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 38846 public final void emitMOVD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, MM srcReg) { 38847 int miStart = mi; 38848 generateREXprefix(false, srcReg, dstIndex, dstBase); 38849 setMachineCodes(mi++, (byte) 0x0F); 38850 setMachineCodes(mi++, (byte) 0x7E); 38851 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 38852 if (lister != null) lister.RXDR(miStart, "MOVD", dstBase, dstIndex, dstScale, dstDisp, srcReg); 38853 } 38854 38855 /** 38856 * Generate a register-displacement--register MOVD. That is, 38857 * <PRE> 38858 * [dstBase + dstDisp] <<= (quad) srcReg 38859 * </PRE> 38860 * 38861 * @param dstBase the destination base register 38862 * @param dstDisp the destination displacement 38863 * @param srcReg the source register 38864 */ 38865 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 38866 public final void emitMOVD_RegDisp_Reg(GPR dstBase, Offset dstDisp, MM srcReg) { 38867 int miStart = mi; 38868 generateREXprefix(false, srcReg, null, dstBase); 38869 setMachineCodes(mi++, (byte) 0x0F); 38870 setMachineCodes(mi++, (byte) 0x7E); 38871 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 38872 if (lister != null) lister.RDR(miStart, "MOVD", dstBase, dstDisp, srcReg); 38873 } 38874 38875 38876 /** 38877 * Generate a register--register MOVD. That is, 38878 * <PRE> 38879 * dstReg <<= (quad) srcReg 38880 * </PRE> 38881 * 38882 * @param dstReg destination register 38883 * @param srcReg source register 38884 */ 38885 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38886 public final void emitMOVD_Reg_Reg(MM dstReg, GPR srcReg) { 38887 int miStart = mi; 38888 generateREXprefix(false, dstReg, null, srcReg); 38889 setMachineCodes(mi++, (byte) 0x0F); 38890 setMachineCodes(mi++, (byte) 0x6E); 38891 emitRegRegOperands(srcReg, dstReg); 38892 if (lister != null) lister.RR(miStart, "MOVD", dstReg, srcReg); 38893 } 38894 38895 /** 38896 * Generate a register--register-displacement MOVD. That is, 38897 * <PRE> 38898 * dstReg <<= (quad) [srcBase + srcDisp] 38899 * </PRE> 38900 * 38901 * @param dstReg destination register 38902 * @param srcBase the source base register 38903 * @param srcDisp the source displacement 38904 */ 38905 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38906 public final void emitMOVD_Reg_RegDisp(MM dstReg, GPR srcBase, Offset srcDisp) { 38907 int miStart = mi; 38908 generateREXprefix(false, dstReg, null, srcBase); 38909 setMachineCodes(mi++, (byte) 0x0F); 38910 setMachineCodes(mi++, (byte) 0x6E); 38911 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 38912 if (lister != null) lister.RRD(miStart, "MOVD", dstReg, srcBase, srcDisp); 38913 } 38914 38915 /** 38916 * Generate a register--register-offset MOVD. That is, 38917 * <PRE> 38918 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 38919 * </PRE> 38920 * 38921 * @param dstReg destination register 38922 * @param srcIndex the source index register 38923 * @param srcScale the source scale 38924 * @param srcDisp the source displacement 38925 */ 38926 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38927 public final void emitMOVD_Reg_RegOff(MM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 38928 int miStart = mi; 38929 generateREXprefix(false, dstReg, srcIndex, null); 38930 setMachineCodes(mi++, (byte) 0x0F); 38931 setMachineCodes(mi++, (byte) 0x6E); 38932 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 38933 if (lister != null) lister.RRFD(miStart, "MOVD", dstReg, srcIndex, srcScale, srcDisp); 38934 } 38935 38936 /** 38937 * Generate a register--absolute MOVD. That is, 38938 * <PRE> 38939 * dstReg <<= (quad) [srcDisp] 38940 * </PRE> 38941 * 38942 * @param dstReg destination register 38943 * @param srcDisp the source displacement 38944 */ 38945 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 38946 public final void emitMOVD_Reg_Abs(MM dstReg, Address srcDisp) { 38947 int miStart = mi; 38948 generateREXprefix(false, dstReg, null, null); 38949 setMachineCodes(mi++, (byte) 0x0F); 38950 setMachineCodes(mi++, (byte) 0x6E); 38951 emitAbsRegOperands(srcDisp, dstReg); 38952 if (lister != null) lister.RRA(miStart, "MOVD", dstReg, srcDisp); 38953 } 38954 38955 /** 38956 * Generate a register--register-index MOVD. That is, 38957 * <PRE> 38958 * dstReg <<= (quad) srcReg 38959 * </PRE> 38960 * 38961 * @param dstReg destination register 38962 * @param srcBase the source base register 38963 * @param srcIndex the source index register 38964 * @param srcScale the source scale 38965 * @param srcDisp the source displacement 38966 */ 38967 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 38968 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 38969 public final void emitMOVD_Reg_RegIdx(MM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 38970 int miStart = mi; 38971 generateREXprefix(false, dstReg, srcIndex, srcBase); 38972 setMachineCodes(mi++, (byte) 0x0F); 38973 setMachineCodes(mi++, (byte) 0x6E); 38974 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 38975 if (lister != null) lister.RRXD(miStart, "MOVD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 38976 } 38977 38978 /** 38979 * Generate a register--register-indirect MOVD. That is, 38980 * <PRE> 38981 * dstReg <<= (quad) [srcBase] 38982 * </PRE> 38983 * 38984 * @param dstReg destination register 38985 * @param srcBase the source base register 38986 */ 38987 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 38988 public final void emitMOVD_Reg_RegInd(MM dstReg, GPR srcBase) { 38989 int miStart = mi; 38990 generateREXprefix(false, dstReg, null, srcBase); 38991 setMachineCodes(mi++, (byte) 0x0F); 38992 setMachineCodes(mi++, (byte) 0x6E); 38993 emitRegIndirectRegOperands(srcBase, dstReg); 38994 if (lister != null) lister.RRN(miStart, "MOVD", dstReg, srcBase); 38995 } 38996 38997 38998 /** 38999 * Generate a register--register MOVD. That is, 39000 * <PRE> 39001 * dstReg <<= (quad) srcReg 39002 * </PRE> 39003 * 39004 * @param dstReg destination register 39005 * @param srcReg source register 39006 */ 39007 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39008 public final void emitMOVD_Reg_Reg(GPR dstReg, XMM srcReg) { 39009 int miStart = mi; 39010 setMachineCodes(mi++, (byte) 0x66); 39011 generateREXprefix(false, srcReg, null, dstReg); 39012 setMachineCodes(mi++, (byte) 0x0F); 39013 setMachineCodes(mi++, (byte) 0x7E); 39014 emitRegRegOperands(dstReg, srcReg); 39015 if (lister != null) lister.RR(miStart, "MOVD", dstReg, srcReg); 39016 } 39017 39018 /** 39019 * Generate a register-indirect--register MOVD. That is, 39020 * <PRE> 39021 * [dstBase] <<= (quad) srcReg 39022 * </PRE> 39023 * 39024 * @param dstBase the destination base register 39025 * @param srcReg the source register 39026 */ 39027 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39028 public final void emitMOVD_RegInd_Reg(GPR dstBase, XMM srcReg) { 39029 int miStart = mi; 39030 setMachineCodes(mi++, (byte) 0x66); 39031 generateREXprefix(false, srcReg, null, dstBase); 39032 setMachineCodes(mi++, (byte) 0x0F); 39033 setMachineCodes(mi++, (byte) 0x7E); 39034 emitRegIndirectRegOperands(dstBase, srcReg); 39035 if (lister != null) lister.RNR(miStart, "MOVD", dstBase, srcReg); 39036 } 39037 39038 /** 39039 * Generate a register-offset--register MOVD. That is, 39040 * <PRE> 39041 * [dstReg<<dstScale + dstDisp] <<= (quad) srcReg 39042 * </PRE> 39043 * 39044 * @param dstIndex the destination index register 39045 * @param dstScale the destination shift amount 39046 * @param dstDisp the destination displacement 39047 * @param srcReg the source register 39048 */ 39049 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 39050 public final void emitMOVD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 39051 int miStart = mi; 39052 setMachineCodes(mi++, (byte) 0x66); 39053 generateREXprefix(false, srcReg, dstIndex, null); 39054 setMachineCodes(mi++, (byte) 0x0F); 39055 setMachineCodes(mi++, (byte) 0x7E); 39056 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 39057 if (lister != null) lister.RFDR(miStart, "MOVD", dstIndex, dstScale, dstDisp, srcReg); 39058 } 39059 39060 /** 39061 * Generate a absolute--register MOVD. That is, 39062 * <PRE> 39063 * [dstDisp] <<= (quad) srcReg 39064 * </PRE> 39065 * 39066 * @param dstDisp the destination displacement 39067 * @param srcReg the source register 39068 */ 39069 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 39070 public final void emitMOVD_Abs_Reg(Address dstDisp, XMM srcReg) { 39071 int miStart = mi; 39072 setMachineCodes(mi++, (byte) 0x66); 39073 generateREXprefix(false, srcReg, null, null); 39074 setMachineCodes(mi++, (byte) 0x0F); 39075 setMachineCodes(mi++, (byte) 0x7E); 39076 emitAbsRegOperands(dstDisp, srcReg); 39077 if (lister != null) lister.RAR(miStart, "MOVD", dstDisp, srcReg); 39078 } 39079 39080 /** 39081 * Generate a register-index--register MOVD. That is, 39082 * <PRE> 39083 * [dstBase + dstIndex<<dstScale + dstDisp] <<= (quad) srcReg 39084 * </PRE> 39085 * 39086 * @param dstBase the destination base register 39087 * @param dstIndex the destination index register 39088 * @param dstScale the destination shift amount 39089 * @param dstDisp the destination displacement 39090 * @param srcReg the source register 39091 */ 39092 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 39093 public final void emitMOVD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 39094 int miStart = mi; 39095 setMachineCodes(mi++, (byte) 0x66); 39096 generateREXprefix(false, srcReg, dstIndex, dstBase); 39097 setMachineCodes(mi++, (byte) 0x0F); 39098 setMachineCodes(mi++, (byte) 0x7E); 39099 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 39100 if (lister != null) lister.RXDR(miStart, "MOVD", dstBase, dstIndex, dstScale, dstDisp, srcReg); 39101 } 39102 39103 /** 39104 * Generate a register-displacement--register MOVD. That is, 39105 * <PRE> 39106 * [dstBase + dstDisp] <<= (quad) srcReg 39107 * </PRE> 39108 * 39109 * @param dstBase the destination base register 39110 * @param dstDisp the destination displacement 39111 * @param srcReg the source register 39112 */ 39113 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 39114 public final void emitMOVD_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) { 39115 int miStart = mi; 39116 setMachineCodes(mi++, (byte) 0x66); 39117 generateREXprefix(false, srcReg, null, dstBase); 39118 setMachineCodes(mi++, (byte) 0x0F); 39119 setMachineCodes(mi++, (byte) 0x7E); 39120 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 39121 if (lister != null) lister.RDR(miStart, "MOVD", dstBase, dstDisp, srcReg); 39122 } 39123 39124 39125 /** 39126 * Generate a register--register MOVD. That is, 39127 * <PRE> 39128 * dstReg <<= (quad) srcReg 39129 * </PRE> 39130 * 39131 * @param dstReg destination register 39132 * @param srcReg source register 39133 */ 39134 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39135 public final void emitMOVD_Reg_Reg(XMM dstReg, GPR srcReg) { 39136 int miStart = mi; 39137 setMachineCodes(mi++, (byte) 0x66); 39138 generateREXprefix(false, dstReg, null, srcReg); 39139 setMachineCodes(mi++, (byte) 0x0F); 39140 setMachineCodes(mi++, (byte) 0x6E); 39141 emitRegRegOperands(srcReg, dstReg); 39142 if (lister != null) lister.RR(miStart, "MOVD", dstReg, srcReg); 39143 } 39144 39145 /** 39146 * Generate a register--register-displacement MOVD. That is, 39147 * <PRE> 39148 * dstReg <<= (quad) [srcBase + srcDisp] 39149 * </PRE> 39150 * 39151 * @param dstReg destination register 39152 * @param srcBase the source base register 39153 * @param srcDisp the source displacement 39154 */ 39155 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39156 public final void emitMOVD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 39157 int miStart = mi; 39158 setMachineCodes(mi++, (byte) 0x66); 39159 generateREXprefix(false, dstReg, null, srcBase); 39160 setMachineCodes(mi++, (byte) 0x0F); 39161 setMachineCodes(mi++, (byte) 0x6E); 39162 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 39163 if (lister != null) lister.RRD(miStart, "MOVD", dstReg, srcBase, srcDisp); 39164 } 39165 39166 /** 39167 * Generate a register--register-offset MOVD. That is, 39168 * <PRE> 39169 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 39170 * </PRE> 39171 * 39172 * @param dstReg destination register 39173 * @param srcIndex the source index register 39174 * @param srcScale the source scale 39175 * @param srcDisp the source displacement 39176 */ 39177 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39178 public final void emitMOVD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 39179 int miStart = mi; 39180 setMachineCodes(mi++, (byte) 0x66); 39181 generateREXprefix(false, dstReg, srcIndex, null); 39182 setMachineCodes(mi++, (byte) 0x0F); 39183 setMachineCodes(mi++, (byte) 0x6E); 39184 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 39185 if (lister != null) lister.RRFD(miStart, "MOVD", dstReg, srcIndex, srcScale, srcDisp); 39186 } 39187 39188 /** 39189 * Generate a register--absolute MOVD. That is, 39190 * <PRE> 39191 * dstReg <<= (quad) [srcDisp] 39192 * </PRE> 39193 * 39194 * @param dstReg destination register 39195 * @param srcDisp the source displacement 39196 */ 39197 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 39198 public final void emitMOVD_Reg_Abs(XMM dstReg, Address srcDisp) { 39199 int miStart = mi; 39200 setMachineCodes(mi++, (byte) 0x66); 39201 generateREXprefix(false, dstReg, null, null); 39202 setMachineCodes(mi++, (byte) 0x0F); 39203 setMachineCodes(mi++, (byte) 0x6E); 39204 emitAbsRegOperands(srcDisp, dstReg); 39205 if (lister != null) lister.RRA(miStart, "MOVD", dstReg, srcDisp); 39206 } 39207 39208 /** 39209 * Generate a register--register-index MOVD. That is, 39210 * <PRE> 39211 * dstReg <<= (quad) srcReg 39212 * </PRE> 39213 * 39214 * @param dstReg destination register 39215 * @param srcBase the source base register 39216 * @param srcIndex the source index register 39217 * @param srcScale the source scale 39218 * @param srcDisp the source displacement 39219 */ 39220 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 39221 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 39222 public final void emitMOVD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 39223 int miStart = mi; 39224 setMachineCodes(mi++, (byte) 0x66); 39225 generateREXprefix(false, dstReg, srcIndex, srcBase); 39226 setMachineCodes(mi++, (byte) 0x0F); 39227 setMachineCodes(mi++, (byte) 0x6E); 39228 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 39229 if (lister != null) lister.RRXD(miStart, "MOVD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 39230 } 39231 39232 /** 39233 * Generate a register--register-indirect MOVD. That is, 39234 * <PRE> 39235 * dstReg <<= (quad) [srcBase] 39236 * </PRE> 39237 * 39238 * @param dstReg destination register 39239 * @param srcBase the source base register 39240 */ 39241 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39242 public final void emitMOVD_Reg_RegInd(XMM dstReg, GPR srcBase) { 39243 int miStart = mi; 39244 setMachineCodes(mi++, (byte) 0x66); 39245 generateREXprefix(false, dstReg, null, srcBase); 39246 setMachineCodes(mi++, (byte) 0x0F); 39247 setMachineCodes(mi++, (byte) 0x6E); 39248 emitRegIndirectRegOperands(srcBase, dstReg); 39249 if (lister != null) lister.RRN(miStart, "MOVD", dstReg, srcBase); 39250 } 39251 39252 39253 /** 39254 * Generate a register--register MOVQ. That is, 39255 * <PRE> 39256 * dstReg <<= (quad) srcReg 39257 * </PRE> 39258 * 39259 * @param dstReg destination register 39260 * @param srcReg source register 39261 */ 39262 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39263 public final void emitMOVQ_Reg_Reg(MM dstReg, MM srcReg) { 39264 int miStart = mi; 39265 generateREXprefix(false, dstReg, null, srcReg); 39266 setMachineCodes(mi++, (byte) 0x0F); 39267 setMachineCodes(mi++, (byte) 0x6F); 39268 emitRegRegOperands(srcReg, dstReg); 39269 if (lister != null) lister.RR(miStart, "MOVQ", dstReg, srcReg); 39270 } 39271 39272 /** 39273 * Generate a register--register-displacement MOVQ. That is, 39274 * <PRE> 39275 * dstReg <<= (quad) [srcBase + srcDisp] 39276 * </PRE> 39277 * 39278 * @param dstReg destination register 39279 * @param srcBase the source base register 39280 * @param srcDisp the source displacement 39281 */ 39282 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39283 public final void emitMOVQ_Reg_RegDisp(MM dstReg, GPR srcBase, Offset srcDisp) { 39284 int miStart = mi; 39285 generateREXprefix(false, dstReg, null, srcBase); 39286 setMachineCodes(mi++, (byte) 0x0F); 39287 setMachineCodes(mi++, (byte) 0x6F); 39288 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 39289 if (lister != null) lister.RRD(miStart, "MOVQ", dstReg, srcBase, srcDisp); 39290 } 39291 39292 /** 39293 * Generate a register--register-offset MOVQ. That is, 39294 * <PRE> 39295 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 39296 * </PRE> 39297 * 39298 * @param dstReg destination register 39299 * @param srcIndex the source index register 39300 * @param srcScale the source scale 39301 * @param srcDisp the source displacement 39302 */ 39303 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39304 public final void emitMOVQ_Reg_RegOff(MM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 39305 int miStart = mi; 39306 generateREXprefix(false, dstReg, srcIndex, null); 39307 setMachineCodes(mi++, (byte) 0x0F); 39308 setMachineCodes(mi++, (byte) 0x6F); 39309 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 39310 if (lister != null) lister.RRFD(miStart, "MOVQ", dstReg, srcIndex, srcScale, srcDisp); 39311 } 39312 39313 /** 39314 * Generate a register--absolute MOVQ. That is, 39315 * <PRE> 39316 * dstReg <<= (quad) [srcDisp] 39317 * </PRE> 39318 * 39319 * @param dstReg destination register 39320 * @param srcDisp the source displacement 39321 */ 39322 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 39323 public final void emitMOVQ_Reg_Abs(MM dstReg, Address srcDisp) { 39324 int miStart = mi; 39325 generateREXprefix(false, dstReg, null, null); 39326 setMachineCodes(mi++, (byte) 0x0F); 39327 setMachineCodes(mi++, (byte) 0x6F); 39328 emitAbsRegOperands(srcDisp, dstReg); 39329 if (lister != null) lister.RRA(miStart, "MOVQ", dstReg, srcDisp); 39330 } 39331 39332 /** 39333 * Generate a register--register-index MOVQ. That is, 39334 * <PRE> 39335 * dstReg <<= (quad) srcReg 39336 * </PRE> 39337 * 39338 * @param dstReg destination register 39339 * @param srcBase the source base register 39340 * @param srcIndex the source index register 39341 * @param srcScale the source scale 39342 * @param srcDisp the source displacement 39343 */ 39344 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 39345 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 39346 public final void emitMOVQ_Reg_RegIdx(MM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 39347 int miStart = mi; 39348 generateREXprefix(false, dstReg, srcIndex, srcBase); 39349 setMachineCodes(mi++, (byte) 0x0F); 39350 setMachineCodes(mi++, (byte) 0x6F); 39351 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 39352 if (lister != null) lister.RRXD(miStart, "MOVQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 39353 } 39354 39355 /** 39356 * Generate a register--register-indirect MOVQ. That is, 39357 * <PRE> 39358 * dstReg <<= (quad) [srcBase] 39359 * </PRE> 39360 * 39361 * @param dstReg destination register 39362 * @param srcBase the source base register 39363 */ 39364 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39365 public final void emitMOVQ_Reg_RegInd(MM dstReg, GPR srcBase) { 39366 int miStart = mi; 39367 generateREXprefix(false, dstReg, null, srcBase); 39368 setMachineCodes(mi++, (byte) 0x0F); 39369 setMachineCodes(mi++, (byte) 0x6F); 39370 emitRegIndirectRegOperands(srcBase, dstReg); 39371 if (lister != null) lister.RRN(miStart, "MOVQ", dstReg, srcBase); 39372 } 39373 39374 39375 /** 39376 * Generate a register-indirect--register MOVQ. That is, 39377 * <PRE> 39378 * [dstBase] <<= (quad) srcReg 39379 * </PRE> 39380 * 39381 * @param dstBase the destination base register 39382 * @param srcReg the source register 39383 */ 39384 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39385 public final void emitMOVQ_RegInd_Reg(GPR dstBase, MM srcReg) { 39386 int miStart = mi; 39387 generateREXprefix(false, srcReg, null, dstBase); 39388 setMachineCodes(mi++, (byte) 0x0F); 39389 setMachineCodes(mi++, (byte) 0x7F); 39390 emitRegIndirectRegOperands(dstBase, srcReg); 39391 if (lister != null) lister.RNR(miStart, "MOVQ", dstBase, srcReg); 39392 } 39393 39394 /** 39395 * Generate a register-offset--register MOVQ. That is, 39396 * <PRE> 39397 * [dstReg<<dstScale + dstDisp] <<= (quad) srcReg 39398 * </PRE> 39399 * 39400 * @param dstIndex the destination index register 39401 * @param dstScale the destination shift amount 39402 * @param dstDisp the destination displacement 39403 * @param srcReg the source register 39404 */ 39405 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 39406 public final void emitMOVQ_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, MM srcReg) { 39407 int miStart = mi; 39408 generateREXprefix(false, srcReg, dstIndex, null); 39409 setMachineCodes(mi++, (byte) 0x0F); 39410 setMachineCodes(mi++, (byte) 0x7F); 39411 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 39412 if (lister != null) lister.RFDR(miStart, "MOVQ", dstIndex, dstScale, dstDisp, srcReg); 39413 } 39414 39415 /** 39416 * Generate a absolute--register MOVQ. That is, 39417 * <PRE> 39418 * [dstDisp] <<= (quad) srcReg 39419 * </PRE> 39420 * 39421 * @param dstDisp the destination displacement 39422 * @param srcReg the source register 39423 */ 39424 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 39425 public final void emitMOVQ_Abs_Reg(Address dstDisp, MM srcReg) { 39426 int miStart = mi; 39427 generateREXprefix(false, srcReg, null, null); 39428 setMachineCodes(mi++, (byte) 0x0F); 39429 setMachineCodes(mi++, (byte) 0x7F); 39430 emitAbsRegOperands(dstDisp, srcReg); 39431 if (lister != null) lister.RAR(miStart, "MOVQ", dstDisp, srcReg); 39432 } 39433 39434 /** 39435 * Generate a register-index--register MOVQ. That is, 39436 * <PRE> 39437 * [dstBase + dstIndex<<dstScale + dstDisp] <<= (quad) srcReg 39438 * </PRE> 39439 * 39440 * @param dstBase the destination base register 39441 * @param dstIndex the destination index register 39442 * @param dstScale the destination shift amount 39443 * @param dstDisp the destination displacement 39444 * @param srcReg the source register 39445 */ 39446 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 39447 public final void emitMOVQ_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, MM srcReg) { 39448 int miStart = mi; 39449 generateREXprefix(false, srcReg, dstIndex, dstBase); 39450 setMachineCodes(mi++, (byte) 0x0F); 39451 setMachineCodes(mi++, (byte) 0x7F); 39452 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 39453 if (lister != null) lister.RXDR(miStart, "MOVQ", dstBase, dstIndex, dstScale, dstDisp, srcReg); 39454 } 39455 39456 /** 39457 * Generate a register-displacement--register MOVQ. That is, 39458 * <PRE> 39459 * [dstBase + dstDisp] <<= (quad) srcReg 39460 * </PRE> 39461 * 39462 * @param dstBase the destination base register 39463 * @param dstDisp the destination displacement 39464 * @param srcReg the source register 39465 */ 39466 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 39467 public final void emitMOVQ_RegDisp_Reg(GPR dstBase, Offset dstDisp, MM srcReg) { 39468 int miStart = mi; 39469 generateREXprefix(false, srcReg, null, dstBase); 39470 setMachineCodes(mi++, (byte) 0x0F); 39471 setMachineCodes(mi++, (byte) 0x7F); 39472 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 39473 if (lister != null) lister.RDR(miStart, "MOVQ", dstBase, dstDisp, srcReg); 39474 } 39475 39476 39477 /** 39478 * Generate a register--register MOVQ. That is, 39479 * <PRE> 39480 * dstReg <<= (quad) srcReg 39481 * </PRE> 39482 * 39483 * @param dstReg destination register 39484 * @param srcReg source register 39485 */ 39486 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39487 public final void emitMOVQ_Reg_Reg(XMM dstReg, XMM srcReg) { 39488 int miStart = mi; 39489 setMachineCodes(mi++, (byte) 0xF3); 39490 generateREXprefix(false, dstReg, null, srcReg); 39491 setMachineCodes(mi++, (byte) 0x0F); 39492 setMachineCodes(mi++, (byte) 0x7E); 39493 emitRegRegOperands(srcReg, dstReg); 39494 if (lister != null) lister.RR(miStart, "MOVQ", dstReg, srcReg); 39495 } 39496 39497 /** 39498 * Generate a register--register-displacement MOVQ. That is, 39499 * <PRE> 39500 * dstReg <<= (quad) [srcBase + srcDisp] 39501 * </PRE> 39502 * 39503 * @param dstReg destination register 39504 * @param srcBase the source base register 39505 * @param srcDisp the source displacement 39506 */ 39507 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39508 public final void emitMOVQ_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 39509 int miStart = mi; 39510 setMachineCodes(mi++, (byte) 0xF3); 39511 generateREXprefix(false, dstReg, null, srcBase); 39512 setMachineCodes(mi++, (byte) 0x0F); 39513 setMachineCodes(mi++, (byte) 0x7E); 39514 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 39515 if (lister != null) lister.RRD(miStart, "MOVQ", dstReg, srcBase, srcDisp); 39516 } 39517 39518 /** 39519 * Generate a register--register-offset MOVQ. That is, 39520 * <PRE> 39521 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 39522 * </PRE> 39523 * 39524 * @param dstReg destination register 39525 * @param srcIndex the source index register 39526 * @param srcScale the source scale 39527 * @param srcDisp the source displacement 39528 */ 39529 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39530 public final void emitMOVQ_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 39531 int miStart = mi; 39532 setMachineCodes(mi++, (byte) 0xF3); 39533 generateREXprefix(false, dstReg, srcIndex, null); 39534 setMachineCodes(mi++, (byte) 0x0F); 39535 setMachineCodes(mi++, (byte) 0x7E); 39536 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 39537 if (lister != null) lister.RRFD(miStart, "MOVQ", dstReg, srcIndex, srcScale, srcDisp); 39538 } 39539 39540 /** 39541 * Generate a register--absolute MOVQ. That is, 39542 * <PRE> 39543 * dstReg <<= (quad) [srcDisp] 39544 * </PRE> 39545 * 39546 * @param dstReg destination register 39547 * @param srcDisp the source displacement 39548 */ 39549 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 39550 public final void emitMOVQ_Reg_Abs(XMM dstReg, Address srcDisp) { 39551 int miStart = mi; 39552 setMachineCodes(mi++, (byte) 0xF3); 39553 generateREXprefix(false, dstReg, null, null); 39554 setMachineCodes(mi++, (byte) 0x0F); 39555 setMachineCodes(mi++, (byte) 0x7E); 39556 emitAbsRegOperands(srcDisp, dstReg); 39557 if (lister != null) lister.RRA(miStart, "MOVQ", dstReg, srcDisp); 39558 } 39559 39560 /** 39561 * Generate a register--register-index MOVQ. That is, 39562 * <PRE> 39563 * dstReg <<= (quad) srcReg 39564 * </PRE> 39565 * 39566 * @param dstReg destination register 39567 * @param srcBase the source base register 39568 * @param srcIndex the source index register 39569 * @param srcScale the source scale 39570 * @param srcDisp the source displacement 39571 */ 39572 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 39573 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 39574 public final void emitMOVQ_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 39575 int miStart = mi; 39576 setMachineCodes(mi++, (byte) 0xF3); 39577 generateREXprefix(false, dstReg, srcIndex, srcBase); 39578 setMachineCodes(mi++, (byte) 0x0F); 39579 setMachineCodes(mi++, (byte) 0x7E); 39580 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 39581 if (lister != null) lister.RRXD(miStart, "MOVQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 39582 } 39583 39584 /** 39585 * Generate a register--register-indirect MOVQ. That is, 39586 * <PRE> 39587 * dstReg <<= (quad) [srcBase] 39588 * </PRE> 39589 * 39590 * @param dstReg destination register 39591 * @param srcBase the source base register 39592 */ 39593 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39594 public final void emitMOVQ_Reg_RegInd(XMM dstReg, GPR srcBase) { 39595 int miStart = mi; 39596 setMachineCodes(mi++, (byte) 0xF3); 39597 generateREXprefix(false, dstReg, null, srcBase); 39598 setMachineCodes(mi++, (byte) 0x0F); 39599 setMachineCodes(mi++, (byte) 0x7E); 39600 emitRegIndirectRegOperands(srcBase, dstReg); 39601 if (lister != null) lister.RRN(miStart, "MOVQ", dstReg, srcBase); 39602 } 39603 39604 39605 /** 39606 * Generate a register-indirect--register MOVQ. That is, 39607 * <PRE> 39608 * [dstBase] <<= (quad) srcReg 39609 * </PRE> 39610 * 39611 * @param dstBase the destination base register 39612 * @param srcReg the source register 39613 */ 39614 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39615 public final void emitMOVQ_RegInd_Reg(GPR dstBase, XMM srcReg) { 39616 int miStart = mi; 39617 setMachineCodes(mi++, (byte) 0x66); 39618 generateREXprefix(false, srcReg, null, dstBase); 39619 setMachineCodes(mi++, (byte) 0x0F); 39620 setMachineCodes(mi++, (byte) 0xD6); 39621 emitRegIndirectRegOperands(dstBase, srcReg); 39622 if (lister != null) lister.RNR(miStart, "MOVQ", dstBase, srcReg); 39623 } 39624 39625 /** 39626 * Generate a register-offset--register MOVQ. That is, 39627 * <PRE> 39628 * [dstReg<<dstScale + dstDisp] <<= (quad) srcReg 39629 * </PRE> 39630 * 39631 * @param dstIndex the destination index register 39632 * @param dstScale the destination shift amount 39633 * @param dstDisp the destination displacement 39634 * @param srcReg the source register 39635 */ 39636 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 39637 public final void emitMOVQ_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 39638 int miStart = mi; 39639 setMachineCodes(mi++, (byte) 0x66); 39640 generateREXprefix(false, srcReg, dstIndex, null); 39641 setMachineCodes(mi++, (byte) 0x0F); 39642 setMachineCodes(mi++, (byte) 0xD6); 39643 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 39644 if (lister != null) lister.RFDR(miStart, "MOVQ", dstIndex, dstScale, dstDisp, srcReg); 39645 } 39646 39647 /** 39648 * Generate a absolute--register MOVQ. That is, 39649 * <PRE> 39650 * [dstDisp] <<= (quad) srcReg 39651 * </PRE> 39652 * 39653 * @param dstDisp the destination displacement 39654 * @param srcReg the source register 39655 */ 39656 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 39657 public final void emitMOVQ_Abs_Reg(Address dstDisp, XMM srcReg) { 39658 int miStart = mi; 39659 setMachineCodes(mi++, (byte) 0x66); 39660 generateREXprefix(false, srcReg, null, null); 39661 setMachineCodes(mi++, (byte) 0x0F); 39662 setMachineCodes(mi++, (byte) 0xD6); 39663 emitAbsRegOperands(dstDisp, srcReg); 39664 if (lister != null) lister.RAR(miStart, "MOVQ", dstDisp, srcReg); 39665 } 39666 39667 /** 39668 * Generate a register-index--register MOVQ. That is, 39669 * <PRE> 39670 * [dstBase + dstIndex<<dstScale + dstDisp] <<= (quad) srcReg 39671 * </PRE> 39672 * 39673 * @param dstBase the destination base register 39674 * @param dstIndex the destination index register 39675 * @param dstScale the destination shift amount 39676 * @param dstDisp the destination displacement 39677 * @param srcReg the source register 39678 */ 39679 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 39680 public final void emitMOVQ_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 39681 int miStart = mi; 39682 setMachineCodes(mi++, (byte) 0x66); 39683 generateREXprefix(false, srcReg, dstIndex, dstBase); 39684 setMachineCodes(mi++, (byte) 0x0F); 39685 setMachineCodes(mi++, (byte) 0xD6); 39686 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 39687 if (lister != null) lister.RXDR(miStart, "MOVQ", dstBase, dstIndex, dstScale, dstDisp, srcReg); 39688 } 39689 39690 /** 39691 * Generate a register-displacement--register MOVQ. That is, 39692 * <PRE> 39693 * [dstBase + dstDisp] <<= (quad) srcReg 39694 * </PRE> 39695 * 39696 * @param dstBase the destination base register 39697 * @param dstDisp the destination displacement 39698 * @param srcReg the source register 39699 */ 39700 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 39701 public final void emitMOVQ_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) { 39702 int miStart = mi; 39703 setMachineCodes(mi++, (byte) 0x66); 39704 generateREXprefix(false, srcReg, null, dstBase); 39705 setMachineCodes(mi++, (byte) 0x0F); 39706 setMachineCodes(mi++, (byte) 0xD6); 39707 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 39708 if (lister != null) lister.RDR(miStart, "MOVQ", dstBase, dstDisp, srcReg); 39709 } 39710 39711 39712 /** 39713 * Generate a register--register ADDSD. That is, 39714 * <PRE> 39715 * dstReg <<= (quad) srcReg 39716 * </PRE> 39717 * 39718 * @param dstReg destination register 39719 * @param srcReg source register 39720 */ 39721 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39722 public final void emitADDSD_Reg_Reg(XMM dstReg, XMM srcReg) { 39723 int miStart = mi; 39724 setMachineCodes(mi++, (byte) 0xF2); 39725 generateREXprefix(false, dstReg, null, srcReg); 39726 setMachineCodes(mi++, (byte) 0x0F); 39727 setMachineCodes(mi++, (byte) 0x58); 39728 emitRegRegOperands(srcReg, dstReg); 39729 if (lister != null) lister.RR(miStart, "ADDSD", dstReg, srcReg); 39730 } 39731 39732 /** 39733 * Generate a register--register-displacement ADDSD. That is, 39734 * <PRE> 39735 * dstReg <<= (quad) [srcBase + srcDisp] 39736 * </PRE> 39737 * 39738 * @param dstReg destination register 39739 * @param srcBase the source base register 39740 * @param srcDisp the source displacement 39741 */ 39742 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39743 public final void emitADDSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 39744 int miStart = mi; 39745 setMachineCodes(mi++, (byte) 0xF2); 39746 generateREXprefix(false, dstReg, null, srcBase); 39747 setMachineCodes(mi++, (byte) 0x0F); 39748 setMachineCodes(mi++, (byte) 0x58); 39749 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 39750 if (lister != null) lister.RRD(miStart, "ADDSD", dstReg, srcBase, srcDisp); 39751 } 39752 39753 /** 39754 * Generate a register--register-offset ADDSD. That is, 39755 * <PRE> 39756 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 39757 * </PRE> 39758 * 39759 * @param dstReg destination register 39760 * @param srcIndex the source index register 39761 * @param srcScale the source scale 39762 * @param srcDisp the source displacement 39763 */ 39764 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39765 public final void emitADDSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 39766 int miStart = mi; 39767 setMachineCodes(mi++, (byte) 0xF2); 39768 generateREXprefix(false, dstReg, srcIndex, null); 39769 setMachineCodes(mi++, (byte) 0x0F); 39770 setMachineCodes(mi++, (byte) 0x58); 39771 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 39772 if (lister != null) lister.RRFD(miStart, "ADDSD", dstReg, srcIndex, srcScale, srcDisp); 39773 } 39774 39775 /** 39776 * Generate a register--absolute ADDSD. That is, 39777 * <PRE> 39778 * dstReg <<= (quad) [srcDisp] 39779 * </PRE> 39780 * 39781 * @param dstReg destination register 39782 * @param srcDisp the source displacement 39783 */ 39784 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 39785 public final void emitADDSD_Reg_Abs(XMM dstReg, Address srcDisp) { 39786 int miStart = mi; 39787 setMachineCodes(mi++, (byte) 0xF2); 39788 generateREXprefix(false, dstReg, null, null); 39789 setMachineCodes(mi++, (byte) 0x0F); 39790 setMachineCodes(mi++, (byte) 0x58); 39791 emitAbsRegOperands(srcDisp, dstReg); 39792 if (lister != null) lister.RRA(miStart, "ADDSD", dstReg, srcDisp); 39793 } 39794 39795 /** 39796 * Generate a register--register-index ADDSD. That is, 39797 * <PRE> 39798 * dstReg <<= (quad) srcReg 39799 * </PRE> 39800 * 39801 * @param dstReg destination register 39802 * @param srcBase the source base register 39803 * @param srcIndex the source index register 39804 * @param srcScale the source scale 39805 * @param srcDisp the source displacement 39806 */ 39807 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 39808 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 39809 public final void emitADDSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 39810 int miStart = mi; 39811 setMachineCodes(mi++, (byte) 0xF2); 39812 generateREXprefix(false, dstReg, srcIndex, srcBase); 39813 setMachineCodes(mi++, (byte) 0x0F); 39814 setMachineCodes(mi++, (byte) 0x58); 39815 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 39816 if (lister != null) lister.RRXD(miStart, "ADDSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 39817 } 39818 39819 /** 39820 * Generate a register--register-indirect ADDSD. That is, 39821 * <PRE> 39822 * dstReg <<= (quad) [srcBase] 39823 * </PRE> 39824 * 39825 * @param dstReg destination register 39826 * @param srcBase the source base register 39827 */ 39828 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39829 public final void emitADDSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 39830 int miStart = mi; 39831 setMachineCodes(mi++, (byte) 0xF2); 39832 generateREXprefix(false, dstReg, null, srcBase); 39833 setMachineCodes(mi++, (byte) 0x0F); 39834 setMachineCodes(mi++, (byte) 0x58); 39835 emitRegIndirectRegOperands(srcBase, dstReg); 39836 if (lister != null) lister.RRN(miStart, "ADDSD", dstReg, srcBase); 39837 } 39838 39839 39840 /** 39841 * Generate a register--register SUBSD. That is, 39842 * <PRE> 39843 * dstReg <<= (quad) srcReg 39844 * </PRE> 39845 * 39846 * @param dstReg destination register 39847 * @param srcReg source register 39848 */ 39849 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39850 public final void emitSUBSD_Reg_Reg(XMM dstReg, XMM srcReg) { 39851 int miStart = mi; 39852 setMachineCodes(mi++, (byte) 0xF2); 39853 generateREXprefix(false, dstReg, null, srcReg); 39854 setMachineCodes(mi++, (byte) 0x0F); 39855 setMachineCodes(mi++, (byte) 0x5C); 39856 emitRegRegOperands(srcReg, dstReg); 39857 if (lister != null) lister.RR(miStart, "SUBSD", dstReg, srcReg); 39858 } 39859 39860 /** 39861 * Generate a register--register-displacement SUBSD. That is, 39862 * <PRE> 39863 * dstReg <<= (quad) [srcBase + srcDisp] 39864 * </PRE> 39865 * 39866 * @param dstReg destination register 39867 * @param srcBase the source base register 39868 * @param srcDisp the source displacement 39869 */ 39870 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39871 public final void emitSUBSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 39872 int miStart = mi; 39873 setMachineCodes(mi++, (byte) 0xF2); 39874 generateREXprefix(false, dstReg, null, srcBase); 39875 setMachineCodes(mi++, (byte) 0x0F); 39876 setMachineCodes(mi++, (byte) 0x5C); 39877 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 39878 if (lister != null) lister.RRD(miStart, "SUBSD", dstReg, srcBase, srcDisp); 39879 } 39880 39881 /** 39882 * Generate a register--register-offset SUBSD. That is, 39883 * <PRE> 39884 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 39885 * </PRE> 39886 * 39887 * @param dstReg destination register 39888 * @param srcIndex the source index register 39889 * @param srcScale the source scale 39890 * @param srcDisp the source displacement 39891 */ 39892 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39893 public final void emitSUBSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 39894 int miStart = mi; 39895 setMachineCodes(mi++, (byte) 0xF2); 39896 generateREXprefix(false, dstReg, srcIndex, null); 39897 setMachineCodes(mi++, (byte) 0x0F); 39898 setMachineCodes(mi++, (byte) 0x5C); 39899 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 39900 if (lister != null) lister.RRFD(miStart, "SUBSD", dstReg, srcIndex, srcScale, srcDisp); 39901 } 39902 39903 /** 39904 * Generate a register--absolute SUBSD. That is, 39905 * <PRE> 39906 * dstReg <<= (quad) [srcDisp] 39907 * </PRE> 39908 * 39909 * @param dstReg destination register 39910 * @param srcDisp the source displacement 39911 */ 39912 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 39913 public final void emitSUBSD_Reg_Abs(XMM dstReg, Address srcDisp) { 39914 int miStart = mi; 39915 setMachineCodes(mi++, (byte) 0xF2); 39916 generateREXprefix(false, dstReg, null, null); 39917 setMachineCodes(mi++, (byte) 0x0F); 39918 setMachineCodes(mi++, (byte) 0x5C); 39919 emitAbsRegOperands(srcDisp, dstReg); 39920 if (lister != null) lister.RRA(miStart, "SUBSD", dstReg, srcDisp); 39921 } 39922 39923 /** 39924 * Generate a register--register-index SUBSD. That is, 39925 * <PRE> 39926 * dstReg <<= (quad) srcReg 39927 * </PRE> 39928 * 39929 * @param dstReg destination register 39930 * @param srcBase the source base register 39931 * @param srcIndex the source index register 39932 * @param srcScale the source scale 39933 * @param srcDisp the source displacement 39934 */ 39935 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 39936 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 39937 public final void emitSUBSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 39938 int miStart = mi; 39939 setMachineCodes(mi++, (byte) 0xF2); 39940 generateREXprefix(false, dstReg, srcIndex, srcBase); 39941 setMachineCodes(mi++, (byte) 0x0F); 39942 setMachineCodes(mi++, (byte) 0x5C); 39943 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 39944 if (lister != null) lister.RRXD(miStart, "SUBSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 39945 } 39946 39947 /** 39948 * Generate a register--register-indirect SUBSD. That is, 39949 * <PRE> 39950 * dstReg <<= (quad) [srcBase] 39951 * </PRE> 39952 * 39953 * @param dstReg destination register 39954 * @param srcBase the source base register 39955 */ 39956 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39957 public final void emitSUBSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 39958 int miStart = mi; 39959 setMachineCodes(mi++, (byte) 0xF2); 39960 generateREXprefix(false, dstReg, null, srcBase); 39961 setMachineCodes(mi++, (byte) 0x0F); 39962 setMachineCodes(mi++, (byte) 0x5C); 39963 emitRegIndirectRegOperands(srcBase, dstReg); 39964 if (lister != null) lister.RRN(miStart, "SUBSD", dstReg, srcBase); 39965 } 39966 39967 39968 /** 39969 * Generate a register--register MULSD. That is, 39970 * <PRE> 39971 * dstReg <<= (quad) srcReg 39972 * </PRE> 39973 * 39974 * @param dstReg destination register 39975 * @param srcReg source register 39976 */ 39977 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39978 public final void emitMULSD_Reg_Reg(XMM dstReg, XMM srcReg) { 39979 int miStart = mi; 39980 setMachineCodes(mi++, (byte) 0xF2); 39981 generateREXprefix(false, dstReg, null, srcReg); 39982 setMachineCodes(mi++, (byte) 0x0F); 39983 setMachineCodes(mi++, (byte) 0x59); 39984 emitRegRegOperands(srcReg, dstReg); 39985 if (lister != null) lister.RR(miStart, "MULSD", dstReg, srcReg); 39986 } 39987 39988 /** 39989 * Generate a register--register-displacement MULSD. That is, 39990 * <PRE> 39991 * dstReg <<= (quad) [srcBase + srcDisp] 39992 * </PRE> 39993 * 39994 * @param dstReg destination register 39995 * @param srcBase the source base register 39996 * @param srcDisp the source displacement 39997 */ 39998 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 39999 public final void emitMULSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 40000 int miStart = mi; 40001 setMachineCodes(mi++, (byte) 0xF2); 40002 generateREXprefix(false, dstReg, null, srcBase); 40003 setMachineCodes(mi++, (byte) 0x0F); 40004 setMachineCodes(mi++, (byte) 0x59); 40005 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 40006 if (lister != null) lister.RRD(miStart, "MULSD", dstReg, srcBase, srcDisp); 40007 } 40008 40009 /** 40010 * Generate a register--register-offset MULSD. That is, 40011 * <PRE> 40012 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 40013 * </PRE> 40014 * 40015 * @param dstReg destination register 40016 * @param srcIndex the source index register 40017 * @param srcScale the source scale 40018 * @param srcDisp the source displacement 40019 */ 40020 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40021 public final void emitMULSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 40022 int miStart = mi; 40023 setMachineCodes(mi++, (byte) 0xF2); 40024 generateREXprefix(false, dstReg, srcIndex, null); 40025 setMachineCodes(mi++, (byte) 0x0F); 40026 setMachineCodes(mi++, (byte) 0x59); 40027 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 40028 if (lister != null) lister.RRFD(miStart, "MULSD", dstReg, srcIndex, srcScale, srcDisp); 40029 } 40030 40031 /** 40032 * Generate a register--absolute MULSD. That is, 40033 * <PRE> 40034 * dstReg <<= (quad) [srcDisp] 40035 * </PRE> 40036 * 40037 * @param dstReg destination register 40038 * @param srcDisp the source displacement 40039 */ 40040 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 40041 public final void emitMULSD_Reg_Abs(XMM dstReg, Address srcDisp) { 40042 int miStart = mi; 40043 setMachineCodes(mi++, (byte) 0xF2); 40044 generateREXprefix(false, dstReg, null, null); 40045 setMachineCodes(mi++, (byte) 0x0F); 40046 setMachineCodes(mi++, (byte) 0x59); 40047 emitAbsRegOperands(srcDisp, dstReg); 40048 if (lister != null) lister.RRA(miStart, "MULSD", dstReg, srcDisp); 40049 } 40050 40051 /** 40052 * Generate a register--register-index MULSD. That is, 40053 * <PRE> 40054 * dstReg <<= (quad) srcReg 40055 * </PRE> 40056 * 40057 * @param dstReg destination register 40058 * @param srcBase the source base register 40059 * @param srcIndex the source index register 40060 * @param srcScale the source scale 40061 * @param srcDisp the source displacement 40062 */ 40063 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 40064 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 40065 public final void emitMULSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 40066 int miStart = mi; 40067 setMachineCodes(mi++, (byte) 0xF2); 40068 generateREXprefix(false, dstReg, srcIndex, srcBase); 40069 setMachineCodes(mi++, (byte) 0x0F); 40070 setMachineCodes(mi++, (byte) 0x59); 40071 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 40072 if (lister != null) lister.RRXD(miStart, "MULSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 40073 } 40074 40075 /** 40076 * Generate a register--register-indirect MULSD. That is, 40077 * <PRE> 40078 * dstReg <<= (quad) [srcBase] 40079 * </PRE> 40080 * 40081 * @param dstReg destination register 40082 * @param srcBase the source base register 40083 */ 40084 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40085 public final void emitMULSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 40086 int miStart = mi; 40087 setMachineCodes(mi++, (byte) 0xF2); 40088 generateREXprefix(false, dstReg, null, srcBase); 40089 setMachineCodes(mi++, (byte) 0x0F); 40090 setMachineCodes(mi++, (byte) 0x59); 40091 emitRegIndirectRegOperands(srcBase, dstReg); 40092 if (lister != null) lister.RRN(miStart, "MULSD", dstReg, srcBase); 40093 } 40094 40095 40096 /** 40097 * Generate a register--register DIVSD. That is, 40098 * <PRE> 40099 * dstReg <<= (quad) srcReg 40100 * </PRE> 40101 * 40102 * @param dstReg destination register 40103 * @param srcReg source register 40104 */ 40105 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40106 public final void emitDIVSD_Reg_Reg(XMM dstReg, XMM srcReg) { 40107 int miStart = mi; 40108 setMachineCodes(mi++, (byte) 0xF2); 40109 generateREXprefix(false, dstReg, null, srcReg); 40110 setMachineCodes(mi++, (byte) 0x0F); 40111 setMachineCodes(mi++, (byte) 0x5E); 40112 emitRegRegOperands(srcReg, dstReg); 40113 if (lister != null) lister.RR(miStart, "DIVSD", dstReg, srcReg); 40114 } 40115 40116 /** 40117 * Generate a register--register-displacement DIVSD. That is, 40118 * <PRE> 40119 * dstReg <<= (quad) [srcBase + srcDisp] 40120 * </PRE> 40121 * 40122 * @param dstReg destination register 40123 * @param srcBase the source base register 40124 * @param srcDisp the source displacement 40125 */ 40126 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40127 public final void emitDIVSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 40128 int miStart = mi; 40129 setMachineCodes(mi++, (byte) 0xF2); 40130 generateREXprefix(false, dstReg, null, srcBase); 40131 setMachineCodes(mi++, (byte) 0x0F); 40132 setMachineCodes(mi++, (byte) 0x5E); 40133 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 40134 if (lister != null) lister.RRD(miStart, "DIVSD", dstReg, srcBase, srcDisp); 40135 } 40136 40137 /** 40138 * Generate a register--register-offset DIVSD. That is, 40139 * <PRE> 40140 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 40141 * </PRE> 40142 * 40143 * @param dstReg destination register 40144 * @param srcIndex the source index register 40145 * @param srcScale the source scale 40146 * @param srcDisp the source displacement 40147 */ 40148 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40149 public final void emitDIVSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 40150 int miStart = mi; 40151 setMachineCodes(mi++, (byte) 0xF2); 40152 generateREXprefix(false, dstReg, srcIndex, null); 40153 setMachineCodes(mi++, (byte) 0x0F); 40154 setMachineCodes(mi++, (byte) 0x5E); 40155 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 40156 if (lister != null) lister.RRFD(miStart, "DIVSD", dstReg, srcIndex, srcScale, srcDisp); 40157 } 40158 40159 /** 40160 * Generate a register--absolute DIVSD. That is, 40161 * <PRE> 40162 * dstReg <<= (quad) [srcDisp] 40163 * </PRE> 40164 * 40165 * @param dstReg destination register 40166 * @param srcDisp the source displacement 40167 */ 40168 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 40169 public final void emitDIVSD_Reg_Abs(XMM dstReg, Address srcDisp) { 40170 int miStart = mi; 40171 setMachineCodes(mi++, (byte) 0xF2); 40172 generateREXprefix(false, dstReg, null, null); 40173 setMachineCodes(mi++, (byte) 0x0F); 40174 setMachineCodes(mi++, (byte) 0x5E); 40175 emitAbsRegOperands(srcDisp, dstReg); 40176 if (lister != null) lister.RRA(miStart, "DIVSD", dstReg, srcDisp); 40177 } 40178 40179 /** 40180 * Generate a register--register-index DIVSD. That is, 40181 * <PRE> 40182 * dstReg <<= (quad) srcReg 40183 * </PRE> 40184 * 40185 * @param dstReg destination register 40186 * @param srcBase the source base register 40187 * @param srcIndex the source index register 40188 * @param srcScale the source scale 40189 * @param srcDisp the source displacement 40190 */ 40191 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 40192 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 40193 public final void emitDIVSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 40194 int miStart = mi; 40195 setMachineCodes(mi++, (byte) 0xF2); 40196 generateREXprefix(false, dstReg, srcIndex, srcBase); 40197 setMachineCodes(mi++, (byte) 0x0F); 40198 setMachineCodes(mi++, (byte) 0x5E); 40199 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 40200 if (lister != null) lister.RRXD(miStart, "DIVSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 40201 } 40202 40203 /** 40204 * Generate a register--register-indirect DIVSD. That is, 40205 * <PRE> 40206 * dstReg <<= (quad) [srcBase] 40207 * </PRE> 40208 * 40209 * @param dstReg destination register 40210 * @param srcBase the source base register 40211 */ 40212 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40213 public final void emitDIVSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 40214 int miStart = mi; 40215 setMachineCodes(mi++, (byte) 0xF2); 40216 generateREXprefix(false, dstReg, null, srcBase); 40217 setMachineCodes(mi++, (byte) 0x0F); 40218 setMachineCodes(mi++, (byte) 0x5E); 40219 emitRegIndirectRegOperands(srcBase, dstReg); 40220 if (lister != null) lister.RRN(miStart, "DIVSD", dstReg, srcBase); 40221 } 40222 40223 40224 /** 40225 * Generate a register--register MOVSD. That is, 40226 * <PRE> 40227 * dstReg <<= (quad) srcReg 40228 * </PRE> 40229 * 40230 * @param dstReg destination register 40231 * @param srcReg source register 40232 */ 40233 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40234 public final void emitMOVSD_Reg_Reg(XMM dstReg, XMM srcReg) { 40235 int miStart = mi; 40236 setMachineCodes(mi++, (byte) 0xF2); 40237 generateREXprefix(false, dstReg, null, srcReg); 40238 setMachineCodes(mi++, (byte) 0x0F); 40239 setMachineCodes(mi++, (byte) 0x10); 40240 emitRegRegOperands(srcReg, dstReg); 40241 if (lister != null) lister.RR(miStart, "MOVSD", dstReg, srcReg); 40242 } 40243 40244 /** 40245 * Generate a register--register-displacement MOVSD. That is, 40246 * <PRE> 40247 * dstReg <<= (quad) [srcBase + srcDisp] 40248 * </PRE> 40249 * 40250 * @param dstReg destination register 40251 * @param srcBase the source base register 40252 * @param srcDisp the source displacement 40253 */ 40254 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40255 public final void emitMOVSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 40256 int miStart = mi; 40257 setMachineCodes(mi++, (byte) 0xF2); 40258 generateREXprefix(false, dstReg, null, srcBase); 40259 setMachineCodes(mi++, (byte) 0x0F); 40260 setMachineCodes(mi++, (byte) 0x10); 40261 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 40262 if (lister != null) lister.RRD(miStart, "MOVSD", dstReg, srcBase, srcDisp); 40263 } 40264 40265 /** 40266 * Generate a register--register-offset MOVSD. That is, 40267 * <PRE> 40268 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 40269 * </PRE> 40270 * 40271 * @param dstReg destination register 40272 * @param srcIndex the source index register 40273 * @param srcScale the source scale 40274 * @param srcDisp the source displacement 40275 */ 40276 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40277 public final void emitMOVSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 40278 int miStart = mi; 40279 setMachineCodes(mi++, (byte) 0xF2); 40280 generateREXprefix(false, dstReg, srcIndex, null); 40281 setMachineCodes(mi++, (byte) 0x0F); 40282 setMachineCodes(mi++, (byte) 0x10); 40283 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 40284 if (lister != null) lister.RRFD(miStart, "MOVSD", dstReg, srcIndex, srcScale, srcDisp); 40285 } 40286 40287 /** 40288 * Generate a register--absolute MOVSD. That is, 40289 * <PRE> 40290 * dstReg <<= (quad) [srcDisp] 40291 * </PRE> 40292 * 40293 * @param dstReg destination register 40294 * @param srcDisp the source displacement 40295 */ 40296 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 40297 public final void emitMOVSD_Reg_Abs(XMM dstReg, Address srcDisp) { 40298 int miStart = mi; 40299 setMachineCodes(mi++, (byte) 0xF2); 40300 generateREXprefix(false, dstReg, null, null); 40301 setMachineCodes(mi++, (byte) 0x0F); 40302 setMachineCodes(mi++, (byte) 0x10); 40303 emitAbsRegOperands(srcDisp, dstReg); 40304 if (lister != null) lister.RRA(miStart, "MOVSD", dstReg, srcDisp); 40305 } 40306 40307 /** 40308 * Generate a register--register-index MOVSD. That is, 40309 * <PRE> 40310 * dstReg <<= (quad) srcReg 40311 * </PRE> 40312 * 40313 * @param dstReg destination register 40314 * @param srcBase the source base register 40315 * @param srcIndex the source index register 40316 * @param srcScale the source scale 40317 * @param srcDisp the source displacement 40318 */ 40319 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 40320 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 40321 public final void emitMOVSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 40322 int miStart = mi; 40323 setMachineCodes(mi++, (byte) 0xF2); 40324 generateREXprefix(false, dstReg, srcIndex, srcBase); 40325 setMachineCodes(mi++, (byte) 0x0F); 40326 setMachineCodes(mi++, (byte) 0x10); 40327 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 40328 if (lister != null) lister.RRXD(miStart, "MOVSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 40329 } 40330 40331 /** 40332 * Generate a register--register-indirect MOVSD. That is, 40333 * <PRE> 40334 * dstReg <<= (quad) [srcBase] 40335 * </PRE> 40336 * 40337 * @param dstReg destination register 40338 * @param srcBase the source base register 40339 */ 40340 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40341 public final void emitMOVSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 40342 int miStart = mi; 40343 setMachineCodes(mi++, (byte) 0xF2); 40344 generateREXprefix(false, dstReg, null, srcBase); 40345 setMachineCodes(mi++, (byte) 0x0F); 40346 setMachineCodes(mi++, (byte) 0x10); 40347 emitRegIndirectRegOperands(srcBase, dstReg); 40348 if (lister != null) lister.RRN(miStart, "MOVSD", dstReg, srcBase); 40349 } 40350 40351 40352 /** 40353 * Generate a register-indirect--register MOVSD. That is, 40354 * <PRE> 40355 * [dstBase] <<= (quad) srcReg 40356 * </PRE> 40357 * 40358 * @param dstBase the destination base register 40359 * @param srcReg the source register 40360 */ 40361 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40362 public final void emitMOVSD_RegInd_Reg(GPR dstBase, XMM srcReg) { 40363 int miStart = mi; 40364 setMachineCodes(mi++, (byte) 0xF2); 40365 generateREXprefix(false, srcReg, null, dstBase); 40366 setMachineCodes(mi++, (byte) 0x0F); 40367 setMachineCodes(mi++, (byte) 0x11); 40368 emitRegIndirectRegOperands(dstBase, srcReg); 40369 if (lister != null) lister.RNR(miStart, "MOVSD", dstBase, srcReg); 40370 } 40371 40372 /** 40373 * Generate a register-offset--register MOVSD. That is, 40374 * <PRE> 40375 * [dstReg<<dstScale + dstDisp] <<= (quad) srcReg 40376 * </PRE> 40377 * 40378 * @param dstIndex the destination index register 40379 * @param dstScale the destination shift amount 40380 * @param dstDisp the destination displacement 40381 * @param srcReg the source register 40382 */ 40383 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 40384 public final void emitMOVSD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 40385 int miStart = mi; 40386 setMachineCodes(mi++, (byte) 0xF2); 40387 generateREXprefix(false, srcReg, dstIndex, null); 40388 setMachineCodes(mi++, (byte) 0x0F); 40389 setMachineCodes(mi++, (byte) 0x11); 40390 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 40391 if (lister != null) lister.RFDR(miStart, "MOVSD", dstIndex, dstScale, dstDisp, srcReg); 40392 } 40393 40394 /** 40395 * Generate a absolute--register MOVSD. That is, 40396 * <PRE> 40397 * [dstDisp] <<= (quad) srcReg 40398 * </PRE> 40399 * 40400 * @param dstDisp the destination displacement 40401 * @param srcReg the source register 40402 */ 40403 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 40404 public final void emitMOVSD_Abs_Reg(Address dstDisp, XMM srcReg) { 40405 int miStart = mi; 40406 setMachineCodes(mi++, (byte) 0xF2); 40407 generateREXprefix(false, srcReg, null, null); 40408 setMachineCodes(mi++, (byte) 0x0F); 40409 setMachineCodes(mi++, (byte) 0x11); 40410 emitAbsRegOperands(dstDisp, srcReg); 40411 if (lister != null) lister.RAR(miStart, "MOVSD", dstDisp, srcReg); 40412 } 40413 40414 /** 40415 * Generate a register-index--register MOVSD. That is, 40416 * <PRE> 40417 * [dstBase + dstIndex<<dstScale + dstDisp] <<= (quad) srcReg 40418 * </PRE> 40419 * 40420 * @param dstBase the destination base register 40421 * @param dstIndex the destination index register 40422 * @param dstScale the destination shift amount 40423 * @param dstDisp the destination displacement 40424 * @param srcReg the source register 40425 */ 40426 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 40427 public final void emitMOVSD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 40428 int miStart = mi; 40429 setMachineCodes(mi++, (byte) 0xF2); 40430 generateREXprefix(false, srcReg, dstIndex, dstBase); 40431 setMachineCodes(mi++, (byte) 0x0F); 40432 setMachineCodes(mi++, (byte) 0x11); 40433 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 40434 if (lister != null) lister.RXDR(miStart, "MOVSD", dstBase, dstIndex, dstScale, dstDisp, srcReg); 40435 } 40436 40437 /** 40438 * Generate a register-displacement--register MOVSD. That is, 40439 * <PRE> 40440 * [dstBase + dstDisp] <<= (quad) srcReg 40441 * </PRE> 40442 * 40443 * @param dstBase the destination base register 40444 * @param dstDisp the destination displacement 40445 * @param srcReg the source register 40446 */ 40447 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 40448 public final void emitMOVSD_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) { 40449 int miStart = mi; 40450 setMachineCodes(mi++, (byte) 0xF2); 40451 generateREXprefix(false, srcReg, null, dstBase); 40452 setMachineCodes(mi++, (byte) 0x0F); 40453 setMachineCodes(mi++, (byte) 0x11); 40454 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 40455 if (lister != null) lister.RDR(miStart, "MOVSD", dstBase, dstDisp, srcReg); 40456 } 40457 40458 40459 /** 40460 * Generate a register--register MOVLPD. That is, 40461 * <PRE> 40462 * dstReg <<= (quad) srcReg 40463 * </PRE> 40464 * 40465 * @param dstReg destination register 40466 * @param srcReg source register 40467 */ 40468 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40469 public final void emitMOVLPD_Reg_Reg(XMM dstReg, XMM srcReg) { 40470 int miStart = mi; 40471 setMachineCodes(mi++, (byte) 0x66); 40472 generateREXprefix(false, dstReg, null, srcReg); 40473 setMachineCodes(mi++, (byte) 0x0F); 40474 setMachineCodes(mi++, (byte) 0x12); 40475 emitRegRegOperands(srcReg, dstReg); 40476 if (lister != null) lister.RR(miStart, "MOVLPD", dstReg, srcReg); 40477 } 40478 40479 /** 40480 * Generate a register--register-displacement MOVLPD. That is, 40481 * <PRE> 40482 * dstReg <<= (quad) [srcBase + srcDisp] 40483 * </PRE> 40484 * 40485 * @param dstReg destination register 40486 * @param srcBase the source base register 40487 * @param srcDisp the source displacement 40488 */ 40489 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40490 public final void emitMOVLPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 40491 int miStart = mi; 40492 setMachineCodes(mi++, (byte) 0x66); 40493 generateREXprefix(false, dstReg, null, srcBase); 40494 setMachineCodes(mi++, (byte) 0x0F); 40495 setMachineCodes(mi++, (byte) 0x12); 40496 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 40497 if (lister != null) lister.RRD(miStart, "MOVLPD", dstReg, srcBase, srcDisp); 40498 } 40499 40500 /** 40501 * Generate a register--register-offset MOVLPD. That is, 40502 * <PRE> 40503 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 40504 * </PRE> 40505 * 40506 * @param dstReg destination register 40507 * @param srcIndex the source index register 40508 * @param srcScale the source scale 40509 * @param srcDisp the source displacement 40510 */ 40511 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40512 public final void emitMOVLPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 40513 int miStart = mi; 40514 setMachineCodes(mi++, (byte) 0x66); 40515 generateREXprefix(false, dstReg, srcIndex, null); 40516 setMachineCodes(mi++, (byte) 0x0F); 40517 setMachineCodes(mi++, (byte) 0x12); 40518 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 40519 if (lister != null) lister.RRFD(miStart, "MOVLPD", dstReg, srcIndex, srcScale, srcDisp); 40520 } 40521 40522 /** 40523 * Generate a register--absolute MOVLPD. That is, 40524 * <PRE> 40525 * dstReg <<= (quad) [srcDisp] 40526 * </PRE> 40527 * 40528 * @param dstReg destination register 40529 * @param srcDisp the source displacement 40530 */ 40531 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 40532 public final void emitMOVLPD_Reg_Abs(XMM dstReg, Address srcDisp) { 40533 int miStart = mi; 40534 setMachineCodes(mi++, (byte) 0x66); 40535 generateREXprefix(false, dstReg, null, null); 40536 setMachineCodes(mi++, (byte) 0x0F); 40537 setMachineCodes(mi++, (byte) 0x12); 40538 emitAbsRegOperands(srcDisp, dstReg); 40539 if (lister != null) lister.RRA(miStart, "MOVLPD", dstReg, srcDisp); 40540 } 40541 40542 /** 40543 * Generate a register--register-index MOVLPD. That is, 40544 * <PRE> 40545 * dstReg <<= (quad) srcReg 40546 * </PRE> 40547 * 40548 * @param dstReg destination register 40549 * @param srcBase the source base register 40550 * @param srcIndex the source index register 40551 * @param srcScale the source scale 40552 * @param srcDisp the source displacement 40553 */ 40554 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 40555 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 40556 public final void emitMOVLPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 40557 int miStart = mi; 40558 setMachineCodes(mi++, (byte) 0x66); 40559 generateREXprefix(false, dstReg, srcIndex, srcBase); 40560 setMachineCodes(mi++, (byte) 0x0F); 40561 setMachineCodes(mi++, (byte) 0x12); 40562 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 40563 if (lister != null) lister.RRXD(miStart, "MOVLPD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 40564 } 40565 40566 /** 40567 * Generate a register--register-indirect MOVLPD. That is, 40568 * <PRE> 40569 * dstReg <<= (quad) [srcBase] 40570 * </PRE> 40571 * 40572 * @param dstReg destination register 40573 * @param srcBase the source base register 40574 */ 40575 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40576 public final void emitMOVLPD_Reg_RegInd(XMM dstReg, GPR srcBase) { 40577 int miStart = mi; 40578 setMachineCodes(mi++, (byte) 0x66); 40579 generateREXprefix(false, dstReg, null, srcBase); 40580 setMachineCodes(mi++, (byte) 0x0F); 40581 setMachineCodes(mi++, (byte) 0x12); 40582 emitRegIndirectRegOperands(srcBase, dstReg); 40583 if (lister != null) lister.RRN(miStart, "MOVLPD", dstReg, srcBase); 40584 } 40585 40586 40587 /** 40588 * Generate a register-indirect--register MOVLPD. That is, 40589 * <PRE> 40590 * [dstBase] <<= (quad) srcReg 40591 * </PRE> 40592 * 40593 * @param dstBase the destination base register 40594 * @param srcReg the source register 40595 */ 40596 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40597 public final void emitMOVLPD_RegInd_Reg(GPR dstBase, XMM srcReg) { 40598 int miStart = mi; 40599 setMachineCodes(mi++, (byte) 0x66); 40600 generateREXprefix(false, srcReg, null, dstBase); 40601 setMachineCodes(mi++, (byte) 0x0F); 40602 setMachineCodes(mi++, (byte) 0x13); 40603 emitRegIndirectRegOperands(dstBase, srcReg); 40604 if (lister != null) lister.RNR(miStart, "MOVLPD", dstBase, srcReg); 40605 } 40606 40607 /** 40608 * Generate a register-offset--register MOVLPD. That is, 40609 * <PRE> 40610 * [dstReg<<dstScale + dstDisp] <<= (quad) srcReg 40611 * </PRE> 40612 * 40613 * @param dstIndex the destination index register 40614 * @param dstScale the destination shift amount 40615 * @param dstDisp the destination displacement 40616 * @param srcReg the source register 40617 */ 40618 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 40619 public final void emitMOVLPD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 40620 int miStart = mi; 40621 setMachineCodes(mi++, (byte) 0x66); 40622 generateREXprefix(false, srcReg, dstIndex, null); 40623 setMachineCodes(mi++, (byte) 0x0F); 40624 setMachineCodes(mi++, (byte) 0x13); 40625 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 40626 if (lister != null) lister.RFDR(miStart, "MOVLPD", dstIndex, dstScale, dstDisp, srcReg); 40627 } 40628 40629 /** 40630 * Generate a absolute--register MOVLPD. That is, 40631 * <PRE> 40632 * [dstDisp] <<= (quad) srcReg 40633 * </PRE> 40634 * 40635 * @param dstDisp the destination displacement 40636 * @param srcReg the source register 40637 */ 40638 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 40639 public final void emitMOVLPD_Abs_Reg(Address dstDisp, XMM srcReg) { 40640 int miStart = mi; 40641 setMachineCodes(mi++, (byte) 0x66); 40642 generateREXprefix(false, srcReg, null, null); 40643 setMachineCodes(mi++, (byte) 0x0F); 40644 setMachineCodes(mi++, (byte) 0x13); 40645 emitAbsRegOperands(dstDisp, srcReg); 40646 if (lister != null) lister.RAR(miStart, "MOVLPD", dstDisp, srcReg); 40647 } 40648 40649 /** 40650 * Generate a register-index--register MOVLPD. That is, 40651 * <PRE> 40652 * [dstBase + dstIndex<<dstScale + dstDisp] <<= (quad) srcReg 40653 * </PRE> 40654 * 40655 * @param dstBase the destination base register 40656 * @param dstIndex the destination index register 40657 * @param dstScale the destination shift amount 40658 * @param dstDisp the destination displacement 40659 * @param srcReg the source register 40660 */ 40661 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 40662 public final void emitMOVLPD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 40663 int miStart = mi; 40664 setMachineCodes(mi++, (byte) 0x66); 40665 generateREXprefix(false, srcReg, dstIndex, dstBase); 40666 setMachineCodes(mi++, (byte) 0x0F); 40667 setMachineCodes(mi++, (byte) 0x13); 40668 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 40669 if (lister != null) lister.RXDR(miStart, "MOVLPD", dstBase, dstIndex, dstScale, dstDisp, srcReg); 40670 } 40671 40672 /** 40673 * Generate a register-displacement--register MOVLPD. That is, 40674 * <PRE> 40675 * [dstBase + dstDisp] <<= (quad) srcReg 40676 * </PRE> 40677 * 40678 * @param dstBase the destination base register 40679 * @param dstDisp the destination displacement 40680 * @param srcReg the source register 40681 */ 40682 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 40683 public final void emitMOVLPD_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) { 40684 int miStart = mi; 40685 setMachineCodes(mi++, (byte) 0x66); 40686 generateREXprefix(false, srcReg, null, dstBase); 40687 setMachineCodes(mi++, (byte) 0x0F); 40688 setMachineCodes(mi++, (byte) 0x13); 40689 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 40690 if (lister != null) lister.RDR(miStart, "MOVLPD", dstBase, dstDisp, srcReg); 40691 } 40692 40693 40694 /** 40695 * Generate a register--register MOVAPD. That is, 40696 * <PRE> 40697 * dstReg <<= (quad) srcReg 40698 * </PRE> 40699 * 40700 * @param dstReg destination register 40701 * @param srcReg source register 40702 */ 40703 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40704 public final void emitMOVAPD_Reg_Reg(XMM dstReg, XMM srcReg) { 40705 int miStart = mi; 40706 setMachineCodes(mi++, (byte) 0x66); 40707 generateREXprefix(false, dstReg, null, srcReg); 40708 setMachineCodes(mi++, (byte) 0x0F); 40709 setMachineCodes(mi++, (byte) 0x28); 40710 emitRegRegOperands(srcReg, dstReg); 40711 if (lister != null) lister.RR(miStart, "MOVAPD", dstReg, srcReg); 40712 } 40713 40714 /** 40715 * Generate a register--register-displacement MOVAPD. That is, 40716 * <PRE> 40717 * dstReg <<= (quad) [srcBase + srcDisp] 40718 * </PRE> 40719 * 40720 * @param dstReg destination register 40721 * @param srcBase the source base register 40722 * @param srcDisp the source displacement 40723 */ 40724 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40725 public final void emitMOVAPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 40726 int miStart = mi; 40727 setMachineCodes(mi++, (byte) 0x66); 40728 generateREXprefix(false, dstReg, null, srcBase); 40729 setMachineCodes(mi++, (byte) 0x0F); 40730 setMachineCodes(mi++, (byte) 0x28); 40731 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 40732 if (lister != null) lister.RRD(miStart, "MOVAPD", dstReg, srcBase, srcDisp); 40733 } 40734 40735 /** 40736 * Generate a register--register-offset MOVAPD. That is, 40737 * <PRE> 40738 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 40739 * </PRE> 40740 * 40741 * @param dstReg destination register 40742 * @param srcIndex the source index register 40743 * @param srcScale the source scale 40744 * @param srcDisp the source displacement 40745 */ 40746 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40747 public final void emitMOVAPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 40748 int miStart = mi; 40749 setMachineCodes(mi++, (byte) 0x66); 40750 generateREXprefix(false, dstReg, srcIndex, null); 40751 setMachineCodes(mi++, (byte) 0x0F); 40752 setMachineCodes(mi++, (byte) 0x28); 40753 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 40754 if (lister != null) lister.RRFD(miStart, "MOVAPD", dstReg, srcIndex, srcScale, srcDisp); 40755 } 40756 40757 /** 40758 * Generate a register--absolute MOVAPD. That is, 40759 * <PRE> 40760 * dstReg <<= (quad) [srcDisp] 40761 * </PRE> 40762 * 40763 * @param dstReg destination register 40764 * @param srcDisp the source displacement 40765 */ 40766 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 40767 public final void emitMOVAPD_Reg_Abs(XMM dstReg, Address srcDisp) { 40768 int miStart = mi; 40769 setMachineCodes(mi++, (byte) 0x66); 40770 generateREXprefix(false, dstReg, null, null); 40771 setMachineCodes(mi++, (byte) 0x0F); 40772 setMachineCodes(mi++, (byte) 0x28); 40773 emitAbsRegOperands(srcDisp, dstReg); 40774 if (lister != null) lister.RRA(miStart, "MOVAPD", dstReg, srcDisp); 40775 } 40776 40777 /** 40778 * Generate a register--register-index MOVAPD. That is, 40779 * <PRE> 40780 * dstReg <<= (quad) srcReg 40781 * </PRE> 40782 * 40783 * @param dstReg destination register 40784 * @param srcBase the source base register 40785 * @param srcIndex the source index register 40786 * @param srcScale the source scale 40787 * @param srcDisp the source displacement 40788 */ 40789 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 40790 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 40791 public final void emitMOVAPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 40792 int miStart = mi; 40793 setMachineCodes(mi++, (byte) 0x66); 40794 generateREXprefix(false, dstReg, srcIndex, srcBase); 40795 setMachineCodes(mi++, (byte) 0x0F); 40796 setMachineCodes(mi++, (byte) 0x28); 40797 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 40798 if (lister != null) lister.RRXD(miStart, "MOVAPD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 40799 } 40800 40801 /** 40802 * Generate a register--register-indirect MOVAPD. That is, 40803 * <PRE> 40804 * dstReg <<= (quad) [srcBase] 40805 * </PRE> 40806 * 40807 * @param dstReg destination register 40808 * @param srcBase the source base register 40809 */ 40810 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40811 public final void emitMOVAPD_Reg_RegInd(XMM dstReg, GPR srcBase) { 40812 int miStart = mi; 40813 setMachineCodes(mi++, (byte) 0x66); 40814 generateREXprefix(false, dstReg, null, srcBase); 40815 setMachineCodes(mi++, (byte) 0x0F); 40816 setMachineCodes(mi++, (byte) 0x28); 40817 emitRegIndirectRegOperands(srcBase, dstReg); 40818 if (lister != null) lister.RRN(miStart, "MOVAPD", dstReg, srcBase); 40819 } 40820 40821 40822 /** 40823 * Generate a register-indirect--register MOVAPD. That is, 40824 * <PRE> 40825 * [dstBase] <<= (quad) srcReg 40826 * </PRE> 40827 * 40828 * @param dstBase the destination base register 40829 * @param srcReg the source register 40830 */ 40831 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40832 public final void emitMOVAPD_RegInd_Reg(GPR dstBase, XMM srcReg) { 40833 int miStart = mi; 40834 setMachineCodes(mi++, (byte) 0x66); 40835 generateREXprefix(false, srcReg, null, dstBase); 40836 setMachineCodes(mi++, (byte) 0x0F); 40837 setMachineCodes(mi++, (byte) 0x29); 40838 emitRegIndirectRegOperands(dstBase, srcReg); 40839 if (lister != null) lister.RNR(miStart, "MOVAPD", dstBase, srcReg); 40840 } 40841 40842 /** 40843 * Generate a register-offset--register MOVAPD. That is, 40844 * <PRE> 40845 * [dstReg<<dstScale + dstDisp] <<= (quad) srcReg 40846 * </PRE> 40847 * 40848 * @param dstIndex the destination index register 40849 * @param dstScale the destination shift amount 40850 * @param dstDisp the destination displacement 40851 * @param srcReg the source register 40852 */ 40853 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4}) 40854 public final void emitMOVAPD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 40855 int miStart = mi; 40856 setMachineCodes(mi++, (byte) 0x66); 40857 generateREXprefix(false, srcReg, dstIndex, null); 40858 setMachineCodes(mi++, (byte) 0x0F); 40859 setMachineCodes(mi++, (byte) 0x29); 40860 emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg); 40861 if (lister != null) lister.RFDR(miStart, "MOVAPD", dstIndex, dstScale, dstDisp, srcReg); 40862 } 40863 40864 /** 40865 * Generate a absolute--register MOVAPD. That is, 40866 * <PRE> 40867 * [dstDisp] <<= (quad) srcReg 40868 * </PRE> 40869 * 40870 * @param dstDisp the destination displacement 40871 * @param srcReg the source register 40872 */ 40873 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2}) 40874 public final void emitMOVAPD_Abs_Reg(Address dstDisp, XMM srcReg) { 40875 int miStart = mi; 40876 setMachineCodes(mi++, (byte) 0x66); 40877 generateREXprefix(false, srcReg, null, null); 40878 setMachineCodes(mi++, (byte) 0x0F); 40879 setMachineCodes(mi++, (byte) 0x29); 40880 emitAbsRegOperands(dstDisp, srcReg); 40881 if (lister != null) lister.RAR(miStart, "MOVAPD", dstDisp, srcReg); 40882 } 40883 40884 /** 40885 * Generate a register-index--register MOVAPD. That is, 40886 * <PRE> 40887 * [dstBase + dstIndex<<dstScale + dstDisp] <<= (quad) srcReg 40888 * </PRE> 40889 * 40890 * @param dstBase the destination base register 40891 * @param dstIndex the destination index register 40892 * @param dstScale the destination shift amount 40893 * @param dstDisp the destination displacement 40894 * @param srcReg the source register 40895 */ 40896 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5}) 40897 public final void emitMOVAPD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) { 40898 int miStart = mi; 40899 setMachineCodes(mi++, (byte) 0x66); 40900 generateREXprefix(false, srcReg, dstIndex, dstBase); 40901 setMachineCodes(mi++, (byte) 0x0F); 40902 setMachineCodes(mi++, (byte) 0x29); 40903 emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg); 40904 if (lister != null) lister.RXDR(miStart, "MOVAPD", dstBase, dstIndex, dstScale, dstDisp, srcReg); 40905 } 40906 40907 /** 40908 * Generate a register-displacement--register MOVAPD. That is, 40909 * <PRE> 40910 * [dstBase + dstDisp] <<= (quad) srcReg 40911 * </PRE> 40912 * 40913 * @param dstBase the destination base register 40914 * @param dstDisp the destination displacement 40915 * @param srcReg the source register 40916 */ 40917 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3}) 40918 public final void emitMOVAPD_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) { 40919 int miStart = mi; 40920 setMachineCodes(mi++, (byte) 0x66); 40921 generateREXprefix(false, srcReg, null, dstBase); 40922 setMachineCodes(mi++, (byte) 0x0F); 40923 setMachineCodes(mi++, (byte) 0x29); 40924 emitRegDispRegOperands(dstBase, dstDisp, srcReg); 40925 if (lister != null) lister.RDR(miStart, "MOVAPD", dstBase, dstDisp, srcReg); 40926 } 40927 40928 40929 /** 40930 * Generate a register--register SQRTSD. That is, 40931 * <PRE> 40932 * dstReg <<= (quad) srcReg 40933 * </PRE> 40934 * 40935 * @param dstReg destination register 40936 * @param srcReg source register 40937 */ 40938 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40939 public final void emitSQRTSD_Reg_Reg(XMM dstReg, XMM srcReg) { 40940 int miStart = mi; 40941 setMachineCodes(mi++, (byte) 0xF2); 40942 generateREXprefix(false, dstReg, null, srcReg); 40943 setMachineCodes(mi++, (byte) 0x0F); 40944 setMachineCodes(mi++, (byte) 0x51); 40945 emitRegRegOperands(srcReg, dstReg); 40946 if (lister != null) lister.RR(miStart, "SQRTSD", dstReg, srcReg); 40947 } 40948 40949 /** 40950 * Generate a register--register-displacement SQRTSD. That is, 40951 * <PRE> 40952 * dstReg <<= (quad) [srcBase + srcDisp] 40953 * </PRE> 40954 * 40955 * @param dstReg destination register 40956 * @param srcBase the source base register 40957 * @param srcDisp the source displacement 40958 */ 40959 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40960 public final void emitSQRTSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 40961 int miStart = mi; 40962 setMachineCodes(mi++, (byte) 0xF2); 40963 generateREXprefix(false, dstReg, null, srcBase); 40964 setMachineCodes(mi++, (byte) 0x0F); 40965 setMachineCodes(mi++, (byte) 0x51); 40966 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 40967 if (lister != null) lister.RRD(miStart, "SQRTSD", dstReg, srcBase, srcDisp); 40968 } 40969 40970 /** 40971 * Generate a register--register-offset SQRTSD. That is, 40972 * <PRE> 40973 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 40974 * </PRE> 40975 * 40976 * @param dstReg destination register 40977 * @param srcIndex the source index register 40978 * @param srcScale the source scale 40979 * @param srcDisp the source displacement 40980 */ 40981 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 40982 public final void emitSQRTSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 40983 int miStart = mi; 40984 setMachineCodes(mi++, (byte) 0xF2); 40985 generateREXprefix(false, dstReg, srcIndex, null); 40986 setMachineCodes(mi++, (byte) 0x0F); 40987 setMachineCodes(mi++, (byte) 0x51); 40988 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 40989 if (lister != null) lister.RRFD(miStart, "SQRTSD", dstReg, srcIndex, srcScale, srcDisp); 40990 } 40991 40992 /** 40993 * Generate a register--absolute SQRTSD. That is, 40994 * <PRE> 40995 * dstReg <<= (quad) [srcDisp] 40996 * </PRE> 40997 * 40998 * @param dstReg destination register 40999 * @param srcDisp the source displacement 41000 */ 41001 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 41002 public final void emitSQRTSD_Reg_Abs(XMM dstReg, Address srcDisp) { 41003 int miStart = mi; 41004 setMachineCodes(mi++, (byte) 0xF2); 41005 generateREXprefix(false, dstReg, null, null); 41006 setMachineCodes(mi++, (byte) 0x0F); 41007 setMachineCodes(mi++, (byte) 0x51); 41008 emitAbsRegOperands(srcDisp, dstReg); 41009 if (lister != null) lister.RRA(miStart, "SQRTSD", dstReg, srcDisp); 41010 } 41011 41012 /** 41013 * Generate a register--register-index SQRTSD. That is, 41014 * <PRE> 41015 * dstReg <<= (quad) srcReg 41016 * </PRE> 41017 * 41018 * @param dstReg destination register 41019 * @param srcBase the source base register 41020 * @param srcIndex the source index register 41021 * @param srcScale the source scale 41022 * @param srcDisp the source displacement 41023 */ 41024 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 41025 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 41026 public final void emitSQRTSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 41027 int miStart = mi; 41028 setMachineCodes(mi++, (byte) 0xF2); 41029 generateREXprefix(false, dstReg, srcIndex, srcBase); 41030 setMachineCodes(mi++, (byte) 0x0F); 41031 setMachineCodes(mi++, (byte) 0x51); 41032 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 41033 if (lister != null) lister.RRXD(miStart, "SQRTSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 41034 } 41035 41036 /** 41037 * Generate a register--register-indirect SQRTSD. That is, 41038 * <PRE> 41039 * dstReg <<= (quad) [srcBase] 41040 * </PRE> 41041 * 41042 * @param dstReg destination register 41043 * @param srcBase the source base register 41044 */ 41045 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41046 public final void emitSQRTSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 41047 int miStart = mi; 41048 setMachineCodes(mi++, (byte) 0xF2); 41049 generateREXprefix(false, dstReg, null, srcBase); 41050 setMachineCodes(mi++, (byte) 0x0F); 41051 setMachineCodes(mi++, (byte) 0x51); 41052 emitRegIndirectRegOperands(srcBase, dstReg); 41053 if (lister != null) lister.RRN(miStart, "SQRTSD", dstReg, srcBase); 41054 } 41055 41056 41057 /** 41058 * Generate a register--register CVTSI2SD. That is, 41059 * <PRE> 41060 * dstReg <<= (quad) srcReg 41061 * </PRE> 41062 * 41063 * @param dstReg destination register 41064 * @param srcReg source register 41065 */ 41066 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41067 public final void emitCVTSI2SD_Reg_Reg(XMM dstReg, GPR srcReg) { 41068 int miStart = mi; 41069 setMachineCodes(mi++, (byte) 0xF2); 41070 generateREXprefix(false, dstReg, null, srcReg); 41071 setMachineCodes(mi++, (byte) 0x0F); 41072 setMachineCodes(mi++, (byte) 0x2A); 41073 emitRegRegOperands(srcReg, dstReg); 41074 if (lister != null) lister.RR(miStart, "CVTSI2SD", dstReg, srcReg); 41075 } 41076 41077 /** 41078 * Generate a register--register-displacement CVTSI2SD. That is, 41079 * <PRE> 41080 * dstReg <<= (quad) [srcBase + srcDisp] 41081 * </PRE> 41082 * 41083 * @param dstReg destination register 41084 * @param srcBase the source base register 41085 * @param srcDisp the source displacement 41086 */ 41087 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41088 public final void emitCVTSI2SD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 41089 int miStart = mi; 41090 setMachineCodes(mi++, (byte) 0xF2); 41091 generateREXprefix(false, dstReg, null, srcBase); 41092 setMachineCodes(mi++, (byte) 0x0F); 41093 setMachineCodes(mi++, (byte) 0x2A); 41094 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 41095 if (lister != null) lister.RRD(miStart, "CVTSI2SD", dstReg, srcBase, srcDisp); 41096 } 41097 41098 /** 41099 * Generate a register--register-offset CVTSI2SD. That is, 41100 * <PRE> 41101 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 41102 * </PRE> 41103 * 41104 * @param dstReg destination register 41105 * @param srcIndex the source index register 41106 * @param srcScale the source scale 41107 * @param srcDisp the source displacement 41108 */ 41109 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41110 public final void emitCVTSI2SD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 41111 int miStart = mi; 41112 setMachineCodes(mi++, (byte) 0xF2); 41113 generateREXprefix(false, dstReg, srcIndex, null); 41114 setMachineCodes(mi++, (byte) 0x0F); 41115 setMachineCodes(mi++, (byte) 0x2A); 41116 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 41117 if (lister != null) lister.RRFD(miStart, "CVTSI2SD", dstReg, srcIndex, srcScale, srcDisp); 41118 } 41119 41120 /** 41121 * Generate a register--absolute CVTSI2SD. That is, 41122 * <PRE> 41123 * dstReg <<= (quad) [srcDisp] 41124 * </PRE> 41125 * 41126 * @param dstReg destination register 41127 * @param srcDisp the source displacement 41128 */ 41129 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 41130 public final void emitCVTSI2SD_Reg_Abs(XMM dstReg, Address srcDisp) { 41131 int miStart = mi; 41132 setMachineCodes(mi++, (byte) 0xF2); 41133 generateREXprefix(false, dstReg, null, null); 41134 setMachineCodes(mi++, (byte) 0x0F); 41135 setMachineCodes(mi++, (byte) 0x2A); 41136 emitAbsRegOperands(srcDisp, dstReg); 41137 if (lister != null) lister.RRA(miStart, "CVTSI2SD", dstReg, srcDisp); 41138 } 41139 41140 /** 41141 * Generate a register--register-index CVTSI2SD. That is, 41142 * <PRE> 41143 * dstReg <<= (quad) srcReg 41144 * </PRE> 41145 * 41146 * @param dstReg destination register 41147 * @param srcBase the source base register 41148 * @param srcIndex the source index register 41149 * @param srcScale the source scale 41150 * @param srcDisp the source displacement 41151 */ 41152 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 41153 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 41154 public final void emitCVTSI2SD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 41155 int miStart = mi; 41156 setMachineCodes(mi++, (byte) 0xF2); 41157 generateREXprefix(false, dstReg, srcIndex, srcBase); 41158 setMachineCodes(mi++, (byte) 0x0F); 41159 setMachineCodes(mi++, (byte) 0x2A); 41160 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 41161 if (lister != null) lister.RRXD(miStart, "CVTSI2SD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 41162 } 41163 41164 /** 41165 * Generate a register--register-indirect CVTSI2SD. That is, 41166 * <PRE> 41167 * dstReg <<= (quad) [srcBase] 41168 * </PRE> 41169 * 41170 * @param dstReg destination register 41171 * @param srcBase the source base register 41172 */ 41173 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41174 public final void emitCVTSI2SD_Reg_RegInd(XMM dstReg, GPR srcBase) { 41175 int miStart = mi; 41176 setMachineCodes(mi++, (byte) 0xF2); 41177 generateREXprefix(false, dstReg, null, srcBase); 41178 setMachineCodes(mi++, (byte) 0x0F); 41179 setMachineCodes(mi++, (byte) 0x2A); 41180 emitRegIndirectRegOperands(srcBase, dstReg); 41181 if (lister != null) lister.RRN(miStart, "CVTSI2SD", dstReg, srcBase); 41182 } 41183 41184 41185 /** 41186 * Generate a register--register CVTSD2SS. That is, 41187 * <PRE> 41188 * dstReg <<= (quad) srcReg 41189 * </PRE> 41190 * 41191 * @param dstReg destination register 41192 * @param srcReg source register 41193 */ 41194 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41195 public final void emitCVTSD2SS_Reg_Reg(XMM dstReg, XMM srcReg) { 41196 int miStart = mi; 41197 setMachineCodes(mi++, (byte) 0xF2); 41198 generateREXprefix(false, dstReg, null, srcReg); 41199 setMachineCodes(mi++, (byte) 0x0F); 41200 setMachineCodes(mi++, (byte) 0x5A); 41201 emitRegRegOperands(srcReg, dstReg); 41202 if (lister != null) lister.RR(miStart, "CVTSD2SS", dstReg, srcReg); 41203 } 41204 41205 /** 41206 * Generate a register--register-displacement CVTSD2SS. That is, 41207 * <PRE> 41208 * dstReg <<= (quad) [srcBase + srcDisp] 41209 * </PRE> 41210 * 41211 * @param dstReg destination register 41212 * @param srcBase the source base register 41213 * @param srcDisp the source displacement 41214 */ 41215 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41216 public final void emitCVTSD2SS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 41217 int miStart = mi; 41218 setMachineCodes(mi++, (byte) 0xF2); 41219 generateREXprefix(false, dstReg, null, srcBase); 41220 setMachineCodes(mi++, (byte) 0x0F); 41221 setMachineCodes(mi++, (byte) 0x5A); 41222 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 41223 if (lister != null) lister.RRD(miStart, "CVTSD2SS", dstReg, srcBase, srcDisp); 41224 } 41225 41226 /** 41227 * Generate a register--register-offset CVTSD2SS. That is, 41228 * <PRE> 41229 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 41230 * </PRE> 41231 * 41232 * @param dstReg destination register 41233 * @param srcIndex the source index register 41234 * @param srcScale the source scale 41235 * @param srcDisp the source displacement 41236 */ 41237 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41238 public final void emitCVTSD2SS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 41239 int miStart = mi; 41240 setMachineCodes(mi++, (byte) 0xF2); 41241 generateREXprefix(false, dstReg, srcIndex, null); 41242 setMachineCodes(mi++, (byte) 0x0F); 41243 setMachineCodes(mi++, (byte) 0x5A); 41244 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 41245 if (lister != null) lister.RRFD(miStart, "CVTSD2SS", dstReg, srcIndex, srcScale, srcDisp); 41246 } 41247 41248 /** 41249 * Generate a register--absolute CVTSD2SS. That is, 41250 * <PRE> 41251 * dstReg <<= (quad) [srcDisp] 41252 * </PRE> 41253 * 41254 * @param dstReg destination register 41255 * @param srcDisp the source displacement 41256 */ 41257 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 41258 public final void emitCVTSD2SS_Reg_Abs(XMM dstReg, Address srcDisp) { 41259 int miStart = mi; 41260 setMachineCodes(mi++, (byte) 0xF2); 41261 generateREXprefix(false, dstReg, null, null); 41262 setMachineCodes(mi++, (byte) 0x0F); 41263 setMachineCodes(mi++, (byte) 0x5A); 41264 emitAbsRegOperands(srcDisp, dstReg); 41265 if (lister != null) lister.RRA(miStart, "CVTSD2SS", dstReg, srcDisp); 41266 } 41267 41268 /** 41269 * Generate a register--register-index CVTSD2SS. That is, 41270 * <PRE> 41271 * dstReg <<= (quad) srcReg 41272 * </PRE> 41273 * 41274 * @param dstReg destination register 41275 * @param srcBase the source base register 41276 * @param srcIndex the source index register 41277 * @param srcScale the source scale 41278 * @param srcDisp the source displacement 41279 */ 41280 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 41281 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 41282 public final void emitCVTSD2SS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 41283 int miStart = mi; 41284 setMachineCodes(mi++, (byte) 0xF2); 41285 generateREXprefix(false, dstReg, srcIndex, srcBase); 41286 setMachineCodes(mi++, (byte) 0x0F); 41287 setMachineCodes(mi++, (byte) 0x5A); 41288 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 41289 if (lister != null) lister.RRXD(miStart, "CVTSD2SS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 41290 } 41291 41292 /** 41293 * Generate a register--register-indirect CVTSD2SS. That is, 41294 * <PRE> 41295 * dstReg <<= (quad) [srcBase] 41296 * </PRE> 41297 * 41298 * @param dstReg destination register 41299 * @param srcBase the source base register 41300 */ 41301 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41302 public final void emitCVTSD2SS_Reg_RegInd(XMM dstReg, GPR srcBase) { 41303 int miStart = mi; 41304 setMachineCodes(mi++, (byte) 0xF2); 41305 generateREXprefix(false, dstReg, null, srcBase); 41306 setMachineCodes(mi++, (byte) 0x0F); 41307 setMachineCodes(mi++, (byte) 0x5A); 41308 emitRegIndirectRegOperands(srcBase, dstReg); 41309 if (lister != null) lister.RRN(miStart, "CVTSD2SS", dstReg, srcBase); 41310 } 41311 41312 41313 /** 41314 * Generate a register--register CVTSD2SI. That is, 41315 * <PRE> 41316 * dstReg <<= (quad) srcReg 41317 * </PRE> 41318 * 41319 * @param dstReg destination register 41320 * @param srcReg source register 41321 */ 41322 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41323 public final void emitCVTSD2SI_Reg_Reg(GPR dstReg, XMM srcReg) { 41324 int miStart = mi; 41325 setMachineCodes(mi++, (byte) 0xF2); 41326 generateREXprefix(false, dstReg, null, srcReg); 41327 setMachineCodes(mi++, (byte) 0x0F); 41328 setMachineCodes(mi++, (byte) 0x2D); 41329 emitRegRegOperands(srcReg, dstReg); 41330 if (lister != null) lister.RR(miStart, "CVTSD2SI", dstReg, srcReg); 41331 } 41332 41333 /** 41334 * Generate a register--register-displacement CVTSD2SI. That is, 41335 * <PRE> 41336 * dstReg <<= (quad) [srcBase + srcDisp] 41337 * </PRE> 41338 * 41339 * @param dstReg destination register 41340 * @param srcBase the source base register 41341 * @param srcDisp the source displacement 41342 */ 41343 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41344 public final void emitCVTSD2SI_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 41345 int miStart = mi; 41346 setMachineCodes(mi++, (byte) 0xF2); 41347 generateREXprefix(false, dstReg, null, srcBase); 41348 setMachineCodes(mi++, (byte) 0x0F); 41349 setMachineCodes(mi++, (byte) 0x2D); 41350 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 41351 if (lister != null) lister.RRD(miStart, "CVTSD2SI", dstReg, srcBase, srcDisp); 41352 } 41353 41354 /** 41355 * Generate a register--register-offset CVTSD2SI. That is, 41356 * <PRE> 41357 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 41358 * </PRE> 41359 * 41360 * @param dstReg destination register 41361 * @param srcIndex the source index register 41362 * @param srcScale the source scale 41363 * @param srcDisp the source displacement 41364 */ 41365 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41366 public final void emitCVTSD2SI_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 41367 int miStart = mi; 41368 setMachineCodes(mi++, (byte) 0xF2); 41369 generateREXprefix(false, dstReg, srcIndex, null); 41370 setMachineCodes(mi++, (byte) 0x0F); 41371 setMachineCodes(mi++, (byte) 0x2D); 41372 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 41373 if (lister != null) lister.RRFD(miStart, "CVTSD2SI", dstReg, srcIndex, srcScale, srcDisp); 41374 } 41375 41376 /** 41377 * Generate a register--absolute CVTSD2SI. That is, 41378 * <PRE> 41379 * dstReg <<= (quad) [srcDisp] 41380 * </PRE> 41381 * 41382 * @param dstReg destination register 41383 * @param srcDisp the source displacement 41384 */ 41385 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 41386 public final void emitCVTSD2SI_Reg_Abs(GPR dstReg, Address srcDisp) { 41387 int miStart = mi; 41388 setMachineCodes(mi++, (byte) 0xF2); 41389 generateREXprefix(false, dstReg, null, null); 41390 setMachineCodes(mi++, (byte) 0x0F); 41391 setMachineCodes(mi++, (byte) 0x2D); 41392 emitAbsRegOperands(srcDisp, dstReg); 41393 if (lister != null) lister.RRA(miStart, "CVTSD2SI", dstReg, srcDisp); 41394 } 41395 41396 /** 41397 * Generate a register--register-index CVTSD2SI. That is, 41398 * <PRE> 41399 * dstReg <<= (quad) srcReg 41400 * </PRE> 41401 * 41402 * @param dstReg destination register 41403 * @param srcBase the source base register 41404 * @param srcIndex the source index register 41405 * @param srcScale the source scale 41406 * @param srcDisp the source displacement 41407 */ 41408 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 41409 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 41410 public final void emitCVTSD2SI_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 41411 int miStart = mi; 41412 setMachineCodes(mi++, (byte) 0xF2); 41413 generateREXprefix(false, dstReg, srcIndex, srcBase); 41414 setMachineCodes(mi++, (byte) 0x0F); 41415 setMachineCodes(mi++, (byte) 0x2D); 41416 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 41417 if (lister != null) lister.RRXD(miStart, "CVTSD2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp); 41418 } 41419 41420 /** 41421 * Generate a register--register-indirect CVTSD2SI. That is, 41422 * <PRE> 41423 * dstReg <<= (quad) [srcBase] 41424 * </PRE> 41425 * 41426 * @param dstReg destination register 41427 * @param srcBase the source base register 41428 */ 41429 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41430 public final void emitCVTSD2SI_Reg_RegInd(GPR dstReg, GPR srcBase) { 41431 int miStart = mi; 41432 setMachineCodes(mi++, (byte) 0xF2); 41433 generateREXprefix(false, dstReg, null, srcBase); 41434 setMachineCodes(mi++, (byte) 0x0F); 41435 setMachineCodes(mi++, (byte) 0x2D); 41436 emitRegIndirectRegOperands(srcBase, dstReg); 41437 if (lister != null) lister.RRN(miStart, "CVTSD2SI", dstReg, srcBase); 41438 } 41439 41440 41441 /** 41442 * Generate a register--register CVTTSD2SI. That is, 41443 * <PRE> 41444 * dstReg <<= (quad) srcReg 41445 * </PRE> 41446 * 41447 * @param dstReg destination register 41448 * @param srcReg source register 41449 */ 41450 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41451 public final void emitCVTTSD2SI_Reg_Reg(GPR dstReg, XMM srcReg) { 41452 int miStart = mi; 41453 setMachineCodes(mi++, (byte) 0xF2); 41454 generateREXprefix(false, dstReg, null, srcReg); 41455 setMachineCodes(mi++, (byte) 0x0F); 41456 setMachineCodes(mi++, (byte) 0x2C); 41457 emitRegRegOperands(srcReg, dstReg); 41458 if (lister != null) lister.RR(miStart, "CVTTSD2SI", dstReg, srcReg); 41459 } 41460 41461 /** 41462 * Generate a register--register-displacement CVTTSD2SI. That is, 41463 * <PRE> 41464 * dstReg <<= (quad) [srcBase + srcDisp] 41465 * </PRE> 41466 * 41467 * @param dstReg destination register 41468 * @param srcBase the source base register 41469 * @param srcDisp the source displacement 41470 */ 41471 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41472 public final void emitCVTTSD2SI_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) { 41473 int miStart = mi; 41474 setMachineCodes(mi++, (byte) 0xF2); 41475 generateREXprefix(false, dstReg, null, srcBase); 41476 setMachineCodes(mi++, (byte) 0x0F); 41477 setMachineCodes(mi++, (byte) 0x2C); 41478 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 41479 if (lister != null) lister.RRD(miStart, "CVTTSD2SI", dstReg, srcBase, srcDisp); 41480 } 41481 41482 /** 41483 * Generate a register--register-offset CVTTSD2SI. That is, 41484 * <PRE> 41485 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 41486 * </PRE> 41487 * 41488 * @param dstReg destination register 41489 * @param srcIndex the source index register 41490 * @param srcScale the source scale 41491 * @param srcDisp the source displacement 41492 */ 41493 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41494 public final void emitCVTTSD2SI_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 41495 int miStart = mi; 41496 setMachineCodes(mi++, (byte) 0xF2); 41497 generateREXprefix(false, dstReg, srcIndex, null); 41498 setMachineCodes(mi++, (byte) 0x0F); 41499 setMachineCodes(mi++, (byte) 0x2C); 41500 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 41501 if (lister != null) lister.RRFD(miStart, "CVTTSD2SI", dstReg, srcIndex, srcScale, srcDisp); 41502 } 41503 41504 /** 41505 * Generate a register--absolute CVTTSD2SI. That is, 41506 * <PRE> 41507 * dstReg <<= (quad) [srcDisp] 41508 * </PRE> 41509 * 41510 * @param dstReg destination register 41511 * @param srcDisp the source displacement 41512 */ 41513 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 41514 public final void emitCVTTSD2SI_Reg_Abs(GPR dstReg, Address srcDisp) { 41515 int miStart = mi; 41516 setMachineCodes(mi++, (byte) 0xF2); 41517 generateREXprefix(false, dstReg, null, null); 41518 setMachineCodes(mi++, (byte) 0x0F); 41519 setMachineCodes(mi++, (byte) 0x2C); 41520 emitAbsRegOperands(srcDisp, dstReg); 41521 if (lister != null) lister.RRA(miStart, "CVTTSD2SI", dstReg, srcDisp); 41522 } 41523 41524 /** 41525 * Generate a register--register-index CVTTSD2SI. That is, 41526 * <PRE> 41527 * dstReg <<= (quad) srcReg 41528 * </PRE> 41529 * 41530 * @param dstReg destination register 41531 * @param srcBase the source base register 41532 * @param srcIndex the source index register 41533 * @param srcScale the source scale 41534 * @param srcDisp the source displacement 41535 */ 41536 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 41537 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 41538 public final void emitCVTTSD2SI_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 41539 int miStart = mi; 41540 setMachineCodes(mi++, (byte) 0xF2); 41541 generateREXprefix(false, dstReg, srcIndex, srcBase); 41542 setMachineCodes(mi++, (byte) 0x0F); 41543 setMachineCodes(mi++, (byte) 0x2C); 41544 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 41545 if (lister != null) lister.RRXD(miStart, "CVTTSD2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp); 41546 } 41547 41548 /** 41549 * Generate a register--register-indirect CVTTSD2SI. That is, 41550 * <PRE> 41551 * dstReg <<= (quad) [srcBase] 41552 * </PRE> 41553 * 41554 * @param dstReg destination register 41555 * @param srcBase the source base register 41556 */ 41557 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41558 public final void emitCVTTSD2SI_Reg_RegInd(GPR dstReg, GPR srcBase) { 41559 int miStart = mi; 41560 setMachineCodes(mi++, (byte) 0xF2); 41561 generateREXprefix(false, dstReg, null, srcBase); 41562 setMachineCodes(mi++, (byte) 0x0F); 41563 setMachineCodes(mi++, (byte) 0x2C); 41564 emitRegIndirectRegOperands(srcBase, dstReg); 41565 if (lister != null) lister.RRN(miStart, "CVTTSD2SI", dstReg, srcBase); 41566 } 41567 41568 41569 /** 41570 * Generate a register--register CVTSI2SDQ. That is, 41571 * <PRE> 41572 * dstReg <<= (quad) srcReg 41573 * </PRE> 41574 * 41575 * @param dstReg destination register 41576 * @param srcReg source register 41577 */ 41578 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41579 public final void emitCVTSI2SDQ_Reg_Reg_Quad(XMM dstReg, GPR srcReg) { 41580 int miStart = mi; 41581 setMachineCodes(mi++, (byte) 0xF2); 41582 generateREXprefix(true, dstReg, null, srcReg); 41583 setMachineCodes(mi++, (byte) 0x0F); 41584 setMachineCodes(mi++, (byte) 0x2A); 41585 emitRegRegOperands(srcReg, dstReg); 41586 if (lister != null) lister.RR(miStart, "CVTSI2SDQ", dstReg, srcReg); 41587 } 41588 41589 /** 41590 * Generate a register--register-displacement CVTSI2SDQ. That is, 41591 * <PRE> 41592 * dstReg <<= (quad) [srcBase + srcDisp] 41593 * </PRE> 41594 * 41595 * @param dstReg destination register 41596 * @param srcBase the source base register 41597 * @param srcDisp the source displacement 41598 */ 41599 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41600 public final void emitCVTSI2SDQ_Reg_RegDisp_Quad(XMM dstReg, GPR srcBase, Offset srcDisp) { 41601 int miStart = mi; 41602 setMachineCodes(mi++, (byte) 0xF2); 41603 generateREXprefix(true, dstReg, null, srcBase); 41604 setMachineCodes(mi++, (byte) 0x0F); 41605 setMachineCodes(mi++, (byte) 0x2A); 41606 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 41607 if (lister != null) lister.RRD(miStart, "CVTSI2SDQ", dstReg, srcBase, srcDisp); 41608 } 41609 41610 /** 41611 * Generate a register--register-offset CVTSI2SDQ. That is, 41612 * <PRE> 41613 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 41614 * </PRE> 41615 * 41616 * @param dstReg destination register 41617 * @param srcIndex the source index register 41618 * @param srcScale the source scale 41619 * @param srcDisp the source displacement 41620 */ 41621 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41622 public final void emitCVTSI2SDQ_Reg_RegOff_Quad(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 41623 int miStart = mi; 41624 setMachineCodes(mi++, (byte) 0xF2); 41625 generateREXprefix(true, dstReg, srcIndex, null); 41626 setMachineCodes(mi++, (byte) 0x0F); 41627 setMachineCodes(mi++, (byte) 0x2A); 41628 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 41629 if (lister != null) lister.RRFD(miStart, "CVTSI2SDQ", dstReg, srcIndex, srcScale, srcDisp); 41630 } 41631 41632 /** 41633 * Generate a register--absolute CVTSI2SDQ. That is, 41634 * <PRE> 41635 * dstReg <<= (quad) [srcDisp] 41636 * </PRE> 41637 * 41638 * @param dstReg destination register 41639 * @param srcDisp the source displacement 41640 */ 41641 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 41642 public final void emitCVTSI2SDQ_Reg_Abs_Quad(XMM dstReg, Address srcDisp) { 41643 int miStart = mi; 41644 setMachineCodes(mi++, (byte) 0xF2); 41645 generateREXprefix(true, dstReg, null, null); 41646 setMachineCodes(mi++, (byte) 0x0F); 41647 setMachineCodes(mi++, (byte) 0x2A); 41648 emitAbsRegOperands(srcDisp, dstReg); 41649 if (lister != null) lister.RRA(miStart, "CVTSI2SDQ", dstReg, srcDisp); 41650 } 41651 41652 /** 41653 * Generate a register--register-index CVTSI2SDQ. That is, 41654 * <PRE> 41655 * dstReg <<= (quad) srcReg 41656 * </PRE> 41657 * 41658 * @param dstReg destination register 41659 * @param srcBase the source base register 41660 * @param srcIndex the source index register 41661 * @param srcScale the source scale 41662 * @param srcDisp the source displacement 41663 */ 41664 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 41665 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 41666 public final void emitCVTSI2SDQ_Reg_RegIdx_Quad(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 41667 int miStart = mi; 41668 setMachineCodes(mi++, (byte) 0xF2); 41669 generateREXprefix(true, dstReg, srcIndex, srcBase); 41670 setMachineCodes(mi++, (byte) 0x0F); 41671 setMachineCodes(mi++, (byte) 0x2A); 41672 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 41673 if (lister != null) lister.RRXD(miStart, "CVTSI2SDQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 41674 } 41675 41676 /** 41677 * Generate a register--register-indirect CVTSI2SDQ. That is, 41678 * <PRE> 41679 * dstReg <<= (quad) [srcBase] 41680 * </PRE> 41681 * 41682 * @param dstReg destination register 41683 * @param srcBase the source base register 41684 */ 41685 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41686 public final void emitCVTSI2SDQ_Reg_RegInd_Quad(XMM dstReg, GPR srcBase) { 41687 int miStart = mi; 41688 setMachineCodes(mi++, (byte) 0xF2); 41689 generateREXprefix(true, dstReg, null, srcBase); 41690 setMachineCodes(mi++, (byte) 0x0F); 41691 setMachineCodes(mi++, (byte) 0x2A); 41692 emitRegIndirectRegOperands(srcBase, dstReg); 41693 if (lister != null) lister.RRN(miStart, "CVTSI2SDQ", dstReg, srcBase); 41694 } 41695 41696 41697 /** 41698 * Generate a register--register CVTSD2SIQ. That is, 41699 * <PRE> 41700 * dstReg <<= (quad) srcReg 41701 * </PRE> 41702 * 41703 * @param dstReg destination register 41704 * @param srcReg source register 41705 */ 41706 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41707 public final void emitCVTSD2SIQ_Reg_Reg_Quad(GPR dstReg, XMM srcReg) { 41708 int miStart = mi; 41709 setMachineCodes(mi++, (byte) 0xF2); 41710 generateREXprefix(true, dstReg, null, srcReg); 41711 setMachineCodes(mi++, (byte) 0x0F); 41712 setMachineCodes(mi++, (byte) 0x2D); 41713 emitRegRegOperands(srcReg, dstReg); 41714 if (lister != null) lister.RR(miStart, "CVTSD2SIQ", dstReg, srcReg); 41715 } 41716 41717 /** 41718 * Generate a register--register-displacement CVTSD2SIQ. That is, 41719 * <PRE> 41720 * dstReg <<= (quad) [srcBase + srcDisp] 41721 * </PRE> 41722 * 41723 * @param dstReg destination register 41724 * @param srcBase the source base register 41725 * @param srcDisp the source displacement 41726 */ 41727 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41728 public final void emitCVTSD2SIQ_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 41729 int miStart = mi; 41730 setMachineCodes(mi++, (byte) 0xF2); 41731 generateREXprefix(true, dstReg, null, srcBase); 41732 setMachineCodes(mi++, (byte) 0x0F); 41733 setMachineCodes(mi++, (byte) 0x2D); 41734 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 41735 if (lister != null) lister.RRD(miStart, "CVTSD2SIQ", dstReg, srcBase, srcDisp); 41736 } 41737 41738 /** 41739 * Generate a register--register-offset CVTSD2SIQ. That is, 41740 * <PRE> 41741 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 41742 * </PRE> 41743 * 41744 * @param dstReg destination register 41745 * @param srcIndex the source index register 41746 * @param srcScale the source scale 41747 * @param srcDisp the source displacement 41748 */ 41749 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41750 public final void emitCVTSD2SIQ_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 41751 int miStart = mi; 41752 setMachineCodes(mi++, (byte) 0xF2); 41753 generateREXprefix(true, dstReg, srcIndex, null); 41754 setMachineCodes(mi++, (byte) 0x0F); 41755 setMachineCodes(mi++, (byte) 0x2D); 41756 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 41757 if (lister != null) lister.RRFD(miStart, "CVTSD2SIQ", dstReg, srcIndex, srcScale, srcDisp); 41758 } 41759 41760 /** 41761 * Generate a register--absolute CVTSD2SIQ. That is, 41762 * <PRE> 41763 * dstReg <<= (quad) [srcDisp] 41764 * </PRE> 41765 * 41766 * @param dstReg destination register 41767 * @param srcDisp the source displacement 41768 */ 41769 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 41770 public final void emitCVTSD2SIQ_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 41771 int miStart = mi; 41772 setMachineCodes(mi++, (byte) 0xF2); 41773 generateREXprefix(true, dstReg, null, null); 41774 setMachineCodes(mi++, (byte) 0x0F); 41775 setMachineCodes(mi++, (byte) 0x2D); 41776 emitAbsRegOperands(srcDisp, dstReg); 41777 if (lister != null) lister.RRA(miStart, "CVTSD2SIQ", dstReg, srcDisp); 41778 } 41779 41780 /** 41781 * Generate a register--register-index CVTSD2SIQ. That is, 41782 * <PRE> 41783 * dstReg <<= (quad) srcReg 41784 * </PRE> 41785 * 41786 * @param dstReg destination register 41787 * @param srcBase the source base register 41788 * @param srcIndex the source index register 41789 * @param srcScale the source scale 41790 * @param srcDisp the source displacement 41791 */ 41792 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 41793 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 41794 public final void emitCVTSD2SIQ_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 41795 int miStart = mi; 41796 setMachineCodes(mi++, (byte) 0xF2); 41797 generateREXprefix(true, dstReg, srcIndex, srcBase); 41798 setMachineCodes(mi++, (byte) 0x0F); 41799 setMachineCodes(mi++, (byte) 0x2D); 41800 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 41801 if (lister != null) lister.RRXD(miStart, "CVTSD2SIQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 41802 } 41803 41804 /** 41805 * Generate a register--register-indirect CVTSD2SIQ. That is, 41806 * <PRE> 41807 * dstReg <<= (quad) [srcBase] 41808 * </PRE> 41809 * 41810 * @param dstReg destination register 41811 * @param srcBase the source base register 41812 */ 41813 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41814 public final void emitCVTSD2SIQ_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 41815 int miStart = mi; 41816 setMachineCodes(mi++, (byte) 0xF2); 41817 generateREXprefix(true, dstReg, null, srcBase); 41818 setMachineCodes(mi++, (byte) 0x0F); 41819 setMachineCodes(mi++, (byte) 0x2D); 41820 emitRegIndirectRegOperands(srcBase, dstReg); 41821 if (lister != null) lister.RRN(miStart, "CVTSD2SIQ", dstReg, srcBase); 41822 } 41823 41824 41825 /** 41826 * Generate a register--register CVTTSD2SIQ. That is, 41827 * <PRE> 41828 * dstReg <<= (quad) srcReg 41829 * </PRE> 41830 * 41831 * @param dstReg destination register 41832 * @param srcReg source register 41833 */ 41834 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41835 public final void emitCVTTSD2SIQ_Reg_Reg_Quad(GPR dstReg, XMM srcReg) { 41836 int miStart = mi; 41837 setMachineCodes(mi++, (byte) 0xF2); 41838 generateREXprefix(true, dstReg, null, srcReg); 41839 setMachineCodes(mi++, (byte) 0x0F); 41840 setMachineCodes(mi++, (byte) 0x2C); 41841 emitRegRegOperands(srcReg, dstReg); 41842 if (lister != null) lister.RR(miStart, "CVTTSD2SIQ", dstReg, srcReg); 41843 } 41844 41845 /** 41846 * Generate a register--register-displacement CVTTSD2SIQ. That is, 41847 * <PRE> 41848 * dstReg <<= (quad) [srcBase + srcDisp] 41849 * </PRE> 41850 * 41851 * @param dstReg destination register 41852 * @param srcBase the source base register 41853 * @param srcDisp the source displacement 41854 */ 41855 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41856 public final void emitCVTTSD2SIQ_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) { 41857 int miStart = mi; 41858 setMachineCodes(mi++, (byte) 0xF2); 41859 generateREXprefix(true, dstReg, null, srcBase); 41860 setMachineCodes(mi++, (byte) 0x0F); 41861 setMachineCodes(mi++, (byte) 0x2C); 41862 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 41863 if (lister != null) lister.RRD(miStart, "CVTTSD2SIQ", dstReg, srcBase, srcDisp); 41864 } 41865 41866 /** 41867 * Generate a register--register-offset CVTTSD2SIQ. That is, 41868 * <PRE> 41869 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 41870 * </PRE> 41871 * 41872 * @param dstReg destination register 41873 * @param srcIndex the source index register 41874 * @param srcScale the source scale 41875 * @param srcDisp the source displacement 41876 */ 41877 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41878 public final void emitCVTTSD2SIQ_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 41879 int miStart = mi; 41880 setMachineCodes(mi++, (byte) 0xF2); 41881 generateREXprefix(true, dstReg, srcIndex, null); 41882 setMachineCodes(mi++, (byte) 0x0F); 41883 setMachineCodes(mi++, (byte) 0x2C); 41884 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 41885 if (lister != null) lister.RRFD(miStart, "CVTTSD2SIQ", dstReg, srcIndex, srcScale, srcDisp); 41886 } 41887 41888 /** 41889 * Generate a register--absolute CVTTSD2SIQ. That is, 41890 * <PRE> 41891 * dstReg <<= (quad) [srcDisp] 41892 * </PRE> 41893 * 41894 * @param dstReg destination register 41895 * @param srcDisp the source displacement 41896 */ 41897 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 41898 public final void emitCVTTSD2SIQ_Reg_Abs_Quad(GPR dstReg, Address srcDisp) { 41899 int miStart = mi; 41900 setMachineCodes(mi++, (byte) 0xF2); 41901 generateREXprefix(true, dstReg, null, null); 41902 setMachineCodes(mi++, (byte) 0x0F); 41903 setMachineCodes(mi++, (byte) 0x2C); 41904 emitAbsRegOperands(srcDisp, dstReg); 41905 if (lister != null) lister.RRA(miStart, "CVTTSD2SIQ", dstReg, srcDisp); 41906 } 41907 41908 /** 41909 * Generate a register--register-index CVTTSD2SIQ. That is, 41910 * <PRE> 41911 * dstReg <<= (quad) srcReg 41912 * </PRE> 41913 * 41914 * @param dstReg destination register 41915 * @param srcBase the source base register 41916 * @param srcIndex the source index register 41917 * @param srcScale the source scale 41918 * @param srcDisp the source displacement 41919 */ 41920 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 41921 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 41922 public final void emitCVTTSD2SIQ_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 41923 int miStart = mi; 41924 setMachineCodes(mi++, (byte) 0xF2); 41925 generateREXprefix(true, dstReg, srcIndex, srcBase); 41926 setMachineCodes(mi++, (byte) 0x0F); 41927 setMachineCodes(mi++, (byte) 0x2C); 41928 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 41929 if (lister != null) lister.RRXD(miStart, "CVTTSD2SIQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 41930 } 41931 41932 /** 41933 * Generate a register--register-indirect CVTTSD2SIQ. That is, 41934 * <PRE> 41935 * dstReg <<= (quad) [srcBase] 41936 * </PRE> 41937 * 41938 * @param dstReg destination register 41939 * @param srcBase the source base register 41940 */ 41941 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41942 public final void emitCVTTSD2SIQ_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) { 41943 int miStart = mi; 41944 setMachineCodes(mi++, (byte) 0xF2); 41945 generateREXprefix(true, dstReg, null, srcBase); 41946 setMachineCodes(mi++, (byte) 0x0F); 41947 setMachineCodes(mi++, (byte) 0x2C); 41948 emitRegIndirectRegOperands(srcBase, dstReg); 41949 if (lister != null) lister.RRN(miStart, "CVTTSD2SIQ", dstReg, srcBase); 41950 } 41951 41952 41953 /** 41954 * Generate a register--register UCOMISD. That is, 41955 * <PRE> 41956 * dstReg <<= (quad) srcReg 41957 * </PRE> 41958 * 41959 * @param dstReg destination register 41960 * @param srcReg source register 41961 */ 41962 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41963 public final void emitUCOMISD_Reg_Reg(XMM dstReg, XMM srcReg) { 41964 int miStart = mi; 41965 setMachineCodes(mi++, (byte) 0x66); 41966 generateREXprefix(false, dstReg, null, srcReg); 41967 setMachineCodes(mi++, (byte) 0x0F); 41968 setMachineCodes(mi++, (byte) 0x2E); 41969 emitRegRegOperands(srcReg, dstReg); 41970 if (lister != null) lister.RR(miStart, "UCOMISD", dstReg, srcReg); 41971 } 41972 41973 /** 41974 * Generate a register--register-displacement UCOMISD. That is, 41975 * <PRE> 41976 * dstReg <<= (quad) [srcBase + srcDisp] 41977 * </PRE> 41978 * 41979 * @param dstReg destination register 41980 * @param srcBase the source base register 41981 * @param srcDisp the source displacement 41982 */ 41983 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 41984 public final void emitUCOMISD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 41985 int miStart = mi; 41986 setMachineCodes(mi++, (byte) 0x66); 41987 generateREXprefix(false, dstReg, null, srcBase); 41988 setMachineCodes(mi++, (byte) 0x0F); 41989 setMachineCodes(mi++, (byte) 0x2E); 41990 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 41991 if (lister != null) lister.RRD(miStart, "UCOMISD", dstReg, srcBase, srcDisp); 41992 } 41993 41994 /** 41995 * Generate a register--register-offset UCOMISD. That is, 41996 * <PRE> 41997 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 41998 * </PRE> 41999 * 42000 * @param dstReg destination register 42001 * @param srcIndex the source index register 42002 * @param srcScale the source scale 42003 * @param srcDisp the source displacement 42004 */ 42005 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42006 public final void emitUCOMISD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 42007 int miStart = mi; 42008 setMachineCodes(mi++, (byte) 0x66); 42009 generateREXprefix(false, dstReg, srcIndex, null); 42010 setMachineCodes(mi++, (byte) 0x0F); 42011 setMachineCodes(mi++, (byte) 0x2E); 42012 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 42013 if (lister != null) lister.RRFD(miStart, "UCOMISD", dstReg, srcIndex, srcScale, srcDisp); 42014 } 42015 42016 /** 42017 * Generate a register--absolute UCOMISD. That is, 42018 * <PRE> 42019 * dstReg <<= (quad) [srcDisp] 42020 * </PRE> 42021 * 42022 * @param dstReg destination register 42023 * @param srcDisp the source displacement 42024 */ 42025 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 42026 public final void emitUCOMISD_Reg_Abs(XMM dstReg, Address srcDisp) { 42027 int miStart = mi; 42028 setMachineCodes(mi++, (byte) 0x66); 42029 generateREXprefix(false, dstReg, null, null); 42030 setMachineCodes(mi++, (byte) 0x0F); 42031 setMachineCodes(mi++, (byte) 0x2E); 42032 emitAbsRegOperands(srcDisp, dstReg); 42033 if (lister != null) lister.RRA(miStart, "UCOMISD", dstReg, srcDisp); 42034 } 42035 42036 /** 42037 * Generate a register--register-index UCOMISD. That is, 42038 * <PRE> 42039 * dstReg <<= (quad) srcReg 42040 * </PRE> 42041 * 42042 * @param dstReg destination register 42043 * @param srcBase the source base register 42044 * @param srcIndex the source index register 42045 * @param srcScale the source scale 42046 * @param srcDisp the source displacement 42047 */ 42048 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 42049 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 42050 public final void emitUCOMISD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 42051 int miStart = mi; 42052 setMachineCodes(mi++, (byte) 0x66); 42053 generateREXprefix(false, dstReg, srcIndex, srcBase); 42054 setMachineCodes(mi++, (byte) 0x0F); 42055 setMachineCodes(mi++, (byte) 0x2E); 42056 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 42057 if (lister != null) lister.RRXD(miStart, "UCOMISD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 42058 } 42059 42060 /** 42061 * Generate a register--register-indirect UCOMISD. That is, 42062 * <PRE> 42063 * dstReg <<= (quad) [srcBase] 42064 * </PRE> 42065 * 42066 * @param dstReg destination register 42067 * @param srcBase the source base register 42068 */ 42069 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42070 public final void emitUCOMISD_Reg_RegInd(XMM dstReg, GPR srcBase) { 42071 int miStart = mi; 42072 setMachineCodes(mi++, (byte) 0x66); 42073 generateREXprefix(false, dstReg, null, srcBase); 42074 setMachineCodes(mi++, (byte) 0x0F); 42075 setMachineCodes(mi++, (byte) 0x2E); 42076 emitRegIndirectRegOperands(srcBase, dstReg); 42077 if (lister != null) lister.RRN(miStart, "UCOMISD", dstReg, srcBase); 42078 } 42079 42080 42081 /** 42082 * Generate a register--register CMPEQSD. That is, 42083 * <PRE> 42084 * dstReg <<= (quad) srcReg 42085 * </PRE> 42086 * 42087 * @param dstReg destination register 42088 * @param srcReg source register 42089 */ 42090 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42091 public final void emitCMPEQSD_Reg_Reg(XMM dstReg, XMM srcReg) { 42092 int miStart = mi; 42093 setMachineCodes(mi++, (byte) 0xF2); 42094 generateREXprefix(false, dstReg, null, srcReg); 42095 setMachineCodes(mi++, (byte) 0x0F); 42096 setMachineCodes(mi++, (byte) 0xC2); 42097 emitRegRegOperands(srcReg, dstReg); 42098 setMachineCodes(mi++, (byte) 0); 42099 if (lister != null) lister.RR(miStart, "CMPEQSD", dstReg, srcReg); 42100 } 42101 42102 /** 42103 * Generate a register--register-displacement CMPEQSD. That is, 42104 * <PRE> 42105 * dstReg <<= (quad) [srcBase + srcDisp] 42106 * </PRE> 42107 * 42108 * @param dstReg destination register 42109 * @param srcBase the source base register 42110 * @param srcDisp the source displacement 42111 */ 42112 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42113 public final void emitCMPEQSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 42114 int miStart = mi; 42115 setMachineCodes(mi++, (byte) 0xF2); 42116 generateREXprefix(false, dstReg, null, srcBase); 42117 setMachineCodes(mi++, (byte) 0x0F); 42118 setMachineCodes(mi++, (byte) 0xC2); 42119 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 42120 setMachineCodes(mi++, (byte) 0); 42121 if (lister != null) lister.RRD(miStart, "CMPEQSD", dstReg, srcBase, srcDisp); 42122 } 42123 42124 /** 42125 * Generate a register--register-offset CMPEQSD. That is, 42126 * <PRE> 42127 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 42128 * </PRE> 42129 * 42130 * @param dstReg destination register 42131 * @param srcIndex the source index register 42132 * @param srcScale the source scale 42133 * @param srcDisp the source displacement 42134 */ 42135 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42136 public final void emitCMPEQSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 42137 int miStart = mi; 42138 setMachineCodes(mi++, (byte) 0xF2); 42139 generateREXprefix(false, dstReg, srcIndex, null); 42140 setMachineCodes(mi++, (byte) 0x0F); 42141 setMachineCodes(mi++, (byte) 0xC2); 42142 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 42143 setMachineCodes(mi++, (byte) 0); 42144 if (lister != null) lister.RRFD(miStart, "CMPEQSD", dstReg, srcIndex, srcScale, srcDisp); 42145 } 42146 42147 /** 42148 * Generate a register--absolute CMPEQSD. That is, 42149 * <PRE> 42150 * dstReg <<= (quad) [srcDisp] 42151 * </PRE> 42152 * 42153 * @param dstReg destination register 42154 * @param srcDisp the source displacement 42155 */ 42156 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 42157 public final void emitCMPEQSD_Reg_Abs(XMM dstReg, Address srcDisp) { 42158 int miStart = mi; 42159 setMachineCodes(mi++, (byte) 0xF2); 42160 generateREXprefix(false, dstReg, null, null); 42161 setMachineCodes(mi++, (byte) 0x0F); 42162 setMachineCodes(mi++, (byte) 0xC2); 42163 emitAbsRegOperands(srcDisp, dstReg); 42164 setMachineCodes(mi++, (byte) 0); 42165 if (lister != null) lister.RRA(miStart, "CMPEQSD", dstReg, srcDisp); 42166 } 42167 42168 /** 42169 * Generate a register--register-index CMPEQSD. That is, 42170 * <PRE> 42171 * dstReg <<= (quad) srcReg 42172 * </PRE> 42173 * 42174 * @param dstReg destination register 42175 * @param srcBase the source base register 42176 * @param srcIndex the source index register 42177 * @param srcScale the source scale 42178 * @param srcDisp the source displacement 42179 */ 42180 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 42181 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 42182 public final void emitCMPEQSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 42183 int miStart = mi; 42184 setMachineCodes(mi++, (byte) 0xF2); 42185 generateREXprefix(false, dstReg, srcIndex, srcBase); 42186 setMachineCodes(mi++, (byte) 0x0F); 42187 setMachineCodes(mi++, (byte) 0xC2); 42188 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 42189 setMachineCodes(mi++, (byte) 0); 42190 if (lister != null) lister.RRXD(miStart, "CMPEQSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 42191 } 42192 42193 /** 42194 * Generate a register--register-indirect CMPEQSD. That is, 42195 * <PRE> 42196 * dstReg <<= (quad) [srcBase] 42197 * </PRE> 42198 * 42199 * @param dstReg destination register 42200 * @param srcBase the source base register 42201 */ 42202 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42203 public final void emitCMPEQSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 42204 int miStart = mi; 42205 setMachineCodes(mi++, (byte) 0xF2); 42206 generateREXprefix(false, dstReg, null, srcBase); 42207 setMachineCodes(mi++, (byte) 0x0F); 42208 setMachineCodes(mi++, (byte) 0xC2); 42209 emitRegIndirectRegOperands(srcBase, dstReg); 42210 setMachineCodes(mi++, (byte) 0); 42211 if (lister != null) lister.RRN(miStart, "CMPEQSD", dstReg, srcBase); 42212 } 42213 42214 42215 /** 42216 * Generate a register--register CMPLTSD. That is, 42217 * <PRE> 42218 * dstReg <<= (quad) srcReg 42219 * </PRE> 42220 * 42221 * @param dstReg destination register 42222 * @param srcReg source register 42223 */ 42224 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42225 public final void emitCMPLTSD_Reg_Reg(XMM dstReg, XMM srcReg) { 42226 int miStart = mi; 42227 setMachineCodes(mi++, (byte) 0xF2); 42228 generateREXprefix(false, dstReg, null, srcReg); 42229 setMachineCodes(mi++, (byte) 0x0F); 42230 setMachineCodes(mi++, (byte) 0xC2); 42231 emitRegRegOperands(srcReg, dstReg); 42232 setMachineCodes(mi++, (byte) 1); 42233 if (lister != null) lister.RR(miStart, "CMPLTSD", dstReg, srcReg); 42234 } 42235 42236 /** 42237 * Generate a register--register-displacement CMPLTSD. That is, 42238 * <PRE> 42239 * dstReg <<= (quad) [srcBase + srcDisp] 42240 * </PRE> 42241 * 42242 * @param dstReg destination register 42243 * @param srcBase the source base register 42244 * @param srcDisp the source displacement 42245 */ 42246 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42247 public final void emitCMPLTSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 42248 int miStart = mi; 42249 setMachineCodes(mi++, (byte) 0xF2); 42250 generateREXprefix(false, dstReg, null, srcBase); 42251 setMachineCodes(mi++, (byte) 0x0F); 42252 setMachineCodes(mi++, (byte) 0xC2); 42253 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 42254 setMachineCodes(mi++, (byte) 1); 42255 if (lister != null) lister.RRD(miStart, "CMPLTSD", dstReg, srcBase, srcDisp); 42256 } 42257 42258 /** 42259 * Generate a register--register-offset CMPLTSD. That is, 42260 * <PRE> 42261 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 42262 * </PRE> 42263 * 42264 * @param dstReg destination register 42265 * @param srcIndex the source index register 42266 * @param srcScale the source scale 42267 * @param srcDisp the source displacement 42268 */ 42269 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42270 public final void emitCMPLTSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 42271 int miStart = mi; 42272 setMachineCodes(mi++, (byte) 0xF2); 42273 generateREXprefix(false, dstReg, srcIndex, null); 42274 setMachineCodes(mi++, (byte) 0x0F); 42275 setMachineCodes(mi++, (byte) 0xC2); 42276 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 42277 setMachineCodes(mi++, (byte) 1); 42278 if (lister != null) lister.RRFD(miStart, "CMPLTSD", dstReg, srcIndex, srcScale, srcDisp); 42279 } 42280 42281 /** 42282 * Generate a register--absolute CMPLTSD. That is, 42283 * <PRE> 42284 * dstReg <<= (quad) [srcDisp] 42285 * </PRE> 42286 * 42287 * @param dstReg destination register 42288 * @param srcDisp the source displacement 42289 */ 42290 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 42291 public final void emitCMPLTSD_Reg_Abs(XMM dstReg, Address srcDisp) { 42292 int miStart = mi; 42293 setMachineCodes(mi++, (byte) 0xF2); 42294 generateREXprefix(false, dstReg, null, null); 42295 setMachineCodes(mi++, (byte) 0x0F); 42296 setMachineCodes(mi++, (byte) 0xC2); 42297 emitAbsRegOperands(srcDisp, dstReg); 42298 setMachineCodes(mi++, (byte) 1); 42299 if (lister != null) lister.RRA(miStart, "CMPLTSD", dstReg, srcDisp); 42300 } 42301 42302 /** 42303 * Generate a register--register-index CMPLTSD. That is, 42304 * <PRE> 42305 * dstReg <<= (quad) srcReg 42306 * </PRE> 42307 * 42308 * @param dstReg destination register 42309 * @param srcBase the source base register 42310 * @param srcIndex the source index register 42311 * @param srcScale the source scale 42312 * @param srcDisp the source displacement 42313 */ 42314 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 42315 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 42316 public final void emitCMPLTSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 42317 int miStart = mi; 42318 setMachineCodes(mi++, (byte) 0xF2); 42319 generateREXprefix(false, dstReg, srcIndex, srcBase); 42320 setMachineCodes(mi++, (byte) 0x0F); 42321 setMachineCodes(mi++, (byte) 0xC2); 42322 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 42323 setMachineCodes(mi++, (byte) 1); 42324 if (lister != null) lister.RRXD(miStart, "CMPLTSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 42325 } 42326 42327 /** 42328 * Generate a register--register-indirect CMPLTSD. That is, 42329 * <PRE> 42330 * dstReg <<= (quad) [srcBase] 42331 * </PRE> 42332 * 42333 * @param dstReg destination register 42334 * @param srcBase the source base register 42335 */ 42336 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42337 public final void emitCMPLTSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 42338 int miStart = mi; 42339 setMachineCodes(mi++, (byte) 0xF2); 42340 generateREXprefix(false, dstReg, null, srcBase); 42341 setMachineCodes(mi++, (byte) 0x0F); 42342 setMachineCodes(mi++, (byte) 0xC2); 42343 emitRegIndirectRegOperands(srcBase, dstReg); 42344 setMachineCodes(mi++, (byte) 1); 42345 if (lister != null) lister.RRN(miStart, "CMPLTSD", dstReg, srcBase); 42346 } 42347 42348 42349 /** 42350 * Generate a register--register CMPLESD. That is, 42351 * <PRE> 42352 * dstReg <<= (quad) srcReg 42353 * </PRE> 42354 * 42355 * @param dstReg destination register 42356 * @param srcReg source register 42357 */ 42358 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42359 public final void emitCMPLESD_Reg_Reg(XMM dstReg, XMM srcReg) { 42360 int miStart = mi; 42361 setMachineCodes(mi++, (byte) 0xF2); 42362 generateREXprefix(false, dstReg, null, srcReg); 42363 setMachineCodes(mi++, (byte) 0x0F); 42364 setMachineCodes(mi++, (byte) 0xC2); 42365 emitRegRegOperands(srcReg, dstReg); 42366 setMachineCodes(mi++, (byte) 2); 42367 if (lister != null) lister.RR(miStart, "CMPLESD", dstReg, srcReg); 42368 } 42369 42370 /** 42371 * Generate a register--register-displacement CMPLESD. That is, 42372 * <PRE> 42373 * dstReg <<= (quad) [srcBase + srcDisp] 42374 * </PRE> 42375 * 42376 * @param dstReg destination register 42377 * @param srcBase the source base register 42378 * @param srcDisp the source displacement 42379 */ 42380 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42381 public final void emitCMPLESD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 42382 int miStart = mi; 42383 setMachineCodes(mi++, (byte) 0xF2); 42384 generateREXprefix(false, dstReg, null, srcBase); 42385 setMachineCodes(mi++, (byte) 0x0F); 42386 setMachineCodes(mi++, (byte) 0xC2); 42387 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 42388 setMachineCodes(mi++, (byte) 2); 42389 if (lister != null) lister.RRD(miStart, "CMPLESD", dstReg, srcBase, srcDisp); 42390 } 42391 42392 /** 42393 * Generate a register--register-offset CMPLESD. That is, 42394 * <PRE> 42395 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 42396 * </PRE> 42397 * 42398 * @param dstReg destination register 42399 * @param srcIndex the source index register 42400 * @param srcScale the source scale 42401 * @param srcDisp the source displacement 42402 */ 42403 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42404 public final void emitCMPLESD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 42405 int miStart = mi; 42406 setMachineCodes(mi++, (byte) 0xF2); 42407 generateREXprefix(false, dstReg, srcIndex, null); 42408 setMachineCodes(mi++, (byte) 0x0F); 42409 setMachineCodes(mi++, (byte) 0xC2); 42410 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 42411 setMachineCodes(mi++, (byte) 2); 42412 if (lister != null) lister.RRFD(miStart, "CMPLESD", dstReg, srcIndex, srcScale, srcDisp); 42413 } 42414 42415 /** 42416 * Generate a register--absolute CMPLESD. That is, 42417 * <PRE> 42418 * dstReg <<= (quad) [srcDisp] 42419 * </PRE> 42420 * 42421 * @param dstReg destination register 42422 * @param srcDisp the source displacement 42423 */ 42424 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 42425 public final void emitCMPLESD_Reg_Abs(XMM dstReg, Address srcDisp) { 42426 int miStart = mi; 42427 setMachineCodes(mi++, (byte) 0xF2); 42428 generateREXprefix(false, dstReg, null, null); 42429 setMachineCodes(mi++, (byte) 0x0F); 42430 setMachineCodes(mi++, (byte) 0xC2); 42431 emitAbsRegOperands(srcDisp, dstReg); 42432 setMachineCodes(mi++, (byte) 2); 42433 if (lister != null) lister.RRA(miStart, "CMPLESD", dstReg, srcDisp); 42434 } 42435 42436 /** 42437 * Generate a register--register-index CMPLESD. That is, 42438 * <PRE> 42439 * dstReg <<= (quad) srcReg 42440 * </PRE> 42441 * 42442 * @param dstReg destination register 42443 * @param srcBase the source base register 42444 * @param srcIndex the source index register 42445 * @param srcScale the source scale 42446 * @param srcDisp the source displacement 42447 */ 42448 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 42449 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 42450 public final void emitCMPLESD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 42451 int miStart = mi; 42452 setMachineCodes(mi++, (byte) 0xF2); 42453 generateREXprefix(false, dstReg, srcIndex, srcBase); 42454 setMachineCodes(mi++, (byte) 0x0F); 42455 setMachineCodes(mi++, (byte) 0xC2); 42456 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 42457 setMachineCodes(mi++, (byte) 2); 42458 if (lister != null) lister.RRXD(miStart, "CMPLESD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 42459 } 42460 42461 /** 42462 * Generate a register--register-indirect CMPLESD. That is, 42463 * <PRE> 42464 * dstReg <<= (quad) [srcBase] 42465 * </PRE> 42466 * 42467 * @param dstReg destination register 42468 * @param srcBase the source base register 42469 */ 42470 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42471 public final void emitCMPLESD_Reg_RegInd(XMM dstReg, GPR srcBase) { 42472 int miStart = mi; 42473 setMachineCodes(mi++, (byte) 0xF2); 42474 generateREXprefix(false, dstReg, null, srcBase); 42475 setMachineCodes(mi++, (byte) 0x0F); 42476 setMachineCodes(mi++, (byte) 0xC2); 42477 emitRegIndirectRegOperands(srcBase, dstReg); 42478 setMachineCodes(mi++, (byte) 2); 42479 if (lister != null) lister.RRN(miStart, "CMPLESD", dstReg, srcBase); 42480 } 42481 42482 42483 /** 42484 * Generate a register--register CMPUNORDSD. That is, 42485 * <PRE> 42486 * dstReg <<= (quad) srcReg 42487 * </PRE> 42488 * 42489 * @param dstReg destination register 42490 * @param srcReg source register 42491 */ 42492 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42493 public final void emitCMPUNORDSD_Reg_Reg(XMM dstReg, XMM srcReg) { 42494 int miStart = mi; 42495 setMachineCodes(mi++, (byte) 0xF2); 42496 generateREXprefix(false, dstReg, null, srcReg); 42497 setMachineCodes(mi++, (byte) 0x0F); 42498 setMachineCodes(mi++, (byte) 0xC2); 42499 emitRegRegOperands(srcReg, dstReg); 42500 setMachineCodes(mi++, (byte) 3); 42501 if (lister != null) lister.RR(miStart, "CMPUNORDSD", dstReg, srcReg); 42502 } 42503 42504 /** 42505 * Generate a register--register-displacement CMPUNORDSD. That is, 42506 * <PRE> 42507 * dstReg <<= (quad) [srcBase + srcDisp] 42508 * </PRE> 42509 * 42510 * @param dstReg destination register 42511 * @param srcBase the source base register 42512 * @param srcDisp the source displacement 42513 */ 42514 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42515 public final void emitCMPUNORDSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 42516 int miStart = mi; 42517 setMachineCodes(mi++, (byte) 0xF2); 42518 generateREXprefix(false, dstReg, null, srcBase); 42519 setMachineCodes(mi++, (byte) 0x0F); 42520 setMachineCodes(mi++, (byte) 0xC2); 42521 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 42522 setMachineCodes(mi++, (byte) 3); 42523 if (lister != null) lister.RRD(miStart, "CMPUNORDSD", dstReg, srcBase, srcDisp); 42524 } 42525 42526 /** 42527 * Generate a register--register-offset CMPUNORDSD. That is, 42528 * <PRE> 42529 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 42530 * </PRE> 42531 * 42532 * @param dstReg destination register 42533 * @param srcIndex the source index register 42534 * @param srcScale the source scale 42535 * @param srcDisp the source displacement 42536 */ 42537 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42538 public final void emitCMPUNORDSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 42539 int miStart = mi; 42540 setMachineCodes(mi++, (byte) 0xF2); 42541 generateREXprefix(false, dstReg, srcIndex, null); 42542 setMachineCodes(mi++, (byte) 0x0F); 42543 setMachineCodes(mi++, (byte) 0xC2); 42544 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 42545 setMachineCodes(mi++, (byte) 3); 42546 if (lister != null) lister.RRFD(miStart, "CMPUNORDSD", dstReg, srcIndex, srcScale, srcDisp); 42547 } 42548 42549 /** 42550 * Generate a register--absolute CMPUNORDSD. That is, 42551 * <PRE> 42552 * dstReg <<= (quad) [srcDisp] 42553 * </PRE> 42554 * 42555 * @param dstReg destination register 42556 * @param srcDisp the source displacement 42557 */ 42558 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 42559 public final void emitCMPUNORDSD_Reg_Abs(XMM dstReg, Address srcDisp) { 42560 int miStart = mi; 42561 setMachineCodes(mi++, (byte) 0xF2); 42562 generateREXprefix(false, dstReg, null, null); 42563 setMachineCodes(mi++, (byte) 0x0F); 42564 setMachineCodes(mi++, (byte) 0xC2); 42565 emitAbsRegOperands(srcDisp, dstReg); 42566 setMachineCodes(mi++, (byte) 3); 42567 if (lister != null) lister.RRA(miStart, "CMPUNORDSD", dstReg, srcDisp); 42568 } 42569 42570 /** 42571 * Generate a register--register-index CMPUNORDSD. That is, 42572 * <PRE> 42573 * dstReg <<= (quad) srcReg 42574 * </PRE> 42575 * 42576 * @param dstReg destination register 42577 * @param srcBase the source base register 42578 * @param srcIndex the source index register 42579 * @param srcScale the source scale 42580 * @param srcDisp the source displacement 42581 */ 42582 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 42583 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 42584 public final void emitCMPUNORDSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 42585 int miStart = mi; 42586 setMachineCodes(mi++, (byte) 0xF2); 42587 generateREXprefix(false, dstReg, srcIndex, srcBase); 42588 setMachineCodes(mi++, (byte) 0x0F); 42589 setMachineCodes(mi++, (byte) 0xC2); 42590 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 42591 setMachineCodes(mi++, (byte) 3); 42592 if (lister != null) lister.RRXD(miStart, "CMPUNORDSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 42593 } 42594 42595 /** 42596 * Generate a register--register-indirect CMPUNORDSD. That is, 42597 * <PRE> 42598 * dstReg <<= (quad) [srcBase] 42599 * </PRE> 42600 * 42601 * @param dstReg destination register 42602 * @param srcBase the source base register 42603 */ 42604 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42605 public final void emitCMPUNORDSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 42606 int miStart = mi; 42607 setMachineCodes(mi++, (byte) 0xF2); 42608 generateREXprefix(false, dstReg, null, srcBase); 42609 setMachineCodes(mi++, (byte) 0x0F); 42610 setMachineCodes(mi++, (byte) 0xC2); 42611 emitRegIndirectRegOperands(srcBase, dstReg); 42612 setMachineCodes(mi++, (byte) 3); 42613 if (lister != null) lister.RRN(miStart, "CMPUNORDSD", dstReg, srcBase); 42614 } 42615 42616 42617 /** 42618 * Generate a register--register CMPNESD. That is, 42619 * <PRE> 42620 * dstReg <<= (quad) srcReg 42621 * </PRE> 42622 * 42623 * @param dstReg destination register 42624 * @param srcReg source register 42625 */ 42626 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42627 public final void emitCMPNESD_Reg_Reg(XMM dstReg, XMM srcReg) { 42628 int miStart = mi; 42629 setMachineCodes(mi++, (byte) 0xF2); 42630 generateREXprefix(false, dstReg, null, srcReg); 42631 setMachineCodes(mi++, (byte) 0x0F); 42632 setMachineCodes(mi++, (byte) 0xC2); 42633 emitRegRegOperands(srcReg, dstReg); 42634 setMachineCodes(mi++, (byte) 4); 42635 if (lister != null) lister.RR(miStart, "CMPNESD", dstReg, srcReg); 42636 } 42637 42638 /** 42639 * Generate a register--register-displacement CMPNESD. That is, 42640 * <PRE> 42641 * dstReg <<= (quad) [srcBase + srcDisp] 42642 * </PRE> 42643 * 42644 * @param dstReg destination register 42645 * @param srcBase the source base register 42646 * @param srcDisp the source displacement 42647 */ 42648 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42649 public final void emitCMPNESD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 42650 int miStart = mi; 42651 setMachineCodes(mi++, (byte) 0xF2); 42652 generateREXprefix(false, dstReg, null, srcBase); 42653 setMachineCodes(mi++, (byte) 0x0F); 42654 setMachineCodes(mi++, (byte) 0xC2); 42655 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 42656 setMachineCodes(mi++, (byte) 4); 42657 if (lister != null) lister.RRD(miStart, "CMPNESD", dstReg, srcBase, srcDisp); 42658 } 42659 42660 /** 42661 * Generate a register--register-offset CMPNESD. That is, 42662 * <PRE> 42663 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 42664 * </PRE> 42665 * 42666 * @param dstReg destination register 42667 * @param srcIndex the source index register 42668 * @param srcScale the source scale 42669 * @param srcDisp the source displacement 42670 */ 42671 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42672 public final void emitCMPNESD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 42673 int miStart = mi; 42674 setMachineCodes(mi++, (byte) 0xF2); 42675 generateREXprefix(false, dstReg, srcIndex, null); 42676 setMachineCodes(mi++, (byte) 0x0F); 42677 setMachineCodes(mi++, (byte) 0xC2); 42678 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 42679 setMachineCodes(mi++, (byte) 4); 42680 if (lister != null) lister.RRFD(miStart, "CMPNESD", dstReg, srcIndex, srcScale, srcDisp); 42681 } 42682 42683 /** 42684 * Generate a register--absolute CMPNESD. That is, 42685 * <PRE> 42686 * dstReg <<= (quad) [srcDisp] 42687 * </PRE> 42688 * 42689 * @param dstReg destination register 42690 * @param srcDisp the source displacement 42691 */ 42692 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 42693 public final void emitCMPNESD_Reg_Abs(XMM dstReg, Address srcDisp) { 42694 int miStart = mi; 42695 setMachineCodes(mi++, (byte) 0xF2); 42696 generateREXprefix(false, dstReg, null, null); 42697 setMachineCodes(mi++, (byte) 0x0F); 42698 setMachineCodes(mi++, (byte) 0xC2); 42699 emitAbsRegOperands(srcDisp, dstReg); 42700 setMachineCodes(mi++, (byte) 4); 42701 if (lister != null) lister.RRA(miStart, "CMPNESD", dstReg, srcDisp); 42702 } 42703 42704 /** 42705 * Generate a register--register-index CMPNESD. That is, 42706 * <PRE> 42707 * dstReg <<= (quad) srcReg 42708 * </PRE> 42709 * 42710 * @param dstReg destination register 42711 * @param srcBase the source base register 42712 * @param srcIndex the source index register 42713 * @param srcScale the source scale 42714 * @param srcDisp the source displacement 42715 */ 42716 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 42717 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 42718 public final void emitCMPNESD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 42719 int miStart = mi; 42720 setMachineCodes(mi++, (byte) 0xF2); 42721 generateREXprefix(false, dstReg, srcIndex, srcBase); 42722 setMachineCodes(mi++, (byte) 0x0F); 42723 setMachineCodes(mi++, (byte) 0xC2); 42724 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 42725 setMachineCodes(mi++, (byte) 4); 42726 if (lister != null) lister.RRXD(miStart, "CMPNESD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 42727 } 42728 42729 /** 42730 * Generate a register--register-indirect CMPNESD. That is, 42731 * <PRE> 42732 * dstReg <<= (quad) [srcBase] 42733 * </PRE> 42734 * 42735 * @param dstReg destination register 42736 * @param srcBase the source base register 42737 */ 42738 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42739 public final void emitCMPNESD_Reg_RegInd(XMM dstReg, GPR srcBase) { 42740 int miStart = mi; 42741 setMachineCodes(mi++, (byte) 0xF2); 42742 generateREXprefix(false, dstReg, null, srcBase); 42743 setMachineCodes(mi++, (byte) 0x0F); 42744 setMachineCodes(mi++, (byte) 0xC2); 42745 emitRegIndirectRegOperands(srcBase, dstReg); 42746 setMachineCodes(mi++, (byte) 4); 42747 if (lister != null) lister.RRN(miStart, "CMPNESD", dstReg, srcBase); 42748 } 42749 42750 42751 /** 42752 * Generate a register--register CMPNLTSD. That is, 42753 * <PRE> 42754 * dstReg <<= (quad) srcReg 42755 * </PRE> 42756 * 42757 * @param dstReg destination register 42758 * @param srcReg source register 42759 */ 42760 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42761 public final void emitCMPNLTSD_Reg_Reg(XMM dstReg, XMM srcReg) { 42762 int miStart = mi; 42763 setMachineCodes(mi++, (byte) 0xF2); 42764 generateREXprefix(false, dstReg, null, srcReg); 42765 setMachineCodes(mi++, (byte) 0x0F); 42766 setMachineCodes(mi++, (byte) 0xC2); 42767 emitRegRegOperands(srcReg, dstReg); 42768 setMachineCodes(mi++, (byte) 5); 42769 if (lister != null) lister.RR(miStart, "CMPNLTSD", dstReg, srcReg); 42770 } 42771 42772 /** 42773 * Generate a register--register-displacement CMPNLTSD. That is, 42774 * <PRE> 42775 * dstReg <<= (quad) [srcBase + srcDisp] 42776 * </PRE> 42777 * 42778 * @param dstReg destination register 42779 * @param srcBase the source base register 42780 * @param srcDisp the source displacement 42781 */ 42782 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42783 public final void emitCMPNLTSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 42784 int miStart = mi; 42785 setMachineCodes(mi++, (byte) 0xF2); 42786 generateREXprefix(false, dstReg, null, srcBase); 42787 setMachineCodes(mi++, (byte) 0x0F); 42788 setMachineCodes(mi++, (byte) 0xC2); 42789 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 42790 setMachineCodes(mi++, (byte) 5); 42791 if (lister != null) lister.RRD(miStart, "CMPNLTSD", dstReg, srcBase, srcDisp); 42792 } 42793 42794 /** 42795 * Generate a register--register-offset CMPNLTSD. That is, 42796 * <PRE> 42797 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 42798 * </PRE> 42799 * 42800 * @param dstReg destination register 42801 * @param srcIndex the source index register 42802 * @param srcScale the source scale 42803 * @param srcDisp the source displacement 42804 */ 42805 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42806 public final void emitCMPNLTSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 42807 int miStart = mi; 42808 setMachineCodes(mi++, (byte) 0xF2); 42809 generateREXprefix(false, dstReg, srcIndex, null); 42810 setMachineCodes(mi++, (byte) 0x0F); 42811 setMachineCodes(mi++, (byte) 0xC2); 42812 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 42813 setMachineCodes(mi++, (byte) 5); 42814 if (lister != null) lister.RRFD(miStart, "CMPNLTSD", dstReg, srcIndex, srcScale, srcDisp); 42815 } 42816 42817 /** 42818 * Generate a register--absolute CMPNLTSD. That is, 42819 * <PRE> 42820 * dstReg <<= (quad) [srcDisp] 42821 * </PRE> 42822 * 42823 * @param dstReg destination register 42824 * @param srcDisp the source displacement 42825 */ 42826 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 42827 public final void emitCMPNLTSD_Reg_Abs(XMM dstReg, Address srcDisp) { 42828 int miStart = mi; 42829 setMachineCodes(mi++, (byte) 0xF2); 42830 generateREXprefix(false, dstReg, null, null); 42831 setMachineCodes(mi++, (byte) 0x0F); 42832 setMachineCodes(mi++, (byte) 0xC2); 42833 emitAbsRegOperands(srcDisp, dstReg); 42834 setMachineCodes(mi++, (byte) 5); 42835 if (lister != null) lister.RRA(miStart, "CMPNLTSD", dstReg, srcDisp); 42836 } 42837 42838 /** 42839 * Generate a register--register-index CMPNLTSD. That is, 42840 * <PRE> 42841 * dstReg <<= (quad) srcReg 42842 * </PRE> 42843 * 42844 * @param dstReg destination register 42845 * @param srcBase the source base register 42846 * @param srcIndex the source index register 42847 * @param srcScale the source scale 42848 * @param srcDisp the source displacement 42849 */ 42850 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 42851 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 42852 public final void emitCMPNLTSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 42853 int miStart = mi; 42854 setMachineCodes(mi++, (byte) 0xF2); 42855 generateREXprefix(false, dstReg, srcIndex, srcBase); 42856 setMachineCodes(mi++, (byte) 0x0F); 42857 setMachineCodes(mi++, (byte) 0xC2); 42858 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 42859 setMachineCodes(mi++, (byte) 5); 42860 if (lister != null) lister.RRXD(miStart, "CMPNLTSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 42861 } 42862 42863 /** 42864 * Generate a register--register-indirect CMPNLTSD. That is, 42865 * <PRE> 42866 * dstReg <<= (quad) [srcBase] 42867 * </PRE> 42868 * 42869 * @param dstReg destination register 42870 * @param srcBase the source base register 42871 */ 42872 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42873 public final void emitCMPNLTSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 42874 int miStart = mi; 42875 setMachineCodes(mi++, (byte) 0xF2); 42876 generateREXprefix(false, dstReg, null, srcBase); 42877 setMachineCodes(mi++, (byte) 0x0F); 42878 setMachineCodes(mi++, (byte) 0xC2); 42879 emitRegIndirectRegOperands(srcBase, dstReg); 42880 setMachineCodes(mi++, (byte) 5); 42881 if (lister != null) lister.RRN(miStart, "CMPNLTSD", dstReg, srcBase); 42882 } 42883 42884 42885 /** 42886 * Generate a register--register CMPNLESD. That is, 42887 * <PRE> 42888 * dstReg <<= (quad) srcReg 42889 * </PRE> 42890 * 42891 * @param dstReg destination register 42892 * @param srcReg source register 42893 */ 42894 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42895 public final void emitCMPNLESD_Reg_Reg(XMM dstReg, XMM srcReg) { 42896 int miStart = mi; 42897 setMachineCodes(mi++, (byte) 0xF2); 42898 generateREXprefix(false, dstReg, null, srcReg); 42899 setMachineCodes(mi++, (byte) 0x0F); 42900 setMachineCodes(mi++, (byte) 0xC2); 42901 emitRegRegOperands(srcReg, dstReg); 42902 setMachineCodes(mi++, (byte) 6); 42903 if (lister != null) lister.RR(miStart, "CMPNLESD", dstReg, srcReg); 42904 } 42905 42906 /** 42907 * Generate a register--register-displacement CMPNLESD. That is, 42908 * <PRE> 42909 * dstReg <<= (quad) [srcBase + srcDisp] 42910 * </PRE> 42911 * 42912 * @param dstReg destination register 42913 * @param srcBase the source base register 42914 * @param srcDisp the source displacement 42915 */ 42916 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42917 public final void emitCMPNLESD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 42918 int miStart = mi; 42919 setMachineCodes(mi++, (byte) 0xF2); 42920 generateREXprefix(false, dstReg, null, srcBase); 42921 setMachineCodes(mi++, (byte) 0x0F); 42922 setMachineCodes(mi++, (byte) 0xC2); 42923 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 42924 setMachineCodes(mi++, (byte) 6); 42925 if (lister != null) lister.RRD(miStart, "CMPNLESD", dstReg, srcBase, srcDisp); 42926 } 42927 42928 /** 42929 * Generate a register--register-offset CMPNLESD. That is, 42930 * <PRE> 42931 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 42932 * </PRE> 42933 * 42934 * @param dstReg destination register 42935 * @param srcIndex the source index register 42936 * @param srcScale the source scale 42937 * @param srcDisp the source displacement 42938 */ 42939 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 42940 public final void emitCMPNLESD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 42941 int miStart = mi; 42942 setMachineCodes(mi++, (byte) 0xF2); 42943 generateREXprefix(false, dstReg, srcIndex, null); 42944 setMachineCodes(mi++, (byte) 0x0F); 42945 setMachineCodes(mi++, (byte) 0xC2); 42946 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 42947 setMachineCodes(mi++, (byte) 6); 42948 if (lister != null) lister.RRFD(miStart, "CMPNLESD", dstReg, srcIndex, srcScale, srcDisp); 42949 } 42950 42951 /** 42952 * Generate a register--absolute CMPNLESD. That is, 42953 * <PRE> 42954 * dstReg <<= (quad) [srcDisp] 42955 * </PRE> 42956 * 42957 * @param dstReg destination register 42958 * @param srcDisp the source displacement 42959 */ 42960 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 42961 public final void emitCMPNLESD_Reg_Abs(XMM dstReg, Address srcDisp) { 42962 int miStart = mi; 42963 setMachineCodes(mi++, (byte) 0xF2); 42964 generateREXprefix(false, dstReg, null, null); 42965 setMachineCodes(mi++, (byte) 0x0F); 42966 setMachineCodes(mi++, (byte) 0xC2); 42967 emitAbsRegOperands(srcDisp, dstReg); 42968 setMachineCodes(mi++, (byte) 6); 42969 if (lister != null) lister.RRA(miStart, "CMPNLESD", dstReg, srcDisp); 42970 } 42971 42972 /** 42973 * Generate a register--register-index CMPNLESD. That is, 42974 * <PRE> 42975 * dstReg <<= (quad) srcReg 42976 * </PRE> 42977 * 42978 * @param dstReg destination register 42979 * @param srcBase the source base register 42980 * @param srcIndex the source index register 42981 * @param srcScale the source scale 42982 * @param srcDisp the source displacement 42983 */ 42984 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 42985 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 42986 public final void emitCMPNLESD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 42987 int miStart = mi; 42988 setMachineCodes(mi++, (byte) 0xF2); 42989 generateREXprefix(false, dstReg, srcIndex, srcBase); 42990 setMachineCodes(mi++, (byte) 0x0F); 42991 setMachineCodes(mi++, (byte) 0xC2); 42992 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 42993 setMachineCodes(mi++, (byte) 6); 42994 if (lister != null) lister.RRXD(miStart, "CMPNLESD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 42995 } 42996 42997 /** 42998 * Generate a register--register-indirect CMPNLESD. That is, 42999 * <PRE> 43000 * dstReg <<= (quad) [srcBase] 43001 * </PRE> 43002 * 43003 * @param dstReg destination register 43004 * @param srcBase the source base register 43005 */ 43006 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43007 public final void emitCMPNLESD_Reg_RegInd(XMM dstReg, GPR srcBase) { 43008 int miStart = mi; 43009 setMachineCodes(mi++, (byte) 0xF2); 43010 generateREXprefix(false, dstReg, null, srcBase); 43011 setMachineCodes(mi++, (byte) 0x0F); 43012 setMachineCodes(mi++, (byte) 0xC2); 43013 emitRegIndirectRegOperands(srcBase, dstReg); 43014 setMachineCodes(mi++, (byte) 6); 43015 if (lister != null) lister.RRN(miStart, "CMPNLESD", dstReg, srcBase); 43016 } 43017 43018 43019 /** 43020 * Generate a register--register CMPORDSD. That is, 43021 * <PRE> 43022 * dstReg <<= (quad) srcReg 43023 * </PRE> 43024 * 43025 * @param dstReg destination register 43026 * @param srcReg source register 43027 */ 43028 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43029 public final void emitCMPORDSD_Reg_Reg(XMM dstReg, XMM srcReg) { 43030 int miStart = mi; 43031 setMachineCodes(mi++, (byte) 0xF2); 43032 generateREXprefix(false, dstReg, null, srcReg); 43033 setMachineCodes(mi++, (byte) 0x0F); 43034 setMachineCodes(mi++, (byte) 0xC2); 43035 emitRegRegOperands(srcReg, dstReg); 43036 setMachineCodes(mi++, (byte) 7); 43037 if (lister != null) lister.RR(miStart, "CMPORDSD", dstReg, srcReg); 43038 } 43039 43040 /** 43041 * Generate a register--register-displacement CMPORDSD. That is, 43042 * <PRE> 43043 * dstReg <<= (quad) [srcBase + srcDisp] 43044 * </PRE> 43045 * 43046 * @param dstReg destination register 43047 * @param srcBase the source base register 43048 * @param srcDisp the source displacement 43049 */ 43050 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43051 public final void emitCMPORDSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 43052 int miStart = mi; 43053 setMachineCodes(mi++, (byte) 0xF2); 43054 generateREXprefix(false, dstReg, null, srcBase); 43055 setMachineCodes(mi++, (byte) 0x0F); 43056 setMachineCodes(mi++, (byte) 0xC2); 43057 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 43058 setMachineCodes(mi++, (byte) 7); 43059 if (lister != null) lister.RRD(miStart, "CMPORDSD", dstReg, srcBase, srcDisp); 43060 } 43061 43062 /** 43063 * Generate a register--register-offset CMPORDSD. That is, 43064 * <PRE> 43065 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 43066 * </PRE> 43067 * 43068 * @param dstReg destination register 43069 * @param srcIndex the source index register 43070 * @param srcScale the source scale 43071 * @param srcDisp the source displacement 43072 */ 43073 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43074 public final void emitCMPORDSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 43075 int miStart = mi; 43076 setMachineCodes(mi++, (byte) 0xF2); 43077 generateREXprefix(false, dstReg, srcIndex, null); 43078 setMachineCodes(mi++, (byte) 0x0F); 43079 setMachineCodes(mi++, (byte) 0xC2); 43080 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 43081 setMachineCodes(mi++, (byte) 7); 43082 if (lister != null) lister.RRFD(miStart, "CMPORDSD", dstReg, srcIndex, srcScale, srcDisp); 43083 } 43084 43085 /** 43086 * Generate a register--absolute CMPORDSD. That is, 43087 * <PRE> 43088 * dstReg <<= (quad) [srcDisp] 43089 * </PRE> 43090 * 43091 * @param dstReg destination register 43092 * @param srcDisp the source displacement 43093 */ 43094 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 43095 public final void emitCMPORDSD_Reg_Abs(XMM dstReg, Address srcDisp) { 43096 int miStart = mi; 43097 setMachineCodes(mi++, (byte) 0xF2); 43098 generateREXprefix(false, dstReg, null, null); 43099 setMachineCodes(mi++, (byte) 0x0F); 43100 setMachineCodes(mi++, (byte) 0xC2); 43101 emitAbsRegOperands(srcDisp, dstReg); 43102 setMachineCodes(mi++, (byte) 7); 43103 if (lister != null) lister.RRA(miStart, "CMPORDSD", dstReg, srcDisp); 43104 } 43105 43106 /** 43107 * Generate a register--register-index CMPORDSD. That is, 43108 * <PRE> 43109 * dstReg <<= (quad) srcReg 43110 * </PRE> 43111 * 43112 * @param dstReg destination register 43113 * @param srcBase the source base register 43114 * @param srcIndex the source index register 43115 * @param srcScale the source scale 43116 * @param srcDisp the source displacement 43117 */ 43118 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 43119 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 43120 public final void emitCMPORDSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 43121 int miStart = mi; 43122 setMachineCodes(mi++, (byte) 0xF2); 43123 generateREXprefix(false, dstReg, srcIndex, srcBase); 43124 setMachineCodes(mi++, (byte) 0x0F); 43125 setMachineCodes(mi++, (byte) 0xC2); 43126 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 43127 setMachineCodes(mi++, (byte) 7); 43128 if (lister != null) lister.RRXD(miStart, "CMPORDSD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 43129 } 43130 43131 /** 43132 * Generate a register--register-indirect CMPORDSD. That is, 43133 * <PRE> 43134 * dstReg <<= (quad) [srcBase] 43135 * </PRE> 43136 * 43137 * @param dstReg destination register 43138 * @param srcBase the source base register 43139 */ 43140 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43141 public final void emitCMPORDSD_Reg_RegInd(XMM dstReg, GPR srcBase) { 43142 int miStart = mi; 43143 setMachineCodes(mi++, (byte) 0xF2); 43144 generateREXprefix(false, dstReg, null, srcBase); 43145 setMachineCodes(mi++, (byte) 0x0F); 43146 setMachineCodes(mi++, (byte) 0xC2); 43147 emitRegIndirectRegOperands(srcBase, dstReg); 43148 setMachineCodes(mi++, (byte) 7); 43149 if (lister != null) lister.RRN(miStart, "CMPORDSD", dstReg, srcBase); 43150 } 43151 43152 43153 /** 43154 * Generate a register--register PSLLQ. That is, 43155 * <PRE> 43156 * dstReg <<= (quad) srcReg 43157 * </PRE> 43158 * 43159 * @param dstReg destination register 43160 * @param srcReg source register 43161 */ 43162 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43163 public final void emitPSLLQ_Reg_Reg(MM dstReg, MM srcReg) { 43164 int miStart = mi; 43165 generateREXprefix(false, dstReg, null, srcReg); 43166 setMachineCodes(mi++, (byte) 0x0F); 43167 setMachineCodes(mi++, (byte) 0xF3); 43168 emitRegRegOperands(srcReg, dstReg); 43169 if (lister != null) lister.RR(miStart, "PSLLQ", dstReg, srcReg); 43170 } 43171 43172 /** 43173 * Generate a register--register-displacement PSLLQ. That is, 43174 * <PRE> 43175 * dstReg <<= (quad) [srcBase + srcDisp] 43176 * </PRE> 43177 * 43178 * @param dstReg destination register 43179 * @param srcBase the source base register 43180 * @param srcDisp the source displacement 43181 */ 43182 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43183 public final void emitPSLLQ_Reg_RegDisp(MM dstReg, GPR srcBase, Offset srcDisp) { 43184 int miStart = mi; 43185 generateREXprefix(false, dstReg, null, srcBase); 43186 setMachineCodes(mi++, (byte) 0x0F); 43187 setMachineCodes(mi++, (byte) 0xF3); 43188 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 43189 if (lister != null) lister.RRD(miStart, "PSLLQ", dstReg, srcBase, srcDisp); 43190 } 43191 43192 /** 43193 * Generate a register--register-offset PSLLQ. That is, 43194 * <PRE> 43195 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 43196 * </PRE> 43197 * 43198 * @param dstReg destination register 43199 * @param srcIndex the source index register 43200 * @param srcScale the source scale 43201 * @param srcDisp the source displacement 43202 */ 43203 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43204 public final void emitPSLLQ_Reg_RegOff(MM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 43205 int miStart = mi; 43206 generateREXprefix(false, dstReg, srcIndex, null); 43207 setMachineCodes(mi++, (byte) 0x0F); 43208 setMachineCodes(mi++, (byte) 0xF3); 43209 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 43210 if (lister != null) lister.RRFD(miStart, "PSLLQ", dstReg, srcIndex, srcScale, srcDisp); 43211 } 43212 43213 /** 43214 * Generate a register--absolute PSLLQ. That is, 43215 * <PRE> 43216 * dstReg <<= (quad) [srcDisp] 43217 * </PRE> 43218 * 43219 * @param dstReg destination register 43220 * @param srcDisp the source displacement 43221 */ 43222 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 43223 public final void emitPSLLQ_Reg_Abs(MM dstReg, Address srcDisp) { 43224 int miStart = mi; 43225 generateREXprefix(false, dstReg, null, null); 43226 setMachineCodes(mi++, (byte) 0x0F); 43227 setMachineCodes(mi++, (byte) 0xF3); 43228 emitAbsRegOperands(srcDisp, dstReg); 43229 if (lister != null) lister.RRA(miStart, "PSLLQ", dstReg, srcDisp); 43230 } 43231 43232 /** 43233 * Generate a register--register-index PSLLQ. That is, 43234 * <PRE> 43235 * dstReg <<= (quad) srcReg 43236 * </PRE> 43237 * 43238 * @param dstReg destination register 43239 * @param srcBase the source base register 43240 * @param srcIndex the source index register 43241 * @param srcScale the source scale 43242 * @param srcDisp the source displacement 43243 */ 43244 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 43245 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 43246 public final void emitPSLLQ_Reg_RegIdx(MM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 43247 int miStart = mi; 43248 generateREXprefix(false, dstReg, srcIndex, srcBase); 43249 setMachineCodes(mi++, (byte) 0x0F); 43250 setMachineCodes(mi++, (byte) 0xF3); 43251 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 43252 if (lister != null) lister.RRXD(miStart, "PSLLQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 43253 } 43254 43255 /** 43256 * Generate a register--register-indirect PSLLQ. That is, 43257 * <PRE> 43258 * dstReg <<= (quad) [srcBase] 43259 * </PRE> 43260 * 43261 * @param dstReg destination register 43262 * @param srcBase the source base register 43263 */ 43264 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43265 public final void emitPSLLQ_Reg_RegInd(MM dstReg, GPR srcBase) { 43266 int miStart = mi; 43267 generateREXprefix(false, dstReg, null, srcBase); 43268 setMachineCodes(mi++, (byte) 0x0F); 43269 setMachineCodes(mi++, (byte) 0xF3); 43270 emitRegIndirectRegOperands(srcBase, dstReg); 43271 if (lister != null) lister.RRN(miStart, "PSLLQ", dstReg, srcBase); 43272 } 43273 43274 43275 /** 43276 * Generate a register--register PSRLQ. That is, 43277 * <PRE> 43278 * dstReg <<= (quad) srcReg 43279 * </PRE> 43280 * 43281 * @param dstReg destination register 43282 * @param srcReg source register 43283 */ 43284 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43285 public final void emitPSRLQ_Reg_Reg(MM dstReg, MM srcReg) { 43286 int miStart = mi; 43287 generateREXprefix(false, dstReg, null, srcReg); 43288 setMachineCodes(mi++, (byte) 0x0F); 43289 setMachineCodes(mi++, (byte) 0xD3); 43290 emitRegRegOperands(srcReg, dstReg); 43291 if (lister != null) lister.RR(miStart, "PSRLQ", dstReg, srcReg); 43292 } 43293 43294 /** 43295 * Generate a register--register-displacement PSRLQ. That is, 43296 * <PRE> 43297 * dstReg <<= (quad) [srcBase + srcDisp] 43298 * </PRE> 43299 * 43300 * @param dstReg destination register 43301 * @param srcBase the source base register 43302 * @param srcDisp the source displacement 43303 */ 43304 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43305 public final void emitPSRLQ_Reg_RegDisp(MM dstReg, GPR srcBase, Offset srcDisp) { 43306 int miStart = mi; 43307 generateREXprefix(false, dstReg, null, srcBase); 43308 setMachineCodes(mi++, (byte) 0x0F); 43309 setMachineCodes(mi++, (byte) 0xD3); 43310 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 43311 if (lister != null) lister.RRD(miStart, "PSRLQ", dstReg, srcBase, srcDisp); 43312 } 43313 43314 /** 43315 * Generate a register--register-offset PSRLQ. That is, 43316 * <PRE> 43317 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 43318 * </PRE> 43319 * 43320 * @param dstReg destination register 43321 * @param srcIndex the source index register 43322 * @param srcScale the source scale 43323 * @param srcDisp the source displacement 43324 */ 43325 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43326 public final void emitPSRLQ_Reg_RegOff(MM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 43327 int miStart = mi; 43328 generateREXprefix(false, dstReg, srcIndex, null); 43329 setMachineCodes(mi++, (byte) 0x0F); 43330 setMachineCodes(mi++, (byte) 0xD3); 43331 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 43332 if (lister != null) lister.RRFD(miStart, "PSRLQ", dstReg, srcIndex, srcScale, srcDisp); 43333 } 43334 43335 /** 43336 * Generate a register--absolute PSRLQ. That is, 43337 * <PRE> 43338 * dstReg <<= (quad) [srcDisp] 43339 * </PRE> 43340 * 43341 * @param dstReg destination register 43342 * @param srcDisp the source displacement 43343 */ 43344 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 43345 public final void emitPSRLQ_Reg_Abs(MM dstReg, Address srcDisp) { 43346 int miStart = mi; 43347 generateREXprefix(false, dstReg, null, null); 43348 setMachineCodes(mi++, (byte) 0x0F); 43349 setMachineCodes(mi++, (byte) 0xD3); 43350 emitAbsRegOperands(srcDisp, dstReg); 43351 if (lister != null) lister.RRA(miStart, "PSRLQ", dstReg, srcDisp); 43352 } 43353 43354 /** 43355 * Generate a register--register-index PSRLQ. That is, 43356 * <PRE> 43357 * dstReg <<= (quad) srcReg 43358 * </PRE> 43359 * 43360 * @param dstReg destination register 43361 * @param srcBase the source base register 43362 * @param srcIndex the source index register 43363 * @param srcScale the source scale 43364 * @param srcDisp the source displacement 43365 */ 43366 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 43367 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 43368 public final void emitPSRLQ_Reg_RegIdx(MM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 43369 int miStart = mi; 43370 generateREXprefix(false, dstReg, srcIndex, srcBase); 43371 setMachineCodes(mi++, (byte) 0x0F); 43372 setMachineCodes(mi++, (byte) 0xD3); 43373 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 43374 if (lister != null) lister.RRXD(miStart, "PSRLQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 43375 } 43376 43377 /** 43378 * Generate a register--register-indirect PSRLQ. That is, 43379 * <PRE> 43380 * dstReg <<= (quad) [srcBase] 43381 * </PRE> 43382 * 43383 * @param dstReg destination register 43384 * @param srcBase the source base register 43385 */ 43386 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43387 public final void emitPSRLQ_Reg_RegInd(MM dstReg, GPR srcBase) { 43388 int miStart = mi; 43389 generateREXprefix(false, dstReg, null, srcBase); 43390 setMachineCodes(mi++, (byte) 0x0F); 43391 setMachineCodes(mi++, (byte) 0xD3); 43392 emitRegIndirectRegOperands(srcBase, dstReg); 43393 if (lister != null) lister.RRN(miStart, "PSRLQ", dstReg, srcBase); 43394 } 43395 43396 43397 /** 43398 * Generate a register--register PSLLQ. That is, 43399 * <PRE> 43400 * dstReg <<= (quad) srcReg 43401 * </PRE> 43402 * 43403 * @param dstReg destination register 43404 * @param srcReg source register 43405 */ 43406 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43407 public final void emitPSLLQ_Reg_Reg(XMM dstReg, XMM srcReg) { 43408 int miStart = mi; 43409 setMachineCodes(mi++, (byte) 0x66); 43410 generateREXprefix(false, dstReg, null, srcReg); 43411 setMachineCodes(mi++, (byte) 0x0F); 43412 setMachineCodes(mi++, (byte) 0xF3); 43413 emitRegRegOperands(srcReg, dstReg); 43414 if (lister != null) lister.RR(miStart, "PSLLQ", dstReg, srcReg); 43415 } 43416 43417 /** 43418 * Generate a register--register-displacement PSLLQ. That is, 43419 * <PRE> 43420 * dstReg <<= (quad) [srcBase + srcDisp] 43421 * </PRE> 43422 * 43423 * @param dstReg destination register 43424 * @param srcBase the source base register 43425 * @param srcDisp the source displacement 43426 */ 43427 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43428 public final void emitPSLLQ_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 43429 int miStart = mi; 43430 setMachineCodes(mi++, (byte) 0x66); 43431 generateREXprefix(false, dstReg, null, srcBase); 43432 setMachineCodes(mi++, (byte) 0x0F); 43433 setMachineCodes(mi++, (byte) 0xF3); 43434 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 43435 if (lister != null) lister.RRD(miStart, "PSLLQ", dstReg, srcBase, srcDisp); 43436 } 43437 43438 /** 43439 * Generate a register--register-offset PSLLQ. That is, 43440 * <PRE> 43441 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 43442 * </PRE> 43443 * 43444 * @param dstReg destination register 43445 * @param srcIndex the source index register 43446 * @param srcScale the source scale 43447 * @param srcDisp the source displacement 43448 */ 43449 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43450 public final void emitPSLLQ_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 43451 int miStart = mi; 43452 setMachineCodes(mi++, (byte) 0x66); 43453 generateREXprefix(false, dstReg, srcIndex, null); 43454 setMachineCodes(mi++, (byte) 0x0F); 43455 setMachineCodes(mi++, (byte) 0xF3); 43456 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 43457 if (lister != null) lister.RRFD(miStart, "PSLLQ", dstReg, srcIndex, srcScale, srcDisp); 43458 } 43459 43460 /** 43461 * Generate a register--absolute PSLLQ. That is, 43462 * <PRE> 43463 * dstReg <<= (quad) [srcDisp] 43464 * </PRE> 43465 * 43466 * @param dstReg destination register 43467 * @param srcDisp the source displacement 43468 */ 43469 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 43470 public final void emitPSLLQ_Reg_Abs(XMM dstReg, Address srcDisp) { 43471 int miStart = mi; 43472 setMachineCodes(mi++, (byte) 0x66); 43473 generateREXprefix(false, dstReg, null, null); 43474 setMachineCodes(mi++, (byte) 0x0F); 43475 setMachineCodes(mi++, (byte) 0xF3); 43476 emitAbsRegOperands(srcDisp, dstReg); 43477 if (lister != null) lister.RRA(miStart, "PSLLQ", dstReg, srcDisp); 43478 } 43479 43480 /** 43481 * Generate a register--register-index PSLLQ. That is, 43482 * <PRE> 43483 * dstReg <<= (quad) srcReg 43484 * </PRE> 43485 * 43486 * @param dstReg destination register 43487 * @param srcBase the source base register 43488 * @param srcIndex the source index register 43489 * @param srcScale the source scale 43490 * @param srcDisp the source displacement 43491 */ 43492 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 43493 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 43494 public final void emitPSLLQ_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 43495 int miStart = mi; 43496 setMachineCodes(mi++, (byte) 0x66); 43497 generateREXprefix(false, dstReg, srcIndex, srcBase); 43498 setMachineCodes(mi++, (byte) 0x0F); 43499 setMachineCodes(mi++, (byte) 0xF3); 43500 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 43501 if (lister != null) lister.RRXD(miStart, "PSLLQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 43502 } 43503 43504 /** 43505 * Generate a register--register-indirect PSLLQ. That is, 43506 * <PRE> 43507 * dstReg <<= (quad) [srcBase] 43508 * </PRE> 43509 * 43510 * @param dstReg destination register 43511 * @param srcBase the source base register 43512 */ 43513 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43514 public final void emitPSLLQ_Reg_RegInd(XMM dstReg, GPR srcBase) { 43515 int miStart = mi; 43516 setMachineCodes(mi++, (byte) 0x66); 43517 generateREXprefix(false, dstReg, null, srcBase); 43518 setMachineCodes(mi++, (byte) 0x0F); 43519 setMachineCodes(mi++, (byte) 0xF3); 43520 emitRegIndirectRegOperands(srcBase, dstReg); 43521 if (lister != null) lister.RRN(miStart, "PSLLQ", dstReg, srcBase); 43522 } 43523 43524 43525 /** 43526 * Generate a register--register PSRLQ. That is, 43527 * <PRE> 43528 * dstReg <<= (quad) srcReg 43529 * </PRE> 43530 * 43531 * @param dstReg destination register 43532 * @param srcReg source register 43533 */ 43534 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43535 public final void emitPSRLQ_Reg_Reg(XMM dstReg, XMM srcReg) { 43536 int miStart = mi; 43537 setMachineCodes(mi++, (byte) 0x66); 43538 generateREXprefix(false, dstReg, null, srcReg); 43539 setMachineCodes(mi++, (byte) 0x0F); 43540 setMachineCodes(mi++, (byte) 0xD3); 43541 emitRegRegOperands(srcReg, dstReg); 43542 if (lister != null) lister.RR(miStart, "PSRLQ", dstReg, srcReg); 43543 } 43544 43545 /** 43546 * Generate a register--register-displacement PSRLQ. That is, 43547 * <PRE> 43548 * dstReg <<= (quad) [srcBase + srcDisp] 43549 * </PRE> 43550 * 43551 * @param dstReg destination register 43552 * @param srcBase the source base register 43553 * @param srcDisp the source displacement 43554 */ 43555 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43556 public final void emitPSRLQ_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 43557 int miStart = mi; 43558 setMachineCodes(mi++, (byte) 0x66); 43559 generateREXprefix(false, dstReg, null, srcBase); 43560 setMachineCodes(mi++, (byte) 0x0F); 43561 setMachineCodes(mi++, (byte) 0xD3); 43562 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 43563 if (lister != null) lister.RRD(miStart, "PSRLQ", dstReg, srcBase, srcDisp); 43564 } 43565 43566 /** 43567 * Generate a register--register-offset PSRLQ. That is, 43568 * <PRE> 43569 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 43570 * </PRE> 43571 * 43572 * @param dstReg destination register 43573 * @param srcIndex the source index register 43574 * @param srcScale the source scale 43575 * @param srcDisp the source displacement 43576 */ 43577 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43578 public final void emitPSRLQ_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 43579 int miStart = mi; 43580 setMachineCodes(mi++, (byte) 0x66); 43581 generateREXprefix(false, dstReg, srcIndex, null); 43582 setMachineCodes(mi++, (byte) 0x0F); 43583 setMachineCodes(mi++, (byte) 0xD3); 43584 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 43585 if (lister != null) lister.RRFD(miStart, "PSRLQ", dstReg, srcIndex, srcScale, srcDisp); 43586 } 43587 43588 /** 43589 * Generate a register--absolute PSRLQ. That is, 43590 * <PRE> 43591 * dstReg <<= (quad) [srcDisp] 43592 * </PRE> 43593 * 43594 * @param dstReg destination register 43595 * @param srcDisp the source displacement 43596 */ 43597 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 43598 public final void emitPSRLQ_Reg_Abs(XMM dstReg, Address srcDisp) { 43599 int miStart = mi; 43600 setMachineCodes(mi++, (byte) 0x66); 43601 generateREXprefix(false, dstReg, null, null); 43602 setMachineCodes(mi++, (byte) 0x0F); 43603 setMachineCodes(mi++, (byte) 0xD3); 43604 emitAbsRegOperands(srcDisp, dstReg); 43605 if (lister != null) lister.RRA(miStart, "PSRLQ", dstReg, srcDisp); 43606 } 43607 43608 /** 43609 * Generate a register--register-index PSRLQ. That is, 43610 * <PRE> 43611 * dstReg <<= (quad) srcReg 43612 * </PRE> 43613 * 43614 * @param dstReg destination register 43615 * @param srcBase the source base register 43616 * @param srcIndex the source index register 43617 * @param srcScale the source scale 43618 * @param srcDisp the source displacement 43619 */ 43620 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 43621 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 43622 public final void emitPSRLQ_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 43623 int miStart = mi; 43624 setMachineCodes(mi++, (byte) 0x66); 43625 generateREXprefix(false, dstReg, srcIndex, srcBase); 43626 setMachineCodes(mi++, (byte) 0x0F); 43627 setMachineCodes(mi++, (byte) 0xD3); 43628 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 43629 if (lister != null) lister.RRXD(miStart, "PSRLQ", dstReg, srcBase, srcIndex, srcScale, srcDisp); 43630 } 43631 43632 /** 43633 * Generate a register--register-indirect PSRLQ. That is, 43634 * <PRE> 43635 * dstReg <<= (quad) [srcBase] 43636 * </PRE> 43637 * 43638 * @param dstReg destination register 43639 * @param srcBase the source base register 43640 */ 43641 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43642 public final void emitPSRLQ_Reg_RegInd(XMM dstReg, GPR srcBase) { 43643 int miStart = mi; 43644 setMachineCodes(mi++, (byte) 0x66); 43645 generateREXprefix(false, dstReg, null, srcBase); 43646 setMachineCodes(mi++, (byte) 0x0F); 43647 setMachineCodes(mi++, (byte) 0xD3); 43648 emitRegIndirectRegOperands(srcBase, dstReg); 43649 if (lister != null) lister.RRN(miStart, "PSRLQ", dstReg, srcBase); 43650 } 43651 43652 43653 /** 43654 * Generate a register--register ANDPS. That is, 43655 * <PRE> 43656 * dstReg <<= (quad) srcReg 43657 * </PRE> 43658 * 43659 * @param dstReg destination register 43660 * @param srcReg source register 43661 */ 43662 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43663 public final void emitANDPS_Reg_Reg(XMM dstReg, XMM srcReg) { 43664 int miStart = mi; 43665 generateREXprefix(false, dstReg, null, srcReg); 43666 setMachineCodes(mi++, (byte) 0x0F); 43667 setMachineCodes(mi++, (byte) 0x54); 43668 emitRegRegOperands(srcReg, dstReg); 43669 if (lister != null) lister.RR(miStart, "ANDPS", dstReg, srcReg); 43670 } 43671 43672 /** 43673 * Generate a register--register-displacement ANDPS. That is, 43674 * <PRE> 43675 * dstReg <<= (quad) [srcBase + srcDisp] 43676 * </PRE> 43677 * 43678 * @param dstReg destination register 43679 * @param srcBase the source base register 43680 * @param srcDisp the source displacement 43681 */ 43682 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43683 public final void emitANDPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 43684 int miStart = mi; 43685 generateREXprefix(false, dstReg, null, srcBase); 43686 setMachineCodes(mi++, (byte) 0x0F); 43687 setMachineCodes(mi++, (byte) 0x54); 43688 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 43689 if (lister != null) lister.RRD(miStart, "ANDPS", dstReg, srcBase, srcDisp); 43690 } 43691 43692 /** 43693 * Generate a register--register-offset ANDPS. That is, 43694 * <PRE> 43695 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 43696 * </PRE> 43697 * 43698 * @param dstReg destination register 43699 * @param srcIndex the source index register 43700 * @param srcScale the source scale 43701 * @param srcDisp the source displacement 43702 */ 43703 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43704 public final void emitANDPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 43705 int miStart = mi; 43706 generateREXprefix(false, dstReg, srcIndex, null); 43707 setMachineCodes(mi++, (byte) 0x0F); 43708 setMachineCodes(mi++, (byte) 0x54); 43709 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 43710 if (lister != null) lister.RRFD(miStart, "ANDPS", dstReg, srcIndex, srcScale, srcDisp); 43711 } 43712 43713 /** 43714 * Generate a register--absolute ANDPS. That is, 43715 * <PRE> 43716 * dstReg <<= (quad) [srcDisp] 43717 * </PRE> 43718 * 43719 * @param dstReg destination register 43720 * @param srcDisp the source displacement 43721 */ 43722 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 43723 public final void emitANDPS_Reg_Abs(XMM dstReg, Address srcDisp) { 43724 int miStart = mi; 43725 generateREXprefix(false, dstReg, null, null); 43726 setMachineCodes(mi++, (byte) 0x0F); 43727 setMachineCodes(mi++, (byte) 0x54); 43728 emitAbsRegOperands(srcDisp, dstReg); 43729 if (lister != null) lister.RRA(miStart, "ANDPS", dstReg, srcDisp); 43730 } 43731 43732 /** 43733 * Generate a register--register-index ANDPS. That is, 43734 * <PRE> 43735 * dstReg <<= (quad) srcReg 43736 * </PRE> 43737 * 43738 * @param dstReg destination register 43739 * @param srcBase the source base register 43740 * @param srcIndex the source index register 43741 * @param srcScale the source scale 43742 * @param srcDisp the source displacement 43743 */ 43744 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 43745 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 43746 public final void emitANDPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 43747 int miStart = mi; 43748 generateREXprefix(false, dstReg, srcIndex, srcBase); 43749 setMachineCodes(mi++, (byte) 0x0F); 43750 setMachineCodes(mi++, (byte) 0x54); 43751 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 43752 if (lister != null) lister.RRXD(miStart, "ANDPS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 43753 } 43754 43755 /** 43756 * Generate a register--register-indirect ANDPS. That is, 43757 * <PRE> 43758 * dstReg <<= (quad) [srcBase] 43759 * </PRE> 43760 * 43761 * @param dstReg destination register 43762 * @param srcBase the source base register 43763 */ 43764 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43765 public final void emitANDPS_Reg_RegInd(XMM dstReg, GPR srcBase) { 43766 int miStart = mi; 43767 generateREXprefix(false, dstReg, null, srcBase); 43768 setMachineCodes(mi++, (byte) 0x0F); 43769 setMachineCodes(mi++, (byte) 0x54); 43770 emitRegIndirectRegOperands(srcBase, dstReg); 43771 if (lister != null) lister.RRN(miStart, "ANDPS", dstReg, srcBase); 43772 } 43773 43774 43775 /** 43776 * Generate a register--register ANDPD. That is, 43777 * <PRE> 43778 * dstReg <<= (quad) srcReg 43779 * </PRE> 43780 * 43781 * @param dstReg destination register 43782 * @param srcReg source register 43783 */ 43784 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43785 public final void emitANDPD_Reg_Reg(XMM dstReg, XMM srcReg) { 43786 int miStart = mi; 43787 setMachineCodes(mi++, (byte) 0x66); 43788 generateREXprefix(false, dstReg, null, srcReg); 43789 setMachineCodes(mi++, (byte) 0x0F); 43790 setMachineCodes(mi++, (byte) 0x54); 43791 emitRegRegOperands(srcReg, dstReg); 43792 if (lister != null) lister.RR(miStart, "ANDPD", dstReg, srcReg); 43793 } 43794 43795 /** 43796 * Generate a register--register-displacement ANDPD. That is, 43797 * <PRE> 43798 * dstReg <<= (quad) [srcBase + srcDisp] 43799 * </PRE> 43800 * 43801 * @param dstReg destination register 43802 * @param srcBase the source base register 43803 * @param srcDisp the source displacement 43804 */ 43805 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43806 public final void emitANDPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 43807 int miStart = mi; 43808 setMachineCodes(mi++, (byte) 0x66); 43809 generateREXprefix(false, dstReg, null, srcBase); 43810 setMachineCodes(mi++, (byte) 0x0F); 43811 setMachineCodes(mi++, (byte) 0x54); 43812 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 43813 if (lister != null) lister.RRD(miStart, "ANDPD", dstReg, srcBase, srcDisp); 43814 } 43815 43816 /** 43817 * Generate a register--register-offset ANDPD. That is, 43818 * <PRE> 43819 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 43820 * </PRE> 43821 * 43822 * @param dstReg destination register 43823 * @param srcIndex the source index register 43824 * @param srcScale the source scale 43825 * @param srcDisp the source displacement 43826 */ 43827 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43828 public final void emitANDPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 43829 int miStart = mi; 43830 setMachineCodes(mi++, (byte) 0x66); 43831 generateREXprefix(false, dstReg, srcIndex, null); 43832 setMachineCodes(mi++, (byte) 0x0F); 43833 setMachineCodes(mi++, (byte) 0x54); 43834 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 43835 if (lister != null) lister.RRFD(miStart, "ANDPD", dstReg, srcIndex, srcScale, srcDisp); 43836 } 43837 43838 /** 43839 * Generate a register--absolute ANDPD. That is, 43840 * <PRE> 43841 * dstReg <<= (quad) [srcDisp] 43842 * </PRE> 43843 * 43844 * @param dstReg destination register 43845 * @param srcDisp the source displacement 43846 */ 43847 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 43848 public final void emitANDPD_Reg_Abs(XMM dstReg, Address srcDisp) { 43849 int miStart = mi; 43850 setMachineCodes(mi++, (byte) 0x66); 43851 generateREXprefix(false, dstReg, null, null); 43852 setMachineCodes(mi++, (byte) 0x0F); 43853 setMachineCodes(mi++, (byte) 0x54); 43854 emitAbsRegOperands(srcDisp, dstReg); 43855 if (lister != null) lister.RRA(miStart, "ANDPD", dstReg, srcDisp); 43856 } 43857 43858 /** 43859 * Generate a register--register-index ANDPD. That is, 43860 * <PRE> 43861 * dstReg <<= (quad) srcReg 43862 * </PRE> 43863 * 43864 * @param dstReg destination register 43865 * @param srcBase the source base register 43866 * @param srcIndex the source index register 43867 * @param srcScale the source scale 43868 * @param srcDisp the source displacement 43869 */ 43870 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 43871 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 43872 public final void emitANDPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 43873 int miStart = mi; 43874 setMachineCodes(mi++, (byte) 0x66); 43875 generateREXprefix(false, dstReg, srcIndex, srcBase); 43876 setMachineCodes(mi++, (byte) 0x0F); 43877 setMachineCodes(mi++, (byte) 0x54); 43878 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 43879 if (lister != null) lister.RRXD(miStart, "ANDPD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 43880 } 43881 43882 /** 43883 * Generate a register--register-indirect ANDPD. That is, 43884 * <PRE> 43885 * dstReg <<= (quad) [srcBase] 43886 * </PRE> 43887 * 43888 * @param dstReg destination register 43889 * @param srcBase the source base register 43890 */ 43891 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43892 public final void emitANDPD_Reg_RegInd(XMM dstReg, GPR srcBase) { 43893 int miStart = mi; 43894 setMachineCodes(mi++, (byte) 0x66); 43895 generateREXprefix(false, dstReg, null, srcBase); 43896 setMachineCodes(mi++, (byte) 0x0F); 43897 setMachineCodes(mi++, (byte) 0x54); 43898 emitRegIndirectRegOperands(srcBase, dstReg); 43899 if (lister != null) lister.RRN(miStart, "ANDPD", dstReg, srcBase); 43900 } 43901 43902 43903 /** 43904 * Generate a register--register ANDNPS. That is, 43905 * <PRE> 43906 * dstReg <<= (quad) srcReg 43907 * </PRE> 43908 * 43909 * @param dstReg destination register 43910 * @param srcReg source register 43911 */ 43912 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43913 public final void emitANDNPS_Reg_Reg(XMM dstReg, XMM srcReg) { 43914 int miStart = mi; 43915 generateREXprefix(false, dstReg, null, srcReg); 43916 setMachineCodes(mi++, (byte) 0x0F); 43917 setMachineCodes(mi++, (byte) 0x55); 43918 emitRegRegOperands(srcReg, dstReg); 43919 if (lister != null) lister.RR(miStart, "ANDNPS", dstReg, srcReg); 43920 } 43921 43922 /** 43923 * Generate a register--register-displacement ANDNPS. That is, 43924 * <PRE> 43925 * dstReg <<= (quad) [srcBase + srcDisp] 43926 * </PRE> 43927 * 43928 * @param dstReg destination register 43929 * @param srcBase the source base register 43930 * @param srcDisp the source displacement 43931 */ 43932 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43933 public final void emitANDNPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 43934 int miStart = mi; 43935 generateREXprefix(false, dstReg, null, srcBase); 43936 setMachineCodes(mi++, (byte) 0x0F); 43937 setMachineCodes(mi++, (byte) 0x55); 43938 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 43939 if (lister != null) lister.RRD(miStart, "ANDNPS", dstReg, srcBase, srcDisp); 43940 } 43941 43942 /** 43943 * Generate a register--register-offset ANDNPS. That is, 43944 * <PRE> 43945 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 43946 * </PRE> 43947 * 43948 * @param dstReg destination register 43949 * @param srcIndex the source index register 43950 * @param srcScale the source scale 43951 * @param srcDisp the source displacement 43952 */ 43953 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 43954 public final void emitANDNPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 43955 int miStart = mi; 43956 generateREXprefix(false, dstReg, srcIndex, null); 43957 setMachineCodes(mi++, (byte) 0x0F); 43958 setMachineCodes(mi++, (byte) 0x55); 43959 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 43960 if (lister != null) lister.RRFD(miStart, "ANDNPS", dstReg, srcIndex, srcScale, srcDisp); 43961 } 43962 43963 /** 43964 * Generate a register--absolute ANDNPS. That is, 43965 * <PRE> 43966 * dstReg <<= (quad) [srcDisp] 43967 * </PRE> 43968 * 43969 * @param dstReg destination register 43970 * @param srcDisp the source displacement 43971 */ 43972 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 43973 public final void emitANDNPS_Reg_Abs(XMM dstReg, Address srcDisp) { 43974 int miStart = mi; 43975 generateREXprefix(false, dstReg, null, null); 43976 setMachineCodes(mi++, (byte) 0x0F); 43977 setMachineCodes(mi++, (byte) 0x55); 43978 emitAbsRegOperands(srcDisp, dstReg); 43979 if (lister != null) lister.RRA(miStart, "ANDNPS", dstReg, srcDisp); 43980 } 43981 43982 /** 43983 * Generate a register--register-index ANDNPS. That is, 43984 * <PRE> 43985 * dstReg <<= (quad) srcReg 43986 * </PRE> 43987 * 43988 * @param dstReg destination register 43989 * @param srcBase the source base register 43990 * @param srcIndex the source index register 43991 * @param srcScale the source scale 43992 * @param srcDisp the source displacement 43993 */ 43994 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 43995 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 43996 public final void emitANDNPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 43997 int miStart = mi; 43998 generateREXprefix(false, dstReg, srcIndex, srcBase); 43999 setMachineCodes(mi++, (byte) 0x0F); 44000 setMachineCodes(mi++, (byte) 0x55); 44001 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 44002 if (lister != null) lister.RRXD(miStart, "ANDNPS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 44003 } 44004 44005 /** 44006 * Generate a register--register-indirect ANDNPS. That is, 44007 * <PRE> 44008 * dstReg <<= (quad) [srcBase] 44009 * </PRE> 44010 * 44011 * @param dstReg destination register 44012 * @param srcBase the source base register 44013 */ 44014 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44015 public final void emitANDNPS_Reg_RegInd(XMM dstReg, GPR srcBase) { 44016 int miStart = mi; 44017 generateREXprefix(false, dstReg, null, srcBase); 44018 setMachineCodes(mi++, (byte) 0x0F); 44019 setMachineCodes(mi++, (byte) 0x55); 44020 emitRegIndirectRegOperands(srcBase, dstReg); 44021 if (lister != null) lister.RRN(miStart, "ANDNPS", dstReg, srcBase); 44022 } 44023 44024 44025 /** 44026 * Generate a register--register ANDNPD. That is, 44027 * <PRE> 44028 * dstReg <<= (quad) srcReg 44029 * </PRE> 44030 * 44031 * @param dstReg destination register 44032 * @param srcReg source register 44033 */ 44034 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44035 public final void emitANDNPD_Reg_Reg(XMM dstReg, XMM srcReg) { 44036 int miStart = mi; 44037 setMachineCodes(mi++, (byte) 0x66); 44038 generateREXprefix(false, dstReg, null, srcReg); 44039 setMachineCodes(mi++, (byte) 0x0F); 44040 setMachineCodes(mi++, (byte) 0x55); 44041 emitRegRegOperands(srcReg, dstReg); 44042 if (lister != null) lister.RR(miStart, "ANDNPD", dstReg, srcReg); 44043 } 44044 44045 /** 44046 * Generate a register--register-displacement ANDNPD. That is, 44047 * <PRE> 44048 * dstReg <<= (quad) [srcBase + srcDisp] 44049 * </PRE> 44050 * 44051 * @param dstReg destination register 44052 * @param srcBase the source base register 44053 * @param srcDisp the source displacement 44054 */ 44055 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44056 public final void emitANDNPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 44057 int miStart = mi; 44058 setMachineCodes(mi++, (byte) 0x66); 44059 generateREXprefix(false, dstReg, null, srcBase); 44060 setMachineCodes(mi++, (byte) 0x0F); 44061 setMachineCodes(mi++, (byte) 0x55); 44062 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 44063 if (lister != null) lister.RRD(miStart, "ANDNPD", dstReg, srcBase, srcDisp); 44064 } 44065 44066 /** 44067 * Generate a register--register-offset ANDNPD. That is, 44068 * <PRE> 44069 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 44070 * </PRE> 44071 * 44072 * @param dstReg destination register 44073 * @param srcIndex the source index register 44074 * @param srcScale the source scale 44075 * @param srcDisp the source displacement 44076 */ 44077 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44078 public final void emitANDNPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 44079 int miStart = mi; 44080 setMachineCodes(mi++, (byte) 0x66); 44081 generateREXprefix(false, dstReg, srcIndex, null); 44082 setMachineCodes(mi++, (byte) 0x0F); 44083 setMachineCodes(mi++, (byte) 0x55); 44084 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 44085 if (lister != null) lister.RRFD(miStart, "ANDNPD", dstReg, srcIndex, srcScale, srcDisp); 44086 } 44087 44088 /** 44089 * Generate a register--absolute ANDNPD. That is, 44090 * <PRE> 44091 * dstReg <<= (quad) [srcDisp] 44092 * </PRE> 44093 * 44094 * @param dstReg destination register 44095 * @param srcDisp the source displacement 44096 */ 44097 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 44098 public final void emitANDNPD_Reg_Abs(XMM dstReg, Address srcDisp) { 44099 int miStart = mi; 44100 setMachineCodes(mi++, (byte) 0x66); 44101 generateREXprefix(false, dstReg, null, null); 44102 setMachineCodes(mi++, (byte) 0x0F); 44103 setMachineCodes(mi++, (byte) 0x55); 44104 emitAbsRegOperands(srcDisp, dstReg); 44105 if (lister != null) lister.RRA(miStart, "ANDNPD", dstReg, srcDisp); 44106 } 44107 44108 /** 44109 * Generate a register--register-index ANDNPD. That is, 44110 * <PRE> 44111 * dstReg <<= (quad) srcReg 44112 * </PRE> 44113 * 44114 * @param dstReg destination register 44115 * @param srcBase the source base register 44116 * @param srcIndex the source index register 44117 * @param srcScale the source scale 44118 * @param srcDisp the source displacement 44119 */ 44120 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 44121 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 44122 public final void emitANDNPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 44123 int miStart = mi; 44124 setMachineCodes(mi++, (byte) 0x66); 44125 generateREXprefix(false, dstReg, srcIndex, srcBase); 44126 setMachineCodes(mi++, (byte) 0x0F); 44127 setMachineCodes(mi++, (byte) 0x55); 44128 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 44129 if (lister != null) lister.RRXD(miStart, "ANDNPD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 44130 } 44131 44132 /** 44133 * Generate a register--register-indirect ANDNPD. That is, 44134 * <PRE> 44135 * dstReg <<= (quad) [srcBase] 44136 * </PRE> 44137 * 44138 * @param dstReg destination register 44139 * @param srcBase the source base register 44140 */ 44141 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44142 public final void emitANDNPD_Reg_RegInd(XMM dstReg, GPR srcBase) { 44143 int miStart = mi; 44144 setMachineCodes(mi++, (byte) 0x66); 44145 generateREXprefix(false, dstReg, null, srcBase); 44146 setMachineCodes(mi++, (byte) 0x0F); 44147 setMachineCodes(mi++, (byte) 0x55); 44148 emitRegIndirectRegOperands(srcBase, dstReg); 44149 if (lister != null) lister.RRN(miStart, "ANDNPD", dstReg, srcBase); 44150 } 44151 44152 44153 /** 44154 * Generate a register--register ORPS. That is, 44155 * <PRE> 44156 * dstReg <<= (quad) srcReg 44157 * </PRE> 44158 * 44159 * @param dstReg destination register 44160 * @param srcReg source register 44161 */ 44162 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44163 public final void emitORPS_Reg_Reg(XMM dstReg, XMM srcReg) { 44164 int miStart = mi; 44165 generateREXprefix(false, dstReg, null, srcReg); 44166 setMachineCodes(mi++, (byte) 0x0F); 44167 setMachineCodes(mi++, (byte) 0x56); 44168 emitRegRegOperands(srcReg, dstReg); 44169 if (lister != null) lister.RR(miStart, "ORPS", dstReg, srcReg); 44170 } 44171 44172 /** 44173 * Generate a register--register-displacement ORPS. That is, 44174 * <PRE> 44175 * dstReg <<= (quad) [srcBase + srcDisp] 44176 * </PRE> 44177 * 44178 * @param dstReg destination register 44179 * @param srcBase the source base register 44180 * @param srcDisp the source displacement 44181 */ 44182 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44183 public final void emitORPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 44184 int miStart = mi; 44185 generateREXprefix(false, dstReg, null, srcBase); 44186 setMachineCodes(mi++, (byte) 0x0F); 44187 setMachineCodes(mi++, (byte) 0x56); 44188 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 44189 if (lister != null) lister.RRD(miStart, "ORPS", dstReg, srcBase, srcDisp); 44190 } 44191 44192 /** 44193 * Generate a register--register-offset ORPS. That is, 44194 * <PRE> 44195 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 44196 * </PRE> 44197 * 44198 * @param dstReg destination register 44199 * @param srcIndex the source index register 44200 * @param srcScale the source scale 44201 * @param srcDisp the source displacement 44202 */ 44203 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44204 public final void emitORPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 44205 int miStart = mi; 44206 generateREXprefix(false, dstReg, srcIndex, null); 44207 setMachineCodes(mi++, (byte) 0x0F); 44208 setMachineCodes(mi++, (byte) 0x56); 44209 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 44210 if (lister != null) lister.RRFD(miStart, "ORPS", dstReg, srcIndex, srcScale, srcDisp); 44211 } 44212 44213 /** 44214 * Generate a register--absolute ORPS. That is, 44215 * <PRE> 44216 * dstReg <<= (quad) [srcDisp] 44217 * </PRE> 44218 * 44219 * @param dstReg destination register 44220 * @param srcDisp the source displacement 44221 */ 44222 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 44223 public final void emitORPS_Reg_Abs(XMM dstReg, Address srcDisp) { 44224 int miStart = mi; 44225 generateREXprefix(false, dstReg, null, null); 44226 setMachineCodes(mi++, (byte) 0x0F); 44227 setMachineCodes(mi++, (byte) 0x56); 44228 emitAbsRegOperands(srcDisp, dstReg); 44229 if (lister != null) lister.RRA(miStart, "ORPS", dstReg, srcDisp); 44230 } 44231 44232 /** 44233 * Generate a register--register-index ORPS. That is, 44234 * <PRE> 44235 * dstReg <<= (quad) srcReg 44236 * </PRE> 44237 * 44238 * @param dstReg destination register 44239 * @param srcBase the source base register 44240 * @param srcIndex the source index register 44241 * @param srcScale the source scale 44242 * @param srcDisp the source displacement 44243 */ 44244 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 44245 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 44246 public final void emitORPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 44247 int miStart = mi; 44248 generateREXprefix(false, dstReg, srcIndex, srcBase); 44249 setMachineCodes(mi++, (byte) 0x0F); 44250 setMachineCodes(mi++, (byte) 0x56); 44251 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 44252 if (lister != null) lister.RRXD(miStart, "ORPS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 44253 } 44254 44255 /** 44256 * Generate a register--register-indirect ORPS. That is, 44257 * <PRE> 44258 * dstReg <<= (quad) [srcBase] 44259 * </PRE> 44260 * 44261 * @param dstReg destination register 44262 * @param srcBase the source base register 44263 */ 44264 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44265 public final void emitORPS_Reg_RegInd(XMM dstReg, GPR srcBase) { 44266 int miStart = mi; 44267 generateREXprefix(false, dstReg, null, srcBase); 44268 setMachineCodes(mi++, (byte) 0x0F); 44269 setMachineCodes(mi++, (byte) 0x56); 44270 emitRegIndirectRegOperands(srcBase, dstReg); 44271 if (lister != null) lister.RRN(miStart, "ORPS", dstReg, srcBase); 44272 } 44273 44274 44275 /** 44276 * Generate a register--register ORPD. That is, 44277 * <PRE> 44278 * dstReg <<= (quad) srcReg 44279 * </PRE> 44280 * 44281 * @param dstReg destination register 44282 * @param srcReg source register 44283 */ 44284 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44285 public final void emitORPD_Reg_Reg(XMM dstReg, XMM srcReg) { 44286 int miStart = mi; 44287 setMachineCodes(mi++, (byte) 0x66); 44288 generateREXprefix(false, dstReg, null, srcReg); 44289 setMachineCodes(mi++, (byte) 0x0F); 44290 setMachineCodes(mi++, (byte) 0x56); 44291 emitRegRegOperands(srcReg, dstReg); 44292 if (lister != null) lister.RR(miStart, "ORPD", dstReg, srcReg); 44293 } 44294 44295 /** 44296 * Generate a register--register-displacement ORPD. That is, 44297 * <PRE> 44298 * dstReg <<= (quad) [srcBase + srcDisp] 44299 * </PRE> 44300 * 44301 * @param dstReg destination register 44302 * @param srcBase the source base register 44303 * @param srcDisp the source displacement 44304 */ 44305 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44306 public final void emitORPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 44307 int miStart = mi; 44308 setMachineCodes(mi++, (byte) 0x66); 44309 generateREXprefix(false, dstReg, null, srcBase); 44310 setMachineCodes(mi++, (byte) 0x0F); 44311 setMachineCodes(mi++, (byte) 0x56); 44312 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 44313 if (lister != null) lister.RRD(miStart, "ORPD", dstReg, srcBase, srcDisp); 44314 } 44315 44316 /** 44317 * Generate a register--register-offset ORPD. That is, 44318 * <PRE> 44319 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 44320 * </PRE> 44321 * 44322 * @param dstReg destination register 44323 * @param srcIndex the source index register 44324 * @param srcScale the source scale 44325 * @param srcDisp the source displacement 44326 */ 44327 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44328 public final void emitORPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 44329 int miStart = mi; 44330 setMachineCodes(mi++, (byte) 0x66); 44331 generateREXprefix(false, dstReg, srcIndex, null); 44332 setMachineCodes(mi++, (byte) 0x0F); 44333 setMachineCodes(mi++, (byte) 0x56); 44334 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 44335 if (lister != null) lister.RRFD(miStart, "ORPD", dstReg, srcIndex, srcScale, srcDisp); 44336 } 44337 44338 /** 44339 * Generate a register--absolute ORPD. That is, 44340 * <PRE> 44341 * dstReg <<= (quad) [srcDisp] 44342 * </PRE> 44343 * 44344 * @param dstReg destination register 44345 * @param srcDisp the source displacement 44346 */ 44347 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 44348 public final void emitORPD_Reg_Abs(XMM dstReg, Address srcDisp) { 44349 int miStart = mi; 44350 setMachineCodes(mi++, (byte) 0x66); 44351 generateREXprefix(false, dstReg, null, null); 44352 setMachineCodes(mi++, (byte) 0x0F); 44353 setMachineCodes(mi++, (byte) 0x56); 44354 emitAbsRegOperands(srcDisp, dstReg); 44355 if (lister != null) lister.RRA(miStart, "ORPD", dstReg, srcDisp); 44356 } 44357 44358 /** 44359 * Generate a register--register-index ORPD. That is, 44360 * <PRE> 44361 * dstReg <<= (quad) srcReg 44362 * </PRE> 44363 * 44364 * @param dstReg destination register 44365 * @param srcBase the source base register 44366 * @param srcIndex the source index register 44367 * @param srcScale the source scale 44368 * @param srcDisp the source displacement 44369 */ 44370 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 44371 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 44372 public final void emitORPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 44373 int miStart = mi; 44374 setMachineCodes(mi++, (byte) 0x66); 44375 generateREXprefix(false, dstReg, srcIndex, srcBase); 44376 setMachineCodes(mi++, (byte) 0x0F); 44377 setMachineCodes(mi++, (byte) 0x56); 44378 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 44379 if (lister != null) lister.RRXD(miStart, "ORPD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 44380 } 44381 44382 /** 44383 * Generate a register--register-indirect ORPD. That is, 44384 * <PRE> 44385 * dstReg <<= (quad) [srcBase] 44386 * </PRE> 44387 * 44388 * @param dstReg destination register 44389 * @param srcBase the source base register 44390 */ 44391 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44392 public final void emitORPD_Reg_RegInd(XMM dstReg, GPR srcBase) { 44393 int miStart = mi; 44394 setMachineCodes(mi++, (byte) 0x66); 44395 generateREXprefix(false, dstReg, null, srcBase); 44396 setMachineCodes(mi++, (byte) 0x0F); 44397 setMachineCodes(mi++, (byte) 0x56); 44398 emitRegIndirectRegOperands(srcBase, dstReg); 44399 if (lister != null) lister.RRN(miStart, "ORPD", dstReg, srcBase); 44400 } 44401 44402 44403 /** 44404 * Generate a register--register XORPS. That is, 44405 * <PRE> 44406 * dstReg <<= (quad) srcReg 44407 * </PRE> 44408 * 44409 * @param dstReg destination register 44410 * @param srcReg source register 44411 */ 44412 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44413 public final void emitXORPS_Reg_Reg(XMM dstReg, XMM srcReg) { 44414 int miStart = mi; 44415 generateREXprefix(false, dstReg, null, srcReg); 44416 setMachineCodes(mi++, (byte) 0x0F); 44417 setMachineCodes(mi++, (byte) 0x57); 44418 emitRegRegOperands(srcReg, dstReg); 44419 if (lister != null) lister.RR(miStart, "XORPS", dstReg, srcReg); 44420 } 44421 44422 /** 44423 * Generate a register--register-displacement XORPS. That is, 44424 * <PRE> 44425 * dstReg <<= (quad) [srcBase + srcDisp] 44426 * </PRE> 44427 * 44428 * @param dstReg destination register 44429 * @param srcBase the source base register 44430 * @param srcDisp the source displacement 44431 */ 44432 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44433 public final void emitXORPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 44434 int miStart = mi; 44435 generateREXprefix(false, dstReg, null, srcBase); 44436 setMachineCodes(mi++, (byte) 0x0F); 44437 setMachineCodes(mi++, (byte) 0x57); 44438 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 44439 if (lister != null) lister.RRD(miStart, "XORPS", dstReg, srcBase, srcDisp); 44440 } 44441 44442 /** 44443 * Generate a register--register-offset XORPS. That is, 44444 * <PRE> 44445 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 44446 * </PRE> 44447 * 44448 * @param dstReg destination register 44449 * @param srcIndex the source index register 44450 * @param srcScale the source scale 44451 * @param srcDisp the source displacement 44452 */ 44453 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44454 public final void emitXORPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 44455 int miStart = mi; 44456 generateREXprefix(false, dstReg, srcIndex, null); 44457 setMachineCodes(mi++, (byte) 0x0F); 44458 setMachineCodes(mi++, (byte) 0x57); 44459 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 44460 if (lister != null) lister.RRFD(miStart, "XORPS", dstReg, srcIndex, srcScale, srcDisp); 44461 } 44462 44463 /** 44464 * Generate a register--absolute XORPS. That is, 44465 * <PRE> 44466 * dstReg <<= (quad) [srcDisp] 44467 * </PRE> 44468 * 44469 * @param dstReg destination register 44470 * @param srcDisp the source displacement 44471 */ 44472 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 44473 public final void emitXORPS_Reg_Abs(XMM dstReg, Address srcDisp) { 44474 int miStart = mi; 44475 generateREXprefix(false, dstReg, null, null); 44476 setMachineCodes(mi++, (byte) 0x0F); 44477 setMachineCodes(mi++, (byte) 0x57); 44478 emitAbsRegOperands(srcDisp, dstReg); 44479 if (lister != null) lister.RRA(miStart, "XORPS", dstReg, srcDisp); 44480 } 44481 44482 /** 44483 * Generate a register--register-index XORPS. That is, 44484 * <PRE> 44485 * dstReg <<= (quad) srcReg 44486 * </PRE> 44487 * 44488 * @param dstReg destination register 44489 * @param srcBase the source base register 44490 * @param srcIndex the source index register 44491 * @param srcScale the source scale 44492 * @param srcDisp the source displacement 44493 */ 44494 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 44495 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 44496 public final void emitXORPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 44497 int miStart = mi; 44498 generateREXprefix(false, dstReg, srcIndex, srcBase); 44499 setMachineCodes(mi++, (byte) 0x0F); 44500 setMachineCodes(mi++, (byte) 0x57); 44501 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 44502 if (lister != null) lister.RRXD(miStart, "XORPS", dstReg, srcBase, srcIndex, srcScale, srcDisp); 44503 } 44504 44505 /** 44506 * Generate a register--register-indirect XORPS. That is, 44507 * <PRE> 44508 * dstReg <<= (quad) [srcBase] 44509 * </PRE> 44510 * 44511 * @param dstReg destination register 44512 * @param srcBase the source base register 44513 */ 44514 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44515 public final void emitXORPS_Reg_RegInd(XMM dstReg, GPR srcBase) { 44516 int miStart = mi; 44517 generateREXprefix(false, dstReg, null, srcBase); 44518 setMachineCodes(mi++, (byte) 0x0F); 44519 setMachineCodes(mi++, (byte) 0x57); 44520 emitRegIndirectRegOperands(srcBase, dstReg); 44521 if (lister != null) lister.RRN(miStart, "XORPS", dstReg, srcBase); 44522 } 44523 44524 44525 /** 44526 * Generate a register--register XORPD. That is, 44527 * <PRE> 44528 * dstReg <<= (quad) srcReg 44529 * </PRE> 44530 * 44531 * @param dstReg destination register 44532 * @param srcReg source register 44533 */ 44534 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44535 public final void emitXORPD_Reg_Reg(XMM dstReg, XMM srcReg) { 44536 int miStart = mi; 44537 setMachineCodes(mi++, (byte) 0x66); 44538 generateREXprefix(false, dstReg, null, srcReg); 44539 setMachineCodes(mi++, (byte) 0x0F); 44540 setMachineCodes(mi++, (byte) 0x57); 44541 emitRegRegOperands(srcReg, dstReg); 44542 if (lister != null) lister.RR(miStart, "XORPD", dstReg, srcReg); 44543 } 44544 44545 /** 44546 * Generate a register--register-displacement XORPD. That is, 44547 * <PRE> 44548 * dstReg <<= (quad) [srcBase + srcDisp] 44549 * </PRE> 44550 * 44551 * @param dstReg destination register 44552 * @param srcBase the source base register 44553 * @param srcDisp the source displacement 44554 */ 44555 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44556 public final void emitXORPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) { 44557 int miStart = mi; 44558 setMachineCodes(mi++, (byte) 0x66); 44559 generateREXprefix(false, dstReg, null, srcBase); 44560 setMachineCodes(mi++, (byte) 0x0F); 44561 setMachineCodes(mi++, (byte) 0x57); 44562 emitRegDispRegOperands(srcBase, srcDisp, dstReg); 44563 if (lister != null) lister.RRD(miStart, "XORPD", dstReg, srcBase, srcDisp); 44564 } 44565 44566 /** 44567 * Generate a register--register-offset XORPD. That is, 44568 * <PRE> 44569 * dstReg <<= (quad) [srcIndex<<srcScale + srcDisp] 44570 * </PRE> 44571 * 44572 * @param dstReg destination register 44573 * @param srcIndex the source index register 44574 * @param srcScale the source scale 44575 * @param srcDisp the source displacement 44576 */ 44577 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44578 public final void emitXORPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 44579 int miStart = mi; 44580 setMachineCodes(mi++, (byte) 0x66); 44581 generateREXprefix(false, dstReg, srcIndex, null); 44582 setMachineCodes(mi++, (byte) 0x0F); 44583 setMachineCodes(mi++, (byte) 0x57); 44584 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg); 44585 if (lister != null) lister.RRFD(miStart, "XORPD", dstReg, srcIndex, srcScale, srcDisp); 44586 } 44587 44588 /** 44589 * Generate a register--absolute XORPD. That is, 44590 * <PRE> 44591 * dstReg <<= (quad) [srcDisp] 44592 * </PRE> 44593 * 44594 * @param dstReg destination register 44595 * @param srcDisp the source displacement 44596 */ 44597 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 44598 public final void emitXORPD_Reg_Abs(XMM dstReg, Address srcDisp) { 44599 int miStart = mi; 44600 setMachineCodes(mi++, (byte) 0x66); 44601 generateREXprefix(false, dstReg, null, null); 44602 setMachineCodes(mi++, (byte) 0x0F); 44603 setMachineCodes(mi++, (byte) 0x57); 44604 emitAbsRegOperands(srcDisp, dstReg); 44605 if (lister != null) lister.RRA(miStart, "XORPD", dstReg, srcDisp); 44606 } 44607 44608 /** 44609 * Generate a register--register-index XORPD. That is, 44610 * <PRE> 44611 * dstReg <<= (quad) srcReg 44612 * </PRE> 44613 * 44614 * @param dstReg destination register 44615 * @param srcBase the source base register 44616 * @param srcIndex the source index register 44617 * @param srcScale the source scale 44618 * @param srcDisp the source displacement 44619 */ 44620 // dstReg <<= (quad) [srcBase + srcIndex<<scale + srcDisp] 44621 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 44622 public final void emitXORPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 44623 int miStart = mi; 44624 setMachineCodes(mi++, (byte) 0x66); 44625 generateREXprefix(false, dstReg, srcIndex, srcBase); 44626 setMachineCodes(mi++, (byte) 0x0F); 44627 setMachineCodes(mi++, (byte) 0x57); 44628 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg); 44629 if (lister != null) lister.RRXD(miStart, "XORPD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 44630 } 44631 44632 /** 44633 * Generate a register--register-indirect XORPD. That is, 44634 * <PRE> 44635 * dstReg <<= (quad) [srcBase] 44636 * </PRE> 44637 * 44638 * @param dstReg destination register 44639 * @param srcBase the source base register 44640 */ 44641 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44642 public final void emitXORPD_Reg_RegInd(XMM dstReg, GPR srcBase) { 44643 int miStart = mi; 44644 setMachineCodes(mi++, (byte) 0x66); 44645 generateREXprefix(false, dstReg, null, srcBase); 44646 setMachineCodes(mi++, (byte) 0x0F); 44647 setMachineCodes(mi++, (byte) 0x57); 44648 emitRegIndirectRegOperands(srcBase, dstReg); 44649 if (lister != null) lister.RRN(miStart, "XORPD", dstReg, srcBase); 44650 } 44651 44652 /** 44653 * Perform + on FP0. That is, 44654 * <PRE> 44655 * dstReg += () [srcBase + srcDisp] 44656 * </PRE> 44657 * 44658 * @param dstReg destination register, must be FP0 44659 * @param srcBase source base register 44660 * @param srcDisp source displacement 44661 */ 44662 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44663 public final void emitFADD_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 44664 int miStart = mi; 44665 // Must store result to top of stack 44666 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44667 setMachineCodes(mi++, (byte) 0xD8); 44668 // The register'' 0 is really part of the opcode 44669 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0)); 44670 if (lister != null) lister.RRD(miStart, "FADD", dstReg, srcBase, srcDisp); 44671 } 44672 44673 /** 44674 * Perform + on FP0. That is, 44675 * <PRE> 44676 * dstReg += () [srcBase] 44677 * </PRE> 44678 * 44679 * @param dstReg destination register, must be FP0 44680 * @param srcBase source base register 44681 */ 44682 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44683 public final void emitFADD_Reg_RegInd(FPR dstReg, GPR srcBase) { 44684 int miStart = mi; 44685 // Must store result to top of stack 44686 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44687 setMachineCodes(mi++, (byte) 0xD8); 44688 // The register'' 0 is really part of the opcode 44689 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0)); 44690 if (lister != null) lister.RRN(miStart, "FADD", dstReg, srcBase); 44691 } 44692 44693 /** 44694 * Perform + on dstReg. That is, 44695 * <PRE> 44696 * dstReg += () [srcBase + srcIndex<<srcScale + srcDisp] 44697 * </PRE> 44698 * 44699 * @param dstReg destination register, must be FP0 44700 * @param srcBase source base register 44701 * @param srcIndex source index register 44702 * @param srcScale source scale 44703 * @param srcDisp source displacement 44704 */ 44705 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 44706 public final void emitFADD_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 44707 int miStart = mi; 44708 // Must store result to top of stack 44709 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44710 setMachineCodes(mi++, (byte) 0xD8); 44711 // The register'' 0 is really part of the opcode 44712 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0)); 44713 if (lister != null) lister.RRXD(miStart, "FADD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 44714 } 44715 44716 /** 44717 * Perform + on FP0. That is, 44718 * <PRE> 44719 * dstReg += () [srcIndex<<srcScale + srcDisp] 44720 * </PRE> 44721 * 44722 * @param dstReg destination register, must be FP0 44723 * @param srcIndex source index register 44724 * @param srcScale source scale 44725 * @param srcDisp source displacement 44726 */ 44727 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44728 public final void emitFADD_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 44729 int miStart = mi; 44730 // Must store result to top of stack 44731 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44732 setMachineCodes(mi++, (byte) 0xD8); 44733 // The register'' 0 is really part of the opcode 44734 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0)); 44735 if (lister != null) lister.RRFD(miStart, "FADD", dstReg, srcIndex, srcScale, srcDisp); 44736 } 44737 44738 /** 44739 * Perform + on FP0. That is, 44740 * <PRE> 44741 * dstReg += () [srcDisp] 44742 * </PRE> 44743 * 44744 * @param dstReg destination register, must be FP0 44745 * @param srcDisp source displacement 44746 */ 44747 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 44748 public final void emitFADD_Reg_Abs(FPR dstReg, Address srcDisp) { 44749 int miStart = mi; 44750 // Must store result to top of stack 44751 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44752 setMachineCodes(mi++, (byte) 0xD8); 44753 // The register'' 0 is really part of the opcode 44754 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0)); 44755 if (lister != null) lister.RRA(miStart, "FADD", dstReg, srcDisp); 44756 } 44757 44758 /** 44759 * Perform + on FP0. That is, 44760 * <PRE> 44761 * dstReg += (quad) [srcBase + srcDisp] 44762 * </PRE> 44763 * 44764 * @param dstReg destination register, must be FP0 44765 * @param srcBase source base register 44766 * @param srcDisp source displacement 44767 */ 44768 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44769 public final void emitFADD_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) { 44770 int miStart = mi; 44771 // Must store result to top of stack 44772 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44773 setMachineCodes(mi++, (byte) 0xDC); 44774 // The register'' 0 is really part of the opcode 44775 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0)); 44776 if (lister != null) lister.RRD(miStart, "FADD", dstReg, srcBase, srcDisp); 44777 } 44778 44779 /** 44780 * Perform + on FP0. That is, 44781 * <PRE> 44782 * dstReg += (quad) [srcBase] 44783 * </PRE> 44784 * 44785 * @param dstReg destination register, must be FP0 44786 * @param srcBase source base register 44787 */ 44788 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44789 public final void emitFADD_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) { 44790 int miStart = mi; 44791 // Must store result to top of stack 44792 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44793 setMachineCodes(mi++, (byte) 0xDC); 44794 // The register'' 0 is really part of the opcode 44795 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0)); 44796 if (lister != null) lister.RRN(miStart, "FADD", dstReg, srcBase); 44797 } 44798 44799 /** 44800 * Perform + on dstReg. That is, 44801 * <PRE> 44802 * dstReg += (quad) [srcBase + srcIndex<<srcScale + srcDisp] 44803 * </PRE> 44804 * 44805 * @param dstReg destination register, must be FP0 44806 * @param srcBase source base register 44807 * @param srcIndex source index register 44808 * @param srcScale source scale 44809 * @param srcDisp source displacement 44810 */ 44811 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 44812 public final void emitFADD_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 44813 int miStart = mi; 44814 // Must store result to top of stack 44815 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44816 setMachineCodes(mi++, (byte) 0xDC); 44817 // The register'' 0 is really part of the opcode 44818 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0)); 44819 if (lister != null) lister.RRXD(miStart, "FADD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 44820 } 44821 44822 /** 44823 * Perform + on FP0. That is, 44824 * <PRE> 44825 * dstReg += (quad) [srcIndex<<srcScale + srcDisp] 44826 * </PRE> 44827 * 44828 * @param dstReg destination register, must be FP0 44829 * @param srcIndex source index register 44830 * @param srcScale source scale 44831 * @param srcDisp source displacement 44832 */ 44833 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44834 public final void emitFADD_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 44835 int miStart = mi; 44836 // Must store result to top of stack 44837 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44838 setMachineCodes(mi++, (byte) 0xDC); 44839 // The register'' 0 is really part of the opcode 44840 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0)); 44841 if (lister != null) lister.RRFD(miStart, "FADD", dstReg, srcIndex, srcScale, srcDisp); 44842 } 44843 44844 /** 44845 * Perform + on FP0. That is, 44846 * <PRE> 44847 * dstReg += (quad) [srcDisp] 44848 * </PRE> 44849 * 44850 * @param dstReg destination register, must be FP0 44851 * @param srcDisp source displacement 44852 */ 44853 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 44854 public final void emitFADD_Reg_Abs_Quad(FPR dstReg, Address srcDisp) { 44855 int miStart = mi; 44856 // Must store result to top of stack 44857 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44858 setMachineCodes(mi++, (byte) 0xDC); 44859 // The register'' 0 is really part of the opcode 44860 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0)); 44861 if (lister != null) lister.RRA(miStart, "FADD", dstReg, srcDisp); 44862 } 44863 44864 /** 44865 * Perform + on FP0. That is, 44866 * <PRE> 44867 * dstReg += () [srcBase + srcDisp] 44868 * </PRE> 44869 * 44870 * @param dstReg destination register, must be FP0 44871 * @param srcBase source base register 44872 * @param srcDisp source displacement 44873 */ 44874 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44875 public final void emitFIADD_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 44876 int miStart = mi; 44877 // Must store result to top of stack 44878 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44879 setMachineCodes(mi++, (byte) 0xDA); 44880 // The register'' 0 is really part of the opcode 44881 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0)); 44882 if (lister != null) lister.RRD(miStart, "FIADD", dstReg, srcBase, srcDisp); 44883 } 44884 44885 /** 44886 * Perform + on FP0. That is, 44887 * <PRE> 44888 * dstReg += () [srcBase] 44889 * </PRE> 44890 * 44891 * @param dstReg destination register, must be FP0 44892 * @param srcBase source base register 44893 */ 44894 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44895 public final void emitFIADD_Reg_RegInd(FPR dstReg, GPR srcBase) { 44896 int miStart = mi; 44897 // Must store result to top of stack 44898 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44899 setMachineCodes(mi++, (byte) 0xDA); 44900 // The register'' 0 is really part of the opcode 44901 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0)); 44902 if (lister != null) lister.RRN(miStart, "FIADD", dstReg, srcBase); 44903 } 44904 44905 /** 44906 * Perform + on dstReg. That is, 44907 * <PRE> 44908 * dstReg += () [srcBase + srcIndex<<srcScale + srcDisp] 44909 * </PRE> 44910 * 44911 * @param dstReg destination register, must be FP0 44912 * @param srcBase source base register 44913 * @param srcIndex source index register 44914 * @param srcScale source scale 44915 * @param srcDisp source displacement 44916 */ 44917 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 44918 public final void emitFIADD_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 44919 int miStart = mi; 44920 // Must store result to top of stack 44921 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44922 setMachineCodes(mi++, (byte) 0xDA); 44923 // The register'' 0 is really part of the opcode 44924 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0)); 44925 if (lister != null) lister.RRXD(miStart, "FIADD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 44926 } 44927 44928 /** 44929 * Perform + on FP0. That is, 44930 * <PRE> 44931 * dstReg += () [srcIndex<<srcScale + srcDisp] 44932 * </PRE> 44933 * 44934 * @param dstReg destination register, must be FP0 44935 * @param srcIndex source index register 44936 * @param srcScale source scale 44937 * @param srcDisp source displacement 44938 */ 44939 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44940 public final void emitFIADD_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 44941 int miStart = mi; 44942 // Must store result to top of stack 44943 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44944 setMachineCodes(mi++, (byte) 0xDA); 44945 // The register'' 0 is really part of the opcode 44946 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0)); 44947 if (lister != null) lister.RRFD(miStart, "FIADD", dstReg, srcIndex, srcScale, srcDisp); 44948 } 44949 44950 /** 44951 * Perform + on FP0. That is, 44952 * <PRE> 44953 * dstReg += () [srcDisp] 44954 * </PRE> 44955 * 44956 * @param dstReg destination register, must be FP0 44957 * @param srcDisp source displacement 44958 */ 44959 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 44960 public final void emitFIADD_Reg_Abs(FPR dstReg, Address srcDisp) { 44961 int miStart = mi; 44962 // Must store result to top of stack 44963 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44964 setMachineCodes(mi++, (byte) 0xDA); 44965 // The register'' 0 is really part of the opcode 44966 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0)); 44967 if (lister != null) lister.RRA(miStart, "FIADD", dstReg, srcDisp); 44968 } 44969 44970 /** 44971 * Perform + on FP0. That is, 44972 * <PRE> 44973 * dstReg += (word) [srcBase + srcDisp] 44974 * </PRE> 44975 * 44976 * @param dstReg destination register, must be FP0 44977 * @param srcBase source base register 44978 * @param srcDisp source displacement 44979 */ 44980 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 44981 public final void emitFIADD_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) { 44982 int miStart = mi; 44983 // Must store result to top of stack 44984 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 44985 setMachineCodes(mi++, (byte) 0xDE); 44986 // The register'' 0 is really part of the opcode 44987 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0)); 44988 if (lister != null) lister.RRD(miStart, "FIADD", dstReg, srcBase, srcDisp); 44989 } 44990 44991 /** 44992 * Perform + on FP0. That is, 44993 * <PRE> 44994 * dstReg += (word) [srcBase] 44995 * </PRE> 44996 * 44997 * @param dstReg destination register, must be FP0 44998 * @param srcBase source base register 44999 */ 45000 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45001 public final void emitFIADD_Reg_RegInd_Word(FPR dstReg, GPR srcBase) { 45002 int miStart = mi; 45003 // Must store result to top of stack 45004 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45005 setMachineCodes(mi++, (byte) 0xDE); 45006 // The register'' 0 is really part of the opcode 45007 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0)); 45008 if (lister != null) lister.RRN(miStart, "FIADD", dstReg, srcBase); 45009 } 45010 45011 /** 45012 * Perform + on dstReg. That is, 45013 * <PRE> 45014 * dstReg += (word) [srcBase + srcIndex<<srcScale + srcDisp] 45015 * </PRE> 45016 * 45017 * @param dstReg destination register, must be FP0 45018 * @param srcBase source base register 45019 * @param srcIndex source index register 45020 * @param srcScale source scale 45021 * @param srcDisp source displacement 45022 */ 45023 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 45024 public final void emitFIADD_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 45025 int miStart = mi; 45026 // Must store result to top of stack 45027 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45028 setMachineCodes(mi++, (byte) 0xDE); 45029 // The register'' 0 is really part of the opcode 45030 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0)); 45031 if (lister != null) lister.RRXD(miStart, "FIADD", dstReg, srcBase, srcIndex, srcScale, srcDisp); 45032 } 45033 45034 /** 45035 * Perform + on FP0. That is, 45036 * <PRE> 45037 * dstReg += (word) [srcIndex<<srcScale + srcDisp] 45038 * </PRE> 45039 * 45040 * @param dstReg destination register, must be FP0 45041 * @param srcIndex source index register 45042 * @param srcScale source scale 45043 * @param srcDisp source displacement 45044 */ 45045 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45046 public final void emitFIADD_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 45047 int miStart = mi; 45048 // Must store result to top of stack 45049 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45050 setMachineCodes(mi++, (byte) 0xDE); 45051 // The register'' 0 is really part of the opcode 45052 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0)); 45053 if (lister != null) lister.RRFD(miStart, "FIADD", dstReg, srcIndex, srcScale, srcDisp); 45054 } 45055 45056 /** 45057 * Perform + on FP0. That is, 45058 * <PRE> 45059 * dstReg += (word) [srcDisp] 45060 * </PRE> 45061 * 45062 * @param dstReg destination register, must be FP0 45063 * @param srcDisp source displacement 45064 */ 45065 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 45066 public final void emitFIADD_Reg_Abs_Word(FPR dstReg, Address srcDisp) { 45067 int miStart = mi; 45068 // Must store result to top of stack 45069 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45070 setMachineCodes(mi++, (byte) 0xDE); 45071 // The register'' 0 is really part of the opcode 45072 emitAbsRegOperands(srcDisp, GPR.getForOpcode(0)); 45073 if (lister != null) lister.RRA(miStart, "FIADD", dstReg, srcDisp); 45074 } 45075 45076 /** 45077 * Perform + either to or from FP0. That is, 45078 * <PRE> 45079 * dstReg += srcReg 45080 * </PRE> 45081 * 45082 * @param dstReg destination register, this or srcReg must be FP0 45083 * @param srcReg source register, this or dstReg must be FP0 45084 */ 45085 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45086 public final void emitFADD_Reg_Reg(FPR dstReg, FPR srcReg) { 45087 int miStart = mi; 45088 if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0); 45089 if (dstReg == FP0) { 45090 setMachineCodes(mi++, (byte) 0xD8); 45091 setMachineCodes(mi++, (byte) (0xC0 | srcReg.value())); 45092 } else if (srcReg == FP0) { 45093 setMachineCodes(mi++, (byte) 0xDC); 45094 setMachineCodes(mi++, (byte) (0xC0 | dstReg.value())); 45095 } 45096 if (lister != null) lister.RR(miStart, "FADD", dstReg, srcReg); 45097 } 45098 45099 /** 45100 * Perform + then pop stack. That is, 45101 * <PRE> 45102 * srcReg += ST(0); pop stack 45103 * </PRE> 45104 * 45105 * @param dstReg destination register 45106 * @param srcReg source register 45107 */ 45108 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45109 public final void emitFADDP_Reg_Reg(FPR dstReg, FPR srcReg) { 45110 int miStart = mi; 45111 if (VM.VerifyAssertions) VM._assert(srcReg == FP0); 45112 setMachineCodes(mi++, (byte) 0xDE); 45113 setMachineCodes(mi++, (byte) (0xC0 | dstReg.value())); 45114 if (lister != null) lister.R(miStart, "FADDP", dstReg); 45115 } 45116 45117 /** 45118 * Perform / on FP0. That is, 45119 * <PRE> 45120 * dstReg /= () [srcBase + srcDisp] 45121 * </PRE> 45122 * 45123 * @param dstReg destination register, must be FP0 45124 * @param srcBase source base register 45125 * @param srcDisp source displacement 45126 */ 45127 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45128 public final void emitFDIV_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 45129 int miStart = mi; 45130 // Must store result to top of stack 45131 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45132 setMachineCodes(mi++, (byte) 0xD8); 45133 // The register'' 6 is really part of the opcode 45134 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(6)); 45135 if (lister != null) lister.RRD(miStart, "FDIV", dstReg, srcBase, srcDisp); 45136 } 45137 45138 /** 45139 * Perform / on FP0. That is, 45140 * <PRE> 45141 * dstReg /= () [srcBase] 45142 * </PRE> 45143 * 45144 * @param dstReg destination register, must be FP0 45145 * @param srcBase source base register 45146 */ 45147 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45148 public final void emitFDIV_Reg_RegInd(FPR dstReg, GPR srcBase) { 45149 int miStart = mi; 45150 // Must store result to top of stack 45151 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45152 setMachineCodes(mi++, (byte) 0xD8); 45153 // The register'' 6 is really part of the opcode 45154 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(6)); 45155 if (lister != null) lister.RRN(miStart, "FDIV", dstReg, srcBase); 45156 } 45157 45158 /** 45159 * Perform / on dstReg. That is, 45160 * <PRE> 45161 * dstReg /= () [srcBase + srcIndex<<srcScale + srcDisp] 45162 * </PRE> 45163 * 45164 * @param dstReg destination register, must be FP0 45165 * @param srcBase source base register 45166 * @param srcIndex source index register 45167 * @param srcScale source scale 45168 * @param srcDisp source displacement 45169 */ 45170 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 45171 public final void emitFDIV_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 45172 int miStart = mi; 45173 // Must store result to top of stack 45174 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45175 setMachineCodes(mi++, (byte) 0xD8); 45176 // The register'' 6 is really part of the opcode 45177 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(6)); 45178 if (lister != null) lister.RRXD(miStart, "FDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 45179 } 45180 45181 /** 45182 * Perform / on FP0. That is, 45183 * <PRE> 45184 * dstReg /= () [srcIndex<<srcScale + srcDisp] 45185 * </PRE> 45186 * 45187 * @param dstReg destination register, must be FP0 45188 * @param srcIndex source index register 45189 * @param srcScale source scale 45190 * @param srcDisp source displacement 45191 */ 45192 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45193 public final void emitFDIV_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 45194 int miStart = mi; 45195 // Must store result to top of stack 45196 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45197 setMachineCodes(mi++, (byte) 0xD8); 45198 // The register'' 6 is really part of the opcode 45199 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(6)); 45200 if (lister != null) lister.RRFD(miStart, "FDIV", dstReg, srcIndex, srcScale, srcDisp); 45201 } 45202 45203 /** 45204 * Perform / on FP0. That is, 45205 * <PRE> 45206 * dstReg /= () [srcDisp] 45207 * </PRE> 45208 * 45209 * @param dstReg destination register, must be FP0 45210 * @param srcDisp source displacement 45211 */ 45212 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 45213 public final void emitFDIV_Reg_Abs(FPR dstReg, Address srcDisp) { 45214 int miStart = mi; 45215 // Must store result to top of stack 45216 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45217 setMachineCodes(mi++, (byte) 0xD8); 45218 // The register'' 6 is really part of the opcode 45219 emitAbsRegOperands(srcDisp, GPR.getForOpcode(6)); 45220 if (lister != null) lister.RRA(miStart, "FDIV", dstReg, srcDisp); 45221 } 45222 45223 /** 45224 * Perform / on FP0. That is, 45225 * <PRE> 45226 * dstReg /= (quad) [srcBase + srcDisp] 45227 * </PRE> 45228 * 45229 * @param dstReg destination register, must be FP0 45230 * @param srcBase source base register 45231 * @param srcDisp source displacement 45232 */ 45233 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45234 public final void emitFDIV_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) { 45235 int miStart = mi; 45236 // Must store result to top of stack 45237 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45238 setMachineCodes(mi++, (byte) 0xDC); 45239 // The register'' 6 is really part of the opcode 45240 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(6)); 45241 if (lister != null) lister.RRD(miStart, "FDIV", dstReg, srcBase, srcDisp); 45242 } 45243 45244 /** 45245 * Perform / on FP0. That is, 45246 * <PRE> 45247 * dstReg /= (quad) [srcBase] 45248 * </PRE> 45249 * 45250 * @param dstReg destination register, must be FP0 45251 * @param srcBase source base register 45252 */ 45253 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45254 public final void emitFDIV_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) { 45255 int miStart = mi; 45256 // Must store result to top of stack 45257 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45258 setMachineCodes(mi++, (byte) 0xDC); 45259 // The register'' 6 is really part of the opcode 45260 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(6)); 45261 if (lister != null) lister.RRN(miStart, "FDIV", dstReg, srcBase); 45262 } 45263 45264 /** 45265 * Perform / on dstReg. That is, 45266 * <PRE> 45267 * dstReg /= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 45268 * </PRE> 45269 * 45270 * @param dstReg destination register, must be FP0 45271 * @param srcBase source base register 45272 * @param srcIndex source index register 45273 * @param srcScale source scale 45274 * @param srcDisp source displacement 45275 */ 45276 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 45277 public final void emitFDIV_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 45278 int miStart = mi; 45279 // Must store result to top of stack 45280 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45281 setMachineCodes(mi++, (byte) 0xDC); 45282 // The register'' 6 is really part of the opcode 45283 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(6)); 45284 if (lister != null) lister.RRXD(miStart, "FDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 45285 } 45286 45287 /** 45288 * Perform / on FP0. That is, 45289 * <PRE> 45290 * dstReg /= (quad) [srcIndex<<srcScale + srcDisp] 45291 * </PRE> 45292 * 45293 * @param dstReg destination register, must be FP0 45294 * @param srcIndex source index register 45295 * @param srcScale source scale 45296 * @param srcDisp source displacement 45297 */ 45298 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45299 public final void emitFDIV_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 45300 int miStart = mi; 45301 // Must store result to top of stack 45302 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45303 setMachineCodes(mi++, (byte) 0xDC); 45304 // The register'' 6 is really part of the opcode 45305 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(6)); 45306 if (lister != null) lister.RRFD(miStart, "FDIV", dstReg, srcIndex, srcScale, srcDisp); 45307 } 45308 45309 /** 45310 * Perform / on FP0. That is, 45311 * <PRE> 45312 * dstReg /= (quad) [srcDisp] 45313 * </PRE> 45314 * 45315 * @param dstReg destination register, must be FP0 45316 * @param srcDisp source displacement 45317 */ 45318 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 45319 public final void emitFDIV_Reg_Abs_Quad(FPR dstReg, Address srcDisp) { 45320 int miStart = mi; 45321 // Must store result to top of stack 45322 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45323 setMachineCodes(mi++, (byte) 0xDC); 45324 // The register'' 6 is really part of the opcode 45325 emitAbsRegOperands(srcDisp, GPR.getForOpcode(6)); 45326 if (lister != null) lister.RRA(miStart, "FDIV", dstReg, srcDisp); 45327 } 45328 45329 /** 45330 * Perform / on FP0. That is, 45331 * <PRE> 45332 * dstReg /= () [srcBase + srcDisp] 45333 * </PRE> 45334 * 45335 * @param dstReg destination register, must be FP0 45336 * @param srcBase source base register 45337 * @param srcDisp source displacement 45338 */ 45339 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45340 public final void emitFIDIV_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 45341 int miStart = mi; 45342 // Must store result to top of stack 45343 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45344 setMachineCodes(mi++, (byte) 0xDA); 45345 // The register'' 6 is really part of the opcode 45346 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(6)); 45347 if (lister != null) lister.RRD(miStart, "FIDIV", dstReg, srcBase, srcDisp); 45348 } 45349 45350 /** 45351 * Perform / on FP0. That is, 45352 * <PRE> 45353 * dstReg /= () [srcBase] 45354 * </PRE> 45355 * 45356 * @param dstReg destination register, must be FP0 45357 * @param srcBase source base register 45358 */ 45359 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45360 public final void emitFIDIV_Reg_RegInd(FPR dstReg, GPR srcBase) { 45361 int miStart = mi; 45362 // Must store result to top of stack 45363 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45364 setMachineCodes(mi++, (byte) 0xDA); 45365 // The register'' 6 is really part of the opcode 45366 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(6)); 45367 if (lister != null) lister.RRN(miStart, "FIDIV", dstReg, srcBase); 45368 } 45369 45370 /** 45371 * Perform / on dstReg. That is, 45372 * <PRE> 45373 * dstReg /= () [srcBase + srcIndex<<srcScale + srcDisp] 45374 * </PRE> 45375 * 45376 * @param dstReg destination register, must be FP0 45377 * @param srcBase source base register 45378 * @param srcIndex source index register 45379 * @param srcScale source scale 45380 * @param srcDisp source displacement 45381 */ 45382 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 45383 public final void emitFIDIV_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 45384 int miStart = mi; 45385 // Must store result to top of stack 45386 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45387 setMachineCodes(mi++, (byte) 0xDA); 45388 // The register'' 6 is really part of the opcode 45389 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(6)); 45390 if (lister != null) lister.RRXD(miStart, "FIDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 45391 } 45392 45393 /** 45394 * Perform / on FP0. That is, 45395 * <PRE> 45396 * dstReg /= () [srcIndex<<srcScale + srcDisp] 45397 * </PRE> 45398 * 45399 * @param dstReg destination register, must be FP0 45400 * @param srcIndex source index register 45401 * @param srcScale source scale 45402 * @param srcDisp source displacement 45403 */ 45404 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45405 public final void emitFIDIV_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 45406 int miStart = mi; 45407 // Must store result to top of stack 45408 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45409 setMachineCodes(mi++, (byte) 0xDA); 45410 // The register'' 6 is really part of the opcode 45411 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(6)); 45412 if (lister != null) lister.RRFD(miStart, "FIDIV", dstReg, srcIndex, srcScale, srcDisp); 45413 } 45414 45415 /** 45416 * Perform / on FP0. That is, 45417 * <PRE> 45418 * dstReg /= () [srcDisp] 45419 * </PRE> 45420 * 45421 * @param dstReg destination register, must be FP0 45422 * @param srcDisp source displacement 45423 */ 45424 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 45425 public final void emitFIDIV_Reg_Abs(FPR dstReg, Address srcDisp) { 45426 int miStart = mi; 45427 // Must store result to top of stack 45428 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45429 setMachineCodes(mi++, (byte) 0xDA); 45430 // The register'' 6 is really part of the opcode 45431 emitAbsRegOperands(srcDisp, GPR.getForOpcode(6)); 45432 if (lister != null) lister.RRA(miStart, "FIDIV", dstReg, srcDisp); 45433 } 45434 45435 /** 45436 * Perform / on FP0. That is, 45437 * <PRE> 45438 * dstReg /= (word) [srcBase + srcDisp] 45439 * </PRE> 45440 * 45441 * @param dstReg destination register, must be FP0 45442 * @param srcBase source base register 45443 * @param srcDisp source displacement 45444 */ 45445 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45446 public final void emitFIDIV_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) { 45447 int miStart = mi; 45448 // Must store result to top of stack 45449 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45450 setMachineCodes(mi++, (byte) 0xDE); 45451 // The register'' 6 is really part of the opcode 45452 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(6)); 45453 if (lister != null) lister.RRD(miStart, "FIDIV", dstReg, srcBase, srcDisp); 45454 } 45455 45456 /** 45457 * Perform / on FP0. That is, 45458 * <PRE> 45459 * dstReg /= (word) [srcBase] 45460 * </PRE> 45461 * 45462 * @param dstReg destination register, must be FP0 45463 * @param srcBase source base register 45464 */ 45465 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45466 public final void emitFIDIV_Reg_RegInd_Word(FPR dstReg, GPR srcBase) { 45467 int miStart = mi; 45468 // Must store result to top of stack 45469 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45470 setMachineCodes(mi++, (byte) 0xDE); 45471 // The register'' 6 is really part of the opcode 45472 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(6)); 45473 if (lister != null) lister.RRN(miStart, "FIDIV", dstReg, srcBase); 45474 } 45475 45476 /** 45477 * Perform / on dstReg. That is, 45478 * <PRE> 45479 * dstReg /= (word) [srcBase + srcIndex<<srcScale + srcDisp] 45480 * </PRE> 45481 * 45482 * @param dstReg destination register, must be FP0 45483 * @param srcBase source base register 45484 * @param srcIndex source index register 45485 * @param srcScale source scale 45486 * @param srcDisp source displacement 45487 */ 45488 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 45489 public final void emitFIDIV_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 45490 int miStart = mi; 45491 // Must store result to top of stack 45492 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45493 setMachineCodes(mi++, (byte) 0xDE); 45494 // The register'' 6 is really part of the opcode 45495 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(6)); 45496 if (lister != null) lister.RRXD(miStart, "FIDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp); 45497 } 45498 45499 /** 45500 * Perform / on FP0. That is, 45501 * <PRE> 45502 * dstReg /= (word) [srcIndex<<srcScale + srcDisp] 45503 * </PRE> 45504 * 45505 * @param dstReg destination register, must be FP0 45506 * @param srcIndex source index register 45507 * @param srcScale source scale 45508 * @param srcDisp source displacement 45509 */ 45510 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45511 public final void emitFIDIV_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 45512 int miStart = mi; 45513 // Must store result to top of stack 45514 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45515 setMachineCodes(mi++, (byte) 0xDE); 45516 // The register'' 6 is really part of the opcode 45517 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(6)); 45518 if (lister != null) lister.RRFD(miStart, "FIDIV", dstReg, srcIndex, srcScale, srcDisp); 45519 } 45520 45521 /** 45522 * Perform / on FP0. That is, 45523 * <PRE> 45524 * dstReg /= (word) [srcDisp] 45525 * </PRE> 45526 * 45527 * @param dstReg destination register, must be FP0 45528 * @param srcDisp source displacement 45529 */ 45530 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 45531 public final void emitFIDIV_Reg_Abs_Word(FPR dstReg, Address srcDisp) { 45532 int miStart = mi; 45533 // Must store result to top of stack 45534 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45535 setMachineCodes(mi++, (byte) 0xDE); 45536 // The register'' 6 is really part of the opcode 45537 emitAbsRegOperands(srcDisp, GPR.getForOpcode(6)); 45538 if (lister != null) lister.RRA(miStart, "FIDIV", dstReg, srcDisp); 45539 } 45540 45541 /** 45542 * Perform / either to or from FP0. That is, 45543 * <PRE> 45544 * dstReg /= srcReg 45545 * </PRE> 45546 * 45547 * @param dstReg destination register, this or srcReg must be FP0 45548 * @param srcReg source register, this or dstReg must be FP0 45549 */ 45550 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45551 public final void emitFDIV_Reg_Reg(FPR dstReg, FPR srcReg) { 45552 int miStart = mi; 45553 if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0); 45554 if (dstReg == FP0) { 45555 setMachineCodes(mi++, (byte) 0xD8); 45556 setMachineCodes(mi++, (byte) (0xF0 | srcReg.value())); 45557 } else if (srcReg == FP0) { 45558 setMachineCodes(mi++, (byte) 0xDC); 45559 setMachineCodes(mi++, (byte) (0xF8 | dstReg.value())); 45560 } 45561 if (lister != null) lister.RR(miStart, "FDIV", dstReg, srcReg); 45562 } 45563 45564 /** 45565 * Perform / then pop stack. That is, 45566 * <PRE> 45567 * srcReg /= ST(0); pop stack 45568 * </PRE> 45569 * 45570 * @param dstReg destination register 45571 * @param srcReg source register 45572 */ 45573 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45574 public final void emitFDIVP_Reg_Reg(FPR dstReg, FPR srcReg) { 45575 int miStart = mi; 45576 if (VM.VerifyAssertions) VM._assert(srcReg == FP0); 45577 setMachineCodes(mi++, (byte) 0xDE); 45578 setMachineCodes(mi++, (byte) (0xF8 | dstReg.value())); 45579 if (lister != null) lister.R(miStart, "FDIVP", dstReg); 45580 } 45581 45582 /** 45583 * Perform / on FP0. That is, 45584 * <PRE> 45585 * dstReg /= () [srcBase + srcDisp] 45586 * </PRE> 45587 * 45588 * @param dstReg destination register, must be FP0 45589 * @param srcBase source base register 45590 * @param srcDisp source displacement 45591 */ 45592 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45593 public final void emitFDIVR_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 45594 int miStart = mi; 45595 // Must store result to top of stack 45596 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45597 setMachineCodes(mi++, (byte) 0xD8); 45598 // The register'' 7 is really part of the opcode 45599 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(7)); 45600 if (lister != null) lister.RRD(miStart, "FDIVR", dstReg, srcBase, srcDisp); 45601 } 45602 45603 /** 45604 * Perform / on FP0. That is, 45605 * <PRE> 45606 * dstReg /= () [srcBase] 45607 * </PRE> 45608 * 45609 * @param dstReg destination register, must be FP0 45610 * @param srcBase source base register 45611 */ 45612 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45613 public final void emitFDIVR_Reg_RegInd(FPR dstReg, GPR srcBase) { 45614 int miStart = mi; 45615 // Must store result to top of stack 45616 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45617 setMachineCodes(mi++, (byte) 0xD8); 45618 // The register'' 7 is really part of the opcode 45619 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(7)); 45620 if (lister != null) lister.RRN(miStart, "FDIVR", dstReg, srcBase); 45621 } 45622 45623 /** 45624 * Perform / on dstReg. That is, 45625 * <PRE> 45626 * dstReg /= () [srcBase + srcIndex<<srcScale + srcDisp] 45627 * </PRE> 45628 * 45629 * @param dstReg destination register, must be FP0 45630 * @param srcBase source base register 45631 * @param srcIndex source index register 45632 * @param srcScale source scale 45633 * @param srcDisp source displacement 45634 */ 45635 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 45636 public final void emitFDIVR_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 45637 int miStart = mi; 45638 // Must store result to top of stack 45639 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45640 setMachineCodes(mi++, (byte) 0xD8); 45641 // The register'' 7 is really part of the opcode 45642 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(7)); 45643 if (lister != null) lister.RRXD(miStart, "FDIVR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 45644 } 45645 45646 /** 45647 * Perform / on FP0. That is, 45648 * <PRE> 45649 * dstReg /= () [srcIndex<<srcScale + srcDisp] 45650 * </PRE> 45651 * 45652 * @param dstReg destination register, must be FP0 45653 * @param srcIndex source index register 45654 * @param srcScale source scale 45655 * @param srcDisp source displacement 45656 */ 45657 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45658 public final void emitFDIVR_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 45659 int miStart = mi; 45660 // Must store result to top of stack 45661 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45662 setMachineCodes(mi++, (byte) 0xD8); 45663 // The register'' 7 is really part of the opcode 45664 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(7)); 45665 if (lister != null) lister.RRFD(miStart, "FDIVR", dstReg, srcIndex, srcScale, srcDisp); 45666 } 45667 45668 /** 45669 * Perform / on FP0. That is, 45670 * <PRE> 45671 * dstReg /= () [srcDisp] 45672 * </PRE> 45673 * 45674 * @param dstReg destination register, must be FP0 45675 * @param srcDisp source displacement 45676 */ 45677 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 45678 public final void emitFDIVR_Reg_Abs(FPR dstReg, Address srcDisp) { 45679 int miStart = mi; 45680 // Must store result to top of stack 45681 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45682 setMachineCodes(mi++, (byte) 0xD8); 45683 // The register'' 7 is really part of the opcode 45684 emitAbsRegOperands(srcDisp, GPR.getForOpcode(7)); 45685 if (lister != null) lister.RRA(miStart, "FDIVR", dstReg, srcDisp); 45686 } 45687 45688 /** 45689 * Perform / on FP0. That is, 45690 * <PRE> 45691 * dstReg /= (quad) [srcBase + srcDisp] 45692 * </PRE> 45693 * 45694 * @param dstReg destination register, must be FP0 45695 * @param srcBase source base register 45696 * @param srcDisp source displacement 45697 */ 45698 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45699 public final void emitFDIVR_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) { 45700 int miStart = mi; 45701 // Must store result to top of stack 45702 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45703 setMachineCodes(mi++, (byte) 0xDC); 45704 // The register'' 7 is really part of the opcode 45705 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(7)); 45706 if (lister != null) lister.RRD(miStart, "FDIVR", dstReg, srcBase, srcDisp); 45707 } 45708 45709 /** 45710 * Perform / on FP0. That is, 45711 * <PRE> 45712 * dstReg /= (quad) [srcBase] 45713 * </PRE> 45714 * 45715 * @param dstReg destination register, must be FP0 45716 * @param srcBase source base register 45717 */ 45718 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45719 public final void emitFDIVR_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) { 45720 int miStart = mi; 45721 // Must store result to top of stack 45722 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45723 setMachineCodes(mi++, (byte) 0xDC); 45724 // The register'' 7 is really part of the opcode 45725 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(7)); 45726 if (lister != null) lister.RRN(miStart, "FDIVR", dstReg, srcBase); 45727 } 45728 45729 /** 45730 * Perform / on dstReg. That is, 45731 * <PRE> 45732 * dstReg /= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 45733 * </PRE> 45734 * 45735 * @param dstReg destination register, must be FP0 45736 * @param srcBase source base register 45737 * @param srcIndex source index register 45738 * @param srcScale source scale 45739 * @param srcDisp source displacement 45740 */ 45741 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 45742 public final void emitFDIVR_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 45743 int miStart = mi; 45744 // Must store result to top of stack 45745 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45746 setMachineCodes(mi++, (byte) 0xDC); 45747 // The register'' 7 is really part of the opcode 45748 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(7)); 45749 if (lister != null) lister.RRXD(miStart, "FDIVR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 45750 } 45751 45752 /** 45753 * Perform / on FP0. That is, 45754 * <PRE> 45755 * dstReg /= (quad) [srcIndex<<srcScale + srcDisp] 45756 * </PRE> 45757 * 45758 * @param dstReg destination register, must be FP0 45759 * @param srcIndex source index register 45760 * @param srcScale source scale 45761 * @param srcDisp source displacement 45762 */ 45763 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45764 public final void emitFDIVR_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 45765 int miStart = mi; 45766 // Must store result to top of stack 45767 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45768 setMachineCodes(mi++, (byte) 0xDC); 45769 // The register'' 7 is really part of the opcode 45770 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(7)); 45771 if (lister != null) lister.RRFD(miStart, "FDIVR", dstReg, srcIndex, srcScale, srcDisp); 45772 } 45773 45774 /** 45775 * Perform / on FP0. That is, 45776 * <PRE> 45777 * dstReg /= (quad) [srcDisp] 45778 * </PRE> 45779 * 45780 * @param dstReg destination register, must be FP0 45781 * @param srcDisp source displacement 45782 */ 45783 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 45784 public final void emitFDIVR_Reg_Abs_Quad(FPR dstReg, Address srcDisp) { 45785 int miStart = mi; 45786 // Must store result to top of stack 45787 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45788 setMachineCodes(mi++, (byte) 0xDC); 45789 // The register'' 7 is really part of the opcode 45790 emitAbsRegOperands(srcDisp, GPR.getForOpcode(7)); 45791 if (lister != null) lister.RRA(miStart, "FDIVR", dstReg, srcDisp); 45792 } 45793 45794 /** 45795 * Perform / on FP0. That is, 45796 * <PRE> 45797 * dstReg /= () [srcBase + srcDisp] 45798 * </PRE> 45799 * 45800 * @param dstReg destination register, must be FP0 45801 * @param srcBase source base register 45802 * @param srcDisp source displacement 45803 */ 45804 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45805 public final void emitFIDIVR_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 45806 int miStart = mi; 45807 // Must store result to top of stack 45808 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45809 setMachineCodes(mi++, (byte) 0xDA); 45810 // The register'' 7 is really part of the opcode 45811 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(7)); 45812 if (lister != null) lister.RRD(miStart, "FIDIVR", dstReg, srcBase, srcDisp); 45813 } 45814 45815 /** 45816 * Perform / on FP0. That is, 45817 * <PRE> 45818 * dstReg /= () [srcBase] 45819 * </PRE> 45820 * 45821 * @param dstReg destination register, must be FP0 45822 * @param srcBase source base register 45823 */ 45824 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45825 public final void emitFIDIVR_Reg_RegInd(FPR dstReg, GPR srcBase) { 45826 int miStart = mi; 45827 // Must store result to top of stack 45828 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45829 setMachineCodes(mi++, (byte) 0xDA); 45830 // The register'' 7 is really part of the opcode 45831 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(7)); 45832 if (lister != null) lister.RRN(miStart, "FIDIVR", dstReg, srcBase); 45833 } 45834 45835 /** 45836 * Perform / on dstReg. That is, 45837 * <PRE> 45838 * dstReg /= () [srcBase + srcIndex<<srcScale + srcDisp] 45839 * </PRE> 45840 * 45841 * @param dstReg destination register, must be FP0 45842 * @param srcBase source base register 45843 * @param srcIndex source index register 45844 * @param srcScale source scale 45845 * @param srcDisp source displacement 45846 */ 45847 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 45848 public final void emitFIDIVR_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 45849 int miStart = mi; 45850 // Must store result to top of stack 45851 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45852 setMachineCodes(mi++, (byte) 0xDA); 45853 // The register'' 7 is really part of the opcode 45854 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(7)); 45855 if (lister != null) lister.RRXD(miStart, "FIDIVR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 45856 } 45857 45858 /** 45859 * Perform / on FP0. That is, 45860 * <PRE> 45861 * dstReg /= () [srcIndex<<srcScale + srcDisp] 45862 * </PRE> 45863 * 45864 * @param dstReg destination register, must be FP0 45865 * @param srcIndex source index register 45866 * @param srcScale source scale 45867 * @param srcDisp source displacement 45868 */ 45869 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45870 public final void emitFIDIVR_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 45871 int miStart = mi; 45872 // Must store result to top of stack 45873 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45874 setMachineCodes(mi++, (byte) 0xDA); 45875 // The register'' 7 is really part of the opcode 45876 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(7)); 45877 if (lister != null) lister.RRFD(miStart, "FIDIVR", dstReg, srcIndex, srcScale, srcDisp); 45878 } 45879 45880 /** 45881 * Perform / on FP0. That is, 45882 * <PRE> 45883 * dstReg /= () [srcDisp] 45884 * </PRE> 45885 * 45886 * @param dstReg destination register, must be FP0 45887 * @param srcDisp source displacement 45888 */ 45889 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 45890 public final void emitFIDIVR_Reg_Abs(FPR dstReg, Address srcDisp) { 45891 int miStart = mi; 45892 // Must store result to top of stack 45893 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45894 setMachineCodes(mi++, (byte) 0xDA); 45895 // The register'' 7 is really part of the opcode 45896 emitAbsRegOperands(srcDisp, GPR.getForOpcode(7)); 45897 if (lister != null) lister.RRA(miStart, "FIDIVR", dstReg, srcDisp); 45898 } 45899 45900 /** 45901 * Perform / on FP0. That is, 45902 * <PRE> 45903 * dstReg /= (word) [srcBase + srcDisp] 45904 * </PRE> 45905 * 45906 * @param dstReg destination register, must be FP0 45907 * @param srcBase source base register 45908 * @param srcDisp source displacement 45909 */ 45910 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45911 public final void emitFIDIVR_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) { 45912 int miStart = mi; 45913 // Must store result to top of stack 45914 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45915 setMachineCodes(mi++, (byte) 0xDE); 45916 // The register'' 7 is really part of the opcode 45917 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(7)); 45918 if (lister != null) lister.RRD(miStart, "FIDIVR", dstReg, srcBase, srcDisp); 45919 } 45920 45921 /** 45922 * Perform / on FP0. That is, 45923 * <PRE> 45924 * dstReg /= (word) [srcBase] 45925 * </PRE> 45926 * 45927 * @param dstReg destination register, must be FP0 45928 * @param srcBase source base register 45929 */ 45930 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45931 public final void emitFIDIVR_Reg_RegInd_Word(FPR dstReg, GPR srcBase) { 45932 int miStart = mi; 45933 // Must store result to top of stack 45934 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45935 setMachineCodes(mi++, (byte) 0xDE); 45936 // The register'' 7 is really part of the opcode 45937 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(7)); 45938 if (lister != null) lister.RRN(miStart, "FIDIVR", dstReg, srcBase); 45939 } 45940 45941 /** 45942 * Perform / on dstReg. That is, 45943 * <PRE> 45944 * dstReg /= (word) [srcBase + srcIndex<<srcScale + srcDisp] 45945 * </PRE> 45946 * 45947 * @param dstReg destination register, must be FP0 45948 * @param srcBase source base register 45949 * @param srcIndex source index register 45950 * @param srcScale source scale 45951 * @param srcDisp source displacement 45952 */ 45953 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 45954 public final void emitFIDIVR_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 45955 int miStart = mi; 45956 // Must store result to top of stack 45957 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45958 setMachineCodes(mi++, (byte) 0xDE); 45959 // The register'' 7 is really part of the opcode 45960 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(7)); 45961 if (lister != null) lister.RRXD(miStart, "FIDIVR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 45962 } 45963 45964 /** 45965 * Perform / on FP0. That is, 45966 * <PRE> 45967 * dstReg /= (word) [srcIndex<<srcScale + srcDisp] 45968 * </PRE> 45969 * 45970 * @param dstReg destination register, must be FP0 45971 * @param srcIndex source index register 45972 * @param srcScale source scale 45973 * @param srcDisp source displacement 45974 */ 45975 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 45976 public final void emitFIDIVR_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 45977 int miStart = mi; 45978 // Must store result to top of stack 45979 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 45980 setMachineCodes(mi++, (byte) 0xDE); 45981 // The register'' 7 is really part of the opcode 45982 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(7)); 45983 if (lister != null) lister.RRFD(miStart, "FIDIVR", dstReg, srcIndex, srcScale, srcDisp); 45984 } 45985 45986 /** 45987 * Perform / on FP0. That is, 45988 * <PRE> 45989 * dstReg /= (word) [srcDisp] 45990 * </PRE> 45991 * 45992 * @param dstReg destination register, must be FP0 45993 * @param srcDisp source displacement 45994 */ 45995 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 45996 public final void emitFIDIVR_Reg_Abs_Word(FPR dstReg, Address srcDisp) { 45997 int miStart = mi; 45998 // Must store result to top of stack 45999 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46000 setMachineCodes(mi++, (byte) 0xDE); 46001 // The register'' 7 is really part of the opcode 46002 emitAbsRegOperands(srcDisp, GPR.getForOpcode(7)); 46003 if (lister != null) lister.RRA(miStart, "FIDIVR", dstReg, srcDisp); 46004 } 46005 46006 /** 46007 * Perform / either to or from FP0. That is, 46008 * <PRE> 46009 * dstReg /= srcReg 46010 * </PRE> 46011 * 46012 * @param dstReg destination register, this or srcReg must be FP0 46013 * @param srcReg source register, this or dstReg must be FP0 46014 */ 46015 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46016 public final void emitFDIVR_Reg_Reg(FPR dstReg, FPR srcReg) { 46017 int miStart = mi; 46018 if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0); 46019 if (dstReg == FP0) { 46020 setMachineCodes(mi++, (byte) 0xD8); 46021 setMachineCodes(mi++, (byte) (0xF8 | srcReg.value())); 46022 } else if (srcReg == FP0) { 46023 setMachineCodes(mi++, (byte) 0xDC); 46024 setMachineCodes(mi++, (byte) (0xF0 | dstReg.value())); 46025 } 46026 if (lister != null) lister.RR(miStart, "FDIVR", dstReg, srcReg); 46027 } 46028 46029 /** 46030 * Perform / then pop stack. That is, 46031 * <PRE> 46032 * srcReg /= ST(0); pop stack 46033 * </PRE> 46034 * 46035 * @param dstReg destination register 46036 * @param srcReg source register 46037 */ 46038 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46039 public final void emitFDIVRP_Reg_Reg(FPR dstReg, FPR srcReg) { 46040 int miStart = mi; 46041 if (VM.VerifyAssertions) VM._assert(srcReg == FP0); 46042 setMachineCodes(mi++, (byte) 0xDE); 46043 setMachineCodes(mi++, (byte) (0xF0 | dstReg.value())); 46044 if (lister != null) lister.R(miStart, "FDIVRP", dstReg); 46045 } 46046 46047 /** 46048 * Perform x on FP0. That is, 46049 * <PRE> 46050 * dstReg x= () [srcBase + srcDisp] 46051 * </PRE> 46052 * 46053 * @param dstReg destination register, must be FP0 46054 * @param srcBase source base register 46055 * @param srcDisp source displacement 46056 */ 46057 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46058 public final void emitFMUL_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 46059 int miStart = mi; 46060 // Must store result to top of stack 46061 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46062 setMachineCodes(mi++, (byte) 0xD8); 46063 // The register'' 1 is really part of the opcode 46064 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(1)); 46065 if (lister != null) lister.RRD(miStart, "FMUL", dstReg, srcBase, srcDisp); 46066 } 46067 46068 /** 46069 * Perform x on FP0. That is, 46070 * <PRE> 46071 * dstReg x= () [srcBase] 46072 * </PRE> 46073 * 46074 * @param dstReg destination register, must be FP0 46075 * @param srcBase source base register 46076 */ 46077 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46078 public final void emitFMUL_Reg_RegInd(FPR dstReg, GPR srcBase) { 46079 int miStart = mi; 46080 // Must store result to top of stack 46081 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46082 setMachineCodes(mi++, (byte) 0xD8); 46083 // The register'' 1 is really part of the opcode 46084 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(1)); 46085 if (lister != null) lister.RRN(miStart, "FMUL", dstReg, srcBase); 46086 } 46087 46088 /** 46089 * Perform x on dstReg. That is, 46090 * <PRE> 46091 * dstReg x= () [srcBase + srcIndex<<srcScale + srcDisp] 46092 * </PRE> 46093 * 46094 * @param dstReg destination register, must be FP0 46095 * @param srcBase source base register 46096 * @param srcIndex source index register 46097 * @param srcScale source scale 46098 * @param srcDisp source displacement 46099 */ 46100 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 46101 public final void emitFMUL_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 46102 int miStart = mi; 46103 // Must store result to top of stack 46104 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46105 setMachineCodes(mi++, (byte) 0xD8); 46106 // The register'' 1 is really part of the opcode 46107 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(1)); 46108 if (lister != null) lister.RRXD(miStart, "FMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp); 46109 } 46110 46111 /** 46112 * Perform x on FP0. That is, 46113 * <PRE> 46114 * dstReg x= () [srcIndex<<srcScale + srcDisp] 46115 * </PRE> 46116 * 46117 * @param dstReg destination register, must be FP0 46118 * @param srcIndex source index register 46119 * @param srcScale source scale 46120 * @param srcDisp source displacement 46121 */ 46122 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46123 public final void emitFMUL_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 46124 int miStart = mi; 46125 // Must store result to top of stack 46126 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46127 setMachineCodes(mi++, (byte) 0xD8); 46128 // The register'' 1 is really part of the opcode 46129 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(1)); 46130 if (lister != null) lister.RRFD(miStart, "FMUL", dstReg, srcIndex, srcScale, srcDisp); 46131 } 46132 46133 /** 46134 * Perform x on FP0. That is, 46135 * <PRE> 46136 * dstReg x= () [srcDisp] 46137 * </PRE> 46138 * 46139 * @param dstReg destination register, must be FP0 46140 * @param srcDisp source displacement 46141 */ 46142 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 46143 public final void emitFMUL_Reg_Abs(FPR dstReg, Address srcDisp) { 46144 int miStart = mi; 46145 // Must store result to top of stack 46146 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46147 setMachineCodes(mi++, (byte) 0xD8); 46148 // The register'' 1 is really part of the opcode 46149 emitAbsRegOperands(srcDisp, GPR.getForOpcode(1)); 46150 if (lister != null) lister.RRA(miStart, "FMUL", dstReg, srcDisp); 46151 } 46152 46153 /** 46154 * Perform x on FP0. That is, 46155 * <PRE> 46156 * dstReg x= (quad) [srcBase + srcDisp] 46157 * </PRE> 46158 * 46159 * @param dstReg destination register, must be FP0 46160 * @param srcBase source base register 46161 * @param srcDisp source displacement 46162 */ 46163 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46164 public final void emitFMUL_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) { 46165 int miStart = mi; 46166 // Must store result to top of stack 46167 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46168 setMachineCodes(mi++, (byte) 0xDC); 46169 // The register'' 1 is really part of the opcode 46170 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(1)); 46171 if (lister != null) lister.RRD(miStart, "FMUL", dstReg, srcBase, srcDisp); 46172 } 46173 46174 /** 46175 * Perform x on FP0. That is, 46176 * <PRE> 46177 * dstReg x= (quad) [srcBase] 46178 * </PRE> 46179 * 46180 * @param dstReg destination register, must be FP0 46181 * @param srcBase source base register 46182 */ 46183 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46184 public final void emitFMUL_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) { 46185 int miStart = mi; 46186 // Must store result to top of stack 46187 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46188 setMachineCodes(mi++, (byte) 0xDC); 46189 // The register'' 1 is really part of the opcode 46190 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(1)); 46191 if (lister != null) lister.RRN(miStart, "FMUL", dstReg, srcBase); 46192 } 46193 46194 /** 46195 * Perform x on dstReg. That is, 46196 * <PRE> 46197 * dstReg x= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 46198 * </PRE> 46199 * 46200 * @param dstReg destination register, must be FP0 46201 * @param srcBase source base register 46202 * @param srcIndex source index register 46203 * @param srcScale source scale 46204 * @param srcDisp source displacement 46205 */ 46206 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 46207 public final void emitFMUL_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 46208 int miStart = mi; 46209 // Must store result to top of stack 46210 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46211 setMachineCodes(mi++, (byte) 0xDC); 46212 // The register'' 1 is really part of the opcode 46213 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(1)); 46214 if (lister != null) lister.RRXD(miStart, "FMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp); 46215 } 46216 46217 /** 46218 * Perform x on FP0. That is, 46219 * <PRE> 46220 * dstReg x= (quad) [srcIndex<<srcScale + srcDisp] 46221 * </PRE> 46222 * 46223 * @param dstReg destination register, must be FP0 46224 * @param srcIndex source index register 46225 * @param srcScale source scale 46226 * @param srcDisp source displacement 46227 */ 46228 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46229 public final void emitFMUL_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 46230 int miStart = mi; 46231 // Must store result to top of stack 46232 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46233 setMachineCodes(mi++, (byte) 0xDC); 46234 // The register'' 1 is really part of the opcode 46235 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(1)); 46236 if (lister != null) lister.RRFD(miStart, "FMUL", dstReg, srcIndex, srcScale, srcDisp); 46237 } 46238 46239 /** 46240 * Perform x on FP0. That is, 46241 * <PRE> 46242 * dstReg x= (quad) [srcDisp] 46243 * </PRE> 46244 * 46245 * @param dstReg destination register, must be FP0 46246 * @param srcDisp source displacement 46247 */ 46248 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 46249 public final void emitFMUL_Reg_Abs_Quad(FPR dstReg, Address srcDisp) { 46250 int miStart = mi; 46251 // Must store result to top of stack 46252 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46253 setMachineCodes(mi++, (byte) 0xDC); 46254 // The register'' 1 is really part of the opcode 46255 emitAbsRegOperands(srcDisp, GPR.getForOpcode(1)); 46256 if (lister != null) lister.RRA(miStart, "FMUL", dstReg, srcDisp); 46257 } 46258 46259 /** 46260 * Perform x on FP0. That is, 46261 * <PRE> 46262 * dstReg x= () [srcBase + srcDisp] 46263 * </PRE> 46264 * 46265 * @param dstReg destination register, must be FP0 46266 * @param srcBase source base register 46267 * @param srcDisp source displacement 46268 */ 46269 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46270 public final void emitFIMUL_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 46271 int miStart = mi; 46272 // Must store result to top of stack 46273 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46274 setMachineCodes(mi++, (byte) 0xDA); 46275 // The register'' 1 is really part of the opcode 46276 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(1)); 46277 if (lister != null) lister.RRD(miStart, "FIMUL", dstReg, srcBase, srcDisp); 46278 } 46279 46280 /** 46281 * Perform x on FP0. That is, 46282 * <PRE> 46283 * dstReg x= () [srcBase] 46284 * </PRE> 46285 * 46286 * @param dstReg destination register, must be FP0 46287 * @param srcBase source base register 46288 */ 46289 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46290 public final void emitFIMUL_Reg_RegInd(FPR dstReg, GPR srcBase) { 46291 int miStart = mi; 46292 // Must store result to top of stack 46293 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46294 setMachineCodes(mi++, (byte) 0xDA); 46295 // The register'' 1 is really part of the opcode 46296 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(1)); 46297 if (lister != null) lister.RRN(miStart, "FIMUL", dstReg, srcBase); 46298 } 46299 46300 /** 46301 * Perform x on dstReg. That is, 46302 * <PRE> 46303 * dstReg x= () [srcBase + srcIndex<<srcScale + srcDisp] 46304 * </PRE> 46305 * 46306 * @param dstReg destination register, must be FP0 46307 * @param srcBase source base register 46308 * @param srcIndex source index register 46309 * @param srcScale source scale 46310 * @param srcDisp source displacement 46311 */ 46312 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 46313 public final void emitFIMUL_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 46314 int miStart = mi; 46315 // Must store result to top of stack 46316 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46317 setMachineCodes(mi++, (byte) 0xDA); 46318 // The register'' 1 is really part of the opcode 46319 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(1)); 46320 if (lister != null) lister.RRXD(miStart, "FIMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp); 46321 } 46322 46323 /** 46324 * Perform x on FP0. That is, 46325 * <PRE> 46326 * dstReg x= () [srcIndex<<srcScale + srcDisp] 46327 * </PRE> 46328 * 46329 * @param dstReg destination register, must be FP0 46330 * @param srcIndex source index register 46331 * @param srcScale source scale 46332 * @param srcDisp source displacement 46333 */ 46334 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46335 public final void emitFIMUL_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 46336 int miStart = mi; 46337 // Must store result to top of stack 46338 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46339 setMachineCodes(mi++, (byte) 0xDA); 46340 // The register'' 1 is really part of the opcode 46341 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(1)); 46342 if (lister != null) lister.RRFD(miStart, "FIMUL", dstReg, srcIndex, srcScale, srcDisp); 46343 } 46344 46345 /** 46346 * Perform x on FP0. That is, 46347 * <PRE> 46348 * dstReg x= () [srcDisp] 46349 * </PRE> 46350 * 46351 * @param dstReg destination register, must be FP0 46352 * @param srcDisp source displacement 46353 */ 46354 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 46355 public final void emitFIMUL_Reg_Abs(FPR dstReg, Address srcDisp) { 46356 int miStart = mi; 46357 // Must store result to top of stack 46358 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46359 setMachineCodes(mi++, (byte) 0xDA); 46360 // The register'' 1 is really part of the opcode 46361 emitAbsRegOperands(srcDisp, GPR.getForOpcode(1)); 46362 if (lister != null) lister.RRA(miStart, "FIMUL", dstReg, srcDisp); 46363 } 46364 46365 /** 46366 * Perform x on FP0. That is, 46367 * <PRE> 46368 * dstReg x= (word) [srcBase + srcDisp] 46369 * </PRE> 46370 * 46371 * @param dstReg destination register, must be FP0 46372 * @param srcBase source base register 46373 * @param srcDisp source displacement 46374 */ 46375 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46376 public final void emitFIMUL_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) { 46377 int miStart = mi; 46378 // Must store result to top of stack 46379 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46380 setMachineCodes(mi++, (byte) 0xDE); 46381 // The register'' 1 is really part of the opcode 46382 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(1)); 46383 if (lister != null) lister.RRD(miStart, "FIMUL", dstReg, srcBase, srcDisp); 46384 } 46385 46386 /** 46387 * Perform x on FP0. That is, 46388 * <PRE> 46389 * dstReg x= (word) [srcBase] 46390 * </PRE> 46391 * 46392 * @param dstReg destination register, must be FP0 46393 * @param srcBase source base register 46394 */ 46395 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46396 public final void emitFIMUL_Reg_RegInd_Word(FPR dstReg, GPR srcBase) { 46397 int miStart = mi; 46398 // Must store result to top of stack 46399 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46400 setMachineCodes(mi++, (byte) 0xDE); 46401 // The register'' 1 is really part of the opcode 46402 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(1)); 46403 if (lister != null) lister.RRN(miStart, "FIMUL", dstReg, srcBase); 46404 } 46405 46406 /** 46407 * Perform x on dstReg. That is, 46408 * <PRE> 46409 * dstReg x= (word) [srcBase + srcIndex<<srcScale + srcDisp] 46410 * </PRE> 46411 * 46412 * @param dstReg destination register, must be FP0 46413 * @param srcBase source base register 46414 * @param srcIndex source index register 46415 * @param srcScale source scale 46416 * @param srcDisp source displacement 46417 */ 46418 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 46419 public final void emitFIMUL_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 46420 int miStart = mi; 46421 // Must store result to top of stack 46422 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46423 setMachineCodes(mi++, (byte) 0xDE); 46424 // The register'' 1 is really part of the opcode 46425 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(1)); 46426 if (lister != null) lister.RRXD(miStart, "FIMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp); 46427 } 46428 46429 /** 46430 * Perform x on FP0. That is, 46431 * <PRE> 46432 * dstReg x= (word) [srcIndex<<srcScale + srcDisp] 46433 * </PRE> 46434 * 46435 * @param dstReg destination register, must be FP0 46436 * @param srcIndex source index register 46437 * @param srcScale source scale 46438 * @param srcDisp source displacement 46439 */ 46440 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46441 public final void emitFIMUL_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 46442 int miStart = mi; 46443 // Must store result to top of stack 46444 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46445 setMachineCodes(mi++, (byte) 0xDE); 46446 // The register'' 1 is really part of the opcode 46447 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(1)); 46448 if (lister != null) lister.RRFD(miStart, "FIMUL", dstReg, srcIndex, srcScale, srcDisp); 46449 } 46450 46451 /** 46452 * Perform x on FP0. That is, 46453 * <PRE> 46454 * dstReg x= (word) [srcDisp] 46455 * </PRE> 46456 * 46457 * @param dstReg destination register, must be FP0 46458 * @param srcDisp source displacement 46459 */ 46460 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 46461 public final void emitFIMUL_Reg_Abs_Word(FPR dstReg, Address srcDisp) { 46462 int miStart = mi; 46463 // Must store result to top of stack 46464 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46465 setMachineCodes(mi++, (byte) 0xDE); 46466 // The register'' 1 is really part of the opcode 46467 emitAbsRegOperands(srcDisp, GPR.getForOpcode(1)); 46468 if (lister != null) lister.RRA(miStart, "FIMUL", dstReg, srcDisp); 46469 } 46470 46471 /** 46472 * Perform x either to or from FP0. That is, 46473 * <PRE> 46474 * dstReg x= srcReg 46475 * </PRE> 46476 * 46477 * @param dstReg destination register, this or srcReg must be FP0 46478 * @param srcReg source register, this or dstReg must be FP0 46479 */ 46480 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46481 public final void emitFMUL_Reg_Reg(FPR dstReg, FPR srcReg) { 46482 int miStart = mi; 46483 if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0); 46484 if (dstReg == FP0) { 46485 setMachineCodes(mi++, (byte) 0xD8); 46486 setMachineCodes(mi++, (byte) (0xC8 | srcReg.value())); 46487 } else if (srcReg == FP0) { 46488 setMachineCodes(mi++, (byte) 0xDC); 46489 setMachineCodes(mi++, (byte) (0xC8 | dstReg.value())); 46490 } 46491 if (lister != null) lister.RR(miStart, "FMUL", dstReg, srcReg); 46492 } 46493 46494 /** 46495 * Perform x then pop stack. That is, 46496 * <PRE> 46497 * srcReg x= ST(0); pop stack 46498 * </PRE> 46499 * 46500 * @param dstReg destination register 46501 * @param srcReg source register 46502 */ 46503 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46504 public final void emitFMULP_Reg_Reg(FPR dstReg, FPR srcReg) { 46505 int miStart = mi; 46506 if (VM.VerifyAssertions) VM._assert(srcReg == FP0); 46507 setMachineCodes(mi++, (byte) 0xDE); 46508 setMachineCodes(mi++, (byte) (0xC8 | dstReg.value())); 46509 if (lister != null) lister.R(miStart, "FMULP", dstReg); 46510 } 46511 46512 /** 46513 * Perform - on FP0. That is, 46514 * <PRE> 46515 * dstReg -= () [srcBase + srcDisp] 46516 * </PRE> 46517 * 46518 * @param dstReg destination register, must be FP0 46519 * @param srcBase source base register 46520 * @param srcDisp source displacement 46521 */ 46522 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46523 public final void emitFSUB_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 46524 int miStart = mi; 46525 // Must store result to top of stack 46526 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46527 setMachineCodes(mi++, (byte) 0xD8); 46528 // The register'' 4 is really part of the opcode 46529 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(4)); 46530 if (lister != null) lister.RRD(miStart, "FSUB", dstReg, srcBase, srcDisp); 46531 } 46532 46533 /** 46534 * Perform - on FP0. That is, 46535 * <PRE> 46536 * dstReg -= () [srcBase] 46537 * </PRE> 46538 * 46539 * @param dstReg destination register, must be FP0 46540 * @param srcBase source base register 46541 */ 46542 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46543 public final void emitFSUB_Reg_RegInd(FPR dstReg, GPR srcBase) { 46544 int miStart = mi; 46545 // Must store result to top of stack 46546 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46547 setMachineCodes(mi++, (byte) 0xD8); 46548 // The register'' 4 is really part of the opcode 46549 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(4)); 46550 if (lister != null) lister.RRN(miStart, "FSUB", dstReg, srcBase); 46551 } 46552 46553 /** 46554 * Perform - on dstReg. That is, 46555 * <PRE> 46556 * dstReg -= () [srcBase + srcIndex<<srcScale + srcDisp] 46557 * </PRE> 46558 * 46559 * @param dstReg destination register, must be FP0 46560 * @param srcBase source base register 46561 * @param srcIndex source index register 46562 * @param srcScale source scale 46563 * @param srcDisp source displacement 46564 */ 46565 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 46566 public final void emitFSUB_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 46567 int miStart = mi; 46568 // Must store result to top of stack 46569 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46570 setMachineCodes(mi++, (byte) 0xD8); 46571 // The register'' 4 is really part of the opcode 46572 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(4)); 46573 if (lister != null) lister.RRXD(miStart, "FSUB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 46574 } 46575 46576 /** 46577 * Perform - on FP0. That is, 46578 * <PRE> 46579 * dstReg -= () [srcIndex<<srcScale + srcDisp] 46580 * </PRE> 46581 * 46582 * @param dstReg destination register, must be FP0 46583 * @param srcIndex source index register 46584 * @param srcScale source scale 46585 * @param srcDisp source displacement 46586 */ 46587 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46588 public final void emitFSUB_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 46589 int miStart = mi; 46590 // Must store result to top of stack 46591 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46592 setMachineCodes(mi++, (byte) 0xD8); 46593 // The register'' 4 is really part of the opcode 46594 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(4)); 46595 if (lister != null) lister.RRFD(miStart, "FSUB", dstReg, srcIndex, srcScale, srcDisp); 46596 } 46597 46598 /** 46599 * Perform - on FP0. That is, 46600 * <PRE> 46601 * dstReg -= () [srcDisp] 46602 * </PRE> 46603 * 46604 * @param dstReg destination register, must be FP0 46605 * @param srcDisp source displacement 46606 */ 46607 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 46608 public final void emitFSUB_Reg_Abs(FPR dstReg, Address srcDisp) { 46609 int miStart = mi; 46610 // Must store result to top of stack 46611 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46612 setMachineCodes(mi++, (byte) 0xD8); 46613 // The register'' 4 is really part of the opcode 46614 emitAbsRegOperands(srcDisp, GPR.getForOpcode(4)); 46615 if (lister != null) lister.RRA(miStart, "FSUB", dstReg, srcDisp); 46616 } 46617 46618 /** 46619 * Perform - on FP0. That is, 46620 * <PRE> 46621 * dstReg -= (quad) [srcBase + srcDisp] 46622 * </PRE> 46623 * 46624 * @param dstReg destination register, must be FP0 46625 * @param srcBase source base register 46626 * @param srcDisp source displacement 46627 */ 46628 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46629 public final void emitFSUB_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) { 46630 int miStart = mi; 46631 // Must store result to top of stack 46632 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46633 setMachineCodes(mi++, (byte) 0xDC); 46634 // The register'' 4 is really part of the opcode 46635 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(4)); 46636 if (lister != null) lister.RRD(miStart, "FSUB", dstReg, srcBase, srcDisp); 46637 } 46638 46639 /** 46640 * Perform - on FP0. That is, 46641 * <PRE> 46642 * dstReg -= (quad) [srcBase] 46643 * </PRE> 46644 * 46645 * @param dstReg destination register, must be FP0 46646 * @param srcBase source base register 46647 */ 46648 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46649 public final void emitFSUB_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) { 46650 int miStart = mi; 46651 // Must store result to top of stack 46652 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46653 setMachineCodes(mi++, (byte) 0xDC); 46654 // The register'' 4 is really part of the opcode 46655 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(4)); 46656 if (lister != null) lister.RRN(miStart, "FSUB", dstReg, srcBase); 46657 } 46658 46659 /** 46660 * Perform - on dstReg. That is, 46661 * <PRE> 46662 * dstReg -= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 46663 * </PRE> 46664 * 46665 * @param dstReg destination register, must be FP0 46666 * @param srcBase source base register 46667 * @param srcIndex source index register 46668 * @param srcScale source scale 46669 * @param srcDisp source displacement 46670 */ 46671 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 46672 public final void emitFSUB_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 46673 int miStart = mi; 46674 // Must store result to top of stack 46675 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46676 setMachineCodes(mi++, (byte) 0xDC); 46677 // The register'' 4 is really part of the opcode 46678 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(4)); 46679 if (lister != null) lister.RRXD(miStart, "FSUB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 46680 } 46681 46682 /** 46683 * Perform - on FP0. That is, 46684 * <PRE> 46685 * dstReg -= (quad) [srcIndex<<srcScale + srcDisp] 46686 * </PRE> 46687 * 46688 * @param dstReg destination register, must be FP0 46689 * @param srcIndex source index register 46690 * @param srcScale source scale 46691 * @param srcDisp source displacement 46692 */ 46693 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46694 public final void emitFSUB_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 46695 int miStart = mi; 46696 // Must store result to top of stack 46697 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46698 setMachineCodes(mi++, (byte) 0xDC); 46699 // The register'' 4 is really part of the opcode 46700 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(4)); 46701 if (lister != null) lister.RRFD(miStart, "FSUB", dstReg, srcIndex, srcScale, srcDisp); 46702 } 46703 46704 /** 46705 * Perform - on FP0. That is, 46706 * <PRE> 46707 * dstReg -= (quad) [srcDisp] 46708 * </PRE> 46709 * 46710 * @param dstReg destination register, must be FP0 46711 * @param srcDisp source displacement 46712 */ 46713 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 46714 public final void emitFSUB_Reg_Abs_Quad(FPR dstReg, Address srcDisp) { 46715 int miStart = mi; 46716 // Must store result to top of stack 46717 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46718 setMachineCodes(mi++, (byte) 0xDC); 46719 // The register'' 4 is really part of the opcode 46720 emitAbsRegOperands(srcDisp, GPR.getForOpcode(4)); 46721 if (lister != null) lister.RRA(miStart, "FSUB", dstReg, srcDisp); 46722 } 46723 46724 /** 46725 * Perform - on FP0. That is, 46726 * <PRE> 46727 * dstReg -= () [srcBase + srcDisp] 46728 * </PRE> 46729 * 46730 * @param dstReg destination register, must be FP0 46731 * @param srcBase source base register 46732 * @param srcDisp source displacement 46733 */ 46734 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46735 public final void emitFISUB_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 46736 int miStart = mi; 46737 // Must store result to top of stack 46738 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46739 setMachineCodes(mi++, (byte) 0xDA); 46740 // The register'' 4 is really part of the opcode 46741 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(4)); 46742 if (lister != null) lister.RRD(miStart, "FISUB", dstReg, srcBase, srcDisp); 46743 } 46744 46745 /** 46746 * Perform - on FP0. That is, 46747 * <PRE> 46748 * dstReg -= () [srcBase] 46749 * </PRE> 46750 * 46751 * @param dstReg destination register, must be FP0 46752 * @param srcBase source base register 46753 */ 46754 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46755 public final void emitFISUB_Reg_RegInd(FPR dstReg, GPR srcBase) { 46756 int miStart = mi; 46757 // Must store result to top of stack 46758 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46759 setMachineCodes(mi++, (byte) 0xDA); 46760 // The register'' 4 is really part of the opcode 46761 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(4)); 46762 if (lister != null) lister.RRN(miStart, "FISUB", dstReg, srcBase); 46763 } 46764 46765 /** 46766 * Perform - on dstReg. That is, 46767 * <PRE> 46768 * dstReg -= () [srcBase + srcIndex<<srcScale + srcDisp] 46769 * </PRE> 46770 * 46771 * @param dstReg destination register, must be FP0 46772 * @param srcBase source base register 46773 * @param srcIndex source index register 46774 * @param srcScale source scale 46775 * @param srcDisp source displacement 46776 */ 46777 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 46778 public final void emitFISUB_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 46779 int miStart = mi; 46780 // Must store result to top of stack 46781 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46782 setMachineCodes(mi++, (byte) 0xDA); 46783 // The register'' 4 is really part of the opcode 46784 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(4)); 46785 if (lister != null) lister.RRXD(miStart, "FISUB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 46786 } 46787 46788 /** 46789 * Perform - on FP0. That is, 46790 * <PRE> 46791 * dstReg -= () [srcIndex<<srcScale + srcDisp] 46792 * </PRE> 46793 * 46794 * @param dstReg destination register, must be FP0 46795 * @param srcIndex source index register 46796 * @param srcScale source scale 46797 * @param srcDisp source displacement 46798 */ 46799 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46800 public final void emitFISUB_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 46801 int miStart = mi; 46802 // Must store result to top of stack 46803 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46804 setMachineCodes(mi++, (byte) 0xDA); 46805 // The register'' 4 is really part of the opcode 46806 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(4)); 46807 if (lister != null) lister.RRFD(miStart, "FISUB", dstReg, srcIndex, srcScale, srcDisp); 46808 } 46809 46810 /** 46811 * Perform - on FP0. That is, 46812 * <PRE> 46813 * dstReg -= () [srcDisp] 46814 * </PRE> 46815 * 46816 * @param dstReg destination register, must be FP0 46817 * @param srcDisp source displacement 46818 */ 46819 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 46820 public final void emitFISUB_Reg_Abs(FPR dstReg, Address srcDisp) { 46821 int miStart = mi; 46822 // Must store result to top of stack 46823 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46824 setMachineCodes(mi++, (byte) 0xDA); 46825 // The register'' 4 is really part of the opcode 46826 emitAbsRegOperands(srcDisp, GPR.getForOpcode(4)); 46827 if (lister != null) lister.RRA(miStart, "FISUB", dstReg, srcDisp); 46828 } 46829 46830 /** 46831 * Perform - on FP0. That is, 46832 * <PRE> 46833 * dstReg -= (word) [srcBase + srcDisp] 46834 * </PRE> 46835 * 46836 * @param dstReg destination register, must be FP0 46837 * @param srcBase source base register 46838 * @param srcDisp source displacement 46839 */ 46840 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46841 public final void emitFISUB_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) { 46842 int miStart = mi; 46843 // Must store result to top of stack 46844 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46845 setMachineCodes(mi++, (byte) 0xDE); 46846 // The register'' 4 is really part of the opcode 46847 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(4)); 46848 if (lister != null) lister.RRD(miStart, "FISUB", dstReg, srcBase, srcDisp); 46849 } 46850 46851 /** 46852 * Perform - on FP0. That is, 46853 * <PRE> 46854 * dstReg -= (word) [srcBase] 46855 * </PRE> 46856 * 46857 * @param dstReg destination register, must be FP0 46858 * @param srcBase source base register 46859 */ 46860 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46861 public final void emitFISUB_Reg_RegInd_Word(FPR dstReg, GPR srcBase) { 46862 int miStart = mi; 46863 // Must store result to top of stack 46864 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46865 setMachineCodes(mi++, (byte) 0xDE); 46866 // The register'' 4 is really part of the opcode 46867 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(4)); 46868 if (lister != null) lister.RRN(miStart, "FISUB", dstReg, srcBase); 46869 } 46870 46871 /** 46872 * Perform - on dstReg. That is, 46873 * <PRE> 46874 * dstReg -= (word) [srcBase + srcIndex<<srcScale + srcDisp] 46875 * </PRE> 46876 * 46877 * @param dstReg destination register, must be FP0 46878 * @param srcBase source base register 46879 * @param srcIndex source index register 46880 * @param srcScale source scale 46881 * @param srcDisp source displacement 46882 */ 46883 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 46884 public final void emitFISUB_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 46885 int miStart = mi; 46886 // Must store result to top of stack 46887 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46888 setMachineCodes(mi++, (byte) 0xDE); 46889 // The register'' 4 is really part of the opcode 46890 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(4)); 46891 if (lister != null) lister.RRXD(miStart, "FISUB", dstReg, srcBase, srcIndex, srcScale, srcDisp); 46892 } 46893 46894 /** 46895 * Perform - on FP0. That is, 46896 * <PRE> 46897 * dstReg -= (word) [srcIndex<<srcScale + srcDisp] 46898 * </PRE> 46899 * 46900 * @param dstReg destination register, must be FP0 46901 * @param srcIndex source index register 46902 * @param srcScale source scale 46903 * @param srcDisp source displacement 46904 */ 46905 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46906 public final void emitFISUB_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 46907 int miStart = mi; 46908 // Must store result to top of stack 46909 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46910 setMachineCodes(mi++, (byte) 0xDE); 46911 // The register'' 4 is really part of the opcode 46912 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(4)); 46913 if (lister != null) lister.RRFD(miStart, "FISUB", dstReg, srcIndex, srcScale, srcDisp); 46914 } 46915 46916 /** 46917 * Perform - on FP0. That is, 46918 * <PRE> 46919 * dstReg -= (word) [srcDisp] 46920 * </PRE> 46921 * 46922 * @param dstReg destination register, must be FP0 46923 * @param srcDisp source displacement 46924 */ 46925 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 46926 public final void emitFISUB_Reg_Abs_Word(FPR dstReg, Address srcDisp) { 46927 int miStart = mi; 46928 // Must store result to top of stack 46929 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46930 setMachineCodes(mi++, (byte) 0xDE); 46931 // The register'' 4 is really part of the opcode 46932 emitAbsRegOperands(srcDisp, GPR.getForOpcode(4)); 46933 if (lister != null) lister.RRA(miStart, "FISUB", dstReg, srcDisp); 46934 } 46935 46936 /** 46937 * Perform - either to or from FP0. That is, 46938 * <PRE> 46939 * dstReg -= srcReg 46940 * </PRE> 46941 * 46942 * @param dstReg destination register, this or srcReg must be FP0 46943 * @param srcReg source register, this or dstReg must be FP0 46944 */ 46945 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46946 public final void emitFSUB_Reg_Reg(FPR dstReg, FPR srcReg) { 46947 int miStart = mi; 46948 if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0); 46949 if (dstReg == FP0) { 46950 setMachineCodes(mi++, (byte) 0xD8); 46951 setMachineCodes(mi++, (byte) (0xE0 | srcReg.value())); 46952 } else if (srcReg == FP0) { 46953 setMachineCodes(mi++, (byte) 0xDC); 46954 setMachineCodes(mi++, (byte) (0xE8 | dstReg.value())); 46955 } 46956 if (lister != null) lister.RR(miStart, "FSUB", dstReg, srcReg); 46957 } 46958 46959 /** 46960 * Perform - then pop stack. That is, 46961 * <PRE> 46962 * srcReg -= ST(0); pop stack 46963 * </PRE> 46964 * 46965 * @param dstReg destination register 46966 * @param srcReg source register 46967 */ 46968 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46969 public final void emitFSUBP_Reg_Reg(FPR dstReg, FPR srcReg) { 46970 int miStart = mi; 46971 if (VM.VerifyAssertions) VM._assert(srcReg == FP0); 46972 setMachineCodes(mi++, (byte) 0xDE); 46973 setMachineCodes(mi++, (byte) (0xE8 | dstReg.value())); 46974 if (lister != null) lister.R(miStart, "FSUBP", dstReg); 46975 } 46976 46977 /** 46978 * Perform - on FP0. That is, 46979 * <PRE> 46980 * dstReg -= () [srcBase + srcDisp] 46981 * </PRE> 46982 * 46983 * @param dstReg destination register, must be FP0 46984 * @param srcBase source base register 46985 * @param srcDisp source displacement 46986 */ 46987 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 46988 public final void emitFSUBR_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 46989 int miStart = mi; 46990 // Must store result to top of stack 46991 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 46992 setMachineCodes(mi++, (byte) 0xD8); 46993 // The register'' 5 is really part of the opcode 46994 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(5)); 46995 if (lister != null) lister.RRD(miStart, "FSUBR", dstReg, srcBase, srcDisp); 46996 } 46997 46998 /** 46999 * Perform - on FP0. That is, 47000 * <PRE> 47001 * dstReg -= () [srcBase] 47002 * </PRE> 47003 * 47004 * @param dstReg destination register, must be FP0 47005 * @param srcBase source base register 47006 */ 47007 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47008 public final void emitFSUBR_Reg_RegInd(FPR dstReg, GPR srcBase) { 47009 int miStart = mi; 47010 // Must store result to top of stack 47011 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47012 setMachineCodes(mi++, (byte) 0xD8); 47013 // The register'' 5 is really part of the opcode 47014 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(5)); 47015 if (lister != null) lister.RRN(miStart, "FSUBR", dstReg, srcBase); 47016 } 47017 47018 /** 47019 * Perform - on dstReg. That is, 47020 * <PRE> 47021 * dstReg -= () [srcBase + srcIndex<<srcScale + srcDisp] 47022 * </PRE> 47023 * 47024 * @param dstReg destination register, must be FP0 47025 * @param srcBase source base register 47026 * @param srcIndex source index register 47027 * @param srcScale source scale 47028 * @param srcDisp source displacement 47029 */ 47030 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 47031 public final void emitFSUBR_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 47032 int miStart = mi; 47033 // Must store result to top of stack 47034 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47035 setMachineCodes(mi++, (byte) 0xD8); 47036 // The register'' 5 is really part of the opcode 47037 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(5)); 47038 if (lister != null) lister.RRXD(miStart, "FSUBR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 47039 } 47040 47041 /** 47042 * Perform - on FP0. That is, 47043 * <PRE> 47044 * dstReg -= () [srcIndex<<srcScale + srcDisp] 47045 * </PRE> 47046 * 47047 * @param dstReg destination register, must be FP0 47048 * @param srcIndex source index register 47049 * @param srcScale source scale 47050 * @param srcDisp source displacement 47051 */ 47052 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47053 public final void emitFSUBR_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 47054 int miStart = mi; 47055 // Must store result to top of stack 47056 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47057 setMachineCodes(mi++, (byte) 0xD8); 47058 // The register'' 5 is really part of the opcode 47059 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(5)); 47060 if (lister != null) lister.RRFD(miStart, "FSUBR", dstReg, srcIndex, srcScale, srcDisp); 47061 } 47062 47063 /** 47064 * Perform - on FP0. That is, 47065 * <PRE> 47066 * dstReg -= () [srcDisp] 47067 * </PRE> 47068 * 47069 * @param dstReg destination register, must be FP0 47070 * @param srcDisp source displacement 47071 */ 47072 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47073 public final void emitFSUBR_Reg_Abs(FPR dstReg, Address srcDisp) { 47074 int miStart = mi; 47075 // Must store result to top of stack 47076 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47077 setMachineCodes(mi++, (byte) 0xD8); 47078 // The register'' 5 is really part of the opcode 47079 emitAbsRegOperands(srcDisp, GPR.getForOpcode(5)); 47080 if (lister != null) lister.RRA(miStart, "FSUBR", dstReg, srcDisp); 47081 } 47082 47083 /** 47084 * Perform - on FP0. That is, 47085 * <PRE> 47086 * dstReg -= (quad) [srcBase + srcDisp] 47087 * </PRE> 47088 * 47089 * @param dstReg destination register, must be FP0 47090 * @param srcBase source base register 47091 * @param srcDisp source displacement 47092 */ 47093 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47094 public final void emitFSUBR_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) { 47095 int miStart = mi; 47096 // Must store result to top of stack 47097 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47098 setMachineCodes(mi++, (byte) 0xDC); 47099 // The register'' 5 is really part of the opcode 47100 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(5)); 47101 if (lister != null) lister.RRD(miStart, "FSUBR", dstReg, srcBase, srcDisp); 47102 } 47103 47104 /** 47105 * Perform - on FP0. That is, 47106 * <PRE> 47107 * dstReg -= (quad) [srcBase] 47108 * </PRE> 47109 * 47110 * @param dstReg destination register, must be FP0 47111 * @param srcBase source base register 47112 */ 47113 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47114 public final void emitFSUBR_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) { 47115 int miStart = mi; 47116 // Must store result to top of stack 47117 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47118 setMachineCodes(mi++, (byte) 0xDC); 47119 // The register'' 5 is really part of the opcode 47120 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(5)); 47121 if (lister != null) lister.RRN(miStart, "FSUBR", dstReg, srcBase); 47122 } 47123 47124 /** 47125 * Perform - on dstReg. That is, 47126 * <PRE> 47127 * dstReg -= (quad) [srcBase + srcIndex<<srcScale + srcDisp] 47128 * </PRE> 47129 * 47130 * @param dstReg destination register, must be FP0 47131 * @param srcBase source base register 47132 * @param srcIndex source index register 47133 * @param srcScale source scale 47134 * @param srcDisp source displacement 47135 */ 47136 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 47137 public final void emitFSUBR_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 47138 int miStart = mi; 47139 // Must store result to top of stack 47140 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47141 setMachineCodes(mi++, (byte) 0xDC); 47142 // The register'' 5 is really part of the opcode 47143 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(5)); 47144 if (lister != null) lister.RRXD(miStart, "FSUBR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 47145 } 47146 47147 /** 47148 * Perform - on FP0. That is, 47149 * <PRE> 47150 * dstReg -= (quad) [srcIndex<<srcScale + srcDisp] 47151 * </PRE> 47152 * 47153 * @param dstReg destination register, must be FP0 47154 * @param srcIndex source index register 47155 * @param srcScale source scale 47156 * @param srcDisp source displacement 47157 */ 47158 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47159 public final void emitFSUBR_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 47160 int miStart = mi; 47161 // Must store result to top of stack 47162 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47163 setMachineCodes(mi++, (byte) 0xDC); 47164 // The register'' 5 is really part of the opcode 47165 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(5)); 47166 if (lister != null) lister.RRFD(miStart, "FSUBR", dstReg, srcIndex, srcScale, srcDisp); 47167 } 47168 47169 /** 47170 * Perform - on FP0. That is, 47171 * <PRE> 47172 * dstReg -= (quad) [srcDisp] 47173 * </PRE> 47174 * 47175 * @param dstReg destination register, must be FP0 47176 * @param srcDisp source displacement 47177 */ 47178 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47179 public final void emitFSUBR_Reg_Abs_Quad(FPR dstReg, Address srcDisp) { 47180 int miStart = mi; 47181 // Must store result to top of stack 47182 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47183 setMachineCodes(mi++, (byte) 0xDC); 47184 // The register'' 5 is really part of the opcode 47185 emitAbsRegOperands(srcDisp, GPR.getForOpcode(5)); 47186 if (lister != null) lister.RRA(miStart, "FSUBR", dstReg, srcDisp); 47187 } 47188 47189 /** 47190 * Perform - on FP0. That is, 47191 * <PRE> 47192 * dstReg -= () [srcBase + srcDisp] 47193 * </PRE> 47194 * 47195 * @param dstReg destination register, must be FP0 47196 * @param srcBase source base register 47197 * @param srcDisp source displacement 47198 */ 47199 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47200 public final void emitFISUBR_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) { 47201 int miStart = mi; 47202 // Must store result to top of stack 47203 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47204 setMachineCodes(mi++, (byte) 0xDA); 47205 // The register'' 5 is really part of the opcode 47206 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(5)); 47207 if (lister != null) lister.RRD(miStart, "FISUBR", dstReg, srcBase, srcDisp); 47208 } 47209 47210 /** 47211 * Perform - on FP0. That is, 47212 * <PRE> 47213 * dstReg -= () [srcBase] 47214 * </PRE> 47215 * 47216 * @param dstReg destination register, must be FP0 47217 * @param srcBase source base register 47218 */ 47219 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47220 public final void emitFISUBR_Reg_RegInd(FPR dstReg, GPR srcBase) { 47221 int miStart = mi; 47222 // Must store result to top of stack 47223 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47224 setMachineCodes(mi++, (byte) 0xDA); 47225 // The register'' 5 is really part of the opcode 47226 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(5)); 47227 if (lister != null) lister.RRN(miStart, "FISUBR", dstReg, srcBase); 47228 } 47229 47230 /** 47231 * Perform - on dstReg. That is, 47232 * <PRE> 47233 * dstReg -= () [srcBase + srcIndex<<srcScale + srcDisp] 47234 * </PRE> 47235 * 47236 * @param dstReg destination register, must be FP0 47237 * @param srcBase source base register 47238 * @param srcIndex source index register 47239 * @param srcScale source scale 47240 * @param srcDisp source displacement 47241 */ 47242 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 47243 public final void emitFISUBR_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 47244 int miStart = mi; 47245 // Must store result to top of stack 47246 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47247 setMachineCodes(mi++, (byte) 0xDA); 47248 // The register'' 5 is really part of the opcode 47249 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(5)); 47250 if (lister != null) lister.RRXD(miStart, "FISUBR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 47251 } 47252 47253 /** 47254 * Perform - on FP0. That is, 47255 * <PRE> 47256 * dstReg -= () [srcIndex<<srcScale + srcDisp] 47257 * </PRE> 47258 * 47259 * @param dstReg destination register, must be FP0 47260 * @param srcIndex source index register 47261 * @param srcScale source scale 47262 * @param srcDisp source displacement 47263 */ 47264 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47265 public final void emitFISUBR_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 47266 int miStart = mi; 47267 // Must store result to top of stack 47268 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47269 setMachineCodes(mi++, (byte) 0xDA); 47270 // The register'' 5 is really part of the opcode 47271 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(5)); 47272 if (lister != null) lister.RRFD(miStart, "FISUBR", dstReg, srcIndex, srcScale, srcDisp); 47273 } 47274 47275 /** 47276 * Perform - on FP0. That is, 47277 * <PRE> 47278 * dstReg -= () [srcDisp] 47279 * </PRE> 47280 * 47281 * @param dstReg destination register, must be FP0 47282 * @param srcDisp source displacement 47283 */ 47284 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47285 public final void emitFISUBR_Reg_Abs(FPR dstReg, Address srcDisp) { 47286 int miStart = mi; 47287 // Must store result to top of stack 47288 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47289 setMachineCodes(mi++, (byte) 0xDA); 47290 // The register'' 5 is really part of the opcode 47291 emitAbsRegOperands(srcDisp, GPR.getForOpcode(5)); 47292 if (lister != null) lister.RRA(miStart, "FISUBR", dstReg, srcDisp); 47293 } 47294 47295 /** 47296 * Perform - on FP0. That is, 47297 * <PRE> 47298 * dstReg -= (word) [srcBase + srcDisp] 47299 * </PRE> 47300 * 47301 * @param dstReg destination register, must be FP0 47302 * @param srcBase source base register 47303 * @param srcDisp source displacement 47304 */ 47305 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47306 public final void emitFISUBR_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) { 47307 int miStart = mi; 47308 // Must store result to top of stack 47309 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47310 setMachineCodes(mi++, (byte) 0xDE); 47311 // The register'' 5 is really part of the opcode 47312 emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(5)); 47313 if (lister != null) lister.RRD(miStart, "FISUBR", dstReg, srcBase, srcDisp); 47314 } 47315 47316 /** 47317 * Perform - on FP0. That is, 47318 * <PRE> 47319 * dstReg -= (word) [srcBase] 47320 * </PRE> 47321 * 47322 * @param dstReg destination register, must be FP0 47323 * @param srcBase source base register 47324 */ 47325 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47326 public final void emitFISUBR_Reg_RegInd_Word(FPR dstReg, GPR srcBase) { 47327 int miStart = mi; 47328 // Must store result to top of stack 47329 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47330 setMachineCodes(mi++, (byte) 0xDE); 47331 // The register'' 5 is really part of the opcode 47332 emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(5)); 47333 if (lister != null) lister.RRN(miStart, "FISUBR", dstReg, srcBase); 47334 } 47335 47336 /** 47337 * Perform - on dstReg. That is, 47338 * <PRE> 47339 * dstReg -= (word) [srcBase + srcIndex<<srcScale + srcDisp] 47340 * </PRE> 47341 * 47342 * @param dstReg destination register, must be FP0 47343 * @param srcBase source base register 47344 * @param srcIndex source index register 47345 * @param srcScale source scale 47346 * @param srcDisp source displacement 47347 */ 47348 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3}) 47349 public final void emitFISUBR_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) { 47350 int miStart = mi; 47351 // Must store result to top of stack 47352 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47353 setMachineCodes(mi++, (byte) 0xDE); 47354 // The register'' 5 is really part of the opcode 47355 emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(5)); 47356 if (lister != null) lister.RRXD(miStart, "FISUBR", dstReg, srcBase, srcIndex, srcScale, srcDisp); 47357 } 47358 47359 /** 47360 * Perform - on FP0. That is, 47361 * <PRE> 47362 * dstReg -= (word) [srcIndex<<srcScale + srcDisp] 47363 * </PRE> 47364 * 47365 * @param dstReg destination register, must be FP0 47366 * @param srcIndex source index register 47367 * @param srcScale source scale 47368 * @param srcDisp source displacement 47369 */ 47370 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47371 public final void emitFISUBR_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) { 47372 int miStart = mi; 47373 // Must store result to top of stack 47374 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47375 setMachineCodes(mi++, (byte) 0xDE); 47376 // The register'' 5 is really part of the opcode 47377 emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(5)); 47378 if (lister != null) lister.RRFD(miStart, "FISUBR", dstReg, srcIndex, srcScale, srcDisp); 47379 } 47380 47381 /** 47382 * Perform - on FP0. That is, 47383 * <PRE> 47384 * dstReg -= (word) [srcDisp] 47385 * </PRE> 47386 * 47387 * @param dstReg destination register, must be FP0 47388 * @param srcDisp source displacement 47389 */ 47390 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47391 public final void emitFISUBR_Reg_Abs_Word(FPR dstReg, Address srcDisp) { 47392 int miStart = mi; 47393 // Must store result to top of stack 47394 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 47395 setMachineCodes(mi++, (byte) 0xDE); 47396 // The register'' 5 is really part of the opcode 47397 emitAbsRegOperands(srcDisp, GPR.getForOpcode(5)); 47398 if (lister != null) lister.RRA(miStart, "FISUBR", dstReg, srcDisp); 47399 } 47400 47401 /** 47402 * Perform - either to or from FP0. That is, 47403 * <PRE> 47404 * dstReg -= srcReg 47405 * </PRE> 47406 * 47407 * @param dstReg destination register, this or srcReg must be FP0 47408 * @param srcReg source register, this or dstReg must be FP0 47409 */ 47410 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47411 public final void emitFSUBR_Reg_Reg(FPR dstReg, FPR srcReg) { 47412 int miStart = mi; 47413 if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0); 47414 if (dstReg == FP0) { 47415 setMachineCodes(mi++, (byte) 0xD8); 47416 setMachineCodes(mi++, (byte) (0xE8 | srcReg.value())); 47417 } else if (srcReg == FP0) { 47418 setMachineCodes(mi++, (byte) 0xDC); 47419 setMachineCodes(mi++, (byte) (0xE0 | dstReg.value())); 47420 } 47421 if (lister != null) lister.RR(miStart, "FSUBR", dstReg, srcReg); 47422 } 47423 47424 /** 47425 * Perform - then pop stack. That is, 47426 * <PRE> 47427 * srcReg -= ST(0); pop stack 47428 * </PRE> 47429 * 47430 * @param dstReg destination register 47431 * @param srcReg source register 47432 */ 47433 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47434 public final void emitFSUBRP_Reg_Reg(FPR dstReg, FPR srcReg) { 47435 int miStart = mi; 47436 if (VM.VerifyAssertions) VM._assert(srcReg == FP0); 47437 setMachineCodes(mi++, (byte) 0xDE); 47438 setMachineCodes(mi++, (byte) (0xE0 | dstReg.value())); 47439 if (lister != null) lister.R(miStart, "FSUBRP", dstReg); 47440 } 47441 47442 /** 47443 * top of stack loaded from (double word) [reg + disp] 47444 * 47445 * @param reg register 47446 * @param disp displacement 47447 * @param dummy must always be {@code FP0} 47448 */ 47449 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47450 public final void emitFLD_Reg_RegDisp(FPR dummy, GPR reg, Offset disp) { 47451 int miStart = mi; 47452 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47453 setMachineCodes(mi++, (byte) 0xD9); 47454 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(0)); 47455 if (lister != null) lister.RD(miStart, "FLD", reg, disp); 47456 } 47457 47458 /** 47459 * top of stack loaded from (double word) [reg] 47460 * 47461 * @param reg register 47462 * @param dummy must always be {@code FP0} 47463 */ 47464 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47465 public final void emitFLD_Reg_RegInd(FPR dummy, GPR reg) { 47466 int miStart = mi; 47467 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47468 setMachineCodes(mi++, (byte) 0xD9); 47469 emitRegIndirectRegOperands(reg, GPR.getForOpcode(0)); 47470 if (lister != null) lister.RN(miStart, "FLD", reg); 47471 } 47472 47473 /** 47474 * top of stack loaded from (double word) [baseReg + idxReg<<scale + disp] 47475 * 47476 * @param baseReg base register 47477 * @param idxReg index register 47478 * @param scale scale for index register 47479 * @param disp displacemnet 47480 * @param dummy must always be {@code FP0} 47481 */ 47482 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47483 public final void emitFLD_Reg_RegIdx(FPR dummy, GPR baseReg, GPR idxReg, short scale, Offset disp) { 47484 int miStart = mi; 47485 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47486 setMachineCodes(mi++, (byte) 0xD9); 47487 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(0)); 47488 if (lister != null) lister.RXD(miStart, "FLD", baseReg, idxReg, scale, disp); 47489 } 47490 47491 /** 47492 * top of stack loaded from (double word) [idxReg<<scale + disp] 47493 * 47494 * @param idxReg index register 47495 * @param scale scale for index register 47496 * @param disp displacemnet 47497 * @param dummy must always be {@code FP0} 47498 */ 47499 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47500 public final void emitFLD_Reg_RegOff(FPR dummy, GPR idxReg, short scale, Offset disp) { 47501 int miStart = mi; 47502 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47503 setMachineCodes(mi++, (byte) 0xD9); 47504 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(0)); 47505 if (lister != null) lister.RFD(miStart, "FLD", idxReg, scale, disp); 47506 } 47507 47508 /** 47509 * top of stack loaded from (double word) [disp] 47510 * 47511 * @param disp displacemnet 47512 * @param dummy must always be {@code FP0} 47513 */ 47514 public final void emitFLD_Reg_Abs(FPR dummy, Address disp) { 47515 int miStart = mi; 47516 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47517 setMachineCodes(mi++, (byte) 0xD9); 47518 emitAbsRegOperands(disp, GPR.getForOpcode(0)); 47519 if (lister != null) lister.RA(miStart, "FLD", disp); 47520 } 47521 47522 /** 47523 * top of stack loaded from (quad) [reg + disp] 47524 * 47525 * @param reg register 47526 * @param disp displacement 47527 * @param dummy must always be {@code FP0} 47528 */ 47529 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47530 public final void emitFLD_Reg_RegDisp_Quad(FPR dummy, GPR reg, Offset disp) { 47531 int miStart = mi; 47532 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47533 setMachineCodes(mi++, (byte) 0xDD); 47534 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(0)); 47535 if (lister != null) lister.RD(miStart, "FLD", reg, disp); 47536 } 47537 47538 /** 47539 * top of stack loaded from (quad) [reg] 47540 * 47541 * @param reg register 47542 * @param dummy must always be {@code FP0} 47543 */ 47544 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47545 public final void emitFLD_Reg_RegInd_Quad(FPR dummy, GPR reg) { 47546 int miStart = mi; 47547 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47548 setMachineCodes(mi++, (byte) 0xDD); 47549 emitRegIndirectRegOperands(reg, GPR.getForOpcode(0)); 47550 if (lister != null) lister.RN(miStart, "FLD", reg); 47551 } 47552 47553 /** 47554 * top of stack loaded from (quad) [baseReg + idxReg<<scale + disp] 47555 * 47556 * @param baseReg base register 47557 * @param idxReg index register 47558 * @param scale scale for index register 47559 * @param disp displacemnet 47560 * @param dummy must always be {@code FP0} 47561 */ 47562 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47563 public final void emitFLD_Reg_RegIdx_Quad(FPR dummy, GPR baseReg, GPR idxReg, short scale, Offset disp) { 47564 int miStart = mi; 47565 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47566 setMachineCodes(mi++, (byte) 0xDD); 47567 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(0)); 47568 if (lister != null) lister.RXD(miStart, "FLD", baseReg, idxReg, scale, disp); 47569 } 47570 47571 /** 47572 * top of stack loaded from (quad) [idxReg<<scale + disp] 47573 * 47574 * @param idxReg index register 47575 * @param scale scale for index register 47576 * @param disp displacemnet 47577 * @param dummy must always be {@code FP0} 47578 */ 47579 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47580 public final void emitFLD_Reg_RegOff_Quad(FPR dummy, GPR idxReg, short scale, Offset disp) { 47581 int miStart = mi; 47582 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47583 setMachineCodes(mi++, (byte) 0xDD); 47584 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(0)); 47585 if (lister != null) lister.RFD(miStart, "FLD", idxReg, scale, disp); 47586 } 47587 47588 /** 47589 * top of stack loaded from (quad) [disp] 47590 * 47591 * @param disp displacemnet 47592 * @param dummy must always be {@code FP0} 47593 */ 47594 public final void emitFLD_Reg_Abs_Quad(FPR dummy, Address disp) { 47595 int miStart = mi; 47596 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47597 setMachineCodes(mi++, (byte) 0xDD); 47598 emitAbsRegOperands(disp, GPR.getForOpcode(0)); 47599 if (lister != null) lister.RA(miStart, "FLD", disp); 47600 } 47601 47602 /** 47603 * top of stack loaded from (word) [reg + disp] 47604 * 47605 * @param reg register 47606 * @param disp displacement 47607 * @param dummy must always be {@code FP0} 47608 */ 47609 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47610 public final void emitFILD_Reg_RegDisp_Word(FPR dummy, GPR reg, Offset disp) { 47611 int miStart = mi; 47612 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47613 setMachineCodes(mi++, (byte) 0xDF); 47614 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(0)); 47615 if (lister != null) lister.RD(miStart, "FILD", reg, disp); 47616 } 47617 47618 /** 47619 * top of stack loaded from (word) [reg] 47620 * 47621 * @param reg register 47622 * @param dummy must always be {@code FP0} 47623 */ 47624 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47625 public final void emitFILD_Reg_RegInd_Word(FPR dummy, GPR reg) { 47626 int miStart = mi; 47627 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47628 setMachineCodes(mi++, (byte) 0xDF); 47629 emitRegIndirectRegOperands(reg, GPR.getForOpcode(0)); 47630 if (lister != null) lister.RN(miStart, "FILD", reg); 47631 } 47632 47633 /** 47634 * top of stack loaded from (word) [baseReg + idxReg<<scale + disp] 47635 * 47636 * @param baseReg base register 47637 * @param idxReg index register 47638 * @param scale scale for index register 47639 * @param disp displacemnet 47640 * @param dummy must always be {@code FP0} 47641 */ 47642 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47643 public final void emitFILD_Reg_RegIdx_Word(FPR dummy, GPR baseReg, GPR idxReg, short scale, Offset disp) { 47644 int miStart = mi; 47645 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47646 setMachineCodes(mi++, (byte) 0xDF); 47647 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(0)); 47648 if (lister != null) lister.RXD(miStart, "FILD", baseReg, idxReg, scale, disp); 47649 } 47650 47651 /** 47652 * top of stack loaded from (word) [idxReg<<scale + disp] 47653 * 47654 * @param idxReg index register 47655 * @param scale scale for index register 47656 * @param disp displacemnet 47657 * @param dummy must always be {@code FP0} 47658 */ 47659 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47660 public final void emitFILD_Reg_RegOff_Word(FPR dummy, GPR idxReg, short scale, Offset disp) { 47661 int miStart = mi; 47662 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47663 setMachineCodes(mi++, (byte) 0xDF); 47664 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(0)); 47665 if (lister != null) lister.RFD(miStart, "FILD", idxReg, scale, disp); 47666 } 47667 47668 /** 47669 * top of stack loaded from (word) [disp] 47670 * 47671 * @param disp displacemnet 47672 * @param dummy must always be {@code FP0} 47673 */ 47674 public final void emitFILD_Reg_Abs_Word(FPR dummy, Address disp) { 47675 int miStart = mi; 47676 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47677 setMachineCodes(mi++, (byte) 0xDF); 47678 emitAbsRegOperands(disp, GPR.getForOpcode(0)); 47679 if (lister != null) lister.RA(miStart, "FILD", disp); 47680 } 47681 47682 /** 47683 * top of stack loaded from (double word) [reg + disp] 47684 * 47685 * @param reg register 47686 * @param disp displacement 47687 * @param dummy must always be {@code FP0} 47688 */ 47689 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47690 public final void emitFILD_Reg_RegDisp(FPR dummy, GPR reg, Offset disp) { 47691 int miStart = mi; 47692 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47693 setMachineCodes(mi++, (byte) 0xDB); 47694 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(0)); 47695 if (lister != null) lister.RD(miStart, "FILD", reg, disp); 47696 } 47697 47698 /** 47699 * top of stack loaded from (double word) [reg] 47700 * 47701 * @param reg register 47702 * @param dummy must always be {@code FP0} 47703 */ 47704 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47705 public final void emitFILD_Reg_RegInd(FPR dummy, GPR reg) { 47706 int miStart = mi; 47707 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47708 setMachineCodes(mi++, (byte) 0xDB); 47709 emitRegIndirectRegOperands(reg, GPR.getForOpcode(0)); 47710 if (lister != null) lister.RN(miStart, "FILD", reg); 47711 } 47712 47713 /** 47714 * top of stack loaded from (double word) [baseReg + idxReg<<scale + disp] 47715 * 47716 * @param baseReg base register 47717 * @param idxReg index register 47718 * @param scale scale for index register 47719 * @param disp displacemnet 47720 * @param dummy must always be {@code FP0} 47721 */ 47722 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47723 public final void emitFILD_Reg_RegIdx(FPR dummy, GPR baseReg, GPR idxReg, short scale, Offset disp) { 47724 int miStart = mi; 47725 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47726 setMachineCodes(mi++, (byte) 0xDB); 47727 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(0)); 47728 if (lister != null) lister.RXD(miStart, "FILD", baseReg, idxReg, scale, disp); 47729 } 47730 47731 /** 47732 * top of stack loaded from (double word) [idxReg<<scale + disp] 47733 * 47734 * @param idxReg index register 47735 * @param scale scale for index register 47736 * @param disp displacemnet 47737 * @param dummy must always be {@code FP0} 47738 */ 47739 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47740 public final void emitFILD_Reg_RegOff(FPR dummy, GPR idxReg, short scale, Offset disp) { 47741 int miStart = mi; 47742 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47743 setMachineCodes(mi++, (byte) 0xDB); 47744 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(0)); 47745 if (lister != null) lister.RFD(miStart, "FILD", idxReg, scale, disp); 47746 } 47747 47748 /** 47749 * top of stack loaded from (double word) [disp] 47750 * 47751 * @param disp displacemnet 47752 * @param dummy must always be {@code FP0} 47753 */ 47754 public final void emitFILD_Reg_Abs(FPR dummy, Address disp) { 47755 int miStart = mi; 47756 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47757 setMachineCodes(mi++, (byte) 0xDB); 47758 emitAbsRegOperands(disp, GPR.getForOpcode(0)); 47759 if (lister != null) lister.RA(miStart, "FILD", disp); 47760 } 47761 47762 /** 47763 * top of stack loaded from (quad) [reg + disp] 47764 * 47765 * @param reg register 47766 * @param disp displacement 47767 * @param dummy must always be {@code FP0} 47768 */ 47769 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47770 public final void emitFILD_Reg_RegDisp_Quad(FPR dummy, GPR reg, Offset disp) { 47771 int miStart = mi; 47772 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47773 setMachineCodes(mi++, (byte) 0xDF); 47774 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(5)); 47775 if (lister != null) lister.RD(miStart, "FILD", reg, disp); 47776 } 47777 47778 /** 47779 * top of stack loaded from (quad) [reg] 47780 * 47781 * @param reg register 47782 * @param dummy must always be {@code FP0} 47783 */ 47784 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47785 public final void emitFILD_Reg_RegInd_Quad(FPR dummy, GPR reg) { 47786 int miStart = mi; 47787 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47788 setMachineCodes(mi++, (byte) 0xDF); 47789 emitRegIndirectRegOperands(reg, GPR.getForOpcode(5)); 47790 if (lister != null) lister.RN(miStart, "FILD", reg); 47791 } 47792 47793 /** 47794 * top of stack loaded from (quad) [baseReg + idxReg<<scale + disp] 47795 * 47796 * @param baseReg base register 47797 * @param idxReg index register 47798 * @param scale scale for index register 47799 * @param disp displacemnet 47800 * @param dummy must always be {@code FP0} 47801 */ 47802 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47803 public final void emitFILD_Reg_RegIdx_Quad(FPR dummy, GPR baseReg, GPR idxReg, short scale, Offset disp) { 47804 int miStart = mi; 47805 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47806 setMachineCodes(mi++, (byte) 0xDF); 47807 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(5)); 47808 if (lister != null) lister.RXD(miStart, "FILD", baseReg, idxReg, scale, disp); 47809 } 47810 47811 /** 47812 * top of stack loaded from (quad) [idxReg<<scale + disp] 47813 * 47814 * @param idxReg index register 47815 * @param scale scale for index register 47816 * @param disp displacemnet 47817 * @param dummy must always be {@code FP0} 47818 */ 47819 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47820 public final void emitFILD_Reg_RegOff_Quad(FPR dummy, GPR idxReg, short scale, Offset disp) { 47821 int miStart = mi; 47822 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47823 setMachineCodes(mi++, (byte) 0xDF); 47824 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(5)); 47825 if (lister != null) lister.RFD(miStart, "FILD", idxReg, scale, disp); 47826 } 47827 47828 /** 47829 * top of stack loaded from (quad) [disp] 47830 * 47831 * @param disp displacemnet 47832 * @param dummy must always be {@code FP0} 47833 */ 47834 public final void emitFILD_Reg_Abs_Quad(FPR dummy, Address disp) { 47835 int miStart = mi; 47836 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47837 setMachineCodes(mi++, (byte) 0xDF); 47838 emitAbsRegOperands(disp, GPR.getForOpcode(5)); 47839 if (lister != null) lister.RA(miStart, "FILD", disp); 47840 } 47841 47842 /** 47843 * top of stack stored to (word) [reg + disp] 47844 * 47845 * @param reg register 47846 * @param disp displacement 47847 * @param dummy must always be {@code FP0} 47848 */ 47849 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47850 public final void emitFIST_RegDisp_Reg_Word(GPR reg, Offset disp, FPR dummy) { 47851 int miStart = mi; 47852 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47853 setMachineCodes(mi++, (byte) 0xDF); 47854 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(2)); 47855 if (lister != null) lister.RD(miStart, "FIST", reg, disp); 47856 } 47857 47858 /** 47859 * top of stack stored to (word) [reg] 47860 * 47861 * @param reg register 47862 * @param dummy must always be {@code FP0} 47863 */ 47864 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47865 public final void emitFIST_RegInd_Reg_Word(GPR reg, FPR dummy) { 47866 int miStart = mi; 47867 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47868 setMachineCodes(mi++, (byte) 0xDF); 47869 emitRegIndirectRegOperands(reg, GPR.getForOpcode(2)); 47870 if (lister != null) lister.RN(miStart, "FIST", reg); 47871 } 47872 47873 /** 47874 * top of stack stored to (word) [baseReg + idxReg<<scale + disp] 47875 * 47876 * @param baseReg base register 47877 * @param idxReg index register 47878 * @param scale scale for index register 47879 * @param disp displacemnet 47880 * @param dummy must always be {@code FP0} 47881 */ 47882 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47883 public final void emitFIST_RegIdx_Reg_Word(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) { 47884 int miStart = mi; 47885 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47886 setMachineCodes(mi++, (byte) 0xDF); 47887 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(2)); 47888 if (lister != null) lister.RXD(miStart, "FIST", baseReg, idxReg, scale, disp); 47889 } 47890 47891 /** 47892 * top of stack stored to (word) [idxReg<<scale + disp] 47893 * 47894 * @param idxReg index register 47895 * @param scale scale for index register 47896 * @param disp displacemnet 47897 * @param dummy must always be {@code FP0} 47898 */ 47899 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47900 public final void emitFIST_RegOff_Reg_Word(GPR idxReg, short scale, Offset disp, FPR dummy) { 47901 int miStart = mi; 47902 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47903 setMachineCodes(mi++, (byte) 0xDF); 47904 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(2)); 47905 if (lister != null) lister.RFD(miStart, "FIST", idxReg, scale, disp); 47906 } 47907 47908 /** 47909 * top of stack stored to (word) [disp] 47910 * 47911 * @param disp displacemnet 47912 * @param dummy must always be {@code FP0} 47913 */ 47914 public final void emitFIST_Abs_Reg_Word(Address disp, FPR dummy) { 47915 int miStart = mi; 47916 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47917 setMachineCodes(mi++, (byte) 0xDF); 47918 emitAbsRegOperands(disp, GPR.getForOpcode(2)); 47919 if (lister != null) lister.RA(miStart, "FIST", disp); 47920 } 47921 47922 /** 47923 * top of stack stored to (double word) [reg + disp] 47924 * 47925 * @param reg register 47926 * @param disp displacement 47927 * @param dummy must always be {@code FP0} 47928 */ 47929 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47930 public final void emitFIST_RegDisp_Reg(GPR reg, Offset disp, FPR dummy) { 47931 int miStart = mi; 47932 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47933 setMachineCodes(mi++, (byte) 0xDB); 47934 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(2)); 47935 if (lister != null) lister.RD(miStart, "FIST", reg, disp); 47936 } 47937 47938 /** 47939 * top of stack stored to (double word) [reg] 47940 * 47941 * @param reg register 47942 * @param dummy must always be {@code FP0} 47943 */ 47944 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47945 public final void emitFIST_RegInd_Reg(GPR reg, FPR dummy) { 47946 int miStart = mi; 47947 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47948 setMachineCodes(mi++, (byte) 0xDB); 47949 emitRegIndirectRegOperands(reg, GPR.getForOpcode(2)); 47950 if (lister != null) lister.RN(miStart, "FIST", reg); 47951 } 47952 47953 /** 47954 * top of stack stored to (double word) [baseReg + idxReg<<scale + disp] 47955 * 47956 * @param baseReg base register 47957 * @param idxReg index register 47958 * @param scale scale for index register 47959 * @param disp displacemnet 47960 * @param dummy must always be {@code FP0} 47961 */ 47962 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 47963 public final void emitFIST_RegIdx_Reg(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) { 47964 int miStart = mi; 47965 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47966 setMachineCodes(mi++, (byte) 0xDB); 47967 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(2)); 47968 if (lister != null) lister.RXD(miStart, "FIST", baseReg, idxReg, scale, disp); 47969 } 47970 47971 /** 47972 * top of stack stored to (double word) [idxReg<<scale + disp] 47973 * 47974 * @param idxReg index register 47975 * @param scale scale for index register 47976 * @param disp displacemnet 47977 * @param dummy must always be {@code FP0} 47978 */ 47979 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 47980 public final void emitFIST_RegOff_Reg(GPR idxReg, short scale, Offset disp, FPR dummy) { 47981 int miStart = mi; 47982 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47983 setMachineCodes(mi++, (byte) 0xDB); 47984 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(2)); 47985 if (lister != null) lister.RFD(miStart, "FIST", idxReg, scale, disp); 47986 } 47987 47988 /** 47989 * top of stack stored to (double word) [disp] 47990 * 47991 * @param disp displacemnet 47992 * @param dummy must always be {@code FP0} 47993 */ 47994 public final void emitFIST_Abs_Reg(Address disp, FPR dummy) { 47995 int miStart = mi; 47996 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 47997 setMachineCodes(mi++, (byte) 0xDB); 47998 emitAbsRegOperands(disp, GPR.getForOpcode(2)); 47999 if (lister != null) lister.RA(miStart, "FIST", disp); 48000 } 48001 48002 /** 48003 * top of stack stored to (word) [reg + disp] 48004 * 48005 * @param reg register 48006 * @param disp displacement 48007 * @param dummy must always be {@code FP0} 48008 */ 48009 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48010 public final void emitFISTP_RegDisp_Reg_Word(GPR reg, Offset disp, FPR dummy) { 48011 int miStart = mi; 48012 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48013 setMachineCodes(mi++, (byte) 0xDF); 48014 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(3)); 48015 if (lister != null) lister.RD(miStart, "FISTP", reg, disp); 48016 } 48017 48018 /** 48019 * top of stack stored to (word) [reg] 48020 * 48021 * @param reg register 48022 * @param dummy must always be {@code FP0} 48023 */ 48024 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48025 public final void emitFISTP_RegInd_Reg_Word(GPR reg, FPR dummy) { 48026 int miStart = mi; 48027 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48028 setMachineCodes(mi++, (byte) 0xDF); 48029 emitRegIndirectRegOperands(reg, GPR.getForOpcode(3)); 48030 if (lister != null) lister.RN(miStart, "FISTP", reg); 48031 } 48032 48033 /** 48034 * top of stack stored to (word) [baseReg + idxReg<<scale + disp] 48035 * 48036 * @param baseReg base register 48037 * @param idxReg index register 48038 * @param scale scale for index register 48039 * @param disp displacemnet 48040 * @param dummy must always be {@code FP0} 48041 */ 48042 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48043 public final void emitFISTP_RegIdx_Reg_Word(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) { 48044 int miStart = mi; 48045 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48046 setMachineCodes(mi++, (byte) 0xDF); 48047 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(3)); 48048 if (lister != null) lister.RXD(miStart, "FISTP", baseReg, idxReg, scale, disp); 48049 } 48050 48051 /** 48052 * top of stack stored to (word) [idxReg<<scale + disp] 48053 * 48054 * @param idxReg index register 48055 * @param scale scale for index register 48056 * @param disp displacemnet 48057 * @param dummy must always be {@code FP0} 48058 */ 48059 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48060 public final void emitFISTP_RegOff_Reg_Word(GPR idxReg, short scale, Offset disp, FPR dummy) { 48061 int miStart = mi; 48062 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48063 setMachineCodes(mi++, (byte) 0xDF); 48064 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(3)); 48065 if (lister != null) lister.RFD(miStart, "FISTP", idxReg, scale, disp); 48066 } 48067 48068 /** 48069 * top of stack stored to (word) [disp] 48070 * 48071 * @param disp displacemnet 48072 * @param dummy must always be {@code FP0} 48073 */ 48074 public final void emitFISTP_Abs_Reg_Word(Address disp, FPR dummy) { 48075 int miStart = mi; 48076 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48077 setMachineCodes(mi++, (byte) 0xDF); 48078 emitAbsRegOperands(disp, GPR.getForOpcode(3)); 48079 if (lister != null) lister.RA(miStart, "FISTP", disp); 48080 } 48081 48082 /** 48083 * top of stack stored to (double word) [reg + disp] 48084 * 48085 * @param reg register 48086 * @param disp displacement 48087 * @param dummy must always be {@code FP0} 48088 */ 48089 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48090 public final void emitFISTP_RegDisp_Reg(GPR reg, Offset disp, FPR dummy) { 48091 int miStart = mi; 48092 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48093 setMachineCodes(mi++, (byte) 0xDB); 48094 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(3)); 48095 if (lister != null) lister.RD(miStart, "FISTP", reg, disp); 48096 } 48097 48098 /** 48099 * top of stack stored to (double word) [reg] 48100 * 48101 * @param reg register 48102 * @param dummy must always be {@code FP0} 48103 */ 48104 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48105 public final void emitFISTP_RegInd_Reg(GPR reg, FPR dummy) { 48106 int miStart = mi; 48107 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48108 setMachineCodes(mi++, (byte) 0xDB); 48109 emitRegIndirectRegOperands(reg, GPR.getForOpcode(3)); 48110 if (lister != null) lister.RN(miStart, "FISTP", reg); 48111 } 48112 48113 /** 48114 * top of stack stored to (double word) [baseReg + idxReg<<scale + disp] 48115 * 48116 * @param baseReg base register 48117 * @param idxReg index register 48118 * @param scale scale for index register 48119 * @param disp displacemnet 48120 * @param dummy must always be {@code FP0} 48121 */ 48122 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48123 public final void emitFISTP_RegIdx_Reg(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) { 48124 int miStart = mi; 48125 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48126 setMachineCodes(mi++, (byte) 0xDB); 48127 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(3)); 48128 if (lister != null) lister.RXD(miStart, "FISTP", baseReg, idxReg, scale, disp); 48129 } 48130 48131 /** 48132 * top of stack stored to (double word) [idxReg<<scale + disp] 48133 * 48134 * @param idxReg index register 48135 * @param scale scale for index register 48136 * @param disp displacemnet 48137 * @param dummy must always be {@code FP0} 48138 */ 48139 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48140 public final void emitFISTP_RegOff_Reg(GPR idxReg, short scale, Offset disp, FPR dummy) { 48141 int miStart = mi; 48142 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48143 setMachineCodes(mi++, (byte) 0xDB); 48144 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(3)); 48145 if (lister != null) lister.RFD(miStart, "FISTP", idxReg, scale, disp); 48146 } 48147 48148 /** 48149 * top of stack stored to (double word) [disp] 48150 * 48151 * @param disp displacemnet 48152 * @param dummy must always be {@code FP0} 48153 */ 48154 public final void emitFISTP_Abs_Reg(Address disp, FPR dummy) { 48155 int miStart = mi; 48156 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48157 setMachineCodes(mi++, (byte) 0xDB); 48158 emitAbsRegOperands(disp, GPR.getForOpcode(3)); 48159 if (lister != null) lister.RA(miStart, "FISTP", disp); 48160 } 48161 48162 /** 48163 * top of stack stored to (quad) [reg + disp] 48164 * 48165 * @param reg register 48166 * @param disp displacement 48167 * @param dummy must always be {@code FP0} 48168 */ 48169 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48170 public final void emitFISTP_RegDisp_Reg_Quad(GPR reg, Offset disp, FPR dummy) { 48171 int miStart = mi; 48172 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48173 setMachineCodes(mi++, (byte) 0xDF); 48174 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(7)); 48175 if (lister != null) lister.RD(miStart, "FISTP", reg, disp); 48176 } 48177 48178 /** 48179 * top of stack stored to (quad) [reg] 48180 * 48181 * @param reg register 48182 * @param dummy must always be {@code FP0} 48183 */ 48184 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48185 public final void emitFISTP_RegInd_Reg_Quad(GPR reg, FPR dummy) { 48186 int miStart = mi; 48187 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48188 setMachineCodes(mi++, (byte) 0xDF); 48189 emitRegIndirectRegOperands(reg, GPR.getForOpcode(7)); 48190 if (lister != null) lister.RN(miStart, "FISTP", reg); 48191 } 48192 48193 /** 48194 * top of stack stored to (quad) [baseReg + idxReg<<scale + disp] 48195 * 48196 * @param baseReg base register 48197 * @param idxReg index register 48198 * @param scale scale for index register 48199 * @param disp displacemnet 48200 * @param dummy must always be {@code FP0} 48201 */ 48202 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48203 public final void emitFISTP_RegIdx_Reg_Quad(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) { 48204 int miStart = mi; 48205 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48206 setMachineCodes(mi++, (byte) 0xDF); 48207 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(7)); 48208 if (lister != null) lister.RXD(miStart, "FISTP", baseReg, idxReg, scale, disp); 48209 } 48210 48211 /** 48212 * top of stack stored to (quad) [idxReg<<scale + disp] 48213 * 48214 * @param idxReg index register 48215 * @param scale scale for index register 48216 * @param disp displacemnet 48217 * @param dummy must always be {@code FP0} 48218 */ 48219 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48220 public final void emitFISTP_RegOff_Reg_Quad(GPR idxReg, short scale, Offset disp, FPR dummy) { 48221 int miStart = mi; 48222 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48223 setMachineCodes(mi++, (byte) 0xDF); 48224 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(7)); 48225 if (lister != null) lister.RFD(miStart, "FISTP", idxReg, scale, disp); 48226 } 48227 48228 /** 48229 * top of stack stored to (quad) [disp] 48230 * 48231 * @param disp displacemnet 48232 * @param dummy must always be {@code FP0} 48233 */ 48234 public final void emitFISTP_Abs_Reg_Quad(Address disp, FPR dummy) { 48235 int miStart = mi; 48236 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48237 setMachineCodes(mi++, (byte) 0xDF); 48238 emitAbsRegOperands(disp, GPR.getForOpcode(7)); 48239 if (lister != null) lister.RA(miStart, "FISTP", disp); 48240 } 48241 48242 /** 48243 * top of stack stored to (double word) [reg + disp] 48244 * 48245 * @param reg register 48246 * @param disp displacement 48247 * @param dummy must always be {@code FP0} 48248 */ 48249 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48250 public final void emitFST_RegDisp_Reg(GPR reg, Offset disp, FPR dummy) { 48251 int miStart = mi; 48252 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48253 setMachineCodes(mi++, (byte) 0xD9); 48254 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(2)); 48255 if (lister != null) lister.RD(miStart, "FST", reg, disp); 48256 } 48257 48258 /** 48259 * top of stack stored to (double word) [reg] 48260 * 48261 * @param reg register 48262 * @param dummy must always be {@code FP0} 48263 */ 48264 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48265 public final void emitFST_RegInd_Reg(GPR reg, FPR dummy) { 48266 int miStart = mi; 48267 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48268 setMachineCodes(mi++, (byte) 0xD9); 48269 emitRegIndirectRegOperands(reg, GPR.getForOpcode(2)); 48270 if (lister != null) lister.RN(miStart, "FST", reg); 48271 } 48272 48273 /** 48274 * top of stack stored to (double word) [baseReg + idxReg<<scale + disp] 48275 * 48276 * @param baseReg base register 48277 * @param idxReg index register 48278 * @param scale scale for index register 48279 * @param disp displacemnet 48280 * @param dummy must always be {@code FP0} 48281 */ 48282 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48283 public final void emitFST_RegIdx_Reg(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) { 48284 int miStart = mi; 48285 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48286 setMachineCodes(mi++, (byte) 0xD9); 48287 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(2)); 48288 if (lister != null) lister.RXD(miStart, "FST", baseReg, idxReg, scale, disp); 48289 } 48290 48291 /** 48292 * top of stack stored to (double word) [idxReg<<scale + disp] 48293 * 48294 * @param idxReg index register 48295 * @param scale scale for index register 48296 * @param disp displacemnet 48297 * @param dummy must always be {@code FP0} 48298 */ 48299 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48300 public final void emitFST_RegOff_Reg(GPR idxReg, short scale, Offset disp, FPR dummy) { 48301 int miStart = mi; 48302 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48303 setMachineCodes(mi++, (byte) 0xD9); 48304 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(2)); 48305 if (lister != null) lister.RFD(miStart, "FST", idxReg, scale, disp); 48306 } 48307 48308 /** 48309 * top of stack stored to (double word) [disp] 48310 * 48311 * @param disp displacemnet 48312 * @param dummy must always be {@code FP0} 48313 */ 48314 public final void emitFST_Abs_Reg(Address disp, FPR dummy) { 48315 int miStart = mi; 48316 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48317 setMachineCodes(mi++, (byte) 0xD9); 48318 emitAbsRegOperands(disp, GPR.getForOpcode(2)); 48319 if (lister != null) lister.RA(miStart, "FST", disp); 48320 } 48321 48322 /** 48323 * top of stack stored to (quad) [reg + disp] 48324 * 48325 * @param reg register 48326 * @param disp displacement 48327 * @param dummy must always be {@code FP0} 48328 */ 48329 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48330 public final void emitFST_RegDisp_Reg_Quad(GPR reg, Offset disp, FPR dummy) { 48331 int miStart = mi; 48332 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48333 setMachineCodes(mi++, (byte) 0xDD); 48334 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(2)); 48335 if (lister != null) lister.RD(miStart, "FST", reg, disp); 48336 } 48337 48338 /** 48339 * top of stack stored to (quad) [reg] 48340 * 48341 * @param reg register 48342 * @param dummy must always be {@code FP0} 48343 */ 48344 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48345 public final void emitFST_RegInd_Reg_Quad(GPR reg, FPR dummy) { 48346 int miStart = mi; 48347 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48348 setMachineCodes(mi++, (byte) 0xDD); 48349 emitRegIndirectRegOperands(reg, GPR.getForOpcode(2)); 48350 if (lister != null) lister.RN(miStart, "FST", reg); 48351 } 48352 48353 /** 48354 * top of stack stored to (quad) [baseReg + idxReg<<scale + disp] 48355 * 48356 * @param baseReg base register 48357 * @param idxReg index register 48358 * @param scale scale for index register 48359 * @param disp displacemnet 48360 * @param dummy must always be {@code FP0} 48361 */ 48362 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48363 public final void emitFST_RegIdx_Reg_Quad(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) { 48364 int miStart = mi; 48365 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48366 setMachineCodes(mi++, (byte) 0xDD); 48367 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(2)); 48368 if (lister != null) lister.RXD(miStart, "FST", baseReg, idxReg, scale, disp); 48369 } 48370 48371 /** 48372 * top of stack stored to (quad) [idxReg<<scale + disp] 48373 * 48374 * @param idxReg index register 48375 * @param scale scale for index register 48376 * @param disp displacemnet 48377 * @param dummy must always be {@code FP0} 48378 */ 48379 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48380 public final void emitFST_RegOff_Reg_Quad(GPR idxReg, short scale, Offset disp, FPR dummy) { 48381 int miStart = mi; 48382 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48383 setMachineCodes(mi++, (byte) 0xDD); 48384 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(2)); 48385 if (lister != null) lister.RFD(miStart, "FST", idxReg, scale, disp); 48386 } 48387 48388 /** 48389 * top of stack stored to (quad) [disp] 48390 * 48391 * @param disp displacemnet 48392 * @param dummy must always be {@code FP0} 48393 */ 48394 public final void emitFST_Abs_Reg_Quad(Address disp, FPR dummy) { 48395 int miStart = mi; 48396 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48397 setMachineCodes(mi++, (byte) 0xDD); 48398 emitAbsRegOperands(disp, GPR.getForOpcode(2)); 48399 if (lister != null) lister.RA(miStart, "FST", disp); 48400 } 48401 48402 /** 48403 * top of stack stored to (double word) [reg + disp] 48404 * 48405 * @param reg register 48406 * @param disp displacement 48407 * @param dummy must always be {@code FP0} 48408 */ 48409 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48410 public final void emitFSTP_RegDisp_Reg(GPR reg, Offset disp, FPR dummy) { 48411 int miStart = mi; 48412 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48413 setMachineCodes(mi++, (byte) 0xD9); 48414 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(3)); 48415 if (lister != null) lister.RD(miStart, "FSTP", reg, disp); 48416 } 48417 48418 /** 48419 * top of stack stored to (double word) [reg] 48420 * 48421 * @param reg register 48422 * @param dummy must always be {@code FP0} 48423 */ 48424 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48425 public final void emitFSTP_RegInd_Reg(GPR reg, FPR dummy) { 48426 int miStart = mi; 48427 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48428 setMachineCodes(mi++, (byte) 0xD9); 48429 emitRegIndirectRegOperands(reg, GPR.getForOpcode(3)); 48430 if (lister != null) lister.RN(miStart, "FSTP", reg); 48431 } 48432 48433 /** 48434 * top of stack stored to (double word) [baseReg + idxReg<<scale + disp] 48435 * 48436 * @param baseReg base register 48437 * @param idxReg index register 48438 * @param scale scale for index register 48439 * @param disp displacemnet 48440 * @param dummy must always be {@code FP0} 48441 */ 48442 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48443 public final void emitFSTP_RegIdx_Reg(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) { 48444 int miStart = mi; 48445 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48446 setMachineCodes(mi++, (byte) 0xD9); 48447 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(3)); 48448 if (lister != null) lister.RXD(miStart, "FSTP", baseReg, idxReg, scale, disp); 48449 } 48450 48451 /** 48452 * top of stack stored to (double word) [idxReg<<scale + disp] 48453 * 48454 * @param idxReg index register 48455 * @param scale scale for index register 48456 * @param disp displacemnet 48457 * @param dummy must always be {@code FP0} 48458 */ 48459 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48460 public final void emitFSTP_RegOff_Reg(GPR idxReg, short scale, Offset disp, FPR dummy) { 48461 int miStart = mi; 48462 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48463 setMachineCodes(mi++, (byte) 0xD9); 48464 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(3)); 48465 if (lister != null) lister.RFD(miStart, "FSTP", idxReg, scale, disp); 48466 } 48467 48468 /** 48469 * top of stack stored to (double word) [disp] 48470 * 48471 * @param disp displacemnet 48472 * @param dummy must always be {@code FP0} 48473 */ 48474 public final void emitFSTP_Abs_Reg(Address disp, FPR dummy) { 48475 int miStart = mi; 48476 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48477 setMachineCodes(mi++, (byte) 0xD9); 48478 emitAbsRegOperands(disp, GPR.getForOpcode(3)); 48479 if (lister != null) lister.RA(miStart, "FSTP", disp); 48480 } 48481 48482 /** 48483 * top of stack stored to (quad) [reg + disp] 48484 * 48485 * @param reg register 48486 * @param disp displacement 48487 * @param dummy must always be {@code FP0} 48488 */ 48489 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48490 public final void emitFSTP_RegDisp_Reg_Quad(GPR reg, Offset disp, FPR dummy) { 48491 int miStart = mi; 48492 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48493 setMachineCodes(mi++, (byte) 0xDD); 48494 emitRegDispRegOperands(reg, disp, GPR.getForOpcode(3)); 48495 if (lister != null) lister.RD(miStart, "FSTP", reg, disp); 48496 } 48497 48498 /** 48499 * top of stack stored to (quad) [reg] 48500 * 48501 * @param reg register 48502 * @param dummy must always be {@code FP0} 48503 */ 48504 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48505 public final void emitFSTP_RegInd_Reg_Quad(GPR reg, FPR dummy) { 48506 int miStart = mi; 48507 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48508 setMachineCodes(mi++, (byte) 0xDD); 48509 emitRegIndirectRegOperands(reg, GPR.getForOpcode(3)); 48510 if (lister != null) lister.RN(miStart, "FSTP", reg); 48511 } 48512 48513 /** 48514 * top of stack stored to (quad) [baseReg + idxReg<<scale + disp] 48515 * 48516 * @param baseReg base register 48517 * @param idxReg index register 48518 * @param scale scale for index register 48519 * @param disp displacemnet 48520 * @param dummy must always be {@code FP0} 48521 */ 48522 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48523 public final void emitFSTP_RegIdx_Reg_Quad(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) { 48524 int miStart = mi; 48525 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48526 setMachineCodes(mi++, (byte) 0xDD); 48527 emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(3)); 48528 if (lister != null) lister.RXD(miStart, "FSTP", baseReg, idxReg, scale, disp); 48529 } 48530 48531 /** 48532 * top of stack stored to (quad) [idxReg<<scale + disp] 48533 * 48534 * @param idxReg index register 48535 * @param scale scale for index register 48536 * @param disp displacemnet 48537 * @param dummy must always be {@code FP0} 48538 */ 48539 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48540 public final void emitFSTP_RegOff_Reg_Quad(GPR idxReg, short scale, Offset disp, FPR dummy) { 48541 int miStart = mi; 48542 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48543 setMachineCodes(mi++, (byte) 0xDD); 48544 emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(3)); 48545 if (lister != null) lister.RFD(miStart, "FSTP", idxReg, scale, disp); 48546 } 48547 48548 /** 48549 * top of stack stored to (quad) [disp] 48550 * 48551 * @param disp displacemnet 48552 * @param dummy must always be {@code FP0} 48553 */ 48554 public final void emitFSTP_Abs_Reg_Quad(Address disp, FPR dummy) { 48555 int miStart = mi; 48556 if (VM.VerifyAssertions) VM._assert(dummy == FP0); 48557 setMachineCodes(mi++, (byte) 0xDD); 48558 emitAbsRegOperands(disp, GPR.getForOpcode(3)); 48559 if (lister != null) lister.RA(miStart, "FSTP", disp); 48560 } 48561 48562 /** 48563 * FCOMI floating point comparison 48564 * 48565 * @param reg1 register for comparison 48566 * @param reg2 register for comparison 48567 */ 48568 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48569 public final void emitFCOMI_Reg_Reg (FPR reg1, FPR reg2) { 48570 int miStart = mi; 48571 if (VM.VerifyAssertions) VM._assert(reg1 == FP0); 48572 setMachineCodes(mi++, (byte) 0xDB); 48573 setMachineCodes(mi++, (byte) (0xF0 | reg2.value())); 48574 if (lister != null) lister.RR(miStart, "FCOMI", reg1, reg2); 48575 } 48576 48577 /** 48578 * FCOMIP floating point comparison 48579 * 48580 * @param reg1 register for comparison 48581 * @param reg2 register for comparison 48582 */ 48583 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48584 public final void emitFCOMIP_Reg_Reg (FPR reg1, FPR reg2) { 48585 int miStart = mi; 48586 if (VM.VerifyAssertions) VM._assert(reg1 == FP0); 48587 setMachineCodes(mi++, (byte) 0xDF); 48588 setMachineCodes(mi++, (byte) (0xF0 | reg2.value())); 48589 if (lister != null) lister.RR(miStart, "FCOMIP", reg1, reg2); 48590 } 48591 48592 /** 48593 * FUCOMI floating point comparison 48594 * 48595 * @param reg1 register for comparison 48596 * @param reg2 register for comparison 48597 */ 48598 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48599 public final void emitFUCOMI_Reg_Reg (FPR reg1, FPR reg2) { 48600 int miStart = mi; 48601 if (VM.VerifyAssertions) VM._assert(reg1 == FP0); 48602 setMachineCodes(mi++, (byte) 0xDB); 48603 setMachineCodes(mi++, (byte) (0xE8 | reg2.value())); 48604 if (lister != null) lister.RR(miStart, "FUCOMI", reg1, reg2); 48605 } 48606 48607 /** 48608 * FUCOMIP floating point comparison 48609 * 48610 * @param reg1 register for comparison 48611 * @param reg2 register for comparison 48612 */ 48613 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48614 public final void emitFUCOMIP_Reg_Reg (FPR reg1, FPR reg2) { 48615 int miStart = mi; 48616 if (VM.VerifyAssertions) VM._assert(reg1 == FP0); 48617 setMachineCodes(mi++, (byte) 0xDF); 48618 setMachineCodes(mi++, (byte) (0xE8 | reg2.value())); 48619 if (lister != null) lister.RR(miStart, "FUCOMIP", reg1, reg2); 48620 } 48621 48622 /** 48623 * save FPU state ignoring pending exceptions - register displacement 48624 * 48625 * @param baseReg destination base register 48626 * @param disp destination displacement 48627 */ 48628 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48629 public final void emitFNSAVE_RegDisp (GPR baseReg, Offset disp) { 48630 int miStart = mi; 48631 // no prefix byte 48632 setMachineCodes(mi++, (byte) 0xDD); 48633 emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(6)); 48634 if (lister != null) lister.RD(miStart, "FNSAVE", baseReg, disp); 48635 } 48636 48637 /** 48638 * save FPU state ignoring pending exceptions - register indirect 48639 * 48640 * @param baseReg destination base register 48641 */ 48642 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48643 public final void emitFNSAVE_RegInd (GPR baseReg) { 48644 int miStart = mi; 48645 // no prefix byte 48646 setMachineCodes(mi++, (byte) 0xDD); 48647 emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(6)); 48648 if (lister != null) lister.RN(miStart, "FNSAVE", baseReg); 48649 } 48650 48651 /** 48652 * save FPU state ignoring pending exceptions - register index 48653 * 48654 * @param baseReg destination base register 48655 * @param indexReg destination index register 48656 * @param scale destination scale 48657 * @param disp destination displacement 48658 */ 48659 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48660 public final void emitFNSAVE_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) { 48661 int miStart = mi; 48662 // no prefix byte 48663 setMachineCodes(mi++, (byte) 0xDD); 48664 emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(6)); 48665 if (lister != null) lister.RXD(miStart, "FNSAVE", baseReg, indexReg, scale, disp); 48666 } 48667 48668 /** 48669 * save FPU state ignoring pending exceptions - register offset 48670 * 48671 * @param indexReg destination index register 48672 * @param scale destination scale 48673 * @param disp destination displacement 48674 */ 48675 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48676 public final void emitFNSAVE_RegOff (GPR indexReg, short scale, Offset disp) { 48677 int miStart = mi; 48678 // no prefix byte 48679 setMachineCodes(mi++, (byte) 0xDD); 48680 emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(6)); 48681 if (lister != null) lister.RFD(miStart, "FNSAVE", indexReg, scale, disp); 48682 } 48683 48684 /** 48685 * save FPU state ignoring pending exceptions - absolute address 48686 * 48687 * @param disp address to store to 48688 */ 48689 public final void emitFNSAVE_Abs (Address disp) { 48690 int miStart = mi; 48691 // no prefix byte 48692 setMachineCodes(mi++, (byte) 0xDD); 48693 emitAbsRegOperands(disp, GPR.getForOpcode(6)); 48694 if (lister != null) lister.RA(miStart, "FNSAVE", disp); 48695 } 48696 48697 /** 48698 * save FPU state respecting pending exceptions - register displacement 48699 * 48700 * @param baseReg destination base register 48701 * @param disp destination displacement 48702 */ 48703 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48704 public final void emitFSAVE_RegDisp (GPR baseReg, Offset disp) { 48705 int miStart = mi; 48706 setMachineCodes(mi++, (byte) 0x9B); 48707 setMachineCodes(mi++, (byte) 0xDD); 48708 emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(6)); 48709 if (lister != null) lister.RD(miStart, "FSAVE", baseReg, disp); 48710 } 48711 48712 /** 48713 * save FPU state respecting pending exceptions - register indirect 48714 * 48715 * @param baseReg destination base register 48716 */ 48717 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48718 public final void emitFSAVE_RegInd (GPR baseReg) { 48719 int miStart = mi; 48720 setMachineCodes(mi++, (byte) 0x9B); 48721 setMachineCodes(mi++, (byte) 0xDD); 48722 emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(6)); 48723 if (lister != null) lister.RN(miStart, "FSAVE", baseReg); 48724 } 48725 48726 /** 48727 * save FPU state respecting pending exceptions - register index 48728 * 48729 * @param baseReg destination base register 48730 * @param indexReg destination index register 48731 * @param scale destination scale 48732 * @param disp destination displacement 48733 */ 48734 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48735 public final void emitFSAVE_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) { 48736 int miStart = mi; 48737 setMachineCodes(mi++, (byte) 0x9B); 48738 setMachineCodes(mi++, (byte) 0xDD); 48739 emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(6)); 48740 if (lister != null) lister.RXD(miStart, "FSAVE", baseReg, indexReg, scale, disp); 48741 } 48742 48743 /** 48744 * save FPU state respecting pending exceptions - register offset 48745 * 48746 * @param indexReg destination index register 48747 * @param scale destination scale 48748 * @param disp destination displacement 48749 */ 48750 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48751 public final void emitFSAVE_RegOff (GPR indexReg, short scale, Offset disp) { 48752 int miStart = mi; 48753 setMachineCodes(mi++, (byte) 0x9B); 48754 setMachineCodes(mi++, (byte) 0xDD); 48755 emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(6)); 48756 if (lister != null) lister.RFD(miStart, "FSAVE", indexReg, scale, disp); 48757 } 48758 48759 /** 48760 * save FPU state respecting pending exceptions - absolute address 48761 * 48762 * @param disp address to store to 48763 */ 48764 public final void emitFSAVE_Abs (Address disp) { 48765 int miStart = mi; 48766 setMachineCodes(mi++, (byte) 0x9B); 48767 setMachineCodes(mi++, (byte) 0xDD); 48768 emitAbsRegOperands(disp, GPR.getForOpcode(6)); 48769 if (lister != null) lister.RA(miStart, "FSAVE", disp); 48770 } 48771 48772 /** 48773 * restore FPU state - register displacement 48774 * 48775 * @param baseReg destination base register 48776 * @param disp destination displacement 48777 */ 48778 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48779 public final void emitFRSTOR_RegDisp (GPR baseReg, Offset disp) { 48780 int miStart = mi; 48781 // no prefix byte 48782 setMachineCodes(mi++, (byte) 0xDD); 48783 emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(4)); 48784 if (lister != null) lister.RD(miStart, "FRSTOR", baseReg, disp); 48785 } 48786 48787 /** 48788 * restore FPU state - register indirect 48789 * 48790 * @param baseReg destination base register 48791 */ 48792 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48793 public final void emitFRSTOR_RegInd (GPR baseReg) { 48794 int miStart = mi; 48795 // no prefix byte 48796 setMachineCodes(mi++, (byte) 0xDD); 48797 emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(4)); 48798 if (lister != null) lister.RN(miStart, "FRSTOR", baseReg); 48799 } 48800 48801 /** 48802 * restore FPU state - register index 48803 * 48804 * @param baseReg destination base register 48805 * @param indexReg destination index register 48806 * @param scale destination scale 48807 * @param disp destination displacement 48808 */ 48809 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48810 public final void emitFRSTOR_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) { 48811 int miStart = mi; 48812 // no prefix byte 48813 setMachineCodes(mi++, (byte) 0xDD); 48814 emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(4)); 48815 if (lister != null) lister.RXD(miStart, "FRSTOR", baseReg, indexReg, scale, disp); 48816 } 48817 48818 /** 48819 * restore FPU state - register offset 48820 * 48821 * @param indexReg destination index register 48822 * @param scale destination scale 48823 * @param disp destination displacement 48824 */ 48825 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48826 public final void emitFRSTOR_RegOff (GPR indexReg, short scale, Offset disp) { 48827 int miStart = mi; 48828 // no prefix byte 48829 setMachineCodes(mi++, (byte) 0xDD); 48830 emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(4)); 48831 if (lister != null) lister.RFD(miStart, "FRSTOR", indexReg, scale, disp); 48832 } 48833 48834 /** 48835 * restore FPU state - absolute address 48836 * 48837 * @param disp address to store to 48838 */ 48839 public final void emitFRSTOR_Abs (Address disp) { 48840 int miStart = mi; 48841 // no prefix byte 48842 setMachineCodes(mi++, (byte) 0xDD); 48843 emitAbsRegOperands(disp, GPR.getForOpcode(4)); 48844 if (lister != null) lister.RA(miStart, "FRSTOR", disp); 48845 } 48846 48847 /** 48848 * load FPU control word - register displacement 48849 * 48850 * @param baseReg destination base register 48851 * @param disp destination displacement 48852 */ 48853 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48854 public final void emitFLDCW_RegDisp (GPR baseReg, Offset disp) { 48855 int miStart = mi; 48856 // no prefix byte 48857 setMachineCodes(mi++, (byte) 0xD9); 48858 emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(5)); 48859 if (lister != null) lister.RD(miStart, "FLDCW", baseReg, disp); 48860 } 48861 48862 /** 48863 * load FPU control word - register indirect 48864 * 48865 * @param baseReg destination base register 48866 */ 48867 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48868 public final void emitFLDCW_RegInd (GPR baseReg) { 48869 int miStart = mi; 48870 // no prefix byte 48871 setMachineCodes(mi++, (byte) 0xD9); 48872 emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(5)); 48873 if (lister != null) lister.RN(miStart, "FLDCW", baseReg); 48874 } 48875 48876 /** 48877 * load FPU control word - register index 48878 * 48879 * @param baseReg destination base register 48880 * @param indexReg destination index register 48881 * @param scale destination scale 48882 * @param disp destination displacement 48883 */ 48884 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48885 public final void emitFLDCW_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) { 48886 int miStart = mi; 48887 // no prefix byte 48888 setMachineCodes(mi++, (byte) 0xD9); 48889 emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(5)); 48890 if (lister != null) lister.RXD(miStart, "FLDCW", baseReg, indexReg, scale, disp); 48891 } 48892 48893 /** 48894 * load FPU control word - register offset 48895 * 48896 * @param indexReg destination index register 48897 * @param scale destination scale 48898 * @param disp destination displacement 48899 */ 48900 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48901 public final void emitFLDCW_RegOff (GPR indexReg, short scale, Offset disp) { 48902 int miStart = mi; 48903 // no prefix byte 48904 setMachineCodes(mi++, (byte) 0xD9); 48905 emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(5)); 48906 if (lister != null) lister.RFD(miStart, "FLDCW", indexReg, scale, disp); 48907 } 48908 48909 /** 48910 * load FPU control word - absolute address 48911 * 48912 * @param disp address to store to 48913 */ 48914 public final void emitFLDCW_Abs (Address disp) { 48915 int miStart = mi; 48916 // no prefix byte 48917 setMachineCodes(mi++, (byte) 0xD9); 48918 emitAbsRegOperands(disp, GPR.getForOpcode(5)); 48919 if (lister != null) lister.RA(miStart, "FLDCW", disp); 48920 } 48921 48922 /** 48923 * store FPU control word, checking for exceptions - register displacement 48924 * 48925 * @param baseReg destination base register 48926 * @param disp destination displacement 48927 */ 48928 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48929 public final void emitFSTCW_RegDisp (GPR baseReg, Offset disp) { 48930 int miStart = mi; 48931 setMachineCodes(mi++, (byte) 0x9B); 48932 setMachineCodes(mi++, (byte) 0xD9); 48933 emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(7)); 48934 if (lister != null) lister.RD(miStart, "FSTCW", baseReg, disp); 48935 } 48936 48937 /** 48938 * store FPU control word, checking for exceptions - register indirect 48939 * 48940 * @param baseReg destination base register 48941 */ 48942 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48943 public final void emitFSTCW_RegInd (GPR baseReg) { 48944 int miStart = mi; 48945 setMachineCodes(mi++, (byte) 0x9B); 48946 setMachineCodes(mi++, (byte) 0xD9); 48947 emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(7)); 48948 if (lister != null) lister.RN(miStart, "FSTCW", baseReg); 48949 } 48950 48951 /** 48952 * store FPU control word, checking for exceptions - register index 48953 * 48954 * @param baseReg destination base register 48955 * @param indexReg destination index register 48956 * @param scale destination scale 48957 * @param disp destination displacement 48958 */ 48959 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 48960 public final void emitFSTCW_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) { 48961 int miStart = mi; 48962 setMachineCodes(mi++, (byte) 0x9B); 48963 setMachineCodes(mi++, (byte) 0xD9); 48964 emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(7)); 48965 if (lister != null) lister.RXD(miStart, "FSTCW", baseReg, indexReg, scale, disp); 48966 } 48967 48968 /** 48969 * store FPU control word, checking for exceptions - register offset 48970 * 48971 * @param indexReg destination index register 48972 * @param scale destination scale 48973 * @param disp destination displacement 48974 */ 48975 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 48976 public final void emitFSTCW_RegOff (GPR indexReg, short scale, Offset disp) { 48977 int miStart = mi; 48978 setMachineCodes(mi++, (byte) 0x9B); 48979 setMachineCodes(mi++, (byte) 0xD9); 48980 emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(7)); 48981 if (lister != null) lister.RFD(miStart, "FSTCW", indexReg, scale, disp); 48982 } 48983 48984 /** 48985 * store FPU control word, checking for exceptions - absolute address 48986 * 48987 * @param disp address to store to 48988 */ 48989 public final void emitFSTCW_Abs (Address disp) { 48990 int miStart = mi; 48991 setMachineCodes(mi++, (byte) 0x9B); 48992 setMachineCodes(mi++, (byte) 0xD9); 48993 emitAbsRegOperands(disp, GPR.getForOpcode(7)); 48994 if (lister != null) lister.RA(miStart, "FSTCW", disp); 48995 } 48996 48997 /** 48998 * store FPU control word, ignoring exceptions - register displacement 48999 * 49000 * @param baseReg destination base register 49001 * @param disp destination displacement 49002 */ 49003 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49004 public final void emitFNSTCW_RegDisp (GPR baseReg, Offset disp) { 49005 int miStart = mi; 49006 // no prefix byte 49007 setMachineCodes(mi++, (byte) 0xD9); 49008 emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(7)); 49009 if (lister != null) lister.RD(miStart, "FNSTCW", baseReg, disp); 49010 } 49011 49012 /** 49013 * store FPU control word, ignoring exceptions - register indirect 49014 * 49015 * @param baseReg destination base register 49016 */ 49017 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49018 public final void emitFNSTCW_RegInd (GPR baseReg) { 49019 int miStart = mi; 49020 // no prefix byte 49021 setMachineCodes(mi++, (byte) 0xD9); 49022 emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(7)); 49023 if (lister != null) lister.RN(miStart, "FNSTCW", baseReg); 49024 } 49025 49026 /** 49027 * store FPU control word, ignoring exceptions - register index 49028 * 49029 * @param baseReg destination base register 49030 * @param indexReg destination index register 49031 * @param scale destination scale 49032 * @param disp destination displacement 49033 */ 49034 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 49035 public final void emitFNSTCW_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) { 49036 int miStart = mi; 49037 // no prefix byte 49038 setMachineCodes(mi++, (byte) 0xD9); 49039 emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(7)); 49040 if (lister != null) lister.RXD(miStart, "FNSTCW", baseReg, indexReg, scale, disp); 49041 } 49042 49043 /** 49044 * store FPU control word, ignoring exceptions - register offset 49045 * 49046 * @param indexReg destination index register 49047 * @param scale destination scale 49048 * @param disp destination displacement 49049 */ 49050 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49051 public final void emitFNSTCW_RegOff (GPR indexReg, short scale, Offset disp) { 49052 int miStart = mi; 49053 // no prefix byte 49054 setMachineCodes(mi++, (byte) 0xD9); 49055 emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(7)); 49056 if (lister != null) lister.RFD(miStart, "FNSTCW", indexReg, scale, disp); 49057 } 49058 49059 /** 49060 * store FPU control word, ignoring exceptions - absolute address 49061 * 49062 * @param disp address to store to 49063 */ 49064 public final void emitFNSTCW_Abs (Address disp) { 49065 int miStart = mi; 49066 // no prefix byte 49067 setMachineCodes(mi++, (byte) 0xD9); 49068 emitAbsRegOperands(disp, GPR.getForOpcode(7)); 49069 if (lister != null) lister.RA(miStart, "FNSTCW", disp); 49070 } 49071 49072 /** 49073 * store FPU status word, checking for exceptions - register 49074 * 49075 * @param dstReg destination register 49076 */ 49077 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49078 public final void emitFSTSW_Reg (GPR dstReg) { 49079 int miStart = mi; 49080 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 49081 setMachineCodes(mi++, (byte) 0x9B); 49082 setMachineCodes(mi++, (byte) 0xDF); 49083 setMachineCodes(mi++, (byte) 0xE0); 49084 if (lister != null) lister.R(miStart, "FSTSW", dstReg); 49085 } 49086 49087 /** 49088 * store FPU status word, checking for exceptions - register displacement 49089 * 49090 * @param baseReg destination base register 49091 * @param disp destination displacement 49092 */ 49093 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49094 public final void emitFSTSW_RegDisp (GPR baseReg, Offset disp) { 49095 int miStart = mi; 49096 setMachineCodes(mi++, (byte) 0x9B); 49097 setMachineCodes(mi++, (byte) 0xDD); 49098 emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(7)); 49099 if (lister != null) lister.RD(miStart, "FSTSW", baseReg, disp); 49100 } 49101 49102 /** 49103 * store FPU status word, checking for exceptions - register indirect 49104 * 49105 * @param baseReg destination base register 49106 */ 49107 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49108 public final void emitFSTSW_RegInd (GPR baseReg) { 49109 int miStart = mi; 49110 setMachineCodes(mi++, (byte) 0x9B); 49111 setMachineCodes(mi++, (byte) 0xDD); 49112 emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(7)); 49113 if (lister != null) lister.RN(miStart, "FSTSW", baseReg); 49114 } 49115 49116 /** 49117 * store FPU status word, checking for exceptions - register index 49118 * 49119 * @param baseReg destination base register 49120 * @param indexReg destination index register 49121 * @param scale destination scale 49122 * @param disp destination displacement 49123 */ 49124 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 49125 public final void emitFSTSW_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) { 49126 int miStart = mi; 49127 setMachineCodes(mi++, (byte) 0x9B); 49128 setMachineCodes(mi++, (byte) 0xDD); 49129 emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(7)); 49130 if (lister != null) lister.RXD(miStart, "FSTSW", baseReg, indexReg, scale, disp); 49131 } 49132 49133 /** 49134 * store FPU status word, checking for exceptions - register offset 49135 * 49136 * @param indexReg destination index register 49137 * @param scale destination scale 49138 * @param disp destination displacement 49139 */ 49140 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49141 public final void emitFSTSW_RegOff (GPR indexReg, short scale, Offset disp) { 49142 int miStart = mi; 49143 setMachineCodes(mi++, (byte) 0x9B); 49144 setMachineCodes(mi++, (byte) 0xDD); 49145 emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(7)); 49146 if (lister != null) lister.RFD(miStart, "FSTSW", indexReg, scale, disp); 49147 } 49148 49149 /** 49150 * store FPU status word, checking for exceptions - absolute address 49151 * 49152 * @param disp address to store to 49153 */ 49154 public final void emitFSTSW_Abs (Address disp) { 49155 int miStart = mi; 49156 setMachineCodes(mi++, (byte) 0x9B); 49157 setMachineCodes(mi++, (byte) 0xDD); 49158 emitAbsRegOperands(disp, GPR.getForOpcode(7)); 49159 if (lister != null) lister.RA(miStart, "FSTSW", disp); 49160 } 49161 49162 /** 49163 * store FPU status word, ignoring exceptions - register 49164 * 49165 * @param dstReg destination register 49166 */ 49167 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49168 public final void emitFNSTSW_Reg (GPR dstReg) { 49169 int miStart = mi; 49170 if (VM.VerifyAssertions) VM._assert(dstReg == EAX); 49171 // no prefix byte 49172 setMachineCodes(mi++, (byte) 0xDF); 49173 setMachineCodes(mi++, (byte) 0xE0); 49174 if (lister != null) lister.R(miStart, "FNSTSW", dstReg); 49175 } 49176 49177 /** 49178 * store FPU status word, ignoring exceptions - register displacement 49179 * 49180 * @param baseReg destination base register 49181 * @param disp destination displacement 49182 */ 49183 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49184 public final void emitFNSTSW_RegDisp (GPR baseReg, Offset disp) { 49185 int miStart = mi; 49186 // no prefix byte 49187 setMachineCodes(mi++, (byte) 0xDD); 49188 emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(7)); 49189 if (lister != null) lister.RD(miStart, "FNSTSW", baseReg, disp); 49190 } 49191 49192 /** 49193 * store FPU status word, ignoring exceptions - register indirect 49194 * 49195 * @param baseReg destination base register 49196 */ 49197 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49198 public final void emitFNSTSW_RegInd (GPR baseReg) { 49199 int miStart = mi; 49200 // no prefix byte 49201 setMachineCodes(mi++, (byte) 0xDD); 49202 emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(7)); 49203 if (lister != null) lister.RN(miStart, "FNSTSW", baseReg); 49204 } 49205 49206 /** 49207 * store FPU status word, ignoring exceptions - register index 49208 * 49209 * @param baseReg destination base register 49210 * @param indexReg destination index register 49211 * @param scale destination scale 49212 * @param disp destination displacement 49213 */ 49214 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2}) 49215 public final void emitFNSTSW_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) { 49216 int miStart = mi; 49217 // no prefix byte 49218 setMachineCodes(mi++, (byte) 0xDD); 49219 emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(7)); 49220 if (lister != null) lister.RXD(miStart, "FNSTSW", baseReg, indexReg, scale, disp); 49221 } 49222 49223 /** 49224 * store FPU status word, ignoring exceptions - register offset 49225 * 49226 * @param indexReg destination index register 49227 * @param scale destination scale 49228 * @param disp destination displacement 49229 */ 49230 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49231 public final void emitFNSTSW_RegOff (GPR indexReg, short scale, Offset disp) { 49232 int miStart = mi; 49233 // no prefix byte 49234 setMachineCodes(mi++, (byte) 0xDD); 49235 emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(7)); 49236 if (lister != null) lister.RFD(miStart, "FNSTSW", indexReg, scale, disp); 49237 } 49238 49239 /** 49240 * store FPU status word, ignoring exceptions - absolute address 49241 * 49242 * @param disp address to store to 49243 */ 49244 public final void emitFNSTSW_Abs (Address disp) { 49245 int miStart = mi; 49246 // no prefix byte 49247 setMachineCodes(mi++, (byte) 0xDD); 49248 emitAbsRegOperands(disp, GPR.getForOpcode(7)); 49249 if (lister != null) lister.RA(miStart, "FNSTSW", disp); 49250 } 49251 49252 /** 49253 * load 1.0 into FP0 49254 * 49255 * @param dstReg must be FP0 49256 */ 49257 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49258 public final void emitFLD1_Reg(FPR dstReg) { 49259 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 49260 int miStart = mi; 49261 setMachineCodes(mi++, (byte) 0xD9); 49262 setMachineCodes(mi++, (byte) 0xE8); 49263 if (lister != null) lister.R(miStart, "FLD1", dstReg); 49264 } 49265 49266 /** 49267 * load log_2(10) into FP0 49268 * 49269 * @param dstReg must be FP0 49270 */ 49271 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49272 public final void emitFLDL2T_Reg(FPR dstReg) { 49273 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 49274 int miStart = mi; 49275 setMachineCodes(mi++, (byte) 0xD9); 49276 setMachineCodes(mi++, (byte) 0xE9); 49277 if (lister != null) lister.R(miStart, "FLDL2T", dstReg); 49278 } 49279 49280 /** 49281 * load log_2(e) into FP0 49282 * 49283 * @param dstReg must be FP0 49284 */ 49285 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49286 public final void emitFLDL2E_Reg(FPR dstReg) { 49287 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 49288 int miStart = mi; 49289 setMachineCodes(mi++, (byte) 0xD9); 49290 setMachineCodes(mi++, (byte) 0xEA); 49291 if (lister != null) lister.R(miStart, "FLDL2E", dstReg); 49292 } 49293 49294 /** 49295 * load pi into FP0 49296 * 49297 * @param dstReg must be FP0 49298 */ 49299 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49300 public final void emitFLDPI_Reg(FPR dstReg) { 49301 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 49302 int miStart = mi; 49303 setMachineCodes(mi++, (byte) 0xD9); 49304 setMachineCodes(mi++, (byte) 0xEB); 49305 if (lister != null) lister.R(miStart, "FLDPI", dstReg); 49306 } 49307 49308 /** 49309 * load log_10(2) into FP0 49310 * 49311 * @param dstReg must be FP0 49312 */ 49313 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49314 public final void emitFLDLG2_Reg(FPR dstReg) { 49315 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 49316 int miStart = mi; 49317 setMachineCodes(mi++, (byte) 0xD9); 49318 setMachineCodes(mi++, (byte) 0xEC); 49319 if (lister != null) lister.R(miStart, "FLDLG2", dstReg); 49320 } 49321 49322 /** 49323 * load log_e(2) into FP0 49324 * 49325 * @param dstReg must be FP0 49326 */ 49327 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49328 public final void emitFLDLN2_Reg(FPR dstReg) { 49329 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 49330 int miStart = mi; 49331 setMachineCodes(mi++, (byte) 0xD9); 49332 setMachineCodes(mi++, (byte) 0xED); 49333 if (lister != null) lister.R(miStart, "FLDLN2", dstReg); 49334 } 49335 49336 /** 49337 * load 0.0 into FP0 49338 * 49339 * @param dstReg must be FP0 49340 */ 49341 @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1}) 49342 public final void emitFLDZ_Reg(FPR dstReg) { 49343 if (VM.VerifyAssertions) VM._assert(dstReg == FP0); 49344 int miStart = mi; 49345 setMachineCodes(mi++, (byte) 0xD9); 49346 setMachineCodes(mi++, (byte) 0xEE); 49347 if (lister != null) lister.R(miStart, "FLDZ", dstReg); 49348 } 49349 49350}