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 &lt;&lt; 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&lt;&lt;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&lt;&lt;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&lt;&lt;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 &lt;- 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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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] &amp;=  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&lt;&lt;dstScale + dstDisp] &amp;=  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] &amp;=  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&lt;&lt;dstScale + dstDisp] &amp;=  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] &amp;=  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 &amp;=  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 &amp;=  [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 &amp;=  [srcIndex&lt;&lt;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 &amp;=  [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 &amp;=  [srcBase + srcIndex&lt;&lt;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 &amp;=  [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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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 &amp;=  (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 &amp;=  (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 &amp;=  (word)  [srcIndex&lt;&lt;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 &amp;=  (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 &amp;=  (word)  [srcBase + srcIndex&lt;&lt;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 &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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 &amp;=  (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 &amp;=  (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 &amp;=  (quad)  [srcIndex&lt;&lt;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 &amp;=  (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 &amp;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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 &amp;=  (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 &amp;=  (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 &amp;=  (byte)  [srcIndex&lt;&lt;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 &amp;=  (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 &amp;=  (byte)  [srcBase + srcIndex&lt;&lt;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 &amp;=  (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 &amp;=  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] &amp;=  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&lt;&lt;dstScale + dstDisp] &amp;=  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] &amp;=  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&lt;&lt;dstScale + dstDisp] &amp;=  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] &amp;=  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 &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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 &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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 &amp;= (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] &amp;= (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&lt;&lt;scale + dstDisp] &amp;= (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&lt;&lt;dstScale + dstDisp] &amp;= (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] &amp;= (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] &amp;= (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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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] &amp;=  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&lt;&lt;dstScale + dstDisp] &amp;=  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] &amp;=  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&lt;&lt;dstScale + dstDisp] &amp;=  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] &amp;=  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 &amp;=  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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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 &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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 &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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 &amp;=  (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 &amp;=  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] &amp;=  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&lt;&lt;dstScale + dstDisp] &amp;=  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] &amp;=  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&lt;&lt;dstScale + dstDisp] &amp;=  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] &amp;=  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 &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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 &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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&lt;&lt;dstScale + dstDisp] &amp;=  (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] &amp;=  (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 &amp;= (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] &amp;= (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&lt;&lt;scale + dstDisp] &amp;= (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&lt;&lt;dstScale + dstDisp] &amp;= (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] &amp;= (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] &amp;= (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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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] &lt;-&gt;=  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&lt;&lt;dstScale + dstDisp] &lt;-&gt;=  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] &lt;-&gt;=  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&lt;&lt;dstScale + dstDisp] &lt;-&gt;=  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] &lt;-&gt;=  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 &lt;-&gt;=  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] &lt;-&gt;=  (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&lt;&lt;dstScale + dstDisp] &lt;-&gt;=  (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] &lt;-&gt;=  (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&lt;&lt;dstScale + dstDisp] &lt;-&gt;=  (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] &lt;-&gt;=  (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 &lt;-&gt;=  (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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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 &lt;&lt;= 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] &lt;&lt;= 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] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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] &lt;&lt;= 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 &lt;&lt;= 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] &lt;&lt;= 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] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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] &lt;&lt;= 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 &lt;&lt;= 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] &lt;&lt;= 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] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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] &lt;&lt;= 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 &lt;&lt;= 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] &lt;&lt;= 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] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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] &lt;&lt;= 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 &lt;&lt;= 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] &lt;&lt;= 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] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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] &lt;&lt;= 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 &lt;&lt;= 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] &lt;&lt;= 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] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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] &lt;&lt;= 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 &lt;&lt;= 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] &lt;&lt;= 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] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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] &lt;&lt;= 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 &lt;&lt;= 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] &lt;&lt;= 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] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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&lt;&lt;scale + disp] &lt;&lt;= 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] &lt;&lt;= 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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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&lt;&lt;dstScale + dstDisp] &lt;&lt;=  (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] &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcIndex&lt;&lt;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 &lt;&lt;=  (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 &lt;&lt;=  (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 &lt;&lt;=  (quad)  [srcBase + srcIndex&lt;&lt;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 &lt;&lt;=  (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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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&lt;&lt;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}