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     */
013    package org.jikesrvm.compilers.common.assembler.ia32;
014    
015    import org.jikesrvm.*;
016    import org.jikesrvm.runtime.Magic;
017    import org.jikesrvm.compilers.baseline.ia32.BaselineCompilerImpl;
018    import org.jikesrvm.ia32.OutOfLineMachineCode;
019    import org.jikesrvm.ia32.RegisterConstants;
020    import org.jikesrvm.compilers.common.assembler.ForwardReference;
021    import org.jikesrvm.compilers.common.assembler.AbstractAssembler;
022    import static org.jikesrvm.ia32.RegisterConstants.GPR;
023    
024    import org.vmmagic.pragma.*;
025    import org.vmmagic.unboxed.*;
026    
027    /**
028     *  <P> This class is the low-level assembler for Intel; it contains
029     * functionality for encoding specific instructions into an array of
030     * bytes.  It consists of three parts: </P>
031     * <UL>
032     *  <LI> Some support that handles common operations for generating
033     *       any IA32 instruction, such as encoding the operands into the
034     *       ModRM and SIB bytes
035     *  <LI> Some hand-coded methods that emit instructions with
036     *       distinctive formats or with special consistency requirements,
037     *       such as FXCH or CMOV
038     *  <LI> Machine-generated methods that emit instructions with
039     *       relatively standard formats, such as binary accumulation
040     *       instructions like ADD and SUB.
041     * </UL>
042     *  <P> This assembler provides a direct interface to the IA32 ISA: it
043     * contains emit methods that generate specific IA32 opcodes, and each
044     * emit method specifies the addressing modes and operand sizes that
045     * it expects.  Thus, it has an emit method that generates an ADD of a
046     * register-displacement operand  and an immediate operand.  It is the
047     * job of the client to determine the addressing modes, operand
048     * sizes and exact opcodes that it desires. </P>
049     *
050     *  <P> This assembler does provide support for forward branches.  It
051     * is permitted to specify a branch operand as an arbitrary label, and
052     * later to inform the assembler to which instruction this label
053     * refers.  The assembler, when informed to what the label refers,
054     * will go back and generate the appropriate offsets for all branches
055     * that refer to the given label. The mechanism is implemented by the
056     * following methods and helper classes:
057     * <UL>
058     * <LI> {@link #forwardRefs}
059     * <LI> {@link #resolveForwardReferences}
060     * <LI> {@link #patchUnconditionalBranch}
061     * <LI> {@link #patchConditionalBranch}
062     * <LI> {@link #emitJCC_Cond_Label}
063     * <LI> {@link #emitJMP_Label}
064     * <LI> {@link #emitCALL_Label}
065     * <LI> {@link ForwardReference}
066     * </UL>
067     * </P>
068     *
069     *  <P> There is also support for generating tableswitches.  This
070     * consists providing support for storing tables of relative addresses
071     * that can be used to compute the target of a tableswitch.  This
072     * support assumes a particular code sequence for tableswitches
073     * (followed by baseline and optimizing compilers).  See {@link
074     * #emitOFFSET_Imm_ImmOrLabel} for details. </P>
075     *
076     *  <P> The automatically-generated emit methods of this assembler
077     * exploit regularities in the IA32 binary encoding; for example,
078     * several instructions (ADD, ADC, SUB, AND, OR, XOR) can be
079     * classified as binary accumulators that share a common set of
080     * permitted addressing modes and binary encoding all the way down a
081     * special case for enconding operands EAX and an immediate.  A shell
082     * script (genAssembler.sh in the intel assembler source directory)
083     * explots this by specifying a generic way of emtting a binary
084     * accumulation and then calling it for each specific opcode that fits
085     * that format.  These generated methods are combined with the
086     * hand-coded ones (from Assembler.in, also in the assembler
087     * source directory) as part of the Jikes RVM build process. </P>
088     *
089     *  <P> This assembler is shared by the baseline and optimizing
090     * compilers: it used directly by the baseline compiler, while the
091     * optimizing compiler has an {@link org.jikesrvm.ArchitectureSpecificOpt.AssemblerOpt}
092     * that is built on top of this one to match
093     * {@link org.jikesrvm.compilers.opt.ir.Instruction}s and
094     * {@link org.jikesrvm.compilers.opt.ir.Operator}s to the emit methods
095     * this assembler provides.  The {@link org.jikesrvm.ArchitectureSpecificOpt.AssemblerOpt}
096     * is entirely machine-generated, and this
097     * requires that the methods for encoding instructions use a stylized
098     * naming and signiture convention that is designed to make the method
099     * signiture computable from the opcode and the operand types.  The
100     * naming convention is as follows:
101     *
102     * <PRE>
103     *   final void emit<EM>opcode</EM>\(_<EM>operand code</EM>\)*[_<EM>size</EM>](\(<EM>operand arguments</EM>\)*)
104     * </PRE>
105     *
106     * where the following substitutions are made:
107     * <DL>
108     * <DT> <EM>opcode</EM>
109     * <DI> is the opcode of the instruction (e.g. ADC, MOV, etc)
110     *
111     * <DT> <EM>operand code</EM>
112     * <DI> represents the type of the nth operand:
113     *   <DL>
114     *   <DT> "Imm"     <DI> immediate operands
115     *   <DT> "Reg"     <DI> register operands
116     *   <DT> "RegInd"  <DI> register indirect operands
117     *   <DT> "RegDisp" <DI> register displacement
118     *   <DT> "RegOff"  <DI> shifted index + displacement
119     *   <DT> "RegIdx"  <DI> register base + shifted index + displacement
120     *   <DT> "Cond"    <DI> condition codes
121     *   </DL>
122     *
123     * <DT> <EM>size</EM>
124     * <DI> indicates non-word-sized operations
125     *   <DL>
126     *   <DT> "Byte"    <DI> bytes
127     *   <DT> "Word"    <DI> Intel "words" (i.e. 16 bites)
128     *   <DT> "Quad"    <DI> quad words (i.e. double-precision floating point)
129     *   </DL>
130     *
131     * <DT> <EM>operand arguments</EM>
132     * <DI> are the needed components of the operands, in order
133     *  <DL>
134     *  <DT> "Imm"
135     *  <DI>
136     *    <UL>
137     *     <LI> immediate value (int)
138     *    </UL>
139     *  <DT> "Reg"
140     *  <DI>
141     *    <UL>
142     *     <LI> register number (byte)
143     *    </UL>
144     *  <DT> "RegInd"
145     *  <DI>
146     *    <UL>
147     *     <LI> register number (byte)
148     *    </UL>
149     *  <DT> "RegDisp"
150     *  <DI>
151     *    <UL>
152     *     <LI> register number (byte)
153     *     <LI> displacement (int)
154     *    </UL>
155     *  <DT> "RegOff"
156     *  <DI>
157     *    <UL>
158     *     <LI> index register (byte)
159     *     <LI> scale (short)
160     *     <LI> displacement (int)
161     *    </UL>
162     *  <DT> "RegIdx"
163     *  <DI>
164     *    <UL>
165     *     <LI> base register (byte)
166     *     <LI> index register (byte)
167     *     <LI> scale (short)
168     *     <LI> displacement (int)
169     *    </UL>
170     *  <DT> "Cond"
171     *  <DI>
172     *    <UL>
173     *     <LI> condition code mask (byte)
174     *    </UL>
175     *  </DL>
176     * </DL>
177     *
178     * @see org.jikesrvm.ArchitectureSpecificOpt.AssemblerOpt
179     * @see Lister
180     * @see ForwardReference
181     *
182    */
183    public abstract class Assembler extends AbstractAssembler implements RegisterConstants, AssemblerConstants {
184    
185      /**
186       * The lister object is used to print generated machine code.
187       */
188      protected final Lister lister;
189    
190      /**
191       * The array holding the generated binary code.
192       */
193      private byte [] machineCodes;
194    
195      /**
196       * The current end of the generated machine code
197       */
198      protected int mi;
199    
200      /**
201       * Create an assembler with a given machine code buffer size that
202       * will not print the machine code as it generates it.
203       * The buffer size is merely a heuristic, because the assembler will
204       * expand its buffer if it becomes full.
205       *
206       * @param bytecodeSize initial machine code buffer size.
207       */
208      protected Assembler (int bytecodeSize) {
209        this(bytecodeSize, false);
210      }
211    
212      /**
213       * Create an assembler with a given machine code buffer size and
214       * tell it whether or not to print machine code as it generates it.
215       * The buffer size is merely a heuristic, because the assembler will
216       * expand its buffer if it becomes full.
217       *
218       * @param bytecodeSize initial machine code buffer size.
219       * @param shouldPrint whether to dump generated machine code.
220       */
221      protected Assembler (int bytecodeSize, boolean shouldPrint) {
222        machineCodes = new byte[bytecodeSize*CODE_EXPANSION_FACTOR + CODE_OVERHEAD_TERM];
223        lister = shouldPrint ? new Lister((ArchitectureSpecific.Assembler) this) : null;
224      }
225    
226      /**
227       * Create an assembler with a given machine code buffer size and
228       * tell it whether or not to print machine code as it generates it.
229       * The buffer size is merely a heuristic, because the assembler will
230       * expand its buffer if it becomes full.
231       *
232       * @param bytecodeSize initial machine code buffer size.
233       * @param shouldPrint whether to dump generated machine code.
234       * @param comp BaselineCompilerImpl instance that this assembler is associated with;
235       *           currently ignored on IA32.
236       */
237      protected Assembler (int bytecodeSize, boolean shouldPrint, BaselineCompilerImpl comp) {
238        this(bytecodeSize, shouldPrint);
239      }
240    
241      /**
242       * Heuristic constant used to calculate initial size of the machine
243       * code buffer.  This is an average of how many bytes of generated
244       * code come from a given bytecode in the baseline compiler.
245       */
246      private static final int CODE_EXPANSION_FACTOR =  12;
247    
248      /**
249       * Heuristic constant used to calculate initial size of the machine
250       * code buffer.  This is an estimate of the fixed method overhead
251       * code generated by the baseline compiler, such as method
252       * prologue.
253       */
254      private static final int CODE_OVERHEAD_TERM    = 100;
255    
256      /**
257       * Return the current offset in the generated code buffer of the
258       * end of the genertaed machine code.
259       *
260       * @return the end of the generated machine code.
261       */
262      public final int getMachineCodeIndex () {
263        return mi;
264      }
265    
266      /**
267       * Set the given byte offset in the machine code array to the
268       * given byte value.  This is the low-level function by which the
269       * assembler produces binary code into its machine code buffer.
270       * This function will resize the underlying machine code array if
271       * the index given exceeds the array's length.
272       *
273       * @param index the byte offset into which to write
274       * @param data the byte data value to write
275       */
276      @NoNullCheck
277      @NoBoundsCheck
278      protected final void setMachineCodes(int index, byte data) {
279        if(index < machineCodes.length) {
280          machineCodes[index] = data;
281        } else {
282          growMachineCodes(index, data);
283        }
284      }
285    
286      @NoInline
287      private void growMachineCodes(int index, byte data) {
288        byte [] old = machineCodes;
289        machineCodes = new byte [2 * old.length ];
290        System.arraycopy(old, 0, machineCodes, 0, old.length);
291        machineCodes[index] = data;
292      }
293    
294    
295      /**
296       * Create a MachineCode object
297       */
298      public final ArchitectureSpecific.MachineCode finalizeMachineCode(int[] bytecodeMap) {
299        return new ArchitectureSpecific.MachineCode(getMachineCodes(), bytecodeMap);
300      }
301    
302      /**
303       * Should code created by this assembler instance be allocated in the
304       * hot code code space? By default the answer is false (ie, no).
305       */
306      protected boolean isHotCode() { return false; }
307    
308      /**
309       * Return a copy of the generated code as a CodeArray.
310       * @return a copy of the generated code as a CodeArray.
311       */
312      public final ArchitectureSpecific.CodeArray getMachineCodes () {
313        int len = getMachineCodeIndex();
314        ArchitectureSpecific.CodeArray trimmed = ArchitectureSpecific.CodeArray.Factory.create(len, isHotCode());
315        for (int i=0; i<len; i++) {
316          trimmed.set(i, machineCodes[i]);
317        }
318        return trimmed;
319      }
320    
321      /**
322       * Give the lister a message associated with a particular
323       * bytecode.  This is used by the baseline assembler to print the
324       * bytecode associated with portions of machine code.  (The
325       * optimizing compiler does not do this because its association
326       * between bytecodes and generated code is much less direct).
327       *
328       * @param bytecodeNumber the offset of the current bytecode in the
329       *     current method's bytecode array.
330       * @param bc a message descriptive of the current bytecode.
331       */
332      public final void noteBytecode (int bytecodeNumber, String bc) {
333        if (lister != null) lister.noteBytecode(bytecodeNumber, bc);
334      }
335    
336      @NoInline
337      public final void noteBytecode (int i, String bcode, int x) {
338        noteBytecode(i, bcode+" "+x);
339      }
340    
341      @NoInline
342      public final void noteBytecode (int i, String bcode, long x) {
343        noteBytecode(i, bcode+" "+x);
344      }
345    
346      @NoInline
347      public final void noteBytecode (int i, String bcode, Object o) {
348        noteBytecode(i, bcode+" "+o);
349      }
350    
351      @NoInline
352      public final void noteBytecode (int i, String bcode, int x, int y) {
353        noteBytecode(i, bcode+" "+x+" "+y);
354      }
355    
356      @NoInline
357      public final void noteBranchBytecode (int i, String bcode, int off,
358                   int bt) {
359        noteBytecode(i, bcode +" "+off+" ["+bt+"] ");
360      }
361    
362      @NoInline
363      public final void noteTableswitchBytecode (int i, int l, int h, int d) {
364        noteBytecode(i, "tableswitch [" + l + "--" + h + "] " + d);
365      }
366    
367      @NoInline
368      public final void noteLookupswitchBytecode (int i, int n, int d) {
369        noteBytecode(i, "lookupswitch [<" + n + ">]" + d);
370      }
371    
372      /**
373       * Inform the lister of a comment related to the currently
374       * generated machine code.
375       *
376       * @param comment a comment string
377       */
378      public final void comment (String comment) {
379        if (lister != null) lister.comment(mi, comment);
380      }
381    
382      /**
383       * Print the raw bits of the current instruction.  It takes the
384       * start of the instruction as a parameter, and prints from that
385       * start to the current machine code index.
386       *
387       * @see #getMachineCodeIndex
388       *
389       * @param start the starting index of the last instruction.
390       */
391      public final void writeLastInstruction(int start) {
392        for (int j=start; j<mi; j++) {
393          if (j < machineCodes.length) {
394            VM.sysWrite(Lister.hex(machineCodes[j]));
395          } else {
396            VM.sysWrite(Lister.hex((byte)0x0));
397          }
398        }
399      }
400    
401      /**
402       * Find out whether a given signed value can be represented in a
403       * given number of bits.
404       *
405       * @param val the value to be represented
406       * @param bits the number of bits to use.
407       * @return true if val can be encoded in bits.
408       */
409      @Inline
410      protected static boolean fits (Offset val, int bits) {
411        return fits(val.toWord(), bits);
412      }
413    
414      /**
415       * Find out whether a given signed value can be represented in a
416       * given number of bits.
417       *
418       * @param val the value to be represented
419       * @param bits the number of bits to use.
420       * @return true if val can be encoded in bits.
421       */
422      @Inline
423      protected static boolean fits (Address val, int bits) {
424        return fits(val.toWord(), bits);
425      }
426    
427      /**
428       * Find out whether a given signed value can be represented in a
429       * given number of bits.
430       *
431       * @param val the value to be represented
432       * @param bits the number of bits to use.
433       * @return true if val can be encoded in bits.
434       */
435      @Inline
436      protected static boolean fits (Word val, int bits) {
437        Word o = val.rsha(bits-1);
438        return (o.isZero() || o.isMax());
439      }
440    
441      /**
442       * Find out whether a given signed value can be represented in a
443       * given number of bits.
444       *
445       * @param val the value to be represented
446       * @param bits the number of bits to use.
447       * @return true if val can be encoded in bits.
448       */
449      @Inline
450      protected static boolean fits (int val, int bits) {
451        val = val >> bits-1;
452        return (val == 0 || val == -1);
453      }
454    
455      /**
456       * In the representation of addressing modes in the ModRM and SIB
457       * bytes, the code for register-displacement for on ESP has a
458       * special meaning.  Thus, when register-displacement mode using ESP
459       * is desired, this special SIB (scale-index-base) byte must be
460       * emitted.
461       */
462      private static final byte SIBforESP = (byte) ((0<<6) + (4<<3) + ESP.value()); // (scale factor 1) no index, ESP is base
463    
464      /**
465       * Generate a REX prefix if necessary
466       *
467       * @param W is a quad word override needed
468       * @param R_reg extension of the modrm field
469       * @param X_reg extension of the SIB index field
470       * @param B_reg extension of the modrm field, SIB base or opcode reg field
471       */
472      @Inline
473      private void generateREXprefix(boolean W, MachineRegister R_reg, MachineRegister X_reg, MachineRegister B_reg) {
474        boolean R = R_reg != null && R_reg.needsREXprefix();
475        boolean X = X_reg != null && X_reg.needsREXprefix();
476        boolean B = B_reg != null && B_reg.needsREXprefix();
477        if (W || R || X || B) {
478          if (VM.VerifyAssertions) VM._assert(!VM.buildFor32Addr());
479          byte prefixByte = (byte)(0x40 | (W ? 8 : 0) | (R ? 4 : 0) | (X ? 2 : 0) | (B ? 1 : 0));
480          setMachineCodes(mi++, prefixByte);
481        }
482      }
483    
484      /**
485       * Return a ModRM byte encoding a source and destination register
486       * (i.e. for a register-register instruction).
487       *
488       * @param reg1 the r/m register.
489       * @param reg2 the other register or extended opcode.
490       * @return the encoded ModRM byte.
491       */
492      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
493      private byte regRegModRM(MachineRegister reg1, MachineRegister reg2) {
494        return (byte) ((3 << 6) | ((reg2.value() & 7) << 3) | (reg1.value() & 0x7));
495      }
496    
497      /**
498       * Return a ModRM byte encoding a source register-32-bit-displacement
499       * operand and a destination register.  Note that the displacement
500       * is handled separately, and not encoded in the ModRM itself.
501       *
502       * @param reg1 the r/m register.
503       * @param reg2 the other register or extended opcode.
504       * @return the encoded ModRM byte.
505       */
506      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
507      private byte regDisp32RegModRM(MachineRegister reg1, MachineRegister reg2) {
508        return (byte) ((2 << 6) | ((reg2.value() & 7)<< 3) | (reg1.value() & 7));
509      }
510    
511      /**
512       * Return a ModRM byte encoding a source register-8-bit-displacement
513       * operand and a destination register.  Note that the displacement
514       * is handled separately, and not encoded in the ModRM itself.
515       *
516       * @param reg1 the r/m register.
517       * @param reg2 the other register or extended opcode.
518       * @return the encoded ModRM byte.
519       */
520      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
521      private byte regDisp8RegModRM(MachineRegister reg1, MachineRegister reg2) {
522        return (byte) ((1 << 6) | ((reg2.value() & 7) << 3) | (reg1.value() & 7));
523      }
524    
525      /**
526       * Return a ModRM byte encoding a source register-indirect
527       * operand and a destination register.
528       *
529       * @param reg1 the r/m register.
530       * @param reg2 the other register or extended opcode.
531       * @return the encoded ModRM byte.
532       */
533      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
534      private byte regIndirectRegModRM(MachineRegister reg1, MachineRegister reg2) {
535        return (byte) (((reg2.value() & 7) << 3) | (reg1.value() & 7));
536      }
537    
538      /**
539       * The more complex IA32 addressing modes require a
540       * scale-index-base (SIB) byte.  This is used to encode addressing
541       * modes such as [ indexReg \<\< scale + baseReg ].  This method
542       * encodes the SIB byte for a given base, index and scale.
543       *
544       * @param scale the shift amount for the index register value.
545       * @param baseReg the base register.
546       * @param indexReg the index register.
547       * @return the encoded SIB byte.
548       */
549      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
550      private byte sib(short scale, MachineRegister baseReg, MachineRegister indexReg) {
551        return (byte) ((scale << 6) | ((indexReg.value() & 7) << 3) | (baseReg.value() & 7));
552      }
553    
554      /**
555       * Generate the appropriate bytes into the generated machine code
556       * to represent a register-register instruction.
557       *
558       * @param reg1 the r/m operand.
559       * @param reg2 the other register or extended opcode.
560       */
561      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
562      private void emitRegRegOperands(MachineRegister reg1, MachineRegister reg2) {
563        setMachineCodes(mi++, regRegModRM(reg1, reg2));
564      }
565    
566      /**
567       * Generate the appropriate bytes into the generated machine code
568       * to represent a register-32-bit-displacement--register
569       * instruction. This method generates the appropriate ModRM, the SIB
570       * if needed for the ESP special case, and the little-endian encoded
571       * 32 bit displacement.
572       *
573       * @see #SIBforESP
574       *
575       * @param reg1 the r/m operand.
576       * @param disp the 32 bit displacement.
577       * @param reg2 the other register or extended opcode.
578       */
579      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
580      private void emitRegDisp32RegOperands(MachineRegister reg1, int disp, MachineRegister reg2) {
581        setMachineCodes(mi++, regDisp32RegModRM(reg1, reg2));
582        if (reg1 == ESP) setMachineCodes(mi++, SIBforESP);
583        emitImm32(disp);
584      }
585    
586      /**
587       * Generate the appropriate bytes into the generated machine code
588       * to represent a register-8-bit-displacement--register
589       * instruction. This method generates the appropriate ModRM, the SIB
590       * if needed for the ESP special case, and the little-endian encoded
591       * 32 bit displacement.
592       *
593       * @see #SIBforESP
594       *
595       * @param reg1 the r/m operand.
596       * @param disp the 8 bit displacement.
597       * @param reg2 the other register or extended opcode.
598       */
599      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
600      private void emitRegDisp8RegOperands(MachineRegister reg1, byte disp, MachineRegister reg2) {
601        setMachineCodes(mi++, regDisp8RegModRM(reg1, reg2));
602        if (reg1 == ESP) setMachineCodes(mi++, SIBforESP);
603        emitImm8(disp);
604      }
605    
606      /**
607       * Generate the appropriate bytes into the generated machine code
608       * to represent a register-displacement--register instruction.  This
609       * method simply chooses the appropriate lower-level method based on
610       * displacement size
611       *
612       * @see #emitRegDisp32RegOperands
613       * @see #emitRegDisp8RegOperands
614       *
615       * @param reg1 the r/m operand.
616       * @param disp the displacement.
617       * @param reg2 the other register or extended opcode.
618       */
619      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
620      private void emitRegDispRegOperands(MachineRegister reg1, Offset disp, MachineRegister reg2) {
621        if (reg1 == GPR.EIP) {
622          setMachineCodes(mi++, regIndirectRegModRM(EBP, reg2)); // EBP == RIP addressing mode
623          emitImm32(disp);
624        } else if (fits(disp,8)) {
625          emitRegDisp8RegOperands(reg1, (byte)disp.toInt(), reg2);
626        } else {
627          if (VM.VerifyAssertions) VM._assert(fits(disp,32));
628          emitRegDisp32RegOperands(reg1, disp.toInt(), reg2);
629        }
630      }
631    
632      /**
633       * Generate the appropriate bytes into the generated machine code
634       * to express a register-indirect--register instruction.  This
635       * method handles low-level encoding issues, specifically the
636       * special cases for register indirect mode on ESP and EBP.  Using
637       * ESP requires an SIB byte, and EBP cannot be used in indirect mode
638       * at all (that encoding is used to express scaled-index-displacement
639       * mode) so this method uses register-displacement with a 0
640       * displacement to fake it.
641       *
642       * @see #emitRegDispRegOperands
643       *
644       * @param reg1 the r/m operand
645       * @param reg2 the other register or extended opcode
646       */
647      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
648      private void emitRegIndirectRegOperands(MachineRegister reg1, MachineRegister reg2) {
649        if (reg1 == EBP) {
650          emitRegDispRegOperands(reg1, Offset.zero(), reg2);
651        } else {
652          setMachineCodes(mi++, regIndirectRegModRM(reg1, reg2));
653          if (reg1 == ESP) setMachineCodes(mi++, SIBforESP);
654        }
655      }
656    
657      /**
658       * Generate the appropriate bytes into the generated code to denote
659       * a scaled-register+displacement--register instruction.  This
660       * expresses the case where the SIB byte is used, but no base
661       * register is desired.  This method handles the somewhat convoluted
662       * special case used to express this mode (the r/m register is 4/ESP and
663       * the base register must be 5/EBP).
664       *
665       * @param index the index register for the r/m operand
666       * @param scale the amount to shift the index register
667       * @param disp the displacement for the r/m operand
668       * @param reg2 the other operand or the extended opcode
669       */
670      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
671      private void emitRegOffRegOperands(MachineRegister index, short scale, Offset disp, MachineRegister reg2) {
672        setMachineCodes(mi++, regIndirectRegModRM(ESP, reg2));
673        setMachineCodes(mi++, sib(scale, EBP, index));
674        emitImm32(disp);
675      }
676    
677      /**
678       * Generate the appropriate bytes into the generated code to denote
679       * an absolute-address--register instruction.
680       *
681       * @param disp the displacement for the r/m operand
682       * @param reg2 the other operand or the extended opcode
683       */
684      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
685      private void emitAbsRegOperands(Address disp, MachineRegister reg2) {
686        if (VM.buildFor32Addr()) {
687          setMachineCodes(mi++, regIndirectRegModRM(EBP, reg2)); // EBP == No displacement
688        } else {
689          setMachineCodes(mi++, regIndirectRegModRM(ESP, reg2)); // ESP == SIB byte
690          setMachineCodes(mi++, sib((short)0, EBP, ESP)); // EBP+ESP<<0 == no SIB
691        }
692        emitImm32(disp);
693      }
694    
695      /**
696       * Generate the full glory of scaled-index-base-displacement
697       * addressing to the generated machine code.  This method handles
698       * various special cases, mostly choosing the smallest displacement
699       * possible.
700       *
701       * @param base the base register for the r/m operand
702       * @param index the index register for the r/m operand
703       * @param scale the amount to shift the index register
704       * @param disp the displacement for the r/m operand
705       * @param reg2 the other operand or the extended opcode
706       */
707      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
708      private void emitSIBRegOperands(MachineRegister base, MachineRegister index, short scale, Offset disp, MachineRegister reg2) {
709        if (VM.VerifyAssertions) VM._assert(index != ESP);
710        if (disp.EQ(Offset.zero()) && base != EBP) {
711          setMachineCodes(mi++, regIndirectRegModRM(ESP, reg2));
712          setMachineCodes(mi++, sib(scale, base, index));
713        } else if (fits(disp,8)) {
714          setMachineCodes(mi++, regDisp8RegModRM(ESP, reg2));
715          setMachineCodes(mi++, sib(scale, base, index));
716          emitImm8((byte)disp.toInt());
717        } else {
718          setMachineCodes(mi++, regDisp32RegModRM(ESP, reg2));
719          setMachineCodes(mi++, sib(scale, base, index));
720          emitImm32(disp);
721        }
722      }
723    
724      /**
725       * Generate the smallest-byte-first IA32 encoding of 32 bit
726       * immediates into the generated code.
727       *
728       * @param disp the displacement to generate.
729       */
730      @Inline
731      private void emitImm32(Offset disp) {
732        emitImm32(disp.toWord());
733      }
734    
735      /**
736       * Generate the smallest-byte-first IA32 encoding of 32 bit
737       * immediates into the generated code.
738       *
739       * @param disp the displacement to generate.
740       */
741      @Inline
742      private void emitImm32(Address disp) {
743        emitImm32(disp.toWord());
744      }
745    
746      /**
747       * Generate the smallest-byte-first IA32 encoding of 32 bit
748       * immediates into the generated code.
749       *
750       * @param disp the displacement to generate.
751       */
752      @Inline
753      private void emitImm32(Word disp) {
754        if (VM.VerifyAssertions) VM._assert(fits(disp,32));
755        mi = emitImm32(disp.toInt(), mi);
756      }
757    
758      /**
759       * Generate the smallest-byte-first IA32 encoding of 32 bit
760       * immediates into the generated code.
761       *
762       * @param imm the immediate to generate.
763       */
764      @Inline
765      private void emitImm32(int imm) {
766        mi = emitImm32(imm, mi);
767      }
768    
769      /**
770       * Generate the smallest-byte first x86_64 encoding of the 64 bit
771       * immeditate into the generated code.
772       *
773       * @param imm the immediate the generate;
774       */
775      @Inline
776      private void emitImm64(long imm) {
777        mi = emitImm64(imm, mi);
778      }
779    
780      /**
781       * Generate the IA32 encoding of an 16 bit immediate into the
782       * generated code.
783       *
784       * @param imm the immediate to generate.
785       */
786      @Inline
787      private void emitImm16(int imm) {
788        mi = emitImm16(imm, mi);
789      }
790    
791      /**
792       * Generate the IA32 encoding of an 8 bit immediate into the
793       * generated code.
794       *
795       * @param imm the immediate to generate.
796       */
797      @Inline
798      private void emitImm8(int imm) {
799        mi = emitImm8(imm, mi);
800      }
801    
802      /**
803       * Generate the smallest-byte-first IA32 encoding of 16 bit
804       * immediates into the generated code at the location specified.
805       *
806       * @param imm the immediate to generate.
807       * @param idx the location in the generated code to write.
808       */
809      @Inline
810      private int emitImm16(int imm, int idx) {
811        setMachineCodes(idx++, (byte) ((imm >>  0) & 0xFF));
812        setMachineCodes(idx++, (byte) ((imm >>  8) & 0xFF));
813        return idx;
814      }
815    
816      /**
817       * Generate the smallest-byte-first IA32 encoding of 32 bit
818       * immediate into the generated code at the location specified.
819       *
820       * @param imm the immediate to generate.
821       * @param idx the location in the generated code to write.
822       */
823      @Inline
824      private int emitImm32(int imm, int idx) {
825        setMachineCodes(idx++, (byte) ((imm >>  0) & 0xFF));
826        setMachineCodes(idx++, (byte) ((imm >>  8) & 0xFF));
827        setMachineCodes(idx++, (byte) ((imm >> 16) & 0xFF));
828        setMachineCodes(idx++, (byte) ((imm >> 24) & 0xFF));
829        return idx;
830      }
831    
832      /**
833       * Generate the smallest-byte first x86_64 encoding of the 64 bit
834       * immeditate into the generated code at the location specified.
835       *
836       * @param imm the immediate the generate;
837       * @param idx the location in the generated code to write.
838       */
839      private int emitImm64(long imm, int idx) {
840          setMachineCodes(idx++, (byte) ((imm >>  0) & 0xFF));
841          setMachineCodes(idx++, (byte) ((imm >>  8) & 0xFF));
842          setMachineCodes(idx++, (byte) ((imm >>  16) & 0xFF));
843          setMachineCodes(idx++, (byte) ((imm >>  24) & 0xFF));
844          setMachineCodes(idx++, (byte) ((imm >>  32) & 0xFF));
845          setMachineCodes(idx++, (byte) ((imm >>  40) & 0xFF));
846          setMachineCodes(idx++, (byte) ((imm >>  48) & 0xFF));
847          setMachineCodes(idx++, (byte) ((imm >>  56) & 0xFF));
848          return idx;
849      }
850    
851      /**
852       * Generate the IA32 encoding of an 8 bit immediate into the
853       * generated code at the location specified.
854       *
855       * @param imm the immediate to generate.
856       * @param idx the location in the generated code to write.
857       */
858      @Inline
859      private int emitImm8(int imm, int idx) {
860        setMachineCodes(idx++, (byte) imm);
861        return idx;
862      }
863    
864      /**
865       * Generate a conditional opcode given the base opcode and the
866       * condition code desired.  The CMOVcc, SETcc and Jcc families of
867       * instructions all have opcodes defined as a base opcode plus some
868       * bits representing the condition code.  (of course, FCMOV does not
869       * this, since that would be too logical).
870       *
871       * @param opCode the base opcode to emit
872       * @param cond the condition code desired
873       */
874      @Inline
875      private void emitCondOpByte(byte opCode, byte cond) {
876        setMachineCodes(mi++, (byte) (opCode | cond));
877      }
878    
879      /**
880       * Generate a locking prefix word into the generated code.  Locking
881       * operations on IA32 are expressed by writing a locking byte before
882       * the instruction.
883       */
884      @Inline
885      public final void emitLockNextInstruction() {
886        setMachineCodes(mi++, (byte) 0xF0);
887        if (lister != null) lister.lockPrefix();
888      }
889    
890      /**
891       * Generate a branch likely prefix into the generated code.
892       */
893      @Inline
894      public final void emitBranchLikelyNextInstruction() {
895        setMachineCodes(mi++, (byte) 0x3E);
896        if (lister != null) lister.branchLikelyPrefix();
897      }
898    
899      /**
900       * Generate a branch unlikely prefix into the generated code.
901       */
902      @Inline
903      public final void emitBranchUnlikelyNextInstruction() {
904        setMachineCodes(mi++, (byte) 0x2E);
905        if (lister != null) lister.branchUnlikelyPrefix();
906      }
907    
908      /**
909       * Generate a patch point into the generated code.
910       * (1) force patch point to be 32 bit aligned by optionally
911       *   generating a nop.
912       * (2) emit a short branch (2 byte) around 3 bytes of nop.
913       * (3) If the the code is later patched, we first patch the 3
914       *   nop bytes to be the upper 24 bits of a long jump
915       *   instruction, then update the 2 bytes of the patch
916       *   point to be an unconditional jump with a 32 bit immediate.
917       */
918      @Inline
919      public final void emitPatchPoint() {
920        emitNOP((4-mi-1) & 3);
921        ForwardReference r = forwardJMP();
922        emitNOP(3);
923        r.resolve(this);
924      }
925    
926      /**
927       * Apply a patch.
928       * We expect the following instruction stream:
929       *  i1; JMP rel8; NOP; NOP; NOP; i2;
930       * where patchOffset is the index of the last NOP.
931       * We patch it to be
932       *  i1; JMP rel32; i2;
933       *
934       * @param code    the code array to patch
935       * @param patchOffset the offset of the last byte of the patch point
936       * @param rel32     the new immediate to use in the branch instruction
937       *          the code patcher is going to lay down before patchOffset
938       */
939      public static void patchCode(ArchitectureSpecific.CodeArray code, int patchOffset, int rel32) {
940        byte p0 = (byte)0xE9;
941        byte p1 = (byte) (rel32 & 0x000000ff);
942        byte p2 = (byte)((rel32 & 0x0000ff00) >>>  8);
943        byte p3 = (byte)((rel32 & 0x00ff0000) >>> 16);
944        byte p4 = (byte)((rel32 & 0xff000000) >>> 24);
945        if ((patchOffset & 0x2) == 0x2) {
946          // (a) lay down p4,p3,p2 one byte at a time
947          // (b) pick up the two bytes before p0 and then
948          //   lay down b2b1p0p1 as a word.
949          code.set(patchOffset--, p4);
950          code.set(patchOffset--, p3);
951          code.set(patchOffset--, p2);
952          patchOffset -= 2; // skip over p1, p0
953          byte b1 = code.get(patchOffset--);
954          byte b2 = code.get(patchOffset);
955          int patch = (((int)p1&0xff) << 24) | (((int)p0&0xff) << 16) |
956                      (((int)b1&0xff) << 8)  |  ((int)b2&0xff);
957          Magic.setIntAtOffset(code, Offset.fromIntSignExtend(patchOffset), patch);
958        } else {
959          // (a) lay down p4
960          // (b) lay down p0p1p2p3 as a word
961          code.set(patchOffset--, p4);
962          patchOffset -= 3; // skip over p0p1p2p3
963          int patch = (((int)p3&0xff) << 24) | (((int)p2&0xff) << 16) |
964                      (((int)p1&0xff) << 8)  |  ((int)p0&0xff);
965          Magic.setIntAtOffset(code, Offset.fromIntSignExtend(patchOffset), patch);
966        }
967      }
968    
969      /**
970       * Return the appropriate condition code if we want to
971       * reverse the sense of the branch
972       */
973      public final byte flipCode(byte cond) {
974        switch (cond) {
975          case EQ: return NE;
976          case NE: return EQ;
977          case LT: return GE;
978          case GT: return LE;
979          case LE: return GT;
980          case GE: return LT;
981          default: throw new InternalError("Unexpected condition code");
982        }
983      }
984    
985      /**
986       * Generate a forward JMP instruction into the generated code.
987       * This form is used when the compiler wants to hang onto the
988       * forward reference object and call resolve on it directly.  These
989       * forward references are not handled by the mechanism in the
990       * assembler; the client is responsible for calling resolve on the
991       * reference when generating the target instruction.  The baseline
992       * compiler uses this form for jumps within the machine code for a
993       * single bytecode.
994       */
995      public final ForwardReference forwardJMP () {
996        int miStart = mi;
997        ForwardReference r =  new ForwardReference.ShortBranch(mi);
998        setMachineCodes(mi++, (byte) 0xEB);
999        mi += 1; // leave space for displacement
1000        if (lister != null) lister.I(miStart, "JMP", 0);
1001        return r;
1002      }
1003    
1004      /**
1005       * Generate a forward Jcc instruction into the generated code.
1006       * This form is used when the compiler wants to hang onto the
1007       * forward reference object and call resolve on it directly.  These
1008       * forward references are not handled by the mechanism in the
1009       * assembler; the client is responsible for calling resolve on the
1010       * reference when generating the target instruction.  The baseline
1011       * compiler uses this form for jumps within the machine code for a
1012       * single bytecode.
1013       *
1014       * @param cond the condition code on which to branch
1015       */
1016      public final ForwardReference forwardJcc (byte cond) {
1017        int miStart = mi;
1018        ForwardReference r =  new ForwardReference.ShortBranch(mi);
1019        setMachineCodes(mi++, (byte) (0x70 + cond));
1020        mi += 1; // leave space for displacement
1021        if (lister != null) lister.I(miStart, "J" + CONDITION[cond], 0);
1022        return r;
1023      }
1024    
1025      /**
1026       * The set of outstanding forward references.  This list is used by
1027       * the assembler to keep track of all outstanding forward
1028       * references.  References are put on this list by the emit methods
1029       * for JMP and Jcc when they find a branch that is going forward.
1030       * Each reference must understand what instruction it is looking for
1031       * and how to patch its source instruction.  Then, when the client
1032       * calls resolveForwardBranches, the assembler searches this list to
1033       * find branches that match the instruction currently being
1034       * generated, and calls the resolve method on each one that does.
1035       *
1036       * All forward branches have a label as the branch target; clients
1037       * can arbirarily associate labels and instructions, but must be
1038       * consistent in giving the chosen label as the target of branches
1039       * to an instruction and calling resolveForwardBranches with the
1040       * given label immediately before emitting the target instruction.
1041       * See the header comments of ForwardReference for more details.
1042       */
1043      protected ForwardReference forwardRefs;
1044    
1045      /**
1046       * Resolve all forward branches that have the given target, and
1047       * make them branch to the instruction currently being generated.
1048       * Clients of the assembler call this method immediately before they
1049       * emit the instruction intended to be the target of the given
1050       * label.
1051       *
1052       * All forward branches have a label as the branch target; clients
1053       * can arbirarily associate labels and instructions, but must be
1054       * consistent in giving the chosen label as the target of branches
1055       * to an instruction and calling resolveForwardBranches with the
1056       * given label immediately before emitting the target instruction.
1057       * See the header comments of ForwardReference for more details.
1058       *
1059       * @param label the forward branch label to resolve
1060       */
1061      public final void resolveForwardReferences (int label) {
1062        if (forwardRefs == null) return; // premature optimization
1063        forwardRefs = ForwardReference.resolveMatching(this, forwardRefs, label);
1064      }
1065    
1066      /**
1067       * Set up a code sequence to push a return address. This involves pushing the
1068       * current instruction address, and setting up an ADD that gets resolved later.
1069       *
1070       * @param bReturn the return address that is to be loaded.
1071       */
1072      public final void generateLoadReturnAddress(int bReturn) {
1073        /* Push the IP */
1074        emitCALL_Imm(mi + 5);
1075        ForwardReference r = new ForwardReference.LoadReturnAddress(mi, bReturn);
1076        forwardRefs = ForwardReference.enqueue(forwardRefs, r);
1077        /* Fake MAX_INTEGER to ensure 32 bit immediate */
1078        emitADD_RegInd_Imm(ESP, Integer.MAX_VALUE);
1079      }
1080    
1081      /**
1082       * Patch the code sequence at sourceIndex to load the complete instruction address
1083       * of the current instruction.
1084       *
1085       * @param sourceIndex the machine code offset of the load return addres to patch.
1086       */
1087      @Override
1088      public final void patchLoadReturnAddress(int sourceIndex) {
1089        /* We have the following pattern:
1090         * | PUSH EIP | [SP] += | IMM32 |
1091         *            ^         ^
1092         *  sourceIndex        +3 */
1093        int ipDelta = mi - sourceIndex;
1094        emitImm32(ipDelta, sourceIndex + 3);
1095      }
1096    
1097      /**
1098       * Generate a code sequence that will place the address of the start of the
1099       * method in destReg
1100       *
1101       * @param destReg register to hold address of start of method
1102       */
1103      public final void emitMETHODSTART_Reg(GPR destReg) {
1104        if (VM.buildFor32Addr()) {
1105          Offset pcThunkOffset;
1106          pcThunkOffset = OutOfLineMachineCode.pcThunkInstructionsField[destReg.value()].getOffset();
1107          emitCALL_Abs(Magic.getTocPointer().plus(pcThunkOffset));
1108          emitADD_Reg_Imm(destReg, -mi);
1109        } else {
1110          emitLEA_Reg_RegDisp_Quad(destReg, GPR.EIP, Offset.fromIntZeroExtend(Integer.MAX_VALUE));
1111          emitImm32(-mi, mi-4);
1112        }
1113      }
1114    
1115      /**
1116       * Make a forward reference and emit a long JMP
1117       * @param btarget optional
1118       * @return a forward reference for patching later
1119       */
1120      public final ForwardReference generatePendingJMP(int btarget) {
1121        int miStart = mi;
1122        ForwardReference r = new ForwardReference.UnconditionalBranch(mi, btarget);
1123        setMachineCodes(mi++, (byte) 0xE9);
1124        mi += 4; // leave space for displacement
1125        if (lister != null) lister.I(miStart, "JMP", 0);
1126        return r;
1127      }
1128      // END OSR SUPPORT //
1129    
1130      /**
1131       * Make the given unconditional branch branch to the current
1132       * generated instruction.  It is the client's responsibility to
1133       * ensure the given source index really does contain an
1134       * unconditional branch.
1135       *
1136       * @param sourceIndex the machine code offset of the unconditional
1137       *          branch to patch.
1138       */
1139      @Override
1140      public final void patchUnconditionalBranch (int sourceIndex) {
1141        if (VM.AlignmentChecking || isHotCode()) {
1142          // force 4byte alignment here
1143          emitNOP((4 - mi) & 3);
1144        }
1145        if (lister != null) lister.comefrom(mi, sourceIndex);
1146        int relOffset = mi - (sourceIndex+5);
1147        sourceIndex++; // skip the op code
1148        emitImm32(relOffset, sourceIndex);
1149      }
1150    
1151      /**
1152       * Make the given conditional branch branch to the current
1153       * generated instruction.  It is the client's responsibility to
1154       * ensure the given source index really does contain an
1155       * conditional branch.
1156       *
1157       * @param sourceIndex the machine code offset of the conditional
1158       *          branch to patch.
1159       */
1160      @Override
1161      public final void patchConditionalBranch (int sourceIndex) {
1162        if (VM.AlignmentChecking || isHotCode()) {
1163          // force 4byte alignment here
1164          emitNOP((4 - mi) & 3);
1165        }
1166        if (lister != null) lister.comefrom(mi, sourceIndex);
1167        int relOffset = mi - (sourceIndex+6);
1168        sourceIndex += 2; // skip the (two byte) op code
1169        emitImm32(relOffset, sourceIndex);
1170      }
1171    
1172      /**
1173       * Make the given unconditional branch branch to the current
1174       * generated instruction.  It is the client's responsibility to
1175       * ensure the given source index really does contain an
1176       * unconditional branch.  This instruction requires that the branch
1177       * have been generated with an 8 bit offset.
1178       *
1179       * @param sourceIndex the machine code offset of the unconditional
1180       *          branch to patch.
1181       */
1182      public final void patchShortBranch (int sourceIndex) {
1183        if (VM.AlignmentChecking || isHotCode()) {
1184          // force 4byte alignment here
1185          emitNOP((4 - mi) & 3);
1186        }
1187        if (lister != null) lister.comefrom(mi, sourceIndex);
1188        int relOffset = mi - (sourceIndex+2);
1189        if (VM.VerifyAssertions) VM._assert(fits(relOffset, 8), "offset too large: "+relOffset);
1190        sourceIndex++; // skip the op code
1191        emitImm8((byte)relOffset, sourceIndex);
1192      }
1193    
1194      /////////////////////////////////////
1195      // table switch support /////////////
1196      /////////////////////////////////////
1197    
1198      /**
1199       * An OFFSET instruction is not really an instruction; it is rather
1200       * an address (of an instruction) that is written into the binary
1201       * code.  These are used to build a table of addresses for table
1202       * switches.  The code for tableswitches first calculates the address of the
1203       * start of the method. Using this address a branch relative to the start
1204       * of the method is computed by loading the offset from the start of the
1205       * method for a particular switch case. The OFFSET instruction is encoding
1206       * one value in the table.
1207       *
1208       * This mechanism assumes code for emitting tableswitch looks as
1209       * follows; it is not very nice, but is improved on X86 64 with the addition
1210       * of RIP displacement addressing. The GNU tools generate something.
1211       * Note that default cases must be handled separately. </P>
1212       *
1213       * <PRE>
1214       *     T0 = getPCThunk() or RIP less offset from start of method
1215       *     T0 += [T0 + m<<2 + tableDisplacement]
1216       *     JMP T0
1217       * tableDisplacement:
1218       *     OFFSET 0 (case 0 target)
1219       *     OFFSET 1 (case 1 target)
1220       *     ...
1221       *     OFFSET n (case n target)
1222       * </PRE>
1223       *
1224       * @see #patchSwitchCase
1225       *
1226       * @param c the table entry being emitted (i.e. the value of the
1227       * switch expression corresponding to this target)
1228       * @param mTarget the method-relative target offset
1229       * @param bTarget the label associated with the branch target instrucion
1230       */
1231      public final void emitOFFSET_Imm_ImmOrLabel(int c, int mTarget, int bTarget) {
1232        int miStart = mi;
1233        if (0 < mTarget) { // resolved (backward) reference
1234          emitImm32(mTarget);
1235          if (lister != null) lister.I(miStart, "DATA", mTarget);
1236        } else {        // unresolved forward reference
1237          ForwardReference r =  new ForwardReference.SwitchCase(mi, bTarget);
1238          forwardRefs = ForwardReference.enqueue(forwardRefs, r);
1239          emitImm32(c);
1240          if (lister != null) lister.I(miStart, "DATA", c);
1241        }
1242      }
1243    
1244      /**
1245       * Patch a tableswitch offset table entry at the given source
1246       * index.  This method resolves the table entry at the given source
1247       * index to point to the current instruction plus an aligning NOP.
1248       *
1249       * @see #emitOFFSET_Imm_ImmOrLabel
1250       *
1251       * @param sourceIndex the location of the offset to patch
1252       */
1253      public final void patchSwitchCase (int sourceIndex) {
1254        if (VM.AlignmentChecking || isHotCode()) {
1255          // force 4byte alignment here
1256          emitNOP((4 - mi) & 3);
1257        }
1258        if (lister != null) lister.comefrom(mi, sourceIndex);
1259        int c = 0;
1260        c |= (machineCodes[sourceIndex+0] & 0xFF) <<  0;
1261        c |= (machineCodes[sourceIndex+1] & 0xFF) <<  8;
1262        c |= (machineCodes[sourceIndex+2] & 0xFF) << 16;
1263        c |= (machineCodes[sourceIndex+3] & 0xFF) << 24;  // c = case index
1264        emitImm32(mi, sourceIndex); // write mi to sourceIndex
1265      }
1266    
1267      /**
1268       * Patch the instruction that will load the displacement to the offset table
1269       * from the start of the method assuming that the next code to be created is
1270       * the offset table.
1271       *
1272       * @param toPatchAddress the address of the instruction that performs the
1273       *    displacement load
1274       */
1275      public final void patchSwitchTableDisplacement(int toPatchAddress) {
1276        if (VM.buildFor32Addr()) {
1277          // the instruction to patch is an reg = [reg + idx<<scale + disp]
1278          emitImm32(mi, toPatchAddress+3);
1279        } else {
1280          // the instruction to patch is an reg = [reg + idx<<scale + disp]
1281          emitImm32(mi, toPatchAddress+3);
1282        }
1283      }
1284    
1285      /////////////////////////////////////
1286      // instructions (hand coded)       //
1287      /////////////////////////////////////
1288    
1289      public final void emitMFENCE() {
1290            int miStart = mi;
1291        emitLockNextInstruction();
1292        emitADD_RegInd_Imm(ESP, 0);
1293        /**
1294         * The above has the same semantics, but with better performance as a true MFENCE:
1295         * setMachineCodes(mi++,(byte) 0x0F);
1296         * setMachineCodes(mi++,(byte) 0xAE);
1297         * setMachineCodes(mi++,(byte) 0xF0);
1298         * if (lister != null) lister.OP(miStart, "MFENCE");
1299         */
1300      }
1301    
1302      /**
1303       * Generate a bswap on a register. That is,
1304       * <PRE>
1305       * bswap reg
1306       * </PRE>
1307       *
1308       * @param reg register to operate upon
1309       */
1310      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1311      public final void emitBSWAP_Reg(GPR reg) {
1312        int miStart = mi;
1313        generateREXprefix(false, null, null, reg);
1314        setMachineCodes(mi++, (byte) 0x0F);
1315        setMachineCodes(mi++, (byte) (0xC8 | (reg.value() & 7)));
1316        if (lister != null) lister.R(miStart, "bswap", reg);
1317      }
1318    
1319      /**
1320       * Generate a bswap on a quad register. That is,
1321       * <PRE>
1322       * bswap reg
1323       * </PRE>
1324       *
1325       * @param reg register to operate upon
1326       */
1327      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1328      public final void emitBSWAP_Reg_Quad(GPR reg) {
1329        int miStart = mi;
1330        generateREXprefix(true, null, null, reg);
1331        setMachineCodes(mi++, (byte) 0x0F);
1332        setMachineCodes(mi++, (byte) (0xC8 | (reg.value() & 7)));
1333        if (lister != null) lister.R(miStart, "bswap", reg);
1334      }
1335    
1336      /**
1337       * Conditionally move the source to the destination, i.e.
1338       * <PRE>
1339       * if (cond) dst = src
1340       * </PRE>
1341       */
1342      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
1343      public final void emitCMOV_Cond_Reg_Reg(byte cond, GPR dst, GPR src) {
1344        int miStart = mi;
1345        generateREXprefix(false, dst, null, src);
1346        setMachineCodes(mi++, (byte) 0x0F);
1347        emitCondOpByte((byte)0x40, cond);
1348        emitRegRegOperands(src, dst);
1349        if (lister != null) lister.RR(miStart, "CMOV" + CONDITION[cond], dst, src);
1350      }
1351    
1352      /**
1353       * Conditionally move the source to the destination, i.e.
1354       * <PRE>
1355       * if (cond) dst = [src + disp]
1356       * </PRE>
1357       */
1358      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
1359      public final void emitCMOV_Cond_Reg_RegDisp(byte cond, GPR dst, GPR src, Offset disp) {
1360        int miStart = mi;
1361        generateREXprefix(false, dst, null, src);
1362        setMachineCodes(mi++, (byte) 0x0F);
1363        emitCondOpByte((byte)0x40, cond);
1364        emitRegDispRegOperands(src, disp, dst);
1365        if (lister != null) lister.RRD(miStart, "CMOV" + CONDITION[cond], dst, src, disp);
1366      }
1367    
1368      /**
1369       * Conditionally move the source to the destination, i.e.
1370       * <PRE>
1371       * if (cond) dst = [src]
1372       * </PRE>
1373       */
1374      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
1375      public final void emitCMOV_Cond_Reg_RegInd(byte cond, GPR dst, GPR src) {
1376        int miStart = mi;
1377        generateREXprefix(false, dst, null, src);
1378        setMachineCodes(mi++, (byte) 0x0F);
1379        emitCondOpByte((byte)0x40, cond);
1380        emitRegIndirectRegOperands(src, dst);
1381        if (lister != null) lister.RRN(miStart, "CMOV" + CONDITION[cond], dst, src);
1382      }
1383    
1384      /**
1385       * Conditionally move the source to the destination, i.e.
1386       * <PRE>
1387       * if (cond) dst = [index2<<scale2 + disp2]
1388       * </PRE>
1389       */
1390      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
1391      public final void emitCMOV_Cond_Reg_RegOff(byte cond, GPR dst, GPR index2, short scale2, Offset disp2) {
1392        int miStart = mi;
1393        generateREXprefix(false, dst, index2, null);
1394        setMachineCodes(mi++, (byte) 0x0F);
1395        emitCondOpByte((byte)0x40, cond);
1396        emitRegOffRegOperands(index2, scale2, disp2, dst);
1397        if (lister != null) lister.RRFD(miStart, "CMOV" + CONDITION[cond], dst, index2, scale2, disp2);
1398      }
1399    
1400      /**
1401       * Conditionally move the source to the destination, i.e.
1402       * <PRE>
1403       * if (cond) dst = [disp2]
1404       * </PRE>
1405       */
1406      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
1407      public final void emitCMOV_Cond_Reg_Abs(byte cond, GPR dst, Address disp2) {
1408        int miStart = mi;
1409        generateREXprefix(false, dst, null, null);
1410        setMachineCodes(mi++, (byte) 0x0F);
1411        emitCondOpByte((byte)0x40, cond);
1412        emitAbsRegOperands(disp2, dst);
1413        if (lister != null) lister.RRA(miStart, "CMOV" + CONDITION[cond], dst, disp2);
1414      }
1415    
1416      /**
1417       * Conditionally move the source to the destination, i.e.
1418       * <PRE>
1419       * if (cond) dst = [base2 + index2<<scale2 + disp2]
1420       * </PRE>
1421       */
1422      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3,4})
1423      public final void emitCMOV_Cond_Reg_RegIdx(byte cond, GPR dst, GPR base2, GPR index2, short scale2, Offset disp2) {
1424        int miStart = mi;
1425        generateREXprefix(false, dst, index2, base2);
1426        setMachineCodes(mi++, (byte) 0x0F);
1427        emitCondOpByte((byte)0x40, cond);
1428        emitSIBRegOperands(base2, index2, scale2, disp2, dst);
1429        if (lister != null) lister.RRXD(miStart, "CMOV" + CONDITION[cond], dst, base2, index2, scale2, disp2);
1430      }
1431    
1432      /**
1433       * Set destination to zero or one, if the given condition is false
1434       * or true, respectively.  That is,
1435       * <PRE>
1436       * dst = (cond)? 1: 0
1437       * </PRE>
1438       *
1439       * @param cond the condition to be tested
1440       * @param dst the destination register
1441       */
1442      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
1443      public final void emitSET_Cond_Reg_Byte(byte cond, GPR dst) {
1444        int miStart = mi;
1445        generateREXprefix(false, null, null, dst);
1446        setMachineCodes(mi++, (byte) 0x0F);
1447        emitCondOpByte((byte)0x90, cond);
1448        emitRegRegOperands(dst, EAX /* UNUSED */);
1449        if (lister != null) lister.R(miStart, "SET" + CONDITION[cond], dst);
1450      }
1451    
1452      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
1453      public final void emitSET_Cond_RegDisp_Byte(byte cond, GPR dst, Offset disp) {
1454        int miStart = mi;
1455        generateREXprefix(false, null, null, dst);
1456        setMachineCodes(mi++, (byte) 0x0F);
1457        emitCondOpByte((byte)0x90, cond);
1458        emitRegDispRegOperands(dst, disp, EAX /* UNUSED */);
1459        if (lister != null) lister.RD(miStart, "SET" + CONDITION[cond], dst, disp);
1460      }
1461    
1462      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
1463      public final void emitSET_Cond_RegInd_Byte(byte cond, GPR dst) {
1464        int miStart = mi;
1465        generateREXprefix(false, null, null, dst);
1466        setMachineCodes(mi++, (byte) 0x0F);
1467        emitCondOpByte((byte)0x90, cond);
1468        emitRegIndirectRegOperands(dst, EAX /* UNUSED */);
1469        if (lister != null) lister.RN(miStart, "SET" + CONDITION[cond], dst);
1470      }
1471    
1472      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
1473      public final void emitSET_Cond_RegIdx_Byte(byte cond, GPR base, GPR index, short scale, Offset disp) {
1474        int miStart = mi;
1475        generateREXprefix(false, null, index, base);
1476        setMachineCodes(mi++, (byte) 0x0F);
1477        emitCondOpByte((byte)0x90, cond);
1478        emitSIBRegOperands(base, index, scale, disp, EAX /* UNUSED */);
1479        if (lister != null) lister.RXD(miStart, "SET" + CONDITION[cond], base, index, scale, disp);
1480      }
1481    
1482      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
1483      public final void emitSET_Cond_RegOff_Byte(byte cond, GPR index, short scale, Offset disp) {
1484        int miStart = mi;
1485        generateREXprefix(false, null, index, null);
1486        setMachineCodes(mi++, (byte) 0x0F);
1487        emitCondOpByte((byte)0x90, cond);
1488        emitRegOffRegOperands(index, scale, disp, EAX /* UNUSED */);
1489        if (lister != null) lister.RFD(miStart, "SET" + CONDITION[cond], index, scale, disp);
1490      }
1491    
1492      @Inline
1493      public final void emitSET_Cond_Abs_Byte(byte cond, Address disp) {
1494        int miStart = mi;
1495        generateREXprefix(false, null, null, null);
1496        setMachineCodes(mi++, (byte) 0x0F);
1497        emitCondOpByte((byte)0x90, cond);
1498        emitAbsRegOperands(disp, EAX /* UNUSED */);
1499        if (lister != null) lister.RA(miStart, "SET" + CONDITION[cond], disp);
1500      }
1501    
1502      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1503      public final void emitIMUL2_Reg_Reg(GPR dstReg, GPR srcReg) {
1504        int miStart = mi;
1505        generateREXprefix(false, dstReg, null, srcReg);
1506        setMachineCodes(mi++, (byte) 0x0F);
1507        setMachineCodes(mi++, (byte) 0xAF);
1508        emitRegRegOperands(srcReg, dstReg);
1509        if (lister != null) lister.RR(miStart, "IMUL", dstReg, srcReg);
1510      }
1511    
1512      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1513      public final void emitIMUL2_Reg_RegInd(GPR dstReg, GPR srcBase) {
1514        int miStart = mi;
1515        generateREXprefix(false, dstReg, null, srcBase);
1516        setMachineCodes(mi++, (byte) 0x0F);
1517        setMachineCodes(mi++, (byte) 0xAF);
1518        emitRegIndirectRegOperands(srcBase, dstReg);
1519        if (lister != null) lister.RRN(miStart, "IMUL", dstReg, srcBase);
1520      }
1521    
1522      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1523      public final void emitIMUL2_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
1524        int miStart = mi;
1525        generateREXprefix(false, dstReg, null, srcBase);
1526        setMachineCodes(mi++, (byte) 0x0F);
1527        setMachineCodes(mi++, (byte) 0xAF);
1528        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
1529        if (lister != null) lister.RRD(miStart, "IMUL", dstReg, srcBase, srcDisp);
1530      }
1531    
1532      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1533      public final void emitIMUL2_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
1534        int miStart = mi;
1535        generateREXprefix(false, dstReg, srcIndex, null);
1536        setMachineCodes(mi++, (byte) 0x0F);
1537        setMachineCodes(mi++, (byte) 0xAF);
1538        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
1539        if (lister != null) lister.RRFD(miStart, "IMUL", dstReg, srcIndex, srcScale, srcDisp);
1540      }
1541    
1542      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1543      public final void emitIMUL2_Reg_Abs(GPR dstReg, Address srcDisp) {
1544        int miStart = mi;
1545        generateREXprefix(false, dstReg, null, null);
1546        setMachineCodes(mi++, (byte) 0x0F);
1547        setMachineCodes(mi++, (byte) 0xAF);
1548        emitAbsRegOperands(srcDisp, dstReg);
1549        if (lister != null) lister.RRA(miStart, "IMUL", dstReg, srcDisp);
1550      }
1551    
1552      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1553      public final void emitIMUL2_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
1554        int miStart = mi;
1555        generateREXprefix(false, dstReg, srcIndex, srcBase);
1556        setMachineCodes(mi++, (byte) 0x0F);
1557        setMachineCodes(mi++, (byte) 0xAF);
1558        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
1559        if (lister != null) lister.RRXD(miStart, "IMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp);
1560      }
1561    
1562      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1563      public final void emitIMUL2_Reg_Imm(GPR dstReg, int imm) {
1564        int miStart = mi;
1565        generateREXprefix(false, dstReg, null, null);
1566        if (fits(imm,8)) {
1567          setMachineCodes(mi++, (byte) 0x6B);
1568          emitRegRegOperands(dstReg, dstReg);
1569          emitImm8((byte)imm);
1570        } else {
1571          setMachineCodes(mi++, (byte) 0x69);
1572          emitRegRegOperands(dstReg, dstReg);
1573          emitImm32(imm);
1574        }
1575        if (lister != null) lister.RI(miStart, "IMUL", dstReg, imm);
1576      }
1577    
1578      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1579      public final void emitIMUL2_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
1580        int miStart = mi;
1581        generateREXprefix(true, dstReg, null, srcReg);
1582        setMachineCodes(mi++, (byte) 0x0F);
1583        setMachineCodes(mi++, (byte) 0xAF);
1584        emitRegRegOperands(srcReg, dstReg);
1585        if (lister != null) lister.RR(miStart, "IMUL", dstReg, srcReg);
1586      }
1587    
1588      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1589      public final void emitIMUL2_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
1590        int miStart = mi;
1591        generateREXprefix(true, dstReg, null, srcBase);
1592        setMachineCodes(mi++, (byte) 0x0F);
1593        setMachineCodes(mi++, (byte) 0xAF);
1594        emitRegIndirectRegOperands(srcBase, dstReg);
1595        if (lister != null) lister.RRN(miStart, "IMUL", dstReg, srcBase);
1596      }
1597    
1598      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1599      public final void emitIMUL2_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
1600        int miStart = mi;
1601        generateREXprefix(true, dstReg, null, srcBase);
1602        setMachineCodes(mi++, (byte) 0x0F);
1603        setMachineCodes(mi++, (byte) 0xAF);
1604        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
1605        if (lister != null) lister.RRD(miStart, "IMUL", dstReg, srcBase, srcDisp);
1606      }
1607    
1608      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1609      public final void emitIMUL2_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
1610        int miStart = mi;
1611        generateREXprefix(true, dstReg, srcIndex, null);
1612        setMachineCodes(mi++, (byte) 0x0F);
1613        setMachineCodes(mi++, (byte) 0xAF);
1614        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
1615        if (lister != null) lister.RRFD(miStart, "IMUL", dstReg, srcIndex, srcScale, srcDisp);
1616      }
1617    
1618      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1619      public final void emitIMUL2_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
1620        int miStart = mi;
1621        generateREXprefix(true, dstReg, null, null);
1622        setMachineCodes(mi++, (byte) 0x0F);
1623        setMachineCodes(mi++, (byte) 0xAF);
1624        emitAbsRegOperands(srcDisp, dstReg);
1625        if (lister != null) lister.RRA(miStart, "IMUL", dstReg, srcDisp);
1626      }
1627    
1628      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1629      public final void emitIMUL2_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
1630        int miStart = mi;
1631        generateREXprefix(true, dstReg, srcIndex, srcBase);
1632        setMachineCodes(mi++, (byte) 0x0F);
1633        setMachineCodes(mi++, (byte) 0xAF);
1634        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
1635        if (lister != null) lister.RRXD(miStart, "IMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp);
1636      }
1637    
1638      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1639      public final void emitIMUL2_Reg_Imm_Quad(GPR dstReg, int imm) {
1640        int miStart = mi;
1641        generateREXprefix(true, dstReg, null, null);
1642        if (fits(imm,8)) {
1643          setMachineCodes(mi++, (byte) 0x6B);
1644          emitRegRegOperands(dstReg, dstReg);
1645          emitImm8((byte)imm);
1646        } else {
1647          setMachineCodes(mi++, (byte) 0x69);
1648          emitRegRegOperands(dstReg, dstReg);
1649          emitImm32(imm);
1650        }
1651        if (lister != null) lister.RI(miStart, "IMUL", dstReg, imm);
1652      }
1653    
1654      // trap
1655      public final void emitINT_Imm (int v) {
1656        if (VM.VerifyAssertions) VM._assert(v <= 0xFF);
1657        int miStart = mi;
1658        if (v == 3) { // special case interrupt
1659          setMachineCodes(mi++, (byte) 0xCC);
1660        } else {
1661          setMachineCodes(mi++, (byte) 0xCD);
1662          setMachineCodes(mi++, (byte) v);
1663        }
1664        if (lister != null) lister.I(miStart, "INT", v);
1665      }
1666    
1667      /**
1668       * Conditionally branch to the given target, i.e.
1669       * <PRE>
1670       * if (cond) then IP = (instruction @ label)
1671       * </PRE>
1672       *
1673       * This emit method is expecting only a forward branch (that is
1674       * what the Label operand means); it creates a ForwardReference
1675       * to the given label, and puts it into the assembler's list of
1676       * references to resolve.  This emiiter knows it emits conditional
1677       * branches, so it uses ForwardReference.ConditionalBranch as the
1678       * forward reference type to create.
1679       *
1680       * All forward branches have a label as the branch target; clients
1681       * can arbirarily associate labels and instructions, but must be
1682       * consistent in giving the chosen label as the target of branches
1683       * to an instruction and calling resolveForwardBranches with the
1684       * given label immediately before emitting the target instruction.
1685       * See the header comments of ForwardReference for more details.
1686       *
1687       * @param cond the IA32 ISA condition code bits to mask into opcode
1688       * @param label the label associated with the branch target instrucion
1689       *
1690       * @see org.jikesrvm.compilers.common.assembler.ForwardReference.ConditionalBranch
1691       */
1692      public final void emitJCC_Cond_Label (byte cond, int label) {
1693        int miStart = mi;
1694        ForwardReference r =  new ForwardReference.ConditionalBranch(mi, label);
1695        forwardRefs = ForwardReference.enqueue(forwardRefs, r);
1696        setMachineCodes(mi++, (byte) 0x0F);
1697        setMachineCodes(mi++, (byte) (0x80 + cond));
1698        mi += 4; // leave space for displacement    TODO!! handle short branches
1699        if (lister != null) lister.I(miStart, "J" + CONDITION[cond], label);
1700      }
1701    
1702      /**
1703       * Conditionally branch to the given target, i.e.
1704       * <PRE>
1705       * if (cond) then IP = mTarget
1706       * </PRE>
1707       *
1708       * This emit method emits only backward branches (that is what
1709       * branching to an Imm operand means), so it simply writes the
1710       * appropriate binary code without bothering with the forward
1711       * reference mechanism.
1712       *
1713       * @param cond the IA32 ISA condition code bits to mask into opcode
1714       * @param mTarget the method-relative target offset
1715       */
1716      public final void emitJCC_Cond_Imm (byte cond, int mTarget) {
1717        int miStart = mi;
1718        int relOffset = mTarget - (mi + 1 + 1); // address relative to next instruction
1719        if (fits(relOffset, 8)) {
1720          emitCondOpByte((byte)0x70, cond);
1721          emitImm8((byte)relOffset);
1722        } else {
1723        setMachineCodes(mi++, (byte) 0x0F);
1724        emitCondOpByte((byte)0x80, cond);
1725        relOffset = mTarget - (mi + 4); // address relative to next instruction
1726        emitImm32(relOffset);
1727        }
1728        if (lister != null) lister.I(miStart, "J" + CONDITION[cond], relOffset);
1729      }
1730    
1731      /**
1732       * Conditionally branch to the given target, i.e.
1733       * <PRE>
1734       * if (cond) then IP = mTarget -or- (instruction @ bTarget)
1735       * </PRE>
1736       *
1737       * This emit method represents a branch that could be either
1738       * forward or backward; it simply calls either the Label or Imm
1739       * emit method.
1740       *
1741       * @see #emitJCC_Cond_Label
1742       * @see #emitJCC_Cond_Imm
1743       *
1744       * @param cond the IA32 ISA condition code bits to mask into opcode
1745       * @param mTarget the method-relative target offset
1746       * @param bTarget the label associated with the branch target instrucion
1747       */
1748      public final void emitJCC_Cond_ImmOrLabel (byte cond, int mTarget, int bTarget) {
1749        if (mTarget == 0) { // forward branch
1750          emitJCC_Cond_Label(cond, bTarget);
1751        } else { // backward branch
1752          emitJCC_Cond_Imm(cond, mTarget);
1753        }
1754      }
1755    
1756      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1757      public final void emitLEA_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
1758        int miStart = mi;
1759        generateREXprefix(false, dstReg, null, srcBase);
1760        setMachineCodes(mi++, (byte) 0x8D);
1761        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
1762        if (lister != null) lister.RRD(miStart, "LEA", dstReg, srcBase, srcDisp);
1763      }
1764    
1765      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1766      public final void emitLEA_Reg_RegInd(GPR dstReg, GPR srcBase) {
1767        int miStart = mi;
1768        generateREXprefix(false, dstReg, null, srcBase);
1769        setMachineCodes(mi++, (byte) 0x8D);
1770        emitRegIndirectRegOperands(srcBase, dstReg);
1771        if (lister != null) lister.RRN(miStart, "LEA", dstReg, srcBase);
1772      }
1773    
1774      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1775      public final void emitLEA_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
1776        int miStart = mi;
1777        generateREXprefix(false, dstReg, srcIndex, null);
1778        setMachineCodes(mi++, (byte) 0x8D);
1779        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
1780        if (lister != null) lister.RRFD(miStart, "LEA", dstReg, srcIndex, srcScale, srcDisp);
1781      }
1782    
1783      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1784      public final void emitLEA_Reg_Abs(GPR dstReg, Address srcDisp) {
1785        int miStart = mi;
1786        generateREXprefix(false, dstReg, null, null);
1787        setMachineCodes(mi++, (byte) 0x8D);
1788        emitAbsRegOperands(srcDisp, dstReg);
1789        if (lister != null) lister.RRA(miStart, "LEA", dstReg, srcDisp);
1790      }
1791    
1792      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1793      public final void emitLEA_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
1794        int miStart = mi;
1795        generateREXprefix(false, dstReg, srcIndex, srcBase);
1796        setMachineCodes(mi++, (byte) 0x8D);
1797        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
1798        if (lister != null) lister.RRXD(miStart, "LEA", dstReg, srcBase, srcIndex, srcScale, srcDisp);
1799      }
1800    
1801      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1802      public final void emitLEA_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
1803        int miStart = mi;
1804        generateREXprefix(true, dstReg, null, srcBase);
1805        setMachineCodes(mi++, (byte) 0x8D);
1806        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
1807        if (lister != null) lister.RRD(miStart, "LEA", dstReg, srcBase, srcDisp);
1808      }
1809    
1810      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1811      public final void emitLEA_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
1812        int miStart = mi;
1813        generateREXprefix(true, dstReg, null, srcBase);
1814        setMachineCodes(mi++, (byte) 0x8D);
1815        emitRegIndirectRegOperands(srcBase, dstReg);
1816        if (lister != null) lister.RRN(miStart, "LEA", dstReg, srcBase);
1817      }
1818    
1819      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1820      public final void emitLEA_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
1821        int miStart = mi;
1822        generateREXprefix(true, dstReg, srcIndex, null);
1823        setMachineCodes(mi++, (byte) 0x8D);
1824        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
1825        if (lister != null) lister.RRFD(miStart, "LEA", dstReg, srcIndex, srcScale, srcDisp);
1826      }
1827    
1828      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1829      public final void emitLEA_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
1830        int miStart = mi;
1831        generateREXprefix(true, dstReg, null, null);
1832        setMachineCodes(mi++, (byte) 0x8D);
1833        emitAbsRegOperands(srcDisp, dstReg);
1834        if (lister != null) lister.RRA(miStart, "LEA", dstReg, srcDisp);
1835      }
1836    
1837      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
1838      public final void emitLEA_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
1839        int miStart = mi;
1840        generateREXprefix(true, dstReg, srcIndex, srcBase);
1841        setMachineCodes(mi++, (byte) 0x8D);
1842        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
1843        if (lister != null) lister.RRXD(miStart, "LEA", dstReg, srcBase, srcIndex, srcScale, srcDisp);
1844      }
1845    
1846      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1847      public final void emitMOV_Reg_Imm(GPR dstReg, int imm) {
1848        int miStart = mi;
1849        generateREXprefix(false, null, null, dstReg);
1850        setMachineCodes(mi++, (byte) (0xB8 | dstReg.value()));
1851        emitImm32(imm);
1852        if (lister != null) lister.RI(miStart, "MOV", dstReg, imm);
1853      }
1854    
1855      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1856      public final void emitMOV_Reg_Imm_Quad(GPR dstReg, long imm) {
1857        int miStart = mi;
1858        generateREXprefix(true, null, null, dstReg);
1859        setMachineCodes(mi++, (byte) (0xB8 | dstReg.value()));
1860        emitImm64(imm);
1861        if (lister != null) lister.RI(miStart, "MOV", dstReg, imm);
1862      }
1863    
1864      /** pop address and goto it */
1865      public final void emitRET () {
1866        int miStart = mi;
1867        setMachineCodes(mi++, (byte) 0xC3);
1868        if (lister != null) lister.OP(miStart, "RET");
1869      }
1870    
1871      /** pop address and goto it, pop parameterBytes additional bytes */
1872      public final void emitRET_Imm (int parameterBytes) {
1873        int miStart = mi;
1874        if (parameterBytes == 0) {
1875          setMachineCodes(mi++, (byte) 0xC3);
1876          if (lister != null) lister.OP(miStart, "RET");
1877        } else {
1878          setMachineCodes(mi++, (byte) 0xC2);
1879          emitImm16(parameterBytes);
1880          if (VM.VerifyAssertions) VM._assert ((parameterBytes & 0xffff0000) == 0);
1881          if (lister != null) lister.I(miStart, "RET", parameterBytes);
1882        }
1883      }
1884    
1885      /** allocate stack frame for procedure */
1886      public final void emitENTER_Imm (int frameSize) {
1887        int miStart = mi;
1888        setMachineCodes(mi++, (byte) 0xC8);
1889        emitImm16(frameSize);
1890        setMachineCodes(mi++, (byte) 0x0);
1891        if (lister != null) lister.I(miStart, "ENTER", frameSize);
1892      }
1893    
1894      /** sign extends EAX into EDX */
1895      public final void emitCDQ () {
1896        int miStart = mi;
1897        setMachineCodes(mi++, (byte)0x99);
1898        if (lister != null) lister.OP(miStart, "CDQ");
1899      }
1900    
1901      /** sign extends RAX into RDX */
1902      public final void emitCDO () {
1903        int miStart = mi;
1904        generateREXprefix(true, null, null, null);
1905        setMachineCodes(mi++, (byte)0x99);
1906        if (lister != null) lister.OP(miStart, "CDO");
1907      }
1908    
1909      /** sign extends EAX into RDX */
1910      public final void emitCDQE () {
1911        int miStart = mi;
1912        generateREXprefix(true, null, null, null);
1913        setMachineCodes(mi++, (byte)0x98);
1914        if (lister != null) lister.OP(miStart, "CDQE");
1915      }
1916    
1917      /**
1918       * Read time stamp into edx:eax, on Linux this appears to be unprivileged.
1919       * <pre>
1920       * edx:eax <- time stamp counter
1921       * </pre>
1922       */
1923      public final void emitRDTSC() {
1924        int miStart = mi;
1925        setMachineCodes(mi++, (byte) 0x0F);
1926        setMachineCodes(mi++, (byte) 0x31);
1927        if (lister != null) lister.OP(miStart, "RDTSC");
1928      }
1929    
1930      /** software prefetch */
1931      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1932      public final void emitPREFETCHNTA_Reg(GPR srcReg) {
1933        int miStart = mi;
1934        setMachineCodes(mi++, (byte) 0x0F);
1935        setMachineCodes(mi++,(byte) 0x18);
1936        emitRegIndirectRegOperands(srcReg, GPR.getForOpcode(0));
1937        if (lister != null) lister.R(miStart, "PREFETCHNTA", srcReg);
1938      }
1939    
1940      /** Suggest to process that a a compare for a spin lock has just failed */
1941      public final void emitPAUSE () {
1942        int miStart = mi;
1943        setMachineCodes(mi++, (byte) 0xF3);
1944        setMachineCodes(mi++,(byte) 0x90);
1945        if (lister != null) lister.OP(miStart, "PAUSE");
1946      }
1947    
1948      /**
1949       * Compare and exchange 8 bytes
1950       * <PRE>
1951       * cmpxchg8b [dst + disp]
1952       * </PRE>
1953       */
1954      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1955      public final void emitCMPXCHG8B_RegDisp(GPR base, Offset disp) {
1956        int miStart = mi;
1957        generateREXprefix(false, null, null, base);
1958        setMachineCodes(mi++, (byte) 0x0F);
1959        setMachineCodes(mi++, (byte) 0xC7);
1960        emitRegDispRegOperands(base, disp, GPR.getForOpcode(1));
1961        if (lister != null) lister.RD(miStart, "CMPXCHG8B" , base, disp);
1962      }
1963    
1964      /**
1965       * Compare and exchange 8 bytes
1966       * <PRE>
1967       * cmpxchg8b [dst]
1968       * </PRE>
1969       */
1970      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1971      public final void emitCMPXCHG8B_RegInd(GPR base) {
1972        int miStart = mi;
1973        generateREXprefix(false, null, null, base);
1974        setMachineCodes(mi++, (byte) 0x0F);
1975        setMachineCodes(mi++, (byte) 0xC7);
1976        emitRegIndirectRegOperands(base, GPR.getForOpcode(1));
1977        if (lister != null) lister.R(miStart, "CMPXCHG8B" , base);
1978      }
1979    
1980      /**
1981       * Compare and exchange 8 bytes
1982       * <PRE>
1983       * cmpxchg8b [index2<<scale2 + disp2]
1984       * </PRE>
1985       */
1986      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
1987      public final void emitCMPXCHG8B_RegOff(GPR index2, short scale2, Offset disp2) {
1988        int miStart = mi;
1989        generateREXprefix(false, null, index2, null);
1990        setMachineCodes(mi++, (byte) 0x0F);
1991        setMachineCodes(mi++, (byte) 0xC7);
1992        emitRegOffRegOperands(index2, scale2, disp2, GPR.getForOpcode(1));
1993        if (lister != null) lister.RFD(miStart, "CMPXCHG8B", index2, scale2, disp2);
1994      }
1995    
1996      /**
1997       * Compare and exchange 8 bytes
1998       * <PRE>
1999       * cmpxchg8b [base + index2<<scale2 + disp2]
2000       * </PRE>
2001       */
2002      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2003      public final void emitCMPXCHG8B_RegIdx(GPR base2, GPR index2, short scale2, Offset disp2) {
2004        int miStart = mi;
2005        generateREXprefix(false, null, index2, base2);
2006        setMachineCodes(mi++, (byte) 0x0F);
2007        setMachineCodes(mi++, (byte) 0xC7);
2008        emitSIBRegOperands(base2, index2, scale2, disp2, GPR.getForOpcode(1));
2009        if (lister != null) lister.RXD(miStart, "CMPXCHG8B", base2, index2, scale2, disp2);
2010      }
2011    
2012      /** Store AH into Flags */
2013      public final void emitSAHF () {
2014        int miStart = mi;
2015        setMachineCodes(mi++, (byte) 0x9E);
2016        if (lister != null) lister.OP(miStart, "SAHF");
2017      }
2018    
2019      /**
2020       * Emit NOP instruction
2021       *
2022       * @param length size of NOP instruction required
2023       */
2024      public final void emitNOP (int length) {
2025        int miStart = mi;
2026        switch (length) {
2027        case 0:
2028          break;
2029        case 1:
2030          setMachineCodes(mi++, (byte) 0x90);
2031          break;
2032        case 2:
2033          setMachineCodes(mi++, (byte) 0x66);
2034          setMachineCodes(mi++, (byte) 0x90);
2035          break;
2036        case 3:
2037          setMachineCodes(mi++, (byte) 0x0F);
2038          setMachineCodes(mi++, (byte) 0x1F);
2039          setMachineCodes(mi++, (byte) 0x00);
2040          break;
2041        case 4:
2042          setMachineCodes(mi++, (byte) 0x0F);
2043          setMachineCodes(mi++, (byte) 0x1F);
2044          setMachineCodes(mi++, (byte) 0x40);
2045          setMachineCodes(mi++, (byte) 0x00);
2046          break;
2047        case 5:
2048          setMachineCodes(mi++, (byte) 0x0F);
2049          setMachineCodes(mi++, (byte) 0x1F);
2050          setMachineCodes(mi++, (byte) 0x44);
2051          setMachineCodes(mi++, (byte) 0x00);
2052          setMachineCodes(mi++, (byte) 0x00);
2053          break;
2054        case 6:
2055          setMachineCodes(mi++, (byte) 0x66);
2056          setMachineCodes(mi++, (byte) 0x0F);
2057          setMachineCodes(mi++, (byte) 0x1F);
2058          setMachineCodes(mi++, (byte) 0x44);
2059          setMachineCodes(mi++, (byte) 0x00);
2060          setMachineCodes(mi++, (byte) 0x00);
2061          break;
2062        case 7:
2063          setMachineCodes(mi++, (byte) 0x0F);
2064          setMachineCodes(mi++, (byte) 0x1F);
2065          setMachineCodes(mi++, (byte) 0x80);
2066          setMachineCodes(mi++, (byte) 0x00);
2067          setMachineCodes(mi++, (byte) 0x00);
2068          setMachineCodes(mi++, (byte) 0x00);
2069          setMachineCodes(mi++, (byte) 0x00);
2070          break;
2071        case 8:
2072          setMachineCodes(mi++, (byte) 0x0F);
2073          setMachineCodes(mi++, (byte) 0x1F);
2074          setMachineCodes(mi++, (byte) 0x84);
2075          setMachineCodes(mi++, (byte) 0x00);
2076          setMachineCodes(mi++, (byte) 0x00);
2077          setMachineCodes(mi++, (byte) 0x00);
2078          setMachineCodes(mi++, (byte) 0x00);
2079          setMachineCodes(mi++, (byte) 0x00);
2080          break;
2081        case 9:
2082          setMachineCodes(mi++, (byte) 0x66);
2083          setMachineCodes(mi++, (byte) 0x0F);
2084          setMachineCodes(mi++, (byte) 0x1F);
2085          setMachineCodes(mi++, (byte) 0x84);
2086          setMachineCodes(mi++, (byte) 0x00);
2087          setMachineCodes(mi++, (byte) 0x00);
2088          setMachineCodes(mi++, (byte) 0x00);
2089          setMachineCodes(mi++, (byte) 0x00);
2090          setMachineCodes(mi++, (byte) 0x00);
2091          break;
2092        default:
2093          throw new Error("Unexpected NOP length "+length);
2094        }
2095        if (lister != null) lister.OP(miStart, "NOP");
2096      }
2097    
2098      ////////////////////////////////////////////
2099      // hand-coded floating point instructions //
2100      ////////////////////////////////////////////
2101    
2102      /**
2103       * Empty MMX technology state
2104       * <PRE>
2105       * emms
2106       * </PRE>
2107       */
2108      public final void emitEMMS() {
2109          int miStart = mi;
2110          setMachineCodes(mi++, (byte) 0x0F);
2111          setMachineCodes(mi++, (byte) 0x77);
2112          if (lister != null) lister.OP(miStart, "EMMS");
2113      }
2114    
2115      /** x87 floating point conditional moves */
2116      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
2117      public final void emitFCMOV_Cond_Reg_Reg(byte cond, FPR reg1, FPR reg2) {
2118        int miStart = mi;
2119        if (VM.VerifyAssertions) VM._assert(reg1 == FP0);
2120        switch (cond) {
2121          case LLT:
2122            setMachineCodes(mi++, (byte) 0xDA);
2123            setMachineCodes(mi++, (byte) (0xC0 + reg2.value()));
2124            break;
2125          case EQ:
2126            setMachineCodes(mi++, (byte) 0xDA);
2127            setMachineCodes(mi++, (byte) (0xC8 + reg2.value()));
2128            break;
2129          case LLE:
2130            setMachineCodes(mi++, (byte) 0xDA);
2131            setMachineCodes(mi++, (byte) (0xD0 + reg2.value()));
2132            break;
2133          case PE:
2134            setMachineCodes(mi++, (byte) 0xDA);
2135            setMachineCodes(mi++, (byte) (0xD8 + reg2.value()));
2136            break;
2137          case LGE:
2138            setMachineCodes(mi++, (byte) 0xDB);
2139            setMachineCodes(mi++, (byte) (0xC0 + reg2.value()));
2140            break;
2141          case NE:
2142            setMachineCodes(mi++, (byte) 0xDB);
2143            setMachineCodes(mi++, (byte) (0xC8 + reg2.value()));
2144            break;
2145          case LGT:
2146            setMachineCodes(mi++, (byte) 0xDB);
2147            setMachineCodes(mi++, (byte) (0xD0 + reg2.value()));
2148            break;
2149          case PO:
2150            setMachineCodes(mi++, (byte) 0xDB);
2151            setMachineCodes(mi++, (byte) (0xD8 + reg2.value()));
2152            break;
2153          default:
2154            if (VM.VerifyAssertions) VM._assert(VM.NOT_REACHED);
2155        }
2156        if (lister != null) lister.RR(miStart, "FCMOV" + CONDITION[cond], reg1, reg2);
2157      }
2158    
2159      /** x87 floating point push of ST(i) into ST(0) */
2160      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2161      public final void emitFLD_Reg_Reg(FPR destReg, FPR srcReg) {
2162        int miStart = mi;
2163        if (VM.VerifyAssertions) VM._assert(destReg == FP0);
2164        setMachineCodes(mi++, (byte) 0xD9);
2165        setMachineCodes(mi++, (byte) (0xC0 + srcReg.value()));
2166        if (lister != null) lister.R(miStart, "FLD", srcReg);
2167      }
2168    
2169      // floating point copy of ST(0) into ST(I)
2170      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2171      public final void emitFST_Reg_Reg(FPR destReg, FPR srcReg) {
2172        int miStart = mi;
2173        if (VM.VerifyAssertions) VM._assert(srcReg == FP0);
2174        setMachineCodes(mi++, (byte) 0xDD);
2175        setMachineCodes(mi++, (byte) (0xD0 + destReg.value()));
2176        if (lister != null) lister.R(miStart, "FST", destReg);
2177      }
2178    
2179      // floating point pop of ST(0) into ST(I)
2180      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2181      public final void emitFSTP_Reg_Reg(FPR destReg, FPR srcReg) {
2182        int miStart = mi;
2183        if (VM.VerifyAssertions) VM._assert(srcReg == FP0);
2184        setMachineCodes(mi++, (byte) 0xDD);
2185        setMachineCodes(mi++, (byte) (0xD8 + destReg.value()));
2186        if (lister != null) lister.R(miStart, "FST", destReg);
2187      }
2188    
2189      // Change Sign: Top of FPU register stack -= Top og FPU register stack
2190      public final void emitFCHS () {
2191        int miStart = mi;
2192        setMachineCodes(mi++, (byte) 0xD9);
2193        setMachineCodes(mi++, (byte) 0xE0);
2194        if (lister != null) lister.OP(miStart, "FADD32");
2195      }
2196    
2197      public final void emitFUCOMPP () {
2198        int miStart = mi;
2199        setMachineCodes(mi++, (byte) 0xDA);
2200        setMachineCodes(mi++, (byte) 0xE9);
2201        if (lister != null) lister.OP(miStart, "FUCOMPP");
2202      }
2203    
2204      // Store Status Word into AX register/noexecptions
2205      public final void emitFNSTSW () {
2206        int miStart = mi;
2207        setMachineCodes(mi++, (byte) 0xDF);
2208        setMachineCodes(mi++, (byte) 0xE0);
2209        if (lister != null) lister.OP(miStart, "FNSTSW");
2210      }
2211    
2212      // Real Remainder:
2213      // Top of FPU register stack <- ST(0) - (Q*ST(1)
2214      // Q is the interger value obtained from truncating
2215      // ST(0)/ST(1) toward 0
2216      public final void emitFPREM () {
2217        int miStart = mi;
2218        setMachineCodes(mi++, (byte) 0xD9);
2219        setMachineCodes(mi++, (byte) 0xF8);
2220        if (lister != null) lister.OP(miStart, "FPREM");
2221      }
2222    
2223      // Blow away floating point state
2224      public final void emitFINIT() {
2225        int miStart = mi;
2226        setMachineCodes(mi++, (byte) 0x9B);
2227        setMachineCodes(mi++, (byte) 0xDB);
2228        setMachineCodes(mi++, (byte) 0xE3);
2229        if (lister != null) lister.OP(miStart, "FINIT");
2230      }
2231    
2232      // Blow away floating point state
2233      // Pending exceptions??? Don't tell me about pending exceptions!!
2234      public final void emitFNINIT() {
2235        int miStart = mi;
2236        setMachineCodes(mi++, (byte) 0xDB);
2237        setMachineCodes(mi++, (byte) 0xE3);
2238        if (lister != null) lister.OP(miStart, "FNINIT");
2239      }
2240    
2241      /** Declare we are no longer using FP register */
2242      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
2243      public final void emitFFREE_Reg(FPR reg) {
2244        int miStart = mi;
2245        setMachineCodes(mi++, (byte) 0xDD);
2246        setMachineCodes(mi++, (byte) ( (byte)0xC0 + reg.value() ));
2247        if (lister != null) lister.R(miStart, "FFREE", reg);
2248      }
2249    
2250      /** The dreaded FXCH (symbol of all that's wrong with x87 floating point) */
2251      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2252      public final void emitFXCH_Reg_Reg(FPR regOne, FPR regTwo) {
2253        int miStart = mi;
2254    
2255        // at least one reg must not be FP0
2256        FPR nonZeroReg = FP0; // :)
2257        if (regOne == FP0 && regTwo == FP0)
2258          // do nothing; this is stupid
2259          return;
2260        else if (regOne == FP0 && regTwo != FP0)
2261          nonZeroReg = regTwo;
2262        else if (regTwo == FP0 && regOne != FP0)
2263          nonZeroReg = regOne;
2264    
2265        // if not, bad instruction, so die
2266        if (nonZeroReg == FP0)
2267          VM._assert(false, "FXCH of " + regOne + ", " + regTwo);
2268    
2269        // generate it, with special case (of course) for FP1
2270        setMachineCodes(mi++, (byte) 0xD9);
2271        if (nonZeroReg == FP1)
2272          setMachineCodes(mi++, (byte) 0xC9);
2273        else
2274          setMachineCodes(mi++, (byte) (0xC8 | nonZeroReg.value()));
2275    
2276        // list it
2277        if (lister != null) lister.R(miStart, "FXCH", nonZeroReg);
2278      }
2279    
2280      /*
2281       * BELOW HERE ARE AUTOMATICALLY-GENERATED INSTRUCTIONS.  DO NOT EDIT.
2282       *
2283       * These instructions are generated by genAssembler.sh in the
2284       * src-generated/ia32-assembler directory.  Please make all needed
2285       * edits to that script.
2286       */
2287      /**
2288       * Generate a register(indirect)--register ADC. That is,
2289       * <PRE>
2290       * [dstBase] +CF=  srcReg
2291       * </PRE>
2292       *
2293       * @param dstBase the destination base
2294       * @param srcReg the source register
2295       */
2296      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2297      public final void emitADC_RegInd_Reg(GPR dstBase, GPR srcReg) {
2298        int miStart = mi;
2299        // no group 1 to 4 prefix byte
2300        generateREXprefix(false, srcReg, null, dstBase);
2301        // single byte opcode
2302        setMachineCodes(mi++, (byte) 0x11);
2303        emitRegIndirectRegOperands(dstBase, srcReg);
2304        if (lister != null) lister.RNR(miStart, "ADC", dstBase, srcReg);
2305      }
2306    
2307      /**
2308       * Generate a register-offset--register ADC. That is,
2309       * <PRE>
2310       * [dstReg<<dstScale + dstDisp] +CF=  srcReg
2311       * </PRE>
2312       *
2313       * @param dstIndex the destination index register
2314       * @param dstScale the destination shift amount
2315       * @param dstDisp the destination displacement
2316       * @param srcReg the source register
2317       */
2318      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
2319      public final void emitADC_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
2320        int miStart = mi;
2321        // no group 1 to 4 prefix byte
2322        generateREXprefix(false, srcReg, dstIndex, null);
2323        // single byte opcode
2324        setMachineCodes(mi++, (byte) 0x11);
2325        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
2326        if (lister != null) lister.RFDR(miStart, "ADC", dstIndex, dstScale, dstDisp, srcReg);
2327      }
2328    
2329      /**
2330       * Generate a absolute--register ADC. That is,
2331       * <PRE>
2332       * [dstDisp] +CF=  srcReg
2333       * </PRE>
2334       *
2335       * @param dstDisp the destination address
2336       * @param srcReg the source register
2337       */
2338      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
2339      public final void emitADC_Abs_Reg(Address dstDisp, GPR srcReg) {
2340        int miStart = mi;
2341        // no group 1 to 4 prefix byte
2342        generateREXprefix(false, srcReg, null, null);
2343        // single byte opcode
2344        setMachineCodes(mi++, (byte) 0x11);
2345        emitAbsRegOperands(dstDisp, srcReg);
2346        if (lister != null) lister.RAR(miStart, "ADC", dstDisp, srcReg);
2347      }
2348    
2349      /**
2350       * Generate a register-index--register ADC. That is,
2351       * <PRE>
2352       * [dstBase + dstIndex<<dstScale + dstDisp] +CF=  srcReg
2353       * </PRE>
2354       *
2355       * @param dstBase the base register
2356       * @param dstIndex the destination index register
2357       * @param dstScale the destination shift amount
2358       * @param dstDisp the destination displacement
2359       * @param srcReg the source register
2360       */
2361      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
2362      public final void emitADC_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
2363        int miStart = mi;
2364        // no group 1 to 4 prefix byte
2365        generateREXprefix(false, srcReg, dstIndex, dstBase);
2366        // single byte opcode
2367        setMachineCodes(mi++, (byte) 0x11);
2368        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
2369        if (lister != null) lister.RXDR(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, srcReg);
2370      }
2371    
2372      /**
2373       * Generate a register-displacement--register ADC. That is,
2374       * <PRE>
2375       * [dstBase + dstDisp] +CF=  srcReg
2376       * </PRE>
2377       *
2378       * @param dstBase the base register
2379       * @param dstDisp the destination displacement
2380       * @param srcReg the source register
2381       */
2382      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
2383      public final void emitADC_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
2384        int miStart = mi;
2385        // no group 1 to 4 prefix byte
2386        generateREXprefix(false, srcReg, null, dstBase);
2387        // single byte opcode
2388        setMachineCodes(mi++, (byte) 0x11);
2389        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
2390        if (lister != null) lister.RDR(miStart, "ADC", dstBase, dstDisp, srcReg);
2391      }
2392    
2393      /**
2394       * Generate a register--register ADC. That is,
2395       * <PRE>
2396       * dstReg +CF=  srcReg
2397       * </PRE>
2398       *
2399       * @param dstReg the destination register
2400       * @param srcReg the source register
2401       */
2402      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2403      public final void emitADC_Reg_Reg(GPR dstReg, GPR srcReg) {
2404        int miStart = mi;
2405        // no group 1 to 4 prefix byte
2406        generateREXprefix(false, srcReg, null, dstReg);
2407        // single byte opcode
2408        setMachineCodes(mi++, (byte) 0x11);
2409        emitRegRegOperands(dstReg, srcReg);
2410        if (lister != null) lister.RR(miStart, "ADC", dstReg, srcReg);
2411      }
2412    
2413      /**
2414       * Generate a register--register-displacement ADC. That is,
2415       * <PRE>
2416       * dstReg +CF=  [srcReg + srcDisp]
2417       * </PRE>
2418       *
2419       * @param dstReg the destination register
2420       * @param srcBase the source register
2421       * @param srcDisp the source displacement
2422       */
2423      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2424      public final void emitADC_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
2425        int miStart = mi;
2426        // no group 1 to 4 prefix byte
2427        generateREXprefix(false, dstReg, null, srcBase);
2428        // single byte opcode
2429        setMachineCodes(mi++, (byte) 0x13);
2430        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
2431        if (lister != null) lister.RRD(miStart, "ADC", dstReg, srcBase, srcDisp);
2432      }
2433    
2434      /**
2435       * Generate a register--register-offset ADC. That is,
2436       * <PRE>
2437       * dstReg +CF=  [srcIndex<<srcScale + srcDisp]
2438       * </PRE>
2439       *
2440       * @param dstReg the destination register
2441       * @param srcIndex the source index register
2442       * @param srcScale the source shift amount
2443       * @param srcDisp the source displacement
2444       */
2445      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2446      public final void emitADC_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
2447        int miStart = mi;
2448        // no group 1 to 4 prefix byte
2449        generateREXprefix(false, dstReg, srcIndex, null);
2450        // single byte opcode
2451        setMachineCodes(mi++, (byte) 0x13);
2452        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
2453        if (lister != null) lister.RRFD(miStart, "ADC", dstReg, srcIndex, srcScale, srcDisp);
2454      }
2455    
2456      /**
2457       * Generate a register--register-offset ADC. That is,
2458       * <PRE>
2459       * dstReg +CF=  [srcDisp]
2460       * </PRE>
2461       *
2462       * @param dstReg the destination register
2463       * @param srcDisp the source displacement
2464       */
2465      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
2466      public final void emitADC_Reg_Abs(GPR dstReg, Address srcDisp) {
2467        int miStart = mi;
2468        // no group 1 to 4 prefix byte
2469        generateREXprefix(false, dstReg, null, null);
2470        // single byte opcode
2471        setMachineCodes(mi++, (byte) 0x13);
2472        emitAbsRegOperands(srcDisp, dstReg);
2473        if (lister != null) lister.RRA(miStart, "ADC", dstReg, srcDisp);
2474      }
2475    
2476      /**
2477       * Generate a register--register-offset ADC. That is,
2478       * <PRE>
2479       * dstReg +CF=  [srcBase + srcIndex<<srcScale + srcDisp]
2480       * </PRE>
2481       *
2482       * @param dstReg the destination register
2483       * @param srcBase the source base register
2484       * @param srcIndex the source index register
2485       * @param srcScale the source shift amount
2486       * @param srcDisp the source displacement
2487       */
2488      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
2489      public final void emitADC_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
2490        int miStart = mi;
2491        // no group 1 to 4 prefix byte
2492        generateREXprefix(false, dstReg, srcIndex, srcBase);
2493        // single byte opcode
2494        setMachineCodes(mi++, (byte) 0x13);
2495        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
2496        if (lister != null) lister.RRXD(miStart, "ADC", dstReg, srcBase, srcIndex, srcScale, srcDisp);
2497      }
2498    
2499      /**
2500       * Generate a register--register(indirect) ADC. That is,
2501       * <PRE>
2502       * dstReg +CF=  [srcBase]
2503       * </PRE>
2504       *
2505       * @param dstReg the destination register
2506       * @param srcBase the source base register
2507       */
2508      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2509      public final void emitADC_Reg_RegInd(GPR dstReg, GPR srcBase) {
2510        int miStart = mi;
2511        // no group 1 to 4 prefix byte
2512        generateREXprefix(false, dstReg, null, srcBase);
2513        // single byte opcode
2514        setMachineCodes(mi++, (byte) 0x13);
2515        emitRegIndirectRegOperands(srcBase, dstReg);
2516        if (lister != null) lister.RRN(miStart, "ADC", dstReg, srcBase);
2517      }
2518    
2519      /**
2520       * Generate a register(indirect)--register ADC. That is,
2521       * <PRE>
2522       * [dstBase] +CF=  (word)  srcReg
2523       * </PRE>
2524       *
2525       * @param dstBase the destination base
2526       * @param srcReg the source register
2527       */
2528      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2529      public final void emitADC_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
2530        int miStart = mi;
2531        setMachineCodes(mi++, (byte) 0x66);
2532        generateREXprefix(false, srcReg, null, dstBase);
2533        // single byte opcode
2534        setMachineCodes(mi++, (byte) 0x11);
2535        emitRegIndirectRegOperands(dstBase, srcReg);
2536        if (lister != null) lister.RNR(miStart, "ADC", dstBase, srcReg);
2537      }
2538    
2539      /**
2540       * Generate a register-offset--register ADC. That is,
2541       * <PRE>
2542       * [dstReg<<dstScale + dstDisp] +CF=  (word)  srcReg
2543       * </PRE>
2544       *
2545       * @param dstIndex the destination index register
2546       * @param dstScale the destination shift amount
2547       * @param dstDisp the destination displacement
2548       * @param srcReg the source register
2549       */
2550      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
2551      public final void emitADC_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
2552        int miStart = mi;
2553        setMachineCodes(mi++, (byte) 0x66);
2554        generateREXprefix(false, srcReg, dstIndex, null);
2555        // single byte opcode
2556        setMachineCodes(mi++, (byte) 0x11);
2557        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
2558        if (lister != null) lister.RFDR(miStart, "ADC", dstIndex, dstScale, dstDisp, srcReg);
2559      }
2560    
2561      /**
2562       * Generate a absolute--register ADC. That is,
2563       * <PRE>
2564       * [dstDisp] +CF=  (word)  srcReg
2565       * </PRE>
2566       *
2567       * @param dstDisp the destination address
2568       * @param srcReg the source register
2569       */
2570      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
2571      public final void emitADC_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
2572        int miStart = mi;
2573        setMachineCodes(mi++, (byte) 0x66);
2574        generateREXprefix(false, srcReg, null, null);
2575        // single byte opcode
2576        setMachineCodes(mi++, (byte) 0x11);
2577        emitAbsRegOperands(dstDisp, srcReg);
2578        if (lister != null) lister.RAR(miStart, "ADC", dstDisp, srcReg);
2579      }
2580    
2581      /**
2582       * Generate a register-index--register ADC. That is,
2583       * <PRE>
2584       * [dstBase + dstIndex<<dstScale + dstDisp] +CF=  (word)  srcReg
2585       * </PRE>
2586       *
2587       * @param dstBase the base register
2588       * @param dstIndex the destination index register
2589       * @param dstScale the destination shift amount
2590       * @param dstDisp the destination displacement
2591       * @param srcReg the source register
2592       */
2593      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
2594      public final void emitADC_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
2595        int miStart = mi;
2596        setMachineCodes(mi++, (byte) 0x66);
2597        generateREXprefix(false, srcReg, dstIndex, dstBase);
2598        // single byte opcode
2599        setMachineCodes(mi++, (byte) 0x11);
2600        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
2601        if (lister != null) lister.RXDR(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, srcReg);
2602      }
2603    
2604      /**
2605       * Generate a register-displacement--register ADC. That is,
2606       * <PRE>
2607       * [dstBase + dstDisp] +CF=  (word)  srcReg
2608       * </PRE>
2609       *
2610       * @param dstBase the base register
2611       * @param dstDisp the destination displacement
2612       * @param srcReg the source register
2613       */
2614      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
2615      public final void emitADC_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
2616        int miStart = mi;
2617        setMachineCodes(mi++, (byte) 0x66);
2618        generateREXprefix(false, srcReg, null, dstBase);
2619        // single byte opcode
2620        setMachineCodes(mi++, (byte) 0x11);
2621        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
2622        if (lister != null) lister.RDR(miStart, "ADC", dstBase, dstDisp, srcReg);
2623      }
2624    
2625      /**
2626       * Generate a register--register ADC. That is,
2627       * <PRE>
2628       * dstReg +CF=  (word)  srcReg
2629       * </PRE>
2630       *
2631       * @param dstReg the destination register
2632       * @param srcReg the source register
2633       */
2634      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2635      public final void emitADC_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
2636        int miStart = mi;
2637        setMachineCodes(mi++, (byte) 0x66);
2638        generateREXprefix(false, srcReg, null, dstReg);
2639        // single byte opcode
2640        setMachineCodes(mi++, (byte) 0x11);
2641        emitRegRegOperands(dstReg, srcReg);
2642        if (lister != null) lister.RR(miStart, "ADC", dstReg, srcReg);
2643      }
2644    
2645      /**
2646       * Generate a register--register-displacement ADC. That is,
2647       * <PRE>
2648       * dstReg +CF=  (word)  [srcReg + srcDisp]
2649       * </PRE>
2650       *
2651       * @param dstReg the destination register
2652       * @param srcBase the source register
2653       * @param srcDisp the source displacement
2654       */
2655      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2656      public final void emitADC_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
2657        int miStart = mi;
2658        setMachineCodes(mi++, (byte) 0x66);
2659        generateREXprefix(false, dstReg, null, srcBase);
2660        // single byte opcode
2661        setMachineCodes(mi++, (byte) 0x13);
2662        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
2663        if (lister != null) lister.RRD(miStart, "ADC", dstReg, srcBase, srcDisp);
2664      }
2665    
2666      /**
2667       * Generate a register--register-offset ADC. That is,
2668       * <PRE>
2669       * dstReg +CF=  (word)  [srcIndex<<srcScale + srcDisp]
2670       * </PRE>
2671       *
2672       * @param dstReg the destination register
2673       * @param srcIndex the source index register
2674       * @param srcScale the source shift amount
2675       * @param srcDisp the source displacement
2676       */
2677      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2678      public final void emitADC_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
2679        int miStart = mi;
2680        setMachineCodes(mi++, (byte) 0x66);
2681        generateREXprefix(false, dstReg, srcIndex, null);
2682        // single byte opcode
2683        setMachineCodes(mi++, (byte) 0x13);
2684        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
2685        if (lister != null) lister.RRFD(miStart, "ADC", dstReg, srcIndex, srcScale, srcDisp);
2686      }
2687    
2688      /**
2689       * Generate a register--register-offset ADC. That is,
2690       * <PRE>
2691       * dstReg +CF=  (word)  [srcDisp]
2692       * </PRE>
2693       *
2694       * @param dstReg the destination register
2695       * @param srcDisp the source displacement
2696       */
2697      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
2698      public final void emitADC_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
2699        int miStart = mi;
2700        setMachineCodes(mi++, (byte) 0x66);
2701        generateREXprefix(false, dstReg, null, null);
2702        // single byte opcode
2703        setMachineCodes(mi++, (byte) 0x13);
2704        emitAbsRegOperands(srcDisp, dstReg);
2705        if (lister != null) lister.RRA(miStart, "ADC", dstReg, srcDisp);
2706      }
2707    
2708      /**
2709       * Generate a register--register-offset ADC. That is,
2710       * <PRE>
2711       * dstReg +CF=  (word)  [srcBase + srcIndex<<srcScale + srcDisp]
2712       * </PRE>
2713       *
2714       * @param dstReg the destination register
2715       * @param srcBase the source base register
2716       * @param srcIndex the source index register
2717       * @param srcScale the source shift amount
2718       * @param srcDisp the source displacement
2719       */
2720      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
2721      public final void emitADC_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
2722        int miStart = mi;
2723        setMachineCodes(mi++, (byte) 0x66);
2724        generateREXprefix(false, dstReg, srcIndex, srcBase);
2725        // single byte opcode
2726        setMachineCodes(mi++, (byte) 0x13);
2727        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
2728        if (lister != null) lister.RRXD(miStart, "ADC", dstReg, srcBase, srcIndex, srcScale, srcDisp);
2729      }
2730    
2731      /**
2732       * Generate a register--register(indirect) ADC. That is,
2733       * <PRE>
2734       * dstReg +CF=  (word)  [srcBase]
2735       * </PRE>
2736       *
2737       * @param dstReg the destination register
2738       * @param srcBase the source base register
2739       */
2740      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2741      public final void emitADC_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
2742        int miStart = mi;
2743        setMachineCodes(mi++, (byte) 0x66);
2744        generateREXprefix(false, dstReg, null, srcBase);
2745        // single byte opcode
2746        setMachineCodes(mi++, (byte) 0x13);
2747        emitRegIndirectRegOperands(srcBase, dstReg);
2748        if (lister != null) lister.RRN(miStart, "ADC", dstReg, srcBase);
2749      }
2750    
2751      /**
2752       * Generate a register(indirect)--register ADC. That is,
2753       * <PRE>
2754       * [dstBase] +CF=  (quad)  srcReg
2755       * </PRE>
2756       *
2757       * @param dstBase the destination base
2758       * @param srcReg the source register
2759       */
2760      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2761      public final void emitADC_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
2762        int miStart = mi;
2763        // no group 1 to 4 prefix byte
2764        generateREXprefix(true, srcReg, null, dstBase);
2765        // single byte opcode
2766        setMachineCodes(mi++, (byte) 0x11);
2767        emitRegIndirectRegOperands(dstBase, srcReg);
2768        if (lister != null) lister.RNR(miStart, "ADC", dstBase, srcReg);
2769      }
2770    
2771      /**
2772       * Generate a register-offset--register ADC. That is,
2773       * <PRE>
2774       * [dstReg<<dstScale + dstDisp] +CF=  (quad)  srcReg
2775       * </PRE>
2776       *
2777       * @param dstIndex the destination index register
2778       * @param dstScale the destination shift amount
2779       * @param dstDisp the destination displacement
2780       * @param srcReg the source register
2781       */
2782      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
2783      public final void emitADC_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
2784        int miStart = mi;
2785        // no group 1 to 4 prefix byte
2786        generateREXprefix(true, srcReg, dstIndex, null);
2787        // single byte opcode
2788        setMachineCodes(mi++, (byte) 0x11);
2789        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
2790        if (lister != null) lister.RFDR(miStart, "ADC", dstIndex, dstScale, dstDisp, srcReg);
2791      }
2792    
2793      /**
2794       * Generate a absolute--register ADC. That is,
2795       * <PRE>
2796       * [dstDisp] +CF=  (quad)  srcReg
2797       * </PRE>
2798       *
2799       * @param dstDisp the destination address
2800       * @param srcReg the source register
2801       */
2802      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
2803      public final void emitADC_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
2804        int miStart = mi;
2805        // no group 1 to 4 prefix byte
2806        generateREXprefix(true, srcReg, null, null);
2807        // single byte opcode
2808        setMachineCodes(mi++, (byte) 0x11);
2809        emitAbsRegOperands(dstDisp, srcReg);
2810        if (lister != null) lister.RAR(miStart, "ADC", dstDisp, srcReg);
2811      }
2812    
2813      /**
2814       * Generate a register-index--register ADC. That is,
2815       * <PRE>
2816       * [dstBase + dstIndex<<dstScale + dstDisp] +CF=  (quad)  srcReg
2817       * </PRE>
2818       *
2819       * @param dstBase the base register
2820       * @param dstIndex the destination index register
2821       * @param dstScale the destination shift amount
2822       * @param dstDisp the destination displacement
2823       * @param srcReg the source register
2824       */
2825      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
2826      public final void emitADC_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
2827        int miStart = mi;
2828        // no group 1 to 4 prefix byte
2829        generateREXprefix(true, srcReg, dstIndex, dstBase);
2830        // single byte opcode
2831        setMachineCodes(mi++, (byte) 0x11);
2832        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
2833        if (lister != null) lister.RXDR(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, srcReg);
2834      }
2835    
2836      /**
2837       * Generate a register-displacement--register ADC. That is,
2838       * <PRE>
2839       * [dstBase + dstDisp] +CF=  (quad)  srcReg
2840       * </PRE>
2841       *
2842       * @param dstBase the base register
2843       * @param dstDisp the destination displacement
2844       * @param srcReg the source register
2845       */
2846      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
2847      public final void emitADC_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
2848        int miStart = mi;
2849        // no group 1 to 4 prefix byte
2850        generateREXprefix(true, srcReg, null, dstBase);
2851        // single byte opcode
2852        setMachineCodes(mi++, (byte) 0x11);
2853        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
2854        if (lister != null) lister.RDR(miStart, "ADC", dstBase, dstDisp, srcReg);
2855      }
2856    
2857      /**
2858       * Generate a register--register ADC. That is,
2859       * <PRE>
2860       * dstReg +CF=  (quad)  srcReg
2861       * </PRE>
2862       *
2863       * @param dstReg the destination register
2864       * @param srcReg the source register
2865       */
2866      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2867      public final void emitADC_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
2868        int miStart = mi;
2869        // no group 1 to 4 prefix byte
2870        generateREXprefix(true, srcReg, null, dstReg);
2871        // single byte opcode
2872        setMachineCodes(mi++, (byte) 0x11);
2873        emitRegRegOperands(dstReg, srcReg);
2874        if (lister != null) lister.RR(miStart, "ADC", dstReg, srcReg);
2875      }
2876    
2877      /**
2878       * Generate a register--register-displacement ADC. That is,
2879       * <PRE>
2880       * dstReg +CF=  (quad)  [srcReg + srcDisp]
2881       * </PRE>
2882       *
2883       * @param dstReg the destination register
2884       * @param srcBase the source register
2885       * @param srcDisp the source displacement
2886       */
2887      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2888      public final void emitADC_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
2889        int miStart = mi;
2890        // no group 1 to 4 prefix byte
2891        generateREXprefix(true, dstReg, null, srcBase);
2892        // single byte opcode
2893        setMachineCodes(mi++, (byte) 0x13);
2894        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
2895        if (lister != null) lister.RRD(miStart, "ADC", dstReg, srcBase, srcDisp);
2896      }
2897    
2898      /**
2899       * Generate a register--register-offset ADC. That is,
2900       * <PRE>
2901       * dstReg +CF=  (quad)  [srcIndex<<srcScale + srcDisp]
2902       * </PRE>
2903       *
2904       * @param dstReg the destination register
2905       * @param srcIndex the source index register
2906       * @param srcScale the source shift amount
2907       * @param srcDisp the source displacement
2908       */
2909      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2910      public final void emitADC_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
2911        int miStart = mi;
2912        // no group 1 to 4 prefix byte
2913        generateREXprefix(true, dstReg, srcIndex, null);
2914        // single byte opcode
2915        setMachineCodes(mi++, (byte) 0x13);
2916        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
2917        if (lister != null) lister.RRFD(miStart, "ADC", dstReg, srcIndex, srcScale, srcDisp);
2918      }
2919    
2920      /**
2921       * Generate a register--register-offset ADC. That is,
2922       * <PRE>
2923       * dstReg +CF=  (quad)  [srcDisp]
2924       * </PRE>
2925       *
2926       * @param dstReg the destination register
2927       * @param srcDisp the source displacement
2928       */
2929      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
2930      public final void emitADC_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
2931        int miStart = mi;
2932        // no group 1 to 4 prefix byte
2933        generateREXprefix(true, dstReg, null, null);
2934        // single byte opcode
2935        setMachineCodes(mi++, (byte) 0x13);
2936        emitAbsRegOperands(srcDisp, dstReg);
2937        if (lister != null) lister.RRA(miStart, "ADC", dstReg, srcDisp);
2938      }
2939    
2940      /**
2941       * Generate a register--register-offset ADC. That is,
2942       * <PRE>
2943       * dstReg +CF=  (quad)  [srcBase + srcIndex<<srcScale + srcDisp]
2944       * </PRE>
2945       *
2946       * @param dstReg the destination register
2947       * @param srcBase the source base register
2948       * @param srcIndex the source index register
2949       * @param srcScale the source shift amount
2950       * @param srcDisp the source displacement
2951       */
2952      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
2953      public final void emitADC_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
2954        int miStart = mi;
2955        // no group 1 to 4 prefix byte
2956        generateREXprefix(true, dstReg, srcIndex, srcBase);
2957        // single byte opcode
2958        setMachineCodes(mi++, (byte) 0x13);
2959        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
2960        if (lister != null) lister.RRXD(miStart, "ADC", dstReg, srcBase, srcIndex, srcScale, srcDisp);
2961      }
2962    
2963      /**
2964       * Generate a register--register(indirect) ADC. That is,
2965       * <PRE>
2966       * dstReg +CF=  (quad)  [srcBase]
2967       * </PRE>
2968       *
2969       * @param dstReg the destination register
2970       * @param srcBase the source base register
2971       */
2972      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2973      public final void emitADC_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
2974        int miStart = mi;
2975        // no group 1 to 4 prefix byte
2976        generateREXprefix(true, dstReg, null, srcBase);
2977        // single byte opcode
2978        setMachineCodes(mi++, (byte) 0x13);
2979        emitRegIndirectRegOperands(srcBase, dstReg);
2980        if (lister != null) lister.RRN(miStart, "ADC", dstReg, srcBase);
2981      }
2982    
2983      /**
2984       * Generate a register(indirect)--register ADC. That is,
2985       * <PRE>
2986       * [dstBase] +CF=  (byte)  srcReg
2987       * </PRE>
2988       *
2989       * @param dstBase the destination base
2990       * @param srcReg the source register
2991       */
2992      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
2993      public final void emitADC_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
2994        int miStart = mi;
2995        // no group 1 to 4 prefix byte
2996        generateREXprefix(false, srcReg, null, dstBase);
2997        // single byte opcode
2998        setMachineCodes(mi++, (byte) 0x10);
2999        emitRegIndirectRegOperands(dstBase, srcReg);
3000        if (lister != null) lister.RNR(miStart, "ADC", dstBase, srcReg);
3001      }
3002    
3003      /**
3004       * Generate a register-offset--register ADC. That is,
3005       * <PRE>
3006       * [dstReg<<dstScale + dstDisp] +CF=  (byte)  srcReg
3007       * </PRE>
3008       *
3009       * @param dstIndex the destination index register
3010       * @param dstScale the destination shift amount
3011       * @param dstDisp the destination displacement
3012       * @param srcReg the source register
3013       */
3014      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
3015      public final void emitADC_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
3016        int miStart = mi;
3017        // no group 1 to 4 prefix byte
3018        generateREXprefix(false, srcReg, dstIndex, null);
3019        // single byte opcode
3020        setMachineCodes(mi++, (byte) 0x10);
3021        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
3022        if (lister != null) lister.RFDR(miStart, "ADC", dstIndex, dstScale, dstDisp, srcReg);
3023      }
3024    
3025      /**
3026       * Generate a absolute--register ADC. That is,
3027       * <PRE>
3028       * [dstDisp] +CF=  (byte)  srcReg
3029       * </PRE>
3030       *
3031       * @param dstDisp the destination address
3032       * @param srcReg the source register
3033       */
3034      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
3035      public final void emitADC_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
3036        int miStart = mi;
3037        // no group 1 to 4 prefix byte
3038        generateREXprefix(false, srcReg, null, null);
3039        // single byte opcode
3040        setMachineCodes(mi++, (byte) 0x10);
3041        emitAbsRegOperands(dstDisp, srcReg);
3042        if (lister != null) lister.RAR(miStart, "ADC", dstDisp, srcReg);
3043      }
3044    
3045      /**
3046       * Generate a register-index--register ADC. That is,
3047       * <PRE>
3048       * [dstBase + dstIndex<<dstScale + dstDisp] +CF=  (byte)  srcReg
3049       * </PRE>
3050       *
3051       * @param dstBase the base register
3052       * @param dstIndex the destination index register
3053       * @param dstScale the destination shift amount
3054       * @param dstDisp the destination displacement
3055       * @param srcReg the source register
3056       */
3057      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
3058      public final void emitADC_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
3059        int miStart = mi;
3060        // no group 1 to 4 prefix byte
3061        generateREXprefix(false, srcReg, dstIndex, dstBase);
3062        // single byte opcode
3063        setMachineCodes(mi++, (byte) 0x10);
3064        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
3065        if (lister != null) lister.RXDR(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, srcReg);
3066      }
3067    
3068      /**
3069       * Generate a register-displacement--register ADC. That is,
3070       * <PRE>
3071       * [dstBase + dstDisp] +CF=  (byte)  srcReg
3072       * </PRE>
3073       *
3074       * @param dstBase the base register
3075       * @param dstDisp the destination displacement
3076       * @param srcReg the source register
3077       */
3078      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
3079      public final void emitADC_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
3080        int miStart = mi;
3081        // no group 1 to 4 prefix byte
3082        generateREXprefix(false, srcReg, null, dstBase);
3083        // single byte opcode
3084        setMachineCodes(mi++, (byte) 0x10);
3085        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
3086        if (lister != null) lister.RDR(miStart, "ADC", dstBase, dstDisp, srcReg);
3087      }
3088    
3089      /**
3090       * Generate a register--register ADC. That is,
3091       * <PRE>
3092       * dstReg +CF=  (byte)  srcReg
3093       * </PRE>
3094       *
3095       * @param dstReg the destination register
3096       * @param srcReg the source register
3097       */
3098      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
3099      public final void emitADC_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
3100        int miStart = mi;
3101        // no group 1 to 4 prefix byte
3102        generateREXprefix(false, srcReg, null, dstReg);
3103        // single byte opcode
3104        setMachineCodes(mi++, (byte) 0x10);
3105        emitRegRegOperands(dstReg, srcReg);
3106        if (lister != null) lister.RR(miStart, "ADC", dstReg, srcReg);
3107      }
3108    
3109      /**
3110       * Generate a register--register-displacement ADC. That is,
3111       * <PRE>
3112       * dstReg +CF=  (byte)  [srcReg + srcDisp]
3113       * </PRE>
3114       *
3115       * @param dstReg the destination register
3116       * @param srcBase the source register
3117       * @param srcDisp the source displacement
3118       */
3119      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
3120      public final void emitADC_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
3121        int miStart = mi;
3122        // no group 1 to 4 prefix byte
3123        generateREXprefix(false, dstReg, null, srcBase);
3124        // single byte opcode
3125        setMachineCodes(mi++, (byte) 0x12);
3126        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
3127        if (lister != null) lister.RRD(miStart, "ADC", dstReg, srcBase, srcDisp);
3128      }
3129    
3130      /**
3131       * Generate a register--register-offset ADC. That is,
3132       * <PRE>
3133       * dstReg +CF=  (byte)  [srcIndex<<srcScale + srcDisp]
3134       * </PRE>
3135       *
3136       * @param dstReg the destination register
3137       * @param srcIndex the source index register
3138       * @param srcScale the source shift amount
3139       * @param srcDisp the source displacement
3140       */
3141      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
3142      public final void emitADC_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
3143        int miStart = mi;
3144        // no group 1 to 4 prefix byte
3145        generateREXprefix(false, dstReg, srcIndex, null);
3146        // single byte opcode
3147        setMachineCodes(mi++, (byte) 0x12);
3148        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
3149        if (lister != null) lister.RRFD(miStart, "ADC", dstReg, srcIndex, srcScale, srcDisp);
3150      }
3151    
3152      /**
3153       * Generate a register--register-offset ADC. That is,
3154       * <PRE>
3155       * dstReg +CF=  (byte)  [srcDisp]
3156       * </PRE>
3157       *
3158       * @param dstReg the destination register
3159       * @param srcDisp the source displacement
3160       */
3161      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3162      public final void emitADC_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
3163        int miStart = mi;
3164        // no group 1 to 4 prefix byte
3165        generateREXprefix(false, dstReg, null, null);
3166        // single byte opcode
3167        setMachineCodes(mi++, (byte) 0x12);
3168        emitAbsRegOperands(srcDisp, dstReg);
3169        if (lister != null) lister.RRA(miStart, "ADC", dstReg, srcDisp);
3170      }
3171    
3172      /**
3173       * Generate a register--register-offset ADC. That is,
3174       * <PRE>
3175       * dstReg +CF=  (byte)  [srcBase + srcIndex<<srcScale + srcDisp]
3176       * </PRE>
3177       *
3178       * @param dstReg the destination register
3179       * @param srcBase the source base register
3180       * @param srcIndex the source index register
3181       * @param srcScale the source shift amount
3182       * @param srcDisp the source displacement
3183       */
3184      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
3185      public final void emitADC_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
3186        int miStart = mi;
3187        // no group 1 to 4 prefix byte
3188        generateREXprefix(false, dstReg, srcIndex, srcBase);
3189        // single byte opcode
3190        setMachineCodes(mi++, (byte) 0x12);
3191        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
3192        if (lister != null) lister.RRXD(miStart, "ADC", dstReg, srcBase, srcIndex, srcScale, srcDisp);
3193      }
3194    
3195      /**
3196       * Generate a register--register(indirect) ADC. That is,
3197       * <PRE>
3198       * dstReg +CF=  (byte)  [srcBase]
3199       * </PRE>
3200       *
3201       * @param dstReg the destination register
3202       * @param srcBase the source base register
3203       */
3204      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
3205      public final void emitADC_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
3206        int miStart = mi;
3207        // no group 1 to 4 prefix byte
3208        generateREXprefix(false, dstReg, null, srcBase);
3209        // single byte opcode
3210        setMachineCodes(mi++, (byte) 0x12);
3211        emitRegIndirectRegOperands(srcBase, dstReg);
3212        if (lister != null) lister.RRN(miStart, "ADC", dstReg, srcBase);
3213      }
3214    
3215      /**
3216       * Generate a register--immediate ADC. That is,
3217       * <PRE>
3218       * dstReg +CF=  imm
3219       * </PRE>
3220       *
3221       * @param dstReg the destination register
3222       * @param imm immediate
3223       */
3224      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3225      public final void emitADC_Reg_Imm(GPR dstReg, int imm) {
3226        int miStart = mi;
3227        // no group 1 to 4 prefix byte
3228        generateREXprefix(false, null, null, dstReg);
3229        // single byte opcode
3230        if (fits(imm,8)) {
3231          setMachineCodes(mi++, (byte) 0x83);
3232          // "register 0x2" is really part of the opcode
3233          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
3234          emitImm8((byte)imm);
3235        } else if (dstReg == EAX) {
3236          setMachineCodes(mi++, (byte) 0x15);
3237          emitImm32(imm);
3238        } else {
3239          setMachineCodes(mi++, (byte) 0x81);
3240          // "register 0x2" is really part of the opcode
3241          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
3242          emitImm32(imm);
3243        }
3244        if (lister != null) lister.RI(miStart, "ADC", dstReg, imm);
3245      }
3246    
3247      /**
3248       * Generate a register-displacement--immediate ADC. That is,
3249       * <PRE>
3250       * [dstBase + dstDisp] +CF=  imm
3251       * </PRE>
3252       *
3253       * @param dstBase the destination register
3254       * @param dstDisp the destination displacement
3255       * @param imm immediate
3256       */
3257      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3258      public final void emitADC_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
3259        int miStart = mi;
3260        // no group 1 to 4 prefix byte
3261        generateREXprefix(false, null, null, dstBase);
3262        // single byte opcode
3263        if (fits(imm,8)) {
3264          setMachineCodes(mi++, (byte) 0x83);
3265          // "register 0x2" is really part of the opcode
3266          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
3267          emitImm8((byte)imm);
3268        } else {
3269          setMachineCodes(mi++, (byte) 0x81);
3270          // "register 0x2" is really part of the opcode
3271          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
3272          emitImm32(imm);
3273        }
3274        if (lister != null) lister.RDI(miStart, "ADC", dstBase, dstDisp, imm);
3275      }
3276    
3277      /**
3278       * Generate a register-offset--immediate ADC. That is,
3279       * <PRE>
3280       * [dstIndex<<dstScale + dstDisp] +CF=  imm
3281       * </PRE>
3282       *
3283       * @param dstIndex the destination index register
3284       * @param dstScale the destination shift amount
3285       * @param dstDisp the destination displacement
3286       * @param imm immediate
3287       */
3288      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3289      public final void emitADC_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
3290        int miStart = mi;
3291        // no group 1 to 4 prefix byte
3292        generateREXprefix(false, null, dstIndex, null);
3293        // single byte opcode
3294        if (fits(imm,8)) {
3295          setMachineCodes(mi++, (byte) 0x83);
3296          // "register 0x2" is really part of the opcode
3297          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3298          emitImm8((byte)imm);
3299        } else {
3300          setMachineCodes(mi++, (byte) 0x81);
3301          // "register 0x2" is really part of the opcode
3302          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3303          emitImm32(imm);
3304        }
3305        if (lister != null) lister.RFDI(miStart, "ADC", dstIndex, dstScale, dstDisp, imm);
3306      }
3307    
3308      /**
3309       * Generate a absolute--immediate ADC. That is,
3310       * <PRE>
3311       * [dstDisp] +CF=  imm
3312       * </PRE>
3313       *
3314       * @param dstDisp the destination displacement
3315       * @param imm immediate
3316       */
3317      public final void emitADC_Abs_Imm(Address dstDisp, int imm) {
3318        int miStart = mi;
3319        // no group 1 to 4 prefix byte
3320        generateREXprefix(false, null, null, null);
3321        // single byte opcode
3322        if (fits(imm,8)) {
3323          setMachineCodes(mi++, (byte) 0x83);
3324          // "register 0x2" is really part of the opcode
3325          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
3326          emitImm8((byte)imm);
3327        } else {
3328          setMachineCodes(mi++, (byte) 0x81);
3329          // "register 0x2" is really part of the opcode
3330          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
3331          emitImm32(imm);
3332        }
3333        if (lister != null) lister.RAI(miStart, "ADC", dstDisp, imm);
3334      }
3335    
3336      /**
3337       * Generate a register-index--immediate ADC. That is,
3338       * <PRE>
3339       * [dstBase + dstIndex<<dstScale + dstDisp] +CF=  imm
3340       * </PRE>
3341       *
3342       * @param dstBase the destination base register
3343       * @param dstIndex the destination index register
3344       * @param dstScale the destination shift amount
3345       * @param dstDisp the destination displacement
3346       * @param imm immediate
3347       */
3348      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
3349      public final void emitADC_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
3350        int miStart = mi;
3351        // no group 1 to 4 prefix byte
3352        generateREXprefix(false, null, dstIndex, dstBase);
3353        // single byte opcode
3354        if (fits(imm,8)) {
3355          setMachineCodes(mi++, (byte) 0x83);
3356          // "register 0x2" is really part of the opcode
3357          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3358          emitImm8((byte)imm);
3359        } else {
3360          setMachineCodes(mi++, (byte) 0x81);
3361          // "register 0x2" is really part of the opcode
3362          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3363          emitImm32(imm);
3364        }
3365        if (lister != null) lister.RXDI(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, imm);
3366      }
3367    
3368      /**
3369       * Generate a register(indirect)--immediate ADC. That is,
3370       * <PRE>
3371       * [dstBase] +CF=  imm
3372       * </PRE>
3373       *
3374       * @param dstBase the destination base register
3375       * @param imm immediate
3376       */
3377      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3378      public final void emitADC_RegInd_Imm(GPR dstBase, int imm) {
3379        int miStart = mi;
3380        // no group 1 to 4 prefix byte
3381        generateREXprefix(false, null, null, dstBase);
3382        // single byte opcode
3383        if (fits(imm,8)) {
3384          setMachineCodes(mi++, (byte) 0x83);
3385          // "register 0x2" is really part of the opcode
3386          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
3387          emitImm8((byte)imm);
3388        } else {
3389          setMachineCodes(mi++, (byte) 0x81);
3390          // "register 0x2" is really part of the opcode
3391          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
3392          emitImm32(imm);
3393        }
3394        if (lister != null) lister.RNI(miStart, "ADC", dstBase, imm);
3395      }
3396    
3397      /**
3398       * Generate a register--immediate ADC. That is,
3399       * <PRE>
3400       * dstReg +CF=  (word)  imm
3401       * </PRE>
3402       *
3403       * @param dstReg the destination register
3404       * @param imm immediate
3405       */
3406      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3407      public final void emitADC_Reg_Imm_Word(GPR dstReg, int imm) {
3408        int miStart = mi;
3409        setMachineCodes(mi++, (byte) 0x66);
3410        generateREXprefix(false, null, null, dstReg);
3411        // single byte opcode
3412        if (fits(imm,8)) {
3413          setMachineCodes(mi++, (byte) 0x83);
3414          // "register 0x2" is really part of the opcode
3415          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
3416          emitImm8((byte)imm);
3417        } else if (dstReg == EAX) {
3418          setMachineCodes(mi++, (byte) 0x15);
3419          emitImm16(imm);
3420        } else {
3421          setMachineCodes(mi++, (byte) 0x81);
3422          // "register 0x2" is really part of the opcode
3423          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
3424          emitImm16(imm);
3425        }
3426        if (lister != null) lister.RI(miStart, "ADC", dstReg, imm);
3427      }
3428    
3429      /**
3430       * Generate a register-displacement--immediate ADC. That is,
3431       * <PRE>
3432       * [dstBase + dstDisp] +CF=  (word)  imm
3433       * </PRE>
3434       *
3435       * @param dstBase the destination register
3436       * @param dstDisp the destination displacement
3437       * @param imm immediate
3438       */
3439      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3440      public final void emitADC_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
3441        int miStart = mi;
3442        setMachineCodes(mi++, (byte) 0x66);
3443        generateREXprefix(false, null, null, dstBase);
3444        // single byte opcode
3445        if (fits(imm,8)) {
3446          setMachineCodes(mi++, (byte) 0x83);
3447          // "register 0x2" is really part of the opcode
3448          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
3449          emitImm8((byte)imm);
3450        } else {
3451          setMachineCodes(mi++, (byte) 0x81);
3452          // "register 0x2" is really part of the opcode
3453          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
3454          emitImm16(imm);
3455        }
3456        if (lister != null) lister.RDI(miStart, "ADC", dstBase, dstDisp, imm);
3457      }
3458    
3459      /**
3460       * Generate a register-offset--immediate ADC. That is,
3461       * <PRE>
3462       * [dstIndex<<dstScale + dstDisp] +CF=  (word)  imm
3463       * </PRE>
3464       *
3465       * @param dstIndex the destination index register
3466       * @param dstScale the destination shift amount
3467       * @param dstDisp the destination displacement
3468       * @param imm immediate
3469       */
3470      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3471      public final void emitADC_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
3472        int miStart = mi;
3473        setMachineCodes(mi++, (byte) 0x66);
3474        generateREXprefix(false, null, dstIndex, null);
3475        // single byte opcode
3476        if (fits(imm,8)) {
3477          setMachineCodes(mi++, (byte) 0x83);
3478          // "register 0x2" is really part of the opcode
3479          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3480          emitImm8((byte)imm);
3481        } else {
3482          setMachineCodes(mi++, (byte) 0x81);
3483          // "register 0x2" is really part of the opcode
3484          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3485          emitImm16(imm);
3486        }
3487        if (lister != null) lister.RFDI(miStart, "ADC", dstIndex, dstScale, dstDisp, imm);
3488      }
3489    
3490      /**
3491       * Generate a absolute--immediate ADC. That is,
3492       * <PRE>
3493       * [dstDisp] +CF=  (word)  imm
3494       * </PRE>
3495       *
3496       * @param dstDisp the destination displacement
3497       * @param imm immediate
3498       */
3499      public final void emitADC_Abs_Imm_Word(Address dstDisp, int imm) {
3500        int miStart = mi;
3501        setMachineCodes(mi++, (byte) 0x66);
3502        generateREXprefix(false, null, null, null);
3503        // single byte opcode
3504        if (fits(imm,8)) {
3505          setMachineCodes(mi++, (byte) 0x83);
3506          // "register 0x2" is really part of the opcode
3507          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
3508          emitImm8((byte)imm);
3509        } else {
3510          setMachineCodes(mi++, (byte) 0x81);
3511          // "register 0x2" is really part of the opcode
3512          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
3513          emitImm16(imm);
3514        }
3515        if (lister != null) lister.RAI(miStart, "ADC", dstDisp, imm);
3516      }
3517    
3518      /**
3519       * Generate a register-index--immediate ADC. That is,
3520       * <PRE>
3521       * [dstBase + dstIndex<<dstScale + dstDisp] +CF=  (word)  imm
3522       * </PRE>
3523       *
3524       * @param dstBase the destination base register
3525       * @param dstIndex the destination index register
3526       * @param dstScale the destination shift amount
3527       * @param dstDisp the destination displacement
3528       * @param imm immediate
3529       */
3530      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
3531      public final void emitADC_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
3532        int miStart = mi;
3533        setMachineCodes(mi++, (byte) 0x66);
3534        generateREXprefix(false, null, dstIndex, dstBase);
3535        // single byte opcode
3536        if (fits(imm,8)) {
3537          setMachineCodes(mi++, (byte) 0x83);
3538          // "register 0x2" is really part of the opcode
3539          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3540          emitImm8((byte)imm);
3541        } else {
3542          setMachineCodes(mi++, (byte) 0x81);
3543          // "register 0x2" is really part of the opcode
3544          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3545          emitImm16(imm);
3546        }
3547        if (lister != null) lister.RXDI(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, imm);
3548      }
3549    
3550      /**
3551       * Generate a register(indirect)--immediate ADC. That is,
3552       * <PRE>
3553       * [dstBase] +CF=  (word)  imm
3554       * </PRE>
3555       *
3556       * @param dstBase the destination base register
3557       * @param imm immediate
3558       */
3559      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3560      public final void emitADC_RegInd_Imm_Word(GPR dstBase, int imm) {
3561        int miStart = mi;
3562        setMachineCodes(mi++, (byte) 0x66);
3563        generateREXprefix(false, null, null, dstBase);
3564        // single byte opcode
3565        if (fits(imm,8)) {
3566          setMachineCodes(mi++, (byte) 0x83);
3567          // "register 0x2" is really part of the opcode
3568          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
3569          emitImm8((byte)imm);
3570        } else {
3571          setMachineCodes(mi++, (byte) 0x81);
3572          // "register 0x2" is really part of the opcode
3573          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
3574          emitImm16(imm);
3575        }
3576        if (lister != null) lister.RNI(miStart, "ADC", dstBase, imm);
3577      }
3578    
3579      /**
3580       * Generate a register--immediate ADC. That is,
3581       * <PRE>
3582       * dstReg +CF=  (quad)  imm
3583       * </PRE>
3584       *
3585       * @param dstReg the destination register
3586       * @param imm immediate
3587       */
3588      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3589      public final void emitADC_Reg_Imm_Quad(GPR dstReg, int imm) {
3590        int miStart = mi;
3591        // no group 1 to 4 prefix byte
3592        generateREXprefix(true, null, null, dstReg);
3593        // single byte opcode
3594        if (fits(imm,8)) {
3595          setMachineCodes(mi++, (byte) 0x83);
3596          // "register 0x2" is really part of the opcode
3597          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
3598          emitImm8((byte)imm);
3599        } else if (dstReg == EAX) {
3600          setMachineCodes(mi++, (byte) 0x15);
3601          emitImm32(imm);
3602        } else {
3603          setMachineCodes(mi++, (byte) 0x81);
3604          // "register 0x2" is really part of the opcode
3605          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
3606          emitImm32(imm);
3607        }
3608        if (lister != null) lister.RI(miStart, "ADC", dstReg, imm);
3609      }
3610    
3611      /**
3612       * Generate a register-displacement--immediate ADC. That is,
3613       * <PRE>
3614       * [dstBase + dstDisp] +CF=  (quad)  imm
3615       * </PRE>
3616       *
3617       * @param dstBase the destination register
3618       * @param dstDisp the destination displacement
3619       * @param imm immediate
3620       */
3621      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3622      public final void emitADC_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
3623        int miStart = mi;
3624        // no group 1 to 4 prefix byte
3625        generateREXprefix(true, null, null, dstBase);
3626        // single byte opcode
3627        if (fits(imm,8)) {
3628          setMachineCodes(mi++, (byte) 0x83);
3629          // "register 0x2" is really part of the opcode
3630          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
3631          emitImm8((byte)imm);
3632        } else {
3633          setMachineCodes(mi++, (byte) 0x81);
3634          // "register 0x2" is really part of the opcode
3635          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
3636          emitImm32(imm);
3637        }
3638        if (lister != null) lister.RDI(miStart, "ADC", dstBase, dstDisp, imm);
3639      }
3640    
3641      /**
3642       * Generate a register-offset--immediate ADC. That is,
3643       * <PRE>
3644       * [dstIndex<<dstScale + dstDisp] +CF=  (quad)  imm
3645       * </PRE>
3646       *
3647       * @param dstIndex the destination index register
3648       * @param dstScale the destination shift amount
3649       * @param dstDisp the destination displacement
3650       * @param imm immediate
3651       */
3652      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3653      public final void emitADC_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
3654        int miStart = mi;
3655        // no group 1 to 4 prefix byte
3656        generateREXprefix(true, null, dstIndex, null);
3657        // single byte opcode
3658        if (fits(imm,8)) {
3659          setMachineCodes(mi++, (byte) 0x83);
3660          // "register 0x2" is really part of the opcode
3661          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3662          emitImm8((byte)imm);
3663        } else {
3664          setMachineCodes(mi++, (byte) 0x81);
3665          // "register 0x2" is really part of the opcode
3666          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3667          emitImm32(imm);
3668        }
3669        if (lister != null) lister.RFDI(miStart, "ADC", dstIndex, dstScale, dstDisp, imm);
3670      }
3671    
3672      /**
3673       * Generate a absolute--immediate ADC. That is,
3674       * <PRE>
3675       * [dstDisp] +CF=  (quad)  imm
3676       * </PRE>
3677       *
3678       * @param dstDisp the destination displacement
3679       * @param imm immediate
3680       */
3681      public final void emitADC_Abs_Imm_Quad(Address dstDisp, int imm) {
3682        int miStart = mi;
3683        // no group 1 to 4 prefix byte
3684        generateREXprefix(true, null, null, null);
3685        // single byte opcode
3686        if (fits(imm,8)) {
3687          setMachineCodes(mi++, (byte) 0x83);
3688          // "register 0x2" is really part of the opcode
3689          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
3690          emitImm8((byte)imm);
3691        } else {
3692          setMachineCodes(mi++, (byte) 0x81);
3693          // "register 0x2" is really part of the opcode
3694          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
3695          emitImm32(imm);
3696        }
3697        if (lister != null) lister.RAI(miStart, "ADC", dstDisp, imm);
3698      }
3699    
3700      /**
3701       * Generate a register-index--immediate ADC. That is,
3702       * <PRE>
3703       * [dstBase + dstIndex<<dstScale + dstDisp] +CF=  (quad)  imm
3704       * </PRE>
3705       *
3706       * @param dstBase the destination base register
3707       * @param dstIndex the destination index register
3708       * @param dstScale the destination shift amount
3709       * @param dstDisp the destination displacement
3710       * @param imm immediate
3711       */
3712      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
3713      public final void emitADC_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
3714        int miStart = mi;
3715        // no group 1 to 4 prefix byte
3716        generateREXprefix(true, null, dstIndex, dstBase);
3717        // single byte opcode
3718        if (fits(imm,8)) {
3719          setMachineCodes(mi++, (byte) 0x83);
3720          // "register 0x2" is really part of the opcode
3721          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3722          emitImm8((byte)imm);
3723        } else {
3724          setMachineCodes(mi++, (byte) 0x81);
3725          // "register 0x2" is really part of the opcode
3726          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3727          emitImm32(imm);
3728        }
3729        if (lister != null) lister.RXDI(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, imm);
3730      }
3731    
3732      /**
3733       * Generate a register(indirect)--immediate ADC. That is,
3734       * <PRE>
3735       * [dstBase] +CF=  (quad)  imm
3736       * </PRE>
3737       *
3738       * @param dstBase the destination base register
3739       * @param imm immediate
3740       */
3741      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3742      public final void emitADC_RegInd_Imm_Quad(GPR dstBase, int imm) {
3743        int miStart = mi;
3744        // no group 1 to 4 prefix byte
3745        generateREXprefix(true, null, null, dstBase);
3746        // single byte opcode
3747        if (fits(imm,8)) {
3748          setMachineCodes(mi++, (byte) 0x83);
3749          // "register 0x2" is really part of the opcode
3750          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
3751          emitImm8((byte)imm);
3752        } else {
3753          setMachineCodes(mi++, (byte) 0x81);
3754          // "register 0x2" is really part of the opcode
3755          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
3756          emitImm32(imm);
3757        }
3758        if (lister != null) lister.RNI(miStart, "ADC", dstBase, imm);
3759      }
3760    
3761      /**
3762       * Generate a register--immediate ADC. That is,
3763       * <PRE>
3764       *  dstReg +CF= (byte) imm
3765       * </PRE>
3766       *
3767       * @param dstReg the destination register
3768       * @param imm immediate
3769       */
3770      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3771      public final void emitADC_Reg_Imm_Byte(GPR dstReg, int imm) {
3772        int miStart = mi;
3773        if (dstReg == EAX) {
3774          setMachineCodes(mi++, (byte) 0x14);
3775          emitImm8(imm);
3776        } else {
3777          generateREXprefix(false, null, null, dstReg);
3778          setMachineCodes(mi++, (byte) 0x80);
3779          // "register 0x2" is really part of the opcode
3780          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
3781          emitImm8(imm);
3782        }
3783        if (lister != null) lister.RI(miStart, "ADC", dstReg, imm);
3784      }
3785    
3786      /**
3787       * Generate a register-displacement--immediate ADC. That is,
3788       * <PRE>
3789       * [dstBase + dstDisp] +CF= (byte) imm
3790       * </PRE>
3791       *
3792       * @param dstBase the destination register
3793       * @param dstDisp the destination displacement
3794       * @param imm immediate
3795       */
3796      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3797      public final void emitADC_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
3798        int miStart = mi;
3799        generateREXprefix(false, null, null, dstBase);
3800        setMachineCodes(mi++, (byte) 0x80);
3801        // "register 0x2" is really part of the opcode
3802        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
3803        emitImm8(imm);
3804        if (lister != null) lister.RDI(miStart, "ADC", dstBase, dstDisp, imm);
3805      }
3806    
3807      /**
3808       * Generate a register-index--immediate ADC. That is,
3809       * <PRE>
3810       * [dstBase + dstIndex<<scale + dstDisp] +CF= (byte) imm
3811       * </PRE>
3812       *
3813       * @param dstBase the destination base register
3814       * @param dstIndex the destination index register
3815       * @param dstScale the destination shift amount
3816       * @param dstDisp the destination displacement
3817       * @param imm immediate
3818       */
3819      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
3820      public final void emitADC_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
3821        int miStart = mi;
3822        generateREXprefix(false, null, dstIndex, dstBase);
3823        setMachineCodes(mi++, (byte) 0x80);
3824        // "register 0x2" is really part of the opcode
3825        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3826        emitImm8(imm);
3827        if (lister != null) lister.RXDI(miStart, "ADC", dstBase, dstIndex, dstScale, dstDisp, imm);
3828      }
3829    
3830      /**
3831       * Generate a register-offset--immediate ADC. That is,
3832       * <PRE>
3833       * [dstIndex<<dstScale + dstDisp] +CF= (byte) imm
3834       * </PRE>
3835       *
3836       * @param dstIndex the destination index register
3837       * @param dstScale the destination shift amount
3838       * @param dstDisp the destination displacement
3839       * @param imm immediate
3840       */
3841      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3842      public final void emitADC_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
3843        int miStart = mi;
3844        generateREXprefix(false, null, dstIndex, null);
3845        setMachineCodes(mi++, (byte) 0x80);
3846        // "register 0x2" is really part of the opcode
3847        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
3848        emitImm8(imm);
3849        if (lister != null) lister.RFDI(miStart, "ADC", dstIndex, dstScale, dstDisp, imm);
3850      }
3851    
3852      /**
3853       * Generate a absolute--immediate ADC. That is,
3854       * <PRE>
3855       * [dstDisp] +CF= (byte) imm
3856       * </PRE>
3857       *
3858       * @param dstDisp the destination displacement
3859       * @param imm immediate
3860       */
3861      public final void emitADC_Abs_Imm_Byte(Address dstDisp, int imm) {
3862        int miStart = mi;
3863        generateREXprefix(false, null, null, null);
3864        setMachineCodes(mi++, (byte) 0x80);
3865        // "register 0x2" is really part of the opcode
3866        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
3867        emitImm8(imm);
3868        if (lister != null) lister.RAI(miStart, "ADC", dstDisp, imm);
3869      }
3870    
3871      /**
3872       * Generate a register(indirect)--immediate ADC. That is,
3873       * <PRE>
3874       * [dstBase] +CF= (byte) imm
3875       * </PRE>
3876       *
3877       * @param dstBase the destination base register
3878       * @param imm immediate
3879       */
3880      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
3881      public final void emitADC_RegInd_Imm_Byte(GPR dstBase, int imm) {
3882        int miStart = mi;
3883        generateREXprefix(false, null, null, dstBase);
3884        setMachineCodes(mi++, (byte) 0x80);
3885        // "register 0x2" is really part of the opcode
3886        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
3887        emitImm8(imm);
3888        if (lister != null) lister.RNI(miStart, "ADC", dstBase, imm);
3889      }
3890    
3891      /**
3892       * Generate a register(indirect)--register ADD. That is,
3893       * <PRE>
3894       * [dstBase] +=  srcReg
3895       * </PRE>
3896       *
3897       * @param dstBase the destination base
3898       * @param srcReg the source register
3899       */
3900      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
3901      public final void emitADD_RegInd_Reg(GPR dstBase, GPR srcReg) {
3902        int miStart = mi;
3903        // no group 1 to 4 prefix byte
3904        generateREXprefix(false, srcReg, null, dstBase);
3905        // single byte opcode
3906        setMachineCodes(mi++, (byte) 0x01);
3907        emitRegIndirectRegOperands(dstBase, srcReg);
3908        if (lister != null) lister.RNR(miStart, "ADD", dstBase, srcReg);
3909      }
3910    
3911      /**
3912       * Generate a register-offset--register ADD. That is,
3913       * <PRE>
3914       * [dstReg<<dstScale + dstDisp] +=  srcReg
3915       * </PRE>
3916       *
3917       * @param dstIndex the destination index register
3918       * @param dstScale the destination shift amount
3919       * @param dstDisp the destination displacement
3920       * @param srcReg the source register
3921       */
3922      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
3923      public final void emitADD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
3924        int miStart = mi;
3925        // no group 1 to 4 prefix byte
3926        generateREXprefix(false, srcReg, dstIndex, null);
3927        // single byte opcode
3928        setMachineCodes(mi++, (byte) 0x01);
3929        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
3930        if (lister != null) lister.RFDR(miStart, "ADD", dstIndex, dstScale, dstDisp, srcReg);
3931      }
3932    
3933      /**
3934       * Generate a absolute--register ADD. That is,
3935       * <PRE>
3936       * [dstDisp] +=  srcReg
3937       * </PRE>
3938       *
3939       * @param dstDisp the destination address
3940       * @param srcReg the source register
3941       */
3942      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
3943      public final void emitADD_Abs_Reg(Address dstDisp, GPR srcReg) {
3944        int miStart = mi;
3945        // no group 1 to 4 prefix byte
3946        generateREXprefix(false, srcReg, null, null);
3947        // single byte opcode
3948        setMachineCodes(mi++, (byte) 0x01);
3949        emitAbsRegOperands(dstDisp, srcReg);
3950        if (lister != null) lister.RAR(miStart, "ADD", dstDisp, srcReg);
3951      }
3952    
3953      /**
3954       * Generate a register-index--register ADD. That is,
3955       * <PRE>
3956       * [dstBase + dstIndex<<dstScale + dstDisp] +=  srcReg
3957       * </PRE>
3958       *
3959       * @param dstBase the base register
3960       * @param dstIndex the destination index register
3961       * @param dstScale the destination shift amount
3962       * @param dstDisp the destination displacement
3963       * @param srcReg the source register
3964       */
3965      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
3966      public final void emitADD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
3967        int miStart = mi;
3968        // no group 1 to 4 prefix byte
3969        generateREXprefix(false, srcReg, dstIndex, dstBase);
3970        // single byte opcode
3971        setMachineCodes(mi++, (byte) 0x01);
3972        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
3973        if (lister != null) lister.RXDR(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, srcReg);
3974      }
3975    
3976      /**
3977       * Generate a register-displacement--register ADD. That is,
3978       * <PRE>
3979       * [dstBase + dstDisp] +=  srcReg
3980       * </PRE>
3981       *
3982       * @param dstBase the base register
3983       * @param dstDisp the destination displacement
3984       * @param srcReg the source register
3985       */
3986      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
3987      public final void emitADD_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
3988        int miStart = mi;
3989        // no group 1 to 4 prefix byte
3990        generateREXprefix(false, srcReg, null, dstBase);
3991        // single byte opcode
3992        setMachineCodes(mi++, (byte) 0x01);
3993        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
3994        if (lister != null) lister.RDR(miStart, "ADD", dstBase, dstDisp, srcReg);
3995      }
3996    
3997      /**
3998       * Generate a register--register ADD. That is,
3999       * <PRE>
4000       * dstReg +=  srcReg
4001       * </PRE>
4002       *
4003       * @param dstReg the destination register
4004       * @param srcReg the source register
4005       */
4006      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4007      public final void emitADD_Reg_Reg(GPR dstReg, GPR srcReg) {
4008        int miStart = mi;
4009        // no group 1 to 4 prefix byte
4010        generateREXprefix(false, srcReg, null, dstReg);
4011        // single byte opcode
4012        setMachineCodes(mi++, (byte) 0x01);
4013        emitRegRegOperands(dstReg, srcReg);
4014        if (lister != null) lister.RR(miStart, "ADD", dstReg, srcReg);
4015      }
4016    
4017      /**
4018       * Generate a register--register-displacement ADD. That is,
4019       * <PRE>
4020       * dstReg +=  [srcReg + srcDisp]
4021       * </PRE>
4022       *
4023       * @param dstReg the destination register
4024       * @param srcBase the source register
4025       * @param srcDisp the source displacement
4026       */
4027      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4028      public final void emitADD_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
4029        int miStart = mi;
4030        // no group 1 to 4 prefix byte
4031        generateREXprefix(false, dstReg, null, srcBase);
4032        // single byte opcode
4033        setMachineCodes(mi++, (byte) 0x03);
4034        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
4035        if (lister != null) lister.RRD(miStart, "ADD", dstReg, srcBase, srcDisp);
4036      }
4037    
4038      /**
4039       * Generate a register--register-offset ADD. That is,
4040       * <PRE>
4041       * dstReg +=  [srcIndex<<srcScale + srcDisp]
4042       * </PRE>
4043       *
4044       * @param dstReg the destination register
4045       * @param srcIndex the source index register
4046       * @param srcScale the source shift amount
4047       * @param srcDisp the source displacement
4048       */
4049      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4050      public final void emitADD_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
4051        int miStart = mi;
4052        // no group 1 to 4 prefix byte
4053        generateREXprefix(false, dstReg, srcIndex, null);
4054        // single byte opcode
4055        setMachineCodes(mi++, (byte) 0x03);
4056        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
4057        if (lister != null) lister.RRFD(miStart, "ADD", dstReg, srcIndex, srcScale, srcDisp);
4058      }
4059    
4060      /**
4061       * Generate a register--register-offset ADD. That is,
4062       * <PRE>
4063       * dstReg +=  [srcDisp]
4064       * </PRE>
4065       *
4066       * @param dstReg the destination register
4067       * @param srcDisp the source displacement
4068       */
4069      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
4070      public final void emitADD_Reg_Abs(GPR dstReg, Address srcDisp) {
4071        int miStart = mi;
4072        // no group 1 to 4 prefix byte
4073        generateREXprefix(false, dstReg, null, null);
4074        // single byte opcode
4075        setMachineCodes(mi++, (byte) 0x03);
4076        emitAbsRegOperands(srcDisp, dstReg);
4077        if (lister != null) lister.RRA(miStart, "ADD", dstReg, srcDisp);
4078      }
4079    
4080      /**
4081       * Generate a register--register-offset ADD. That is,
4082       * <PRE>
4083       * dstReg +=  [srcBase + srcIndex<<srcScale + srcDisp]
4084       * </PRE>
4085       *
4086       * @param dstReg the destination register
4087       * @param srcBase the source base register
4088       * @param srcIndex the source index register
4089       * @param srcScale the source shift amount
4090       * @param srcDisp the source displacement
4091       */
4092      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
4093      public final void emitADD_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
4094        int miStart = mi;
4095        // no group 1 to 4 prefix byte
4096        generateREXprefix(false, dstReg, srcIndex, srcBase);
4097        // single byte opcode
4098        setMachineCodes(mi++, (byte) 0x03);
4099        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
4100        if (lister != null) lister.RRXD(miStart, "ADD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
4101      }
4102    
4103      /**
4104       * Generate a register--register(indirect) ADD. That is,
4105       * <PRE>
4106       * dstReg +=  [srcBase]
4107       * </PRE>
4108       *
4109       * @param dstReg the destination register
4110       * @param srcBase the source base register
4111       */
4112      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4113      public final void emitADD_Reg_RegInd(GPR dstReg, GPR srcBase) {
4114        int miStart = mi;
4115        // no group 1 to 4 prefix byte
4116        generateREXprefix(false, dstReg, null, srcBase);
4117        // single byte opcode
4118        setMachineCodes(mi++, (byte) 0x03);
4119        emitRegIndirectRegOperands(srcBase, dstReg);
4120        if (lister != null) lister.RRN(miStart, "ADD", dstReg, srcBase);
4121      }
4122    
4123      /**
4124       * Generate a register(indirect)--register ADD. That is,
4125       * <PRE>
4126       * [dstBase] +=  (word)  srcReg
4127       * </PRE>
4128       *
4129       * @param dstBase the destination base
4130       * @param srcReg the source register
4131       */
4132      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4133      public final void emitADD_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
4134        int miStart = mi;
4135        setMachineCodes(mi++, (byte) 0x66);
4136        generateREXprefix(false, srcReg, null, dstBase);
4137        // single byte opcode
4138        setMachineCodes(mi++, (byte) 0x01);
4139        emitRegIndirectRegOperands(dstBase, srcReg);
4140        if (lister != null) lister.RNR(miStart, "ADD", dstBase, srcReg);
4141      }
4142    
4143      /**
4144       * Generate a register-offset--register ADD. That is,
4145       * <PRE>
4146       * [dstReg<<dstScale + dstDisp] +=  (word)  srcReg
4147       * </PRE>
4148       *
4149       * @param dstIndex the destination index register
4150       * @param dstScale the destination shift amount
4151       * @param dstDisp the destination displacement
4152       * @param srcReg the source register
4153       */
4154      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
4155      public final void emitADD_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
4156        int miStart = mi;
4157        setMachineCodes(mi++, (byte) 0x66);
4158        generateREXprefix(false, srcReg, dstIndex, null);
4159        // single byte opcode
4160        setMachineCodes(mi++, (byte) 0x01);
4161        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
4162        if (lister != null) lister.RFDR(miStart, "ADD", dstIndex, dstScale, dstDisp, srcReg);
4163      }
4164    
4165      /**
4166       * Generate a absolute--register ADD. That is,
4167       * <PRE>
4168       * [dstDisp] +=  (word)  srcReg
4169       * </PRE>
4170       *
4171       * @param dstDisp the destination address
4172       * @param srcReg the source register
4173       */
4174      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
4175      public final void emitADD_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
4176        int miStart = mi;
4177        setMachineCodes(mi++, (byte) 0x66);
4178        generateREXprefix(false, srcReg, null, null);
4179        // single byte opcode
4180        setMachineCodes(mi++, (byte) 0x01);
4181        emitAbsRegOperands(dstDisp, srcReg);
4182        if (lister != null) lister.RAR(miStart, "ADD", dstDisp, srcReg);
4183      }
4184    
4185      /**
4186       * Generate a register-index--register ADD. That is,
4187       * <PRE>
4188       * [dstBase + dstIndex<<dstScale + dstDisp] +=  (word)  srcReg
4189       * </PRE>
4190       *
4191       * @param dstBase the base register
4192       * @param dstIndex the destination index register
4193       * @param dstScale the destination shift amount
4194       * @param dstDisp the destination displacement
4195       * @param srcReg the source register
4196       */
4197      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
4198      public final void emitADD_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
4199        int miStart = mi;
4200        setMachineCodes(mi++, (byte) 0x66);
4201        generateREXprefix(false, srcReg, dstIndex, dstBase);
4202        // single byte opcode
4203        setMachineCodes(mi++, (byte) 0x01);
4204        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
4205        if (lister != null) lister.RXDR(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, srcReg);
4206      }
4207    
4208      /**
4209       * Generate a register-displacement--register ADD. That is,
4210       * <PRE>
4211       * [dstBase + dstDisp] +=  (word)  srcReg
4212       * </PRE>
4213       *
4214       * @param dstBase the base register
4215       * @param dstDisp the destination displacement
4216       * @param srcReg the source register
4217       */
4218      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
4219      public final void emitADD_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
4220        int miStart = mi;
4221        setMachineCodes(mi++, (byte) 0x66);
4222        generateREXprefix(false, srcReg, null, dstBase);
4223        // single byte opcode
4224        setMachineCodes(mi++, (byte) 0x01);
4225        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
4226        if (lister != null) lister.RDR(miStart, "ADD", dstBase, dstDisp, srcReg);
4227      }
4228    
4229      /**
4230       * Generate a register--register ADD. That is,
4231       * <PRE>
4232       * dstReg +=  (word)  srcReg
4233       * </PRE>
4234       *
4235       * @param dstReg the destination register
4236       * @param srcReg the source register
4237       */
4238      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4239      public final void emitADD_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
4240        int miStart = mi;
4241        setMachineCodes(mi++, (byte) 0x66);
4242        generateREXprefix(false, srcReg, null, dstReg);
4243        // single byte opcode
4244        setMachineCodes(mi++, (byte) 0x01);
4245        emitRegRegOperands(dstReg, srcReg);
4246        if (lister != null) lister.RR(miStart, "ADD", dstReg, srcReg);
4247      }
4248    
4249      /**
4250       * Generate a register--register-displacement ADD. That is,
4251       * <PRE>
4252       * dstReg +=  (word)  [srcReg + srcDisp]
4253       * </PRE>
4254       *
4255       * @param dstReg the destination register
4256       * @param srcBase the source register
4257       * @param srcDisp the source displacement
4258       */
4259      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4260      public final void emitADD_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
4261        int miStart = mi;
4262        setMachineCodes(mi++, (byte) 0x66);
4263        generateREXprefix(false, dstReg, null, srcBase);
4264        // single byte opcode
4265        setMachineCodes(mi++, (byte) 0x03);
4266        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
4267        if (lister != null) lister.RRD(miStart, "ADD", dstReg, srcBase, srcDisp);
4268      }
4269    
4270      /**
4271       * Generate a register--register-offset ADD. That is,
4272       * <PRE>
4273       * dstReg +=  (word)  [srcIndex<<srcScale + srcDisp]
4274       * </PRE>
4275       *
4276       * @param dstReg the destination register
4277       * @param srcIndex the source index register
4278       * @param srcScale the source shift amount
4279       * @param srcDisp the source displacement
4280       */
4281      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4282      public final void emitADD_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
4283        int miStart = mi;
4284        setMachineCodes(mi++, (byte) 0x66);
4285        generateREXprefix(false, dstReg, srcIndex, null);
4286        // single byte opcode
4287        setMachineCodes(mi++, (byte) 0x03);
4288        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
4289        if (lister != null) lister.RRFD(miStart, "ADD", dstReg, srcIndex, srcScale, srcDisp);
4290      }
4291    
4292      /**
4293       * Generate a register--register-offset ADD. That is,
4294       * <PRE>
4295       * dstReg +=  (word)  [srcDisp]
4296       * </PRE>
4297       *
4298       * @param dstReg the destination register
4299       * @param srcDisp the source displacement
4300       */
4301      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
4302      public final void emitADD_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
4303        int miStart = mi;
4304        setMachineCodes(mi++, (byte) 0x66);
4305        generateREXprefix(false, dstReg, null, null);
4306        // single byte opcode
4307        setMachineCodes(mi++, (byte) 0x03);
4308        emitAbsRegOperands(srcDisp, dstReg);
4309        if (lister != null) lister.RRA(miStart, "ADD", dstReg, srcDisp);
4310      }
4311    
4312      /**
4313       * Generate a register--register-offset ADD. That is,
4314       * <PRE>
4315       * dstReg +=  (word)  [srcBase + srcIndex<<srcScale + srcDisp]
4316       * </PRE>
4317       *
4318       * @param dstReg the destination register
4319       * @param srcBase the source base register
4320       * @param srcIndex the source index register
4321       * @param srcScale the source shift amount
4322       * @param srcDisp the source displacement
4323       */
4324      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
4325      public final void emitADD_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
4326        int miStart = mi;
4327        setMachineCodes(mi++, (byte) 0x66);
4328        generateREXprefix(false, dstReg, srcIndex, srcBase);
4329        // single byte opcode
4330        setMachineCodes(mi++, (byte) 0x03);
4331        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
4332        if (lister != null) lister.RRXD(miStart, "ADD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
4333      }
4334    
4335      /**
4336       * Generate a register--register(indirect) ADD. That is,
4337       * <PRE>
4338       * dstReg +=  (word)  [srcBase]
4339       * </PRE>
4340       *
4341       * @param dstReg the destination register
4342       * @param srcBase the source base register
4343       */
4344      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4345      public final void emitADD_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
4346        int miStart = mi;
4347        setMachineCodes(mi++, (byte) 0x66);
4348        generateREXprefix(false, dstReg, null, srcBase);
4349        // single byte opcode
4350        setMachineCodes(mi++, (byte) 0x03);
4351        emitRegIndirectRegOperands(srcBase, dstReg);
4352        if (lister != null) lister.RRN(miStart, "ADD", dstReg, srcBase);
4353      }
4354    
4355      /**
4356       * Generate a register(indirect)--register ADD. That is,
4357       * <PRE>
4358       * [dstBase] +=  (quad)  srcReg
4359       * </PRE>
4360       *
4361       * @param dstBase the destination base
4362       * @param srcReg the source register
4363       */
4364      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4365      public final void emitADD_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
4366        int miStart = mi;
4367        // no group 1 to 4 prefix byte
4368        generateREXprefix(true, srcReg, null, dstBase);
4369        // single byte opcode
4370        setMachineCodes(mi++, (byte) 0x01);
4371        emitRegIndirectRegOperands(dstBase, srcReg);
4372        if (lister != null) lister.RNR(miStart, "ADD", dstBase, srcReg);
4373      }
4374    
4375      /**
4376       * Generate a register-offset--register ADD. That is,
4377       * <PRE>
4378       * [dstReg<<dstScale + dstDisp] +=  (quad)  srcReg
4379       * </PRE>
4380       *
4381       * @param dstIndex the destination index register
4382       * @param dstScale the destination shift amount
4383       * @param dstDisp the destination displacement
4384       * @param srcReg the source register
4385       */
4386      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
4387      public final void emitADD_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
4388        int miStart = mi;
4389        // no group 1 to 4 prefix byte
4390        generateREXprefix(true, srcReg, dstIndex, null);
4391        // single byte opcode
4392        setMachineCodes(mi++, (byte) 0x01);
4393        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
4394        if (lister != null) lister.RFDR(miStart, "ADD", dstIndex, dstScale, dstDisp, srcReg);
4395      }
4396    
4397      /**
4398       * Generate a absolute--register ADD. That is,
4399       * <PRE>
4400       * [dstDisp] +=  (quad)  srcReg
4401       * </PRE>
4402       *
4403       * @param dstDisp the destination address
4404       * @param srcReg the source register
4405       */
4406      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
4407      public final void emitADD_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
4408        int miStart = mi;
4409        // no group 1 to 4 prefix byte
4410        generateREXprefix(true, srcReg, null, null);
4411        // single byte opcode
4412        setMachineCodes(mi++, (byte) 0x01);
4413        emitAbsRegOperands(dstDisp, srcReg);
4414        if (lister != null) lister.RAR(miStart, "ADD", dstDisp, srcReg);
4415      }
4416    
4417      /**
4418       * Generate a register-index--register ADD. That is,
4419       * <PRE>
4420       * [dstBase + dstIndex<<dstScale + dstDisp] +=  (quad)  srcReg
4421       * </PRE>
4422       *
4423       * @param dstBase the base register
4424       * @param dstIndex the destination index register
4425       * @param dstScale the destination shift amount
4426       * @param dstDisp the destination displacement
4427       * @param srcReg the source register
4428       */
4429      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
4430      public final void emitADD_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
4431        int miStart = mi;
4432        // no group 1 to 4 prefix byte
4433        generateREXprefix(true, srcReg, dstIndex, dstBase);
4434        // single byte opcode
4435        setMachineCodes(mi++, (byte) 0x01);
4436        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
4437        if (lister != null) lister.RXDR(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, srcReg);
4438      }
4439    
4440      /**
4441       * Generate a register-displacement--register ADD. That is,
4442       * <PRE>
4443       * [dstBase + dstDisp] +=  (quad)  srcReg
4444       * </PRE>
4445       *
4446       * @param dstBase the base register
4447       * @param dstDisp the destination displacement
4448       * @param srcReg the source register
4449       */
4450      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
4451      public final void emitADD_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
4452        int miStart = mi;
4453        // no group 1 to 4 prefix byte
4454        generateREXprefix(true, srcReg, null, dstBase);
4455        // single byte opcode
4456        setMachineCodes(mi++, (byte) 0x01);
4457        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
4458        if (lister != null) lister.RDR(miStart, "ADD", dstBase, dstDisp, srcReg);
4459      }
4460    
4461      /**
4462       * Generate a register--register ADD. That is,
4463       * <PRE>
4464       * dstReg +=  (quad)  srcReg
4465       * </PRE>
4466       *
4467       * @param dstReg the destination register
4468       * @param srcReg the source register
4469       */
4470      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4471      public final void emitADD_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
4472        int miStart = mi;
4473        // no group 1 to 4 prefix byte
4474        generateREXprefix(true, srcReg, null, dstReg);
4475        // single byte opcode
4476        setMachineCodes(mi++, (byte) 0x01);
4477        emitRegRegOperands(dstReg, srcReg);
4478        if (lister != null) lister.RR(miStart, "ADD", dstReg, srcReg);
4479      }
4480    
4481      /**
4482       * Generate a register--register-displacement ADD. That is,
4483       * <PRE>
4484       * dstReg +=  (quad)  [srcReg + srcDisp]
4485       * </PRE>
4486       *
4487       * @param dstReg the destination register
4488       * @param srcBase the source register
4489       * @param srcDisp the source displacement
4490       */
4491      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4492      public final void emitADD_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
4493        int miStart = mi;
4494        // no group 1 to 4 prefix byte
4495        generateREXprefix(true, dstReg, null, srcBase);
4496        // single byte opcode
4497        setMachineCodes(mi++, (byte) 0x03);
4498        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
4499        if (lister != null) lister.RRD(miStart, "ADD", dstReg, srcBase, srcDisp);
4500      }
4501    
4502      /**
4503       * Generate a register--register-offset ADD. That is,
4504       * <PRE>
4505       * dstReg +=  (quad)  [srcIndex<<srcScale + srcDisp]
4506       * </PRE>
4507       *
4508       * @param dstReg the destination register
4509       * @param srcIndex the source index register
4510       * @param srcScale the source shift amount
4511       * @param srcDisp the source displacement
4512       */
4513      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4514      public final void emitADD_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
4515        int miStart = mi;
4516        // no group 1 to 4 prefix byte
4517        generateREXprefix(true, dstReg, srcIndex, null);
4518        // single byte opcode
4519        setMachineCodes(mi++, (byte) 0x03);
4520        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
4521        if (lister != null) lister.RRFD(miStart, "ADD", dstReg, srcIndex, srcScale, srcDisp);
4522      }
4523    
4524      /**
4525       * Generate a register--register-offset ADD. That is,
4526       * <PRE>
4527       * dstReg +=  (quad)  [srcDisp]
4528       * </PRE>
4529       *
4530       * @param dstReg the destination register
4531       * @param srcDisp the source displacement
4532       */
4533      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
4534      public final void emitADD_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
4535        int miStart = mi;
4536        // no group 1 to 4 prefix byte
4537        generateREXprefix(true, dstReg, null, null);
4538        // single byte opcode
4539        setMachineCodes(mi++, (byte) 0x03);
4540        emitAbsRegOperands(srcDisp, dstReg);
4541        if (lister != null) lister.RRA(miStart, "ADD", dstReg, srcDisp);
4542      }
4543    
4544      /**
4545       * Generate a register--register-offset ADD. That is,
4546       * <PRE>
4547       * dstReg +=  (quad)  [srcBase + srcIndex<<srcScale + srcDisp]
4548       * </PRE>
4549       *
4550       * @param dstReg the destination register
4551       * @param srcBase the source base register
4552       * @param srcIndex the source index register
4553       * @param srcScale the source shift amount
4554       * @param srcDisp the source displacement
4555       */
4556      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
4557      public final void emitADD_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
4558        int miStart = mi;
4559        // no group 1 to 4 prefix byte
4560        generateREXprefix(true, dstReg, srcIndex, srcBase);
4561        // single byte opcode
4562        setMachineCodes(mi++, (byte) 0x03);
4563        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
4564        if (lister != null) lister.RRXD(miStart, "ADD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
4565      }
4566    
4567      /**
4568       * Generate a register--register(indirect) ADD. That is,
4569       * <PRE>
4570       * dstReg +=  (quad)  [srcBase]
4571       * </PRE>
4572       *
4573       * @param dstReg the destination register
4574       * @param srcBase the source base register
4575       */
4576      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4577      public final void emitADD_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
4578        int miStart = mi;
4579        // no group 1 to 4 prefix byte
4580        generateREXprefix(true, dstReg, null, srcBase);
4581        // single byte opcode
4582        setMachineCodes(mi++, (byte) 0x03);
4583        emitRegIndirectRegOperands(srcBase, dstReg);
4584        if (lister != null) lister.RRN(miStart, "ADD", dstReg, srcBase);
4585      }
4586    
4587      /**
4588       * Generate a register(indirect)--register ADD. That is,
4589       * <PRE>
4590       * [dstBase] +=  (byte)  srcReg
4591       * </PRE>
4592       *
4593       * @param dstBase the destination base
4594       * @param srcReg the source register
4595       */
4596      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4597      public final void emitADD_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
4598        int miStart = mi;
4599        // no group 1 to 4 prefix byte
4600        generateREXprefix(false, srcReg, null, dstBase);
4601        // single byte opcode
4602        setMachineCodes(mi++, (byte) 0x00);
4603        emitRegIndirectRegOperands(dstBase, srcReg);
4604        if (lister != null) lister.RNR(miStart, "ADD", dstBase, srcReg);
4605      }
4606    
4607      /**
4608       * Generate a register-offset--register ADD. That is,
4609       * <PRE>
4610       * [dstReg<<dstScale + dstDisp] +=  (byte)  srcReg
4611       * </PRE>
4612       *
4613       * @param dstIndex the destination index register
4614       * @param dstScale the destination shift amount
4615       * @param dstDisp the destination displacement
4616       * @param srcReg the source register
4617       */
4618      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
4619      public final void emitADD_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
4620        int miStart = mi;
4621        // no group 1 to 4 prefix byte
4622        generateREXprefix(false, srcReg, dstIndex, null);
4623        // single byte opcode
4624        setMachineCodes(mi++, (byte) 0x00);
4625        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
4626        if (lister != null) lister.RFDR(miStart, "ADD", dstIndex, dstScale, dstDisp, srcReg);
4627      }
4628    
4629      /**
4630       * Generate a absolute--register ADD. That is,
4631       * <PRE>
4632       * [dstDisp] +=  (byte)  srcReg
4633       * </PRE>
4634       *
4635       * @param dstDisp the destination address
4636       * @param srcReg the source register
4637       */
4638      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
4639      public final void emitADD_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
4640        int miStart = mi;
4641        // no group 1 to 4 prefix byte
4642        generateREXprefix(false, srcReg, null, null);
4643        // single byte opcode
4644        setMachineCodes(mi++, (byte) 0x00);
4645        emitAbsRegOperands(dstDisp, srcReg);
4646        if (lister != null) lister.RAR(miStart, "ADD", dstDisp, srcReg);
4647      }
4648    
4649      /**
4650       * Generate a register-index--register ADD. That is,
4651       * <PRE>
4652       * [dstBase + dstIndex<<dstScale + dstDisp] +=  (byte)  srcReg
4653       * </PRE>
4654       *
4655       * @param dstBase the base register
4656       * @param dstIndex the destination index register
4657       * @param dstScale the destination shift amount
4658       * @param dstDisp the destination displacement
4659       * @param srcReg the source register
4660       */
4661      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
4662      public final void emitADD_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
4663        int miStart = mi;
4664        // no group 1 to 4 prefix byte
4665        generateREXprefix(false, srcReg, dstIndex, dstBase);
4666        // single byte opcode
4667        setMachineCodes(mi++, (byte) 0x00);
4668        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
4669        if (lister != null) lister.RXDR(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, srcReg);
4670      }
4671    
4672      /**
4673       * Generate a register-displacement--register ADD. That is,
4674       * <PRE>
4675       * [dstBase + dstDisp] +=  (byte)  srcReg
4676       * </PRE>
4677       *
4678       * @param dstBase the base register
4679       * @param dstDisp the destination displacement
4680       * @param srcReg the source register
4681       */
4682      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
4683      public final void emitADD_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
4684        int miStart = mi;
4685        // no group 1 to 4 prefix byte
4686        generateREXprefix(false, srcReg, null, dstBase);
4687        // single byte opcode
4688        setMachineCodes(mi++, (byte) 0x00);
4689        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
4690        if (lister != null) lister.RDR(miStart, "ADD", dstBase, dstDisp, srcReg);
4691      }
4692    
4693      /**
4694       * Generate a register--register ADD. That is,
4695       * <PRE>
4696       * dstReg +=  (byte)  srcReg
4697       * </PRE>
4698       *
4699       * @param dstReg the destination register
4700       * @param srcReg the source register
4701       */
4702      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4703      public final void emitADD_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
4704        int miStart = mi;
4705        // no group 1 to 4 prefix byte
4706        generateREXprefix(false, srcReg, null, dstReg);
4707        // single byte opcode
4708        setMachineCodes(mi++, (byte) 0x00);
4709        emitRegRegOperands(dstReg, srcReg);
4710        if (lister != null) lister.RR(miStart, "ADD", dstReg, srcReg);
4711      }
4712    
4713      /**
4714       * Generate a register--register-displacement ADD. That is,
4715       * <PRE>
4716       * dstReg +=  (byte)  [srcReg + srcDisp]
4717       * </PRE>
4718       *
4719       * @param dstReg the destination register
4720       * @param srcBase the source register
4721       * @param srcDisp the source displacement
4722       */
4723      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4724      public final void emitADD_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
4725        int miStart = mi;
4726        // no group 1 to 4 prefix byte
4727        generateREXprefix(false, dstReg, null, srcBase);
4728        // single byte opcode
4729        setMachineCodes(mi++, (byte) 0x02);
4730        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
4731        if (lister != null) lister.RRD(miStart, "ADD", dstReg, srcBase, srcDisp);
4732      }
4733    
4734      /**
4735       * Generate a register--register-offset ADD. That is,
4736       * <PRE>
4737       * dstReg +=  (byte)  [srcIndex<<srcScale + srcDisp]
4738       * </PRE>
4739       *
4740       * @param dstReg the destination register
4741       * @param srcIndex the source index register
4742       * @param srcScale the source shift amount
4743       * @param srcDisp the source displacement
4744       */
4745      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4746      public final void emitADD_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
4747        int miStart = mi;
4748        // no group 1 to 4 prefix byte
4749        generateREXprefix(false, dstReg, srcIndex, null);
4750        // single byte opcode
4751        setMachineCodes(mi++, (byte) 0x02);
4752        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
4753        if (lister != null) lister.RRFD(miStart, "ADD", dstReg, srcIndex, srcScale, srcDisp);
4754      }
4755    
4756      /**
4757       * Generate a register--register-offset ADD. That is,
4758       * <PRE>
4759       * dstReg +=  (byte)  [srcDisp]
4760       * </PRE>
4761       *
4762       * @param dstReg the destination register
4763       * @param srcDisp the source displacement
4764       */
4765      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
4766      public final void emitADD_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
4767        int miStart = mi;
4768        // no group 1 to 4 prefix byte
4769        generateREXprefix(false, dstReg, null, null);
4770        // single byte opcode
4771        setMachineCodes(mi++, (byte) 0x02);
4772        emitAbsRegOperands(srcDisp, dstReg);
4773        if (lister != null) lister.RRA(miStart, "ADD", dstReg, srcDisp);
4774      }
4775    
4776      /**
4777       * Generate a register--register-offset ADD. That is,
4778       * <PRE>
4779       * dstReg +=  (byte)  [srcBase + srcIndex<<srcScale + srcDisp]
4780       * </PRE>
4781       *
4782       * @param dstReg the destination register
4783       * @param srcBase the source base register
4784       * @param srcIndex the source index register
4785       * @param srcScale the source shift amount
4786       * @param srcDisp the source displacement
4787       */
4788      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
4789      public final void emitADD_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
4790        int miStart = mi;
4791        // no group 1 to 4 prefix byte
4792        generateREXprefix(false, dstReg, srcIndex, srcBase);
4793        // single byte opcode
4794        setMachineCodes(mi++, (byte) 0x02);
4795        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
4796        if (lister != null) lister.RRXD(miStart, "ADD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
4797      }
4798    
4799      /**
4800       * Generate a register--register(indirect) ADD. That is,
4801       * <PRE>
4802       * dstReg +=  (byte)  [srcBase]
4803       * </PRE>
4804       *
4805       * @param dstReg the destination register
4806       * @param srcBase the source base register
4807       */
4808      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4809      public final void emitADD_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
4810        int miStart = mi;
4811        // no group 1 to 4 prefix byte
4812        generateREXprefix(false, dstReg, null, srcBase);
4813        // single byte opcode
4814        setMachineCodes(mi++, (byte) 0x02);
4815        emitRegIndirectRegOperands(srcBase, dstReg);
4816        if (lister != null) lister.RRN(miStart, "ADD", dstReg, srcBase);
4817      }
4818    
4819      /**
4820       * Generate a register--immediate ADD. That is,
4821       * <PRE>
4822       * dstReg +=  imm
4823       * </PRE>
4824       *
4825       * @param dstReg the destination register
4826       * @param imm immediate
4827       */
4828      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
4829      public final void emitADD_Reg_Imm(GPR dstReg, int imm) {
4830        int miStart = mi;
4831        // no group 1 to 4 prefix byte
4832        generateREXprefix(false, null, null, dstReg);
4833        // single byte opcode
4834        if (fits(imm,8)) {
4835          setMachineCodes(mi++, (byte) 0x83);
4836          // "register 0x0" is really part of the opcode
4837          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
4838          emitImm8((byte)imm);
4839        } else if (dstReg == EAX) {
4840          setMachineCodes(mi++, (byte) 0x05);
4841          emitImm32(imm);
4842        } else {
4843          setMachineCodes(mi++, (byte) 0x81);
4844          // "register 0x0" is really part of the opcode
4845          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
4846          emitImm32(imm);
4847        }
4848        if (lister != null) lister.RI(miStart, "ADD", dstReg, imm);
4849      }
4850    
4851      /**
4852       * Generate a register-displacement--immediate ADD. That is,
4853       * <PRE>
4854       * [dstBase + dstDisp] +=  imm
4855       * </PRE>
4856       *
4857       * @param dstBase the destination register
4858       * @param dstDisp the destination displacement
4859       * @param imm immediate
4860       */
4861      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
4862      public final void emitADD_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
4863        int miStart = mi;
4864        // no group 1 to 4 prefix byte
4865        generateREXprefix(false, null, null, dstBase);
4866        // single byte opcode
4867        if (fits(imm,8)) {
4868          setMachineCodes(mi++, (byte) 0x83);
4869          // "register 0x0" is really part of the opcode
4870          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
4871          emitImm8((byte)imm);
4872        } else {
4873          setMachineCodes(mi++, (byte) 0x81);
4874          // "register 0x0" is really part of the opcode
4875          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
4876          emitImm32(imm);
4877        }
4878        if (lister != null) lister.RDI(miStart, "ADD", dstBase, dstDisp, imm);
4879      }
4880    
4881      /**
4882       * Generate a register-offset--immediate ADD. That is,
4883       * <PRE>
4884       * [dstIndex<<dstScale + dstDisp] +=  imm
4885       * </PRE>
4886       *
4887       * @param dstIndex the destination index register
4888       * @param dstScale the destination shift amount
4889       * @param dstDisp the destination displacement
4890       * @param imm immediate
4891       */
4892      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
4893      public final void emitADD_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
4894        int miStart = mi;
4895        // no group 1 to 4 prefix byte
4896        generateREXprefix(false, null, dstIndex, null);
4897        // single byte opcode
4898        if (fits(imm,8)) {
4899          setMachineCodes(mi++, (byte) 0x83);
4900          // "register 0x0" is really part of the opcode
4901          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
4902          emitImm8((byte)imm);
4903        } else {
4904          setMachineCodes(mi++, (byte) 0x81);
4905          // "register 0x0" is really part of the opcode
4906          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
4907          emitImm32(imm);
4908        }
4909        if (lister != null) lister.RFDI(miStart, "ADD", dstIndex, dstScale, dstDisp, imm);
4910      }
4911    
4912      /**
4913       * Generate a absolute--immediate ADD. That is,
4914       * <PRE>
4915       * [dstDisp] +=  imm
4916       * </PRE>
4917       *
4918       * @param dstDisp the destination displacement
4919       * @param imm immediate
4920       */
4921      public final void emitADD_Abs_Imm(Address dstDisp, int imm) {
4922        int miStart = mi;
4923        // no group 1 to 4 prefix byte
4924        generateREXprefix(false, null, null, null);
4925        // single byte opcode
4926        if (fits(imm,8)) {
4927          setMachineCodes(mi++, (byte) 0x83);
4928          // "register 0x0" is really part of the opcode
4929          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
4930          emitImm8((byte)imm);
4931        } else {
4932          setMachineCodes(mi++, (byte) 0x81);
4933          // "register 0x0" is really part of the opcode
4934          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
4935          emitImm32(imm);
4936        }
4937        if (lister != null) lister.RAI(miStart, "ADD", dstDisp, imm);
4938      }
4939    
4940      /**
4941       * Generate a register-index--immediate ADD. That is,
4942       * <PRE>
4943       * [dstBase + dstIndex<<dstScale + dstDisp] +=  imm
4944       * </PRE>
4945       *
4946       * @param dstBase the destination base register
4947       * @param dstIndex the destination index register
4948       * @param dstScale the destination shift amount
4949       * @param dstDisp the destination displacement
4950       * @param imm immediate
4951       */
4952      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
4953      public final void emitADD_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
4954        int miStart = mi;
4955        // no group 1 to 4 prefix byte
4956        generateREXprefix(false, null, dstIndex, dstBase);
4957        // single byte opcode
4958        if (fits(imm,8)) {
4959          setMachineCodes(mi++, (byte) 0x83);
4960          // "register 0x0" is really part of the opcode
4961          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
4962          emitImm8((byte)imm);
4963        } else {
4964          setMachineCodes(mi++, (byte) 0x81);
4965          // "register 0x0" is really part of the opcode
4966          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
4967          emitImm32(imm);
4968        }
4969        if (lister != null) lister.RXDI(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, imm);
4970      }
4971    
4972      /**
4973       * Generate a register(indirect)--immediate ADD. That is,
4974       * <PRE>
4975       * [dstBase] +=  imm
4976       * </PRE>
4977       *
4978       * @param dstBase the destination base register
4979       * @param imm immediate
4980       */
4981      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
4982      public final void emitADD_RegInd_Imm(GPR dstBase, int imm) {
4983        int miStart = mi;
4984        // no group 1 to 4 prefix byte
4985        generateREXprefix(false, null, null, dstBase);
4986        // single byte opcode
4987        if (fits(imm,8)) {
4988          setMachineCodes(mi++, (byte) 0x83);
4989          // "register 0x0" is really part of the opcode
4990          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
4991          emitImm8((byte)imm);
4992        } else {
4993          setMachineCodes(mi++, (byte) 0x81);
4994          // "register 0x0" is really part of the opcode
4995          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
4996          emitImm32(imm);
4997        }
4998        if (lister != null) lister.RNI(miStart, "ADD", dstBase, imm);
4999      }
5000    
5001      /**
5002       * Generate a register--immediate ADD. That is,
5003       * <PRE>
5004       * dstReg +=  (word)  imm
5005       * </PRE>
5006       *
5007       * @param dstReg the destination register
5008       * @param imm immediate
5009       */
5010      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5011      public final void emitADD_Reg_Imm_Word(GPR dstReg, int imm) {
5012        int miStart = mi;
5013        setMachineCodes(mi++, (byte) 0x66);
5014        generateREXprefix(false, null, null, dstReg);
5015        // single byte opcode
5016        if (fits(imm,8)) {
5017          setMachineCodes(mi++, (byte) 0x83);
5018          // "register 0x0" is really part of the opcode
5019          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
5020          emitImm8((byte)imm);
5021        } else if (dstReg == EAX) {
5022          setMachineCodes(mi++, (byte) 0x05);
5023          emitImm16(imm);
5024        } else {
5025          setMachineCodes(mi++, (byte) 0x81);
5026          // "register 0x0" is really part of the opcode
5027          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
5028          emitImm16(imm);
5029        }
5030        if (lister != null) lister.RI(miStart, "ADD", dstReg, imm);
5031      }
5032    
5033      /**
5034       * Generate a register-displacement--immediate ADD. That is,
5035       * <PRE>
5036       * [dstBase + dstDisp] +=  (word)  imm
5037       * </PRE>
5038       *
5039       * @param dstBase the destination register
5040       * @param dstDisp the destination displacement
5041       * @param imm immediate
5042       */
5043      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5044      public final void emitADD_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
5045        int miStart = mi;
5046        setMachineCodes(mi++, (byte) 0x66);
5047        generateREXprefix(false, null, null, dstBase);
5048        // single byte opcode
5049        if (fits(imm,8)) {
5050          setMachineCodes(mi++, (byte) 0x83);
5051          // "register 0x0" is really part of the opcode
5052          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
5053          emitImm8((byte)imm);
5054        } else {
5055          setMachineCodes(mi++, (byte) 0x81);
5056          // "register 0x0" is really part of the opcode
5057          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
5058          emitImm16(imm);
5059        }
5060        if (lister != null) lister.RDI(miStart, "ADD", dstBase, dstDisp, imm);
5061      }
5062    
5063      /**
5064       * Generate a register-offset--immediate ADD. That is,
5065       * <PRE>
5066       * [dstIndex<<dstScale + dstDisp] +=  (word)  imm
5067       * </PRE>
5068       *
5069       * @param dstIndex the destination index register
5070       * @param dstScale the destination shift amount
5071       * @param dstDisp the destination displacement
5072       * @param imm immediate
5073       */
5074      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5075      public final void emitADD_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
5076        int miStart = mi;
5077        setMachineCodes(mi++, (byte) 0x66);
5078        generateREXprefix(false, null, dstIndex, null);
5079        // single byte opcode
5080        if (fits(imm,8)) {
5081          setMachineCodes(mi++, (byte) 0x83);
5082          // "register 0x0" is really part of the opcode
5083          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
5084          emitImm8((byte)imm);
5085        } else {
5086          setMachineCodes(mi++, (byte) 0x81);
5087          // "register 0x0" is really part of the opcode
5088          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
5089          emitImm16(imm);
5090        }
5091        if (lister != null) lister.RFDI(miStart, "ADD", dstIndex, dstScale, dstDisp, imm);
5092      }
5093    
5094      /**
5095       * Generate a absolute--immediate ADD. That is,
5096       * <PRE>
5097       * [dstDisp] +=  (word)  imm
5098       * </PRE>
5099       *
5100       * @param dstDisp the destination displacement
5101       * @param imm immediate
5102       */
5103      public final void emitADD_Abs_Imm_Word(Address dstDisp, int imm) {
5104        int miStart = mi;
5105        setMachineCodes(mi++, (byte) 0x66);
5106        generateREXprefix(false, null, null, null);
5107        // single byte opcode
5108        if (fits(imm,8)) {
5109          setMachineCodes(mi++, (byte) 0x83);
5110          // "register 0x0" is really part of the opcode
5111          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
5112          emitImm8((byte)imm);
5113        } else {
5114          setMachineCodes(mi++, (byte) 0x81);
5115          // "register 0x0" is really part of the opcode
5116          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
5117          emitImm16(imm);
5118        }
5119        if (lister != null) lister.RAI(miStart, "ADD", dstDisp, imm);
5120      }
5121    
5122      /**
5123       * Generate a register-index--immediate ADD. That is,
5124       * <PRE>
5125       * [dstBase + dstIndex<<dstScale + dstDisp] +=  (word)  imm
5126       * </PRE>
5127       *
5128       * @param dstBase the destination base register
5129       * @param dstIndex the destination index register
5130       * @param dstScale the destination shift amount
5131       * @param dstDisp the destination displacement
5132       * @param imm immediate
5133       */
5134      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5135      public final void emitADD_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
5136        int miStart = mi;
5137        setMachineCodes(mi++, (byte) 0x66);
5138        generateREXprefix(false, null, dstIndex, dstBase);
5139        // single byte opcode
5140        if (fits(imm,8)) {
5141          setMachineCodes(mi++, (byte) 0x83);
5142          // "register 0x0" is really part of the opcode
5143          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
5144          emitImm8((byte)imm);
5145        } else {
5146          setMachineCodes(mi++, (byte) 0x81);
5147          // "register 0x0" is really part of the opcode
5148          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
5149          emitImm16(imm);
5150        }
5151        if (lister != null) lister.RXDI(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, imm);
5152      }
5153    
5154      /**
5155       * Generate a register(indirect)--immediate ADD. That is,
5156       * <PRE>
5157       * [dstBase] +=  (word)  imm
5158       * </PRE>
5159       *
5160       * @param dstBase the destination base register
5161       * @param imm immediate
5162       */
5163      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5164      public final void emitADD_RegInd_Imm_Word(GPR dstBase, int imm) {
5165        int miStart = mi;
5166        setMachineCodes(mi++, (byte) 0x66);
5167        generateREXprefix(false, null, null, dstBase);
5168        // single byte opcode
5169        if (fits(imm,8)) {
5170          setMachineCodes(mi++, (byte) 0x83);
5171          // "register 0x0" is really part of the opcode
5172          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
5173          emitImm8((byte)imm);
5174        } else {
5175          setMachineCodes(mi++, (byte) 0x81);
5176          // "register 0x0" is really part of the opcode
5177          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
5178          emitImm16(imm);
5179        }
5180        if (lister != null) lister.RNI(miStart, "ADD", dstBase, imm);
5181      }
5182    
5183      /**
5184       * Generate a register--immediate ADD. That is,
5185       * <PRE>
5186       * dstReg +=  (quad)  imm
5187       * </PRE>
5188       *
5189       * @param dstReg the destination register
5190       * @param imm immediate
5191       */
5192      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5193      public final void emitADD_Reg_Imm_Quad(GPR dstReg, int imm) {
5194        int miStart = mi;
5195        // no group 1 to 4 prefix byte
5196        generateREXprefix(true, null, null, dstReg);
5197        // single byte opcode
5198        if (fits(imm,8)) {
5199          setMachineCodes(mi++, (byte) 0x83);
5200          // "register 0x0" is really part of the opcode
5201          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
5202          emitImm8((byte)imm);
5203        } else if (dstReg == EAX) {
5204          setMachineCodes(mi++, (byte) 0x05);
5205          emitImm32(imm);
5206        } else {
5207          setMachineCodes(mi++, (byte) 0x81);
5208          // "register 0x0" is really part of the opcode
5209          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
5210          emitImm32(imm);
5211        }
5212        if (lister != null) lister.RI(miStart, "ADD", dstReg, imm);
5213      }
5214    
5215      /**
5216       * Generate a register-displacement--immediate ADD. That is,
5217       * <PRE>
5218       * [dstBase + dstDisp] +=  (quad)  imm
5219       * </PRE>
5220       *
5221       * @param dstBase the destination register
5222       * @param dstDisp the destination displacement
5223       * @param imm immediate
5224       */
5225      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5226      public final void emitADD_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
5227        int miStart = mi;
5228        // no group 1 to 4 prefix byte
5229        generateREXprefix(true, null, null, dstBase);
5230        // single byte opcode
5231        if (fits(imm,8)) {
5232          setMachineCodes(mi++, (byte) 0x83);
5233          // "register 0x0" is really part of the opcode
5234          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
5235          emitImm8((byte)imm);
5236        } else {
5237          setMachineCodes(mi++, (byte) 0x81);
5238          // "register 0x0" is really part of the opcode
5239          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
5240          emitImm32(imm);
5241        }
5242        if (lister != null) lister.RDI(miStart, "ADD", dstBase, dstDisp, imm);
5243      }
5244    
5245      /**
5246       * Generate a register-offset--immediate ADD. That is,
5247       * <PRE>
5248       * [dstIndex<<dstScale + dstDisp] +=  (quad)  imm
5249       * </PRE>
5250       *
5251       * @param dstIndex the destination index register
5252       * @param dstScale the destination shift amount
5253       * @param dstDisp the destination displacement
5254       * @param imm immediate
5255       */
5256      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5257      public final void emitADD_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
5258        int miStart = mi;
5259        // no group 1 to 4 prefix byte
5260        generateREXprefix(true, null, dstIndex, null);
5261        // single byte opcode
5262        if (fits(imm,8)) {
5263          setMachineCodes(mi++, (byte) 0x83);
5264          // "register 0x0" is really part of the opcode
5265          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
5266          emitImm8((byte)imm);
5267        } else {
5268          setMachineCodes(mi++, (byte) 0x81);
5269          // "register 0x0" is really part of the opcode
5270          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
5271          emitImm32(imm);
5272        }
5273        if (lister != null) lister.RFDI(miStart, "ADD", dstIndex, dstScale, dstDisp, imm);
5274      }
5275    
5276      /**
5277       * Generate a absolute--immediate ADD. That is,
5278       * <PRE>
5279       * [dstDisp] +=  (quad)  imm
5280       * </PRE>
5281       *
5282       * @param dstDisp the destination displacement
5283       * @param imm immediate
5284       */
5285      public final void emitADD_Abs_Imm_Quad(Address dstDisp, int imm) {
5286        int miStart = mi;
5287        // no group 1 to 4 prefix byte
5288        generateREXprefix(true, null, null, null);
5289        // single byte opcode
5290        if (fits(imm,8)) {
5291          setMachineCodes(mi++, (byte) 0x83);
5292          // "register 0x0" is really part of the opcode
5293          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
5294          emitImm8((byte)imm);
5295        } else {
5296          setMachineCodes(mi++, (byte) 0x81);
5297          // "register 0x0" is really part of the opcode
5298          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
5299          emitImm32(imm);
5300        }
5301        if (lister != null) lister.RAI(miStart, "ADD", dstDisp, imm);
5302      }
5303    
5304      /**
5305       * Generate a register-index--immediate ADD. That is,
5306       * <PRE>
5307       * [dstBase + dstIndex<<dstScale + dstDisp] +=  (quad)  imm
5308       * </PRE>
5309       *
5310       * @param dstBase the destination base register
5311       * @param dstIndex the destination index register
5312       * @param dstScale the destination shift amount
5313       * @param dstDisp the destination displacement
5314       * @param imm immediate
5315       */
5316      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5317      public final void emitADD_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
5318        int miStart = mi;
5319        // no group 1 to 4 prefix byte
5320        generateREXprefix(true, null, dstIndex, dstBase);
5321        // single byte opcode
5322        if (fits(imm,8)) {
5323          setMachineCodes(mi++, (byte) 0x83);
5324          // "register 0x0" is really part of the opcode
5325          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
5326          emitImm8((byte)imm);
5327        } else {
5328          setMachineCodes(mi++, (byte) 0x81);
5329          // "register 0x0" is really part of the opcode
5330          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
5331          emitImm32(imm);
5332        }
5333        if (lister != null) lister.RXDI(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, imm);
5334      }
5335    
5336      /**
5337       * Generate a register(indirect)--immediate ADD. That is,
5338       * <PRE>
5339       * [dstBase] +=  (quad)  imm
5340       * </PRE>
5341       *
5342       * @param dstBase the destination base register
5343       * @param imm immediate
5344       */
5345      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5346      public final void emitADD_RegInd_Imm_Quad(GPR dstBase, int imm) {
5347        int miStart = mi;
5348        // no group 1 to 4 prefix byte
5349        generateREXprefix(true, null, null, dstBase);
5350        // single byte opcode
5351        if (fits(imm,8)) {
5352          setMachineCodes(mi++, (byte) 0x83);
5353          // "register 0x0" is really part of the opcode
5354          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
5355          emitImm8((byte)imm);
5356        } else {
5357          setMachineCodes(mi++, (byte) 0x81);
5358          // "register 0x0" is really part of the opcode
5359          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
5360          emitImm32(imm);
5361        }
5362        if (lister != null) lister.RNI(miStart, "ADD", dstBase, imm);
5363      }
5364    
5365      /**
5366       * Generate a register--immediate ADD. That is,
5367       * <PRE>
5368       *  dstReg += (byte) imm
5369       * </PRE>
5370       *
5371       * @param dstReg the destination register
5372       * @param imm immediate
5373       */
5374      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5375      public final void emitADD_Reg_Imm_Byte(GPR dstReg, int imm) {
5376        int miStart = mi;
5377        if (dstReg == EAX) {
5378          setMachineCodes(mi++, (byte) 0x04);
5379          emitImm8(imm);
5380        } else {
5381          generateREXprefix(false, null, null, dstReg);
5382          setMachineCodes(mi++, (byte) 0x80);
5383          // "register 0x0" is really part of the opcode
5384          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
5385          emitImm8(imm);
5386        }
5387        if (lister != null) lister.RI(miStart, "ADD", dstReg, imm);
5388      }
5389    
5390      /**
5391       * Generate a register-displacement--immediate ADD. That is,
5392       * <PRE>
5393       * [dstBase + dstDisp] += (byte) imm
5394       * </PRE>
5395       *
5396       * @param dstBase the destination register
5397       * @param dstDisp the destination displacement
5398       * @param imm immediate
5399       */
5400      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5401      public final void emitADD_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
5402        int miStart = mi;
5403        generateREXprefix(false, null, null, dstBase);
5404        setMachineCodes(mi++, (byte) 0x80);
5405        // "register 0x0" is really part of the opcode
5406        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
5407        emitImm8(imm);
5408        if (lister != null) lister.RDI(miStart, "ADD", dstBase, dstDisp, imm);
5409      }
5410    
5411      /**
5412       * Generate a register-index--immediate ADD. That is,
5413       * <PRE>
5414       * [dstBase + dstIndex<<scale + dstDisp] += (byte) imm
5415       * </PRE>
5416       *
5417       * @param dstBase the destination base register
5418       * @param dstIndex the destination index register
5419       * @param dstScale the destination shift amount
5420       * @param dstDisp the destination displacement
5421       * @param imm immediate
5422       */
5423      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5424      public final void emitADD_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
5425        int miStart = mi;
5426        generateREXprefix(false, null, dstIndex, dstBase);
5427        setMachineCodes(mi++, (byte) 0x80);
5428        // "register 0x0" is really part of the opcode
5429        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
5430        emitImm8(imm);
5431        if (lister != null) lister.RXDI(miStart, "ADD", dstBase, dstIndex, dstScale, dstDisp, imm);
5432      }
5433    
5434      /**
5435       * Generate a register-offset--immediate ADD. That is,
5436       * <PRE>
5437       * [dstIndex<<dstScale + dstDisp] += (byte) imm
5438       * </PRE>
5439       *
5440       * @param dstIndex the destination index register
5441       * @param dstScale the destination shift amount
5442       * @param dstDisp the destination displacement
5443       * @param imm immediate
5444       */
5445      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5446      public final void emitADD_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
5447        int miStart = mi;
5448        generateREXprefix(false, null, dstIndex, null);
5449        setMachineCodes(mi++, (byte) 0x80);
5450        // "register 0x0" is really part of the opcode
5451        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
5452        emitImm8(imm);
5453        if (lister != null) lister.RFDI(miStart, "ADD", dstIndex, dstScale, dstDisp, imm);
5454      }
5455    
5456      /**
5457       * Generate a absolute--immediate ADD. That is,
5458       * <PRE>
5459       * [dstDisp] += (byte) imm
5460       * </PRE>
5461       *
5462       * @param dstDisp the destination displacement
5463       * @param imm immediate
5464       */
5465      public final void emitADD_Abs_Imm_Byte(Address dstDisp, int imm) {
5466        int miStart = mi;
5467        generateREXprefix(false, null, null, null);
5468        setMachineCodes(mi++, (byte) 0x80);
5469        // "register 0x0" is really part of the opcode
5470        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
5471        emitImm8(imm);
5472        if (lister != null) lister.RAI(miStart, "ADD", dstDisp, imm);
5473      }
5474    
5475      /**
5476       * Generate a register(indirect)--immediate ADD. That is,
5477       * <PRE>
5478       * [dstBase] += (byte) imm
5479       * </PRE>
5480       *
5481       * @param dstBase the destination base register
5482       * @param imm immediate
5483       */
5484      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5485      public final void emitADD_RegInd_Imm_Byte(GPR dstBase, int imm) {
5486        int miStart = mi;
5487        generateREXprefix(false, null, null, dstBase);
5488        setMachineCodes(mi++, (byte) 0x80);
5489        // "register 0x0" is really part of the opcode
5490        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
5491        emitImm8(imm);
5492        if (lister != null) lister.RNI(miStart, "ADD", dstBase, imm);
5493      }
5494    
5495      /**
5496       * Generate a register(indirect)--register AND. That is,
5497       * <PRE>
5498       * [dstBase] &=  srcReg
5499       * </PRE>
5500       *
5501       * @param dstBase the destination base
5502       * @param srcReg the source register
5503       */
5504      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5505      public final void emitAND_RegInd_Reg(GPR dstBase, GPR srcReg) {
5506        int miStart = mi;
5507        // no group 1 to 4 prefix byte
5508        generateREXprefix(false, srcReg, null, dstBase);
5509        // single byte opcode
5510        setMachineCodes(mi++, (byte) 0x21);
5511        emitRegIndirectRegOperands(dstBase, srcReg);
5512        if (lister != null) lister.RNR(miStart, "AND", dstBase, srcReg);
5513      }
5514    
5515      /**
5516       * Generate a register-offset--register AND. That is,
5517       * <PRE>
5518       * [dstReg<<dstScale + dstDisp] &=  srcReg
5519       * </PRE>
5520       *
5521       * @param dstIndex the destination index register
5522       * @param dstScale the destination shift amount
5523       * @param dstDisp the destination displacement
5524       * @param srcReg the source register
5525       */
5526      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
5527      public final void emitAND_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
5528        int miStart = mi;
5529        // no group 1 to 4 prefix byte
5530        generateREXprefix(false, srcReg, dstIndex, null);
5531        // single byte opcode
5532        setMachineCodes(mi++, (byte) 0x21);
5533        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
5534        if (lister != null) lister.RFDR(miStart, "AND", dstIndex, dstScale, dstDisp, srcReg);
5535      }
5536    
5537      /**
5538       * Generate a absolute--register AND. That is,
5539       * <PRE>
5540       * [dstDisp] &=  srcReg
5541       * </PRE>
5542       *
5543       * @param dstDisp the destination address
5544       * @param srcReg the source register
5545       */
5546      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
5547      public final void emitAND_Abs_Reg(Address dstDisp, GPR srcReg) {
5548        int miStart = mi;
5549        // no group 1 to 4 prefix byte
5550        generateREXprefix(false, srcReg, null, null);
5551        // single byte opcode
5552        setMachineCodes(mi++, (byte) 0x21);
5553        emitAbsRegOperands(dstDisp, srcReg);
5554        if (lister != null) lister.RAR(miStart, "AND", dstDisp, srcReg);
5555      }
5556    
5557      /**
5558       * Generate a register-index--register AND. That is,
5559       * <PRE>
5560       * [dstBase + dstIndex<<dstScale + dstDisp] &=  srcReg
5561       * </PRE>
5562       *
5563       * @param dstBase the base register
5564       * @param dstIndex the destination index register
5565       * @param dstScale the destination shift amount
5566       * @param dstDisp the destination displacement
5567       * @param srcReg the source register
5568       */
5569      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
5570      public final void emitAND_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
5571        int miStart = mi;
5572        // no group 1 to 4 prefix byte
5573        generateREXprefix(false, srcReg, dstIndex, dstBase);
5574        // single byte opcode
5575        setMachineCodes(mi++, (byte) 0x21);
5576        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
5577        if (lister != null) lister.RXDR(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, srcReg);
5578      }
5579    
5580      /**
5581       * Generate a register-displacement--register AND. That is,
5582       * <PRE>
5583       * [dstBase + dstDisp] &=  srcReg
5584       * </PRE>
5585       *
5586       * @param dstBase the base register
5587       * @param dstDisp the destination displacement
5588       * @param srcReg the source register
5589       */
5590      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
5591      public final void emitAND_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
5592        int miStart = mi;
5593        // no group 1 to 4 prefix byte
5594        generateREXprefix(false, srcReg, null, dstBase);
5595        // single byte opcode
5596        setMachineCodes(mi++, (byte) 0x21);
5597        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
5598        if (lister != null) lister.RDR(miStart, "AND", dstBase, dstDisp, srcReg);
5599      }
5600    
5601      /**
5602       * Generate a register--register AND. That is,
5603       * <PRE>
5604       * dstReg &=  srcReg
5605       * </PRE>
5606       *
5607       * @param dstReg the destination register
5608       * @param srcReg the source register
5609       */
5610      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5611      public final void emitAND_Reg_Reg(GPR dstReg, GPR srcReg) {
5612        int miStart = mi;
5613        // no group 1 to 4 prefix byte
5614        generateREXprefix(false, srcReg, null, dstReg);
5615        // single byte opcode
5616        setMachineCodes(mi++, (byte) 0x21);
5617        emitRegRegOperands(dstReg, srcReg);
5618        if (lister != null) lister.RR(miStart, "AND", dstReg, srcReg);
5619      }
5620    
5621      /**
5622       * Generate a register--register-displacement AND. That is,
5623       * <PRE>
5624       * dstReg &=  [srcReg + srcDisp]
5625       * </PRE>
5626       *
5627       * @param dstReg the destination register
5628       * @param srcBase the source register
5629       * @param srcDisp the source displacement
5630       */
5631      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5632      public final void emitAND_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
5633        int miStart = mi;
5634        // no group 1 to 4 prefix byte
5635        generateREXprefix(false, dstReg, null, srcBase);
5636        // single byte opcode
5637        setMachineCodes(mi++, (byte) 0x23);
5638        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
5639        if (lister != null) lister.RRD(miStart, "AND", dstReg, srcBase, srcDisp);
5640      }
5641    
5642      /**
5643       * Generate a register--register-offset AND. That is,
5644       * <PRE>
5645       * dstReg &=  [srcIndex<<srcScale + srcDisp]
5646       * </PRE>
5647       *
5648       * @param dstReg the destination register
5649       * @param srcIndex the source index register
5650       * @param srcScale the source shift amount
5651       * @param srcDisp the source displacement
5652       */
5653      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5654      public final void emitAND_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
5655        int miStart = mi;
5656        // no group 1 to 4 prefix byte
5657        generateREXprefix(false, dstReg, srcIndex, null);
5658        // single byte opcode
5659        setMachineCodes(mi++, (byte) 0x23);
5660        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
5661        if (lister != null) lister.RRFD(miStart, "AND", dstReg, srcIndex, srcScale, srcDisp);
5662      }
5663    
5664      /**
5665       * Generate a register--register-offset AND. That is,
5666       * <PRE>
5667       * dstReg &=  [srcDisp]
5668       * </PRE>
5669       *
5670       * @param dstReg the destination register
5671       * @param srcDisp the source displacement
5672       */
5673      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5674      public final void emitAND_Reg_Abs(GPR dstReg, Address srcDisp) {
5675        int miStart = mi;
5676        // no group 1 to 4 prefix byte
5677        generateREXprefix(false, dstReg, null, null);
5678        // single byte opcode
5679        setMachineCodes(mi++, (byte) 0x23);
5680        emitAbsRegOperands(srcDisp, dstReg);
5681        if (lister != null) lister.RRA(miStart, "AND", dstReg, srcDisp);
5682      }
5683    
5684      /**
5685       * Generate a register--register-offset AND. That is,
5686       * <PRE>
5687       * dstReg &=  [srcBase + srcIndex<<srcScale + srcDisp]
5688       * </PRE>
5689       *
5690       * @param dstReg the destination register
5691       * @param srcBase the source base register
5692       * @param srcIndex the source index register
5693       * @param srcScale the source shift amount
5694       * @param srcDisp the source displacement
5695       */
5696      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
5697      public final void emitAND_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
5698        int miStart = mi;
5699        // no group 1 to 4 prefix byte
5700        generateREXprefix(false, dstReg, srcIndex, srcBase);
5701        // single byte opcode
5702        setMachineCodes(mi++, (byte) 0x23);
5703        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
5704        if (lister != null) lister.RRXD(miStart, "AND", dstReg, srcBase, srcIndex, srcScale, srcDisp);
5705      }
5706    
5707      /**
5708       * Generate a register--register(indirect) AND. That is,
5709       * <PRE>
5710       * dstReg &=  [srcBase]
5711       * </PRE>
5712       *
5713       * @param dstReg the destination register
5714       * @param srcBase the source base register
5715       */
5716      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5717      public final void emitAND_Reg_RegInd(GPR dstReg, GPR srcBase) {
5718        int miStart = mi;
5719        // no group 1 to 4 prefix byte
5720        generateREXprefix(false, dstReg, null, srcBase);
5721        // single byte opcode
5722        setMachineCodes(mi++, (byte) 0x23);
5723        emitRegIndirectRegOperands(srcBase, dstReg);
5724        if (lister != null) lister.RRN(miStart, "AND", dstReg, srcBase);
5725      }
5726    
5727      /**
5728       * Generate a register(indirect)--register AND. That is,
5729       * <PRE>
5730       * [dstBase] &=  (word)  srcReg
5731       * </PRE>
5732       *
5733       * @param dstBase the destination base
5734       * @param srcReg the source register
5735       */
5736      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5737      public final void emitAND_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
5738        int miStart = mi;
5739        setMachineCodes(mi++, (byte) 0x66);
5740        generateREXprefix(false, srcReg, null, dstBase);
5741        // single byte opcode
5742        setMachineCodes(mi++, (byte) 0x21);
5743        emitRegIndirectRegOperands(dstBase, srcReg);
5744        if (lister != null) lister.RNR(miStart, "AND", dstBase, srcReg);
5745      }
5746    
5747      /**
5748       * Generate a register-offset--register AND. That is,
5749       * <PRE>
5750       * [dstReg<<dstScale + dstDisp] &=  (word)  srcReg
5751       * </PRE>
5752       *
5753       * @param dstIndex the destination index register
5754       * @param dstScale the destination shift amount
5755       * @param dstDisp the destination displacement
5756       * @param srcReg the source register
5757       */
5758      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
5759      public final void emitAND_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
5760        int miStart = mi;
5761        setMachineCodes(mi++, (byte) 0x66);
5762        generateREXprefix(false, srcReg, dstIndex, null);
5763        // single byte opcode
5764        setMachineCodes(mi++, (byte) 0x21);
5765        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
5766        if (lister != null) lister.RFDR(miStart, "AND", dstIndex, dstScale, dstDisp, srcReg);
5767      }
5768    
5769      /**
5770       * Generate a absolute--register AND. That is,
5771       * <PRE>
5772       * [dstDisp] &=  (word)  srcReg
5773       * </PRE>
5774       *
5775       * @param dstDisp the destination address
5776       * @param srcReg the source register
5777       */
5778      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
5779      public final void emitAND_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
5780        int miStart = mi;
5781        setMachineCodes(mi++, (byte) 0x66);
5782        generateREXprefix(false, srcReg, null, null);
5783        // single byte opcode
5784        setMachineCodes(mi++, (byte) 0x21);
5785        emitAbsRegOperands(dstDisp, srcReg);
5786        if (lister != null) lister.RAR(miStart, "AND", dstDisp, srcReg);
5787      }
5788    
5789      /**
5790       * Generate a register-index--register AND. That is,
5791       * <PRE>
5792       * [dstBase + dstIndex<<dstScale + dstDisp] &=  (word)  srcReg
5793       * </PRE>
5794       *
5795       * @param dstBase the base register
5796       * @param dstIndex the destination index register
5797       * @param dstScale the destination shift amount
5798       * @param dstDisp the destination displacement
5799       * @param srcReg the source register
5800       */
5801      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
5802      public final void emitAND_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
5803        int miStart = mi;
5804        setMachineCodes(mi++, (byte) 0x66);
5805        generateREXprefix(false, srcReg, dstIndex, dstBase);
5806        // single byte opcode
5807        setMachineCodes(mi++, (byte) 0x21);
5808        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
5809        if (lister != null) lister.RXDR(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, srcReg);
5810      }
5811    
5812      /**
5813       * Generate a register-displacement--register AND. That is,
5814       * <PRE>
5815       * [dstBase + dstDisp] &=  (word)  srcReg
5816       * </PRE>
5817       *
5818       * @param dstBase the base register
5819       * @param dstDisp the destination displacement
5820       * @param srcReg the source register
5821       */
5822      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
5823      public final void emitAND_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
5824        int miStart = mi;
5825        setMachineCodes(mi++, (byte) 0x66);
5826        generateREXprefix(false, srcReg, null, dstBase);
5827        // single byte opcode
5828        setMachineCodes(mi++, (byte) 0x21);
5829        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
5830        if (lister != null) lister.RDR(miStart, "AND", dstBase, dstDisp, srcReg);
5831      }
5832    
5833      /**
5834       * Generate a register--register AND. That is,
5835       * <PRE>
5836       * dstReg &=  (word)  srcReg
5837       * </PRE>
5838       *
5839       * @param dstReg the destination register
5840       * @param srcReg the source register
5841       */
5842      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5843      public final void emitAND_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
5844        int miStart = mi;
5845        setMachineCodes(mi++, (byte) 0x66);
5846        generateREXprefix(false, srcReg, null, dstReg);
5847        // single byte opcode
5848        setMachineCodes(mi++, (byte) 0x21);
5849        emitRegRegOperands(dstReg, srcReg);
5850        if (lister != null) lister.RR(miStart, "AND", dstReg, srcReg);
5851      }
5852    
5853      /**
5854       * Generate a register--register-displacement AND. That is,
5855       * <PRE>
5856       * dstReg &=  (word)  [srcReg + srcDisp]
5857       * </PRE>
5858       *
5859       * @param dstReg the destination register
5860       * @param srcBase the source register
5861       * @param srcDisp the source displacement
5862       */
5863      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5864      public final void emitAND_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
5865        int miStart = mi;
5866        setMachineCodes(mi++, (byte) 0x66);
5867        generateREXprefix(false, dstReg, null, srcBase);
5868        // single byte opcode
5869        setMachineCodes(mi++, (byte) 0x23);
5870        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
5871        if (lister != null) lister.RRD(miStart, "AND", dstReg, srcBase, srcDisp);
5872      }
5873    
5874      /**
5875       * Generate a register--register-offset AND. That is,
5876       * <PRE>
5877       * dstReg &=  (word)  [srcIndex<<srcScale + srcDisp]
5878       * </PRE>
5879       *
5880       * @param dstReg the destination register
5881       * @param srcIndex the source index register
5882       * @param srcScale the source shift amount
5883       * @param srcDisp the source displacement
5884       */
5885      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5886      public final void emitAND_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
5887        int miStart = mi;
5888        setMachineCodes(mi++, (byte) 0x66);
5889        generateREXprefix(false, dstReg, srcIndex, null);
5890        // single byte opcode
5891        setMachineCodes(mi++, (byte) 0x23);
5892        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
5893        if (lister != null) lister.RRFD(miStart, "AND", dstReg, srcIndex, srcScale, srcDisp);
5894      }
5895    
5896      /**
5897       * Generate a register--register-offset AND. That is,
5898       * <PRE>
5899       * dstReg &=  (word)  [srcDisp]
5900       * </PRE>
5901       *
5902       * @param dstReg the destination register
5903       * @param srcDisp the source displacement
5904       */
5905      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
5906      public final void emitAND_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
5907        int miStart = mi;
5908        setMachineCodes(mi++, (byte) 0x66);
5909        generateREXprefix(false, dstReg, null, null);
5910        // single byte opcode
5911        setMachineCodes(mi++, (byte) 0x23);
5912        emitAbsRegOperands(srcDisp, dstReg);
5913        if (lister != null) lister.RRA(miStart, "AND", dstReg, srcDisp);
5914      }
5915    
5916      /**
5917       * Generate a register--register-offset AND. That is,
5918       * <PRE>
5919       * dstReg &=  (word)  [srcBase + srcIndex<<srcScale + srcDisp]
5920       * </PRE>
5921       *
5922       * @param dstReg the destination register
5923       * @param srcBase the source base register
5924       * @param srcIndex the source index register
5925       * @param srcScale the source shift amount
5926       * @param srcDisp the source displacement
5927       */
5928      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
5929      public final void emitAND_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
5930        int miStart = mi;
5931        setMachineCodes(mi++, (byte) 0x66);
5932        generateREXprefix(false, dstReg, srcIndex, srcBase);
5933        // single byte opcode
5934        setMachineCodes(mi++, (byte) 0x23);
5935        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
5936        if (lister != null) lister.RRXD(miStart, "AND", dstReg, srcBase, srcIndex, srcScale, srcDisp);
5937      }
5938    
5939      /**
5940       * Generate a register--register(indirect) AND. That is,
5941       * <PRE>
5942       * dstReg &=  (word)  [srcBase]
5943       * </PRE>
5944       *
5945       * @param dstReg the destination register
5946       * @param srcBase the source base register
5947       */
5948      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5949      public final void emitAND_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
5950        int miStart = mi;
5951        setMachineCodes(mi++, (byte) 0x66);
5952        generateREXprefix(false, dstReg, null, srcBase);
5953        // single byte opcode
5954        setMachineCodes(mi++, (byte) 0x23);
5955        emitRegIndirectRegOperands(srcBase, dstReg);
5956        if (lister != null) lister.RRN(miStart, "AND", dstReg, srcBase);
5957      }
5958    
5959      /**
5960       * Generate a register(indirect)--register AND. That is,
5961       * <PRE>
5962       * [dstBase] &=  (quad)  srcReg
5963       * </PRE>
5964       *
5965       * @param dstBase the destination base
5966       * @param srcReg the source register
5967       */
5968      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
5969      public final void emitAND_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
5970        int miStart = mi;
5971        // no group 1 to 4 prefix byte
5972        generateREXprefix(true, srcReg, null, dstBase);
5973        // single byte opcode
5974        setMachineCodes(mi++, (byte) 0x21);
5975        emitRegIndirectRegOperands(dstBase, srcReg);
5976        if (lister != null) lister.RNR(miStart, "AND", dstBase, srcReg);
5977      }
5978    
5979      /**
5980       * Generate a register-offset--register AND. That is,
5981       * <PRE>
5982       * [dstReg<<dstScale + dstDisp] &=  (quad)  srcReg
5983       * </PRE>
5984       *
5985       * @param dstIndex the destination index register
5986       * @param dstScale the destination shift amount
5987       * @param dstDisp the destination displacement
5988       * @param srcReg the source register
5989       */
5990      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
5991      public final void emitAND_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
5992        int miStart = mi;
5993        // no group 1 to 4 prefix byte
5994        generateREXprefix(true, srcReg, dstIndex, null);
5995        // single byte opcode
5996        setMachineCodes(mi++, (byte) 0x21);
5997        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
5998        if (lister != null) lister.RFDR(miStart, "AND", dstIndex, dstScale, dstDisp, srcReg);
5999      }
6000    
6001      /**
6002       * Generate a absolute--register AND. That is,
6003       * <PRE>
6004       * [dstDisp] &=  (quad)  srcReg
6005       * </PRE>
6006       *
6007       * @param dstDisp the destination address
6008       * @param srcReg the source register
6009       */
6010      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
6011      public final void emitAND_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
6012        int miStart = mi;
6013        // no group 1 to 4 prefix byte
6014        generateREXprefix(true, srcReg, null, null);
6015        // single byte opcode
6016        setMachineCodes(mi++, (byte) 0x21);
6017        emitAbsRegOperands(dstDisp, srcReg);
6018        if (lister != null) lister.RAR(miStart, "AND", dstDisp, srcReg);
6019      }
6020    
6021      /**
6022       * Generate a register-index--register AND. That is,
6023       * <PRE>
6024       * [dstBase + dstIndex<<dstScale + dstDisp] &=  (quad)  srcReg
6025       * </PRE>
6026       *
6027       * @param dstBase the base register
6028       * @param dstIndex the destination index register
6029       * @param dstScale the destination shift amount
6030       * @param dstDisp the destination displacement
6031       * @param srcReg the source register
6032       */
6033      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
6034      public final void emitAND_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
6035        int miStart = mi;
6036        // no group 1 to 4 prefix byte
6037        generateREXprefix(true, srcReg, dstIndex, dstBase);
6038        // single byte opcode
6039        setMachineCodes(mi++, (byte) 0x21);
6040        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
6041        if (lister != null) lister.RXDR(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, srcReg);
6042      }
6043    
6044      /**
6045       * Generate a register-displacement--register AND. That is,
6046       * <PRE>
6047       * [dstBase + dstDisp] &=  (quad)  srcReg
6048       * </PRE>
6049       *
6050       * @param dstBase the base register
6051       * @param dstDisp the destination displacement
6052       * @param srcReg the source register
6053       */
6054      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
6055      public final void emitAND_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
6056        int miStart = mi;
6057        // no group 1 to 4 prefix byte
6058        generateREXprefix(true, srcReg, null, dstBase);
6059        // single byte opcode
6060        setMachineCodes(mi++, (byte) 0x21);
6061        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
6062        if (lister != null) lister.RDR(miStart, "AND", dstBase, dstDisp, srcReg);
6063      }
6064    
6065      /**
6066       * Generate a register--register AND. That is,
6067       * <PRE>
6068       * dstReg &=  (quad)  srcReg
6069       * </PRE>
6070       *
6071       * @param dstReg the destination register
6072       * @param srcReg the source register
6073       */
6074      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6075      public final void emitAND_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
6076        int miStart = mi;
6077        // no group 1 to 4 prefix byte
6078        generateREXprefix(true, srcReg, null, dstReg);
6079        // single byte opcode
6080        setMachineCodes(mi++, (byte) 0x21);
6081        emitRegRegOperands(dstReg, srcReg);
6082        if (lister != null) lister.RR(miStart, "AND", dstReg, srcReg);
6083      }
6084    
6085      /**
6086       * Generate a register--register-displacement AND. That is,
6087       * <PRE>
6088       * dstReg &=  (quad)  [srcReg + srcDisp]
6089       * </PRE>
6090       *
6091       * @param dstReg the destination register
6092       * @param srcBase the source register
6093       * @param srcDisp the source displacement
6094       */
6095      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6096      public final void emitAND_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
6097        int miStart = mi;
6098        // no group 1 to 4 prefix byte
6099        generateREXprefix(true, dstReg, null, srcBase);
6100        // single byte opcode
6101        setMachineCodes(mi++, (byte) 0x23);
6102        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
6103        if (lister != null) lister.RRD(miStart, "AND", dstReg, srcBase, srcDisp);
6104      }
6105    
6106      /**
6107       * Generate a register--register-offset AND. That is,
6108       * <PRE>
6109       * dstReg &=  (quad)  [srcIndex<<srcScale + srcDisp]
6110       * </PRE>
6111       *
6112       * @param dstReg the destination register
6113       * @param srcIndex the source index register
6114       * @param srcScale the source shift amount
6115       * @param srcDisp the source displacement
6116       */
6117      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6118      public final void emitAND_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
6119        int miStart = mi;
6120        // no group 1 to 4 prefix byte
6121        generateREXprefix(true, dstReg, srcIndex, null);
6122        // single byte opcode
6123        setMachineCodes(mi++, (byte) 0x23);
6124        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
6125        if (lister != null) lister.RRFD(miStart, "AND", dstReg, srcIndex, srcScale, srcDisp);
6126      }
6127    
6128      /**
6129       * Generate a register--register-offset AND. That is,
6130       * <PRE>
6131       * dstReg &=  (quad)  [srcDisp]
6132       * </PRE>
6133       *
6134       * @param dstReg the destination register
6135       * @param srcDisp the source displacement
6136       */
6137      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6138      public final void emitAND_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
6139        int miStart = mi;
6140        // no group 1 to 4 prefix byte
6141        generateREXprefix(true, dstReg, null, null);
6142        // single byte opcode
6143        setMachineCodes(mi++, (byte) 0x23);
6144        emitAbsRegOperands(srcDisp, dstReg);
6145        if (lister != null) lister.RRA(miStart, "AND", dstReg, srcDisp);
6146      }
6147    
6148      /**
6149       * Generate a register--register-offset AND. That is,
6150       * <PRE>
6151       * dstReg &=  (quad)  [srcBase + srcIndex<<srcScale + srcDisp]
6152       * </PRE>
6153       *
6154       * @param dstReg the destination register
6155       * @param srcBase the source base register
6156       * @param srcIndex the source index register
6157       * @param srcScale the source shift amount
6158       * @param srcDisp the source displacement
6159       */
6160      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
6161      public final void emitAND_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
6162        int miStart = mi;
6163        // no group 1 to 4 prefix byte
6164        generateREXprefix(true, dstReg, srcIndex, srcBase);
6165        // single byte opcode
6166        setMachineCodes(mi++, (byte) 0x23);
6167        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
6168        if (lister != null) lister.RRXD(miStart, "AND", dstReg, srcBase, srcIndex, srcScale, srcDisp);
6169      }
6170    
6171      /**
6172       * Generate a register--register(indirect) AND. That is,
6173       * <PRE>
6174       * dstReg &=  (quad)  [srcBase]
6175       * </PRE>
6176       *
6177       * @param dstReg the destination register
6178       * @param srcBase the source base register
6179       */
6180      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6181      public final void emitAND_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
6182        int miStart = mi;
6183        // no group 1 to 4 prefix byte
6184        generateREXprefix(true, dstReg, null, srcBase);
6185        // single byte opcode
6186        setMachineCodes(mi++, (byte) 0x23);
6187        emitRegIndirectRegOperands(srcBase, dstReg);
6188        if (lister != null) lister.RRN(miStart, "AND", dstReg, srcBase);
6189      }
6190    
6191      /**
6192       * Generate a register(indirect)--register AND. That is,
6193       * <PRE>
6194       * [dstBase] &=  (byte)  srcReg
6195       * </PRE>
6196       *
6197       * @param dstBase the destination base
6198       * @param srcReg the source register
6199       */
6200      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6201      public final void emitAND_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
6202        int miStart = mi;
6203        // no group 1 to 4 prefix byte
6204        generateREXprefix(false, srcReg, null, dstBase);
6205        // single byte opcode
6206        setMachineCodes(mi++, (byte) 0x20);
6207        emitRegIndirectRegOperands(dstBase, srcReg);
6208        if (lister != null) lister.RNR(miStart, "AND", dstBase, srcReg);
6209      }
6210    
6211      /**
6212       * Generate a register-offset--register AND. That is,
6213       * <PRE>
6214       * [dstReg<<dstScale + dstDisp] &=  (byte)  srcReg
6215       * </PRE>
6216       *
6217       * @param dstIndex the destination index register
6218       * @param dstScale the destination shift amount
6219       * @param dstDisp the destination displacement
6220       * @param srcReg the source register
6221       */
6222      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
6223      public final void emitAND_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
6224        int miStart = mi;
6225        // no group 1 to 4 prefix byte
6226        generateREXprefix(false, srcReg, dstIndex, null);
6227        // single byte opcode
6228        setMachineCodes(mi++, (byte) 0x20);
6229        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
6230        if (lister != null) lister.RFDR(miStart, "AND", dstIndex, dstScale, dstDisp, srcReg);
6231      }
6232    
6233      /**
6234       * Generate a absolute--register AND. That is,
6235       * <PRE>
6236       * [dstDisp] &=  (byte)  srcReg
6237       * </PRE>
6238       *
6239       * @param dstDisp the destination address
6240       * @param srcReg the source register
6241       */
6242      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
6243      public final void emitAND_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
6244        int miStart = mi;
6245        // no group 1 to 4 prefix byte
6246        generateREXprefix(false, srcReg, null, null);
6247        // single byte opcode
6248        setMachineCodes(mi++, (byte) 0x20);
6249        emitAbsRegOperands(dstDisp, srcReg);
6250        if (lister != null) lister.RAR(miStart, "AND", dstDisp, srcReg);
6251      }
6252    
6253      /**
6254       * Generate a register-index--register AND. That is,
6255       * <PRE>
6256       * [dstBase + dstIndex<<dstScale + dstDisp] &=  (byte)  srcReg
6257       * </PRE>
6258       *
6259       * @param dstBase the base register
6260       * @param dstIndex the destination index register
6261       * @param dstScale the destination shift amount
6262       * @param dstDisp the destination displacement
6263       * @param srcReg the source register
6264       */
6265      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
6266      public final void emitAND_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
6267        int miStart = mi;
6268        // no group 1 to 4 prefix byte
6269        generateREXprefix(false, srcReg, dstIndex, dstBase);
6270        // single byte opcode
6271        setMachineCodes(mi++, (byte) 0x20);
6272        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
6273        if (lister != null) lister.RXDR(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, srcReg);
6274      }
6275    
6276      /**
6277       * Generate a register-displacement--register AND. That is,
6278       * <PRE>
6279       * [dstBase + dstDisp] &=  (byte)  srcReg
6280       * </PRE>
6281       *
6282       * @param dstBase the base register
6283       * @param dstDisp the destination displacement
6284       * @param srcReg the source register
6285       */
6286      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
6287      public final void emitAND_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
6288        int miStart = mi;
6289        // no group 1 to 4 prefix byte
6290        generateREXprefix(false, srcReg, null, dstBase);
6291        // single byte opcode
6292        setMachineCodes(mi++, (byte) 0x20);
6293        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
6294        if (lister != null) lister.RDR(miStart, "AND", dstBase, dstDisp, srcReg);
6295      }
6296    
6297      /**
6298       * Generate a register--register AND. That is,
6299       * <PRE>
6300       * dstReg &=  (byte)  srcReg
6301       * </PRE>
6302       *
6303       * @param dstReg the destination register
6304       * @param srcReg the source register
6305       */
6306      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6307      public final void emitAND_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
6308        int miStart = mi;
6309        // no group 1 to 4 prefix byte
6310        generateREXprefix(false, srcReg, null, dstReg);
6311        // single byte opcode
6312        setMachineCodes(mi++, (byte) 0x20);
6313        emitRegRegOperands(dstReg, srcReg);
6314        if (lister != null) lister.RR(miStart, "AND", dstReg, srcReg);
6315      }
6316    
6317      /**
6318       * Generate a register--register-displacement AND. That is,
6319       * <PRE>
6320       * dstReg &=  (byte)  [srcReg + srcDisp]
6321       * </PRE>
6322       *
6323       * @param dstReg the destination register
6324       * @param srcBase the source register
6325       * @param srcDisp the source displacement
6326       */
6327      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6328      public final void emitAND_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
6329        int miStart = mi;
6330        // no group 1 to 4 prefix byte
6331        generateREXprefix(false, dstReg, null, srcBase);
6332        // single byte opcode
6333        setMachineCodes(mi++, (byte) 0x22);
6334        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
6335        if (lister != null) lister.RRD(miStart, "AND", dstReg, srcBase, srcDisp);
6336      }
6337    
6338      /**
6339       * Generate a register--register-offset AND. That is,
6340       * <PRE>
6341       * dstReg &=  (byte)  [srcIndex<<srcScale + srcDisp]
6342       * </PRE>
6343       *
6344       * @param dstReg the destination register
6345       * @param srcIndex the source index register
6346       * @param srcScale the source shift amount
6347       * @param srcDisp the source displacement
6348       */
6349      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6350      public final void emitAND_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
6351        int miStart = mi;
6352        // no group 1 to 4 prefix byte
6353        generateREXprefix(false, dstReg, srcIndex, null);
6354        // single byte opcode
6355        setMachineCodes(mi++, (byte) 0x22);
6356        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
6357        if (lister != null) lister.RRFD(miStart, "AND", dstReg, srcIndex, srcScale, srcDisp);
6358      }
6359    
6360      /**
6361       * Generate a register--register-offset AND. That is,
6362       * <PRE>
6363       * dstReg &=  (byte)  [srcDisp]
6364       * </PRE>
6365       *
6366       * @param dstReg the destination register
6367       * @param srcDisp the source displacement
6368       */
6369      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6370      public final void emitAND_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
6371        int miStart = mi;
6372        // no group 1 to 4 prefix byte
6373        generateREXprefix(false, dstReg, null, null);
6374        // single byte opcode
6375        setMachineCodes(mi++, (byte) 0x22);
6376        emitAbsRegOperands(srcDisp, dstReg);
6377        if (lister != null) lister.RRA(miStart, "AND", dstReg, srcDisp);
6378      }
6379    
6380      /**
6381       * Generate a register--register-offset AND. That is,
6382       * <PRE>
6383       * dstReg &=  (byte)  [srcBase + srcIndex<<srcScale + srcDisp]
6384       * </PRE>
6385       *
6386       * @param dstReg the destination register
6387       * @param srcBase the source base register
6388       * @param srcIndex the source index register
6389       * @param srcScale the source shift amount
6390       * @param srcDisp the source displacement
6391       */
6392      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
6393      public final void emitAND_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
6394        int miStart = mi;
6395        // no group 1 to 4 prefix byte
6396        generateREXprefix(false, dstReg, srcIndex, srcBase);
6397        // single byte opcode
6398        setMachineCodes(mi++, (byte) 0x22);
6399        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
6400        if (lister != null) lister.RRXD(miStart, "AND", dstReg, srcBase, srcIndex, srcScale, srcDisp);
6401      }
6402    
6403      /**
6404       * Generate a register--register(indirect) AND. That is,
6405       * <PRE>
6406       * dstReg &=  (byte)  [srcBase]
6407       * </PRE>
6408       *
6409       * @param dstReg the destination register
6410       * @param srcBase the source base register
6411       */
6412      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6413      public final void emitAND_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
6414        int miStart = mi;
6415        // no group 1 to 4 prefix byte
6416        generateREXprefix(false, dstReg, null, srcBase);
6417        // single byte opcode
6418        setMachineCodes(mi++, (byte) 0x22);
6419        emitRegIndirectRegOperands(srcBase, dstReg);
6420        if (lister != null) lister.RRN(miStart, "AND", dstReg, srcBase);
6421      }
6422    
6423      /**
6424       * Generate a register--immediate AND. That is,
6425       * <PRE>
6426       * dstReg &=  imm
6427       * </PRE>
6428       *
6429       * @param dstReg the destination register
6430       * @param imm immediate
6431       */
6432      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6433      public final void emitAND_Reg_Imm(GPR dstReg, int imm) {
6434        int miStart = mi;
6435        // no group 1 to 4 prefix byte
6436        generateREXprefix(false, null, null, dstReg);
6437        // single byte opcode
6438        if (fits(imm,8)) {
6439          setMachineCodes(mi++, (byte) 0x83);
6440          // "register 0x4" is really part of the opcode
6441          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
6442          emitImm8((byte)imm);
6443        } else if (dstReg == EAX) {
6444          setMachineCodes(mi++, (byte) 0x25);
6445          emitImm32(imm);
6446        } else {
6447          setMachineCodes(mi++, (byte) 0x81);
6448          // "register 0x4" is really part of the opcode
6449          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
6450          emitImm32(imm);
6451        }
6452        if (lister != null) lister.RI(miStart, "AND", dstReg, imm);
6453      }
6454    
6455      /**
6456       * Generate a register-displacement--immediate AND. That is,
6457       * <PRE>
6458       * [dstBase + dstDisp] &=  imm
6459       * </PRE>
6460       *
6461       * @param dstBase the destination register
6462       * @param dstDisp the destination displacement
6463       * @param imm immediate
6464       */
6465      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6466      public final void emitAND_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
6467        int miStart = mi;
6468        // no group 1 to 4 prefix byte
6469        generateREXprefix(false, null, null, dstBase);
6470        // single byte opcode
6471        if (fits(imm,8)) {
6472          setMachineCodes(mi++, (byte) 0x83);
6473          // "register 0x4" is really part of the opcode
6474          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
6475          emitImm8((byte)imm);
6476        } else {
6477          setMachineCodes(mi++, (byte) 0x81);
6478          // "register 0x4" is really part of the opcode
6479          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
6480          emitImm32(imm);
6481        }
6482        if (lister != null) lister.RDI(miStart, "AND", dstBase, dstDisp, imm);
6483      }
6484    
6485      /**
6486       * Generate a register-offset--immediate AND. That is,
6487       * <PRE>
6488       * [dstIndex<<dstScale + dstDisp] &=  imm
6489       * </PRE>
6490       *
6491       * @param dstIndex the destination index register
6492       * @param dstScale the destination shift amount
6493       * @param dstDisp the destination displacement
6494       * @param imm immediate
6495       */
6496      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6497      public final void emitAND_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
6498        int miStart = mi;
6499        // no group 1 to 4 prefix byte
6500        generateREXprefix(false, null, dstIndex, null);
6501        // single byte opcode
6502        if (fits(imm,8)) {
6503          setMachineCodes(mi++, (byte) 0x83);
6504          // "register 0x4" is really part of the opcode
6505          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6506          emitImm8((byte)imm);
6507        } else {
6508          setMachineCodes(mi++, (byte) 0x81);
6509          // "register 0x4" is really part of the opcode
6510          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6511          emitImm32(imm);
6512        }
6513        if (lister != null) lister.RFDI(miStart, "AND", dstIndex, dstScale, dstDisp, imm);
6514      }
6515    
6516      /**
6517       * Generate a absolute--immediate AND. That is,
6518       * <PRE>
6519       * [dstDisp] &=  imm
6520       * </PRE>
6521       *
6522       * @param dstDisp the destination displacement
6523       * @param imm immediate
6524       */
6525      public final void emitAND_Abs_Imm(Address dstDisp, int imm) {
6526        int miStart = mi;
6527        // no group 1 to 4 prefix byte
6528        generateREXprefix(false, null, null, null);
6529        // single byte opcode
6530        if (fits(imm,8)) {
6531          setMachineCodes(mi++, (byte) 0x83);
6532          // "register 0x4" is really part of the opcode
6533          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
6534          emitImm8((byte)imm);
6535        } else {
6536          setMachineCodes(mi++, (byte) 0x81);
6537          // "register 0x4" is really part of the opcode
6538          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
6539          emitImm32(imm);
6540        }
6541        if (lister != null) lister.RAI(miStart, "AND", dstDisp, imm);
6542      }
6543    
6544      /**
6545       * Generate a register-index--immediate AND. That is,
6546       * <PRE>
6547       * [dstBase + dstIndex<<dstScale + dstDisp] &=  imm
6548       * </PRE>
6549       *
6550       * @param dstBase the destination base register
6551       * @param dstIndex the destination index register
6552       * @param dstScale the destination shift amount
6553       * @param dstDisp the destination displacement
6554       * @param imm immediate
6555       */
6556      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6557      public final void emitAND_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
6558        int miStart = mi;
6559        // no group 1 to 4 prefix byte
6560        generateREXprefix(false, null, dstIndex, dstBase);
6561        // single byte opcode
6562        if (fits(imm,8)) {
6563          setMachineCodes(mi++, (byte) 0x83);
6564          // "register 0x4" is really part of the opcode
6565          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6566          emitImm8((byte)imm);
6567        } else {
6568          setMachineCodes(mi++, (byte) 0x81);
6569          // "register 0x4" is really part of the opcode
6570          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6571          emitImm32(imm);
6572        }
6573        if (lister != null) lister.RXDI(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, imm);
6574      }
6575    
6576      /**
6577       * Generate a register(indirect)--immediate AND. That is,
6578       * <PRE>
6579       * [dstBase] &=  imm
6580       * </PRE>
6581       *
6582       * @param dstBase the destination base register
6583       * @param imm immediate
6584       */
6585      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6586      public final void emitAND_RegInd_Imm(GPR dstBase, int imm) {
6587        int miStart = mi;
6588        // no group 1 to 4 prefix byte
6589        generateREXprefix(false, null, null, dstBase);
6590        // single byte opcode
6591        if (fits(imm,8)) {
6592          setMachineCodes(mi++, (byte) 0x83);
6593          // "register 0x4" is really part of the opcode
6594          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
6595          emitImm8((byte)imm);
6596        } else {
6597          setMachineCodes(mi++, (byte) 0x81);
6598          // "register 0x4" is really part of the opcode
6599          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
6600          emitImm32(imm);
6601        }
6602        if (lister != null) lister.RNI(miStart, "AND", dstBase, imm);
6603      }
6604    
6605      /**
6606       * Generate a register--immediate AND. That is,
6607       * <PRE>
6608       * dstReg &=  (word)  imm
6609       * </PRE>
6610       *
6611       * @param dstReg the destination register
6612       * @param imm immediate
6613       */
6614      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6615      public final void emitAND_Reg_Imm_Word(GPR dstReg, int imm) {
6616        int miStart = mi;
6617        setMachineCodes(mi++, (byte) 0x66);
6618        generateREXprefix(false, null, null, dstReg);
6619        // single byte opcode
6620        if (fits(imm,8)) {
6621          setMachineCodes(mi++, (byte) 0x83);
6622          // "register 0x4" is really part of the opcode
6623          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
6624          emitImm8((byte)imm);
6625        } else if (dstReg == EAX) {
6626          setMachineCodes(mi++, (byte) 0x25);
6627          emitImm16(imm);
6628        } else {
6629          setMachineCodes(mi++, (byte) 0x81);
6630          // "register 0x4" is really part of the opcode
6631          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
6632          emitImm16(imm);
6633        }
6634        if (lister != null) lister.RI(miStart, "AND", dstReg, imm);
6635      }
6636    
6637      /**
6638       * Generate a register-displacement--immediate AND. That is,
6639       * <PRE>
6640       * [dstBase + dstDisp] &=  (word)  imm
6641       * </PRE>
6642       *
6643       * @param dstBase the destination register
6644       * @param dstDisp the destination displacement
6645       * @param imm immediate
6646       */
6647      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6648      public final void emitAND_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
6649        int miStart = mi;
6650        setMachineCodes(mi++, (byte) 0x66);
6651        generateREXprefix(false, null, null, dstBase);
6652        // single byte opcode
6653        if (fits(imm,8)) {
6654          setMachineCodes(mi++, (byte) 0x83);
6655          // "register 0x4" is really part of the opcode
6656          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
6657          emitImm8((byte)imm);
6658        } else {
6659          setMachineCodes(mi++, (byte) 0x81);
6660          // "register 0x4" is really part of the opcode
6661          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
6662          emitImm16(imm);
6663        }
6664        if (lister != null) lister.RDI(miStart, "AND", dstBase, dstDisp, imm);
6665      }
6666    
6667      /**
6668       * Generate a register-offset--immediate AND. That is,
6669       * <PRE>
6670       * [dstIndex<<dstScale + dstDisp] &=  (word)  imm
6671       * </PRE>
6672       *
6673       * @param dstIndex the destination index register
6674       * @param dstScale the destination shift amount
6675       * @param dstDisp the destination displacement
6676       * @param imm immediate
6677       */
6678      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6679      public final void emitAND_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
6680        int miStart = mi;
6681        setMachineCodes(mi++, (byte) 0x66);
6682        generateREXprefix(false, null, dstIndex, null);
6683        // single byte opcode
6684        if (fits(imm,8)) {
6685          setMachineCodes(mi++, (byte) 0x83);
6686          // "register 0x4" is really part of the opcode
6687          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6688          emitImm8((byte)imm);
6689        } else {
6690          setMachineCodes(mi++, (byte) 0x81);
6691          // "register 0x4" is really part of the opcode
6692          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6693          emitImm16(imm);
6694        }
6695        if (lister != null) lister.RFDI(miStart, "AND", dstIndex, dstScale, dstDisp, imm);
6696      }
6697    
6698      /**
6699       * Generate a absolute--immediate AND. That is,
6700       * <PRE>
6701       * [dstDisp] &=  (word)  imm
6702       * </PRE>
6703       *
6704       * @param dstDisp the destination displacement
6705       * @param imm immediate
6706       */
6707      public final void emitAND_Abs_Imm_Word(Address dstDisp, int imm) {
6708        int miStart = mi;
6709        setMachineCodes(mi++, (byte) 0x66);
6710        generateREXprefix(false, null, null, null);
6711        // single byte opcode
6712        if (fits(imm,8)) {
6713          setMachineCodes(mi++, (byte) 0x83);
6714          // "register 0x4" is really part of the opcode
6715          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
6716          emitImm8((byte)imm);
6717        } else {
6718          setMachineCodes(mi++, (byte) 0x81);
6719          // "register 0x4" is really part of the opcode
6720          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
6721          emitImm16(imm);
6722        }
6723        if (lister != null) lister.RAI(miStart, "AND", dstDisp, imm);
6724      }
6725    
6726      /**
6727       * Generate a register-index--immediate AND. That is,
6728       * <PRE>
6729       * [dstBase + dstIndex<<dstScale + dstDisp] &=  (word)  imm
6730       * </PRE>
6731       *
6732       * @param dstBase the destination base register
6733       * @param dstIndex the destination index register
6734       * @param dstScale the destination shift amount
6735       * @param dstDisp the destination displacement
6736       * @param imm immediate
6737       */
6738      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6739      public final void emitAND_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
6740        int miStart = mi;
6741        setMachineCodes(mi++, (byte) 0x66);
6742        generateREXprefix(false, null, dstIndex, dstBase);
6743        // single byte opcode
6744        if (fits(imm,8)) {
6745          setMachineCodes(mi++, (byte) 0x83);
6746          // "register 0x4" is really part of the opcode
6747          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6748          emitImm8((byte)imm);
6749        } else {
6750          setMachineCodes(mi++, (byte) 0x81);
6751          // "register 0x4" is really part of the opcode
6752          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6753          emitImm16(imm);
6754        }
6755        if (lister != null) lister.RXDI(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, imm);
6756      }
6757    
6758      /**
6759       * Generate a register(indirect)--immediate AND. That is,
6760       * <PRE>
6761       * [dstBase] &=  (word)  imm
6762       * </PRE>
6763       *
6764       * @param dstBase the destination base register
6765       * @param imm immediate
6766       */
6767      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6768      public final void emitAND_RegInd_Imm_Word(GPR dstBase, int imm) {
6769        int miStart = mi;
6770        setMachineCodes(mi++, (byte) 0x66);
6771        generateREXprefix(false, null, null, dstBase);
6772        // single byte opcode
6773        if (fits(imm,8)) {
6774          setMachineCodes(mi++, (byte) 0x83);
6775          // "register 0x4" is really part of the opcode
6776          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
6777          emitImm8((byte)imm);
6778        } else {
6779          setMachineCodes(mi++, (byte) 0x81);
6780          // "register 0x4" is really part of the opcode
6781          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
6782          emitImm16(imm);
6783        }
6784        if (lister != null) lister.RNI(miStart, "AND", dstBase, imm);
6785      }
6786    
6787      /**
6788       * Generate a register--immediate AND. That is,
6789       * <PRE>
6790       * dstReg &=  (quad)  imm
6791       * </PRE>
6792       *
6793       * @param dstReg the destination register
6794       * @param imm immediate
6795       */
6796      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6797      public final void emitAND_Reg_Imm_Quad(GPR dstReg, int imm) {
6798        int miStart = mi;
6799        // no group 1 to 4 prefix byte
6800        generateREXprefix(true, null, null, dstReg);
6801        // single byte opcode
6802        if (fits(imm,8)) {
6803          setMachineCodes(mi++, (byte) 0x83);
6804          // "register 0x4" is really part of the opcode
6805          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
6806          emitImm8((byte)imm);
6807        } else if (dstReg == EAX) {
6808          setMachineCodes(mi++, (byte) 0x25);
6809          emitImm32(imm);
6810        } else {
6811          setMachineCodes(mi++, (byte) 0x81);
6812          // "register 0x4" is really part of the opcode
6813          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
6814          emitImm32(imm);
6815        }
6816        if (lister != null) lister.RI(miStart, "AND", dstReg, imm);
6817      }
6818    
6819      /**
6820       * Generate a register-displacement--immediate AND. That is,
6821       * <PRE>
6822       * [dstBase + dstDisp] &=  (quad)  imm
6823       * </PRE>
6824       *
6825       * @param dstBase the destination register
6826       * @param dstDisp the destination displacement
6827       * @param imm immediate
6828       */
6829      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6830      public final void emitAND_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
6831        int miStart = mi;
6832        // no group 1 to 4 prefix byte
6833        generateREXprefix(true, null, null, dstBase);
6834        // single byte opcode
6835        if (fits(imm,8)) {
6836          setMachineCodes(mi++, (byte) 0x83);
6837          // "register 0x4" is really part of the opcode
6838          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
6839          emitImm8((byte)imm);
6840        } else {
6841          setMachineCodes(mi++, (byte) 0x81);
6842          // "register 0x4" is really part of the opcode
6843          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
6844          emitImm32(imm);
6845        }
6846        if (lister != null) lister.RDI(miStart, "AND", dstBase, dstDisp, imm);
6847      }
6848    
6849      /**
6850       * Generate a register-offset--immediate AND. That is,
6851       * <PRE>
6852       * [dstIndex<<dstScale + dstDisp] &=  (quad)  imm
6853       * </PRE>
6854       *
6855       * @param dstIndex the destination index register
6856       * @param dstScale the destination shift amount
6857       * @param dstDisp the destination displacement
6858       * @param imm immediate
6859       */
6860      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6861      public final void emitAND_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
6862        int miStart = mi;
6863        // no group 1 to 4 prefix byte
6864        generateREXprefix(true, null, dstIndex, null);
6865        // single byte opcode
6866        if (fits(imm,8)) {
6867          setMachineCodes(mi++, (byte) 0x83);
6868          // "register 0x4" is really part of the opcode
6869          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6870          emitImm8((byte)imm);
6871        } else {
6872          setMachineCodes(mi++, (byte) 0x81);
6873          // "register 0x4" is really part of the opcode
6874          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6875          emitImm32(imm);
6876        }
6877        if (lister != null) lister.RFDI(miStart, "AND", dstIndex, dstScale, dstDisp, imm);
6878      }
6879    
6880      /**
6881       * Generate a absolute--immediate AND. That is,
6882       * <PRE>
6883       * [dstDisp] &=  (quad)  imm
6884       * </PRE>
6885       *
6886       * @param dstDisp the destination displacement
6887       * @param imm immediate
6888       */
6889      public final void emitAND_Abs_Imm_Quad(Address dstDisp, int imm) {
6890        int miStart = mi;
6891        // no group 1 to 4 prefix byte
6892        generateREXprefix(true, null, null, null);
6893        // single byte opcode
6894        if (fits(imm,8)) {
6895          setMachineCodes(mi++, (byte) 0x83);
6896          // "register 0x4" is really part of the opcode
6897          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
6898          emitImm8((byte)imm);
6899        } else {
6900          setMachineCodes(mi++, (byte) 0x81);
6901          // "register 0x4" is really part of the opcode
6902          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
6903          emitImm32(imm);
6904        }
6905        if (lister != null) lister.RAI(miStart, "AND", dstDisp, imm);
6906      }
6907    
6908      /**
6909       * Generate a register-index--immediate AND. That is,
6910       * <PRE>
6911       * [dstBase + dstIndex<<dstScale + dstDisp] &=  (quad)  imm
6912       * </PRE>
6913       *
6914       * @param dstBase the destination base register
6915       * @param dstIndex the destination index register
6916       * @param dstScale the destination shift amount
6917       * @param dstDisp the destination displacement
6918       * @param imm immediate
6919       */
6920      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
6921      public final void emitAND_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
6922        int miStart = mi;
6923        // no group 1 to 4 prefix byte
6924        generateREXprefix(true, null, dstIndex, dstBase);
6925        // single byte opcode
6926        if (fits(imm,8)) {
6927          setMachineCodes(mi++, (byte) 0x83);
6928          // "register 0x4" is really part of the opcode
6929          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6930          emitImm8((byte)imm);
6931        } else {
6932          setMachineCodes(mi++, (byte) 0x81);
6933          // "register 0x4" is really part of the opcode
6934          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
6935          emitImm32(imm);
6936        }
6937        if (lister != null) lister.RXDI(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, imm);
6938      }
6939    
6940      /**
6941       * Generate a register(indirect)--immediate AND. That is,
6942       * <PRE>
6943       * [dstBase] &=  (quad)  imm
6944       * </PRE>
6945       *
6946       * @param dstBase the destination base register
6947       * @param imm immediate
6948       */
6949      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6950      public final void emitAND_RegInd_Imm_Quad(GPR dstBase, int imm) {
6951        int miStart = mi;
6952        // no group 1 to 4 prefix byte
6953        generateREXprefix(true, null, null, dstBase);
6954        // single byte opcode
6955        if (fits(imm,8)) {
6956          setMachineCodes(mi++, (byte) 0x83);
6957          // "register 0x4" is really part of the opcode
6958          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
6959          emitImm8((byte)imm);
6960        } else {
6961          setMachineCodes(mi++, (byte) 0x81);
6962          // "register 0x4" is really part of the opcode
6963          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
6964          emitImm32(imm);
6965        }
6966        if (lister != null) lister.RNI(miStart, "AND", dstBase, imm);
6967      }
6968    
6969      /**
6970       * Generate a register--immediate AND. That is,
6971       * <PRE>
6972       *  dstReg &= (byte) imm
6973       * </PRE>
6974       *
6975       * @param dstReg the destination register
6976       * @param imm immediate
6977       */
6978      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
6979      public final void emitAND_Reg_Imm_Byte(GPR dstReg, int imm) {
6980        int miStart = mi;
6981        if (dstReg == EAX) {
6982          setMachineCodes(mi++, (byte) 0x24);
6983          emitImm8(imm);
6984        } else {
6985          generateREXprefix(false, null, null, dstReg);
6986          setMachineCodes(mi++, (byte) 0x80);
6987          // "register 0x4" is really part of the opcode
6988          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
6989          emitImm8(imm);
6990        }
6991        if (lister != null) lister.RI(miStart, "AND", dstReg, imm);
6992      }
6993    
6994      /**
6995       * Generate a register-displacement--immediate AND. That is,
6996       * <PRE>
6997       * [dstBase + dstDisp] &= (byte) imm
6998       * </PRE>
6999       *
7000       * @param dstBase the destination register
7001       * @param dstDisp the destination displacement
7002       * @param imm immediate
7003       */
7004      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
7005      public final void emitAND_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
7006        int miStart = mi;
7007        generateREXprefix(false, null, null, dstBase);
7008        setMachineCodes(mi++, (byte) 0x80);
7009        // "register 0x4" is really part of the opcode
7010        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
7011        emitImm8(imm);
7012        if (lister != null) lister.RDI(miStart, "AND", dstBase, dstDisp, imm);
7013      }
7014    
7015      /**
7016       * Generate a register-index--immediate AND. That is,
7017       * <PRE>
7018       * [dstBase + dstIndex<<scale + dstDisp] &= (byte) imm
7019       * </PRE>
7020       *
7021       * @param dstBase the destination base register
7022       * @param dstIndex the destination index register
7023       * @param dstScale the destination shift amount
7024       * @param dstDisp the destination displacement
7025       * @param imm immediate
7026       */
7027      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7028      public final void emitAND_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
7029        int miStart = mi;
7030        generateREXprefix(false, null, dstIndex, dstBase);
7031        setMachineCodes(mi++, (byte) 0x80);
7032        // "register 0x4" is really part of the opcode
7033        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
7034        emitImm8(imm);
7035        if (lister != null) lister.RXDI(miStart, "AND", dstBase, dstIndex, dstScale, dstDisp, imm);
7036      }
7037    
7038      /**
7039       * Generate a register-offset--immediate AND. That is,
7040       * <PRE>
7041       * [dstIndex<<dstScale + dstDisp] &= (byte) imm
7042       * </PRE>
7043       *
7044       * @param dstIndex the destination index register
7045       * @param dstScale the destination shift amount
7046       * @param dstDisp the destination displacement
7047       * @param imm immediate
7048       */
7049      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
7050      public final void emitAND_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
7051        int miStart = mi;
7052        generateREXprefix(false, null, dstIndex, null);
7053        setMachineCodes(mi++, (byte) 0x80);
7054        // "register 0x4" is really part of the opcode
7055        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
7056        emitImm8(imm);
7057        if (lister != null) lister.RFDI(miStart, "AND", dstIndex, dstScale, dstDisp, imm);
7058      }
7059    
7060      /**
7061       * Generate a absolute--immediate AND. That is,
7062       * <PRE>
7063       * [dstDisp] &= (byte) imm
7064       * </PRE>
7065       *
7066       * @param dstDisp the destination displacement
7067       * @param imm immediate
7068       */
7069      public final void emitAND_Abs_Imm_Byte(Address dstDisp, int imm) {
7070        int miStart = mi;
7071        generateREXprefix(false, null, null, null);
7072        setMachineCodes(mi++, (byte) 0x80);
7073        // "register 0x4" is really part of the opcode
7074        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
7075        emitImm8(imm);
7076        if (lister != null) lister.RAI(miStart, "AND", dstDisp, imm);
7077      }
7078    
7079      /**
7080       * Generate a register(indirect)--immediate AND. That is,
7081       * <PRE>
7082       * [dstBase] &= (byte) imm
7083       * </PRE>
7084       *
7085       * @param dstBase the destination base register
7086       * @param imm immediate
7087       */
7088      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
7089      public final void emitAND_RegInd_Imm_Byte(GPR dstBase, int imm) {
7090        int miStart = mi;
7091        generateREXprefix(false, null, null, dstBase);
7092        setMachineCodes(mi++, (byte) 0x80);
7093        // "register 0x4" is really part of the opcode
7094        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
7095        emitImm8(imm);
7096        if (lister != null) lister.RNI(miStart, "AND", dstBase, imm);
7097      }
7098    
7099      /**
7100       * Generate a register(indirect)--register CMP. That is,
7101       * <PRE>
7102       * [dstBase] ==  srcReg
7103       * </PRE>
7104       *
7105       * @param dstBase the destination base
7106       * @param srcReg the source register
7107       */
7108      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7109      public final void emitCMP_RegInd_Reg(GPR dstBase, GPR srcReg) {
7110        int miStart = mi;
7111        // no group 1 to 4 prefix byte
7112        generateREXprefix(false, srcReg, null, dstBase);
7113        // single byte opcode
7114        setMachineCodes(mi++, (byte) 0x39);
7115        emitRegIndirectRegOperands(dstBase, srcReg);
7116        if (lister != null) lister.RNR(miStart, "CMP", dstBase, srcReg);
7117      }
7118    
7119      /**
7120       * Generate a register-offset--register CMP. That is,
7121       * <PRE>
7122       * [dstReg<<dstScale + dstDisp] ==  srcReg
7123       * </PRE>
7124       *
7125       * @param dstIndex the destination index register
7126       * @param dstScale the destination shift amount
7127       * @param dstDisp the destination displacement
7128       * @param srcReg the source register
7129       */
7130      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
7131      public final void emitCMP_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
7132        int miStart = mi;
7133        // no group 1 to 4 prefix byte
7134        generateREXprefix(false, srcReg, dstIndex, null);
7135        // single byte opcode
7136        setMachineCodes(mi++, (byte) 0x39);
7137        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
7138        if (lister != null) lister.RFDR(miStart, "CMP", dstIndex, dstScale, dstDisp, srcReg);
7139      }
7140    
7141      /**
7142       * Generate a absolute--register CMP. That is,
7143       * <PRE>
7144       * [dstDisp] ==  srcReg
7145       * </PRE>
7146       *
7147       * @param dstDisp the destination address
7148       * @param srcReg the source register
7149       */
7150      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
7151      public final void emitCMP_Abs_Reg(Address dstDisp, GPR srcReg) {
7152        int miStart = mi;
7153        // no group 1 to 4 prefix byte
7154        generateREXprefix(false, srcReg, null, null);
7155        // single byte opcode
7156        setMachineCodes(mi++, (byte) 0x39);
7157        emitAbsRegOperands(dstDisp, srcReg);
7158        if (lister != null) lister.RAR(miStart, "CMP", dstDisp, srcReg);
7159      }
7160    
7161      /**
7162       * Generate a register-index--register CMP. That is,
7163       * <PRE>
7164       * [dstBase + dstIndex<<dstScale + dstDisp] ==  srcReg
7165       * </PRE>
7166       *
7167       * @param dstBase the base register
7168       * @param dstIndex the destination index register
7169       * @param dstScale the destination shift amount
7170       * @param dstDisp the destination displacement
7171       * @param srcReg the source register
7172       */
7173      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
7174      public final void emitCMP_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
7175        int miStart = mi;
7176        // no group 1 to 4 prefix byte
7177        generateREXprefix(false, srcReg, dstIndex, dstBase);
7178        // single byte opcode
7179        setMachineCodes(mi++, (byte) 0x39);
7180        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
7181        if (lister != null) lister.RXDR(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, srcReg);
7182      }
7183    
7184      /**
7185       * Generate a register-displacement--register CMP. That is,
7186       * <PRE>
7187       * [dstBase + dstDisp] ==  srcReg
7188       * </PRE>
7189       *
7190       * @param dstBase the base register
7191       * @param dstDisp the destination displacement
7192       * @param srcReg the source register
7193       */
7194      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
7195      public final void emitCMP_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
7196        int miStart = mi;
7197        // no group 1 to 4 prefix byte
7198        generateREXprefix(false, srcReg, null, dstBase);
7199        // single byte opcode
7200        setMachineCodes(mi++, (byte) 0x39);
7201        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
7202        if (lister != null) lister.RDR(miStart, "CMP", dstBase, dstDisp, srcReg);
7203      }
7204    
7205      /**
7206       * Generate a register--register CMP. That is,
7207       * <PRE>
7208       * dstReg ==  srcReg
7209       * </PRE>
7210       *
7211       * @param dstReg the destination register
7212       * @param srcReg the source register
7213       */
7214      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7215      public final void emitCMP_Reg_Reg(GPR dstReg, GPR srcReg) {
7216        int miStart = mi;
7217        // no group 1 to 4 prefix byte
7218        generateREXprefix(false, srcReg, null, dstReg);
7219        // single byte opcode
7220        setMachineCodes(mi++, (byte) 0x39);
7221        emitRegRegOperands(dstReg, srcReg);
7222        if (lister != null) lister.RR(miStart, "CMP", dstReg, srcReg);
7223      }
7224    
7225      /**
7226       * Generate a register--register-displacement CMP. That is,
7227       * <PRE>
7228       * dstReg ==  [srcReg + srcDisp]
7229       * </PRE>
7230       *
7231       * @param dstReg the destination register
7232       * @param srcBase the source register
7233       * @param srcDisp the source displacement
7234       */
7235      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7236      public final void emitCMP_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
7237        int miStart = mi;
7238        // no group 1 to 4 prefix byte
7239        generateREXprefix(false, dstReg, null, srcBase);
7240        // single byte opcode
7241        setMachineCodes(mi++, (byte) 0x3B);
7242        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
7243        if (lister != null) lister.RRD(miStart, "CMP", dstReg, srcBase, srcDisp);
7244      }
7245    
7246      /**
7247       * Generate a register--register-offset CMP. That is,
7248       * <PRE>
7249       * dstReg ==  [srcIndex<<srcScale + srcDisp]
7250       * </PRE>
7251       *
7252       * @param dstReg the destination register
7253       * @param srcIndex the source index register
7254       * @param srcScale the source shift amount
7255       * @param srcDisp the source displacement
7256       */
7257      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7258      public final void emitCMP_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
7259        int miStart = mi;
7260        // no group 1 to 4 prefix byte
7261        generateREXprefix(false, dstReg, srcIndex, null);
7262        // single byte opcode
7263        setMachineCodes(mi++, (byte) 0x3B);
7264        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
7265        if (lister != null) lister.RRFD(miStart, "CMP", dstReg, srcIndex, srcScale, srcDisp);
7266      }
7267    
7268      /**
7269       * Generate a register--register-offset CMP. That is,
7270       * <PRE>
7271       * dstReg ==  [srcDisp]
7272       * </PRE>
7273       *
7274       * @param dstReg the destination register
7275       * @param srcDisp the source displacement
7276       */
7277      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
7278      public final void emitCMP_Reg_Abs(GPR dstReg, Address srcDisp) {
7279        int miStart = mi;
7280        // no group 1 to 4 prefix byte
7281        generateREXprefix(false, dstReg, null, null);
7282        // single byte opcode
7283        setMachineCodes(mi++, (byte) 0x3B);
7284        emitAbsRegOperands(srcDisp, dstReg);
7285        if (lister != null) lister.RRA(miStart, "CMP", dstReg, srcDisp);
7286      }
7287    
7288      /**
7289       * Generate a register--register-offset CMP. That is,
7290       * <PRE>
7291       * dstReg ==  [srcBase + srcIndex<<srcScale + srcDisp]
7292       * </PRE>
7293       *
7294       * @param dstReg the destination register
7295       * @param srcBase the source base register
7296       * @param srcIndex the source index register
7297       * @param srcScale the source shift amount
7298       * @param srcDisp the source displacement
7299       */
7300      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
7301      public final void emitCMP_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
7302        int miStart = mi;
7303        // no group 1 to 4 prefix byte
7304        generateREXprefix(false, dstReg, srcIndex, srcBase);
7305        // single byte opcode
7306        setMachineCodes(mi++, (byte) 0x3B);
7307        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
7308        if (lister != null) lister.RRXD(miStart, "CMP", dstReg, srcBase, srcIndex, srcScale, srcDisp);
7309      }
7310    
7311      /**
7312       * Generate a register--register(indirect) CMP. That is,
7313       * <PRE>
7314       * dstReg ==  [srcBase]
7315       * </PRE>
7316       *
7317       * @param dstReg the destination register
7318       * @param srcBase the source base register
7319       */
7320      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7321      public final void emitCMP_Reg_RegInd(GPR dstReg, GPR srcBase) {
7322        int miStart = mi;
7323        // no group 1 to 4 prefix byte
7324        generateREXprefix(false, dstReg, null, srcBase);
7325        // single byte opcode
7326        setMachineCodes(mi++, (byte) 0x3B);
7327        emitRegIndirectRegOperands(srcBase, dstReg);
7328        if (lister != null) lister.RRN(miStart, "CMP", dstReg, srcBase);
7329      }
7330    
7331      /**
7332       * Generate a register(indirect)--register CMP. That is,
7333       * <PRE>
7334       * [dstBase] ==  (word)  srcReg
7335       * </PRE>
7336       *
7337       * @param dstBase the destination base
7338       * @param srcReg the source register
7339       */
7340      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7341      public final void emitCMP_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
7342        int miStart = mi;
7343        setMachineCodes(mi++, (byte) 0x66);
7344        generateREXprefix(false, srcReg, null, dstBase);
7345        // single byte opcode
7346        setMachineCodes(mi++, (byte) 0x39);
7347        emitRegIndirectRegOperands(dstBase, srcReg);
7348        if (lister != null) lister.RNR(miStart, "CMP", dstBase, srcReg);
7349      }
7350    
7351      /**
7352       * Generate a register-offset--register CMP. That is,
7353       * <PRE>
7354       * [dstReg<<dstScale + dstDisp] ==  (word)  srcReg
7355       * </PRE>
7356       *
7357       * @param dstIndex the destination index register
7358       * @param dstScale the destination shift amount
7359       * @param dstDisp the destination displacement
7360       * @param srcReg the source register
7361       */
7362      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
7363      public final void emitCMP_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
7364        int miStart = mi;
7365        setMachineCodes(mi++, (byte) 0x66);
7366        generateREXprefix(false, srcReg, dstIndex, null);
7367        // single byte opcode
7368        setMachineCodes(mi++, (byte) 0x39);
7369        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
7370        if (lister != null) lister.RFDR(miStart, "CMP", dstIndex, dstScale, dstDisp, srcReg);
7371      }
7372    
7373      /**
7374       * Generate a absolute--register CMP. That is,
7375       * <PRE>
7376       * [dstDisp] ==  (word)  srcReg
7377       * </PRE>
7378       *
7379       * @param dstDisp the destination address
7380       * @param srcReg the source register
7381       */
7382      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
7383      public final void emitCMP_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
7384        int miStart = mi;
7385        setMachineCodes(mi++, (byte) 0x66);
7386        generateREXprefix(false, srcReg, null, null);
7387        // single byte opcode
7388        setMachineCodes(mi++, (byte) 0x39);
7389        emitAbsRegOperands(dstDisp, srcReg);
7390        if (lister != null) lister.RAR(miStart, "CMP", dstDisp, srcReg);
7391      }
7392    
7393      /**
7394       * Generate a register-index--register CMP. That is,
7395       * <PRE>
7396       * [dstBase + dstIndex<<dstScale + dstDisp] ==  (word)  srcReg
7397       * </PRE>
7398       *
7399       * @param dstBase the base register
7400       * @param dstIndex the destination index register
7401       * @param dstScale the destination shift amount
7402       * @param dstDisp the destination displacement
7403       * @param srcReg the source register
7404       */
7405      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
7406      public final void emitCMP_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
7407        int miStart = mi;
7408        setMachineCodes(mi++, (byte) 0x66);
7409        generateREXprefix(false, srcReg, dstIndex, dstBase);
7410        // single byte opcode
7411        setMachineCodes(mi++, (byte) 0x39);
7412        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
7413        if (lister != null) lister.RXDR(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, srcReg);
7414      }
7415    
7416      /**
7417       * Generate a register-displacement--register CMP. That is,
7418       * <PRE>
7419       * [dstBase + dstDisp] ==  (word)  srcReg
7420       * </PRE>
7421       *
7422       * @param dstBase the base register
7423       * @param dstDisp the destination displacement
7424       * @param srcReg the source register
7425       */
7426      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
7427      public final void emitCMP_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
7428        int miStart = mi;
7429        setMachineCodes(mi++, (byte) 0x66);
7430        generateREXprefix(false, srcReg, null, dstBase);
7431        // single byte opcode
7432        setMachineCodes(mi++, (byte) 0x39);
7433        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
7434        if (lister != null) lister.RDR(miStart, "CMP", dstBase, dstDisp, srcReg);
7435      }
7436    
7437      /**
7438       * Generate a register--register CMP. That is,
7439       * <PRE>
7440       * dstReg ==  (word)  srcReg
7441       * </PRE>
7442       *
7443       * @param dstReg the destination register
7444       * @param srcReg the source register
7445       */
7446      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7447      public final void emitCMP_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
7448        int miStart = mi;
7449        setMachineCodes(mi++, (byte) 0x66);
7450        generateREXprefix(false, srcReg, null, dstReg);
7451        // single byte opcode
7452        setMachineCodes(mi++, (byte) 0x39);
7453        emitRegRegOperands(dstReg, srcReg);
7454        if (lister != null) lister.RR(miStart, "CMP", dstReg, srcReg);
7455      }
7456    
7457      /**
7458       * Generate a register--register-displacement CMP. That is,
7459       * <PRE>
7460       * dstReg ==  (word)  [srcReg + srcDisp]
7461       * </PRE>
7462       *
7463       * @param dstReg the destination register
7464       * @param srcBase the source register
7465       * @param srcDisp the source displacement
7466       */
7467      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7468      public final void emitCMP_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
7469        int miStart = mi;
7470        setMachineCodes(mi++, (byte) 0x66);
7471        generateREXprefix(false, dstReg, null, srcBase);
7472        // single byte opcode
7473        setMachineCodes(mi++, (byte) 0x3B);
7474        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
7475        if (lister != null) lister.RRD(miStart, "CMP", dstReg, srcBase, srcDisp);
7476      }
7477    
7478      /**
7479       * Generate a register--register-offset CMP. That is,
7480       * <PRE>
7481       * dstReg ==  (word)  [srcIndex<<srcScale + srcDisp]
7482       * </PRE>
7483       *
7484       * @param dstReg the destination register
7485       * @param srcIndex the source index register
7486       * @param srcScale the source shift amount
7487       * @param srcDisp the source displacement
7488       */
7489      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7490      public final void emitCMP_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
7491        int miStart = mi;
7492        setMachineCodes(mi++, (byte) 0x66);
7493        generateREXprefix(false, dstReg, srcIndex, null);
7494        // single byte opcode
7495        setMachineCodes(mi++, (byte) 0x3B);
7496        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
7497        if (lister != null) lister.RRFD(miStart, "CMP", dstReg, srcIndex, srcScale, srcDisp);
7498      }
7499    
7500      /**
7501       * Generate a register--register-offset CMP. That is,
7502       * <PRE>
7503       * dstReg ==  (word)  [srcDisp]
7504       * </PRE>
7505       *
7506       * @param dstReg the destination register
7507       * @param srcDisp the source displacement
7508       */
7509      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
7510      public final void emitCMP_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
7511        int miStart = mi;
7512        setMachineCodes(mi++, (byte) 0x66);
7513        generateREXprefix(false, dstReg, null, null);
7514        // single byte opcode
7515        setMachineCodes(mi++, (byte) 0x3B);
7516        emitAbsRegOperands(srcDisp, dstReg);
7517        if (lister != null) lister.RRA(miStart, "CMP", dstReg, srcDisp);
7518      }
7519    
7520      /**
7521       * Generate a register--register-offset CMP. That is,
7522       * <PRE>
7523       * dstReg ==  (word)  [srcBase + srcIndex<<srcScale + srcDisp]
7524       * </PRE>
7525       *
7526       * @param dstReg the destination register
7527       * @param srcBase the source base register
7528       * @param srcIndex the source index register
7529       * @param srcScale the source shift amount
7530       * @param srcDisp the source displacement
7531       */
7532      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
7533      public final void emitCMP_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
7534        int miStart = mi;
7535        setMachineCodes(mi++, (byte) 0x66);
7536        generateREXprefix(false, dstReg, srcIndex, srcBase);
7537        // single byte opcode
7538        setMachineCodes(mi++, (byte) 0x3B);
7539        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
7540        if (lister != null) lister.RRXD(miStart, "CMP", dstReg, srcBase, srcIndex, srcScale, srcDisp);
7541      }
7542    
7543      /**
7544       * Generate a register--register(indirect) CMP. That is,
7545       * <PRE>
7546       * dstReg ==  (word)  [srcBase]
7547       * </PRE>
7548       *
7549       * @param dstReg the destination register
7550       * @param srcBase the source base register
7551       */
7552      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7553      public final void emitCMP_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
7554        int miStart = mi;
7555        setMachineCodes(mi++, (byte) 0x66);
7556        generateREXprefix(false, dstReg, null, srcBase);
7557        // single byte opcode
7558        setMachineCodes(mi++, (byte) 0x3B);
7559        emitRegIndirectRegOperands(srcBase, dstReg);
7560        if (lister != null) lister.RRN(miStart, "CMP", dstReg, srcBase);
7561      }
7562    
7563      /**
7564       * Generate a register(indirect)--register CMP. That is,
7565       * <PRE>
7566       * [dstBase] ==  (quad)  srcReg
7567       * </PRE>
7568       *
7569       * @param dstBase the destination base
7570       * @param srcReg the source register
7571       */
7572      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7573      public final void emitCMP_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
7574        int miStart = mi;
7575        // no group 1 to 4 prefix byte
7576        generateREXprefix(true, srcReg, null, dstBase);
7577        // single byte opcode
7578        setMachineCodes(mi++, (byte) 0x39);
7579        emitRegIndirectRegOperands(dstBase, srcReg);
7580        if (lister != null) lister.RNR(miStart, "CMP", dstBase, srcReg);
7581      }
7582    
7583      /**
7584       * Generate a register-offset--register CMP. That is,
7585       * <PRE>
7586       * [dstReg<<dstScale + dstDisp] ==  (quad)  srcReg
7587       * </PRE>
7588       *
7589       * @param dstIndex the destination index register
7590       * @param dstScale the destination shift amount
7591       * @param dstDisp the destination displacement
7592       * @param srcReg the source register
7593       */
7594      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
7595      public final void emitCMP_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
7596        int miStart = mi;
7597        // no group 1 to 4 prefix byte
7598        generateREXprefix(true, srcReg, dstIndex, null);
7599        // single byte opcode
7600        setMachineCodes(mi++, (byte) 0x39);
7601        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
7602        if (lister != null) lister.RFDR(miStart, "CMP", dstIndex, dstScale, dstDisp, srcReg);
7603      }
7604    
7605      /**
7606       * Generate a absolute--register CMP. That is,
7607       * <PRE>
7608       * [dstDisp] ==  (quad)  srcReg
7609       * </PRE>
7610       *
7611       * @param dstDisp the destination address
7612       * @param srcReg the source register
7613       */
7614      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
7615      public final void emitCMP_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
7616        int miStart = mi;
7617        // no group 1 to 4 prefix byte
7618        generateREXprefix(true, srcReg, null, null);
7619        // single byte opcode
7620        setMachineCodes(mi++, (byte) 0x39);
7621        emitAbsRegOperands(dstDisp, srcReg);
7622        if (lister != null) lister.RAR(miStart, "CMP", dstDisp, srcReg);
7623      }
7624    
7625      /**
7626       * Generate a register-index--register CMP. That is,
7627       * <PRE>
7628       * [dstBase + dstIndex<<dstScale + dstDisp] ==  (quad)  srcReg
7629       * </PRE>
7630       *
7631       * @param dstBase the base register
7632       * @param dstIndex the destination index register
7633       * @param dstScale the destination shift amount
7634       * @param dstDisp the destination displacement
7635       * @param srcReg the source register
7636       */
7637      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
7638      public final void emitCMP_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
7639        int miStart = mi;
7640        // no group 1 to 4 prefix byte
7641        generateREXprefix(true, srcReg, dstIndex, dstBase);
7642        // single byte opcode
7643        setMachineCodes(mi++, (byte) 0x39);
7644        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
7645        if (lister != null) lister.RXDR(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, srcReg);
7646      }
7647    
7648      /**
7649       * Generate a register-displacement--register CMP. That is,
7650       * <PRE>
7651       * [dstBase + dstDisp] ==  (quad)  srcReg
7652       * </PRE>
7653       *
7654       * @param dstBase the base register
7655       * @param dstDisp the destination displacement
7656       * @param srcReg the source register
7657       */
7658      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
7659      public final void emitCMP_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
7660        int miStart = mi;
7661        // no group 1 to 4 prefix byte
7662        generateREXprefix(true, srcReg, null, dstBase);
7663        // single byte opcode
7664        setMachineCodes(mi++, (byte) 0x39);
7665        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
7666        if (lister != null) lister.RDR(miStart, "CMP", dstBase, dstDisp, srcReg);
7667      }
7668    
7669      /**
7670       * Generate a register--register CMP. That is,
7671       * <PRE>
7672       * dstReg ==  (quad)  srcReg
7673       * </PRE>
7674       *
7675       * @param dstReg the destination register
7676       * @param srcReg the source register
7677       */
7678      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7679      public final void emitCMP_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
7680        int miStart = mi;
7681        // no group 1 to 4 prefix byte
7682        generateREXprefix(true, srcReg, null, dstReg);
7683        // single byte opcode
7684        setMachineCodes(mi++, (byte) 0x39);
7685        emitRegRegOperands(dstReg, srcReg);
7686        if (lister != null) lister.RR(miStart, "CMP", dstReg, srcReg);
7687      }
7688    
7689      /**
7690       * Generate a register--register-displacement CMP. That is,
7691       * <PRE>
7692       * dstReg ==  (quad)  [srcReg + srcDisp]
7693       * </PRE>
7694       *
7695       * @param dstReg the destination register
7696       * @param srcBase the source register
7697       * @param srcDisp the source displacement
7698       */
7699      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7700      public final void emitCMP_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
7701        int miStart = mi;
7702        // no group 1 to 4 prefix byte
7703        generateREXprefix(true, dstReg, null, srcBase);
7704        // single byte opcode
7705        setMachineCodes(mi++, (byte) 0x3B);
7706        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
7707        if (lister != null) lister.RRD(miStart, "CMP", dstReg, srcBase, srcDisp);
7708      }
7709    
7710      /**
7711       * Generate a register--register-offset CMP. That is,
7712       * <PRE>
7713       * dstReg ==  (quad)  [srcIndex<<srcScale + srcDisp]
7714       * </PRE>
7715       *
7716       * @param dstReg the destination register
7717       * @param srcIndex the source index register
7718       * @param srcScale the source shift amount
7719       * @param srcDisp the source displacement
7720       */
7721      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7722      public final void emitCMP_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
7723        int miStart = mi;
7724        // no group 1 to 4 prefix byte
7725        generateREXprefix(true, dstReg, srcIndex, null);
7726        // single byte opcode
7727        setMachineCodes(mi++, (byte) 0x3B);
7728        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
7729        if (lister != null) lister.RRFD(miStart, "CMP", dstReg, srcIndex, srcScale, srcDisp);
7730      }
7731    
7732      /**
7733       * Generate a register--register-offset CMP. That is,
7734       * <PRE>
7735       * dstReg ==  (quad)  [srcDisp]
7736       * </PRE>
7737       *
7738       * @param dstReg the destination register
7739       * @param srcDisp the source displacement
7740       */
7741      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
7742      public final void emitCMP_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
7743        int miStart = mi;
7744        // no group 1 to 4 prefix byte
7745        generateREXprefix(true, dstReg, null, null);
7746        // single byte opcode
7747        setMachineCodes(mi++, (byte) 0x3B);
7748        emitAbsRegOperands(srcDisp, dstReg);
7749        if (lister != null) lister.RRA(miStart, "CMP", dstReg, srcDisp);
7750      }
7751    
7752      /**
7753       * Generate a register--register-offset CMP. That is,
7754       * <PRE>
7755       * dstReg ==  (quad)  [srcBase + srcIndex<<srcScale + srcDisp]
7756       * </PRE>
7757       *
7758       * @param dstReg the destination register
7759       * @param srcBase the source base register
7760       * @param srcIndex the source index register
7761       * @param srcScale the source shift amount
7762       * @param srcDisp the source displacement
7763       */
7764      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
7765      public final void emitCMP_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
7766        int miStart = mi;
7767        // no group 1 to 4 prefix byte
7768        generateREXprefix(true, dstReg, srcIndex, srcBase);
7769        // single byte opcode
7770        setMachineCodes(mi++, (byte) 0x3B);
7771        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
7772        if (lister != null) lister.RRXD(miStart, "CMP", dstReg, srcBase, srcIndex, srcScale, srcDisp);
7773      }
7774    
7775      /**
7776       * Generate a register--register(indirect) CMP. That is,
7777       * <PRE>
7778       * dstReg ==  (quad)  [srcBase]
7779       * </PRE>
7780       *
7781       * @param dstReg the destination register
7782       * @param srcBase the source base register
7783       */
7784      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7785      public final void emitCMP_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
7786        int miStart = mi;
7787        // no group 1 to 4 prefix byte
7788        generateREXprefix(true, dstReg, null, srcBase);
7789        // single byte opcode
7790        setMachineCodes(mi++, (byte) 0x3B);
7791        emitRegIndirectRegOperands(srcBase, dstReg);
7792        if (lister != null) lister.RRN(miStart, "CMP", dstReg, srcBase);
7793      }
7794    
7795      /**
7796       * Generate a register(indirect)--register CMP. That is,
7797       * <PRE>
7798       * [dstBase] ==  (byte)  srcReg
7799       * </PRE>
7800       *
7801       * @param dstBase the destination base
7802       * @param srcReg the source register
7803       */
7804      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7805      public final void emitCMP_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
7806        int miStart = mi;
7807        // no group 1 to 4 prefix byte
7808        generateREXprefix(false, srcReg, null, dstBase);
7809        // single byte opcode
7810        setMachineCodes(mi++, (byte) 0x38);
7811        emitRegIndirectRegOperands(dstBase, srcReg);
7812        if (lister != null) lister.RNR(miStart, "CMP", dstBase, srcReg);
7813      }
7814    
7815      /**
7816       * Generate a register-offset--register CMP. That is,
7817       * <PRE>
7818       * [dstReg<<dstScale + dstDisp] ==  (byte)  srcReg
7819       * </PRE>
7820       *
7821       * @param dstIndex the destination index register
7822       * @param dstScale the destination shift amount
7823       * @param dstDisp the destination displacement
7824       * @param srcReg the source register
7825       */
7826      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
7827      public final void emitCMP_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
7828        int miStart = mi;
7829        // no group 1 to 4 prefix byte
7830        generateREXprefix(false, srcReg, dstIndex, null);
7831        // single byte opcode
7832        setMachineCodes(mi++, (byte) 0x38);
7833        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
7834        if (lister != null) lister.RFDR(miStart, "CMP", dstIndex, dstScale, dstDisp, srcReg);
7835      }
7836    
7837      /**
7838       * Generate a absolute--register CMP. That is,
7839       * <PRE>
7840       * [dstDisp] ==  (byte)  srcReg
7841       * </PRE>
7842       *
7843       * @param dstDisp the destination address
7844       * @param srcReg the source register
7845       */
7846      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
7847      public final void emitCMP_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
7848        int miStart = mi;
7849        // no group 1 to 4 prefix byte
7850        generateREXprefix(false, srcReg, null, null);
7851        // single byte opcode
7852        setMachineCodes(mi++, (byte) 0x38);
7853        emitAbsRegOperands(dstDisp, srcReg);
7854        if (lister != null) lister.RAR(miStart, "CMP", dstDisp, srcReg);
7855      }
7856    
7857      /**
7858       * Generate a register-index--register CMP. That is,
7859       * <PRE>
7860       * [dstBase + dstIndex<<dstScale + dstDisp] ==  (byte)  srcReg
7861       * </PRE>
7862       *
7863       * @param dstBase the base register
7864       * @param dstIndex the destination index register
7865       * @param dstScale the destination shift amount
7866       * @param dstDisp the destination displacement
7867       * @param srcReg the source register
7868       */
7869      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
7870      public final void emitCMP_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
7871        int miStart = mi;
7872        // no group 1 to 4 prefix byte
7873        generateREXprefix(false, srcReg, dstIndex, dstBase);
7874        // single byte opcode
7875        setMachineCodes(mi++, (byte) 0x38);
7876        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
7877        if (lister != null) lister.RXDR(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, srcReg);
7878      }
7879    
7880      /**
7881       * Generate a register-displacement--register CMP. That is,
7882       * <PRE>
7883       * [dstBase + dstDisp] ==  (byte)  srcReg
7884       * </PRE>
7885       *
7886       * @param dstBase the base register
7887       * @param dstDisp the destination displacement
7888       * @param srcReg the source register
7889       */
7890      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
7891      public final void emitCMP_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
7892        int miStart = mi;
7893        // no group 1 to 4 prefix byte
7894        generateREXprefix(false, srcReg, null, dstBase);
7895        // single byte opcode
7896        setMachineCodes(mi++, (byte) 0x38);
7897        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
7898        if (lister != null) lister.RDR(miStart, "CMP", dstBase, dstDisp, srcReg);
7899      }
7900    
7901      /**
7902       * Generate a register--register CMP. That is,
7903       * <PRE>
7904       * dstReg ==  (byte)  srcReg
7905       * </PRE>
7906       *
7907       * @param dstReg the destination register
7908       * @param srcReg the source register
7909       */
7910      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7911      public final void emitCMP_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
7912        int miStart = mi;
7913        // no group 1 to 4 prefix byte
7914        generateREXprefix(false, srcReg, null, dstReg);
7915        // single byte opcode
7916        setMachineCodes(mi++, (byte) 0x38);
7917        emitRegRegOperands(dstReg, srcReg);
7918        if (lister != null) lister.RR(miStart, "CMP", dstReg, srcReg);
7919      }
7920    
7921      /**
7922       * Generate a register--register-displacement CMP. That is,
7923       * <PRE>
7924       * dstReg ==  (byte)  [srcReg + srcDisp]
7925       * </PRE>
7926       *
7927       * @param dstReg the destination register
7928       * @param srcBase the source register
7929       * @param srcDisp the source displacement
7930       */
7931      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7932      public final void emitCMP_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
7933        int miStart = mi;
7934        // no group 1 to 4 prefix byte
7935        generateREXprefix(false, dstReg, null, srcBase);
7936        // single byte opcode
7937        setMachineCodes(mi++, (byte) 0x3A);
7938        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
7939        if (lister != null) lister.RRD(miStart, "CMP", dstReg, srcBase, srcDisp);
7940      }
7941    
7942      /**
7943       * Generate a register--register-offset CMP. That is,
7944       * <PRE>
7945       * dstReg ==  (byte)  [srcIndex<<srcScale + srcDisp]
7946       * </PRE>
7947       *
7948       * @param dstReg the destination register
7949       * @param srcIndex the source index register
7950       * @param srcScale the source shift amount
7951       * @param srcDisp the source displacement
7952       */
7953      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
7954      public final void emitCMP_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
7955        int miStart = mi;
7956        // no group 1 to 4 prefix byte
7957        generateREXprefix(false, dstReg, srcIndex, null);
7958        // single byte opcode
7959        setMachineCodes(mi++, (byte) 0x3A);
7960        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
7961        if (lister != null) lister.RRFD(miStart, "CMP", dstReg, srcIndex, srcScale, srcDisp);
7962      }
7963    
7964      /**
7965       * Generate a register--register-offset CMP. That is,
7966       * <PRE>
7967       * dstReg ==  (byte)  [srcDisp]
7968       * </PRE>
7969       *
7970       * @param dstReg the destination register
7971       * @param srcDisp the source displacement
7972       */
7973      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
7974      public final void emitCMP_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
7975        int miStart = mi;
7976        // no group 1 to 4 prefix byte
7977        generateREXprefix(false, dstReg, null, null);
7978        // single byte opcode
7979        setMachineCodes(mi++, (byte) 0x3A);
7980        emitAbsRegOperands(srcDisp, dstReg);
7981        if (lister != null) lister.RRA(miStart, "CMP", dstReg, srcDisp);
7982      }
7983    
7984      /**
7985       * Generate a register--register-offset CMP. That is,
7986       * <PRE>
7987       * dstReg ==  (byte)  [srcBase + srcIndex<<srcScale + srcDisp]
7988       * </PRE>
7989       *
7990       * @param dstReg the destination register
7991       * @param srcBase the source base register
7992       * @param srcIndex the source index register
7993       * @param srcScale the source shift amount
7994       * @param srcDisp the source displacement
7995       */
7996      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
7997      public final void emitCMP_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
7998        int miStart = mi;
7999        // no group 1 to 4 prefix byte
8000        generateREXprefix(false, dstReg, srcIndex, srcBase);
8001        // single byte opcode
8002        setMachineCodes(mi++, (byte) 0x3A);
8003        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
8004        if (lister != null) lister.RRXD(miStart, "CMP", dstReg, srcBase, srcIndex, srcScale, srcDisp);
8005      }
8006    
8007      /**
8008       * Generate a register--register(indirect) CMP. That is,
8009       * <PRE>
8010       * dstReg ==  (byte)  [srcBase]
8011       * </PRE>
8012       *
8013       * @param dstReg the destination register
8014       * @param srcBase the source base register
8015       */
8016      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8017      public final void emitCMP_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
8018        int miStart = mi;
8019        // no group 1 to 4 prefix byte
8020        generateREXprefix(false, dstReg, null, srcBase);
8021        // single byte opcode
8022        setMachineCodes(mi++, (byte) 0x3A);
8023        emitRegIndirectRegOperands(srcBase, dstReg);
8024        if (lister != null) lister.RRN(miStart, "CMP", dstReg, srcBase);
8025      }
8026    
8027      /**
8028       * Generate a register--immediate CMP. That is,
8029       * <PRE>
8030       * dstReg ==  imm
8031       * </PRE>
8032       *
8033       * @param dstReg the destination register
8034       * @param imm immediate
8035       */
8036      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8037      public final void emitCMP_Reg_Imm(GPR dstReg, int imm) {
8038        int miStart = mi;
8039        // no group 1 to 4 prefix byte
8040        generateREXprefix(false, null, null, dstReg);
8041        // single byte opcode
8042        if (fits(imm,8)) {
8043          setMachineCodes(mi++, (byte) 0x83);
8044          // "register 0x7" is really part of the opcode
8045          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
8046          emitImm8((byte)imm);
8047        } else if (dstReg == EAX) {
8048          setMachineCodes(mi++, (byte) 0x3D);
8049          emitImm32(imm);
8050        } else {
8051          setMachineCodes(mi++, (byte) 0x81);
8052          // "register 0x7" is really part of the opcode
8053          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
8054          emitImm32(imm);
8055        }
8056        if (lister != null) lister.RI(miStart, "CMP", dstReg, imm);
8057      }
8058    
8059      /**
8060       * Generate a register-displacement--immediate CMP. That is,
8061       * <PRE>
8062       * [dstBase + dstDisp] ==  imm
8063       * </PRE>
8064       *
8065       * @param dstBase the destination register
8066       * @param dstDisp the destination displacement
8067       * @param imm immediate
8068       */
8069      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8070      public final void emitCMP_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
8071        int miStart = mi;
8072        // no group 1 to 4 prefix byte
8073        generateREXprefix(false, null, null, dstBase);
8074        // single byte opcode
8075        if (fits(imm,8)) {
8076          setMachineCodes(mi++, (byte) 0x83);
8077          // "register 0x7" is really part of the opcode
8078          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
8079          emitImm8((byte)imm);
8080        } else {
8081          setMachineCodes(mi++, (byte) 0x81);
8082          // "register 0x7" is really part of the opcode
8083          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
8084          emitImm32(imm);
8085        }
8086        if (lister != null) lister.RDI(miStart, "CMP", dstBase, dstDisp, imm);
8087      }
8088    
8089      /**
8090       * Generate a register-offset--immediate CMP. That is,
8091       * <PRE>
8092       * [dstIndex<<dstScale + dstDisp] ==  imm
8093       * </PRE>
8094       *
8095       * @param dstIndex the destination index register
8096       * @param dstScale the destination shift amount
8097       * @param dstDisp the destination displacement
8098       * @param imm immediate
8099       */
8100      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8101      public final void emitCMP_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
8102        int miStart = mi;
8103        // no group 1 to 4 prefix byte
8104        generateREXprefix(false, null, dstIndex, null);
8105        // single byte opcode
8106        if (fits(imm,8)) {
8107          setMachineCodes(mi++, (byte) 0x83);
8108          // "register 0x7" is really part of the opcode
8109          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8110          emitImm8((byte)imm);
8111        } else {
8112          setMachineCodes(mi++, (byte) 0x81);
8113          // "register 0x7" is really part of the opcode
8114          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8115          emitImm32(imm);
8116        }
8117        if (lister != null) lister.RFDI(miStart, "CMP", dstIndex, dstScale, dstDisp, imm);
8118      }
8119    
8120      /**
8121       * Generate a absolute--immediate CMP. That is,
8122       * <PRE>
8123       * [dstDisp] ==  imm
8124       * </PRE>
8125       *
8126       * @param dstDisp the destination displacement
8127       * @param imm immediate
8128       */
8129      public final void emitCMP_Abs_Imm(Address dstDisp, int imm) {
8130        int miStart = mi;
8131        // no group 1 to 4 prefix byte
8132        generateREXprefix(false, null, null, null);
8133        // single byte opcode
8134        if (fits(imm,8)) {
8135          setMachineCodes(mi++, (byte) 0x83);
8136          // "register 0x7" is really part of the opcode
8137          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
8138          emitImm8((byte)imm);
8139        } else {
8140          setMachineCodes(mi++, (byte) 0x81);
8141          // "register 0x7" is really part of the opcode
8142          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
8143          emitImm32(imm);
8144        }
8145        if (lister != null) lister.RAI(miStart, "CMP", dstDisp, imm);
8146      }
8147    
8148      /**
8149       * Generate a register-index--immediate CMP. That is,
8150       * <PRE>
8151       * [dstBase + dstIndex<<dstScale + dstDisp] ==  imm
8152       * </PRE>
8153       *
8154       * @param dstBase the destination base register
8155       * @param dstIndex the destination index register
8156       * @param dstScale the destination shift amount
8157       * @param dstDisp the destination displacement
8158       * @param imm immediate
8159       */
8160      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8161      public final void emitCMP_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
8162        int miStart = mi;
8163        // no group 1 to 4 prefix byte
8164        generateREXprefix(false, null, dstIndex, dstBase);
8165        // single byte opcode
8166        if (fits(imm,8)) {
8167          setMachineCodes(mi++, (byte) 0x83);
8168          // "register 0x7" is really part of the opcode
8169          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8170          emitImm8((byte)imm);
8171        } else {
8172          setMachineCodes(mi++, (byte) 0x81);
8173          // "register 0x7" is really part of the opcode
8174          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8175          emitImm32(imm);
8176        }
8177        if (lister != null) lister.RXDI(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, imm);
8178      }
8179    
8180      /**
8181       * Generate a register(indirect)--immediate CMP. That is,
8182       * <PRE>
8183       * [dstBase] ==  imm
8184       * </PRE>
8185       *
8186       * @param dstBase the destination base register
8187       * @param imm immediate
8188       */
8189      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8190      public final void emitCMP_RegInd_Imm(GPR dstBase, int imm) {
8191        int miStart = mi;
8192        // no group 1 to 4 prefix byte
8193        generateREXprefix(false, null, null, dstBase);
8194        // single byte opcode
8195        if (fits(imm,8)) {
8196          setMachineCodes(mi++, (byte) 0x83);
8197          // "register 0x7" is really part of the opcode
8198          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
8199          emitImm8((byte)imm);
8200        } else {
8201          setMachineCodes(mi++, (byte) 0x81);
8202          // "register 0x7" is really part of the opcode
8203          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
8204          emitImm32(imm);
8205        }
8206        if (lister != null) lister.RNI(miStart, "CMP", dstBase, imm);
8207      }
8208    
8209      /**
8210       * Generate a register--immediate CMP. That is,
8211       * <PRE>
8212       * dstReg ==  (word)  imm
8213       * </PRE>
8214       *
8215       * @param dstReg the destination register
8216       * @param imm immediate
8217       */
8218      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8219      public final void emitCMP_Reg_Imm_Word(GPR dstReg, int imm) {
8220        int miStart = mi;
8221        setMachineCodes(mi++, (byte) 0x66);
8222        generateREXprefix(false, null, null, dstReg);
8223        // single byte opcode
8224        if (fits(imm,8)) {
8225          setMachineCodes(mi++, (byte) 0x83);
8226          // "register 0x7" is really part of the opcode
8227          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
8228          emitImm8((byte)imm);
8229        } else if (dstReg == EAX) {
8230          setMachineCodes(mi++, (byte) 0x3D);
8231          emitImm16(imm);
8232        } else {
8233          setMachineCodes(mi++, (byte) 0x81);
8234          // "register 0x7" is really part of the opcode
8235          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
8236          emitImm16(imm);
8237        }
8238        if (lister != null) lister.RI(miStart, "CMP", dstReg, imm);
8239      }
8240    
8241      /**
8242       * Generate a register-displacement--immediate CMP. That is,
8243       * <PRE>
8244       * [dstBase + dstDisp] ==  (word)  imm
8245       * </PRE>
8246       *
8247       * @param dstBase the destination register
8248       * @param dstDisp the destination displacement
8249       * @param imm immediate
8250       */
8251      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8252      public final void emitCMP_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
8253        int miStart = mi;
8254        setMachineCodes(mi++, (byte) 0x66);
8255        generateREXprefix(false, null, null, dstBase);
8256        // single byte opcode
8257        if (fits(imm,8)) {
8258          setMachineCodes(mi++, (byte) 0x83);
8259          // "register 0x7" is really part of the opcode
8260          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
8261          emitImm8((byte)imm);
8262        } else {
8263          setMachineCodes(mi++, (byte) 0x81);
8264          // "register 0x7" is really part of the opcode
8265          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
8266          emitImm16(imm);
8267        }
8268        if (lister != null) lister.RDI(miStart, "CMP", dstBase, dstDisp, imm);
8269      }
8270    
8271      /**
8272       * Generate a register-offset--immediate CMP. That is,
8273       * <PRE>
8274       * [dstIndex<<dstScale + dstDisp] ==  (word)  imm
8275       * </PRE>
8276       *
8277       * @param dstIndex the destination index register
8278       * @param dstScale the destination shift amount
8279       * @param dstDisp the destination displacement
8280       * @param imm immediate
8281       */
8282      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8283      public final void emitCMP_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
8284        int miStart = mi;
8285        setMachineCodes(mi++, (byte) 0x66);
8286        generateREXprefix(false, null, dstIndex, null);
8287        // single byte opcode
8288        if (fits(imm,8)) {
8289          setMachineCodes(mi++, (byte) 0x83);
8290          // "register 0x7" is really part of the opcode
8291          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8292          emitImm8((byte)imm);
8293        } else {
8294          setMachineCodes(mi++, (byte) 0x81);
8295          // "register 0x7" is really part of the opcode
8296          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8297          emitImm16(imm);
8298        }
8299        if (lister != null) lister.RFDI(miStart, "CMP", dstIndex, dstScale, dstDisp, imm);
8300      }
8301    
8302      /**
8303       * Generate a absolute--immediate CMP. That is,
8304       * <PRE>
8305       * [dstDisp] ==  (word)  imm
8306       * </PRE>
8307       *
8308       * @param dstDisp the destination displacement
8309       * @param imm immediate
8310       */
8311      public final void emitCMP_Abs_Imm_Word(Address dstDisp, int imm) {
8312        int miStart = mi;
8313        setMachineCodes(mi++, (byte) 0x66);
8314        generateREXprefix(false, null, null, null);
8315        // single byte opcode
8316        if (fits(imm,8)) {
8317          setMachineCodes(mi++, (byte) 0x83);
8318          // "register 0x7" is really part of the opcode
8319          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
8320          emitImm8((byte)imm);
8321        } else {
8322          setMachineCodes(mi++, (byte) 0x81);
8323          // "register 0x7" is really part of the opcode
8324          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
8325          emitImm16(imm);
8326        }
8327        if (lister != null) lister.RAI(miStart, "CMP", dstDisp, imm);
8328      }
8329    
8330      /**
8331       * Generate a register-index--immediate CMP. That is,
8332       * <PRE>
8333       * [dstBase + dstIndex<<dstScale + dstDisp] ==  (word)  imm
8334       * </PRE>
8335       *
8336       * @param dstBase the destination base register
8337       * @param dstIndex the destination index register
8338       * @param dstScale the destination shift amount
8339       * @param dstDisp the destination displacement
8340       * @param imm immediate
8341       */
8342      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8343      public final void emitCMP_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
8344        int miStart = mi;
8345        setMachineCodes(mi++, (byte) 0x66);
8346        generateREXprefix(false, null, dstIndex, dstBase);
8347        // single byte opcode
8348        if (fits(imm,8)) {
8349          setMachineCodes(mi++, (byte) 0x83);
8350          // "register 0x7" is really part of the opcode
8351          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8352          emitImm8((byte)imm);
8353        } else {
8354          setMachineCodes(mi++, (byte) 0x81);
8355          // "register 0x7" is really part of the opcode
8356          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8357          emitImm16(imm);
8358        }
8359        if (lister != null) lister.RXDI(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, imm);
8360      }
8361    
8362      /**
8363       * Generate a register(indirect)--immediate CMP. That is,
8364       * <PRE>
8365       * [dstBase] ==  (word)  imm
8366       * </PRE>
8367       *
8368       * @param dstBase the destination base register
8369       * @param imm immediate
8370       */
8371      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8372      public final void emitCMP_RegInd_Imm_Word(GPR dstBase, int imm) {
8373        int miStart = mi;
8374        setMachineCodes(mi++, (byte) 0x66);
8375        generateREXprefix(false, null, null, dstBase);
8376        // single byte opcode
8377        if (fits(imm,8)) {
8378          setMachineCodes(mi++, (byte) 0x83);
8379          // "register 0x7" is really part of the opcode
8380          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
8381          emitImm8((byte)imm);
8382        } else {
8383          setMachineCodes(mi++, (byte) 0x81);
8384          // "register 0x7" is really part of the opcode
8385          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
8386          emitImm16(imm);
8387        }
8388        if (lister != null) lister.RNI(miStart, "CMP", dstBase, imm);
8389      }
8390    
8391      /**
8392       * Generate a register--immediate CMP. That is,
8393       * <PRE>
8394       * dstReg ==  (quad)  imm
8395       * </PRE>
8396       *
8397       * @param dstReg the destination register
8398       * @param imm immediate
8399       */
8400      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8401      public final void emitCMP_Reg_Imm_Quad(GPR dstReg, int imm) {
8402        int miStart = mi;
8403        // no group 1 to 4 prefix byte
8404        generateREXprefix(true, null, null, dstReg);
8405        // single byte opcode
8406        if (fits(imm,8)) {
8407          setMachineCodes(mi++, (byte) 0x83);
8408          // "register 0x7" is really part of the opcode
8409          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
8410          emitImm8((byte)imm);
8411        } else if (dstReg == EAX) {
8412          setMachineCodes(mi++, (byte) 0x3D);
8413          emitImm32(imm);
8414        } else {
8415          setMachineCodes(mi++, (byte) 0x81);
8416          // "register 0x7" is really part of the opcode
8417          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
8418          emitImm32(imm);
8419        }
8420        if (lister != null) lister.RI(miStart, "CMP", dstReg, imm);
8421      }
8422    
8423      /**
8424       * Generate a register-displacement--immediate CMP. That is,
8425       * <PRE>
8426       * [dstBase + dstDisp] ==  (quad)  imm
8427       * </PRE>
8428       *
8429       * @param dstBase the destination register
8430       * @param dstDisp the destination displacement
8431       * @param imm immediate
8432       */
8433      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8434      public final void emitCMP_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
8435        int miStart = mi;
8436        // no group 1 to 4 prefix byte
8437        generateREXprefix(true, null, null, dstBase);
8438        // single byte opcode
8439        if (fits(imm,8)) {
8440          setMachineCodes(mi++, (byte) 0x83);
8441          // "register 0x7" is really part of the opcode
8442          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
8443          emitImm8((byte)imm);
8444        } else {
8445          setMachineCodes(mi++, (byte) 0x81);
8446          // "register 0x7" is really part of the opcode
8447          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
8448          emitImm32(imm);
8449        }
8450        if (lister != null) lister.RDI(miStart, "CMP", dstBase, dstDisp, imm);
8451      }
8452    
8453      /**
8454       * Generate a register-offset--immediate CMP. That is,
8455       * <PRE>
8456       * [dstIndex<<dstScale + dstDisp] ==  (quad)  imm
8457       * </PRE>
8458       *
8459       * @param dstIndex the destination index register
8460       * @param dstScale the destination shift amount
8461       * @param dstDisp the destination displacement
8462       * @param imm immediate
8463       */
8464      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8465      public final void emitCMP_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
8466        int miStart = mi;
8467        // no group 1 to 4 prefix byte
8468        generateREXprefix(true, null, dstIndex, null);
8469        // single byte opcode
8470        if (fits(imm,8)) {
8471          setMachineCodes(mi++, (byte) 0x83);
8472          // "register 0x7" is really part of the opcode
8473          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8474          emitImm8((byte)imm);
8475        } else {
8476          setMachineCodes(mi++, (byte) 0x81);
8477          // "register 0x7" is really part of the opcode
8478          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8479          emitImm32(imm);
8480        }
8481        if (lister != null) lister.RFDI(miStart, "CMP", dstIndex, dstScale, dstDisp, imm);
8482      }
8483    
8484      /**
8485       * Generate a absolute--immediate CMP. That is,
8486       * <PRE>
8487       * [dstDisp] ==  (quad)  imm
8488       * </PRE>
8489       *
8490       * @param dstDisp the destination displacement
8491       * @param imm immediate
8492       */
8493      public final void emitCMP_Abs_Imm_Quad(Address dstDisp, int imm) {
8494        int miStart = mi;
8495        // no group 1 to 4 prefix byte
8496        generateREXprefix(true, null, null, null);
8497        // single byte opcode
8498        if (fits(imm,8)) {
8499          setMachineCodes(mi++, (byte) 0x83);
8500          // "register 0x7" is really part of the opcode
8501          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
8502          emitImm8((byte)imm);
8503        } else {
8504          setMachineCodes(mi++, (byte) 0x81);
8505          // "register 0x7" is really part of the opcode
8506          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
8507          emitImm32(imm);
8508        }
8509        if (lister != null) lister.RAI(miStart, "CMP", dstDisp, imm);
8510      }
8511    
8512      /**
8513       * Generate a register-index--immediate CMP. That is,
8514       * <PRE>
8515       * [dstBase + dstIndex<<dstScale + dstDisp] ==  (quad)  imm
8516       * </PRE>
8517       *
8518       * @param dstBase the destination base register
8519       * @param dstIndex the destination index register
8520       * @param dstScale the destination shift amount
8521       * @param dstDisp the destination displacement
8522       * @param imm immediate
8523       */
8524      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8525      public final void emitCMP_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
8526        int miStart = mi;
8527        // no group 1 to 4 prefix byte
8528        generateREXprefix(true, null, dstIndex, dstBase);
8529        // single byte opcode
8530        if (fits(imm,8)) {
8531          setMachineCodes(mi++, (byte) 0x83);
8532          // "register 0x7" is really part of the opcode
8533          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8534          emitImm8((byte)imm);
8535        } else {
8536          setMachineCodes(mi++, (byte) 0x81);
8537          // "register 0x7" is really part of the opcode
8538          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8539          emitImm32(imm);
8540        }
8541        if (lister != null) lister.RXDI(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, imm);
8542      }
8543    
8544      /**
8545       * Generate a register(indirect)--immediate CMP. That is,
8546       * <PRE>
8547       * [dstBase] ==  (quad)  imm
8548       * </PRE>
8549       *
8550       * @param dstBase the destination base register
8551       * @param imm immediate
8552       */
8553      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8554      public final void emitCMP_RegInd_Imm_Quad(GPR dstBase, int imm) {
8555        int miStart = mi;
8556        // no group 1 to 4 prefix byte
8557        generateREXprefix(true, null, null, dstBase);
8558        // single byte opcode
8559        if (fits(imm,8)) {
8560          setMachineCodes(mi++, (byte) 0x83);
8561          // "register 0x7" is really part of the opcode
8562          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
8563          emitImm8((byte)imm);
8564        } else {
8565          setMachineCodes(mi++, (byte) 0x81);
8566          // "register 0x7" is really part of the opcode
8567          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
8568          emitImm32(imm);
8569        }
8570        if (lister != null) lister.RNI(miStart, "CMP", dstBase, imm);
8571      }
8572    
8573      /**
8574       * Generate a register--immediate CMP. That is,
8575       * <PRE>
8576       *  dstReg == (byte) imm
8577       * </PRE>
8578       *
8579       * @param dstReg the destination register
8580       * @param imm immediate
8581       */
8582      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8583      public final void emitCMP_Reg_Imm_Byte(GPR dstReg, int imm) {
8584        int miStart = mi;
8585        if (dstReg == EAX) {
8586          setMachineCodes(mi++, (byte) 0x3C);
8587          emitImm8(imm);
8588        } else {
8589          generateREXprefix(false, null, null, dstReg);
8590          setMachineCodes(mi++, (byte) 0x80);
8591          // "register 0x7" is really part of the opcode
8592          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
8593          emitImm8(imm);
8594        }
8595        if (lister != null) lister.RI(miStart, "CMP", dstReg, imm);
8596      }
8597    
8598      /**
8599       * Generate a register-displacement--immediate CMP. That is,
8600       * <PRE>
8601       * [dstBase + dstDisp] == (byte) imm
8602       * </PRE>
8603       *
8604       * @param dstBase the destination register
8605       * @param dstDisp the destination displacement
8606       * @param imm immediate
8607       */
8608      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8609      public final void emitCMP_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
8610        int miStart = mi;
8611        generateREXprefix(false, null, null, dstBase);
8612        setMachineCodes(mi++, (byte) 0x80);
8613        // "register 0x7" is really part of the opcode
8614        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
8615        emitImm8(imm);
8616        if (lister != null) lister.RDI(miStart, "CMP", dstBase, dstDisp, imm);
8617      }
8618    
8619      /**
8620       * Generate a register-index--immediate CMP. That is,
8621       * <PRE>
8622       * [dstBase + dstIndex<<scale + dstDisp] == (byte) imm
8623       * </PRE>
8624       *
8625       * @param dstBase the destination base register
8626       * @param dstIndex the destination index register
8627       * @param dstScale the destination shift amount
8628       * @param dstDisp the destination displacement
8629       * @param imm immediate
8630       */
8631      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8632      public final void emitCMP_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
8633        int miStart = mi;
8634        generateREXprefix(false, null, dstIndex, dstBase);
8635        setMachineCodes(mi++, (byte) 0x80);
8636        // "register 0x7" is really part of the opcode
8637        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8638        emitImm8(imm);
8639        if (lister != null) lister.RXDI(miStart, "CMP", dstBase, dstIndex, dstScale, dstDisp, imm);
8640      }
8641    
8642      /**
8643       * Generate a register-offset--immediate CMP. That is,
8644       * <PRE>
8645       * [dstIndex<<dstScale + dstDisp] == (byte) imm
8646       * </PRE>
8647       *
8648       * @param dstIndex the destination index register
8649       * @param dstScale the destination shift amount
8650       * @param dstDisp the destination displacement
8651       * @param imm immediate
8652       */
8653      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8654      public final void emitCMP_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
8655        int miStart = mi;
8656        generateREXprefix(false, null, dstIndex, null);
8657        setMachineCodes(mi++, (byte) 0x80);
8658        // "register 0x7" is really part of the opcode
8659        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
8660        emitImm8(imm);
8661        if (lister != null) lister.RFDI(miStart, "CMP", dstIndex, dstScale, dstDisp, imm);
8662      }
8663    
8664      /**
8665       * Generate a absolute--immediate CMP. That is,
8666       * <PRE>
8667       * [dstDisp] == (byte) imm
8668       * </PRE>
8669       *
8670       * @param dstDisp the destination displacement
8671       * @param imm immediate
8672       */
8673      public final void emitCMP_Abs_Imm_Byte(Address dstDisp, int imm) {
8674        int miStart = mi;
8675        generateREXprefix(false, null, null, null);
8676        setMachineCodes(mi++, (byte) 0x80);
8677        // "register 0x7" is really part of the opcode
8678        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
8679        emitImm8(imm);
8680        if (lister != null) lister.RAI(miStart, "CMP", dstDisp, imm);
8681      }
8682    
8683      /**
8684       * Generate a register(indirect)--immediate CMP. That is,
8685       * <PRE>
8686       * [dstBase] == (byte) imm
8687       * </PRE>
8688       *
8689       * @param dstBase the destination base register
8690       * @param imm immediate
8691       */
8692      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8693      public final void emitCMP_RegInd_Imm_Byte(GPR dstBase, int imm) {
8694        int miStart = mi;
8695        generateREXprefix(false, null, null, dstBase);
8696        setMachineCodes(mi++, (byte) 0x80);
8697        // "register 0x7" is really part of the opcode
8698        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
8699        emitImm8(imm);
8700        if (lister != null) lister.RNI(miStart, "CMP", dstBase, imm);
8701      }
8702    
8703      /**
8704       * Generate a register(indirect)--register OR. That is,
8705       * <PRE>
8706       * [dstBase] |=  srcReg
8707       * </PRE>
8708       *
8709       * @param dstBase the destination base
8710       * @param srcReg the source register
8711       */
8712      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8713      public final void emitOR_RegInd_Reg(GPR dstBase, GPR srcReg) {
8714        int miStart = mi;
8715        // no group 1 to 4 prefix byte
8716        generateREXprefix(false, srcReg, null, dstBase);
8717        // single byte opcode
8718        setMachineCodes(mi++, (byte) 0x09);
8719        emitRegIndirectRegOperands(dstBase, srcReg);
8720        if (lister != null) lister.RNR(miStart, "OR", dstBase, srcReg);
8721      }
8722    
8723      /**
8724       * Generate a register-offset--register OR. That is,
8725       * <PRE>
8726       * [dstReg<<dstScale + dstDisp] |=  srcReg
8727       * </PRE>
8728       *
8729       * @param dstIndex the destination index register
8730       * @param dstScale the destination shift amount
8731       * @param dstDisp the destination displacement
8732       * @param srcReg the source register
8733       */
8734      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
8735      public final void emitOR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
8736        int miStart = mi;
8737        // no group 1 to 4 prefix byte
8738        generateREXprefix(false, srcReg, dstIndex, null);
8739        // single byte opcode
8740        setMachineCodes(mi++, (byte) 0x09);
8741        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
8742        if (lister != null) lister.RFDR(miStart, "OR", dstIndex, dstScale, dstDisp, srcReg);
8743      }
8744    
8745      /**
8746       * Generate a absolute--register OR. That is,
8747       * <PRE>
8748       * [dstDisp] |=  srcReg
8749       * </PRE>
8750       *
8751       * @param dstDisp the destination address
8752       * @param srcReg the source register
8753       */
8754      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
8755      public final void emitOR_Abs_Reg(Address dstDisp, GPR srcReg) {
8756        int miStart = mi;
8757        // no group 1 to 4 prefix byte
8758        generateREXprefix(false, srcReg, null, null);
8759        // single byte opcode
8760        setMachineCodes(mi++, (byte) 0x09);
8761        emitAbsRegOperands(dstDisp, srcReg);
8762        if (lister != null) lister.RAR(miStart, "OR", dstDisp, srcReg);
8763      }
8764    
8765      /**
8766       * Generate a register-index--register OR. That is,
8767       * <PRE>
8768       * [dstBase + dstIndex<<dstScale + dstDisp] |=  srcReg
8769       * </PRE>
8770       *
8771       * @param dstBase the base register
8772       * @param dstIndex the destination index register
8773       * @param dstScale the destination shift amount
8774       * @param dstDisp the destination displacement
8775       * @param srcReg the source register
8776       */
8777      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
8778      public final void emitOR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
8779        int miStart = mi;
8780        // no group 1 to 4 prefix byte
8781        generateREXprefix(false, srcReg, dstIndex, dstBase);
8782        // single byte opcode
8783        setMachineCodes(mi++, (byte) 0x09);
8784        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
8785        if (lister != null) lister.RXDR(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
8786      }
8787    
8788      /**
8789       * Generate a register-displacement--register OR. That is,
8790       * <PRE>
8791       * [dstBase + dstDisp] |=  srcReg
8792       * </PRE>
8793       *
8794       * @param dstBase the base register
8795       * @param dstDisp the destination displacement
8796       * @param srcReg the source register
8797       */
8798      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
8799      public final void emitOR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
8800        int miStart = mi;
8801        // no group 1 to 4 prefix byte
8802        generateREXprefix(false, srcReg, null, dstBase);
8803        // single byte opcode
8804        setMachineCodes(mi++, (byte) 0x09);
8805        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
8806        if (lister != null) lister.RDR(miStart, "OR", dstBase, dstDisp, srcReg);
8807      }
8808    
8809      /**
8810       * Generate a register--register OR. That is,
8811       * <PRE>
8812       * dstReg |=  srcReg
8813       * </PRE>
8814       *
8815       * @param dstReg the destination register
8816       * @param srcReg the source register
8817       */
8818      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8819      public final void emitOR_Reg_Reg(GPR dstReg, GPR srcReg) {
8820        int miStart = mi;
8821        // no group 1 to 4 prefix byte
8822        generateREXprefix(false, srcReg, null, dstReg);
8823        // single byte opcode
8824        setMachineCodes(mi++, (byte) 0x09);
8825        emitRegRegOperands(dstReg, srcReg);
8826        if (lister != null) lister.RR(miStart, "OR", dstReg, srcReg);
8827      }
8828    
8829      /**
8830       * Generate a register--register-displacement OR. That is,
8831       * <PRE>
8832       * dstReg |=  [srcReg + srcDisp]
8833       * </PRE>
8834       *
8835       * @param dstReg the destination register
8836       * @param srcBase the source register
8837       * @param srcDisp the source displacement
8838       */
8839      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8840      public final void emitOR_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
8841        int miStart = mi;
8842        // no group 1 to 4 prefix byte
8843        generateREXprefix(false, dstReg, null, srcBase);
8844        // single byte opcode
8845        setMachineCodes(mi++, (byte) 0x0B);
8846        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
8847        if (lister != null) lister.RRD(miStart, "OR", dstReg, srcBase, srcDisp);
8848      }
8849    
8850      /**
8851       * Generate a register--register-offset OR. That is,
8852       * <PRE>
8853       * dstReg |=  [srcIndex<<srcScale + srcDisp]
8854       * </PRE>
8855       *
8856       * @param dstReg the destination register
8857       * @param srcIndex the source index register
8858       * @param srcScale the source shift amount
8859       * @param srcDisp the source displacement
8860       */
8861      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8862      public final void emitOR_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
8863        int miStart = mi;
8864        // no group 1 to 4 prefix byte
8865        generateREXprefix(false, dstReg, srcIndex, null);
8866        // single byte opcode
8867        setMachineCodes(mi++, (byte) 0x0B);
8868        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
8869        if (lister != null) lister.RRFD(miStart, "OR", dstReg, srcIndex, srcScale, srcDisp);
8870      }
8871    
8872      /**
8873       * Generate a register--register-offset OR. That is,
8874       * <PRE>
8875       * dstReg |=  [srcDisp]
8876       * </PRE>
8877       *
8878       * @param dstReg the destination register
8879       * @param srcDisp the source displacement
8880       */
8881      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
8882      public final void emitOR_Reg_Abs(GPR dstReg, Address srcDisp) {
8883        int miStart = mi;
8884        // no group 1 to 4 prefix byte
8885        generateREXprefix(false, dstReg, null, null);
8886        // single byte opcode
8887        setMachineCodes(mi++, (byte) 0x0B);
8888        emitAbsRegOperands(srcDisp, dstReg);
8889        if (lister != null) lister.RRA(miStart, "OR", dstReg, srcDisp);
8890      }
8891    
8892      /**
8893       * Generate a register--register-offset OR. That is,
8894       * <PRE>
8895       * dstReg |=  [srcBase + srcIndex<<srcScale + srcDisp]
8896       * </PRE>
8897       *
8898       * @param dstReg the destination register
8899       * @param srcBase the source base register
8900       * @param srcIndex the source index register
8901       * @param srcScale the source shift amount
8902       * @param srcDisp the source displacement
8903       */
8904      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
8905      public final void emitOR_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
8906        int miStart = mi;
8907        // no group 1 to 4 prefix byte
8908        generateREXprefix(false, dstReg, srcIndex, srcBase);
8909        // single byte opcode
8910        setMachineCodes(mi++, (byte) 0x0B);
8911        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
8912        if (lister != null) lister.RRXD(miStart, "OR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
8913      }
8914    
8915      /**
8916       * Generate a register--register(indirect) OR. That is,
8917       * <PRE>
8918       * dstReg |=  [srcBase]
8919       * </PRE>
8920       *
8921       * @param dstReg the destination register
8922       * @param srcBase the source base register
8923       */
8924      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8925      public final void emitOR_Reg_RegInd(GPR dstReg, GPR srcBase) {
8926        int miStart = mi;
8927        // no group 1 to 4 prefix byte
8928        generateREXprefix(false, dstReg, null, srcBase);
8929        // single byte opcode
8930        setMachineCodes(mi++, (byte) 0x0B);
8931        emitRegIndirectRegOperands(srcBase, dstReg);
8932        if (lister != null) lister.RRN(miStart, "OR", dstReg, srcBase);
8933      }
8934    
8935      /**
8936       * Generate a register(indirect)--register OR. That is,
8937       * <PRE>
8938       * [dstBase] |=  (word)  srcReg
8939       * </PRE>
8940       *
8941       * @param dstBase the destination base
8942       * @param srcReg the source register
8943       */
8944      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
8945      public final void emitOR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
8946        int miStart = mi;
8947        setMachineCodes(mi++, (byte) 0x66);
8948        generateREXprefix(false, srcReg, null, dstBase);
8949        // single byte opcode
8950        setMachineCodes(mi++, (byte) 0x09);
8951        emitRegIndirectRegOperands(dstBase, srcReg);
8952        if (lister != null) lister.RNR(miStart, "OR", dstBase, srcReg);
8953      }
8954    
8955      /**
8956       * Generate a register-offset--register OR. That is,
8957       * <PRE>
8958       * [dstReg<<dstScale + dstDisp] |=  (word)  srcReg
8959       * </PRE>
8960       *
8961       * @param dstIndex the destination index register
8962       * @param dstScale the destination shift amount
8963       * @param dstDisp the destination displacement
8964       * @param srcReg the source register
8965       */
8966      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
8967      public final void emitOR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
8968        int miStart = mi;
8969        setMachineCodes(mi++, (byte) 0x66);
8970        generateREXprefix(false, srcReg, dstIndex, null);
8971        // single byte opcode
8972        setMachineCodes(mi++, (byte) 0x09);
8973        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
8974        if (lister != null) lister.RFDR(miStart, "OR", dstIndex, dstScale, dstDisp, srcReg);
8975      }
8976    
8977      /**
8978       * Generate a absolute--register OR. That is,
8979       * <PRE>
8980       * [dstDisp] |=  (word)  srcReg
8981       * </PRE>
8982       *
8983       * @param dstDisp the destination address
8984       * @param srcReg the source register
8985       */
8986      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
8987      public final void emitOR_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
8988        int miStart = mi;
8989        setMachineCodes(mi++, (byte) 0x66);
8990        generateREXprefix(false, srcReg, null, null);
8991        // single byte opcode
8992        setMachineCodes(mi++, (byte) 0x09);
8993        emitAbsRegOperands(dstDisp, srcReg);
8994        if (lister != null) lister.RAR(miStart, "OR", dstDisp, srcReg);
8995      }
8996    
8997      /**
8998       * Generate a register-index--register OR. That is,
8999       * <PRE>
9000       * [dstBase + dstIndex<<dstScale + dstDisp] |=  (word)  srcReg
9001       * </PRE>
9002       *
9003       * @param dstBase the base register
9004       * @param dstIndex the destination index register
9005       * @param dstScale the destination shift amount
9006       * @param dstDisp the destination displacement
9007       * @param srcReg the source register
9008       */
9009      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
9010      public final void emitOR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
9011        int miStart = mi;
9012        setMachineCodes(mi++, (byte) 0x66);
9013        generateREXprefix(false, srcReg, dstIndex, dstBase);
9014        // single byte opcode
9015        setMachineCodes(mi++, (byte) 0x09);
9016        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
9017        if (lister != null) lister.RXDR(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
9018      }
9019    
9020      /**
9021       * Generate a register-displacement--register OR. That is,
9022       * <PRE>
9023       * [dstBase + dstDisp] |=  (word)  srcReg
9024       * </PRE>
9025       *
9026       * @param dstBase the base register
9027       * @param dstDisp the destination displacement
9028       * @param srcReg the source register
9029       */
9030      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
9031      public final void emitOR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
9032        int miStart = mi;
9033        setMachineCodes(mi++, (byte) 0x66);
9034        generateREXprefix(false, srcReg, null, dstBase);
9035        // single byte opcode
9036        setMachineCodes(mi++, (byte) 0x09);
9037        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
9038        if (lister != null) lister.RDR(miStart, "OR", dstBase, dstDisp, srcReg);
9039      }
9040    
9041      /**
9042       * Generate a register--register OR. That is,
9043       * <PRE>
9044       * dstReg |=  (word)  srcReg
9045       * </PRE>
9046       *
9047       * @param dstReg the destination register
9048       * @param srcReg the source register
9049       */
9050      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9051      public final void emitOR_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
9052        int miStart = mi;
9053        setMachineCodes(mi++, (byte) 0x66);
9054        generateREXprefix(false, srcReg, null, dstReg);
9055        // single byte opcode
9056        setMachineCodes(mi++, (byte) 0x09);
9057        emitRegRegOperands(dstReg, srcReg);
9058        if (lister != null) lister.RR(miStart, "OR", dstReg, srcReg);
9059      }
9060    
9061      /**
9062       * Generate a register--register-displacement OR. That is,
9063       * <PRE>
9064       * dstReg |=  (word)  [srcReg + srcDisp]
9065       * </PRE>
9066       *
9067       * @param dstReg the destination register
9068       * @param srcBase the source register
9069       * @param srcDisp the source displacement
9070       */
9071      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9072      public final void emitOR_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
9073        int miStart = mi;
9074        setMachineCodes(mi++, (byte) 0x66);
9075        generateREXprefix(false, dstReg, null, srcBase);
9076        // single byte opcode
9077        setMachineCodes(mi++, (byte) 0x0B);
9078        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
9079        if (lister != null) lister.RRD(miStart, "OR", dstReg, srcBase, srcDisp);
9080      }
9081    
9082      /**
9083       * Generate a register--register-offset OR. That is,
9084       * <PRE>
9085       * dstReg |=  (word)  [srcIndex<<srcScale + srcDisp]
9086       * </PRE>
9087       *
9088       * @param dstReg the destination register
9089       * @param srcIndex the source index register
9090       * @param srcScale the source shift amount
9091       * @param srcDisp the source displacement
9092       */
9093      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9094      public final void emitOR_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
9095        int miStart = mi;
9096        setMachineCodes(mi++, (byte) 0x66);
9097        generateREXprefix(false, dstReg, srcIndex, null);
9098        // single byte opcode
9099        setMachineCodes(mi++, (byte) 0x0B);
9100        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
9101        if (lister != null) lister.RRFD(miStart, "OR", dstReg, srcIndex, srcScale, srcDisp);
9102      }
9103    
9104      /**
9105       * Generate a register--register-offset OR. That is,
9106       * <PRE>
9107       * dstReg |=  (word)  [srcDisp]
9108       * </PRE>
9109       *
9110       * @param dstReg the destination register
9111       * @param srcDisp the source displacement
9112       */
9113      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9114      public final void emitOR_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
9115        int miStart = mi;
9116        setMachineCodes(mi++, (byte) 0x66);
9117        generateREXprefix(false, dstReg, null, null);
9118        // single byte opcode
9119        setMachineCodes(mi++, (byte) 0x0B);
9120        emitAbsRegOperands(srcDisp, dstReg);
9121        if (lister != null) lister.RRA(miStart, "OR", dstReg, srcDisp);
9122      }
9123    
9124      /**
9125       * Generate a register--register-offset OR. That is,
9126       * <PRE>
9127       * dstReg |=  (word)  [srcBase + srcIndex<<srcScale + srcDisp]
9128       * </PRE>
9129       *
9130       * @param dstReg the destination register
9131       * @param srcBase the source base register
9132       * @param srcIndex the source index register
9133       * @param srcScale the source shift amount
9134       * @param srcDisp the source displacement
9135       */
9136      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
9137      public final void emitOR_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
9138        int miStart = mi;
9139        setMachineCodes(mi++, (byte) 0x66);
9140        generateREXprefix(false, dstReg, srcIndex, srcBase);
9141        // single byte opcode
9142        setMachineCodes(mi++, (byte) 0x0B);
9143        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
9144        if (lister != null) lister.RRXD(miStart, "OR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
9145      }
9146    
9147      /**
9148       * Generate a register--register(indirect) OR. That is,
9149       * <PRE>
9150       * dstReg |=  (word)  [srcBase]
9151       * </PRE>
9152       *
9153       * @param dstReg the destination register
9154       * @param srcBase the source base register
9155       */
9156      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9157      public final void emitOR_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
9158        int miStart = mi;
9159        setMachineCodes(mi++, (byte) 0x66);
9160        generateREXprefix(false, dstReg, null, srcBase);
9161        // single byte opcode
9162        setMachineCodes(mi++, (byte) 0x0B);
9163        emitRegIndirectRegOperands(srcBase, dstReg);
9164        if (lister != null) lister.RRN(miStart, "OR", dstReg, srcBase);
9165      }
9166    
9167      /**
9168       * Generate a register(indirect)--register OR. That is,
9169       * <PRE>
9170       * [dstBase] |=  (quad)  srcReg
9171       * </PRE>
9172       *
9173       * @param dstBase the destination base
9174       * @param srcReg the source register
9175       */
9176      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9177      public final void emitOR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
9178        int miStart = mi;
9179        // no group 1 to 4 prefix byte
9180        generateREXprefix(true, srcReg, null, dstBase);
9181        // single byte opcode
9182        setMachineCodes(mi++, (byte) 0x09);
9183        emitRegIndirectRegOperands(dstBase, srcReg);
9184        if (lister != null) lister.RNR(miStart, "OR", dstBase, srcReg);
9185      }
9186    
9187      /**
9188       * Generate a register-offset--register OR. That is,
9189       * <PRE>
9190       * [dstReg<<dstScale + dstDisp] |=  (quad)  srcReg
9191       * </PRE>
9192       *
9193       * @param dstIndex the destination index register
9194       * @param dstScale the destination shift amount
9195       * @param dstDisp the destination displacement
9196       * @param srcReg the source register
9197       */
9198      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
9199      public final void emitOR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
9200        int miStart = mi;
9201        // no group 1 to 4 prefix byte
9202        generateREXprefix(true, srcReg, dstIndex, null);
9203        // single byte opcode
9204        setMachineCodes(mi++, (byte) 0x09);
9205        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
9206        if (lister != null) lister.RFDR(miStart, "OR", dstIndex, dstScale, dstDisp, srcReg);
9207      }
9208    
9209      /**
9210       * Generate a absolute--register OR. That is,
9211       * <PRE>
9212       * [dstDisp] |=  (quad)  srcReg
9213       * </PRE>
9214       *
9215       * @param dstDisp the destination address
9216       * @param srcReg the source register
9217       */
9218      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
9219      public final void emitOR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
9220        int miStart = mi;
9221        // no group 1 to 4 prefix byte
9222        generateREXprefix(true, srcReg, null, null);
9223        // single byte opcode
9224        setMachineCodes(mi++, (byte) 0x09);
9225        emitAbsRegOperands(dstDisp, srcReg);
9226        if (lister != null) lister.RAR(miStart, "OR", dstDisp, srcReg);
9227      }
9228    
9229      /**
9230       * Generate a register-index--register OR. That is,
9231       * <PRE>
9232       * [dstBase + dstIndex<<dstScale + dstDisp] |=  (quad)  srcReg
9233       * </PRE>
9234       *
9235       * @param dstBase the base register
9236       * @param dstIndex the destination index register
9237       * @param dstScale the destination shift amount
9238       * @param dstDisp the destination displacement
9239       * @param srcReg the source register
9240       */
9241      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
9242      public final void emitOR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
9243        int miStart = mi;
9244        // no group 1 to 4 prefix byte
9245        generateREXprefix(true, srcReg, dstIndex, dstBase);
9246        // single byte opcode
9247        setMachineCodes(mi++, (byte) 0x09);
9248        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
9249        if (lister != null) lister.RXDR(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
9250      }
9251    
9252      /**
9253       * Generate a register-displacement--register OR. That is,
9254       * <PRE>
9255       * [dstBase + dstDisp] |=  (quad)  srcReg
9256       * </PRE>
9257       *
9258       * @param dstBase the base register
9259       * @param dstDisp the destination displacement
9260       * @param srcReg the source register
9261       */
9262      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
9263      public final void emitOR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
9264        int miStart = mi;
9265        // no group 1 to 4 prefix byte
9266        generateREXprefix(true, srcReg, null, dstBase);
9267        // single byte opcode
9268        setMachineCodes(mi++, (byte) 0x09);
9269        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
9270        if (lister != null) lister.RDR(miStart, "OR", dstBase, dstDisp, srcReg);
9271      }
9272    
9273      /**
9274       * Generate a register--register OR. That is,
9275       * <PRE>
9276       * dstReg |=  (quad)  srcReg
9277       * </PRE>
9278       *
9279       * @param dstReg the destination register
9280       * @param srcReg the source register
9281       */
9282      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9283      public final void emitOR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
9284        int miStart = mi;
9285        // no group 1 to 4 prefix byte
9286        generateREXprefix(true, srcReg, null, dstReg);
9287        // single byte opcode
9288        setMachineCodes(mi++, (byte) 0x09);
9289        emitRegRegOperands(dstReg, srcReg);
9290        if (lister != null) lister.RR(miStart, "OR", dstReg, srcReg);
9291      }
9292    
9293      /**
9294       * Generate a register--register-displacement OR. That is,
9295       * <PRE>
9296       * dstReg |=  (quad)  [srcReg + srcDisp]
9297       * </PRE>
9298       *
9299       * @param dstReg the destination register
9300       * @param srcBase the source register
9301       * @param srcDisp the source displacement
9302       */
9303      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9304      public final void emitOR_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
9305        int miStart = mi;
9306        // no group 1 to 4 prefix byte
9307        generateREXprefix(true, dstReg, null, srcBase);
9308        // single byte opcode
9309        setMachineCodes(mi++, (byte) 0x0B);
9310        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
9311        if (lister != null) lister.RRD(miStart, "OR", dstReg, srcBase, srcDisp);
9312      }
9313    
9314      /**
9315       * Generate a register--register-offset OR. That is,
9316       * <PRE>
9317       * dstReg |=  (quad)  [srcIndex<<srcScale + srcDisp]
9318       * </PRE>
9319       *
9320       * @param dstReg the destination register
9321       * @param srcIndex the source index register
9322       * @param srcScale the source shift amount
9323       * @param srcDisp the source displacement
9324       */
9325      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9326      public final void emitOR_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
9327        int miStart = mi;
9328        // no group 1 to 4 prefix byte
9329        generateREXprefix(true, dstReg, srcIndex, null);
9330        // single byte opcode
9331        setMachineCodes(mi++, (byte) 0x0B);
9332        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
9333        if (lister != null) lister.RRFD(miStart, "OR", dstReg, srcIndex, srcScale, srcDisp);
9334      }
9335    
9336      /**
9337       * Generate a register--register-offset OR. That is,
9338       * <PRE>
9339       * dstReg |=  (quad)  [srcDisp]
9340       * </PRE>
9341       *
9342       * @param dstReg the destination register
9343       * @param srcDisp the source displacement
9344       */
9345      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9346      public final void emitOR_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
9347        int miStart = mi;
9348        // no group 1 to 4 prefix byte
9349        generateREXprefix(true, dstReg, null, null);
9350        // single byte opcode
9351        setMachineCodes(mi++, (byte) 0x0B);
9352        emitAbsRegOperands(srcDisp, dstReg);
9353        if (lister != null) lister.RRA(miStart, "OR", dstReg, srcDisp);
9354      }
9355    
9356      /**
9357       * Generate a register--register-offset OR. That is,
9358       * <PRE>
9359       * dstReg |=  (quad)  [srcBase + srcIndex<<srcScale + srcDisp]
9360       * </PRE>
9361       *
9362       * @param dstReg the destination register
9363       * @param srcBase the source base register
9364       * @param srcIndex the source index register
9365       * @param srcScale the source shift amount
9366       * @param srcDisp the source displacement
9367       */
9368      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
9369      public final void emitOR_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
9370        int miStart = mi;
9371        // no group 1 to 4 prefix byte
9372        generateREXprefix(true, dstReg, srcIndex, srcBase);
9373        // single byte opcode
9374        setMachineCodes(mi++, (byte) 0x0B);
9375        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
9376        if (lister != null) lister.RRXD(miStart, "OR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
9377      }
9378    
9379      /**
9380       * Generate a register--register(indirect) OR. That is,
9381       * <PRE>
9382       * dstReg |=  (quad)  [srcBase]
9383       * </PRE>
9384       *
9385       * @param dstReg the destination register
9386       * @param srcBase the source base register
9387       */
9388      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9389      public final void emitOR_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
9390        int miStart = mi;
9391        // no group 1 to 4 prefix byte
9392        generateREXprefix(true, dstReg, null, srcBase);
9393        // single byte opcode
9394        setMachineCodes(mi++, (byte) 0x0B);
9395        emitRegIndirectRegOperands(srcBase, dstReg);
9396        if (lister != null) lister.RRN(miStart, "OR", dstReg, srcBase);
9397      }
9398    
9399      /**
9400       * Generate a register(indirect)--register OR. That is,
9401       * <PRE>
9402       * [dstBase] |=  (byte)  srcReg
9403       * </PRE>
9404       *
9405       * @param dstBase the destination base
9406       * @param srcReg the source register
9407       */
9408      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9409      public final void emitOR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
9410        int miStart = mi;
9411        // no group 1 to 4 prefix byte
9412        generateREXprefix(false, srcReg, null, dstBase);
9413        // single byte opcode
9414        setMachineCodes(mi++, (byte) 0x08);
9415        emitRegIndirectRegOperands(dstBase, srcReg);
9416        if (lister != null) lister.RNR(miStart, "OR", dstBase, srcReg);
9417      }
9418    
9419      /**
9420       * Generate a register-offset--register OR. That is,
9421       * <PRE>
9422       * [dstReg<<dstScale + dstDisp] |=  (byte)  srcReg
9423       * </PRE>
9424       *
9425       * @param dstIndex the destination index register
9426       * @param dstScale the destination shift amount
9427       * @param dstDisp the destination displacement
9428       * @param srcReg the source register
9429       */
9430      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
9431      public final void emitOR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
9432        int miStart = mi;
9433        // no group 1 to 4 prefix byte
9434        generateREXprefix(false, srcReg, dstIndex, null);
9435        // single byte opcode
9436        setMachineCodes(mi++, (byte) 0x08);
9437        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
9438        if (lister != null) lister.RFDR(miStart, "OR", dstIndex, dstScale, dstDisp, srcReg);
9439      }
9440    
9441      /**
9442       * Generate a absolute--register OR. That is,
9443       * <PRE>
9444       * [dstDisp] |=  (byte)  srcReg
9445       * </PRE>
9446       *
9447       * @param dstDisp the destination address
9448       * @param srcReg the source register
9449       */
9450      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
9451      public final void emitOR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
9452        int miStart = mi;
9453        // no group 1 to 4 prefix byte
9454        generateREXprefix(false, srcReg, null, null);
9455        // single byte opcode
9456        setMachineCodes(mi++, (byte) 0x08);
9457        emitAbsRegOperands(dstDisp, srcReg);
9458        if (lister != null) lister.RAR(miStart, "OR", dstDisp, srcReg);
9459      }
9460    
9461      /**
9462       * Generate a register-index--register OR. That is,
9463       * <PRE>
9464       * [dstBase + dstIndex<<dstScale + dstDisp] |=  (byte)  srcReg
9465       * </PRE>
9466       *
9467       * @param dstBase the base register
9468       * @param dstIndex the destination index register
9469       * @param dstScale the destination shift amount
9470       * @param dstDisp the destination displacement
9471       * @param srcReg the source register
9472       */
9473      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
9474      public final void emitOR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
9475        int miStart = mi;
9476        // no group 1 to 4 prefix byte
9477        generateREXprefix(false, srcReg, dstIndex, dstBase);
9478        // single byte opcode
9479        setMachineCodes(mi++, (byte) 0x08);
9480        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
9481        if (lister != null) lister.RXDR(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
9482      }
9483    
9484      /**
9485       * Generate a register-displacement--register OR. That is,
9486       * <PRE>
9487       * [dstBase + dstDisp] |=  (byte)  srcReg
9488       * </PRE>
9489       *
9490       * @param dstBase the base register
9491       * @param dstDisp the destination displacement
9492       * @param srcReg the source register
9493       */
9494      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
9495      public final void emitOR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
9496        int miStart = mi;
9497        // no group 1 to 4 prefix byte
9498        generateREXprefix(false, srcReg, null, dstBase);
9499        // single byte opcode
9500        setMachineCodes(mi++, (byte) 0x08);
9501        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
9502        if (lister != null) lister.RDR(miStart, "OR", dstBase, dstDisp, srcReg);
9503      }
9504    
9505      /**
9506       * Generate a register--register OR. That is,
9507       * <PRE>
9508       * dstReg |=  (byte)  srcReg
9509       * </PRE>
9510       *
9511       * @param dstReg the destination register
9512       * @param srcReg the source register
9513       */
9514      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9515      public final void emitOR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
9516        int miStart = mi;
9517        // no group 1 to 4 prefix byte
9518        generateREXprefix(false, srcReg, null, dstReg);
9519        // single byte opcode
9520        setMachineCodes(mi++, (byte) 0x08);
9521        emitRegRegOperands(dstReg, srcReg);
9522        if (lister != null) lister.RR(miStart, "OR", dstReg, srcReg);
9523      }
9524    
9525      /**
9526       * Generate a register--register-displacement OR. That is,
9527       * <PRE>
9528       * dstReg |=  (byte)  [srcReg + srcDisp]
9529       * </PRE>
9530       *
9531       * @param dstReg the destination register
9532       * @param srcBase the source register
9533       * @param srcDisp the source displacement
9534       */
9535      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9536      public final void emitOR_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
9537        int miStart = mi;
9538        // no group 1 to 4 prefix byte
9539        generateREXprefix(false, dstReg, null, srcBase);
9540        // single byte opcode
9541        setMachineCodes(mi++, (byte) 0x0A);
9542        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
9543        if (lister != null) lister.RRD(miStart, "OR", dstReg, srcBase, srcDisp);
9544      }
9545    
9546      /**
9547       * Generate a register--register-offset OR. That is,
9548       * <PRE>
9549       * dstReg |=  (byte)  [srcIndex<<srcScale + srcDisp]
9550       * </PRE>
9551       *
9552       * @param dstReg the destination register
9553       * @param srcIndex the source index register
9554       * @param srcScale the source shift amount
9555       * @param srcDisp the source displacement
9556       */
9557      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9558      public final void emitOR_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
9559        int miStart = mi;
9560        // no group 1 to 4 prefix byte
9561        generateREXprefix(false, dstReg, srcIndex, null);
9562        // single byte opcode
9563        setMachineCodes(mi++, (byte) 0x0A);
9564        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
9565        if (lister != null) lister.RRFD(miStart, "OR", dstReg, srcIndex, srcScale, srcDisp);
9566      }
9567    
9568      /**
9569       * Generate a register--register-offset OR. That is,
9570       * <PRE>
9571       * dstReg |=  (byte)  [srcDisp]
9572       * </PRE>
9573       *
9574       * @param dstReg the destination register
9575       * @param srcDisp the source displacement
9576       */
9577      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9578      public final void emitOR_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
9579        int miStart = mi;
9580        // no group 1 to 4 prefix byte
9581        generateREXprefix(false, dstReg, null, null);
9582        // single byte opcode
9583        setMachineCodes(mi++, (byte) 0x0A);
9584        emitAbsRegOperands(srcDisp, dstReg);
9585        if (lister != null) lister.RRA(miStart, "OR", dstReg, srcDisp);
9586      }
9587    
9588      /**
9589       * Generate a register--register-offset OR. That is,
9590       * <PRE>
9591       * dstReg |=  (byte)  [srcBase + srcIndex<<srcScale + srcDisp]
9592       * </PRE>
9593       *
9594       * @param dstReg the destination register
9595       * @param srcBase the source base register
9596       * @param srcIndex the source index register
9597       * @param srcScale the source shift amount
9598       * @param srcDisp the source displacement
9599       */
9600      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
9601      public final void emitOR_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
9602        int miStart = mi;
9603        // no group 1 to 4 prefix byte
9604        generateREXprefix(false, dstReg, srcIndex, srcBase);
9605        // single byte opcode
9606        setMachineCodes(mi++, (byte) 0x0A);
9607        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
9608        if (lister != null) lister.RRXD(miStart, "OR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
9609      }
9610    
9611      /**
9612       * Generate a register--register(indirect) OR. That is,
9613       * <PRE>
9614       * dstReg |=  (byte)  [srcBase]
9615       * </PRE>
9616       *
9617       * @param dstReg the destination register
9618       * @param srcBase the source base register
9619       */
9620      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9621      public final void emitOR_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
9622        int miStart = mi;
9623        // no group 1 to 4 prefix byte
9624        generateREXprefix(false, dstReg, null, srcBase);
9625        // single byte opcode
9626        setMachineCodes(mi++, (byte) 0x0A);
9627        emitRegIndirectRegOperands(srcBase, dstReg);
9628        if (lister != null) lister.RRN(miStart, "OR", dstReg, srcBase);
9629      }
9630    
9631      /**
9632       * Generate a register--immediate OR. That is,
9633       * <PRE>
9634       * dstReg |=  imm
9635       * </PRE>
9636       *
9637       * @param dstReg the destination register
9638       * @param imm immediate
9639       */
9640      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9641      public final void emitOR_Reg_Imm(GPR dstReg, int imm) {
9642        int miStart = mi;
9643        // no group 1 to 4 prefix byte
9644        generateREXprefix(false, null, null, dstReg);
9645        // single byte opcode
9646        if (fits(imm,8)) {
9647          setMachineCodes(mi++, (byte) 0x83);
9648          // "register 0x1" is really part of the opcode
9649          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
9650          emitImm8((byte)imm);
9651        } else if (dstReg == EAX) {
9652          setMachineCodes(mi++, (byte) 0x0D);
9653          emitImm32(imm);
9654        } else {
9655          setMachineCodes(mi++, (byte) 0x81);
9656          // "register 0x1" is really part of the opcode
9657          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
9658          emitImm32(imm);
9659        }
9660        if (lister != null) lister.RI(miStart, "OR", dstReg, imm);
9661      }
9662    
9663      /**
9664       * Generate a register-displacement--immediate OR. That is,
9665       * <PRE>
9666       * [dstBase + dstDisp] |=  imm
9667       * </PRE>
9668       *
9669       * @param dstBase the destination register
9670       * @param dstDisp the destination displacement
9671       * @param imm immediate
9672       */
9673      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9674      public final void emitOR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
9675        int miStart = mi;
9676        // no group 1 to 4 prefix byte
9677        generateREXprefix(false, null, null, dstBase);
9678        // single byte opcode
9679        if (fits(imm,8)) {
9680          setMachineCodes(mi++, (byte) 0x83);
9681          // "register 0x1" is really part of the opcode
9682          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
9683          emitImm8((byte)imm);
9684        } else {
9685          setMachineCodes(mi++, (byte) 0x81);
9686          // "register 0x1" is really part of the opcode
9687          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
9688          emitImm32(imm);
9689        }
9690        if (lister != null) lister.RDI(miStart, "OR", dstBase, dstDisp, imm);
9691      }
9692    
9693      /**
9694       * Generate a register-offset--immediate OR. That is,
9695       * <PRE>
9696       * [dstIndex<<dstScale + dstDisp] |=  imm
9697       * </PRE>
9698       *
9699       * @param dstIndex the destination index register
9700       * @param dstScale the destination shift amount
9701       * @param dstDisp the destination displacement
9702       * @param imm immediate
9703       */
9704      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9705      public final void emitOR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
9706        int miStart = mi;
9707        // no group 1 to 4 prefix byte
9708        generateREXprefix(false, null, dstIndex, null);
9709        // single byte opcode
9710        if (fits(imm,8)) {
9711          setMachineCodes(mi++, (byte) 0x83);
9712          // "register 0x1" is really part of the opcode
9713          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
9714          emitImm8((byte)imm);
9715        } else {
9716          setMachineCodes(mi++, (byte) 0x81);
9717          // "register 0x1" is really part of the opcode
9718          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
9719          emitImm32(imm);
9720        }
9721        if (lister != null) lister.RFDI(miStart, "OR", dstIndex, dstScale, dstDisp, imm);
9722      }
9723    
9724      /**
9725       * Generate a absolute--immediate OR. That is,
9726       * <PRE>
9727       * [dstDisp] |=  imm
9728       * </PRE>
9729       *
9730       * @param dstDisp the destination displacement
9731       * @param imm immediate
9732       */
9733      public final void emitOR_Abs_Imm(Address dstDisp, int imm) {
9734        int miStart = mi;
9735        // no group 1 to 4 prefix byte
9736        generateREXprefix(false, null, null, null);
9737        // single byte opcode
9738        if (fits(imm,8)) {
9739          setMachineCodes(mi++, (byte) 0x83);
9740          // "register 0x1" is really part of the opcode
9741          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
9742          emitImm8((byte)imm);
9743        } else {
9744          setMachineCodes(mi++, (byte) 0x81);
9745          // "register 0x1" is really part of the opcode
9746          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
9747          emitImm32(imm);
9748        }
9749        if (lister != null) lister.RAI(miStart, "OR", dstDisp, imm);
9750      }
9751    
9752      /**
9753       * Generate a register-index--immediate OR. That is,
9754       * <PRE>
9755       * [dstBase + dstIndex<<dstScale + dstDisp] |=  imm
9756       * </PRE>
9757       *
9758       * @param dstBase the destination base register
9759       * @param dstIndex the destination index register
9760       * @param dstScale the destination shift amount
9761       * @param dstDisp the destination displacement
9762       * @param imm immediate
9763       */
9764      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9765      public final void emitOR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
9766        int miStart = mi;
9767        // no group 1 to 4 prefix byte
9768        generateREXprefix(false, null, dstIndex, dstBase);
9769        // single byte opcode
9770        if (fits(imm,8)) {
9771          setMachineCodes(mi++, (byte) 0x83);
9772          // "register 0x1" is really part of the opcode
9773          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
9774          emitImm8((byte)imm);
9775        } else {
9776          setMachineCodes(mi++, (byte) 0x81);
9777          // "register 0x1" is really part of the opcode
9778          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
9779          emitImm32(imm);
9780        }
9781        if (lister != null) lister.RXDI(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, imm);
9782      }
9783    
9784      /**
9785       * Generate a register(indirect)--immediate OR. That is,
9786       * <PRE>
9787       * [dstBase] |=  imm
9788       * </PRE>
9789       *
9790       * @param dstBase the destination base register
9791       * @param imm immediate
9792       */
9793      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9794      public final void emitOR_RegInd_Imm(GPR dstBase, int imm) {
9795        int miStart = mi;
9796        // no group 1 to 4 prefix byte
9797        generateREXprefix(false, null, null, dstBase);
9798        // single byte opcode
9799        if (fits(imm,8)) {
9800          setMachineCodes(mi++, (byte) 0x83);
9801          // "register 0x1" is really part of the opcode
9802          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
9803          emitImm8((byte)imm);
9804        } else {
9805          setMachineCodes(mi++, (byte) 0x81);
9806          // "register 0x1" is really part of the opcode
9807          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
9808          emitImm32(imm);
9809        }
9810        if (lister != null) lister.RNI(miStart, "OR", dstBase, imm);
9811      }
9812    
9813      /**
9814       * Generate a register--immediate OR. That is,
9815       * <PRE>
9816       * dstReg |=  (word)  imm
9817       * </PRE>
9818       *
9819       * @param dstReg the destination register
9820       * @param imm immediate
9821       */
9822      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9823      public final void emitOR_Reg_Imm_Word(GPR dstReg, int imm) {
9824        int miStart = mi;
9825        setMachineCodes(mi++, (byte) 0x66);
9826        generateREXprefix(false, null, null, dstReg);
9827        // single byte opcode
9828        if (fits(imm,8)) {
9829          setMachineCodes(mi++, (byte) 0x83);
9830          // "register 0x1" is really part of the opcode
9831          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
9832          emitImm8((byte)imm);
9833        } else if (dstReg == EAX) {
9834          setMachineCodes(mi++, (byte) 0x0D);
9835          emitImm16(imm);
9836        } else {
9837          setMachineCodes(mi++, (byte) 0x81);
9838          // "register 0x1" is really part of the opcode
9839          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
9840          emitImm16(imm);
9841        }
9842        if (lister != null) lister.RI(miStart, "OR", dstReg, imm);
9843      }
9844    
9845      /**
9846       * Generate a register-displacement--immediate OR. That is,
9847       * <PRE>
9848       * [dstBase + dstDisp] |=  (word)  imm
9849       * </PRE>
9850       *
9851       * @param dstBase the destination register
9852       * @param dstDisp the destination displacement
9853       * @param imm immediate
9854       */
9855      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9856      public final void emitOR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
9857        int miStart = mi;
9858        setMachineCodes(mi++, (byte) 0x66);
9859        generateREXprefix(false, null, null, dstBase);
9860        // single byte opcode
9861        if (fits(imm,8)) {
9862          setMachineCodes(mi++, (byte) 0x83);
9863          // "register 0x1" is really part of the opcode
9864          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
9865          emitImm8((byte)imm);
9866        } else {
9867          setMachineCodes(mi++, (byte) 0x81);
9868          // "register 0x1" is really part of the opcode
9869          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
9870          emitImm16(imm);
9871        }
9872        if (lister != null) lister.RDI(miStart, "OR", dstBase, dstDisp, imm);
9873      }
9874    
9875      /**
9876       * Generate a register-offset--immediate OR. That is,
9877       * <PRE>
9878       * [dstIndex<<dstScale + dstDisp] |=  (word)  imm
9879       * </PRE>
9880       *
9881       * @param dstIndex the destination index register
9882       * @param dstScale the destination shift amount
9883       * @param dstDisp the destination displacement
9884       * @param imm immediate
9885       */
9886      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9887      public final void emitOR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
9888        int miStart = mi;
9889        setMachineCodes(mi++, (byte) 0x66);
9890        generateREXprefix(false, null, dstIndex, null);
9891        // single byte opcode
9892        if (fits(imm,8)) {
9893          setMachineCodes(mi++, (byte) 0x83);
9894          // "register 0x1" is really part of the opcode
9895          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
9896          emitImm8((byte)imm);
9897        } else {
9898          setMachineCodes(mi++, (byte) 0x81);
9899          // "register 0x1" is really part of the opcode
9900          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
9901          emitImm16(imm);
9902        }
9903        if (lister != null) lister.RFDI(miStart, "OR", dstIndex, dstScale, dstDisp, imm);
9904      }
9905    
9906      /**
9907       * Generate a absolute--immediate OR. That is,
9908       * <PRE>
9909       * [dstDisp] |=  (word)  imm
9910       * </PRE>
9911       *
9912       * @param dstDisp the destination displacement
9913       * @param imm immediate
9914       */
9915      public final void emitOR_Abs_Imm_Word(Address dstDisp, int imm) {
9916        int miStart = mi;
9917        setMachineCodes(mi++, (byte) 0x66);
9918        generateREXprefix(false, null, null, null);
9919        // single byte opcode
9920        if (fits(imm,8)) {
9921          setMachineCodes(mi++, (byte) 0x83);
9922          // "register 0x1" is really part of the opcode
9923          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
9924          emitImm8((byte)imm);
9925        } else {
9926          setMachineCodes(mi++, (byte) 0x81);
9927          // "register 0x1" is really part of the opcode
9928          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
9929          emitImm16(imm);
9930        }
9931        if (lister != null) lister.RAI(miStart, "OR", dstDisp, imm);
9932      }
9933    
9934      /**
9935       * Generate a register-index--immediate OR. That is,
9936       * <PRE>
9937       * [dstBase + dstIndex<<dstScale + dstDisp] |=  (word)  imm
9938       * </PRE>
9939       *
9940       * @param dstBase the destination base register
9941       * @param dstIndex the destination index register
9942       * @param dstScale the destination shift amount
9943       * @param dstDisp the destination displacement
9944       * @param imm immediate
9945       */
9946      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
9947      public final void emitOR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
9948        int miStart = mi;
9949        setMachineCodes(mi++, (byte) 0x66);
9950        generateREXprefix(false, null, dstIndex, dstBase);
9951        // single byte opcode
9952        if (fits(imm,8)) {
9953          setMachineCodes(mi++, (byte) 0x83);
9954          // "register 0x1" is really part of the opcode
9955          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
9956          emitImm8((byte)imm);
9957        } else {
9958          setMachineCodes(mi++, (byte) 0x81);
9959          // "register 0x1" is really part of the opcode
9960          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
9961          emitImm16(imm);
9962        }
9963        if (lister != null) lister.RXDI(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, imm);
9964      }
9965    
9966      /**
9967       * Generate a register(indirect)--immediate OR. That is,
9968       * <PRE>
9969       * [dstBase] |=  (word)  imm
9970       * </PRE>
9971       *
9972       * @param dstBase the destination base register
9973       * @param imm immediate
9974       */
9975      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
9976      public final void emitOR_RegInd_Imm_Word(GPR dstBase, int imm) {
9977        int miStart = mi;
9978        setMachineCodes(mi++, (byte) 0x66);
9979        generateREXprefix(false, null, null, dstBase);
9980        // single byte opcode
9981        if (fits(imm,8)) {
9982          setMachineCodes(mi++, (byte) 0x83);
9983          // "register 0x1" is really part of the opcode
9984          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
9985          emitImm8((byte)imm);
9986        } else {
9987          setMachineCodes(mi++, (byte) 0x81);
9988          // "register 0x1" is really part of the opcode
9989          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
9990          emitImm16(imm);
9991        }
9992        if (lister != null) lister.RNI(miStart, "OR", dstBase, imm);
9993      }
9994    
9995      /**
9996       * Generate a register--immediate OR. That is,
9997       * <PRE>
9998       * dstReg |=  (quad)  imm
9999       * </PRE>
10000       *
10001       * @param dstReg the destination register
10002       * @param imm immediate
10003       */
10004      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10005      public final void emitOR_Reg_Imm_Quad(GPR dstReg, int imm) {
10006        int miStart = mi;
10007        // no group 1 to 4 prefix byte
10008        generateREXprefix(true, null, null, dstReg);
10009        // single byte opcode
10010        if (fits(imm,8)) {
10011          setMachineCodes(mi++, (byte) 0x83);
10012          // "register 0x1" is really part of the opcode
10013          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
10014          emitImm8((byte)imm);
10015        } else if (dstReg == EAX) {
10016          setMachineCodes(mi++, (byte) 0x0D);
10017          emitImm32(imm);
10018        } else {
10019          setMachineCodes(mi++, (byte) 0x81);
10020          // "register 0x1" is really part of the opcode
10021          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
10022          emitImm32(imm);
10023        }
10024        if (lister != null) lister.RI(miStart, "OR", dstReg, imm);
10025      }
10026    
10027      /**
10028       * Generate a register-displacement--immediate OR. That is,
10029       * <PRE>
10030       * [dstBase + dstDisp] |=  (quad)  imm
10031       * </PRE>
10032       *
10033       * @param dstBase the destination register
10034       * @param dstDisp the destination displacement
10035       * @param imm immediate
10036       */
10037      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10038      public final void emitOR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
10039        int miStart = mi;
10040        // no group 1 to 4 prefix byte
10041        generateREXprefix(true, null, null, dstBase);
10042        // single byte opcode
10043        if (fits(imm,8)) {
10044          setMachineCodes(mi++, (byte) 0x83);
10045          // "register 0x1" is really part of the opcode
10046          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
10047          emitImm8((byte)imm);
10048        } else {
10049          setMachineCodes(mi++, (byte) 0x81);
10050          // "register 0x1" is really part of the opcode
10051          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
10052          emitImm32(imm);
10053        }
10054        if (lister != null) lister.RDI(miStart, "OR", dstBase, dstDisp, imm);
10055      }
10056    
10057      /**
10058       * Generate a register-offset--immediate OR. That is,
10059       * <PRE>
10060       * [dstIndex<<dstScale + dstDisp] |=  (quad)  imm
10061       * </PRE>
10062       *
10063       * @param dstIndex the destination index register
10064       * @param dstScale the destination shift amount
10065       * @param dstDisp the destination displacement
10066       * @param imm immediate
10067       */
10068      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10069      public final void emitOR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
10070        int miStart = mi;
10071        // no group 1 to 4 prefix byte
10072        generateREXprefix(true, null, dstIndex, null);
10073        // single byte opcode
10074        if (fits(imm,8)) {
10075          setMachineCodes(mi++, (byte) 0x83);
10076          // "register 0x1" is really part of the opcode
10077          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
10078          emitImm8((byte)imm);
10079        } else {
10080          setMachineCodes(mi++, (byte) 0x81);
10081          // "register 0x1" is really part of the opcode
10082          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
10083          emitImm32(imm);
10084        }
10085        if (lister != null) lister.RFDI(miStart, "OR", dstIndex, dstScale, dstDisp, imm);
10086      }
10087    
10088      /**
10089       * Generate a absolute--immediate OR. That is,
10090       * <PRE>
10091       * [dstDisp] |=  (quad)  imm
10092       * </PRE>
10093       *
10094       * @param dstDisp the destination displacement
10095       * @param imm immediate
10096       */
10097      public final void emitOR_Abs_Imm_Quad(Address dstDisp, int imm) {
10098        int miStart = mi;
10099        // no group 1 to 4 prefix byte
10100        generateREXprefix(true, null, null, null);
10101        // single byte opcode
10102        if (fits(imm,8)) {
10103          setMachineCodes(mi++, (byte) 0x83);
10104          // "register 0x1" is really part of the opcode
10105          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
10106          emitImm8((byte)imm);
10107        } else {
10108          setMachineCodes(mi++, (byte) 0x81);
10109          // "register 0x1" is really part of the opcode
10110          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
10111          emitImm32(imm);
10112        }
10113        if (lister != null) lister.RAI(miStart, "OR", dstDisp, imm);
10114      }
10115    
10116      /**
10117       * Generate a register-index--immediate OR. That is,
10118       * <PRE>
10119       * [dstBase + dstIndex<<dstScale + dstDisp] |=  (quad)  imm
10120       * </PRE>
10121       *
10122       * @param dstBase the destination base register
10123       * @param dstIndex the destination index register
10124       * @param dstScale the destination shift amount
10125       * @param dstDisp the destination displacement
10126       * @param imm immediate
10127       */
10128      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10129      public final void emitOR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
10130        int miStart = mi;
10131        // no group 1 to 4 prefix byte
10132        generateREXprefix(true, null, dstIndex, dstBase);
10133        // single byte opcode
10134        if (fits(imm,8)) {
10135          setMachineCodes(mi++, (byte) 0x83);
10136          // "register 0x1" is really part of the opcode
10137          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
10138          emitImm8((byte)imm);
10139        } else {
10140          setMachineCodes(mi++, (byte) 0x81);
10141          // "register 0x1" is really part of the opcode
10142          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
10143          emitImm32(imm);
10144        }
10145        if (lister != null) lister.RXDI(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, imm);
10146      }
10147    
10148      /**
10149       * Generate a register(indirect)--immediate OR. That is,
10150       * <PRE>
10151       * [dstBase] |=  (quad)  imm
10152       * </PRE>
10153       *
10154       * @param dstBase the destination base register
10155       * @param imm immediate
10156       */
10157      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10158      public final void emitOR_RegInd_Imm_Quad(GPR dstBase, int imm) {
10159        int miStart = mi;
10160        // no group 1 to 4 prefix byte
10161        generateREXprefix(true, null, null, dstBase);
10162        // single byte opcode
10163        if (fits(imm,8)) {
10164          setMachineCodes(mi++, (byte) 0x83);
10165          // "register 0x1" is really part of the opcode
10166          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
10167          emitImm8((byte)imm);
10168        } else {
10169          setMachineCodes(mi++, (byte) 0x81);
10170          // "register 0x1" is really part of the opcode
10171          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
10172          emitImm32(imm);
10173        }
10174        if (lister != null) lister.RNI(miStart, "OR", dstBase, imm);
10175      }
10176    
10177      /**
10178       * Generate a register--immediate OR. That is,
10179       * <PRE>
10180       *  dstReg |= (byte) imm
10181       * </PRE>
10182       *
10183       * @param dstReg the destination register
10184       * @param imm immediate
10185       */
10186      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10187      public final void emitOR_Reg_Imm_Byte(GPR dstReg, int imm) {
10188        int miStart = mi;
10189        if (dstReg == EAX) {
10190          setMachineCodes(mi++, (byte) 0x0C);
10191          emitImm8(imm);
10192        } else {
10193          generateREXprefix(false, null, null, dstReg);
10194          setMachineCodes(mi++, (byte) 0x80);
10195          // "register 0x1" is really part of the opcode
10196          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
10197          emitImm8(imm);
10198        }
10199        if (lister != null) lister.RI(miStart, "OR", dstReg, imm);
10200      }
10201    
10202      /**
10203       * Generate a register-displacement--immediate OR. That is,
10204       * <PRE>
10205       * [dstBase + dstDisp] |= (byte) imm
10206       * </PRE>
10207       *
10208       * @param dstBase the destination register
10209       * @param dstDisp the destination displacement
10210       * @param imm immediate
10211       */
10212      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10213      public final void emitOR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
10214        int miStart = mi;
10215        generateREXprefix(false, null, null, dstBase);
10216        setMachineCodes(mi++, (byte) 0x80);
10217        // "register 0x1" is really part of the opcode
10218        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
10219        emitImm8(imm);
10220        if (lister != null) lister.RDI(miStart, "OR", dstBase, dstDisp, imm);
10221      }
10222    
10223      /**
10224       * Generate a register-index--immediate OR. That is,
10225       * <PRE>
10226       * [dstBase + dstIndex<<scale + dstDisp] |= (byte) imm
10227       * </PRE>
10228       *
10229       * @param dstBase the destination base register
10230       * @param dstIndex the destination index register
10231       * @param dstScale the destination shift amount
10232       * @param dstDisp the destination displacement
10233       * @param imm immediate
10234       */
10235      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10236      public final void emitOR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
10237        int miStart = mi;
10238        generateREXprefix(false, null, dstIndex, dstBase);
10239        setMachineCodes(mi++, (byte) 0x80);
10240        // "register 0x1" is really part of the opcode
10241        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
10242        emitImm8(imm);
10243        if (lister != null) lister.RXDI(miStart, "OR", dstBase, dstIndex, dstScale, dstDisp, imm);
10244      }
10245    
10246      /**
10247       * Generate a register-offset--immediate OR. That is,
10248       * <PRE>
10249       * [dstIndex<<dstScale + dstDisp] |= (byte) imm
10250       * </PRE>
10251       *
10252       * @param dstIndex the destination index register
10253       * @param dstScale the destination shift amount
10254       * @param dstDisp the destination displacement
10255       * @param imm immediate
10256       */
10257      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10258      public final void emitOR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
10259        int miStart = mi;
10260        generateREXprefix(false, null, dstIndex, null);
10261        setMachineCodes(mi++, (byte) 0x80);
10262        // "register 0x1" is really part of the opcode
10263        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
10264        emitImm8(imm);
10265        if (lister != null) lister.RFDI(miStart, "OR", dstIndex, dstScale, dstDisp, imm);
10266      }
10267    
10268      /**
10269       * Generate a absolute--immediate OR. That is,
10270       * <PRE>
10271       * [dstDisp] |= (byte) imm
10272       * </PRE>
10273       *
10274       * @param dstDisp the destination displacement
10275       * @param imm immediate
10276       */
10277      public final void emitOR_Abs_Imm_Byte(Address dstDisp, int imm) {
10278        int miStart = mi;
10279        generateREXprefix(false, null, null, null);
10280        setMachineCodes(mi++, (byte) 0x80);
10281        // "register 0x1" is really part of the opcode
10282        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
10283        emitImm8(imm);
10284        if (lister != null) lister.RAI(miStart, "OR", dstDisp, imm);
10285      }
10286    
10287      /**
10288       * Generate a register(indirect)--immediate OR. That is,
10289       * <PRE>
10290       * [dstBase] |= (byte) imm
10291       * </PRE>
10292       *
10293       * @param dstBase the destination base register
10294       * @param imm immediate
10295       */
10296      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10297      public final void emitOR_RegInd_Imm_Byte(GPR dstBase, int imm) {
10298        int miStart = mi;
10299        generateREXprefix(false, null, null, dstBase);
10300        setMachineCodes(mi++, (byte) 0x80);
10301        // "register 0x1" is really part of the opcode
10302        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
10303        emitImm8(imm);
10304        if (lister != null) lister.RNI(miStart, "OR", dstBase, imm);
10305      }
10306    
10307      /**
10308       * Generate a register(indirect)--register SBB. That is,
10309       * <PRE>
10310       * [dstBase] -CF=  srcReg
10311       * </PRE>
10312       *
10313       * @param dstBase the destination base
10314       * @param srcReg the source register
10315       */
10316      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10317      public final void emitSBB_RegInd_Reg(GPR dstBase, GPR srcReg) {
10318        int miStart = mi;
10319        // no group 1 to 4 prefix byte
10320        generateREXprefix(false, srcReg, null, dstBase);
10321        // single byte opcode
10322        setMachineCodes(mi++, (byte) 0x19);
10323        emitRegIndirectRegOperands(dstBase, srcReg);
10324        if (lister != null) lister.RNR(miStart, "SBB", dstBase, srcReg);
10325      }
10326    
10327      /**
10328       * Generate a register-offset--register SBB. That is,
10329       * <PRE>
10330       * [dstReg<<dstScale + dstDisp] -CF=  srcReg
10331       * </PRE>
10332       *
10333       * @param dstIndex the destination index register
10334       * @param dstScale the destination shift amount
10335       * @param dstDisp the destination displacement
10336       * @param srcReg the source register
10337       */
10338      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
10339      public final void emitSBB_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
10340        int miStart = mi;
10341        // no group 1 to 4 prefix byte
10342        generateREXprefix(false, srcReg, dstIndex, null);
10343        // single byte opcode
10344        setMachineCodes(mi++, (byte) 0x19);
10345        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
10346        if (lister != null) lister.RFDR(miStart, "SBB", dstIndex, dstScale, dstDisp, srcReg);
10347      }
10348    
10349      /**
10350       * Generate a absolute--register SBB. That is,
10351       * <PRE>
10352       * [dstDisp] -CF=  srcReg
10353       * </PRE>
10354       *
10355       * @param dstDisp the destination address
10356       * @param srcReg the source register
10357       */
10358      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
10359      public final void emitSBB_Abs_Reg(Address dstDisp, GPR srcReg) {
10360        int miStart = mi;
10361        // no group 1 to 4 prefix byte
10362        generateREXprefix(false, srcReg, null, null);
10363        // single byte opcode
10364        setMachineCodes(mi++, (byte) 0x19);
10365        emitAbsRegOperands(dstDisp, srcReg);
10366        if (lister != null) lister.RAR(miStart, "SBB", dstDisp, srcReg);
10367      }
10368    
10369      /**
10370       * Generate a register-index--register SBB. That is,
10371       * <PRE>
10372       * [dstBase + dstIndex<<dstScale + dstDisp] -CF=  srcReg
10373       * </PRE>
10374       *
10375       * @param dstBase the base register
10376       * @param dstIndex the destination index register
10377       * @param dstScale the destination shift amount
10378       * @param dstDisp the destination displacement
10379       * @param srcReg the source register
10380       */
10381      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
10382      public final void emitSBB_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
10383        int miStart = mi;
10384        // no group 1 to 4 prefix byte
10385        generateREXprefix(false, srcReg, dstIndex, dstBase);
10386        // single byte opcode
10387        setMachineCodes(mi++, (byte) 0x19);
10388        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
10389        if (lister != null) lister.RXDR(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, srcReg);
10390      }
10391    
10392      /**
10393       * Generate a register-displacement--register SBB. That is,
10394       * <PRE>
10395       * [dstBase + dstDisp] -CF=  srcReg
10396       * </PRE>
10397       *
10398       * @param dstBase the base register
10399       * @param dstDisp the destination displacement
10400       * @param srcReg the source register
10401       */
10402      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
10403      public final void emitSBB_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
10404        int miStart = mi;
10405        // no group 1 to 4 prefix byte
10406        generateREXprefix(false, srcReg, null, dstBase);
10407        // single byte opcode
10408        setMachineCodes(mi++, (byte) 0x19);
10409        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
10410        if (lister != null) lister.RDR(miStart, "SBB", dstBase, dstDisp, srcReg);
10411      }
10412    
10413      /**
10414       * Generate a register--register SBB. That is,
10415       * <PRE>
10416       * dstReg -CF=  srcReg
10417       * </PRE>
10418       *
10419       * @param dstReg the destination register
10420       * @param srcReg the source register
10421       */
10422      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10423      public final void emitSBB_Reg_Reg(GPR dstReg, GPR srcReg) {
10424        int miStart = mi;
10425        // no group 1 to 4 prefix byte
10426        generateREXprefix(false, srcReg, null, dstReg);
10427        // single byte opcode
10428        setMachineCodes(mi++, (byte) 0x19);
10429        emitRegRegOperands(dstReg, srcReg);
10430        if (lister != null) lister.RR(miStart, "SBB", dstReg, srcReg);
10431      }
10432    
10433      /**
10434       * Generate a register--register-displacement SBB. That is,
10435       * <PRE>
10436       * dstReg -CF=  [srcReg + srcDisp]
10437       * </PRE>
10438       *
10439       * @param dstReg the destination register
10440       * @param srcBase the source register
10441       * @param srcDisp the source displacement
10442       */
10443      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10444      public final void emitSBB_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
10445        int miStart = mi;
10446        // no group 1 to 4 prefix byte
10447        generateREXprefix(false, dstReg, null, srcBase);
10448        // single byte opcode
10449        setMachineCodes(mi++, (byte) 0x1B);
10450        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
10451        if (lister != null) lister.RRD(miStart, "SBB", dstReg, srcBase, srcDisp);
10452      }
10453    
10454      /**
10455       * Generate a register--register-offset SBB. That is,
10456       * <PRE>
10457       * dstReg -CF=  [srcIndex<<srcScale + srcDisp]
10458       * </PRE>
10459       *
10460       * @param dstReg the destination register
10461       * @param srcIndex the source index register
10462       * @param srcScale the source shift amount
10463       * @param srcDisp the source displacement
10464       */
10465      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10466      public final void emitSBB_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
10467        int miStart = mi;
10468        // no group 1 to 4 prefix byte
10469        generateREXprefix(false, dstReg, srcIndex, null);
10470        // single byte opcode
10471        setMachineCodes(mi++, (byte) 0x1B);
10472        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
10473        if (lister != null) lister.RRFD(miStart, "SBB", dstReg, srcIndex, srcScale, srcDisp);
10474      }
10475    
10476      /**
10477       * Generate a register--register-offset SBB. That is,
10478       * <PRE>
10479       * dstReg -CF=  [srcDisp]
10480       * </PRE>
10481       *
10482       * @param dstReg the destination register
10483       * @param srcDisp the source displacement
10484       */
10485      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10486      public final void emitSBB_Reg_Abs(GPR dstReg, Address srcDisp) {
10487        int miStart = mi;
10488        // no group 1 to 4 prefix byte
10489        generateREXprefix(false, dstReg, null, null);
10490        // single byte opcode
10491        setMachineCodes(mi++, (byte) 0x1B);
10492        emitAbsRegOperands(srcDisp, dstReg);
10493        if (lister != null) lister.RRA(miStart, "SBB", dstReg, srcDisp);
10494      }
10495    
10496      /**
10497       * Generate a register--register-offset SBB. That is,
10498       * <PRE>
10499       * dstReg -CF=  [srcBase + srcIndex<<srcScale + srcDisp]
10500       * </PRE>
10501       *
10502       * @param dstReg the destination register
10503       * @param srcBase the source base register
10504       * @param srcIndex the source index register
10505       * @param srcScale the source shift amount
10506       * @param srcDisp the source displacement
10507       */
10508      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
10509      public final void emitSBB_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
10510        int miStart = mi;
10511        // no group 1 to 4 prefix byte
10512        generateREXprefix(false, dstReg, srcIndex, srcBase);
10513        // single byte opcode
10514        setMachineCodes(mi++, (byte) 0x1B);
10515        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
10516        if (lister != null) lister.RRXD(miStart, "SBB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
10517      }
10518    
10519      /**
10520       * Generate a register--register(indirect) SBB. That is,
10521       * <PRE>
10522       * dstReg -CF=  [srcBase]
10523       * </PRE>
10524       *
10525       * @param dstReg the destination register
10526       * @param srcBase the source base register
10527       */
10528      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10529      public final void emitSBB_Reg_RegInd(GPR dstReg, GPR srcBase) {
10530        int miStart = mi;
10531        // no group 1 to 4 prefix byte
10532        generateREXprefix(false, dstReg, null, srcBase);
10533        // single byte opcode
10534        setMachineCodes(mi++, (byte) 0x1B);
10535        emitRegIndirectRegOperands(srcBase, dstReg);
10536        if (lister != null) lister.RRN(miStart, "SBB", dstReg, srcBase);
10537      }
10538    
10539      /**
10540       * Generate a register(indirect)--register SBB. That is,
10541       * <PRE>
10542       * [dstBase] -CF=  (word)  srcReg
10543       * </PRE>
10544       *
10545       * @param dstBase the destination base
10546       * @param srcReg the source register
10547       */
10548      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10549      public final void emitSBB_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
10550        int miStart = mi;
10551        setMachineCodes(mi++, (byte) 0x66);
10552        generateREXprefix(false, srcReg, null, dstBase);
10553        // single byte opcode
10554        setMachineCodes(mi++, (byte) 0x19);
10555        emitRegIndirectRegOperands(dstBase, srcReg);
10556        if (lister != null) lister.RNR(miStart, "SBB", dstBase, srcReg);
10557      }
10558    
10559      /**
10560       * Generate a register-offset--register SBB. That is,
10561       * <PRE>
10562       * [dstReg<<dstScale + dstDisp] -CF=  (word)  srcReg
10563       * </PRE>
10564       *
10565       * @param dstIndex the destination index register
10566       * @param dstScale the destination shift amount
10567       * @param dstDisp the destination displacement
10568       * @param srcReg the source register
10569       */
10570      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
10571      public final void emitSBB_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
10572        int miStart = mi;
10573        setMachineCodes(mi++, (byte) 0x66);
10574        generateREXprefix(false, srcReg, dstIndex, null);
10575        // single byte opcode
10576        setMachineCodes(mi++, (byte) 0x19);
10577        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
10578        if (lister != null) lister.RFDR(miStart, "SBB", dstIndex, dstScale, dstDisp, srcReg);
10579      }
10580    
10581      /**
10582       * Generate a absolute--register SBB. That is,
10583       * <PRE>
10584       * [dstDisp] -CF=  (word)  srcReg
10585       * </PRE>
10586       *
10587       * @param dstDisp the destination address
10588       * @param srcReg the source register
10589       */
10590      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
10591      public final void emitSBB_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
10592        int miStart = mi;
10593        setMachineCodes(mi++, (byte) 0x66);
10594        generateREXprefix(false, srcReg, null, null);
10595        // single byte opcode
10596        setMachineCodes(mi++, (byte) 0x19);
10597        emitAbsRegOperands(dstDisp, srcReg);
10598        if (lister != null) lister.RAR(miStart, "SBB", dstDisp, srcReg);
10599      }
10600    
10601      /**
10602       * Generate a register-index--register SBB. That is,
10603       * <PRE>
10604       * [dstBase + dstIndex<<dstScale + dstDisp] -CF=  (word)  srcReg
10605       * </PRE>
10606       *
10607       * @param dstBase the base register
10608       * @param dstIndex the destination index register
10609       * @param dstScale the destination shift amount
10610       * @param dstDisp the destination displacement
10611       * @param srcReg the source register
10612       */
10613      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
10614      public final void emitSBB_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
10615        int miStart = mi;
10616        setMachineCodes(mi++, (byte) 0x66);
10617        generateREXprefix(false, srcReg, dstIndex, dstBase);
10618        // single byte opcode
10619        setMachineCodes(mi++, (byte) 0x19);
10620        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
10621        if (lister != null) lister.RXDR(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, srcReg);
10622      }
10623    
10624      /**
10625       * Generate a register-displacement--register SBB. That is,
10626       * <PRE>
10627       * [dstBase + dstDisp] -CF=  (word)  srcReg
10628       * </PRE>
10629       *
10630       * @param dstBase the base register
10631       * @param dstDisp the destination displacement
10632       * @param srcReg the source register
10633       */
10634      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
10635      public final void emitSBB_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
10636        int miStart = mi;
10637        setMachineCodes(mi++, (byte) 0x66);
10638        generateREXprefix(false, srcReg, null, dstBase);
10639        // single byte opcode
10640        setMachineCodes(mi++, (byte) 0x19);
10641        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
10642        if (lister != null) lister.RDR(miStart, "SBB", dstBase, dstDisp, srcReg);
10643      }
10644    
10645      /**
10646       * Generate a register--register SBB. That is,
10647       * <PRE>
10648       * dstReg -CF=  (word)  srcReg
10649       * </PRE>
10650       *
10651       * @param dstReg the destination register
10652       * @param srcReg the source register
10653       */
10654      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10655      public final void emitSBB_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
10656        int miStart = mi;
10657        setMachineCodes(mi++, (byte) 0x66);
10658        generateREXprefix(false, srcReg, null, dstReg);
10659        // single byte opcode
10660        setMachineCodes(mi++, (byte) 0x19);
10661        emitRegRegOperands(dstReg, srcReg);
10662        if (lister != null) lister.RR(miStart, "SBB", dstReg, srcReg);
10663      }
10664    
10665      /**
10666       * Generate a register--register-displacement SBB. That is,
10667       * <PRE>
10668       * dstReg -CF=  (word)  [srcReg + srcDisp]
10669       * </PRE>
10670       *
10671       * @param dstReg the destination register
10672       * @param srcBase the source register
10673       * @param srcDisp the source displacement
10674       */
10675      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10676      public final void emitSBB_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
10677        int miStart = mi;
10678        setMachineCodes(mi++, (byte) 0x66);
10679        generateREXprefix(false, dstReg, null, srcBase);
10680        // single byte opcode
10681        setMachineCodes(mi++, (byte) 0x1B);
10682        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
10683        if (lister != null) lister.RRD(miStart, "SBB", dstReg, srcBase, srcDisp);
10684      }
10685    
10686      /**
10687       * Generate a register--register-offset SBB. That is,
10688       * <PRE>
10689       * dstReg -CF=  (word)  [srcIndex<<srcScale + srcDisp]
10690       * </PRE>
10691       *
10692       * @param dstReg the destination register
10693       * @param srcIndex the source index register
10694       * @param srcScale the source shift amount
10695       * @param srcDisp the source displacement
10696       */
10697      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10698      public final void emitSBB_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
10699        int miStart = mi;
10700        setMachineCodes(mi++, (byte) 0x66);
10701        generateREXprefix(false, dstReg, srcIndex, null);
10702        // single byte opcode
10703        setMachineCodes(mi++, (byte) 0x1B);
10704        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
10705        if (lister != null) lister.RRFD(miStart, "SBB", dstReg, srcIndex, srcScale, srcDisp);
10706      }
10707    
10708      /**
10709       * Generate a register--register-offset SBB. That is,
10710       * <PRE>
10711       * dstReg -CF=  (word)  [srcDisp]
10712       * </PRE>
10713       *
10714       * @param dstReg the destination register
10715       * @param srcDisp the source displacement
10716       */
10717      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10718      public final void emitSBB_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
10719        int miStart = mi;
10720        setMachineCodes(mi++, (byte) 0x66);
10721        generateREXprefix(false, dstReg, null, null);
10722        // single byte opcode
10723        setMachineCodes(mi++, (byte) 0x1B);
10724        emitAbsRegOperands(srcDisp, dstReg);
10725        if (lister != null) lister.RRA(miStart, "SBB", dstReg, srcDisp);
10726      }
10727    
10728      /**
10729       * Generate a register--register-offset SBB. That is,
10730       * <PRE>
10731       * dstReg -CF=  (word)  [srcBase + srcIndex<<srcScale + srcDisp]
10732       * </PRE>
10733       *
10734       * @param dstReg the destination register
10735       * @param srcBase the source base register
10736       * @param srcIndex the source index register
10737       * @param srcScale the source shift amount
10738       * @param srcDisp the source displacement
10739       */
10740      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
10741      public final void emitSBB_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
10742        int miStart = mi;
10743        setMachineCodes(mi++, (byte) 0x66);
10744        generateREXprefix(false, dstReg, srcIndex, srcBase);
10745        // single byte opcode
10746        setMachineCodes(mi++, (byte) 0x1B);
10747        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
10748        if (lister != null) lister.RRXD(miStart, "SBB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
10749      }
10750    
10751      /**
10752       * Generate a register--register(indirect) SBB. That is,
10753       * <PRE>
10754       * dstReg -CF=  (word)  [srcBase]
10755       * </PRE>
10756       *
10757       * @param dstReg the destination register
10758       * @param srcBase the source base register
10759       */
10760      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10761      public final void emitSBB_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
10762        int miStart = mi;
10763        setMachineCodes(mi++, (byte) 0x66);
10764        generateREXprefix(false, dstReg, null, srcBase);
10765        // single byte opcode
10766        setMachineCodes(mi++, (byte) 0x1B);
10767        emitRegIndirectRegOperands(srcBase, dstReg);
10768        if (lister != null) lister.RRN(miStart, "SBB", dstReg, srcBase);
10769      }
10770    
10771      /**
10772       * Generate a register(indirect)--register SBB. That is,
10773       * <PRE>
10774       * [dstBase] -CF=  (quad)  srcReg
10775       * </PRE>
10776       *
10777       * @param dstBase the destination base
10778       * @param srcReg the source register
10779       */
10780      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10781      public final void emitSBB_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
10782        int miStart = mi;
10783        // no group 1 to 4 prefix byte
10784        generateREXprefix(true, srcReg, null, dstBase);
10785        // single byte opcode
10786        setMachineCodes(mi++, (byte) 0x19);
10787        emitRegIndirectRegOperands(dstBase, srcReg);
10788        if (lister != null) lister.RNR(miStart, "SBB", dstBase, srcReg);
10789      }
10790    
10791      /**
10792       * Generate a register-offset--register SBB. That is,
10793       * <PRE>
10794       * [dstReg<<dstScale + dstDisp] -CF=  (quad)  srcReg
10795       * </PRE>
10796       *
10797       * @param dstIndex the destination index register
10798       * @param dstScale the destination shift amount
10799       * @param dstDisp the destination displacement
10800       * @param srcReg the source register
10801       */
10802      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
10803      public final void emitSBB_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
10804        int miStart = mi;
10805        // no group 1 to 4 prefix byte
10806        generateREXprefix(true, srcReg, dstIndex, null);
10807        // single byte opcode
10808        setMachineCodes(mi++, (byte) 0x19);
10809        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
10810        if (lister != null) lister.RFDR(miStart, "SBB", dstIndex, dstScale, dstDisp, srcReg);
10811      }
10812    
10813      /**
10814       * Generate a absolute--register SBB. That is,
10815       * <PRE>
10816       * [dstDisp] -CF=  (quad)  srcReg
10817       * </PRE>
10818       *
10819       * @param dstDisp the destination address
10820       * @param srcReg the source register
10821       */
10822      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
10823      public final void emitSBB_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
10824        int miStart = mi;
10825        // no group 1 to 4 prefix byte
10826        generateREXprefix(true, srcReg, null, null);
10827        // single byte opcode
10828        setMachineCodes(mi++, (byte) 0x19);
10829        emitAbsRegOperands(dstDisp, srcReg);
10830        if (lister != null) lister.RAR(miStart, "SBB", dstDisp, srcReg);
10831      }
10832    
10833      /**
10834       * Generate a register-index--register SBB. That is,
10835       * <PRE>
10836       * [dstBase + dstIndex<<dstScale + dstDisp] -CF=  (quad)  srcReg
10837       * </PRE>
10838       *
10839       * @param dstBase the base register
10840       * @param dstIndex the destination index register
10841       * @param dstScale the destination shift amount
10842       * @param dstDisp the destination displacement
10843       * @param srcReg the source register
10844       */
10845      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
10846      public final void emitSBB_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
10847        int miStart = mi;
10848        // no group 1 to 4 prefix byte
10849        generateREXprefix(true, srcReg, dstIndex, dstBase);
10850        // single byte opcode
10851        setMachineCodes(mi++, (byte) 0x19);
10852        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
10853        if (lister != null) lister.RXDR(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, srcReg);
10854      }
10855    
10856      /**
10857       * Generate a register-displacement--register SBB. That is,
10858       * <PRE>
10859       * [dstBase + dstDisp] -CF=  (quad)  srcReg
10860       * </PRE>
10861       *
10862       * @param dstBase the base register
10863       * @param dstDisp the destination displacement
10864       * @param srcReg the source register
10865       */
10866      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
10867      public final void emitSBB_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
10868        int miStart = mi;
10869        // no group 1 to 4 prefix byte
10870        generateREXprefix(true, srcReg, null, dstBase);
10871        // single byte opcode
10872        setMachineCodes(mi++, (byte) 0x19);
10873        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
10874        if (lister != null) lister.RDR(miStart, "SBB", dstBase, dstDisp, srcReg);
10875      }
10876    
10877      /**
10878       * Generate a register--register SBB. That is,
10879       * <PRE>
10880       * dstReg -CF=  (quad)  srcReg
10881       * </PRE>
10882       *
10883       * @param dstReg the destination register
10884       * @param srcReg the source register
10885       */
10886      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10887      public final void emitSBB_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
10888        int miStart = mi;
10889        // no group 1 to 4 prefix byte
10890        generateREXprefix(true, srcReg, null, dstReg);
10891        // single byte opcode
10892        setMachineCodes(mi++, (byte) 0x19);
10893        emitRegRegOperands(dstReg, srcReg);
10894        if (lister != null) lister.RR(miStart, "SBB", dstReg, srcReg);
10895      }
10896    
10897      /**
10898       * Generate a register--register-displacement SBB. That is,
10899       * <PRE>
10900       * dstReg -CF=  (quad)  [srcReg + srcDisp]
10901       * </PRE>
10902       *
10903       * @param dstReg the destination register
10904       * @param srcBase the source register
10905       * @param srcDisp the source displacement
10906       */
10907      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10908      public final void emitSBB_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
10909        int miStart = mi;
10910        // no group 1 to 4 prefix byte
10911        generateREXprefix(true, dstReg, null, srcBase);
10912        // single byte opcode
10913        setMachineCodes(mi++, (byte) 0x1B);
10914        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
10915        if (lister != null) lister.RRD(miStart, "SBB", dstReg, srcBase, srcDisp);
10916      }
10917    
10918      /**
10919       * Generate a register--register-offset SBB. That is,
10920       * <PRE>
10921       * dstReg -CF=  (quad)  [srcIndex<<srcScale + srcDisp]
10922       * </PRE>
10923       *
10924       * @param dstReg the destination register
10925       * @param srcIndex the source index register
10926       * @param srcScale the source shift amount
10927       * @param srcDisp the source displacement
10928       */
10929      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10930      public final void emitSBB_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
10931        int miStart = mi;
10932        // no group 1 to 4 prefix byte
10933        generateREXprefix(true, dstReg, srcIndex, null);
10934        // single byte opcode
10935        setMachineCodes(mi++, (byte) 0x1B);
10936        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
10937        if (lister != null) lister.RRFD(miStart, "SBB", dstReg, srcIndex, srcScale, srcDisp);
10938      }
10939    
10940      /**
10941       * Generate a register--register-offset SBB. That is,
10942       * <PRE>
10943       * dstReg -CF=  (quad)  [srcDisp]
10944       * </PRE>
10945       *
10946       * @param dstReg the destination register
10947       * @param srcDisp the source displacement
10948       */
10949      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
10950      public final void emitSBB_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
10951        int miStart = mi;
10952        // no group 1 to 4 prefix byte
10953        generateREXprefix(true, dstReg, null, null);
10954        // single byte opcode
10955        setMachineCodes(mi++, (byte) 0x1B);
10956        emitAbsRegOperands(srcDisp, dstReg);
10957        if (lister != null) lister.RRA(miStart, "SBB", dstReg, srcDisp);
10958      }
10959    
10960      /**
10961       * Generate a register--register-offset SBB. That is,
10962       * <PRE>
10963       * dstReg -CF=  (quad)  [srcBase + srcIndex<<srcScale + srcDisp]
10964       * </PRE>
10965       *
10966       * @param dstReg the destination register
10967       * @param srcBase the source base register
10968       * @param srcIndex the source index register
10969       * @param srcScale the source shift amount
10970       * @param srcDisp the source displacement
10971       */
10972      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
10973      public final void emitSBB_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
10974        int miStart = mi;
10975        // no group 1 to 4 prefix byte
10976        generateREXprefix(true, dstReg, srcIndex, srcBase);
10977        // single byte opcode
10978        setMachineCodes(mi++, (byte) 0x1B);
10979        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
10980        if (lister != null) lister.RRXD(miStart, "SBB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
10981      }
10982    
10983      /**
10984       * Generate a register--register(indirect) SBB. That is,
10985       * <PRE>
10986       * dstReg -CF=  (quad)  [srcBase]
10987       * </PRE>
10988       *
10989       * @param dstReg the destination register
10990       * @param srcBase the source base register
10991       */
10992      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
10993      public final void emitSBB_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
10994        int miStart = mi;
10995        // no group 1 to 4 prefix byte
10996        generateREXprefix(true, dstReg, null, srcBase);
10997        // single byte opcode
10998        setMachineCodes(mi++, (byte) 0x1B);
10999        emitRegIndirectRegOperands(srcBase, dstReg);
11000        if (lister != null) lister.RRN(miStart, "SBB", dstReg, srcBase);
11001      }
11002    
11003      /**
11004       * Generate a register(indirect)--register SBB. That is,
11005       * <PRE>
11006       * [dstBase] -CF=  (byte)  srcReg
11007       * </PRE>
11008       *
11009       * @param dstBase the destination base
11010       * @param srcReg the source register
11011       */
11012      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
11013      public final void emitSBB_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
11014        int miStart = mi;
11015        // no group 1 to 4 prefix byte
11016        generateREXprefix(false, srcReg, null, dstBase);
11017        // single byte opcode
11018        setMachineCodes(mi++, (byte) 0x18);
11019        emitRegIndirectRegOperands(dstBase, srcReg);
11020        if (lister != null) lister.RNR(miStart, "SBB", dstBase, srcReg);
11021      }
11022    
11023      /**
11024       * Generate a register-offset--register SBB. That is,
11025       * <PRE>
11026       * [dstReg<<dstScale + dstDisp] -CF=  (byte)  srcReg
11027       * </PRE>
11028       *
11029       * @param dstIndex the destination index register
11030       * @param dstScale the destination shift amount
11031       * @param dstDisp the destination displacement
11032       * @param srcReg the source register
11033       */
11034      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
11035      public final void emitSBB_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
11036        int miStart = mi;
11037        // no group 1 to 4 prefix byte
11038        generateREXprefix(false, srcReg, dstIndex, null);
11039        // single byte opcode
11040        setMachineCodes(mi++, (byte) 0x18);
11041        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
11042        if (lister != null) lister.RFDR(miStart, "SBB", dstIndex, dstScale, dstDisp, srcReg);
11043      }
11044    
11045      /**
11046       * Generate a absolute--register SBB. That is,
11047       * <PRE>
11048       * [dstDisp] -CF=  (byte)  srcReg
11049       * </PRE>
11050       *
11051       * @param dstDisp the destination address
11052       * @param srcReg the source register
11053       */
11054      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
11055      public final void emitSBB_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
11056        int miStart = mi;
11057        // no group 1 to 4 prefix byte
11058        generateREXprefix(false, srcReg, null, null);
11059        // single byte opcode
11060        setMachineCodes(mi++, (byte) 0x18);
11061        emitAbsRegOperands(dstDisp, srcReg);
11062        if (lister != null) lister.RAR(miStart, "SBB", dstDisp, srcReg);
11063      }
11064    
11065      /**
11066       * Generate a register-index--register SBB. That is,
11067       * <PRE>
11068       * [dstBase + dstIndex<<dstScale + dstDisp] -CF=  (byte)  srcReg
11069       * </PRE>
11070       *
11071       * @param dstBase the base register
11072       * @param dstIndex the destination index register
11073       * @param dstScale the destination shift amount
11074       * @param dstDisp the destination displacement
11075       * @param srcReg the source register
11076       */
11077      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
11078      public final void emitSBB_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
11079        int miStart = mi;
11080        // no group 1 to 4 prefix byte
11081        generateREXprefix(false, srcReg, dstIndex, dstBase);
11082        // single byte opcode
11083        setMachineCodes(mi++, (byte) 0x18);
11084        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
11085        if (lister != null) lister.RXDR(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, srcReg);
11086      }
11087    
11088      /**
11089       * Generate a register-displacement--register SBB. That is,
11090       * <PRE>
11091       * [dstBase + dstDisp] -CF=  (byte)  srcReg
11092       * </PRE>
11093       *
11094       * @param dstBase the base register
11095       * @param dstDisp the destination displacement
11096       * @param srcReg the source register
11097       */
11098      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
11099      public final void emitSBB_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
11100        int miStart = mi;
11101        // no group 1 to 4 prefix byte
11102        generateREXprefix(false, srcReg, null, dstBase);
11103        // single byte opcode
11104        setMachineCodes(mi++, (byte) 0x18);
11105        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
11106        if (lister != null) lister.RDR(miStart, "SBB", dstBase, dstDisp, srcReg);
11107      }
11108    
11109      /**
11110       * Generate a register--register SBB. That is,
11111       * <PRE>
11112       * dstReg -CF=  (byte)  srcReg
11113       * </PRE>
11114       *
11115       * @param dstReg the destination register
11116       * @param srcReg the source register
11117       */
11118      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
11119      public final void emitSBB_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
11120        int miStart = mi;
11121        // no group 1 to 4 prefix byte
11122        generateREXprefix(false, srcReg, null, dstReg);
11123        // single byte opcode
11124        setMachineCodes(mi++, (byte) 0x18);
11125        emitRegRegOperands(dstReg, srcReg);
11126        if (lister != null) lister.RR(miStart, "SBB", dstReg, srcReg);
11127      }
11128    
11129      /**
11130       * Generate a register--register-displacement SBB. That is,
11131       * <PRE>
11132       * dstReg -CF=  (byte)  [srcReg + srcDisp]
11133       * </PRE>
11134       *
11135       * @param dstReg the destination register
11136       * @param srcBase the source register
11137       * @param srcDisp the source displacement
11138       */
11139      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
11140      public final void emitSBB_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
11141        int miStart = mi;
11142        // no group 1 to 4 prefix byte
11143        generateREXprefix(false, dstReg, null, srcBase);
11144        // single byte opcode
11145        setMachineCodes(mi++, (byte) 0x1A);
11146        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
11147        if (lister != null) lister.RRD(miStart, "SBB", dstReg, srcBase, srcDisp);
11148      }
11149    
11150      /**
11151       * Generate a register--register-offset SBB. That is,
11152       * <PRE>
11153       * dstReg -CF=  (byte)  [srcIndex<<srcScale + srcDisp]
11154       * </PRE>
11155       *
11156       * @param dstReg the destination register
11157       * @param srcIndex the source index register
11158       * @param srcScale the source shift amount
11159       * @param srcDisp the source displacement
11160       */
11161      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
11162      public final void emitSBB_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
11163        int miStart = mi;
11164        // no group 1 to 4 prefix byte
11165        generateREXprefix(false, dstReg, srcIndex, null);
11166        // single byte opcode
11167        setMachineCodes(mi++, (byte) 0x1A);
11168        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
11169        if (lister != null) lister.RRFD(miStart, "SBB", dstReg, srcIndex, srcScale, srcDisp);
11170      }
11171    
11172      /**
11173       * Generate a register--register-offset SBB. That is,
11174       * <PRE>
11175       * dstReg -CF=  (byte)  [srcDisp]
11176       * </PRE>
11177       *
11178       * @param dstReg the destination register
11179       * @param srcDisp the source displacement
11180       */
11181      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11182      public final void emitSBB_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
11183        int miStart = mi;
11184        // no group 1 to 4 prefix byte
11185        generateREXprefix(false, dstReg, null, null);
11186        // single byte opcode
11187        setMachineCodes(mi++, (byte) 0x1A);
11188        emitAbsRegOperands(srcDisp, dstReg);
11189        if (lister != null) lister.RRA(miStart, "SBB", dstReg, srcDisp);
11190      }
11191    
11192      /**
11193       * Generate a register--register-offset SBB. That is,
11194       * <PRE>
11195       * dstReg -CF=  (byte)  [srcBase + srcIndex<<srcScale + srcDisp]
11196       * </PRE>
11197       *
11198       * @param dstReg the destination register
11199       * @param srcBase the source base register
11200       * @param srcIndex the source index register
11201       * @param srcScale the source shift amount
11202       * @param srcDisp the source displacement
11203       */
11204      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
11205      public final void emitSBB_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
11206        int miStart = mi;
11207        // no group 1 to 4 prefix byte
11208        generateREXprefix(false, dstReg, srcIndex, srcBase);
11209        // single byte opcode
11210        setMachineCodes(mi++, (byte) 0x1A);
11211        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
11212        if (lister != null) lister.RRXD(miStart, "SBB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
11213      }
11214    
11215      /**
11216       * Generate a register--register(indirect) SBB. That is,
11217       * <PRE>
11218       * dstReg -CF=  (byte)  [srcBase]
11219       * </PRE>
11220       *
11221       * @param dstReg the destination register
11222       * @param srcBase the source base register
11223       */
11224      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
11225      public final void emitSBB_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
11226        int miStart = mi;
11227        // no group 1 to 4 prefix byte
11228        generateREXprefix(false, dstReg, null, srcBase);
11229        // single byte opcode
11230        setMachineCodes(mi++, (byte) 0x1A);
11231        emitRegIndirectRegOperands(srcBase, dstReg);
11232        if (lister != null) lister.RRN(miStart, "SBB", dstReg, srcBase);
11233      }
11234    
11235      /**
11236       * Generate a register--immediate SBB. That is,
11237       * <PRE>
11238       * dstReg -CF=  imm
11239       * </PRE>
11240       *
11241       * @param dstReg the destination register
11242       * @param imm immediate
11243       */
11244      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11245      public final void emitSBB_Reg_Imm(GPR dstReg, int imm) {
11246        int miStart = mi;
11247        // no group 1 to 4 prefix byte
11248        generateREXprefix(false, null, null, dstReg);
11249        // single byte opcode
11250        if (fits(imm,8)) {
11251          setMachineCodes(mi++, (byte) 0x83);
11252          // "register 0x3" is really part of the opcode
11253          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
11254          emitImm8((byte)imm);
11255        } else if (dstReg == EAX) {
11256          setMachineCodes(mi++, (byte) 0x1D);
11257          emitImm32(imm);
11258        } else {
11259          setMachineCodes(mi++, (byte) 0x81);
11260          // "register 0x3" is really part of the opcode
11261          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
11262          emitImm32(imm);
11263        }
11264        if (lister != null) lister.RI(miStart, "SBB", dstReg, imm);
11265      }
11266    
11267      /**
11268       * Generate a register-displacement--immediate SBB. That is,
11269       * <PRE>
11270       * [dstBase + dstDisp] -CF=  imm
11271       * </PRE>
11272       *
11273       * @param dstBase the destination register
11274       * @param dstDisp the destination displacement
11275       * @param imm immediate
11276       */
11277      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11278      public final void emitSBB_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
11279        int miStart = mi;
11280        // no group 1 to 4 prefix byte
11281        generateREXprefix(false, null, null, dstBase);
11282        // single byte opcode
11283        if (fits(imm,8)) {
11284          setMachineCodes(mi++, (byte) 0x83);
11285          // "register 0x3" is really part of the opcode
11286          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
11287          emitImm8((byte)imm);
11288        } else {
11289          setMachineCodes(mi++, (byte) 0x81);
11290          // "register 0x3" is really part of the opcode
11291          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
11292          emitImm32(imm);
11293        }
11294        if (lister != null) lister.RDI(miStart, "SBB", dstBase, dstDisp, imm);
11295      }
11296    
11297      /**
11298       * Generate a register-offset--immediate SBB. That is,
11299       * <PRE>
11300       * [dstIndex<<dstScale + dstDisp] -CF=  imm
11301       * </PRE>
11302       *
11303       * @param dstIndex the destination index register
11304       * @param dstScale the destination shift amount
11305       * @param dstDisp the destination displacement
11306       * @param imm immediate
11307       */
11308      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11309      public final void emitSBB_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
11310        int miStart = mi;
11311        // no group 1 to 4 prefix byte
11312        generateREXprefix(false, null, dstIndex, null);
11313        // single byte opcode
11314        if (fits(imm,8)) {
11315          setMachineCodes(mi++, (byte) 0x83);
11316          // "register 0x3" is really part of the opcode
11317          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11318          emitImm8((byte)imm);
11319        } else {
11320          setMachineCodes(mi++, (byte) 0x81);
11321          // "register 0x3" is really part of the opcode
11322          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11323          emitImm32(imm);
11324        }
11325        if (lister != null) lister.RFDI(miStart, "SBB", dstIndex, dstScale, dstDisp, imm);
11326      }
11327    
11328      /**
11329       * Generate a absolute--immediate SBB. That is,
11330       * <PRE>
11331       * [dstDisp] -CF=  imm
11332       * </PRE>
11333       *
11334       * @param dstDisp the destination displacement
11335       * @param imm immediate
11336       */
11337      public final void emitSBB_Abs_Imm(Address dstDisp, int imm) {
11338        int miStart = mi;
11339        // no group 1 to 4 prefix byte
11340        generateREXprefix(false, null, null, null);
11341        // single byte opcode
11342        if (fits(imm,8)) {
11343          setMachineCodes(mi++, (byte) 0x83);
11344          // "register 0x3" is really part of the opcode
11345          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
11346          emitImm8((byte)imm);
11347        } else {
11348          setMachineCodes(mi++, (byte) 0x81);
11349          // "register 0x3" is really part of the opcode
11350          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
11351          emitImm32(imm);
11352        }
11353        if (lister != null) lister.RAI(miStart, "SBB", dstDisp, imm);
11354      }
11355    
11356      /**
11357       * Generate a register-index--immediate SBB. That is,
11358       * <PRE>
11359       * [dstBase + dstIndex<<dstScale + dstDisp] -CF=  imm
11360       * </PRE>
11361       *
11362       * @param dstBase the destination base register
11363       * @param dstIndex the destination index register
11364       * @param dstScale the destination shift amount
11365       * @param dstDisp the destination displacement
11366       * @param imm immediate
11367       */
11368      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
11369      public final void emitSBB_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
11370        int miStart = mi;
11371        // no group 1 to 4 prefix byte
11372        generateREXprefix(false, null, dstIndex, dstBase);
11373        // single byte opcode
11374        if (fits(imm,8)) {
11375          setMachineCodes(mi++, (byte) 0x83);
11376          // "register 0x3" is really part of the opcode
11377          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11378          emitImm8((byte)imm);
11379        } else {
11380          setMachineCodes(mi++, (byte) 0x81);
11381          // "register 0x3" is really part of the opcode
11382          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11383          emitImm32(imm);
11384        }
11385        if (lister != null) lister.RXDI(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, imm);
11386      }
11387    
11388      /**
11389       * Generate a register(indirect)--immediate SBB. That is,
11390       * <PRE>
11391       * [dstBase] -CF=  imm
11392       * </PRE>
11393       *
11394       * @param dstBase the destination base register
11395       * @param imm immediate
11396       */
11397      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11398      public final void emitSBB_RegInd_Imm(GPR dstBase, int imm) {
11399        int miStart = mi;
11400        // no group 1 to 4 prefix byte
11401        generateREXprefix(false, null, null, dstBase);
11402        // single byte opcode
11403        if (fits(imm,8)) {
11404          setMachineCodes(mi++, (byte) 0x83);
11405          // "register 0x3" is really part of the opcode
11406          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
11407          emitImm8((byte)imm);
11408        } else {
11409          setMachineCodes(mi++, (byte) 0x81);
11410          // "register 0x3" is really part of the opcode
11411          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
11412          emitImm32(imm);
11413        }
11414        if (lister != null) lister.RNI(miStart, "SBB", dstBase, imm);
11415      }
11416    
11417      /**
11418       * Generate a register--immediate SBB. That is,
11419       * <PRE>
11420       * dstReg -CF=  (word)  imm
11421       * </PRE>
11422       *
11423       * @param dstReg the destination register
11424       * @param imm immediate
11425       */
11426      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11427      public final void emitSBB_Reg_Imm_Word(GPR dstReg, int imm) {
11428        int miStart = mi;
11429        setMachineCodes(mi++, (byte) 0x66);
11430        generateREXprefix(false, null, null, dstReg);
11431        // single byte opcode
11432        if (fits(imm,8)) {
11433          setMachineCodes(mi++, (byte) 0x83);
11434          // "register 0x3" is really part of the opcode
11435          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
11436          emitImm8((byte)imm);
11437        } else if (dstReg == EAX) {
11438          setMachineCodes(mi++, (byte) 0x1D);
11439          emitImm16(imm);
11440        } else {
11441          setMachineCodes(mi++, (byte) 0x81);
11442          // "register 0x3" is really part of the opcode
11443          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
11444          emitImm16(imm);
11445        }
11446        if (lister != null) lister.RI(miStart, "SBB", dstReg, imm);
11447      }
11448    
11449      /**
11450       * Generate a register-displacement--immediate SBB. That is,
11451       * <PRE>
11452       * [dstBase + dstDisp] -CF=  (word)  imm
11453       * </PRE>
11454       *
11455       * @param dstBase the destination register
11456       * @param dstDisp the destination displacement
11457       * @param imm immediate
11458       */
11459      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11460      public final void emitSBB_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
11461        int miStart = mi;
11462        setMachineCodes(mi++, (byte) 0x66);
11463        generateREXprefix(false, null, null, dstBase);
11464        // single byte opcode
11465        if (fits(imm,8)) {
11466          setMachineCodes(mi++, (byte) 0x83);
11467          // "register 0x3" is really part of the opcode
11468          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
11469          emitImm8((byte)imm);
11470        } else {
11471          setMachineCodes(mi++, (byte) 0x81);
11472          // "register 0x3" is really part of the opcode
11473          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
11474          emitImm16(imm);
11475        }
11476        if (lister != null) lister.RDI(miStart, "SBB", dstBase, dstDisp, imm);
11477      }
11478    
11479      /**
11480       * Generate a register-offset--immediate SBB. That is,
11481       * <PRE>
11482       * [dstIndex<<dstScale + dstDisp] -CF=  (word)  imm
11483       * </PRE>
11484       *
11485       * @param dstIndex the destination index register
11486       * @param dstScale the destination shift amount
11487       * @param dstDisp the destination displacement
11488       * @param imm immediate
11489       */
11490      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11491      public final void emitSBB_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
11492        int miStart = mi;
11493        setMachineCodes(mi++, (byte) 0x66);
11494        generateREXprefix(false, null, dstIndex, null);
11495        // single byte opcode
11496        if (fits(imm,8)) {
11497          setMachineCodes(mi++, (byte) 0x83);
11498          // "register 0x3" is really part of the opcode
11499          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11500          emitImm8((byte)imm);
11501        } else {
11502          setMachineCodes(mi++, (byte) 0x81);
11503          // "register 0x3" is really part of the opcode
11504          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11505          emitImm16(imm);
11506        }
11507        if (lister != null) lister.RFDI(miStart, "SBB", dstIndex, dstScale, dstDisp, imm);
11508      }
11509    
11510      /**
11511       * Generate a absolute--immediate SBB. That is,
11512       * <PRE>
11513       * [dstDisp] -CF=  (word)  imm
11514       * </PRE>
11515       *
11516       * @param dstDisp the destination displacement
11517       * @param imm immediate
11518       */
11519      public final void emitSBB_Abs_Imm_Word(Address dstDisp, int imm) {
11520        int miStart = mi;
11521        setMachineCodes(mi++, (byte) 0x66);
11522        generateREXprefix(false, null, null, null);
11523        // single byte opcode
11524        if (fits(imm,8)) {
11525          setMachineCodes(mi++, (byte) 0x83);
11526          // "register 0x3" is really part of the opcode
11527          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
11528          emitImm8((byte)imm);
11529        } else {
11530          setMachineCodes(mi++, (byte) 0x81);
11531          // "register 0x3" is really part of the opcode
11532          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
11533          emitImm16(imm);
11534        }
11535        if (lister != null) lister.RAI(miStart, "SBB", dstDisp, imm);
11536      }
11537    
11538      /**
11539       * Generate a register-index--immediate SBB. That is,
11540       * <PRE>
11541       * [dstBase + dstIndex<<dstScale + dstDisp] -CF=  (word)  imm
11542       * </PRE>
11543       *
11544       * @param dstBase the destination base register
11545       * @param dstIndex the destination index register
11546       * @param dstScale the destination shift amount
11547       * @param dstDisp the destination displacement
11548       * @param imm immediate
11549       */
11550      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
11551      public final void emitSBB_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
11552        int miStart = mi;
11553        setMachineCodes(mi++, (byte) 0x66);
11554        generateREXprefix(false, null, dstIndex, dstBase);
11555        // single byte opcode
11556        if (fits(imm,8)) {
11557          setMachineCodes(mi++, (byte) 0x83);
11558          // "register 0x3" is really part of the opcode
11559          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11560          emitImm8((byte)imm);
11561        } else {
11562          setMachineCodes(mi++, (byte) 0x81);
11563          // "register 0x3" is really part of the opcode
11564          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11565          emitImm16(imm);
11566        }
11567        if (lister != null) lister.RXDI(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, imm);
11568      }
11569    
11570      /**
11571       * Generate a register(indirect)--immediate SBB. That is,
11572       * <PRE>
11573       * [dstBase] -CF=  (word)  imm
11574       * </PRE>
11575       *
11576       * @param dstBase the destination base register
11577       * @param imm immediate
11578       */
11579      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11580      public final void emitSBB_RegInd_Imm_Word(GPR dstBase, int imm) {
11581        int miStart = mi;
11582        setMachineCodes(mi++, (byte) 0x66);
11583        generateREXprefix(false, null, null, dstBase);
11584        // single byte opcode
11585        if (fits(imm,8)) {
11586          setMachineCodes(mi++, (byte) 0x83);
11587          // "register 0x3" is really part of the opcode
11588          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
11589          emitImm8((byte)imm);
11590        } else {
11591          setMachineCodes(mi++, (byte) 0x81);
11592          // "register 0x3" is really part of the opcode
11593          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
11594          emitImm16(imm);
11595        }
11596        if (lister != null) lister.RNI(miStart, "SBB", dstBase, imm);
11597      }
11598    
11599      /**
11600       * Generate a register--immediate SBB. That is,
11601       * <PRE>
11602       * dstReg -CF=  (quad)  imm
11603       * </PRE>
11604       *
11605       * @param dstReg the destination register
11606       * @param imm immediate
11607       */
11608      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11609      public final void emitSBB_Reg_Imm_Quad(GPR dstReg, int imm) {
11610        int miStart = mi;
11611        // no group 1 to 4 prefix byte
11612        generateREXprefix(true, null, null, dstReg);
11613        // single byte opcode
11614        if (fits(imm,8)) {
11615          setMachineCodes(mi++, (byte) 0x83);
11616          // "register 0x3" is really part of the opcode
11617          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
11618          emitImm8((byte)imm);
11619        } else if (dstReg == EAX) {
11620          setMachineCodes(mi++, (byte) 0x1D);
11621          emitImm32(imm);
11622        } else {
11623          setMachineCodes(mi++, (byte) 0x81);
11624          // "register 0x3" is really part of the opcode
11625          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
11626          emitImm32(imm);
11627        }
11628        if (lister != null) lister.RI(miStart, "SBB", dstReg, imm);
11629      }
11630    
11631      /**
11632       * Generate a register-displacement--immediate SBB. That is,
11633       * <PRE>
11634       * [dstBase + dstDisp] -CF=  (quad)  imm
11635       * </PRE>
11636       *
11637       * @param dstBase the destination register
11638       * @param dstDisp the destination displacement
11639       * @param imm immediate
11640       */
11641      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11642      public final void emitSBB_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
11643        int miStart = mi;
11644        // no group 1 to 4 prefix byte
11645        generateREXprefix(true, null, null, dstBase);
11646        // single byte opcode
11647        if (fits(imm,8)) {
11648          setMachineCodes(mi++, (byte) 0x83);
11649          // "register 0x3" is really part of the opcode
11650          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
11651          emitImm8((byte)imm);
11652        } else {
11653          setMachineCodes(mi++, (byte) 0x81);
11654          // "register 0x3" is really part of the opcode
11655          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
11656          emitImm32(imm);
11657        }
11658        if (lister != null) lister.RDI(miStart, "SBB", dstBase, dstDisp, imm);
11659      }
11660    
11661      /**
11662       * Generate a register-offset--immediate SBB. That is,
11663       * <PRE>
11664       * [dstIndex<<dstScale + dstDisp] -CF=  (quad)  imm
11665       * </PRE>
11666       *
11667       * @param dstIndex the destination index register
11668       * @param dstScale the destination shift amount
11669       * @param dstDisp the destination displacement
11670       * @param imm immediate
11671       */
11672      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11673      public final void emitSBB_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
11674        int miStart = mi;
11675        // no group 1 to 4 prefix byte
11676        generateREXprefix(true, null, dstIndex, null);
11677        // single byte opcode
11678        if (fits(imm,8)) {
11679          setMachineCodes(mi++, (byte) 0x83);
11680          // "register 0x3" is really part of the opcode
11681          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11682          emitImm8((byte)imm);
11683        } else {
11684          setMachineCodes(mi++, (byte) 0x81);
11685          // "register 0x3" is really part of the opcode
11686          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11687          emitImm32(imm);
11688        }
11689        if (lister != null) lister.RFDI(miStart, "SBB", dstIndex, dstScale, dstDisp, imm);
11690      }
11691    
11692      /**
11693       * Generate a absolute--immediate SBB. That is,
11694       * <PRE>
11695       * [dstDisp] -CF=  (quad)  imm
11696       * </PRE>
11697       *
11698       * @param dstDisp the destination displacement
11699       * @param imm immediate
11700       */
11701      public final void emitSBB_Abs_Imm_Quad(Address dstDisp, int imm) {
11702        int miStart = mi;
11703        // no group 1 to 4 prefix byte
11704        generateREXprefix(true, null, null, null);
11705        // single byte opcode
11706        if (fits(imm,8)) {
11707          setMachineCodes(mi++, (byte) 0x83);
11708          // "register 0x3" is really part of the opcode
11709          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
11710          emitImm8((byte)imm);
11711        } else {
11712          setMachineCodes(mi++, (byte) 0x81);
11713          // "register 0x3" is really part of the opcode
11714          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
11715          emitImm32(imm);
11716        }
11717        if (lister != null) lister.RAI(miStart, "SBB", dstDisp, imm);
11718      }
11719    
11720      /**
11721       * Generate a register-index--immediate SBB. That is,
11722       * <PRE>
11723       * [dstBase + dstIndex<<dstScale + dstDisp] -CF=  (quad)  imm
11724       * </PRE>
11725       *
11726       * @param dstBase the destination base register
11727       * @param dstIndex the destination index register
11728       * @param dstScale the destination shift amount
11729       * @param dstDisp the destination displacement
11730       * @param imm immediate
11731       */
11732      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
11733      public final void emitSBB_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
11734        int miStart = mi;
11735        // no group 1 to 4 prefix byte
11736        generateREXprefix(true, null, dstIndex, dstBase);
11737        // single byte opcode
11738        if (fits(imm,8)) {
11739          setMachineCodes(mi++, (byte) 0x83);
11740          // "register 0x3" is really part of the opcode
11741          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11742          emitImm8((byte)imm);
11743        } else {
11744          setMachineCodes(mi++, (byte) 0x81);
11745          // "register 0x3" is really part of the opcode
11746          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11747          emitImm32(imm);
11748        }
11749        if (lister != null) lister.RXDI(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, imm);
11750      }
11751    
11752      /**
11753       * Generate a register(indirect)--immediate SBB. That is,
11754       * <PRE>
11755       * [dstBase] -CF=  (quad)  imm
11756       * </PRE>
11757       *
11758       * @param dstBase the destination base register
11759       * @param imm immediate
11760       */
11761      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11762      public final void emitSBB_RegInd_Imm_Quad(GPR dstBase, int imm) {
11763        int miStart = mi;
11764        // no group 1 to 4 prefix byte
11765        generateREXprefix(true, null, null, dstBase);
11766        // single byte opcode
11767        if (fits(imm,8)) {
11768          setMachineCodes(mi++, (byte) 0x83);
11769          // "register 0x3" is really part of the opcode
11770          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
11771          emitImm8((byte)imm);
11772        } else {
11773          setMachineCodes(mi++, (byte) 0x81);
11774          // "register 0x3" is really part of the opcode
11775          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
11776          emitImm32(imm);
11777        }
11778        if (lister != null) lister.RNI(miStart, "SBB", dstBase, imm);
11779      }
11780    
11781      /**
11782       * Generate a register--immediate SBB. That is,
11783       * <PRE>
11784       *  dstReg -CF= (byte) imm
11785       * </PRE>
11786       *
11787       * @param dstReg the destination register
11788       * @param imm immediate
11789       */
11790      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11791      public final void emitSBB_Reg_Imm_Byte(GPR dstReg, int imm) {
11792        int miStart = mi;
11793        if (dstReg == EAX) {
11794          setMachineCodes(mi++, (byte) 0x1C);
11795          emitImm8(imm);
11796        } else {
11797          generateREXprefix(false, null, null, dstReg);
11798          setMachineCodes(mi++, (byte) 0x80);
11799          // "register 0x3" is really part of the opcode
11800          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
11801          emitImm8(imm);
11802        }
11803        if (lister != null) lister.RI(miStart, "SBB", dstReg, imm);
11804      }
11805    
11806      /**
11807       * Generate a register-displacement--immediate SBB. That is,
11808       * <PRE>
11809       * [dstBase + dstDisp] -CF= (byte) imm
11810       * </PRE>
11811       *
11812       * @param dstBase the destination register
11813       * @param dstDisp the destination displacement
11814       * @param imm immediate
11815       */
11816      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11817      public final void emitSBB_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
11818        int miStart = mi;
11819        generateREXprefix(false, null, null, dstBase);
11820        setMachineCodes(mi++, (byte) 0x80);
11821        // "register 0x3" is really part of the opcode
11822        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
11823        emitImm8(imm);
11824        if (lister != null) lister.RDI(miStart, "SBB", dstBase, dstDisp, imm);
11825      }
11826    
11827      /**
11828       * Generate a register-index--immediate SBB. That is,
11829       * <PRE>
11830       * [dstBase + dstIndex<<scale + dstDisp] -CF= (byte) imm
11831       * </PRE>
11832       *
11833       * @param dstBase the destination base register
11834       * @param dstIndex the destination index register
11835       * @param dstScale the destination shift amount
11836       * @param dstDisp the destination displacement
11837       * @param imm immediate
11838       */
11839      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
11840      public final void emitSBB_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
11841        int miStart = mi;
11842        generateREXprefix(false, null, dstIndex, dstBase);
11843        setMachineCodes(mi++, (byte) 0x80);
11844        // "register 0x3" is really part of the opcode
11845        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11846        emitImm8(imm);
11847        if (lister != null) lister.RXDI(miStart, "SBB", dstBase, dstIndex, dstScale, dstDisp, imm);
11848      }
11849    
11850      /**
11851       * Generate a register-offset--immediate SBB. That is,
11852       * <PRE>
11853       * [dstIndex<<dstScale + dstDisp] -CF= (byte) imm
11854       * </PRE>
11855       *
11856       * @param dstIndex the destination index register
11857       * @param dstScale the destination shift amount
11858       * @param dstDisp the destination displacement
11859       * @param imm immediate
11860       */
11861      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11862      public final void emitSBB_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
11863        int miStart = mi;
11864        generateREXprefix(false, null, dstIndex, null);
11865        setMachineCodes(mi++, (byte) 0x80);
11866        // "register 0x3" is really part of the opcode
11867        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
11868        emitImm8(imm);
11869        if (lister != null) lister.RFDI(miStart, "SBB", dstIndex, dstScale, dstDisp, imm);
11870      }
11871    
11872      /**
11873       * Generate a absolute--immediate SBB. That is,
11874       * <PRE>
11875       * [dstDisp] -CF= (byte) imm
11876       * </PRE>
11877       *
11878       * @param dstDisp the destination displacement
11879       * @param imm immediate
11880       */
11881      public final void emitSBB_Abs_Imm_Byte(Address dstDisp, int imm) {
11882        int miStart = mi;
11883        generateREXprefix(false, null, null, null);
11884        setMachineCodes(mi++, (byte) 0x80);
11885        // "register 0x3" is really part of the opcode
11886        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
11887        emitImm8(imm);
11888        if (lister != null) lister.RAI(miStart, "SBB", dstDisp, imm);
11889      }
11890    
11891      /**
11892       * Generate a register(indirect)--immediate SBB. That is,
11893       * <PRE>
11894       * [dstBase] -CF= (byte) imm
11895       * </PRE>
11896       *
11897       * @param dstBase the destination base register
11898       * @param imm immediate
11899       */
11900      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
11901      public final void emitSBB_RegInd_Imm_Byte(GPR dstBase, int imm) {
11902        int miStart = mi;
11903        generateREXprefix(false, null, null, dstBase);
11904        setMachineCodes(mi++, (byte) 0x80);
11905        // "register 0x3" is really part of the opcode
11906        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
11907        emitImm8(imm);
11908        if (lister != null) lister.RNI(miStart, "SBB", dstBase, imm);
11909      }
11910    
11911      /**
11912       * Generate a register(indirect)--register SUB. That is,
11913       * <PRE>
11914       * [dstBase] -=  srcReg
11915       * </PRE>
11916       *
11917       * @param dstBase the destination base
11918       * @param srcReg the source register
11919       */
11920      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
11921      public final void emitSUB_RegInd_Reg(GPR dstBase, GPR srcReg) {
11922        int miStart = mi;
11923        // no group 1 to 4 prefix byte
11924        generateREXprefix(false, srcReg, null, dstBase);
11925        // single byte opcode
11926        setMachineCodes(mi++, (byte) 0x29);
11927        emitRegIndirectRegOperands(dstBase, srcReg);
11928        if (lister != null) lister.RNR(miStart, "SUB", dstBase, srcReg);
11929      }
11930    
11931      /**
11932       * Generate a register-offset--register SUB. That is,
11933       * <PRE>
11934       * [dstReg<<dstScale + dstDisp] -=  srcReg
11935       * </PRE>
11936       *
11937       * @param dstIndex the destination index register
11938       * @param dstScale the destination shift amount
11939       * @param dstDisp the destination displacement
11940       * @param srcReg the source register
11941       */
11942      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
11943      public final void emitSUB_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
11944        int miStart = mi;
11945        // no group 1 to 4 prefix byte
11946        generateREXprefix(false, srcReg, dstIndex, null);
11947        // single byte opcode
11948        setMachineCodes(mi++, (byte) 0x29);
11949        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
11950        if (lister != null) lister.RFDR(miStart, "SUB", dstIndex, dstScale, dstDisp, srcReg);
11951      }
11952    
11953      /**
11954       * Generate a absolute--register SUB. That is,
11955       * <PRE>
11956       * [dstDisp] -=  srcReg
11957       * </PRE>
11958       *
11959       * @param dstDisp the destination address
11960       * @param srcReg the source register
11961       */
11962      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
11963      public final void emitSUB_Abs_Reg(Address dstDisp, GPR srcReg) {
11964        int miStart = mi;
11965        // no group 1 to 4 prefix byte
11966        generateREXprefix(false, srcReg, null, null);
11967        // single byte opcode
11968        setMachineCodes(mi++, (byte) 0x29);
11969        emitAbsRegOperands(dstDisp, srcReg);
11970        if (lister != null) lister.RAR(miStart, "SUB", dstDisp, srcReg);
11971      }
11972    
11973      /**
11974       * Generate a register-index--register SUB. That is,
11975       * <PRE>
11976       * [dstBase + dstIndex<<dstScale + dstDisp] -=  srcReg
11977       * </PRE>
11978       *
11979       * @param dstBase the base register
11980       * @param dstIndex the destination index register
11981       * @param dstScale the destination shift amount
11982       * @param dstDisp the destination displacement
11983       * @param srcReg the source register
11984       */
11985      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
11986      public final void emitSUB_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
11987        int miStart = mi;
11988        // no group 1 to 4 prefix byte
11989        generateREXprefix(false, srcReg, dstIndex, dstBase);
11990        // single byte opcode
11991        setMachineCodes(mi++, (byte) 0x29);
11992        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
11993        if (lister != null) lister.RXDR(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, srcReg);
11994      }
11995    
11996      /**
11997       * Generate a register-displacement--register SUB. That is,
11998       * <PRE>
11999       * [dstBase + dstDisp] -=  srcReg
12000       * </PRE>
12001       *
12002       * @param dstBase the base register
12003       * @param dstDisp the destination displacement
12004       * @param srcReg the source register
12005       */
12006      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
12007      public final void emitSUB_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
12008        int miStart = mi;
12009        // no group 1 to 4 prefix byte
12010        generateREXprefix(false, srcReg, null, dstBase);
12011        // single byte opcode
12012        setMachineCodes(mi++, (byte) 0x29);
12013        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
12014        if (lister != null) lister.RDR(miStart, "SUB", dstBase, dstDisp, srcReg);
12015      }
12016    
12017      /**
12018       * Generate a register--register SUB. That is,
12019       * <PRE>
12020       * dstReg -=  srcReg
12021       * </PRE>
12022       *
12023       * @param dstReg the destination register
12024       * @param srcReg the source register
12025       */
12026      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12027      public final void emitSUB_Reg_Reg(GPR dstReg, GPR srcReg) {
12028        int miStart = mi;
12029        // no group 1 to 4 prefix byte
12030        generateREXprefix(false, srcReg, null, dstReg);
12031        // single byte opcode
12032        setMachineCodes(mi++, (byte) 0x29);
12033        emitRegRegOperands(dstReg, srcReg);
12034        if (lister != null) lister.RR(miStart, "SUB", dstReg, srcReg);
12035      }
12036    
12037      /**
12038       * Generate a register--register-displacement SUB. That is,
12039       * <PRE>
12040       * dstReg -=  [srcReg + srcDisp]
12041       * </PRE>
12042       *
12043       * @param dstReg the destination register
12044       * @param srcBase the source register
12045       * @param srcDisp the source displacement
12046       */
12047      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12048      public final void emitSUB_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
12049        int miStart = mi;
12050        // no group 1 to 4 prefix byte
12051        generateREXprefix(false, dstReg, null, srcBase);
12052        // single byte opcode
12053        setMachineCodes(mi++, (byte) 0x2B);
12054        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
12055        if (lister != null) lister.RRD(miStart, "SUB", dstReg, srcBase, srcDisp);
12056      }
12057    
12058      /**
12059       * Generate a register--register-offset SUB. That is,
12060       * <PRE>
12061       * dstReg -=  [srcIndex<<srcScale + srcDisp]
12062       * </PRE>
12063       *
12064       * @param dstReg the destination register
12065       * @param srcIndex the source index register
12066       * @param srcScale the source shift amount
12067       * @param srcDisp the source displacement
12068       */
12069      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12070      public final void emitSUB_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
12071        int miStart = mi;
12072        // no group 1 to 4 prefix byte
12073        generateREXprefix(false, dstReg, srcIndex, null);
12074        // single byte opcode
12075        setMachineCodes(mi++, (byte) 0x2B);
12076        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
12077        if (lister != null) lister.RRFD(miStart, "SUB", dstReg, srcIndex, srcScale, srcDisp);
12078      }
12079    
12080      /**
12081       * Generate a register--register-offset SUB. That is,
12082       * <PRE>
12083       * dstReg -=  [srcDisp]
12084       * </PRE>
12085       *
12086       * @param dstReg the destination register
12087       * @param srcDisp the source displacement
12088       */
12089      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
12090      public final void emitSUB_Reg_Abs(GPR dstReg, Address srcDisp) {
12091        int miStart = mi;
12092        // no group 1 to 4 prefix byte
12093        generateREXprefix(false, dstReg, null, null);
12094        // single byte opcode
12095        setMachineCodes(mi++, (byte) 0x2B);
12096        emitAbsRegOperands(srcDisp, dstReg);
12097        if (lister != null) lister.RRA(miStart, "SUB", dstReg, srcDisp);
12098      }
12099    
12100      /**
12101       * Generate a register--register-offset SUB. That is,
12102       * <PRE>
12103       * dstReg -=  [srcBase + srcIndex<<srcScale + srcDisp]
12104       * </PRE>
12105       *
12106       * @param dstReg the destination register
12107       * @param srcBase the source base register
12108       * @param srcIndex the source index register
12109       * @param srcScale the source shift amount
12110       * @param srcDisp the source displacement
12111       */
12112      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
12113      public final void emitSUB_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
12114        int miStart = mi;
12115        // no group 1 to 4 prefix byte
12116        generateREXprefix(false, dstReg, srcIndex, srcBase);
12117        // single byte opcode
12118        setMachineCodes(mi++, (byte) 0x2B);
12119        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
12120        if (lister != null) lister.RRXD(miStart, "SUB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
12121      }
12122    
12123      /**
12124       * Generate a register--register(indirect) SUB. That is,
12125       * <PRE>
12126       * dstReg -=  [srcBase]
12127       * </PRE>
12128       *
12129       * @param dstReg the destination register
12130       * @param srcBase the source base register
12131       */
12132      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12133      public final void emitSUB_Reg_RegInd(GPR dstReg, GPR srcBase) {
12134        int miStart = mi;
12135        // no group 1 to 4 prefix byte
12136        generateREXprefix(false, dstReg, null, srcBase);
12137        // single byte opcode
12138        setMachineCodes(mi++, (byte) 0x2B);
12139        emitRegIndirectRegOperands(srcBase, dstReg);
12140        if (lister != null) lister.RRN(miStart, "SUB", dstReg, srcBase);
12141      }
12142    
12143      /**
12144       * Generate a register(indirect)--register SUB. That is,
12145       * <PRE>
12146       * [dstBase] -=  (word)  srcReg
12147       * </PRE>
12148       *
12149       * @param dstBase the destination base
12150       * @param srcReg the source register
12151       */
12152      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12153      public final void emitSUB_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
12154        int miStart = mi;
12155        setMachineCodes(mi++, (byte) 0x66);
12156        generateREXprefix(false, srcReg, null, dstBase);
12157        // single byte opcode
12158        setMachineCodes(mi++, (byte) 0x29);
12159        emitRegIndirectRegOperands(dstBase, srcReg);
12160        if (lister != null) lister.RNR(miStart, "SUB", dstBase, srcReg);
12161      }
12162    
12163      /**
12164       * Generate a register-offset--register SUB. That is,
12165       * <PRE>
12166       * [dstReg<<dstScale + dstDisp] -=  (word)  srcReg
12167       * </PRE>
12168       *
12169       * @param dstIndex the destination index register
12170       * @param dstScale the destination shift amount
12171       * @param dstDisp the destination displacement
12172       * @param srcReg the source register
12173       */
12174      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
12175      public final void emitSUB_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
12176        int miStart = mi;
12177        setMachineCodes(mi++, (byte) 0x66);
12178        generateREXprefix(false, srcReg, dstIndex, null);
12179        // single byte opcode
12180        setMachineCodes(mi++, (byte) 0x29);
12181        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
12182        if (lister != null) lister.RFDR(miStart, "SUB", dstIndex, dstScale, dstDisp, srcReg);
12183      }
12184    
12185      /**
12186       * Generate a absolute--register SUB. That is,
12187       * <PRE>
12188       * [dstDisp] -=  (word)  srcReg
12189       * </PRE>
12190       *
12191       * @param dstDisp the destination address
12192       * @param srcReg the source register
12193       */
12194      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
12195      public final void emitSUB_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
12196        int miStart = mi;
12197        setMachineCodes(mi++, (byte) 0x66);
12198        generateREXprefix(false, srcReg, null, null);
12199        // single byte opcode
12200        setMachineCodes(mi++, (byte) 0x29);
12201        emitAbsRegOperands(dstDisp, srcReg);
12202        if (lister != null) lister.RAR(miStart, "SUB", dstDisp, srcReg);
12203      }
12204    
12205      /**
12206       * Generate a register-index--register SUB. That is,
12207       * <PRE>
12208       * [dstBase + dstIndex<<dstScale + dstDisp] -=  (word)  srcReg
12209       * </PRE>
12210       *
12211       * @param dstBase the base register
12212       * @param dstIndex the destination index register
12213       * @param dstScale the destination shift amount
12214       * @param dstDisp the destination displacement
12215       * @param srcReg the source register
12216       */
12217      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
12218      public final void emitSUB_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
12219        int miStart = mi;
12220        setMachineCodes(mi++, (byte) 0x66);
12221        generateREXprefix(false, srcReg, dstIndex, dstBase);
12222        // single byte opcode
12223        setMachineCodes(mi++, (byte) 0x29);
12224        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
12225        if (lister != null) lister.RXDR(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, srcReg);
12226      }
12227    
12228      /**
12229       * Generate a register-displacement--register SUB. That is,
12230       * <PRE>
12231       * [dstBase + dstDisp] -=  (word)  srcReg
12232       * </PRE>
12233       *
12234       * @param dstBase the base register
12235       * @param dstDisp the destination displacement
12236       * @param srcReg the source register
12237       */
12238      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
12239      public final void emitSUB_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
12240        int miStart = mi;
12241        setMachineCodes(mi++, (byte) 0x66);
12242        generateREXprefix(false, srcReg, null, dstBase);
12243        // single byte opcode
12244        setMachineCodes(mi++, (byte) 0x29);
12245        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
12246        if (lister != null) lister.RDR(miStart, "SUB", dstBase, dstDisp, srcReg);
12247      }
12248    
12249      /**
12250       * Generate a register--register SUB. That is,
12251       * <PRE>
12252       * dstReg -=  (word)  srcReg
12253       * </PRE>
12254       *
12255       * @param dstReg the destination register
12256       * @param srcReg the source register
12257       */
12258      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12259      public final void emitSUB_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
12260        int miStart = mi;
12261        setMachineCodes(mi++, (byte) 0x66);
12262        generateREXprefix(false, srcReg, null, dstReg);
12263        // single byte opcode
12264        setMachineCodes(mi++, (byte) 0x29);
12265        emitRegRegOperands(dstReg, srcReg);
12266        if (lister != null) lister.RR(miStart, "SUB", dstReg, srcReg);
12267      }
12268    
12269      /**
12270       * Generate a register--register-displacement SUB. That is,
12271       * <PRE>
12272       * dstReg -=  (word)  [srcReg + srcDisp]
12273       * </PRE>
12274       *
12275       * @param dstReg the destination register
12276       * @param srcBase the source register
12277       * @param srcDisp the source displacement
12278       */
12279      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12280      public final void emitSUB_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
12281        int miStart = mi;
12282        setMachineCodes(mi++, (byte) 0x66);
12283        generateREXprefix(false, dstReg, null, srcBase);
12284        // single byte opcode
12285        setMachineCodes(mi++, (byte) 0x2B);
12286        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
12287        if (lister != null) lister.RRD(miStart, "SUB", dstReg, srcBase, srcDisp);
12288      }
12289    
12290      /**
12291       * Generate a register--register-offset SUB. That is,
12292       * <PRE>
12293       * dstReg -=  (word)  [srcIndex<<srcScale + srcDisp]
12294       * </PRE>
12295       *
12296       * @param dstReg the destination register
12297       * @param srcIndex the source index register
12298       * @param srcScale the source shift amount
12299       * @param srcDisp the source displacement
12300       */
12301      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12302      public final void emitSUB_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
12303        int miStart = mi;
12304        setMachineCodes(mi++, (byte) 0x66);
12305        generateREXprefix(false, dstReg, srcIndex, null);
12306        // single byte opcode
12307        setMachineCodes(mi++, (byte) 0x2B);
12308        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
12309        if (lister != null) lister.RRFD(miStart, "SUB", dstReg, srcIndex, srcScale, srcDisp);
12310      }
12311    
12312      /**
12313       * Generate a register--register-offset SUB. That is,
12314       * <PRE>
12315       * dstReg -=  (word)  [srcDisp]
12316       * </PRE>
12317       *
12318       * @param dstReg the destination register
12319       * @param srcDisp the source displacement
12320       */
12321      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
12322      public final void emitSUB_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
12323        int miStart = mi;
12324        setMachineCodes(mi++, (byte) 0x66);
12325        generateREXprefix(false, dstReg, null, null);
12326        // single byte opcode
12327        setMachineCodes(mi++, (byte) 0x2B);
12328        emitAbsRegOperands(srcDisp, dstReg);
12329        if (lister != null) lister.RRA(miStart, "SUB", dstReg, srcDisp);
12330      }
12331    
12332      /**
12333       * Generate a register--register-offset SUB. That is,
12334       * <PRE>
12335       * dstReg -=  (word)  [srcBase + srcIndex<<srcScale + srcDisp]
12336       * </PRE>
12337       *
12338       * @param dstReg the destination register
12339       * @param srcBase the source base register
12340       * @param srcIndex the source index register
12341       * @param srcScale the source shift amount
12342       * @param srcDisp the source displacement
12343       */
12344      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
12345      public final void emitSUB_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
12346        int miStart = mi;
12347        setMachineCodes(mi++, (byte) 0x66);
12348        generateREXprefix(false, dstReg, srcIndex, srcBase);
12349        // single byte opcode
12350        setMachineCodes(mi++, (byte) 0x2B);
12351        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
12352        if (lister != null) lister.RRXD(miStart, "SUB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
12353      }
12354    
12355      /**
12356       * Generate a register--register(indirect) SUB. That is,
12357       * <PRE>
12358       * dstReg -=  (word)  [srcBase]
12359       * </PRE>
12360       *
12361       * @param dstReg the destination register
12362       * @param srcBase the source base register
12363       */
12364      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12365      public final void emitSUB_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
12366        int miStart = mi;
12367        setMachineCodes(mi++, (byte) 0x66);
12368        generateREXprefix(false, dstReg, null, srcBase);
12369        // single byte opcode
12370        setMachineCodes(mi++, (byte) 0x2B);
12371        emitRegIndirectRegOperands(srcBase, dstReg);
12372        if (lister != null) lister.RRN(miStart, "SUB", dstReg, srcBase);
12373      }
12374    
12375      /**
12376       * Generate a register(indirect)--register SUB. That is,
12377       * <PRE>
12378       * [dstBase] -=  (quad)  srcReg
12379       * </PRE>
12380       *
12381       * @param dstBase the destination base
12382       * @param srcReg the source register
12383       */
12384      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12385      public final void emitSUB_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
12386        int miStart = mi;
12387        // no group 1 to 4 prefix byte
12388        generateREXprefix(true, srcReg, null, dstBase);
12389        // single byte opcode
12390        setMachineCodes(mi++, (byte) 0x29);
12391        emitRegIndirectRegOperands(dstBase, srcReg);
12392        if (lister != null) lister.RNR(miStart, "SUB", dstBase, srcReg);
12393      }
12394    
12395      /**
12396       * Generate a register-offset--register SUB. That is,
12397       * <PRE>
12398       * [dstReg<<dstScale + dstDisp] -=  (quad)  srcReg
12399       * </PRE>
12400       *
12401       * @param dstIndex the destination index register
12402       * @param dstScale the destination shift amount
12403       * @param dstDisp the destination displacement
12404       * @param srcReg the source register
12405       */
12406      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
12407      public final void emitSUB_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
12408        int miStart = mi;
12409        // no group 1 to 4 prefix byte
12410        generateREXprefix(true, srcReg, dstIndex, null);
12411        // single byte opcode
12412        setMachineCodes(mi++, (byte) 0x29);
12413        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
12414        if (lister != null) lister.RFDR(miStart, "SUB", dstIndex, dstScale, dstDisp, srcReg);
12415      }
12416    
12417      /**
12418       * Generate a absolute--register SUB. That is,
12419       * <PRE>
12420       * [dstDisp] -=  (quad)  srcReg
12421       * </PRE>
12422       *
12423       * @param dstDisp the destination address
12424       * @param srcReg the source register
12425       */
12426      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
12427      public final void emitSUB_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
12428        int miStart = mi;
12429        // no group 1 to 4 prefix byte
12430        generateREXprefix(true, srcReg, null, null);
12431        // single byte opcode
12432        setMachineCodes(mi++, (byte) 0x29);
12433        emitAbsRegOperands(dstDisp, srcReg);
12434        if (lister != null) lister.RAR(miStart, "SUB", dstDisp, srcReg);
12435      }
12436    
12437      /**
12438       * Generate a register-index--register SUB. That is,
12439       * <PRE>
12440       * [dstBase + dstIndex<<dstScale + dstDisp] -=  (quad)  srcReg
12441       * </PRE>
12442       *
12443       * @param dstBase the base register
12444       * @param dstIndex the destination index register
12445       * @param dstScale the destination shift amount
12446       * @param dstDisp the destination displacement
12447       * @param srcReg the source register
12448       */
12449      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
12450      public final void emitSUB_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
12451        int miStart = mi;
12452        // no group 1 to 4 prefix byte
12453        generateREXprefix(true, srcReg, dstIndex, dstBase);
12454        // single byte opcode
12455        setMachineCodes(mi++, (byte) 0x29);
12456        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
12457        if (lister != null) lister.RXDR(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, srcReg);
12458      }
12459    
12460      /**
12461       * Generate a register-displacement--register SUB. That is,
12462       * <PRE>
12463       * [dstBase + dstDisp] -=  (quad)  srcReg
12464       * </PRE>
12465       *
12466       * @param dstBase the base register
12467       * @param dstDisp the destination displacement
12468       * @param srcReg the source register
12469       */
12470      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
12471      public final void emitSUB_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
12472        int miStart = mi;
12473        // no group 1 to 4 prefix byte
12474        generateREXprefix(true, srcReg, null, dstBase);
12475        // single byte opcode
12476        setMachineCodes(mi++, (byte) 0x29);
12477        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
12478        if (lister != null) lister.RDR(miStart, "SUB", dstBase, dstDisp, srcReg);
12479      }
12480    
12481      /**
12482       * Generate a register--register SUB. That is,
12483       * <PRE>
12484       * dstReg -=  (quad)  srcReg
12485       * </PRE>
12486       *
12487       * @param dstReg the destination register
12488       * @param srcReg the source register
12489       */
12490      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12491      public final void emitSUB_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
12492        int miStart = mi;
12493        // no group 1 to 4 prefix byte
12494        generateREXprefix(true, srcReg, null, dstReg);
12495        // single byte opcode
12496        setMachineCodes(mi++, (byte) 0x29);
12497        emitRegRegOperands(dstReg, srcReg);
12498        if (lister != null) lister.RR(miStart, "SUB", dstReg, srcReg);
12499      }
12500    
12501      /**
12502       * Generate a register--register-displacement SUB. That is,
12503       * <PRE>
12504       * dstReg -=  (quad)  [srcReg + srcDisp]
12505       * </PRE>
12506       *
12507       * @param dstReg the destination register
12508       * @param srcBase the source register
12509       * @param srcDisp the source displacement
12510       */
12511      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12512      public final void emitSUB_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
12513        int miStart = mi;
12514        // no group 1 to 4 prefix byte
12515        generateREXprefix(true, dstReg, null, srcBase);
12516        // single byte opcode
12517        setMachineCodes(mi++, (byte) 0x2B);
12518        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
12519        if (lister != null) lister.RRD(miStart, "SUB", dstReg, srcBase, srcDisp);
12520      }
12521    
12522      /**
12523       * Generate a register--register-offset SUB. That is,
12524       * <PRE>
12525       * dstReg -=  (quad)  [srcIndex<<srcScale + srcDisp]
12526       * </PRE>
12527       *
12528       * @param dstReg the destination register
12529       * @param srcIndex the source index register
12530       * @param srcScale the source shift amount
12531       * @param srcDisp the source displacement
12532       */
12533      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12534      public final void emitSUB_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
12535        int miStart = mi;
12536        // no group 1 to 4 prefix byte
12537        generateREXprefix(true, dstReg, srcIndex, null);
12538        // single byte opcode
12539        setMachineCodes(mi++, (byte) 0x2B);
12540        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
12541        if (lister != null) lister.RRFD(miStart, "SUB", dstReg, srcIndex, srcScale, srcDisp);
12542      }
12543    
12544      /**
12545       * Generate a register--register-offset SUB. That is,
12546       * <PRE>
12547       * dstReg -=  (quad)  [srcDisp]
12548       * </PRE>
12549       *
12550       * @param dstReg the destination register
12551       * @param srcDisp the source displacement
12552       */
12553      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
12554      public final void emitSUB_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
12555        int miStart = mi;
12556        // no group 1 to 4 prefix byte
12557        generateREXprefix(true, dstReg, null, null);
12558        // single byte opcode
12559        setMachineCodes(mi++, (byte) 0x2B);
12560        emitAbsRegOperands(srcDisp, dstReg);
12561        if (lister != null) lister.RRA(miStart, "SUB", dstReg, srcDisp);
12562      }
12563    
12564      /**
12565       * Generate a register--register-offset SUB. That is,
12566       * <PRE>
12567       * dstReg -=  (quad)  [srcBase + srcIndex<<srcScale + srcDisp]
12568       * </PRE>
12569       *
12570       * @param dstReg the destination register
12571       * @param srcBase the source base register
12572       * @param srcIndex the source index register
12573       * @param srcScale the source shift amount
12574       * @param srcDisp the source displacement
12575       */
12576      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
12577      public final void emitSUB_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
12578        int miStart = mi;
12579        // no group 1 to 4 prefix byte
12580        generateREXprefix(true, dstReg, srcIndex, srcBase);
12581        // single byte opcode
12582        setMachineCodes(mi++, (byte) 0x2B);
12583        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
12584        if (lister != null) lister.RRXD(miStart, "SUB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
12585      }
12586    
12587      /**
12588       * Generate a register--register(indirect) SUB. That is,
12589       * <PRE>
12590       * dstReg -=  (quad)  [srcBase]
12591       * </PRE>
12592       *
12593       * @param dstReg the destination register
12594       * @param srcBase the source base register
12595       */
12596      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12597      public final void emitSUB_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
12598        int miStart = mi;
12599        // no group 1 to 4 prefix byte
12600        generateREXprefix(true, dstReg, null, srcBase);
12601        // single byte opcode
12602        setMachineCodes(mi++, (byte) 0x2B);
12603        emitRegIndirectRegOperands(srcBase, dstReg);
12604        if (lister != null) lister.RRN(miStart, "SUB", dstReg, srcBase);
12605      }
12606    
12607      /**
12608       * Generate a register(indirect)--register SUB. That is,
12609       * <PRE>
12610       * [dstBase] -=  (byte)  srcReg
12611       * </PRE>
12612       *
12613       * @param dstBase the destination base
12614       * @param srcReg the source register
12615       */
12616      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12617      public final void emitSUB_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
12618        int miStart = mi;
12619        // no group 1 to 4 prefix byte
12620        generateREXprefix(false, srcReg, null, dstBase);
12621        // single byte opcode
12622        setMachineCodes(mi++, (byte) 0x28);
12623        emitRegIndirectRegOperands(dstBase, srcReg);
12624        if (lister != null) lister.RNR(miStart, "SUB", dstBase, srcReg);
12625      }
12626    
12627      /**
12628       * Generate a register-offset--register SUB. That is,
12629       * <PRE>
12630       * [dstReg<<dstScale + dstDisp] -=  (byte)  srcReg
12631       * </PRE>
12632       *
12633       * @param dstIndex the destination index register
12634       * @param dstScale the destination shift amount
12635       * @param dstDisp the destination displacement
12636       * @param srcReg the source register
12637       */
12638      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
12639      public final void emitSUB_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
12640        int miStart = mi;
12641        // no group 1 to 4 prefix byte
12642        generateREXprefix(false, srcReg, dstIndex, null);
12643        // single byte opcode
12644        setMachineCodes(mi++, (byte) 0x28);
12645        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
12646        if (lister != null) lister.RFDR(miStart, "SUB", dstIndex, dstScale, dstDisp, srcReg);
12647      }
12648    
12649      /**
12650       * Generate a absolute--register SUB. That is,
12651       * <PRE>
12652       * [dstDisp] -=  (byte)  srcReg
12653       * </PRE>
12654       *
12655       * @param dstDisp the destination address
12656       * @param srcReg the source register
12657       */
12658      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
12659      public final void emitSUB_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
12660        int miStart = mi;
12661        // no group 1 to 4 prefix byte
12662        generateREXprefix(false, srcReg, null, null);
12663        // single byte opcode
12664        setMachineCodes(mi++, (byte) 0x28);
12665        emitAbsRegOperands(dstDisp, srcReg);
12666        if (lister != null) lister.RAR(miStart, "SUB", dstDisp, srcReg);
12667      }
12668    
12669      /**
12670       * Generate a register-index--register SUB. That is,
12671       * <PRE>
12672       * [dstBase + dstIndex<<dstScale + dstDisp] -=  (byte)  srcReg
12673       * </PRE>
12674       *
12675       * @param dstBase the base register
12676       * @param dstIndex the destination index register
12677       * @param dstScale the destination shift amount
12678       * @param dstDisp the destination displacement
12679       * @param srcReg the source register
12680       */
12681      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
12682      public final void emitSUB_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
12683        int miStart = mi;
12684        // no group 1 to 4 prefix byte
12685        generateREXprefix(false, srcReg, dstIndex, dstBase);
12686        // single byte opcode
12687        setMachineCodes(mi++, (byte) 0x28);
12688        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
12689        if (lister != null) lister.RXDR(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, srcReg);
12690      }
12691    
12692      /**
12693       * Generate a register-displacement--register SUB. That is,
12694       * <PRE>
12695       * [dstBase + dstDisp] -=  (byte)  srcReg
12696       * </PRE>
12697       *
12698       * @param dstBase the base register
12699       * @param dstDisp the destination displacement
12700       * @param srcReg the source register
12701       */
12702      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
12703      public final void emitSUB_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
12704        int miStart = mi;
12705        // no group 1 to 4 prefix byte
12706        generateREXprefix(false, srcReg, null, dstBase);
12707        // single byte opcode
12708        setMachineCodes(mi++, (byte) 0x28);
12709        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
12710        if (lister != null) lister.RDR(miStart, "SUB", dstBase, dstDisp, srcReg);
12711      }
12712    
12713      /**
12714       * Generate a register--register SUB. That is,
12715       * <PRE>
12716       * dstReg -=  (byte)  srcReg
12717       * </PRE>
12718       *
12719       * @param dstReg the destination register
12720       * @param srcReg the source register
12721       */
12722      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12723      public final void emitSUB_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
12724        int miStart = mi;
12725        // no group 1 to 4 prefix byte
12726        generateREXprefix(false, srcReg, null, dstReg);
12727        // single byte opcode
12728        setMachineCodes(mi++, (byte) 0x28);
12729        emitRegRegOperands(dstReg, srcReg);
12730        if (lister != null) lister.RR(miStart, "SUB", dstReg, srcReg);
12731      }
12732    
12733      /**
12734       * Generate a register--register-displacement SUB. That is,
12735       * <PRE>
12736       * dstReg -=  (byte)  [srcReg + srcDisp]
12737       * </PRE>
12738       *
12739       * @param dstReg the destination register
12740       * @param srcBase the source register
12741       * @param srcDisp the source displacement
12742       */
12743      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12744      public final void emitSUB_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
12745        int miStart = mi;
12746        // no group 1 to 4 prefix byte
12747        generateREXprefix(false, dstReg, null, srcBase);
12748        // single byte opcode
12749        setMachineCodes(mi++, (byte) 0x2A);
12750        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
12751        if (lister != null) lister.RRD(miStart, "SUB", dstReg, srcBase, srcDisp);
12752      }
12753    
12754      /**
12755       * Generate a register--register-offset SUB. That is,
12756       * <PRE>
12757       * dstReg -=  (byte)  [srcIndex<<srcScale + srcDisp]
12758       * </PRE>
12759       *
12760       * @param dstReg the destination register
12761       * @param srcIndex the source index register
12762       * @param srcScale the source shift amount
12763       * @param srcDisp the source displacement
12764       */
12765      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12766      public final void emitSUB_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
12767        int miStart = mi;
12768        // no group 1 to 4 prefix byte
12769        generateREXprefix(false, dstReg, srcIndex, null);
12770        // single byte opcode
12771        setMachineCodes(mi++, (byte) 0x2A);
12772        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
12773        if (lister != null) lister.RRFD(miStart, "SUB", dstReg, srcIndex, srcScale, srcDisp);
12774      }
12775    
12776      /**
12777       * Generate a register--register-offset SUB. That is,
12778       * <PRE>
12779       * dstReg -=  (byte)  [srcDisp]
12780       * </PRE>
12781       *
12782       * @param dstReg the destination register
12783       * @param srcDisp the source displacement
12784       */
12785      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
12786      public final void emitSUB_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
12787        int miStart = mi;
12788        // no group 1 to 4 prefix byte
12789        generateREXprefix(false, dstReg, null, null);
12790        // single byte opcode
12791        setMachineCodes(mi++, (byte) 0x2A);
12792        emitAbsRegOperands(srcDisp, dstReg);
12793        if (lister != null) lister.RRA(miStart, "SUB", dstReg, srcDisp);
12794      }
12795    
12796      /**
12797       * Generate a register--register-offset SUB. That is,
12798       * <PRE>
12799       * dstReg -=  (byte)  [srcBase + srcIndex<<srcScale + srcDisp]
12800       * </PRE>
12801       *
12802       * @param dstReg the destination register
12803       * @param srcBase the source base register
12804       * @param srcIndex the source index register
12805       * @param srcScale the source shift amount
12806       * @param srcDisp the source displacement
12807       */
12808      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
12809      public final void emitSUB_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
12810        int miStart = mi;
12811        // no group 1 to 4 prefix byte
12812        generateREXprefix(false, dstReg, srcIndex, srcBase);
12813        // single byte opcode
12814        setMachineCodes(mi++, (byte) 0x2A);
12815        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
12816        if (lister != null) lister.RRXD(miStart, "SUB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
12817      }
12818    
12819      /**
12820       * Generate a register--register(indirect) SUB. That is,
12821       * <PRE>
12822       * dstReg -=  (byte)  [srcBase]
12823       * </PRE>
12824       *
12825       * @param dstReg the destination register
12826       * @param srcBase the source base register
12827       */
12828      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12829      public final void emitSUB_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
12830        int miStart = mi;
12831        // no group 1 to 4 prefix byte
12832        generateREXprefix(false, dstReg, null, srcBase);
12833        // single byte opcode
12834        setMachineCodes(mi++, (byte) 0x2A);
12835        emitRegIndirectRegOperands(srcBase, dstReg);
12836        if (lister != null) lister.RRN(miStart, "SUB", dstReg, srcBase);
12837      }
12838    
12839      /**
12840       * Generate a register--immediate SUB. That is,
12841       * <PRE>
12842       * dstReg -=  imm
12843       * </PRE>
12844       *
12845       * @param dstReg the destination register
12846       * @param imm immediate
12847       */
12848      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
12849      public final void emitSUB_Reg_Imm(GPR dstReg, int imm) {
12850        int miStart = mi;
12851        // no group 1 to 4 prefix byte
12852        generateREXprefix(false, null, null, dstReg);
12853        // single byte opcode
12854        if (fits(imm,8)) {
12855          setMachineCodes(mi++, (byte) 0x83);
12856          // "register 0x5" is really part of the opcode
12857          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
12858          emitImm8((byte)imm);
12859        } else if (dstReg == EAX) {
12860          setMachineCodes(mi++, (byte) 0x2D);
12861          emitImm32(imm);
12862        } else {
12863          setMachineCodes(mi++, (byte) 0x81);
12864          // "register 0x5" is really part of the opcode
12865          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
12866          emitImm32(imm);
12867        }
12868        if (lister != null) lister.RI(miStart, "SUB", dstReg, imm);
12869      }
12870    
12871      /**
12872       * Generate a register-displacement--immediate SUB. That is,
12873       * <PRE>
12874       * [dstBase + dstDisp] -=  imm
12875       * </PRE>
12876       *
12877       * @param dstBase the destination register
12878       * @param dstDisp the destination displacement
12879       * @param imm immediate
12880       */
12881      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
12882      public final void emitSUB_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
12883        int miStart = mi;
12884        // no group 1 to 4 prefix byte
12885        generateREXprefix(false, null, null, dstBase);
12886        // single byte opcode
12887        if (fits(imm,8)) {
12888          setMachineCodes(mi++, (byte) 0x83);
12889          // "register 0x5" is really part of the opcode
12890          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
12891          emitImm8((byte)imm);
12892        } else {
12893          setMachineCodes(mi++, (byte) 0x81);
12894          // "register 0x5" is really part of the opcode
12895          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
12896          emitImm32(imm);
12897        }
12898        if (lister != null) lister.RDI(miStart, "SUB", dstBase, dstDisp, imm);
12899      }
12900    
12901      /**
12902       * Generate a register-offset--immediate SUB. That is,
12903       * <PRE>
12904       * [dstIndex<<dstScale + dstDisp] -=  imm
12905       * </PRE>
12906       *
12907       * @param dstIndex the destination index register
12908       * @param dstScale the destination shift amount
12909       * @param dstDisp the destination displacement
12910       * @param imm immediate
12911       */
12912      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
12913      public final void emitSUB_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
12914        int miStart = mi;
12915        // no group 1 to 4 prefix byte
12916        generateREXprefix(false, null, dstIndex, null);
12917        // single byte opcode
12918        if (fits(imm,8)) {
12919          setMachineCodes(mi++, (byte) 0x83);
12920          // "register 0x5" is really part of the opcode
12921          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
12922          emitImm8((byte)imm);
12923        } else {
12924          setMachineCodes(mi++, (byte) 0x81);
12925          // "register 0x5" is really part of the opcode
12926          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
12927          emitImm32(imm);
12928        }
12929        if (lister != null) lister.RFDI(miStart, "SUB", dstIndex, dstScale, dstDisp, imm);
12930      }
12931    
12932      /**
12933       * Generate a absolute--immediate SUB. That is,
12934       * <PRE>
12935       * [dstDisp] -=  imm
12936       * </PRE>
12937       *
12938       * @param dstDisp the destination displacement
12939       * @param imm immediate
12940       */
12941      public final void emitSUB_Abs_Imm(Address dstDisp, int imm) {
12942        int miStart = mi;
12943        // no group 1 to 4 prefix byte
12944        generateREXprefix(false, null, null, null);
12945        // single byte opcode
12946        if (fits(imm,8)) {
12947          setMachineCodes(mi++, (byte) 0x83);
12948          // "register 0x5" is really part of the opcode
12949          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
12950          emitImm8((byte)imm);
12951        } else {
12952          setMachineCodes(mi++, (byte) 0x81);
12953          // "register 0x5" is really part of the opcode
12954          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
12955          emitImm32(imm);
12956        }
12957        if (lister != null) lister.RAI(miStart, "SUB", dstDisp, imm);
12958      }
12959    
12960      /**
12961       * Generate a register-index--immediate SUB. That is,
12962       * <PRE>
12963       * [dstBase + dstIndex<<dstScale + dstDisp] -=  imm
12964       * </PRE>
12965       *
12966       * @param dstBase the destination base register
12967       * @param dstIndex the destination index register
12968       * @param dstScale the destination shift amount
12969       * @param dstDisp the destination displacement
12970       * @param imm immediate
12971       */
12972      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
12973      public final void emitSUB_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
12974        int miStart = mi;
12975        // no group 1 to 4 prefix byte
12976        generateREXprefix(false, null, dstIndex, dstBase);
12977        // single byte opcode
12978        if (fits(imm,8)) {
12979          setMachineCodes(mi++, (byte) 0x83);
12980          // "register 0x5" is really part of the opcode
12981          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
12982          emitImm8((byte)imm);
12983        } else {
12984          setMachineCodes(mi++, (byte) 0x81);
12985          // "register 0x5" is really part of the opcode
12986          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
12987          emitImm32(imm);
12988        }
12989        if (lister != null) lister.RXDI(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, imm);
12990      }
12991    
12992      /**
12993       * Generate a register(indirect)--immediate SUB. That is,
12994       * <PRE>
12995       * [dstBase] -=  imm
12996       * </PRE>
12997       *
12998       * @param dstBase the destination base register
12999       * @param imm immediate
13000       */
13001      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13002      public final void emitSUB_RegInd_Imm(GPR dstBase, int imm) {
13003        int miStart = mi;
13004        // no group 1 to 4 prefix byte
13005        generateREXprefix(false, null, null, dstBase);
13006        // single byte opcode
13007        if (fits(imm,8)) {
13008          setMachineCodes(mi++, (byte) 0x83);
13009          // "register 0x5" is really part of the opcode
13010          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
13011          emitImm8((byte)imm);
13012        } else {
13013          setMachineCodes(mi++, (byte) 0x81);
13014          // "register 0x5" is really part of the opcode
13015          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
13016          emitImm32(imm);
13017        }
13018        if (lister != null) lister.RNI(miStart, "SUB", dstBase, imm);
13019      }
13020    
13021      /**
13022       * Generate a register--immediate SUB. That is,
13023       * <PRE>
13024       * dstReg -=  (word)  imm
13025       * </PRE>
13026       *
13027       * @param dstReg the destination register
13028       * @param imm immediate
13029       */
13030      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13031      public final void emitSUB_Reg_Imm_Word(GPR dstReg, int imm) {
13032        int miStart = mi;
13033        setMachineCodes(mi++, (byte) 0x66);
13034        generateREXprefix(false, null, null, dstReg);
13035        // single byte opcode
13036        if (fits(imm,8)) {
13037          setMachineCodes(mi++, (byte) 0x83);
13038          // "register 0x5" is really part of the opcode
13039          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
13040          emitImm8((byte)imm);
13041        } else if (dstReg == EAX) {
13042          setMachineCodes(mi++, (byte) 0x2D);
13043          emitImm16(imm);
13044        } else {
13045          setMachineCodes(mi++, (byte) 0x81);
13046          // "register 0x5" is really part of the opcode
13047          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
13048          emitImm16(imm);
13049        }
13050        if (lister != null) lister.RI(miStart, "SUB", dstReg, imm);
13051      }
13052    
13053      /**
13054       * Generate a register-displacement--immediate SUB. That is,
13055       * <PRE>
13056       * [dstBase + dstDisp] -=  (word)  imm
13057       * </PRE>
13058       *
13059       * @param dstBase the destination register
13060       * @param dstDisp the destination displacement
13061       * @param imm immediate
13062       */
13063      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13064      public final void emitSUB_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
13065        int miStart = mi;
13066        setMachineCodes(mi++, (byte) 0x66);
13067        generateREXprefix(false, null, null, dstBase);
13068        // single byte opcode
13069        if (fits(imm,8)) {
13070          setMachineCodes(mi++, (byte) 0x83);
13071          // "register 0x5" is really part of the opcode
13072          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
13073          emitImm8((byte)imm);
13074        } else {
13075          setMachineCodes(mi++, (byte) 0x81);
13076          // "register 0x5" is really part of the opcode
13077          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
13078          emitImm16(imm);
13079        }
13080        if (lister != null) lister.RDI(miStart, "SUB", dstBase, dstDisp, imm);
13081      }
13082    
13083      /**
13084       * Generate a register-offset--immediate SUB. That is,
13085       * <PRE>
13086       * [dstIndex<<dstScale + dstDisp] -=  (word)  imm
13087       * </PRE>
13088       *
13089       * @param dstIndex the destination index register
13090       * @param dstScale the destination shift amount
13091       * @param dstDisp the destination displacement
13092       * @param imm immediate
13093       */
13094      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13095      public final void emitSUB_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
13096        int miStart = mi;
13097        setMachineCodes(mi++, (byte) 0x66);
13098        generateREXprefix(false, null, dstIndex, null);
13099        // single byte opcode
13100        if (fits(imm,8)) {
13101          setMachineCodes(mi++, (byte) 0x83);
13102          // "register 0x5" is really part of the opcode
13103          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
13104          emitImm8((byte)imm);
13105        } else {
13106          setMachineCodes(mi++, (byte) 0x81);
13107          // "register 0x5" is really part of the opcode
13108          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
13109          emitImm16(imm);
13110        }
13111        if (lister != null) lister.RFDI(miStart, "SUB", dstIndex, dstScale, dstDisp, imm);
13112      }
13113    
13114      /**
13115       * Generate a absolute--immediate SUB. That is,
13116       * <PRE>
13117       * [dstDisp] -=  (word)  imm
13118       * </PRE>
13119       *
13120       * @param dstDisp the destination displacement
13121       * @param imm immediate
13122       */
13123      public final void emitSUB_Abs_Imm_Word(Address dstDisp, int imm) {
13124        int miStart = mi;
13125        setMachineCodes(mi++, (byte) 0x66);
13126        generateREXprefix(false, null, null, null);
13127        // single byte opcode
13128        if (fits(imm,8)) {
13129          setMachineCodes(mi++, (byte) 0x83);
13130          // "register 0x5" is really part of the opcode
13131          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
13132          emitImm8((byte)imm);
13133        } else {
13134          setMachineCodes(mi++, (byte) 0x81);
13135          // "register 0x5" is really part of the opcode
13136          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
13137          emitImm16(imm);
13138        }
13139        if (lister != null) lister.RAI(miStart, "SUB", dstDisp, imm);
13140      }
13141    
13142      /**
13143       * Generate a register-index--immediate SUB. That is,
13144       * <PRE>
13145       * [dstBase + dstIndex<<dstScale + dstDisp] -=  (word)  imm
13146       * </PRE>
13147       *
13148       * @param dstBase the destination base register
13149       * @param dstIndex the destination index register
13150       * @param dstScale the destination shift amount
13151       * @param dstDisp the destination displacement
13152       * @param imm immediate
13153       */
13154      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
13155      public final void emitSUB_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
13156        int miStart = mi;
13157        setMachineCodes(mi++, (byte) 0x66);
13158        generateREXprefix(false, null, dstIndex, dstBase);
13159        // single byte opcode
13160        if (fits(imm,8)) {
13161          setMachineCodes(mi++, (byte) 0x83);
13162          // "register 0x5" is really part of the opcode
13163          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
13164          emitImm8((byte)imm);
13165        } else {
13166          setMachineCodes(mi++, (byte) 0x81);
13167          // "register 0x5" is really part of the opcode
13168          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
13169          emitImm16(imm);
13170        }
13171        if (lister != null) lister.RXDI(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, imm);
13172      }
13173    
13174      /**
13175       * Generate a register(indirect)--immediate SUB. That is,
13176       * <PRE>
13177       * [dstBase] -=  (word)  imm
13178       * </PRE>
13179       *
13180       * @param dstBase the destination base register
13181       * @param imm immediate
13182       */
13183      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13184      public final void emitSUB_RegInd_Imm_Word(GPR dstBase, int imm) {
13185        int miStart = mi;
13186        setMachineCodes(mi++, (byte) 0x66);
13187        generateREXprefix(false, null, null, dstBase);
13188        // single byte opcode
13189        if (fits(imm,8)) {
13190          setMachineCodes(mi++, (byte) 0x83);
13191          // "register 0x5" is really part of the opcode
13192          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
13193          emitImm8((byte)imm);
13194        } else {
13195          setMachineCodes(mi++, (byte) 0x81);
13196          // "register 0x5" is really part of the opcode
13197          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
13198          emitImm16(imm);
13199        }
13200        if (lister != null) lister.RNI(miStart, "SUB", dstBase, imm);
13201      }
13202    
13203      /**
13204       * Generate a register--immediate SUB. That is,
13205       * <PRE>
13206       * dstReg -=  (quad)  imm
13207       * </PRE>
13208       *
13209       * @param dstReg the destination register
13210       * @param imm immediate
13211       */
13212      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13213      public final void emitSUB_Reg_Imm_Quad(GPR dstReg, int imm) {
13214        int miStart = mi;
13215        // no group 1 to 4 prefix byte
13216        generateREXprefix(true, null, null, dstReg);
13217        // single byte opcode
13218        if (fits(imm,8)) {
13219          setMachineCodes(mi++, (byte) 0x83);
13220          // "register 0x5" is really part of the opcode
13221          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
13222          emitImm8((byte)imm);
13223        } else if (dstReg == EAX) {
13224          setMachineCodes(mi++, (byte) 0x2D);
13225          emitImm32(imm);
13226        } else {
13227          setMachineCodes(mi++, (byte) 0x81);
13228          // "register 0x5" is really part of the opcode
13229          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
13230          emitImm32(imm);
13231        }
13232        if (lister != null) lister.RI(miStart, "SUB", dstReg, imm);
13233      }
13234    
13235      /**
13236       * Generate a register-displacement--immediate SUB. That is,
13237       * <PRE>
13238       * [dstBase + dstDisp] -=  (quad)  imm
13239       * </PRE>
13240       *
13241       * @param dstBase the destination register
13242       * @param dstDisp the destination displacement
13243       * @param imm immediate
13244       */
13245      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13246      public final void emitSUB_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
13247        int miStart = mi;
13248        // no group 1 to 4 prefix byte
13249        generateREXprefix(true, null, null, dstBase);
13250        // single byte opcode
13251        if (fits(imm,8)) {
13252          setMachineCodes(mi++, (byte) 0x83);
13253          // "register 0x5" is really part of the opcode
13254          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
13255          emitImm8((byte)imm);
13256        } else {
13257          setMachineCodes(mi++, (byte) 0x81);
13258          // "register 0x5" is really part of the opcode
13259          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
13260          emitImm32(imm);
13261        }
13262        if (lister != null) lister.RDI(miStart, "SUB", dstBase, dstDisp, imm);
13263      }
13264    
13265      /**
13266       * Generate a register-offset--immediate SUB. That is,
13267       * <PRE>
13268       * [dstIndex<<dstScale + dstDisp] -=  (quad)  imm
13269       * </PRE>
13270       *
13271       * @param dstIndex the destination index register
13272       * @param dstScale the destination shift amount
13273       * @param dstDisp the destination displacement
13274       * @param imm immediate
13275       */
13276      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13277      public final void emitSUB_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
13278        int miStart = mi;
13279        // no group 1 to 4 prefix byte
13280        generateREXprefix(true, null, dstIndex, null);
13281        // single byte opcode
13282        if (fits(imm,8)) {
13283          setMachineCodes(mi++, (byte) 0x83);
13284          // "register 0x5" is really part of the opcode
13285          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
13286          emitImm8((byte)imm);
13287        } else {
13288          setMachineCodes(mi++, (byte) 0x81);
13289          // "register 0x5" is really part of the opcode
13290          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
13291          emitImm32(imm);
13292        }
13293        if (lister != null) lister.RFDI(miStart, "SUB", dstIndex, dstScale, dstDisp, imm);
13294      }
13295    
13296      /**
13297       * Generate a absolute--immediate SUB. That is,
13298       * <PRE>
13299       * [dstDisp] -=  (quad)  imm
13300       * </PRE>
13301       *
13302       * @param dstDisp the destination displacement
13303       * @param imm immediate
13304       */
13305      public final void emitSUB_Abs_Imm_Quad(Address dstDisp, int imm) {
13306        int miStart = mi;
13307        // no group 1 to 4 prefix byte
13308        generateREXprefix(true, null, null, null);
13309        // single byte opcode
13310        if (fits(imm,8)) {
13311          setMachineCodes(mi++, (byte) 0x83);
13312          // "register 0x5" is really part of the opcode
13313          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
13314          emitImm8((byte)imm);
13315        } else {
13316          setMachineCodes(mi++, (byte) 0x81);
13317          // "register 0x5" is really part of the opcode
13318          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
13319          emitImm32(imm);
13320        }
13321        if (lister != null) lister.RAI(miStart, "SUB", dstDisp, imm);
13322      }
13323    
13324      /**
13325       * Generate a register-index--immediate SUB. That is,
13326       * <PRE>
13327       * [dstBase + dstIndex<<dstScale + dstDisp] -=  (quad)  imm
13328       * </PRE>
13329       *
13330       * @param dstBase the destination base register
13331       * @param dstIndex the destination index register
13332       * @param dstScale the destination shift amount
13333       * @param dstDisp the destination displacement
13334       * @param imm immediate
13335       */
13336      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
13337      public final void emitSUB_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
13338        int miStart = mi;
13339        // no group 1 to 4 prefix byte
13340        generateREXprefix(true, null, dstIndex, dstBase);
13341        // single byte opcode
13342        if (fits(imm,8)) {
13343          setMachineCodes(mi++, (byte) 0x83);
13344          // "register 0x5" is really part of the opcode
13345          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
13346          emitImm8((byte)imm);
13347        } else {
13348          setMachineCodes(mi++, (byte) 0x81);
13349          // "register 0x5" is really part of the opcode
13350          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
13351          emitImm32(imm);
13352        }
13353        if (lister != null) lister.RXDI(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, imm);
13354      }
13355    
13356      /**
13357       * Generate a register(indirect)--immediate SUB. That is,
13358       * <PRE>
13359       * [dstBase] -=  (quad)  imm
13360       * </PRE>
13361       *
13362       * @param dstBase the destination base register
13363       * @param imm immediate
13364       */
13365      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13366      public final void emitSUB_RegInd_Imm_Quad(GPR dstBase, int imm) {
13367        int miStart = mi;
13368        // no group 1 to 4 prefix byte
13369        generateREXprefix(true, null, null, dstBase);
13370        // single byte opcode
13371        if (fits(imm,8)) {
13372          setMachineCodes(mi++, (byte) 0x83);
13373          // "register 0x5" is really part of the opcode
13374          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
13375          emitImm8((byte)imm);
13376        } else {
13377          setMachineCodes(mi++, (byte) 0x81);
13378          // "register 0x5" is really part of the opcode
13379          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
13380          emitImm32(imm);
13381        }
13382        if (lister != null) lister.RNI(miStart, "SUB", dstBase, imm);
13383      }
13384    
13385      /**
13386       * Generate a register--immediate SUB. That is,
13387       * <PRE>
13388       *  dstReg -= (byte) imm
13389       * </PRE>
13390       *
13391       * @param dstReg the destination register
13392       * @param imm immediate
13393       */
13394      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13395      public final void emitSUB_Reg_Imm_Byte(GPR dstReg, int imm) {
13396        int miStart = mi;
13397        if (dstReg == EAX) {
13398          setMachineCodes(mi++, (byte) 0x2C);
13399          emitImm8(imm);
13400        } else {
13401          generateREXprefix(false, null, null, dstReg);
13402          setMachineCodes(mi++, (byte) 0x80);
13403          // "register 0x5" is really part of the opcode
13404          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
13405          emitImm8(imm);
13406        }
13407        if (lister != null) lister.RI(miStart, "SUB", dstReg, imm);
13408      }
13409    
13410      /**
13411       * Generate a register-displacement--immediate SUB. That is,
13412       * <PRE>
13413       * [dstBase + dstDisp] -= (byte) imm
13414       * </PRE>
13415       *
13416       * @param dstBase the destination register
13417       * @param dstDisp the destination displacement
13418       * @param imm immediate
13419       */
13420      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13421      public final void emitSUB_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
13422        int miStart = mi;
13423        generateREXprefix(false, null, null, dstBase);
13424        setMachineCodes(mi++, (byte) 0x80);
13425        // "register 0x5" is really part of the opcode
13426        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
13427        emitImm8(imm);
13428        if (lister != null) lister.RDI(miStart, "SUB", dstBase, dstDisp, imm);
13429      }
13430    
13431      /**
13432       * Generate a register-index--immediate SUB. That is,
13433       * <PRE>
13434       * [dstBase + dstIndex<<scale + dstDisp] -= (byte) imm
13435       * </PRE>
13436       *
13437       * @param dstBase the destination base register
13438       * @param dstIndex the destination index register
13439       * @param dstScale the destination shift amount
13440       * @param dstDisp the destination displacement
13441       * @param imm immediate
13442       */
13443      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
13444      public final void emitSUB_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
13445        int miStart = mi;
13446        generateREXprefix(false, null, dstIndex, dstBase);
13447        setMachineCodes(mi++, (byte) 0x80);
13448        // "register 0x5" is really part of the opcode
13449        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
13450        emitImm8(imm);
13451        if (lister != null) lister.RXDI(miStart, "SUB", dstBase, dstIndex, dstScale, dstDisp, imm);
13452      }
13453    
13454      /**
13455       * Generate a register-offset--immediate SUB. That is,
13456       * <PRE>
13457       * [dstIndex<<dstScale + dstDisp] -= (byte) imm
13458       * </PRE>
13459       *
13460       * @param dstIndex the destination index register
13461       * @param dstScale the destination shift amount
13462       * @param dstDisp the destination displacement
13463       * @param imm immediate
13464       */
13465      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13466      public final void emitSUB_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
13467        int miStart = mi;
13468        generateREXprefix(false, null, dstIndex, null);
13469        setMachineCodes(mi++, (byte) 0x80);
13470        // "register 0x5" is really part of the opcode
13471        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
13472        emitImm8(imm);
13473        if (lister != null) lister.RFDI(miStart, "SUB", dstIndex, dstScale, dstDisp, imm);
13474      }
13475    
13476      /**
13477       * Generate a absolute--immediate SUB. That is,
13478       * <PRE>
13479       * [dstDisp] -= (byte) imm
13480       * </PRE>
13481       *
13482       * @param dstDisp the destination displacement
13483       * @param imm immediate
13484       */
13485      public final void emitSUB_Abs_Imm_Byte(Address dstDisp, int imm) {
13486        int miStart = mi;
13487        generateREXprefix(false, null, null, null);
13488        setMachineCodes(mi++, (byte) 0x80);
13489        // "register 0x5" is really part of the opcode
13490        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
13491        emitImm8(imm);
13492        if (lister != null) lister.RAI(miStart, "SUB", dstDisp, imm);
13493      }
13494    
13495      /**
13496       * Generate a register(indirect)--immediate SUB. That is,
13497       * <PRE>
13498       * [dstBase] -= (byte) imm
13499       * </PRE>
13500       *
13501       * @param dstBase the destination base register
13502       * @param imm immediate
13503       */
13504      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
13505      public final void emitSUB_RegInd_Imm_Byte(GPR dstBase, int imm) {
13506        int miStart = mi;
13507        generateREXprefix(false, null, null, dstBase);
13508        setMachineCodes(mi++, (byte) 0x80);
13509        // "register 0x5" is really part of the opcode
13510        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
13511        emitImm8(imm);
13512        if (lister != null) lister.RNI(miStart, "SUB", dstBase, imm);
13513      }
13514    
13515      /**
13516       * Generate a register(indirect)--register TEST. That is,
13517       * <PRE>
13518       * [dstBase] &=  srcReg
13519       * </PRE>
13520       *
13521       * @param dstBase the destination base
13522       * @param srcReg the source register
13523       */
13524      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
13525      public final void emitTEST_RegInd_Reg(GPR dstBase, GPR srcReg) {
13526        int miStart = mi;
13527        // no group 1 to 4 prefix byte
13528        generateREXprefix(false, srcReg, null, dstBase);
13529        // single byte opcode
13530        setMachineCodes(mi++, (byte) 0x85);
13531        emitRegIndirectRegOperands(dstBase, srcReg);
13532        if (lister != null) lister.RNR(miStart, "TEST", dstBase, srcReg);
13533      }
13534    
13535      /**
13536       * Generate a register-offset--register TEST. That is,
13537       * <PRE>
13538       * [dstReg<<dstScale + dstDisp] &=  srcReg
13539       * </PRE>
13540       *
13541       * @param dstIndex the destination index register
13542       * @param dstScale the destination shift amount
13543       * @param dstDisp the destination displacement
13544       * @param srcReg the source register
13545       */
13546      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
13547      public final void emitTEST_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
13548        int miStart = mi;
13549        // no group 1 to 4 prefix byte
13550        generateREXprefix(false, srcReg, dstIndex, null);
13551        // single byte opcode
13552        setMachineCodes(mi++, (byte) 0x85);
13553        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
13554        if (lister != null) lister.RFDR(miStart, "TEST", dstIndex, dstScale, dstDisp, srcReg);
13555      }
13556    
13557      /**
13558       * Generate a absolute--register TEST. That is,
13559       * <PRE>
13560       * [dstDisp] &=  srcReg
13561       * </PRE>
13562       *
13563       * @param dstDisp the destination address
13564       * @param srcReg the source register
13565       */
13566      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
13567      public final void emitTEST_Abs_Reg(Address dstDisp, GPR srcReg) {
13568        int miStart = mi;
13569        // no group 1 to 4 prefix byte
13570        generateREXprefix(false, srcReg, null, null);
13571        // single byte opcode
13572        setMachineCodes(mi++, (byte) 0x85);
13573        emitAbsRegOperands(dstDisp, srcReg);
13574        if (lister != null) lister.RAR(miStart, "TEST", dstDisp, srcReg);
13575      }
13576    
13577      /**
13578       * Generate a register-index--register TEST. That is,
13579       * <PRE>
13580       * [dstBase + dstIndex<<dstScale + dstDisp] &=  srcReg
13581       * </PRE>
13582       *
13583       * @param dstBase the base register
13584       * @param dstIndex the destination index register
13585       * @param dstScale the destination shift amount
13586       * @param dstDisp the destination displacement
13587       * @param srcReg the source register
13588       */
13589      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
13590      public final void emitTEST_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
13591        int miStart = mi;
13592        // no group 1 to 4 prefix byte
13593        generateREXprefix(false, srcReg, dstIndex, dstBase);
13594        // single byte opcode
13595        setMachineCodes(mi++, (byte) 0x85);
13596        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
13597        if (lister != null) lister.RXDR(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, srcReg);
13598      }
13599    
13600      /**
13601       * Generate a register-displacement--register TEST. That is,
13602       * <PRE>
13603       * [dstBase + dstDisp] &=  srcReg
13604       * </PRE>
13605       *
13606       * @param dstBase the base register
13607       * @param dstDisp the destination displacement
13608       * @param srcReg the source register
13609       */
13610      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
13611      public final void emitTEST_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
13612        int miStart = mi;
13613        // no group 1 to 4 prefix byte
13614        generateREXprefix(false, srcReg, null, dstBase);
13615        // single byte opcode
13616        setMachineCodes(mi++, (byte) 0x85);
13617        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
13618        if (lister != null) lister.RDR(miStart, "TEST", dstBase, dstDisp, srcReg);
13619      }
13620    
13621      /**
13622       * Generate a register--register TEST. That is,
13623       * <PRE>
13624       * dstReg &=  srcReg
13625       * </PRE>
13626       *
13627       * @param dstReg the destination register
13628       * @param srcReg the source register
13629       */
13630      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
13631      public final void emitTEST_Reg_Reg(GPR dstReg, GPR srcReg) {
13632        int miStart = mi;
13633        // no group 1 to 4 prefix byte
13634        generateREXprefix(false, srcReg, null, dstReg);
13635        // single byte opcode
13636        setMachineCodes(mi++, (byte) 0x85);
13637        emitRegRegOperands(dstReg, srcReg);
13638        if (lister != null) lister.RR(miStart, "TEST", dstReg, srcReg);
13639      }
13640    
13641      /**
13642       * Generate a register(indirect)--register TEST. That is,
13643       * <PRE>
13644       * [dstBase] &=  (word)  srcReg
13645       * </PRE>
13646       *
13647       * @param dstBase the destination base
13648       * @param srcReg the source register
13649       */
13650      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
13651      public final void emitTEST_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
13652        int miStart = mi;
13653        setMachineCodes(mi++, (byte) 0x66);
13654        generateREXprefix(false, srcReg, null, dstBase);
13655        // single byte opcode
13656        setMachineCodes(mi++, (byte) 0x85);
13657        emitRegIndirectRegOperands(dstBase, srcReg);
13658        if (lister != null) lister.RNR(miStart, "TEST", dstBase, srcReg);
13659      }
13660    
13661      /**
13662       * Generate a register-offset--register TEST. That is,
13663       * <PRE>
13664       * [dstReg<<dstScale + dstDisp] &=  (word)  srcReg
13665       * </PRE>
13666       *
13667       * @param dstIndex the destination index register
13668       * @param dstScale the destination shift amount
13669       * @param dstDisp the destination displacement
13670       * @param srcReg the source register
13671       */
13672      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
13673      public final void emitTEST_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
13674        int miStart = mi;
13675        setMachineCodes(mi++, (byte) 0x66);
13676        generateREXprefix(false, srcReg, dstIndex, null);
13677        // single byte opcode
13678        setMachineCodes(mi++, (byte) 0x85);
13679        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
13680        if (lister != null) lister.RFDR(miStart, "TEST", dstIndex, dstScale, dstDisp, srcReg);
13681      }
13682    
13683      /**
13684       * Generate a absolute--register TEST. That is,
13685       * <PRE>
13686       * [dstDisp] &=  (word)  srcReg
13687       * </PRE>
13688       *
13689       * @param dstDisp the destination address
13690       * @param srcReg the source register
13691       */
13692      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
13693      public final void emitTEST_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
13694        int miStart = mi;
13695        setMachineCodes(mi++, (byte) 0x66);
13696        generateREXprefix(false, srcReg, null, null);
13697        // single byte opcode
13698        setMachineCodes(mi++, (byte) 0x85);
13699        emitAbsRegOperands(dstDisp, srcReg);
13700        if (lister != null) lister.RAR(miStart, "TEST", dstDisp, srcReg);
13701      }
13702    
13703      /**
13704       * Generate a register-index--register TEST. That is,
13705       * <PRE>
13706       * [dstBase + dstIndex<<dstScale + dstDisp] &=  (word)  srcReg
13707       * </PRE>
13708       *
13709       * @param dstBase the base register
13710       * @param dstIndex the destination index register
13711       * @param dstScale the destination shift amount
13712       * @param dstDisp the destination displacement
13713       * @param srcReg the source register
13714       */
13715      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
13716      public final void emitTEST_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
13717        int miStart = mi;
13718        setMachineCodes(mi++, (byte) 0x66);
13719        generateREXprefix(false, srcReg, dstIndex, dstBase);
13720        // single byte opcode
13721        setMachineCodes(mi++, (byte) 0x85);
13722        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
13723        if (lister != null) lister.RXDR(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, srcReg);
13724      }
13725    
13726      /**
13727       * Generate a register-displacement--register TEST. That is,
13728       * <PRE>
13729       * [dstBase + dstDisp] &=  (word)  srcReg
13730       * </PRE>
13731       *
13732       * @param dstBase the base register
13733       * @param dstDisp the destination displacement
13734       * @param srcReg the source register
13735       */
13736      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
13737      public final void emitTEST_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
13738        int miStart = mi;
13739        setMachineCodes(mi++, (byte) 0x66);
13740        generateREXprefix(false, srcReg, null, dstBase);
13741        // single byte opcode
13742        setMachineCodes(mi++, (byte) 0x85);
13743        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
13744        if (lister != null) lister.RDR(miStart, "TEST", dstBase, dstDisp, srcReg);
13745      }
13746    
13747      /**
13748       * Generate a register--register TEST. That is,
13749       * <PRE>
13750       * dstReg &=  (word)  srcReg
13751       * </PRE>
13752       *
13753       * @param dstReg the destination register
13754       * @param srcReg the source register
13755       */
13756      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
13757      public final void emitTEST_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
13758        int miStart = mi;
13759        setMachineCodes(mi++, (byte) 0x66);
13760        generateREXprefix(false, srcReg, null, dstReg);
13761        // single byte opcode
13762        setMachineCodes(mi++, (byte) 0x85);
13763        emitRegRegOperands(dstReg, srcReg);
13764        if (lister != null) lister.RR(miStart, "TEST", dstReg, srcReg);
13765      }
13766    
13767      /**
13768       * Generate a register(indirect)--register TEST. That is,
13769       * <PRE>
13770       * [dstBase] &=  (quad)  srcReg
13771       * </PRE>
13772       *
13773       * @param dstBase the destination base
13774       * @param srcReg the source register
13775       */
13776      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
13777      public final void emitTEST_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
13778        int miStart = mi;
13779        // no group 1 to 4 prefix byte
13780        generateREXprefix(true, srcReg, null, dstBase);
13781        // single byte opcode
13782        setMachineCodes(mi++, (byte) 0x85);
13783        emitRegIndirectRegOperands(dstBase, srcReg);
13784        if (lister != null) lister.RNR(miStart, "TEST", dstBase, srcReg);
13785      }
13786    
13787      /**
13788       * Generate a register-offset--register TEST. That is,
13789       * <PRE>
13790       * [dstReg<<dstScale + dstDisp] &=  (quad)  srcReg
13791       * </PRE>
13792       *
13793       * @param dstIndex the destination index register
13794       * @param dstScale the destination shift amount
13795       * @param dstDisp the destination displacement
13796       * @param srcReg the source register
13797       */
13798      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
13799      public final void emitTEST_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
13800        int miStart = mi;
13801        // no group 1 to 4 prefix byte
13802        generateREXprefix(true, srcReg, dstIndex, null);
13803        // single byte opcode
13804        setMachineCodes(mi++, (byte) 0x85);
13805        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
13806        if (lister != null) lister.RFDR(miStart, "TEST", dstIndex, dstScale, dstDisp, srcReg);
13807      }
13808    
13809      /**
13810       * Generate a absolute--register TEST. That is,
13811       * <PRE>
13812       * [dstDisp] &=  (quad)  srcReg
13813       * </PRE>
13814       *
13815       * @param dstDisp the destination address
13816       * @param srcReg the source register
13817       */
13818      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
13819      public final void emitTEST_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
13820        int miStart = mi;
13821        // no group 1 to 4 prefix byte
13822        generateREXprefix(true, srcReg, null, null);
13823        // single byte opcode
13824        setMachineCodes(mi++, (byte) 0x85);
13825        emitAbsRegOperands(dstDisp, srcReg);
13826        if (lister != null) lister.RAR(miStart, "TEST", dstDisp, srcReg);
13827      }
13828    
13829      /**
13830       * Generate a register-index--register TEST. That is,
13831       * <PRE>
13832       * [dstBase + dstIndex<<dstScale + dstDisp] &=  (quad)  srcReg
13833       * </PRE>
13834       *
13835       * @param dstBase the base register
13836       * @param dstIndex the destination index register
13837       * @param dstScale the destination shift amount
13838       * @param dstDisp the destination displacement
13839       * @param srcReg the source register
13840       */
13841      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
13842      public final void emitTEST_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
13843        int miStart = mi;
13844        // no group 1 to 4 prefix byte
13845        generateREXprefix(true, srcReg, dstIndex, dstBase);
13846        // single byte opcode
13847        setMachineCodes(mi++, (byte) 0x85);
13848        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
13849        if (lister != null) lister.RXDR(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, srcReg);
13850      }
13851    
13852      /**
13853       * Generate a register-displacement--register TEST. That is,
13854       * <PRE>
13855       * [dstBase + dstDisp] &=  (quad)  srcReg
13856       * </PRE>
13857       *
13858       * @param dstBase the base register
13859       * @param dstDisp the destination displacement
13860       * @param srcReg the source register
13861       */
13862      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
13863      public final void emitTEST_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
13864        int miStart = mi;
13865        // no group 1 to 4 prefix byte
13866        generateREXprefix(true, srcReg, null, dstBase);
13867        // single byte opcode
13868        setMachineCodes(mi++, (byte) 0x85);
13869        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
13870        if (lister != null) lister.RDR(miStart, "TEST", dstBase, dstDisp, srcReg);
13871      }
13872    
13873      /**
13874       * Generate a register--register TEST. That is,
13875       * <PRE>
13876       * dstReg &=  (quad)  srcReg
13877       * </PRE>
13878       *
13879       * @param dstReg the destination register
13880       * @param srcReg the source register
13881       */
13882      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
13883      public final void emitTEST_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
13884        int miStart = mi;
13885        // no group 1 to 4 prefix byte
13886        generateREXprefix(true, srcReg, null, dstReg);
13887        // single byte opcode
13888        setMachineCodes(mi++, (byte) 0x85);
13889        emitRegRegOperands(dstReg, srcReg);
13890        if (lister != null) lister.RR(miStart, "TEST", dstReg, srcReg);
13891      }
13892    
13893      /**
13894       * Generate a register(indirect)--register TEST. That is,
13895       * <PRE>
13896       * [dstBase] &=  (byte)  srcReg
13897       * </PRE>
13898       *
13899       * @param dstBase the destination base
13900       * @param srcReg the source register
13901       */
13902      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
13903      public final void emitTEST_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
13904        int miStart = mi;
13905        // no group 1 to 4 prefix byte
13906        generateREXprefix(false, srcReg, null, dstBase);
13907        // single byte opcode
13908        setMachineCodes(mi++, (byte) 0x84);
13909        emitRegIndirectRegOperands(dstBase, srcReg);
13910        if (lister != null) lister.RNR(miStart, "TEST", dstBase, srcReg);
13911      }
13912    
13913      /**
13914       * Generate a register-offset--register TEST. That is,
13915       * <PRE>
13916       * [dstReg<<dstScale + dstDisp] &=  (byte)  srcReg
13917       * </PRE>
13918       *
13919       * @param dstIndex the destination index register
13920       * @param dstScale the destination shift amount
13921       * @param dstDisp the destination displacement
13922       * @param srcReg the source register
13923       */
13924      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
13925      public final void emitTEST_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
13926        int miStart = mi;
13927        // no group 1 to 4 prefix byte
13928        generateREXprefix(false, srcReg, dstIndex, null);
13929        // single byte opcode
13930        setMachineCodes(mi++, (byte) 0x84);
13931        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
13932        if (lister != null) lister.RFDR(miStart, "TEST", dstIndex, dstScale, dstDisp, srcReg);
13933      }
13934    
13935      /**
13936       * Generate a absolute--register TEST. That is,
13937       * <PRE>
13938       * [dstDisp] &=  (byte)  srcReg
13939       * </PRE>
13940       *
13941       * @param dstDisp the destination address
13942       * @param srcReg the source register
13943       */
13944      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
13945      public final void emitTEST_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
13946        int miStart = mi;
13947        // no group 1 to 4 prefix byte
13948        generateREXprefix(false, srcReg, null, null);
13949        // single byte opcode
13950        setMachineCodes(mi++, (byte) 0x84);
13951        emitAbsRegOperands(dstDisp, srcReg);
13952        if (lister != null) lister.RAR(miStart, "TEST", dstDisp, srcReg);
13953      }
13954    
13955      /**
13956       * Generate a register-index--register TEST. That is,
13957       * <PRE>
13958       * [dstBase + dstIndex<<dstScale + dstDisp] &=  (byte)  srcReg
13959       * </PRE>
13960       *
13961       * @param dstBase the base register
13962       * @param dstIndex the destination index register
13963       * @param dstScale the destination shift amount
13964       * @param dstDisp the destination displacement
13965       * @param srcReg the source register
13966       */
13967      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
13968      public final void emitTEST_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
13969        int miStart = mi;
13970        // no group 1 to 4 prefix byte
13971        generateREXprefix(false, srcReg, dstIndex, dstBase);
13972        // single byte opcode
13973        setMachineCodes(mi++, (byte) 0x84);
13974        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
13975        if (lister != null) lister.RXDR(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, srcReg);
13976      }
13977    
13978      /**
13979       * Generate a register-displacement--register TEST. That is,
13980       * <PRE>
13981       * [dstBase + dstDisp] &=  (byte)  srcReg
13982       * </PRE>
13983       *
13984       * @param dstBase the base register
13985       * @param dstDisp the destination displacement
13986       * @param srcReg the source register
13987       */
13988      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
13989      public final void emitTEST_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
13990        int miStart = mi;
13991        // no group 1 to 4 prefix byte
13992        generateREXprefix(false, srcReg, null, dstBase);
13993        // single byte opcode
13994        setMachineCodes(mi++, (byte) 0x84);
13995        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
13996        if (lister != null) lister.RDR(miStart, "TEST", dstBase, dstDisp, srcReg);
13997      }
13998    
13999      /**
14000       * Generate a register--register TEST. That is,
14001       * <PRE>
14002       * dstReg &=  (byte)  srcReg
14003       * </PRE>
14004       *
14005       * @param dstReg the destination register
14006       * @param srcReg the source register
14007       */
14008      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14009      public final void emitTEST_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
14010        int miStart = mi;
14011        // no group 1 to 4 prefix byte
14012        generateREXprefix(false, srcReg, null, dstReg);
14013        // single byte opcode
14014        setMachineCodes(mi++, (byte) 0x84);
14015        emitRegRegOperands(dstReg, srcReg);
14016        if (lister != null) lister.RR(miStart, "TEST", dstReg, srcReg);
14017      }
14018    
14019      /**
14020       * Generate a register--immediate TEST. That is,
14021       * <PRE>
14022       * dstReg &=  imm
14023       * </PRE>
14024       *
14025       * @param dstReg the destination register
14026       * @param imm immediate
14027       */
14028      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14029      public final void emitTEST_Reg_Imm(GPR dstReg, int imm) {
14030        int miStart = mi;
14031        // no group 1 to 4 prefix byte
14032        generateREXprefix(false, null, null, dstReg);
14033        // single byte opcode
14034        if (false) {
14035        } else if (dstReg == EAX) {
14036          setMachineCodes(mi++, (byte) 0xA9);
14037          emitImm32(imm);
14038        } else {
14039          setMachineCodes(mi++, (byte) 0xF7);
14040          // "register 0x0" is really part of the opcode
14041          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
14042          emitImm32(imm);
14043        }
14044        if (lister != null) lister.RI(miStart, "TEST", dstReg, imm);
14045      }
14046    
14047      /**
14048       * Generate a register-displacement--immediate TEST. That is,
14049       * <PRE>
14050       * [dstBase + dstDisp] &=  imm
14051       * </PRE>
14052       *
14053       * @param dstBase the destination register
14054       * @param dstDisp the destination displacement
14055       * @param imm immediate
14056       */
14057      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14058      public final void emitTEST_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
14059        int miStart = mi;
14060        // no group 1 to 4 prefix byte
14061        generateREXprefix(false, null, null, dstBase);
14062        // single byte opcode
14063        if (false) {
14064        } else {
14065          setMachineCodes(mi++, (byte) 0xF7);
14066          // "register 0x0" is really part of the opcode
14067          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
14068          emitImm32(imm);
14069        }
14070        if (lister != null) lister.RDI(miStart, "TEST", dstBase, dstDisp, imm);
14071      }
14072    
14073      /**
14074       * Generate a register-offset--immediate TEST. That is,
14075       * <PRE>
14076       * [dstIndex<<dstScale + dstDisp] &=  imm
14077       * </PRE>
14078       *
14079       * @param dstIndex the destination index register
14080       * @param dstScale the destination shift amount
14081       * @param dstDisp the destination displacement
14082       * @param imm immediate
14083       */
14084      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14085      public final void emitTEST_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
14086        int miStart = mi;
14087        // no group 1 to 4 prefix byte
14088        generateREXprefix(false, null, dstIndex, null);
14089        // single byte opcode
14090        if (false) {
14091        } else {
14092          setMachineCodes(mi++, (byte) 0xF7);
14093          // "register 0x0" is really part of the opcode
14094          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
14095          emitImm32(imm);
14096        }
14097        if (lister != null) lister.RFDI(miStart, "TEST", dstIndex, dstScale, dstDisp, imm);
14098      }
14099    
14100      /**
14101       * Generate a absolute--immediate TEST. That is,
14102       * <PRE>
14103       * [dstDisp] &=  imm
14104       * </PRE>
14105       *
14106       * @param dstDisp the destination displacement
14107       * @param imm immediate
14108       */
14109      public final void emitTEST_Abs_Imm(Address dstDisp, int imm) {
14110        int miStart = mi;
14111        // no group 1 to 4 prefix byte
14112        generateREXprefix(false, null, null, null);
14113        // single byte opcode
14114        if (false) {
14115        } else {
14116          setMachineCodes(mi++, (byte) 0xF7);
14117          // "register 0x0" is really part of the opcode
14118          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
14119          emitImm32(imm);
14120        }
14121        if (lister != null) lister.RAI(miStart, "TEST", dstDisp, imm);
14122      }
14123    
14124      /**
14125       * Generate a register-index--immediate TEST. That is,
14126       * <PRE>
14127       * [dstBase + dstIndex<<dstScale + dstDisp] &=  imm
14128       * </PRE>
14129       *
14130       * @param dstBase the destination base register
14131       * @param dstIndex the destination index register
14132       * @param dstScale the destination shift amount
14133       * @param dstDisp the destination displacement
14134       * @param imm immediate
14135       */
14136      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14137      public final void emitTEST_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
14138        int miStart = mi;
14139        // no group 1 to 4 prefix byte
14140        generateREXprefix(false, null, dstIndex, dstBase);
14141        // single byte opcode
14142        if (false) {
14143        } else {
14144          setMachineCodes(mi++, (byte) 0xF7);
14145          // "register 0x0" is really part of the opcode
14146          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
14147          emitImm32(imm);
14148        }
14149        if (lister != null) lister.RXDI(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, imm);
14150      }
14151    
14152      /**
14153       * Generate a register(indirect)--immediate TEST. That is,
14154       * <PRE>
14155       * [dstBase] &=  imm
14156       * </PRE>
14157       *
14158       * @param dstBase the destination base register
14159       * @param imm immediate
14160       */
14161      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14162      public final void emitTEST_RegInd_Imm(GPR dstBase, int imm) {
14163        int miStart = mi;
14164        // no group 1 to 4 prefix byte
14165        generateREXprefix(false, null, null, dstBase);
14166        // single byte opcode
14167        if (false) {
14168        } else {
14169          setMachineCodes(mi++, (byte) 0xF7);
14170          // "register 0x0" is really part of the opcode
14171          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
14172          emitImm32(imm);
14173        }
14174        if (lister != null) lister.RNI(miStart, "TEST", dstBase, imm);
14175      }
14176    
14177      /**
14178       * Generate a register--immediate TEST. That is,
14179       * <PRE>
14180       * dstReg &=  (word)  imm
14181       * </PRE>
14182       *
14183       * @param dstReg the destination register
14184       * @param imm immediate
14185       */
14186      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14187      public final void emitTEST_Reg_Imm_Word(GPR dstReg, int imm) {
14188        int miStart = mi;
14189        setMachineCodes(mi++, (byte) 0x66);
14190        generateREXprefix(false, null, null, dstReg);
14191        // single byte opcode
14192        if (false) {
14193        } else if (dstReg == EAX) {
14194          setMachineCodes(mi++, (byte) 0xA9);
14195          emitImm16(imm);
14196        } else {
14197          setMachineCodes(mi++, (byte) 0xF7);
14198          // "register 0x0" is really part of the opcode
14199          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
14200          emitImm16(imm);
14201        }
14202        if (lister != null) lister.RI(miStart, "TEST", dstReg, imm);
14203      }
14204    
14205      /**
14206       * Generate a register-displacement--immediate TEST. That is,
14207       * <PRE>
14208       * [dstBase + dstDisp] &=  (word)  imm
14209       * </PRE>
14210       *
14211       * @param dstBase the destination register
14212       * @param dstDisp the destination displacement
14213       * @param imm immediate
14214       */
14215      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14216      public final void emitTEST_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
14217        int miStart = mi;
14218        setMachineCodes(mi++, (byte) 0x66);
14219        generateREXprefix(false, null, null, dstBase);
14220        // single byte opcode
14221        if (false) {
14222        } else {
14223          setMachineCodes(mi++, (byte) 0xF7);
14224          // "register 0x0" is really part of the opcode
14225          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
14226          emitImm16(imm);
14227        }
14228        if (lister != null) lister.RDI(miStart, "TEST", dstBase, dstDisp, imm);
14229      }
14230    
14231      /**
14232       * Generate a register-offset--immediate TEST. That is,
14233       * <PRE>
14234       * [dstIndex<<dstScale + dstDisp] &=  (word)  imm
14235       * </PRE>
14236       *
14237       * @param dstIndex the destination index register
14238       * @param dstScale the destination shift amount
14239       * @param dstDisp the destination displacement
14240       * @param imm immediate
14241       */
14242      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14243      public final void emitTEST_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
14244        int miStart = mi;
14245        setMachineCodes(mi++, (byte) 0x66);
14246        generateREXprefix(false, null, dstIndex, null);
14247        // single byte opcode
14248        if (false) {
14249        } else {
14250          setMachineCodes(mi++, (byte) 0xF7);
14251          // "register 0x0" is really part of the opcode
14252          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
14253          emitImm16(imm);
14254        }
14255        if (lister != null) lister.RFDI(miStart, "TEST", dstIndex, dstScale, dstDisp, imm);
14256      }
14257    
14258      /**
14259       * Generate a absolute--immediate TEST. That is,
14260       * <PRE>
14261       * [dstDisp] &=  (word)  imm
14262       * </PRE>
14263       *
14264       * @param dstDisp the destination displacement
14265       * @param imm immediate
14266       */
14267      public final void emitTEST_Abs_Imm_Word(Address dstDisp, int imm) {
14268        int miStart = mi;
14269        setMachineCodes(mi++, (byte) 0x66);
14270        generateREXprefix(false, null, null, null);
14271        // single byte opcode
14272        if (false) {
14273        } else {
14274          setMachineCodes(mi++, (byte) 0xF7);
14275          // "register 0x0" is really part of the opcode
14276          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
14277          emitImm16(imm);
14278        }
14279        if (lister != null) lister.RAI(miStart, "TEST", dstDisp, imm);
14280      }
14281    
14282      /**
14283       * Generate a register-index--immediate TEST. That is,
14284       * <PRE>
14285       * [dstBase + dstIndex<<dstScale + dstDisp] &=  (word)  imm
14286       * </PRE>
14287       *
14288       * @param dstBase the destination base register
14289       * @param dstIndex the destination index register
14290       * @param dstScale the destination shift amount
14291       * @param dstDisp the destination displacement
14292       * @param imm immediate
14293       */
14294      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14295      public final void emitTEST_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
14296        int miStart = mi;
14297        setMachineCodes(mi++, (byte) 0x66);
14298        generateREXprefix(false, null, dstIndex, dstBase);
14299        // single byte opcode
14300        if (false) {
14301        } else {
14302          setMachineCodes(mi++, (byte) 0xF7);
14303          // "register 0x0" is really part of the opcode
14304          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
14305          emitImm16(imm);
14306        }
14307        if (lister != null) lister.RXDI(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, imm);
14308      }
14309    
14310      /**
14311       * Generate a register(indirect)--immediate TEST. That is,
14312       * <PRE>
14313       * [dstBase] &=  (word)  imm
14314       * </PRE>
14315       *
14316       * @param dstBase the destination base register
14317       * @param imm immediate
14318       */
14319      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14320      public final void emitTEST_RegInd_Imm_Word(GPR dstBase, int imm) {
14321        int miStart = mi;
14322        setMachineCodes(mi++, (byte) 0x66);
14323        generateREXprefix(false, null, null, dstBase);
14324        // single byte opcode
14325        if (false) {
14326        } else {
14327          setMachineCodes(mi++, (byte) 0xF7);
14328          // "register 0x0" is really part of the opcode
14329          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
14330          emitImm16(imm);
14331        }
14332        if (lister != null) lister.RNI(miStart, "TEST", dstBase, imm);
14333      }
14334    
14335      /**
14336       * Generate a register--immediate TEST. That is,
14337       * <PRE>
14338       * dstReg &=  (quad)  imm
14339       * </PRE>
14340       *
14341       * @param dstReg the destination register
14342       * @param imm immediate
14343       */
14344      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14345      public final void emitTEST_Reg_Imm_Quad(GPR dstReg, int imm) {
14346        int miStart = mi;
14347        // no group 1 to 4 prefix byte
14348        generateREXprefix(true, null, null, dstReg);
14349        // single byte opcode
14350        if (false) {
14351        } else if (dstReg == EAX) {
14352          setMachineCodes(mi++, (byte) 0xA9);
14353          emitImm32(imm);
14354        } else {
14355          setMachineCodes(mi++, (byte) 0xF7);
14356          // "register 0x0" is really part of the opcode
14357          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
14358          emitImm32(imm);
14359        }
14360        if (lister != null) lister.RI(miStart, "TEST", dstReg, imm);
14361      }
14362    
14363      /**
14364       * Generate a register-displacement--immediate TEST. That is,
14365       * <PRE>
14366       * [dstBase + dstDisp] &=  (quad)  imm
14367       * </PRE>
14368       *
14369       * @param dstBase the destination register
14370       * @param dstDisp the destination displacement
14371       * @param imm immediate
14372       */
14373      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14374      public final void emitTEST_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
14375        int miStart = mi;
14376        // no group 1 to 4 prefix byte
14377        generateREXprefix(true, null, null, dstBase);
14378        // single byte opcode
14379        if (false) {
14380        } else {
14381          setMachineCodes(mi++, (byte) 0xF7);
14382          // "register 0x0" is really part of the opcode
14383          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
14384          emitImm32(imm);
14385        }
14386        if (lister != null) lister.RDI(miStart, "TEST", dstBase, dstDisp, imm);
14387      }
14388    
14389      /**
14390       * Generate a register-offset--immediate TEST. That is,
14391       * <PRE>
14392       * [dstIndex<<dstScale + dstDisp] &=  (quad)  imm
14393       * </PRE>
14394       *
14395       * @param dstIndex the destination index register
14396       * @param dstScale the destination shift amount
14397       * @param dstDisp the destination displacement
14398       * @param imm immediate
14399       */
14400      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14401      public final void emitTEST_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
14402        int miStart = mi;
14403        // no group 1 to 4 prefix byte
14404        generateREXprefix(true, null, dstIndex, null);
14405        // single byte opcode
14406        if (false) {
14407        } else {
14408          setMachineCodes(mi++, (byte) 0xF7);
14409          // "register 0x0" is really part of the opcode
14410          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
14411          emitImm32(imm);
14412        }
14413        if (lister != null) lister.RFDI(miStart, "TEST", dstIndex, dstScale, dstDisp, imm);
14414      }
14415    
14416      /**
14417       * Generate a absolute--immediate TEST. That is,
14418       * <PRE>
14419       * [dstDisp] &=  (quad)  imm
14420       * </PRE>
14421       *
14422       * @param dstDisp the destination displacement
14423       * @param imm immediate
14424       */
14425      public final void emitTEST_Abs_Imm_Quad(Address dstDisp, int imm) {
14426        int miStart = mi;
14427        // no group 1 to 4 prefix byte
14428        generateREXprefix(true, null, null, null);
14429        // single byte opcode
14430        if (false) {
14431        } else {
14432          setMachineCodes(mi++, (byte) 0xF7);
14433          // "register 0x0" is really part of the opcode
14434          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
14435          emitImm32(imm);
14436        }
14437        if (lister != null) lister.RAI(miStart, "TEST", dstDisp, imm);
14438      }
14439    
14440      /**
14441       * Generate a register-index--immediate TEST. That is,
14442       * <PRE>
14443       * [dstBase + dstIndex<<dstScale + dstDisp] &=  (quad)  imm
14444       * </PRE>
14445       *
14446       * @param dstBase the destination base register
14447       * @param dstIndex the destination index register
14448       * @param dstScale the destination shift amount
14449       * @param dstDisp the destination displacement
14450       * @param imm immediate
14451       */
14452      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14453      public final void emitTEST_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
14454        int miStart = mi;
14455        // no group 1 to 4 prefix byte
14456        generateREXprefix(true, null, dstIndex, dstBase);
14457        // single byte opcode
14458        if (false) {
14459        } else {
14460          setMachineCodes(mi++, (byte) 0xF7);
14461          // "register 0x0" is really part of the opcode
14462          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
14463          emitImm32(imm);
14464        }
14465        if (lister != null) lister.RXDI(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, imm);
14466      }
14467    
14468      /**
14469       * Generate a register(indirect)--immediate TEST. That is,
14470       * <PRE>
14471       * [dstBase] &=  (quad)  imm
14472       * </PRE>
14473       *
14474       * @param dstBase the destination base register
14475       * @param imm immediate
14476       */
14477      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14478      public final void emitTEST_RegInd_Imm_Quad(GPR dstBase, int imm) {
14479        int miStart = mi;
14480        // no group 1 to 4 prefix byte
14481        generateREXprefix(true, null, null, dstBase);
14482        // single byte opcode
14483        if (false) {
14484        } else {
14485          setMachineCodes(mi++, (byte) 0xF7);
14486          // "register 0x0" is really part of the opcode
14487          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
14488          emitImm32(imm);
14489        }
14490        if (lister != null) lister.RNI(miStart, "TEST", dstBase, imm);
14491      }
14492    
14493      /**
14494       * Generate a register--immediate TEST. That is,
14495       * <PRE>
14496       *  dstReg &= (byte) imm
14497       * </PRE>
14498       *
14499       * @param dstReg the destination register
14500       * @param imm immediate
14501       */
14502      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14503      public final void emitTEST_Reg_Imm_Byte(GPR dstReg, int imm) {
14504        int miStart = mi;
14505        if (dstReg == EAX) {
14506          setMachineCodes(mi++, (byte) 0xA8);
14507          emitImm8(imm);
14508        } else {
14509          generateREXprefix(false, null, null, dstReg);
14510          setMachineCodes(mi++, (byte) 0xF6);
14511          // "register 0x0" is really part of the opcode
14512          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
14513          emitImm8(imm);
14514        }
14515        if (lister != null) lister.RI(miStart, "TEST", dstReg, imm);
14516      }
14517    
14518      /**
14519       * Generate a register-displacement--immediate TEST. That is,
14520       * <PRE>
14521       * [dstBase + dstDisp] &= (byte) imm
14522       * </PRE>
14523       *
14524       * @param dstBase the destination register
14525       * @param dstDisp the destination displacement
14526       * @param imm immediate
14527       */
14528      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14529      public final void emitTEST_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
14530        int miStart = mi;
14531        generateREXprefix(false, null, null, dstBase);
14532        setMachineCodes(mi++, (byte) 0xF6);
14533        // "register 0x0" is really part of the opcode
14534        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
14535        emitImm8(imm);
14536        if (lister != null) lister.RDI(miStart, "TEST", dstBase, dstDisp, imm);
14537      }
14538    
14539      /**
14540       * Generate a register-index--immediate TEST. That is,
14541       * <PRE>
14542       * [dstBase + dstIndex<<scale + dstDisp] &= (byte) imm
14543       * </PRE>
14544       *
14545       * @param dstBase the destination base register
14546       * @param dstIndex the destination index register
14547       * @param dstScale the destination shift amount
14548       * @param dstDisp the destination displacement
14549       * @param imm immediate
14550       */
14551      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14552      public final void emitTEST_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
14553        int miStart = mi;
14554        generateREXprefix(false, null, dstIndex, dstBase);
14555        setMachineCodes(mi++, (byte) 0xF6);
14556        // "register 0x0" is really part of the opcode
14557        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
14558        emitImm8(imm);
14559        if (lister != null) lister.RXDI(miStart, "TEST", dstBase, dstIndex, dstScale, dstDisp, imm);
14560      }
14561    
14562      /**
14563       * Generate a register-offset--immediate TEST. That is,
14564       * <PRE>
14565       * [dstIndex<<dstScale + dstDisp] &= (byte) imm
14566       * </PRE>
14567       *
14568       * @param dstIndex the destination index register
14569       * @param dstScale the destination shift amount
14570       * @param dstDisp the destination displacement
14571       * @param imm immediate
14572       */
14573      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14574      public final void emitTEST_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
14575        int miStart = mi;
14576        generateREXprefix(false, null, dstIndex, null);
14577        setMachineCodes(mi++, (byte) 0xF6);
14578        // "register 0x0" is really part of the opcode
14579        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
14580        emitImm8(imm);
14581        if (lister != null) lister.RFDI(miStart, "TEST", dstIndex, dstScale, dstDisp, imm);
14582      }
14583    
14584      /**
14585       * Generate a absolute--immediate TEST. That is,
14586       * <PRE>
14587       * [dstDisp] &= (byte) imm
14588       * </PRE>
14589       *
14590       * @param dstDisp the destination displacement
14591       * @param imm immediate
14592       */
14593      public final void emitTEST_Abs_Imm_Byte(Address dstDisp, int imm) {
14594        int miStart = mi;
14595        generateREXprefix(false, null, null, null);
14596        setMachineCodes(mi++, (byte) 0xF6);
14597        // "register 0x0" is really part of the opcode
14598        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
14599        emitImm8(imm);
14600        if (lister != null) lister.RAI(miStart, "TEST", dstDisp, imm);
14601      }
14602    
14603      /**
14604       * Generate a register(indirect)--immediate TEST. That is,
14605       * <PRE>
14606       * [dstBase] &= (byte) imm
14607       * </PRE>
14608       *
14609       * @param dstBase the destination base register
14610       * @param imm immediate
14611       */
14612      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14613      public final void emitTEST_RegInd_Imm_Byte(GPR dstBase, int imm) {
14614        int miStart = mi;
14615        generateREXprefix(false, null, null, dstBase);
14616        setMachineCodes(mi++, (byte) 0xF6);
14617        // "register 0x0" is really part of the opcode
14618        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
14619        emitImm8(imm);
14620        if (lister != null) lister.RNI(miStart, "TEST", dstBase, imm);
14621      }
14622    
14623      /**
14624       * Generate a register(indirect)--register XOR. That is,
14625       * <PRE>
14626       * [dstBase] ~=  srcReg
14627       * </PRE>
14628       *
14629       * @param dstBase the destination base
14630       * @param srcReg the source register
14631       */
14632      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14633      public final void emitXOR_RegInd_Reg(GPR dstBase, GPR srcReg) {
14634        int miStart = mi;
14635        // no group 1 to 4 prefix byte
14636        generateREXprefix(false, srcReg, null, dstBase);
14637        // single byte opcode
14638        setMachineCodes(mi++, (byte) 0x31);
14639        emitRegIndirectRegOperands(dstBase, srcReg);
14640        if (lister != null) lister.RNR(miStart, "XOR", dstBase, srcReg);
14641      }
14642    
14643      /**
14644       * Generate a register-offset--register XOR. That is,
14645       * <PRE>
14646       * [dstReg<<dstScale + dstDisp] ~=  srcReg
14647       * </PRE>
14648       *
14649       * @param dstIndex the destination index register
14650       * @param dstScale the destination shift amount
14651       * @param dstDisp the destination displacement
14652       * @param srcReg the source register
14653       */
14654      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
14655      public final void emitXOR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
14656        int miStart = mi;
14657        // no group 1 to 4 prefix byte
14658        generateREXprefix(false, srcReg, dstIndex, null);
14659        // single byte opcode
14660        setMachineCodes(mi++, (byte) 0x31);
14661        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
14662        if (lister != null) lister.RFDR(miStart, "XOR", dstIndex, dstScale, dstDisp, srcReg);
14663      }
14664    
14665      /**
14666       * Generate a absolute--register XOR. That is,
14667       * <PRE>
14668       * [dstDisp] ~=  srcReg
14669       * </PRE>
14670       *
14671       * @param dstDisp the destination address
14672       * @param srcReg the source register
14673       */
14674      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
14675      public final void emitXOR_Abs_Reg(Address dstDisp, GPR srcReg) {
14676        int miStart = mi;
14677        // no group 1 to 4 prefix byte
14678        generateREXprefix(false, srcReg, null, null);
14679        // single byte opcode
14680        setMachineCodes(mi++, (byte) 0x31);
14681        emitAbsRegOperands(dstDisp, srcReg);
14682        if (lister != null) lister.RAR(miStart, "XOR", dstDisp, srcReg);
14683      }
14684    
14685      /**
14686       * Generate a register-index--register XOR. That is,
14687       * <PRE>
14688       * [dstBase + dstIndex<<dstScale + dstDisp] ~=  srcReg
14689       * </PRE>
14690       *
14691       * @param dstBase the base register
14692       * @param dstIndex the destination index register
14693       * @param dstScale the destination shift amount
14694       * @param dstDisp the destination displacement
14695       * @param srcReg the source register
14696       */
14697      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
14698      public final void emitXOR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
14699        int miStart = mi;
14700        // no group 1 to 4 prefix byte
14701        generateREXprefix(false, srcReg, dstIndex, dstBase);
14702        // single byte opcode
14703        setMachineCodes(mi++, (byte) 0x31);
14704        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
14705        if (lister != null) lister.RXDR(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
14706      }
14707    
14708      /**
14709       * Generate a register-displacement--register XOR. That is,
14710       * <PRE>
14711       * [dstBase + dstDisp] ~=  srcReg
14712       * </PRE>
14713       *
14714       * @param dstBase the base register
14715       * @param dstDisp the destination displacement
14716       * @param srcReg the source register
14717       */
14718      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
14719      public final void emitXOR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
14720        int miStart = mi;
14721        // no group 1 to 4 prefix byte
14722        generateREXprefix(false, srcReg, null, dstBase);
14723        // single byte opcode
14724        setMachineCodes(mi++, (byte) 0x31);
14725        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
14726        if (lister != null) lister.RDR(miStart, "XOR", dstBase, dstDisp, srcReg);
14727      }
14728    
14729      /**
14730       * Generate a register--register XOR. That is,
14731       * <PRE>
14732       * dstReg ~=  srcReg
14733       * </PRE>
14734       *
14735       * @param dstReg the destination register
14736       * @param srcReg the source register
14737       */
14738      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14739      public final void emitXOR_Reg_Reg(GPR dstReg, GPR srcReg) {
14740        int miStart = mi;
14741        // no group 1 to 4 prefix byte
14742        generateREXprefix(false, srcReg, null, dstReg);
14743        // single byte opcode
14744        setMachineCodes(mi++, (byte) 0x31);
14745        emitRegRegOperands(dstReg, srcReg);
14746        if (lister != null) lister.RR(miStart, "XOR", dstReg, srcReg);
14747      }
14748    
14749      /**
14750       * Generate a register--register-displacement XOR. That is,
14751       * <PRE>
14752       * dstReg ~=  [srcReg + srcDisp]
14753       * </PRE>
14754       *
14755       * @param dstReg the destination register
14756       * @param srcBase the source register
14757       * @param srcDisp the source displacement
14758       */
14759      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14760      public final void emitXOR_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
14761        int miStart = mi;
14762        // no group 1 to 4 prefix byte
14763        generateREXprefix(false, dstReg, null, srcBase);
14764        // single byte opcode
14765        setMachineCodes(mi++, (byte) 0x33);
14766        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
14767        if (lister != null) lister.RRD(miStart, "XOR", dstReg, srcBase, srcDisp);
14768      }
14769    
14770      /**
14771       * Generate a register--register-offset XOR. That is,
14772       * <PRE>
14773       * dstReg ~=  [srcIndex<<srcScale + srcDisp]
14774       * </PRE>
14775       *
14776       * @param dstReg the destination register
14777       * @param srcIndex the source index register
14778       * @param srcScale the source shift amount
14779       * @param srcDisp the source displacement
14780       */
14781      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14782      public final void emitXOR_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
14783        int miStart = mi;
14784        // no group 1 to 4 prefix byte
14785        generateREXprefix(false, dstReg, srcIndex, null);
14786        // single byte opcode
14787        setMachineCodes(mi++, (byte) 0x33);
14788        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
14789        if (lister != null) lister.RRFD(miStart, "XOR", dstReg, srcIndex, srcScale, srcDisp);
14790      }
14791    
14792      /**
14793       * Generate a register--register-offset XOR. That is,
14794       * <PRE>
14795       * dstReg ~=  [srcDisp]
14796       * </PRE>
14797       *
14798       * @param dstReg the destination register
14799       * @param srcDisp the source displacement
14800       */
14801      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
14802      public final void emitXOR_Reg_Abs(GPR dstReg, Address srcDisp) {
14803        int miStart = mi;
14804        // no group 1 to 4 prefix byte
14805        generateREXprefix(false, dstReg, null, null);
14806        // single byte opcode
14807        setMachineCodes(mi++, (byte) 0x33);
14808        emitAbsRegOperands(srcDisp, dstReg);
14809        if (lister != null) lister.RRA(miStart, "XOR", dstReg, srcDisp);
14810      }
14811    
14812      /**
14813       * Generate a register--register-offset XOR. That is,
14814       * <PRE>
14815       * dstReg ~=  [srcBase + srcIndex<<srcScale + srcDisp]
14816       * </PRE>
14817       *
14818       * @param dstReg the destination register
14819       * @param srcBase the source base register
14820       * @param srcIndex the source index register
14821       * @param srcScale the source shift amount
14822       * @param srcDisp the source displacement
14823       */
14824      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
14825      public final void emitXOR_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
14826        int miStart = mi;
14827        // no group 1 to 4 prefix byte
14828        generateREXprefix(false, dstReg, srcIndex, srcBase);
14829        // single byte opcode
14830        setMachineCodes(mi++, (byte) 0x33);
14831        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
14832        if (lister != null) lister.RRXD(miStart, "XOR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
14833      }
14834    
14835      /**
14836       * Generate a register--register(indirect) XOR. That is,
14837       * <PRE>
14838       * dstReg ~=  [srcBase]
14839       * </PRE>
14840       *
14841       * @param dstReg the destination register
14842       * @param srcBase the source base register
14843       */
14844      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14845      public final void emitXOR_Reg_RegInd(GPR dstReg, GPR srcBase) {
14846        int miStart = mi;
14847        // no group 1 to 4 prefix byte
14848        generateREXprefix(false, dstReg, null, srcBase);
14849        // single byte opcode
14850        setMachineCodes(mi++, (byte) 0x33);
14851        emitRegIndirectRegOperands(srcBase, dstReg);
14852        if (lister != null) lister.RRN(miStart, "XOR", dstReg, srcBase);
14853      }
14854    
14855      /**
14856       * Generate a register(indirect)--register XOR. That is,
14857       * <PRE>
14858       * [dstBase] ~=  (word)  srcReg
14859       * </PRE>
14860       *
14861       * @param dstBase the destination base
14862       * @param srcReg the source register
14863       */
14864      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14865      public final void emitXOR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
14866        int miStart = mi;
14867        setMachineCodes(mi++, (byte) 0x66);
14868        generateREXprefix(false, srcReg, null, dstBase);
14869        // single byte opcode
14870        setMachineCodes(mi++, (byte) 0x31);
14871        emitRegIndirectRegOperands(dstBase, srcReg);
14872        if (lister != null) lister.RNR(miStart, "XOR", dstBase, srcReg);
14873      }
14874    
14875      /**
14876       * Generate a register-offset--register XOR. That is,
14877       * <PRE>
14878       * [dstReg<<dstScale + dstDisp] ~=  (word)  srcReg
14879       * </PRE>
14880       *
14881       * @param dstIndex the destination index register
14882       * @param dstScale the destination shift amount
14883       * @param dstDisp the destination displacement
14884       * @param srcReg the source register
14885       */
14886      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
14887      public final void emitXOR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
14888        int miStart = mi;
14889        setMachineCodes(mi++, (byte) 0x66);
14890        generateREXprefix(false, srcReg, dstIndex, null);
14891        // single byte opcode
14892        setMachineCodes(mi++, (byte) 0x31);
14893        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
14894        if (lister != null) lister.RFDR(miStart, "XOR", dstIndex, dstScale, dstDisp, srcReg);
14895      }
14896    
14897      /**
14898       * Generate a absolute--register XOR. That is,
14899       * <PRE>
14900       * [dstDisp] ~=  (word)  srcReg
14901       * </PRE>
14902       *
14903       * @param dstDisp the destination address
14904       * @param srcReg the source register
14905       */
14906      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
14907      public final void emitXOR_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
14908        int miStart = mi;
14909        setMachineCodes(mi++, (byte) 0x66);
14910        generateREXprefix(false, srcReg, null, null);
14911        // single byte opcode
14912        setMachineCodes(mi++, (byte) 0x31);
14913        emitAbsRegOperands(dstDisp, srcReg);
14914        if (lister != null) lister.RAR(miStart, "XOR", dstDisp, srcReg);
14915      }
14916    
14917      /**
14918       * Generate a register-index--register XOR. That is,
14919       * <PRE>
14920       * [dstBase + dstIndex<<dstScale + dstDisp] ~=  (word)  srcReg
14921       * </PRE>
14922       *
14923       * @param dstBase the base register
14924       * @param dstIndex the destination index register
14925       * @param dstScale the destination shift amount
14926       * @param dstDisp the destination displacement
14927       * @param srcReg the source register
14928       */
14929      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
14930      public final void emitXOR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
14931        int miStart = mi;
14932        setMachineCodes(mi++, (byte) 0x66);
14933        generateREXprefix(false, srcReg, dstIndex, dstBase);
14934        // single byte opcode
14935        setMachineCodes(mi++, (byte) 0x31);
14936        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
14937        if (lister != null) lister.RXDR(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
14938      }
14939    
14940      /**
14941       * Generate a register-displacement--register XOR. That is,
14942       * <PRE>
14943       * [dstBase + dstDisp] ~=  (word)  srcReg
14944       * </PRE>
14945       *
14946       * @param dstBase the base register
14947       * @param dstDisp the destination displacement
14948       * @param srcReg the source register
14949       */
14950      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
14951      public final void emitXOR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
14952        int miStart = mi;
14953        setMachineCodes(mi++, (byte) 0x66);
14954        generateREXprefix(false, srcReg, null, dstBase);
14955        // single byte opcode
14956        setMachineCodes(mi++, (byte) 0x31);
14957        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
14958        if (lister != null) lister.RDR(miStart, "XOR", dstBase, dstDisp, srcReg);
14959      }
14960    
14961      /**
14962       * Generate a register--register XOR. That is,
14963       * <PRE>
14964       * dstReg ~=  (word)  srcReg
14965       * </PRE>
14966       *
14967       * @param dstReg the destination register
14968       * @param srcReg the source register
14969       */
14970      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14971      public final void emitXOR_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
14972        int miStart = mi;
14973        setMachineCodes(mi++, (byte) 0x66);
14974        generateREXprefix(false, srcReg, null, dstReg);
14975        // single byte opcode
14976        setMachineCodes(mi++, (byte) 0x31);
14977        emitRegRegOperands(dstReg, srcReg);
14978        if (lister != null) lister.RR(miStart, "XOR", dstReg, srcReg);
14979      }
14980    
14981      /**
14982       * Generate a register--register-displacement XOR. That is,
14983       * <PRE>
14984       * dstReg ~=  (word)  [srcReg + srcDisp]
14985       * </PRE>
14986       *
14987       * @param dstReg the destination register
14988       * @param srcBase the source register
14989       * @param srcDisp the source displacement
14990       */
14991      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
14992      public final void emitXOR_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
14993        int miStart = mi;
14994        setMachineCodes(mi++, (byte) 0x66);
14995        generateREXprefix(false, dstReg, null, srcBase);
14996        // single byte opcode
14997        setMachineCodes(mi++, (byte) 0x33);
14998        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
14999        if (lister != null) lister.RRD(miStart, "XOR", dstReg, srcBase, srcDisp);
15000      }
15001    
15002      /**
15003       * Generate a register--register-offset XOR. That is,
15004       * <PRE>
15005       * dstReg ~=  (word)  [srcIndex<<srcScale + srcDisp]
15006       * </PRE>
15007       *
15008       * @param dstReg the destination register
15009       * @param srcIndex the source index register
15010       * @param srcScale the source shift amount
15011       * @param srcDisp the source displacement
15012       */
15013      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15014      public final void emitXOR_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
15015        int miStart = mi;
15016        setMachineCodes(mi++, (byte) 0x66);
15017        generateREXprefix(false, dstReg, srcIndex, null);
15018        // single byte opcode
15019        setMachineCodes(mi++, (byte) 0x33);
15020        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
15021        if (lister != null) lister.RRFD(miStart, "XOR", dstReg, srcIndex, srcScale, srcDisp);
15022      }
15023    
15024      /**
15025       * Generate a register--register-offset XOR. That is,
15026       * <PRE>
15027       * dstReg ~=  (word)  [srcDisp]
15028       * </PRE>
15029       *
15030       * @param dstReg the destination register
15031       * @param srcDisp the source displacement
15032       */
15033      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15034      public final void emitXOR_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
15035        int miStart = mi;
15036        setMachineCodes(mi++, (byte) 0x66);
15037        generateREXprefix(false, dstReg, null, null);
15038        // single byte opcode
15039        setMachineCodes(mi++, (byte) 0x33);
15040        emitAbsRegOperands(srcDisp, dstReg);
15041        if (lister != null) lister.RRA(miStart, "XOR", dstReg, srcDisp);
15042      }
15043    
15044      /**
15045       * Generate a register--register-offset XOR. That is,
15046       * <PRE>
15047       * dstReg ~=  (word)  [srcBase + srcIndex<<srcScale + srcDisp]
15048       * </PRE>
15049       *
15050       * @param dstReg the destination register
15051       * @param srcBase the source base register
15052       * @param srcIndex the source index register
15053       * @param srcScale the source shift amount
15054       * @param srcDisp the source displacement
15055       */
15056      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
15057      public final void emitXOR_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
15058        int miStart = mi;
15059        setMachineCodes(mi++, (byte) 0x66);
15060        generateREXprefix(false, dstReg, srcIndex, srcBase);
15061        // single byte opcode
15062        setMachineCodes(mi++, (byte) 0x33);
15063        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
15064        if (lister != null) lister.RRXD(miStart, "XOR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
15065      }
15066    
15067      /**
15068       * Generate a register--register(indirect) XOR. That is,
15069       * <PRE>
15070       * dstReg ~=  (word)  [srcBase]
15071       * </PRE>
15072       *
15073       * @param dstReg the destination register
15074       * @param srcBase the source base register
15075       */
15076      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15077      public final void emitXOR_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
15078        int miStart = mi;
15079        setMachineCodes(mi++, (byte) 0x66);
15080        generateREXprefix(false, dstReg, null, srcBase);
15081        // single byte opcode
15082        setMachineCodes(mi++, (byte) 0x33);
15083        emitRegIndirectRegOperands(srcBase, dstReg);
15084        if (lister != null) lister.RRN(miStart, "XOR", dstReg, srcBase);
15085      }
15086    
15087      /**
15088       * Generate a register(indirect)--register XOR. That is,
15089       * <PRE>
15090       * [dstBase] ~=  (quad)  srcReg
15091       * </PRE>
15092       *
15093       * @param dstBase the destination base
15094       * @param srcReg the source register
15095       */
15096      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15097      public final void emitXOR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
15098        int miStart = mi;
15099        // no group 1 to 4 prefix byte
15100        generateREXprefix(true, srcReg, null, dstBase);
15101        // single byte opcode
15102        setMachineCodes(mi++, (byte) 0x31);
15103        emitRegIndirectRegOperands(dstBase, srcReg);
15104        if (lister != null) lister.RNR(miStart, "XOR", dstBase, srcReg);
15105      }
15106    
15107      /**
15108       * Generate a register-offset--register XOR. That is,
15109       * <PRE>
15110       * [dstReg<<dstScale + dstDisp] ~=  (quad)  srcReg
15111       * </PRE>
15112       *
15113       * @param dstIndex the destination index register
15114       * @param dstScale the destination shift amount
15115       * @param dstDisp the destination displacement
15116       * @param srcReg the source register
15117       */
15118      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
15119      public final void emitXOR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
15120        int miStart = mi;
15121        // no group 1 to 4 prefix byte
15122        generateREXprefix(true, srcReg, dstIndex, null);
15123        // single byte opcode
15124        setMachineCodes(mi++, (byte) 0x31);
15125        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
15126        if (lister != null) lister.RFDR(miStart, "XOR", dstIndex, dstScale, dstDisp, srcReg);
15127      }
15128    
15129      /**
15130       * Generate a absolute--register XOR. That is,
15131       * <PRE>
15132       * [dstDisp] ~=  (quad)  srcReg
15133       * </PRE>
15134       *
15135       * @param dstDisp the destination address
15136       * @param srcReg the source register
15137       */
15138      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
15139      public final void emitXOR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
15140        int miStart = mi;
15141        // no group 1 to 4 prefix byte
15142        generateREXprefix(true, srcReg, null, null);
15143        // single byte opcode
15144        setMachineCodes(mi++, (byte) 0x31);
15145        emitAbsRegOperands(dstDisp, srcReg);
15146        if (lister != null) lister.RAR(miStart, "XOR", dstDisp, srcReg);
15147      }
15148    
15149      /**
15150       * Generate a register-index--register XOR. That is,
15151       * <PRE>
15152       * [dstBase + dstIndex<<dstScale + dstDisp] ~=  (quad)  srcReg
15153       * </PRE>
15154       *
15155       * @param dstBase the base register
15156       * @param dstIndex the destination index register
15157       * @param dstScale the destination shift amount
15158       * @param dstDisp the destination displacement
15159       * @param srcReg the source register
15160       */
15161      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
15162      public final void emitXOR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
15163        int miStart = mi;
15164        // no group 1 to 4 prefix byte
15165        generateREXprefix(true, srcReg, dstIndex, dstBase);
15166        // single byte opcode
15167        setMachineCodes(mi++, (byte) 0x31);
15168        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
15169        if (lister != null) lister.RXDR(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
15170      }
15171    
15172      /**
15173       * Generate a register-displacement--register XOR. That is,
15174       * <PRE>
15175       * [dstBase + dstDisp] ~=  (quad)  srcReg
15176       * </PRE>
15177       *
15178       * @param dstBase the base register
15179       * @param dstDisp the destination displacement
15180       * @param srcReg the source register
15181       */
15182      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
15183      public final void emitXOR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
15184        int miStart = mi;
15185        // no group 1 to 4 prefix byte
15186        generateREXprefix(true, srcReg, null, dstBase);
15187        // single byte opcode
15188        setMachineCodes(mi++, (byte) 0x31);
15189        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
15190        if (lister != null) lister.RDR(miStart, "XOR", dstBase, dstDisp, srcReg);
15191      }
15192    
15193      /**
15194       * Generate a register--register XOR. That is,
15195       * <PRE>
15196       * dstReg ~=  (quad)  srcReg
15197       * </PRE>
15198       *
15199       * @param dstReg the destination register
15200       * @param srcReg the source register
15201       */
15202      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15203      public final void emitXOR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
15204        int miStart = mi;
15205        // no group 1 to 4 prefix byte
15206        generateREXprefix(true, srcReg, null, dstReg);
15207        // single byte opcode
15208        setMachineCodes(mi++, (byte) 0x31);
15209        emitRegRegOperands(dstReg, srcReg);
15210        if (lister != null) lister.RR(miStart, "XOR", dstReg, srcReg);
15211      }
15212    
15213      /**
15214       * Generate a register--register-displacement XOR. That is,
15215       * <PRE>
15216       * dstReg ~=  (quad)  [srcReg + srcDisp]
15217       * </PRE>
15218       *
15219       * @param dstReg the destination register
15220       * @param srcBase the source register
15221       * @param srcDisp the source displacement
15222       */
15223      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15224      public final void emitXOR_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
15225        int miStart = mi;
15226        // no group 1 to 4 prefix byte
15227        generateREXprefix(true, dstReg, null, srcBase);
15228        // single byte opcode
15229        setMachineCodes(mi++, (byte) 0x33);
15230        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
15231        if (lister != null) lister.RRD(miStart, "XOR", dstReg, srcBase, srcDisp);
15232      }
15233    
15234      /**
15235       * Generate a register--register-offset XOR. That is,
15236       * <PRE>
15237       * dstReg ~=  (quad)  [srcIndex<<srcScale + srcDisp]
15238       * </PRE>
15239       *
15240       * @param dstReg the destination register
15241       * @param srcIndex the source index register
15242       * @param srcScale the source shift amount
15243       * @param srcDisp the source displacement
15244       */
15245      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15246      public final void emitXOR_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
15247        int miStart = mi;
15248        // no group 1 to 4 prefix byte
15249        generateREXprefix(true, dstReg, srcIndex, null);
15250        // single byte opcode
15251        setMachineCodes(mi++, (byte) 0x33);
15252        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
15253        if (lister != null) lister.RRFD(miStart, "XOR", dstReg, srcIndex, srcScale, srcDisp);
15254      }
15255    
15256      /**
15257       * Generate a register--register-offset XOR. That is,
15258       * <PRE>
15259       * dstReg ~=  (quad)  [srcDisp]
15260       * </PRE>
15261       *
15262       * @param dstReg the destination register
15263       * @param srcDisp the source displacement
15264       */
15265      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15266      public final void emitXOR_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
15267        int miStart = mi;
15268        // no group 1 to 4 prefix byte
15269        generateREXprefix(true, dstReg, null, null);
15270        // single byte opcode
15271        setMachineCodes(mi++, (byte) 0x33);
15272        emitAbsRegOperands(srcDisp, dstReg);
15273        if (lister != null) lister.RRA(miStart, "XOR", dstReg, srcDisp);
15274      }
15275    
15276      /**
15277       * Generate a register--register-offset XOR. That is,
15278       * <PRE>
15279       * dstReg ~=  (quad)  [srcBase + srcIndex<<srcScale + srcDisp]
15280       * </PRE>
15281       *
15282       * @param dstReg the destination register
15283       * @param srcBase the source base register
15284       * @param srcIndex the source index register
15285       * @param srcScale the source shift amount
15286       * @param srcDisp the source displacement
15287       */
15288      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
15289      public final void emitXOR_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
15290        int miStart = mi;
15291        // no group 1 to 4 prefix byte
15292        generateREXprefix(true, dstReg, srcIndex, srcBase);
15293        // single byte opcode
15294        setMachineCodes(mi++, (byte) 0x33);
15295        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
15296        if (lister != null) lister.RRXD(miStart, "XOR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
15297      }
15298    
15299      /**
15300       * Generate a register--register(indirect) XOR. That is,
15301       * <PRE>
15302       * dstReg ~=  (quad)  [srcBase]
15303       * </PRE>
15304       *
15305       * @param dstReg the destination register
15306       * @param srcBase the source base register
15307       */
15308      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15309      public final void emitXOR_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
15310        int miStart = mi;
15311        // no group 1 to 4 prefix byte
15312        generateREXprefix(true, dstReg, null, srcBase);
15313        // single byte opcode
15314        setMachineCodes(mi++, (byte) 0x33);
15315        emitRegIndirectRegOperands(srcBase, dstReg);
15316        if (lister != null) lister.RRN(miStart, "XOR", dstReg, srcBase);
15317      }
15318    
15319      /**
15320       * Generate a register(indirect)--register XOR. That is,
15321       * <PRE>
15322       * [dstBase] ~=  (byte)  srcReg
15323       * </PRE>
15324       *
15325       * @param dstBase the destination base
15326       * @param srcReg the source register
15327       */
15328      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15329      public final void emitXOR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
15330        int miStart = mi;
15331        // no group 1 to 4 prefix byte
15332        generateREXprefix(false, srcReg, null, dstBase);
15333        // single byte opcode
15334        setMachineCodes(mi++, (byte) 0x30);
15335        emitRegIndirectRegOperands(dstBase, srcReg);
15336        if (lister != null) lister.RNR(miStart, "XOR", dstBase, srcReg);
15337      }
15338    
15339      /**
15340       * Generate a register-offset--register XOR. That is,
15341       * <PRE>
15342       * [dstReg<<dstScale + dstDisp] ~=  (byte)  srcReg
15343       * </PRE>
15344       *
15345       * @param dstIndex the destination index register
15346       * @param dstScale the destination shift amount
15347       * @param dstDisp the destination displacement
15348       * @param srcReg the source register
15349       */
15350      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
15351      public final void emitXOR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
15352        int miStart = mi;
15353        // no group 1 to 4 prefix byte
15354        generateREXprefix(false, srcReg, dstIndex, null);
15355        // single byte opcode
15356        setMachineCodes(mi++, (byte) 0x30);
15357        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
15358        if (lister != null) lister.RFDR(miStart, "XOR", dstIndex, dstScale, dstDisp, srcReg);
15359      }
15360    
15361      /**
15362       * Generate a absolute--register XOR. That is,
15363       * <PRE>
15364       * [dstDisp] ~=  (byte)  srcReg
15365       * </PRE>
15366       *
15367       * @param dstDisp the destination address
15368       * @param srcReg the source register
15369       */
15370      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
15371      public final void emitXOR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
15372        int miStart = mi;
15373        // no group 1 to 4 prefix byte
15374        generateREXprefix(false, srcReg, null, null);
15375        // single byte opcode
15376        setMachineCodes(mi++, (byte) 0x30);
15377        emitAbsRegOperands(dstDisp, srcReg);
15378        if (lister != null) lister.RAR(miStart, "XOR", dstDisp, srcReg);
15379      }
15380    
15381      /**
15382       * Generate a register-index--register XOR. That is,
15383       * <PRE>
15384       * [dstBase + dstIndex<<dstScale + dstDisp] ~=  (byte)  srcReg
15385       * </PRE>
15386       *
15387       * @param dstBase the base register
15388       * @param dstIndex the destination index register
15389       * @param dstScale the destination shift amount
15390       * @param dstDisp the destination displacement
15391       * @param srcReg the source register
15392       */
15393      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
15394      public final void emitXOR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
15395        int miStart = mi;
15396        // no group 1 to 4 prefix byte
15397        generateREXprefix(false, srcReg, dstIndex, dstBase);
15398        // single byte opcode
15399        setMachineCodes(mi++, (byte) 0x30);
15400        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
15401        if (lister != null) lister.RXDR(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
15402      }
15403    
15404      /**
15405       * Generate a register-displacement--register XOR. That is,
15406       * <PRE>
15407       * [dstBase + dstDisp] ~=  (byte)  srcReg
15408       * </PRE>
15409       *
15410       * @param dstBase the base register
15411       * @param dstDisp the destination displacement
15412       * @param srcReg the source register
15413       */
15414      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
15415      public final void emitXOR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
15416        int miStart = mi;
15417        // no group 1 to 4 prefix byte
15418        generateREXprefix(false, srcReg, null, dstBase);
15419        // single byte opcode
15420        setMachineCodes(mi++, (byte) 0x30);
15421        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
15422        if (lister != null) lister.RDR(miStart, "XOR", dstBase, dstDisp, srcReg);
15423      }
15424    
15425      /**
15426       * Generate a register--register XOR. That is,
15427       * <PRE>
15428       * dstReg ~=  (byte)  srcReg
15429       * </PRE>
15430       *
15431       * @param dstReg the destination register
15432       * @param srcReg the source register
15433       */
15434      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15435      public final void emitXOR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
15436        int miStart = mi;
15437        // no group 1 to 4 prefix byte
15438        generateREXprefix(false, srcReg, null, dstReg);
15439        // single byte opcode
15440        setMachineCodes(mi++, (byte) 0x30);
15441        emitRegRegOperands(dstReg, srcReg);
15442        if (lister != null) lister.RR(miStart, "XOR", dstReg, srcReg);
15443      }
15444    
15445      /**
15446       * Generate a register--register-displacement XOR. That is,
15447       * <PRE>
15448       * dstReg ~=  (byte)  [srcReg + srcDisp]
15449       * </PRE>
15450       *
15451       * @param dstReg the destination register
15452       * @param srcBase the source register
15453       * @param srcDisp the source displacement
15454       */
15455      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15456      public final void emitXOR_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
15457        int miStart = mi;
15458        // no group 1 to 4 prefix byte
15459        generateREXprefix(false, dstReg, null, srcBase);
15460        // single byte opcode
15461        setMachineCodes(mi++, (byte) 0x32);
15462        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
15463        if (lister != null) lister.RRD(miStart, "XOR", dstReg, srcBase, srcDisp);
15464      }
15465    
15466      /**
15467       * Generate a register--register-offset XOR. That is,
15468       * <PRE>
15469       * dstReg ~=  (byte)  [srcIndex<<srcScale + srcDisp]
15470       * </PRE>
15471       *
15472       * @param dstReg the destination register
15473       * @param srcIndex the source index register
15474       * @param srcScale the source shift amount
15475       * @param srcDisp the source displacement
15476       */
15477      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15478      public final void emitXOR_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
15479        int miStart = mi;
15480        // no group 1 to 4 prefix byte
15481        generateREXprefix(false, dstReg, srcIndex, null);
15482        // single byte opcode
15483        setMachineCodes(mi++, (byte) 0x32);
15484        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
15485        if (lister != null) lister.RRFD(miStart, "XOR", dstReg, srcIndex, srcScale, srcDisp);
15486      }
15487    
15488      /**
15489       * Generate a register--register-offset XOR. That is,
15490       * <PRE>
15491       * dstReg ~=  (byte)  [srcDisp]
15492       * </PRE>
15493       *
15494       * @param dstReg the destination register
15495       * @param srcDisp the source displacement
15496       */
15497      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15498      public final void emitXOR_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
15499        int miStart = mi;
15500        // no group 1 to 4 prefix byte
15501        generateREXprefix(false, dstReg, null, null);
15502        // single byte opcode
15503        setMachineCodes(mi++, (byte) 0x32);
15504        emitAbsRegOperands(srcDisp, dstReg);
15505        if (lister != null) lister.RRA(miStart, "XOR", dstReg, srcDisp);
15506      }
15507    
15508      /**
15509       * Generate a register--register-offset XOR. That is,
15510       * <PRE>
15511       * dstReg ~=  (byte)  [srcBase + srcIndex<<srcScale + srcDisp]
15512       * </PRE>
15513       *
15514       * @param dstReg the destination register
15515       * @param srcBase the source base register
15516       * @param srcIndex the source index register
15517       * @param srcScale the source shift amount
15518       * @param srcDisp the source displacement
15519       */
15520      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
15521      public final void emitXOR_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
15522        int miStart = mi;
15523        // no group 1 to 4 prefix byte
15524        generateREXprefix(false, dstReg, srcIndex, srcBase);
15525        // single byte opcode
15526        setMachineCodes(mi++, (byte) 0x32);
15527        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
15528        if (lister != null) lister.RRXD(miStart, "XOR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
15529      }
15530    
15531      /**
15532       * Generate a register--register(indirect) XOR. That is,
15533       * <PRE>
15534       * dstReg ~=  (byte)  [srcBase]
15535       * </PRE>
15536       *
15537       * @param dstReg the destination register
15538       * @param srcBase the source base register
15539       */
15540      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15541      public final void emitXOR_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
15542        int miStart = mi;
15543        // no group 1 to 4 prefix byte
15544        generateREXprefix(false, dstReg, null, srcBase);
15545        // single byte opcode
15546        setMachineCodes(mi++, (byte) 0x32);
15547        emitRegIndirectRegOperands(srcBase, dstReg);
15548        if (lister != null) lister.RRN(miStart, "XOR", dstReg, srcBase);
15549      }
15550    
15551      /**
15552       * Generate a register--immediate XOR. That is,
15553       * <PRE>
15554       * dstReg ~=  imm
15555       * </PRE>
15556       *
15557       * @param dstReg the destination register
15558       * @param imm immediate
15559       */
15560      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15561      public final void emitXOR_Reg_Imm(GPR dstReg, int imm) {
15562        int miStart = mi;
15563        // no group 1 to 4 prefix byte
15564        generateREXprefix(false, null, null, dstReg);
15565        // single byte opcode
15566        if (fits(imm,8)) {
15567          setMachineCodes(mi++, (byte) 0x83);
15568          // "register 0x6" is really part of the opcode
15569          emitRegRegOperands(dstReg, GPR.getForOpcode(0x6));
15570          emitImm8((byte)imm);
15571        } else if (dstReg == EAX) {
15572          setMachineCodes(mi++, (byte) 0x35);
15573          emitImm32(imm);
15574        } else {
15575          setMachineCodes(mi++, (byte) 0x81);
15576          // "register 0x6" is really part of the opcode
15577          emitRegRegOperands(dstReg, GPR.getForOpcode(0x6));
15578          emitImm32(imm);
15579        }
15580        if (lister != null) lister.RI(miStart, "XOR", dstReg, imm);
15581      }
15582    
15583      /**
15584       * Generate a register-displacement--immediate XOR. That is,
15585       * <PRE>
15586       * [dstBase + dstDisp] ~=  imm
15587       * </PRE>
15588       *
15589       * @param dstBase the destination register
15590       * @param dstDisp the destination displacement
15591       * @param imm immediate
15592       */
15593      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15594      public final void emitXOR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
15595        int miStart = mi;
15596        // no group 1 to 4 prefix byte
15597        generateREXprefix(false, null, null, dstBase);
15598        // single byte opcode
15599        if (fits(imm,8)) {
15600          setMachineCodes(mi++, (byte) 0x83);
15601          // "register 0x6" is really part of the opcode
15602          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6));
15603          emitImm8((byte)imm);
15604        } else {
15605          setMachineCodes(mi++, (byte) 0x81);
15606          // "register 0x6" is really part of the opcode
15607          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6));
15608          emitImm32(imm);
15609        }
15610        if (lister != null) lister.RDI(miStart, "XOR", dstBase, dstDisp, imm);
15611      }
15612    
15613      /**
15614       * Generate a register-offset--immediate XOR. That is,
15615       * <PRE>
15616       * [dstIndex<<dstScale + dstDisp] ~=  imm
15617       * </PRE>
15618       *
15619       * @param dstIndex the destination index register
15620       * @param dstScale the destination shift amount
15621       * @param dstDisp the destination displacement
15622       * @param imm immediate
15623       */
15624      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15625      public final void emitXOR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
15626        int miStart = mi;
15627        // no group 1 to 4 prefix byte
15628        generateREXprefix(false, null, dstIndex, null);
15629        // single byte opcode
15630        if (fits(imm,8)) {
15631          setMachineCodes(mi++, (byte) 0x83);
15632          // "register 0x6" is really part of the opcode
15633          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
15634          emitImm8((byte)imm);
15635        } else {
15636          setMachineCodes(mi++, (byte) 0x81);
15637          // "register 0x6" is really part of the opcode
15638          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
15639          emitImm32(imm);
15640        }
15641        if (lister != null) lister.RFDI(miStart, "XOR", dstIndex, dstScale, dstDisp, imm);
15642      }
15643    
15644      /**
15645       * Generate a absolute--immediate XOR. That is,
15646       * <PRE>
15647       * [dstDisp] ~=  imm
15648       * </PRE>
15649       *
15650       * @param dstDisp the destination displacement
15651       * @param imm immediate
15652       */
15653      public final void emitXOR_Abs_Imm(Address dstDisp, int imm) {
15654        int miStart = mi;
15655        // no group 1 to 4 prefix byte
15656        generateREXprefix(false, null, null, null);
15657        // single byte opcode
15658        if (fits(imm,8)) {
15659          setMachineCodes(mi++, (byte) 0x83);
15660          // "register 0x6" is really part of the opcode
15661          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6));
15662          emitImm8((byte)imm);
15663        } else {
15664          setMachineCodes(mi++, (byte) 0x81);
15665          // "register 0x6" is really part of the opcode
15666          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6));
15667          emitImm32(imm);
15668        }
15669        if (lister != null) lister.RAI(miStart, "XOR", dstDisp, imm);
15670      }
15671    
15672      /**
15673       * Generate a register-index--immediate XOR. That is,
15674       * <PRE>
15675       * [dstBase + dstIndex<<dstScale + dstDisp] ~=  imm
15676       * </PRE>
15677       *
15678       * @param dstBase the destination base register
15679       * @param dstIndex the destination index register
15680       * @param dstScale the destination shift amount
15681       * @param dstDisp the destination displacement
15682       * @param imm immediate
15683       */
15684      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15685      public final void emitXOR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
15686        int miStart = mi;
15687        // no group 1 to 4 prefix byte
15688        generateREXprefix(false, null, dstIndex, dstBase);
15689        // single byte opcode
15690        if (fits(imm,8)) {
15691          setMachineCodes(mi++, (byte) 0x83);
15692          // "register 0x6" is really part of the opcode
15693          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
15694          emitImm8((byte)imm);
15695        } else {
15696          setMachineCodes(mi++, (byte) 0x81);
15697          // "register 0x6" is really part of the opcode
15698          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
15699          emitImm32(imm);
15700        }
15701        if (lister != null) lister.RXDI(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, imm);
15702      }
15703    
15704      /**
15705       * Generate a register(indirect)--immediate XOR. That is,
15706       * <PRE>
15707       * [dstBase] ~=  imm
15708       * </PRE>
15709       *
15710       * @param dstBase the destination base register
15711       * @param imm immediate
15712       */
15713      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15714      public final void emitXOR_RegInd_Imm(GPR dstBase, int imm) {
15715        int miStart = mi;
15716        // no group 1 to 4 prefix byte
15717        generateREXprefix(false, null, null, dstBase);
15718        // single byte opcode
15719        if (fits(imm,8)) {
15720          setMachineCodes(mi++, (byte) 0x83);
15721          // "register 0x6" is really part of the opcode
15722          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6));
15723          emitImm8((byte)imm);
15724        } else {
15725          setMachineCodes(mi++, (byte) 0x81);
15726          // "register 0x6" is really part of the opcode
15727          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6));
15728          emitImm32(imm);
15729        }
15730        if (lister != null) lister.RNI(miStart, "XOR", dstBase, imm);
15731      }
15732    
15733      /**
15734       * Generate a register--immediate XOR. That is,
15735       * <PRE>
15736       * dstReg ~=  (word)  imm
15737       * </PRE>
15738       *
15739       * @param dstReg the destination register
15740       * @param imm immediate
15741       */
15742      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15743      public final void emitXOR_Reg_Imm_Word(GPR dstReg, int imm) {
15744        int miStart = mi;
15745        setMachineCodes(mi++, (byte) 0x66);
15746        generateREXprefix(false, null, null, dstReg);
15747        // single byte opcode
15748        if (fits(imm,8)) {
15749          setMachineCodes(mi++, (byte) 0x83);
15750          // "register 0x6" is really part of the opcode
15751          emitRegRegOperands(dstReg, GPR.getForOpcode(0x6));
15752          emitImm8((byte)imm);
15753        } else if (dstReg == EAX) {
15754          setMachineCodes(mi++, (byte) 0x35);
15755          emitImm16(imm);
15756        } else {
15757          setMachineCodes(mi++, (byte) 0x81);
15758          // "register 0x6" is really part of the opcode
15759          emitRegRegOperands(dstReg, GPR.getForOpcode(0x6));
15760          emitImm16(imm);
15761        }
15762        if (lister != null) lister.RI(miStart, "XOR", dstReg, imm);
15763      }
15764    
15765      /**
15766       * Generate a register-displacement--immediate XOR. That is,
15767       * <PRE>
15768       * [dstBase + dstDisp] ~=  (word)  imm
15769       * </PRE>
15770       *
15771       * @param dstBase the destination register
15772       * @param dstDisp the destination displacement
15773       * @param imm immediate
15774       */
15775      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15776      public final void emitXOR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
15777        int miStart = mi;
15778        setMachineCodes(mi++, (byte) 0x66);
15779        generateREXprefix(false, null, null, dstBase);
15780        // single byte opcode
15781        if (fits(imm,8)) {
15782          setMachineCodes(mi++, (byte) 0x83);
15783          // "register 0x6" is really part of the opcode
15784          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6));
15785          emitImm8((byte)imm);
15786        } else {
15787          setMachineCodes(mi++, (byte) 0x81);
15788          // "register 0x6" is really part of the opcode
15789          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6));
15790          emitImm16(imm);
15791        }
15792        if (lister != null) lister.RDI(miStart, "XOR", dstBase, dstDisp, imm);
15793      }
15794    
15795      /**
15796       * Generate a register-offset--immediate XOR. That is,
15797       * <PRE>
15798       * [dstIndex<<dstScale + dstDisp] ~=  (word)  imm
15799       * </PRE>
15800       *
15801       * @param dstIndex the destination index register
15802       * @param dstScale the destination shift amount
15803       * @param dstDisp the destination displacement
15804       * @param imm immediate
15805       */
15806      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15807      public final void emitXOR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
15808        int miStart = mi;
15809        setMachineCodes(mi++, (byte) 0x66);
15810        generateREXprefix(false, null, dstIndex, null);
15811        // single byte opcode
15812        if (fits(imm,8)) {
15813          setMachineCodes(mi++, (byte) 0x83);
15814          // "register 0x6" is really part of the opcode
15815          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
15816          emitImm8((byte)imm);
15817        } else {
15818          setMachineCodes(mi++, (byte) 0x81);
15819          // "register 0x6" is really part of the opcode
15820          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
15821          emitImm16(imm);
15822        }
15823        if (lister != null) lister.RFDI(miStart, "XOR", dstIndex, dstScale, dstDisp, imm);
15824      }
15825    
15826      /**
15827       * Generate a absolute--immediate XOR. That is,
15828       * <PRE>
15829       * [dstDisp] ~=  (word)  imm
15830       * </PRE>
15831       *
15832       * @param dstDisp the destination displacement
15833       * @param imm immediate
15834       */
15835      public final void emitXOR_Abs_Imm_Word(Address dstDisp, int imm) {
15836        int miStart = mi;
15837        setMachineCodes(mi++, (byte) 0x66);
15838        generateREXprefix(false, null, null, null);
15839        // single byte opcode
15840        if (fits(imm,8)) {
15841          setMachineCodes(mi++, (byte) 0x83);
15842          // "register 0x6" is really part of the opcode
15843          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6));
15844          emitImm8((byte)imm);
15845        } else {
15846          setMachineCodes(mi++, (byte) 0x81);
15847          // "register 0x6" is really part of the opcode
15848          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6));
15849          emitImm16(imm);
15850        }
15851        if (lister != null) lister.RAI(miStart, "XOR", dstDisp, imm);
15852      }
15853    
15854      /**
15855       * Generate a register-index--immediate XOR. That is,
15856       * <PRE>
15857       * [dstBase + dstIndex<<dstScale + dstDisp] ~=  (word)  imm
15858       * </PRE>
15859       *
15860       * @param dstBase the destination base register
15861       * @param dstIndex the destination index register
15862       * @param dstScale the destination shift amount
15863       * @param dstDisp the destination displacement
15864       * @param imm immediate
15865       */
15866      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
15867      public final void emitXOR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
15868        int miStart = mi;
15869        setMachineCodes(mi++, (byte) 0x66);
15870        generateREXprefix(false, null, dstIndex, dstBase);
15871        // single byte opcode
15872        if (fits(imm,8)) {
15873          setMachineCodes(mi++, (byte) 0x83);
15874          // "register 0x6" is really part of the opcode
15875          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
15876          emitImm8((byte)imm);
15877        } else {
15878          setMachineCodes(mi++, (byte) 0x81);
15879          // "register 0x6" is really part of the opcode
15880          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
15881          emitImm16(imm);
15882        }
15883        if (lister != null) lister.RXDI(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, imm);
15884      }
15885    
15886      /**
15887       * Generate a register(indirect)--immediate XOR. That is,
15888       * <PRE>
15889       * [dstBase] ~=  (word)  imm
15890       * </PRE>
15891       *
15892       * @param dstBase the destination base register
15893       * @param imm immediate
15894       */
15895      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15896      public final void emitXOR_RegInd_Imm_Word(GPR dstBase, int imm) {
15897        int miStart = mi;
15898        setMachineCodes(mi++, (byte) 0x66);
15899        generateREXprefix(false, null, null, dstBase);
15900        // single byte opcode
15901        if (fits(imm,8)) {
15902          setMachineCodes(mi++, (byte) 0x83);
15903          // "register 0x6" is really part of the opcode
15904          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6));
15905          emitImm8((byte)imm);
15906        } else {
15907          setMachineCodes(mi++, (byte) 0x81);
15908          // "register 0x6" is really part of the opcode
15909          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6));
15910          emitImm16(imm);
15911        }
15912        if (lister != null) lister.RNI(miStart, "XOR", dstBase, imm);
15913      }
15914    
15915      /**
15916       * Generate a register--immediate XOR. That is,
15917       * <PRE>
15918       * dstReg ~=  (quad)  imm
15919       * </PRE>
15920       *
15921       * @param dstReg the destination register
15922       * @param imm immediate
15923       */
15924      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15925      public final void emitXOR_Reg_Imm_Quad(GPR dstReg, int imm) {
15926        int miStart = mi;
15927        // no group 1 to 4 prefix byte
15928        generateREXprefix(true, null, null, dstReg);
15929        // single byte opcode
15930        if (fits(imm,8)) {
15931          setMachineCodes(mi++, (byte) 0x83);
15932          // "register 0x6" is really part of the opcode
15933          emitRegRegOperands(dstReg, GPR.getForOpcode(0x6));
15934          emitImm8((byte)imm);
15935        } else if (dstReg == EAX) {
15936          setMachineCodes(mi++, (byte) 0x35);
15937          emitImm32(imm);
15938        } else {
15939          setMachineCodes(mi++, (byte) 0x81);
15940          // "register 0x6" is really part of the opcode
15941          emitRegRegOperands(dstReg, GPR.getForOpcode(0x6));
15942          emitImm32(imm);
15943        }
15944        if (lister != null) lister.RI(miStart, "XOR", dstReg, imm);
15945      }
15946    
15947      /**
15948       * Generate a register-displacement--immediate XOR. That is,
15949       * <PRE>
15950       * [dstBase + dstDisp] ~=  (quad)  imm
15951       * </PRE>
15952       *
15953       * @param dstBase the destination register
15954       * @param dstDisp the destination displacement
15955       * @param imm immediate
15956       */
15957      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15958      public final void emitXOR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
15959        int miStart = mi;
15960        // no group 1 to 4 prefix byte
15961        generateREXprefix(true, null, null, dstBase);
15962        // single byte opcode
15963        if (fits(imm,8)) {
15964          setMachineCodes(mi++, (byte) 0x83);
15965          // "register 0x6" is really part of the opcode
15966          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6));
15967          emitImm8((byte)imm);
15968        } else {
15969          setMachineCodes(mi++, (byte) 0x81);
15970          // "register 0x6" is really part of the opcode
15971          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6));
15972          emitImm32(imm);
15973        }
15974        if (lister != null) lister.RDI(miStart, "XOR", dstBase, dstDisp, imm);
15975      }
15976    
15977      /**
15978       * Generate a register-offset--immediate XOR. That is,
15979       * <PRE>
15980       * [dstIndex<<dstScale + dstDisp] ~=  (quad)  imm
15981       * </PRE>
15982       *
15983       * @param dstIndex the destination index register
15984       * @param dstScale the destination shift amount
15985       * @param dstDisp the destination displacement
15986       * @param imm immediate
15987       */
15988      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
15989      public final void emitXOR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
15990        int miStart = mi;
15991        // no group 1 to 4 prefix byte
15992        generateREXprefix(true, null, dstIndex, null);
15993        // single byte opcode
15994        if (fits(imm,8)) {
15995          setMachineCodes(mi++, (byte) 0x83);
15996          // "register 0x6" is really part of the opcode
15997          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
15998          emitImm8((byte)imm);
15999        } else {
16000          setMachineCodes(mi++, (byte) 0x81);
16001          // "register 0x6" is really part of the opcode
16002          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
16003          emitImm32(imm);
16004        }
16005        if (lister != null) lister.RFDI(miStart, "XOR", dstIndex, dstScale, dstDisp, imm);
16006      }
16007    
16008      /**
16009       * Generate a absolute--immediate XOR. That is,
16010       * <PRE>
16011       * [dstDisp] ~=  (quad)  imm
16012       * </PRE>
16013       *
16014       * @param dstDisp the destination displacement
16015       * @param imm immediate
16016       */
16017      public final void emitXOR_Abs_Imm_Quad(Address dstDisp, int imm) {
16018        int miStart = mi;
16019        // no group 1 to 4 prefix byte
16020        generateREXprefix(true, null, null, null);
16021        // single byte opcode
16022        if (fits(imm,8)) {
16023          setMachineCodes(mi++, (byte) 0x83);
16024          // "register 0x6" is really part of the opcode
16025          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6));
16026          emitImm8((byte)imm);
16027        } else {
16028          setMachineCodes(mi++, (byte) 0x81);
16029          // "register 0x6" is really part of the opcode
16030          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6));
16031          emitImm32(imm);
16032        }
16033        if (lister != null) lister.RAI(miStart, "XOR", dstDisp, imm);
16034      }
16035    
16036      /**
16037       * Generate a register-index--immediate XOR. That is,
16038       * <PRE>
16039       * [dstBase + dstIndex<<dstScale + dstDisp] ~=  (quad)  imm
16040       * </PRE>
16041       *
16042       * @param dstBase the destination base register
16043       * @param dstIndex the destination index register
16044       * @param dstScale the destination shift amount
16045       * @param dstDisp the destination displacement
16046       * @param imm immediate
16047       */
16048      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
16049      public final void emitXOR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
16050        int miStart = mi;
16051        // no group 1 to 4 prefix byte
16052        generateREXprefix(true, null, dstIndex, dstBase);
16053        // single byte opcode
16054        if (fits(imm,8)) {
16055          setMachineCodes(mi++, (byte) 0x83);
16056          // "register 0x6" is really part of the opcode
16057          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
16058          emitImm8((byte)imm);
16059        } else {
16060          setMachineCodes(mi++, (byte) 0x81);
16061          // "register 0x6" is really part of the opcode
16062          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
16063          emitImm32(imm);
16064        }
16065        if (lister != null) lister.RXDI(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, imm);
16066      }
16067    
16068      /**
16069       * Generate a register(indirect)--immediate XOR. That is,
16070       * <PRE>
16071       * [dstBase] ~=  (quad)  imm
16072       * </PRE>
16073       *
16074       * @param dstBase the destination base register
16075       * @param imm immediate
16076       */
16077      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16078      public final void emitXOR_RegInd_Imm_Quad(GPR dstBase, int imm) {
16079        int miStart = mi;
16080        // no group 1 to 4 prefix byte
16081        generateREXprefix(true, null, null, dstBase);
16082        // single byte opcode
16083        if (fits(imm,8)) {
16084          setMachineCodes(mi++, (byte) 0x83);
16085          // "register 0x6" is really part of the opcode
16086          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6));
16087          emitImm8((byte)imm);
16088        } else {
16089          setMachineCodes(mi++, (byte) 0x81);
16090          // "register 0x6" is really part of the opcode
16091          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6));
16092          emitImm32(imm);
16093        }
16094        if (lister != null) lister.RNI(miStart, "XOR", dstBase, imm);
16095      }
16096    
16097      /**
16098       * Generate a register--immediate XOR. That is,
16099       * <PRE>
16100       *  dstReg ~= (byte) imm
16101       * </PRE>
16102       *
16103       * @param dstReg the destination register
16104       * @param imm immediate
16105       */
16106      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16107      public final void emitXOR_Reg_Imm_Byte(GPR dstReg, int imm) {
16108        int miStart = mi;
16109        if (dstReg == EAX) {
16110          setMachineCodes(mi++, (byte) 0x34);
16111          emitImm8(imm);
16112        } else {
16113          generateREXprefix(false, null, null, dstReg);
16114          setMachineCodes(mi++, (byte) 0x80);
16115          // "register 0x6" is really part of the opcode
16116          emitRegRegOperands(dstReg, GPR.getForOpcode(0x6));
16117          emitImm8(imm);
16118        }
16119        if (lister != null) lister.RI(miStart, "XOR", dstReg, imm);
16120      }
16121    
16122      /**
16123       * Generate a register-displacement--immediate XOR. That is,
16124       * <PRE>
16125       * [dstBase + dstDisp] ~= (byte) imm
16126       * </PRE>
16127       *
16128       * @param dstBase the destination register
16129       * @param dstDisp the destination displacement
16130       * @param imm immediate
16131       */
16132      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16133      public final void emitXOR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
16134        int miStart = mi;
16135        generateREXprefix(false, null, null, dstBase);
16136        setMachineCodes(mi++, (byte) 0x80);
16137        // "register 0x6" is really part of the opcode
16138        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6));
16139        emitImm8(imm);
16140        if (lister != null) lister.RDI(miStart, "XOR", dstBase, dstDisp, imm);
16141      }
16142    
16143      /**
16144       * Generate a register-index--immediate XOR. That is,
16145       * <PRE>
16146       * [dstBase + dstIndex<<scale + dstDisp] ~= (byte) imm
16147       * </PRE>
16148       *
16149       * @param dstBase the destination base register
16150       * @param dstIndex the destination index register
16151       * @param dstScale the destination shift amount
16152       * @param dstDisp the destination displacement
16153       * @param imm immediate
16154       */
16155      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
16156      public final void emitXOR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
16157        int miStart = mi;
16158        generateREXprefix(false, null, dstIndex, dstBase);
16159        setMachineCodes(mi++, (byte) 0x80);
16160        // "register 0x6" is really part of the opcode
16161        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
16162        emitImm8(imm);
16163        if (lister != null) lister.RXDI(miStart, "XOR", dstBase, dstIndex, dstScale, dstDisp, imm);
16164      }
16165    
16166      /**
16167       * Generate a register-offset--immediate XOR. That is,
16168       * <PRE>
16169       * [dstIndex<<dstScale + dstDisp] ~= (byte) imm
16170       * </PRE>
16171       *
16172       * @param dstIndex the destination index register
16173       * @param dstScale the destination shift amount
16174       * @param dstDisp the destination displacement
16175       * @param imm immediate
16176       */
16177      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16178      public final void emitXOR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
16179        int miStart = mi;
16180        generateREXprefix(false, null, dstIndex, null);
16181        setMachineCodes(mi++, (byte) 0x80);
16182        // "register 0x6" is really part of the opcode
16183        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
16184        emitImm8(imm);
16185        if (lister != null) lister.RFDI(miStart, "XOR", dstIndex, dstScale, dstDisp, imm);
16186      }
16187    
16188      /**
16189       * Generate a absolute--immediate XOR. That is,
16190       * <PRE>
16191       * [dstDisp] ~= (byte) imm
16192       * </PRE>
16193       *
16194       * @param dstDisp the destination displacement
16195       * @param imm immediate
16196       */
16197      public final void emitXOR_Abs_Imm_Byte(Address dstDisp, int imm) {
16198        int miStart = mi;
16199        generateREXprefix(false, null, null, null);
16200        setMachineCodes(mi++, (byte) 0x80);
16201        // "register 0x6" is really part of the opcode
16202        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6));
16203        emitImm8(imm);
16204        if (lister != null) lister.RAI(miStart, "XOR", dstDisp, imm);
16205      }
16206    
16207      /**
16208       * Generate a register(indirect)--immediate XOR. That is,
16209       * <PRE>
16210       * [dstBase] ~= (byte) imm
16211       * </PRE>
16212       *
16213       * @param dstBase the destination base register
16214       * @param imm immediate
16215       */
16216      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16217      public final void emitXOR_RegInd_Imm_Byte(GPR dstBase, int imm) {
16218        int miStart = mi;
16219        generateREXprefix(false, null, null, dstBase);
16220        setMachineCodes(mi++, (byte) 0x80);
16221        // "register 0x6" is really part of the opcode
16222        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6));
16223        emitImm8(imm);
16224        if (lister != null) lister.RNI(miStart, "XOR", dstBase, imm);
16225      }
16226    
16227      /**
16228       * Generate a register(indirect)--register BT. That is,
16229       * <PRE>
16230       * [dstBase] BT=  srcReg
16231       * </PRE>
16232       *
16233       * @param dstBase the destination base
16234       * @param srcReg the source register
16235       */
16236      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
16237      public final void emitBT_RegInd_Reg(GPR dstBase, GPR srcReg) {
16238        int miStart = mi;
16239        // no group 1 to 4 prefix byte
16240        generateREXprefix(false, srcReg, null, dstBase);
16241        setMachineCodes(mi++, (byte) 0x0F);
16242        setMachineCodes(mi++, (byte) 0xA3);
16243        emitRegIndirectRegOperands(dstBase, srcReg);
16244        if (lister != null) lister.RNR(miStart, "BT", dstBase, srcReg);
16245      }
16246    
16247      /**
16248       * Generate a register-offset--register BT. That is,
16249       * <PRE>
16250       * [dstReg<<dstScale + dstDisp] BT=  srcReg
16251       * </PRE>
16252       *
16253       * @param dstIndex the destination index register
16254       * @param dstScale the destination shift amount
16255       * @param dstDisp the destination displacement
16256       * @param srcReg the source register
16257       */
16258      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
16259      public final void emitBT_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
16260        int miStart = mi;
16261        // no group 1 to 4 prefix byte
16262        generateREXprefix(false, srcReg, dstIndex, null);
16263        setMachineCodes(mi++, (byte) 0x0F);
16264        setMachineCodes(mi++, (byte) 0xA3);
16265        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
16266        if (lister != null) lister.RFDR(miStart, "BT", dstIndex, dstScale, dstDisp, srcReg);
16267      }
16268    
16269      /**
16270       * Generate a absolute--register BT. That is,
16271       * <PRE>
16272       * [dstDisp] BT=  srcReg
16273       * </PRE>
16274       *
16275       * @param dstDisp the destination address
16276       * @param srcReg the source register
16277       */
16278      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
16279      public final void emitBT_Abs_Reg(Address dstDisp, GPR srcReg) {
16280        int miStart = mi;
16281        // no group 1 to 4 prefix byte
16282        generateREXprefix(false, srcReg, null, null);
16283        setMachineCodes(mi++, (byte) 0x0F);
16284        setMachineCodes(mi++, (byte) 0xA3);
16285        emitAbsRegOperands(dstDisp, srcReg);
16286        if (lister != null) lister.RAR(miStart, "BT", dstDisp, srcReg);
16287      }
16288    
16289      /**
16290       * Generate a register-index--register BT. That is,
16291       * <PRE>
16292       * [dstBase + dstIndex<<dstScale + dstDisp] BT=  srcReg
16293       * </PRE>
16294       *
16295       * @param dstBase the base register
16296       * @param dstIndex the destination index register
16297       * @param dstScale the destination shift amount
16298       * @param dstDisp the destination displacement
16299       * @param srcReg the source register
16300       */
16301      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
16302      public final void emitBT_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
16303        int miStart = mi;
16304        // no group 1 to 4 prefix byte
16305        generateREXprefix(false, srcReg, dstIndex, dstBase);
16306        setMachineCodes(mi++, (byte) 0x0F);
16307        setMachineCodes(mi++, (byte) 0xA3);
16308        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
16309        if (lister != null) lister.RXDR(miStart, "BT", dstBase, dstIndex, dstScale, dstDisp, srcReg);
16310      }
16311    
16312      /**
16313       * Generate a register-displacement--register BT. That is,
16314       * <PRE>
16315       * [dstBase + dstDisp] BT=  srcReg
16316       * </PRE>
16317       *
16318       * @param dstBase the base register
16319       * @param dstDisp the destination displacement
16320       * @param srcReg the source register
16321       */
16322      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
16323      public final void emitBT_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
16324        int miStart = mi;
16325        // no group 1 to 4 prefix byte
16326        generateREXprefix(false, srcReg, null, dstBase);
16327        setMachineCodes(mi++, (byte) 0x0F);
16328        setMachineCodes(mi++, (byte) 0xA3);
16329        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
16330        if (lister != null) lister.RDR(miStart, "BT", dstBase, dstDisp, srcReg);
16331      }
16332    
16333      /**
16334       * Generate a register--register BT. That is,
16335       * <PRE>
16336       * dstReg BT=  srcReg
16337       * </PRE>
16338       *
16339       * @param dstReg the destination register
16340       * @param srcReg the source register
16341       */
16342      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
16343      public final void emitBT_Reg_Reg(GPR dstReg, GPR srcReg) {
16344        int miStart = mi;
16345        // no group 1 to 4 prefix byte
16346        generateREXprefix(false, srcReg, null, dstReg);
16347        setMachineCodes(mi++, (byte) 0x0F);
16348        setMachineCodes(mi++, (byte) 0xA3);
16349        emitRegRegOperands(dstReg, srcReg);
16350        if (lister != null) lister.RR(miStart, "BT", dstReg, srcReg);
16351      }
16352    
16353      /**
16354       * Generate a register--immediate BT. That is,
16355       * <PRE>
16356       * dstReg BT=  imm
16357       * </PRE>
16358       *
16359       * @param dstReg the destination register
16360       * @param imm immediate
16361       */
16362      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16363      public final void emitBT_Reg_Imm(GPR dstReg, int imm) {
16364        int miStart = mi;
16365        // no group 1 to 4 prefix byte
16366        generateREXprefix(false, null, null, dstReg);
16367        setMachineCodes(mi++, (byte) 0x0F);
16368        if (fits(imm,8)) {
16369          setMachineCodes(mi++, (byte) 0xBA);
16370          // "register 0x4" is really part of the opcode
16371          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
16372          emitImm8((byte)imm);
16373        } else {
16374          throw new InternalError("Data too large for BT instruction");
16375        }
16376        if (lister != null) lister.RI(miStart, "BT", dstReg, imm);
16377      }
16378    
16379      /**
16380       * Generate a register-displacement--immediate BT. That is,
16381       * <PRE>
16382       * [dstBase + dstDisp] BT=  imm
16383       * </PRE>
16384       *
16385       * @param dstBase the destination register
16386       * @param dstDisp the destination displacement
16387       * @param imm immediate
16388       */
16389      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16390      public final void emitBT_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
16391        int miStart = mi;
16392        // no group 1 to 4 prefix byte
16393        generateREXprefix(false, null, null, dstBase);
16394        setMachineCodes(mi++, (byte) 0x0F);
16395        if (fits(imm,8)) {
16396          setMachineCodes(mi++, (byte) 0xBA);
16397          // "register 0x4" is really part of the opcode
16398          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
16399          emitImm8((byte)imm);
16400        } else {
16401          throw new InternalError("Data too large for BT instruction");
16402        }
16403        if (lister != null) lister.RDI(miStart, "BT", dstBase, dstDisp, imm);
16404      }
16405    
16406      /**
16407       * Generate a register-offset--immediate BT. That is,
16408       * <PRE>
16409       * [dstIndex<<dstScale + dstDisp] BT=  imm
16410       * </PRE>
16411       *
16412       * @param dstIndex the destination index register
16413       * @param dstScale the destination shift amount
16414       * @param dstDisp the destination displacement
16415       * @param imm immediate
16416       */
16417      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16418      public final void emitBT_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
16419        int miStart = mi;
16420        // no group 1 to 4 prefix byte
16421        generateREXprefix(false, null, dstIndex, null);
16422        setMachineCodes(mi++, (byte) 0x0F);
16423        if (fits(imm,8)) {
16424          setMachineCodes(mi++, (byte) 0xBA);
16425          // "register 0x4" is really part of the opcode
16426          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
16427          emitImm8((byte)imm);
16428        } else {
16429          throw new InternalError("Data too large for BT instruction");
16430        }
16431        if (lister != null) lister.RFDI(miStart, "BT", dstIndex, dstScale, dstDisp, imm);
16432      }
16433    
16434      /**
16435       * Generate a absolute--immediate BT. That is,
16436       * <PRE>
16437       * [dstDisp] BT=  imm
16438       * </PRE>
16439       *
16440       * @param dstDisp the destination displacement
16441       * @param imm immediate
16442       */
16443      public final void emitBT_Abs_Imm(Address dstDisp, int imm) {
16444        int miStart = mi;
16445        // no group 1 to 4 prefix byte
16446        generateREXprefix(false, null, null, null);
16447        setMachineCodes(mi++, (byte) 0x0F);
16448        if (fits(imm,8)) {
16449          setMachineCodes(mi++, (byte) 0xBA);
16450          // "register 0x4" is really part of the opcode
16451          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
16452          emitImm8((byte)imm);
16453        } else {
16454          throw new InternalError("Data too large for BT instruction");
16455        }
16456        if (lister != null) lister.RAI(miStart, "BT", dstDisp, imm);
16457      }
16458    
16459      /**
16460       * Generate a register-index--immediate BT. That is,
16461       * <PRE>
16462       * [dstBase + dstIndex<<dstScale + dstDisp] BT=  imm
16463       * </PRE>
16464       *
16465       * @param dstBase the destination base register
16466       * @param dstIndex the destination index register
16467       * @param dstScale the destination shift amount
16468       * @param dstDisp the destination displacement
16469       * @param imm immediate
16470       */
16471      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
16472      public final void emitBT_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
16473        int miStart = mi;
16474        // no group 1 to 4 prefix byte
16475        generateREXprefix(false, null, dstIndex, dstBase);
16476        setMachineCodes(mi++, (byte) 0x0F);
16477        if (fits(imm,8)) {
16478          setMachineCodes(mi++, (byte) 0xBA);
16479          // "register 0x4" is really part of the opcode
16480          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
16481          emitImm8((byte)imm);
16482        } else {
16483          throw new InternalError("Data too large for BT instruction");
16484        }
16485        if (lister != null) lister.RXDI(miStart, "BT", dstBase, dstIndex, dstScale, dstDisp, imm);
16486      }
16487    
16488      /**
16489       * Generate a register(indirect)--immediate BT. That is,
16490       * <PRE>
16491       * [dstBase] BT=  imm
16492       * </PRE>
16493       *
16494       * @param dstBase the destination base register
16495       * @param imm immediate
16496       */
16497      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16498      public final void emitBT_RegInd_Imm(GPR dstBase, int imm) {
16499        int miStart = mi;
16500        // no group 1 to 4 prefix byte
16501        generateREXprefix(false, null, null, dstBase);
16502        setMachineCodes(mi++, (byte) 0x0F);
16503        if (fits(imm,8)) {
16504          setMachineCodes(mi++, (byte) 0xBA);
16505          // "register 0x4" is really part of the opcode
16506          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
16507          emitImm8((byte)imm);
16508        } else {
16509          throw new InternalError("Data too large for BT instruction");
16510        }
16511        if (lister != null) lister.RNI(miStart, "BT", dstBase, imm);
16512      }
16513    
16514      /**
16515       * Generate a register(indirect)--register BTC. That is,
16516       * <PRE>
16517       * [dstBase] BTC=  srcReg
16518       * </PRE>
16519       *
16520       * @param dstBase the destination base
16521       * @param srcReg the source register
16522       */
16523      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
16524      public final void emitBTC_RegInd_Reg(GPR dstBase, GPR srcReg) {
16525        int miStart = mi;
16526        // no group 1 to 4 prefix byte
16527        generateREXprefix(false, srcReg, null, dstBase);
16528        setMachineCodes(mi++, (byte) 0x0F);
16529        setMachineCodes(mi++, (byte) 0xBB);
16530        emitRegIndirectRegOperands(dstBase, srcReg);
16531        if (lister != null) lister.RNR(miStart, "BTC", dstBase, srcReg);
16532      }
16533    
16534      /**
16535       * Generate a register-offset--register BTC. That is,
16536       * <PRE>
16537       * [dstReg<<dstScale + dstDisp] BTC=  srcReg
16538       * </PRE>
16539       *
16540       * @param dstIndex the destination index register
16541       * @param dstScale the destination shift amount
16542       * @param dstDisp the destination displacement
16543       * @param srcReg the source register
16544       */
16545      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
16546      public final void emitBTC_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
16547        int miStart = mi;
16548        // no group 1 to 4 prefix byte
16549        generateREXprefix(false, srcReg, dstIndex, null);
16550        setMachineCodes(mi++, (byte) 0x0F);
16551        setMachineCodes(mi++, (byte) 0xBB);
16552        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
16553        if (lister != null) lister.RFDR(miStart, "BTC", dstIndex, dstScale, dstDisp, srcReg);
16554      }
16555    
16556      /**
16557       * Generate a absolute--register BTC. That is,
16558       * <PRE>
16559       * [dstDisp] BTC=  srcReg
16560       * </PRE>
16561       *
16562       * @param dstDisp the destination address
16563       * @param srcReg the source register
16564       */
16565      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
16566      public final void emitBTC_Abs_Reg(Address dstDisp, GPR srcReg) {
16567        int miStart = mi;
16568        // no group 1 to 4 prefix byte
16569        generateREXprefix(false, srcReg, null, null);
16570        setMachineCodes(mi++, (byte) 0x0F);
16571        setMachineCodes(mi++, (byte) 0xBB);
16572        emitAbsRegOperands(dstDisp, srcReg);
16573        if (lister != null) lister.RAR(miStart, "BTC", dstDisp, srcReg);
16574      }
16575    
16576      /**
16577       * Generate a register-index--register BTC. That is,
16578       * <PRE>
16579       * [dstBase + dstIndex<<dstScale + dstDisp] BTC=  srcReg
16580       * </PRE>
16581       *
16582       * @param dstBase the base register
16583       * @param dstIndex the destination index register
16584       * @param dstScale the destination shift amount
16585       * @param dstDisp the destination displacement
16586       * @param srcReg the source register
16587       */
16588      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
16589      public final void emitBTC_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
16590        int miStart = mi;
16591        // no group 1 to 4 prefix byte
16592        generateREXprefix(false, srcReg, dstIndex, dstBase);
16593        setMachineCodes(mi++, (byte) 0x0F);
16594        setMachineCodes(mi++, (byte) 0xBB);
16595        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
16596        if (lister != null) lister.RXDR(miStart, "BTC", dstBase, dstIndex, dstScale, dstDisp, srcReg);
16597      }
16598    
16599      /**
16600       * Generate a register-displacement--register BTC. That is,
16601       * <PRE>
16602       * [dstBase + dstDisp] BTC=  srcReg
16603       * </PRE>
16604       *
16605       * @param dstBase the base register
16606       * @param dstDisp the destination displacement
16607       * @param srcReg the source register
16608       */
16609      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
16610      public final void emitBTC_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
16611        int miStart = mi;
16612        // no group 1 to 4 prefix byte
16613        generateREXprefix(false, srcReg, null, dstBase);
16614        setMachineCodes(mi++, (byte) 0x0F);
16615        setMachineCodes(mi++, (byte) 0xBB);
16616        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
16617        if (lister != null) lister.RDR(miStart, "BTC", dstBase, dstDisp, srcReg);
16618      }
16619    
16620      /**
16621       * Generate a register--register BTC. That is,
16622       * <PRE>
16623       * dstReg BTC=  srcReg
16624       * </PRE>
16625       *
16626       * @param dstReg the destination register
16627       * @param srcReg the source register
16628       */
16629      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
16630      public final void emitBTC_Reg_Reg(GPR dstReg, GPR srcReg) {
16631        int miStart = mi;
16632        // no group 1 to 4 prefix byte
16633        generateREXprefix(false, srcReg, null, dstReg);
16634        setMachineCodes(mi++, (byte) 0x0F);
16635        setMachineCodes(mi++, (byte) 0xBB);
16636        emitRegRegOperands(dstReg, srcReg);
16637        if (lister != null) lister.RR(miStart, "BTC", dstReg, srcReg);
16638      }
16639    
16640      /**
16641       * Generate a register--immediate BTC. That is,
16642       * <PRE>
16643       * dstReg BTC=  imm
16644       * </PRE>
16645       *
16646       * @param dstReg the destination register
16647       * @param imm immediate
16648       */
16649      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16650      public final void emitBTC_Reg_Imm(GPR dstReg, int imm) {
16651        int miStart = mi;
16652        // no group 1 to 4 prefix byte
16653        generateREXprefix(false, null, null, dstReg);
16654        setMachineCodes(mi++, (byte) 0x0F);
16655        if (fits(imm,8)) {
16656          setMachineCodes(mi++, (byte) 0xBA);
16657          // "register 0x7" is really part of the opcode
16658          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
16659          emitImm8((byte)imm);
16660        } else {
16661          throw new InternalError("Data too large for BTC instruction");
16662        }
16663        if (lister != null) lister.RI(miStart, "BTC", dstReg, imm);
16664      }
16665    
16666      /**
16667       * Generate a register-displacement--immediate BTC. That is,
16668       * <PRE>
16669       * [dstBase + dstDisp] BTC=  imm
16670       * </PRE>
16671       *
16672       * @param dstBase the destination register
16673       * @param dstDisp the destination displacement
16674       * @param imm immediate
16675       */
16676      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16677      public final void emitBTC_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
16678        int miStart = mi;
16679        // no group 1 to 4 prefix byte
16680        generateREXprefix(false, null, null, dstBase);
16681        setMachineCodes(mi++, (byte) 0x0F);
16682        if (fits(imm,8)) {
16683          setMachineCodes(mi++, (byte) 0xBA);
16684          // "register 0x7" is really part of the opcode
16685          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
16686          emitImm8((byte)imm);
16687        } else {
16688          throw new InternalError("Data too large for BTC instruction");
16689        }
16690        if (lister != null) lister.RDI(miStart, "BTC", dstBase, dstDisp, imm);
16691      }
16692    
16693      /**
16694       * Generate a register-offset--immediate BTC. That is,
16695       * <PRE>
16696       * [dstIndex<<dstScale + dstDisp] BTC=  imm
16697       * </PRE>
16698       *
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})
16705      public final void emitBTC_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
16706        int miStart = mi;
16707        // no group 1 to 4 prefix byte
16708        generateREXprefix(false, null, dstIndex, null);
16709        setMachineCodes(mi++, (byte) 0x0F);
16710        if (fits(imm,8)) {
16711          setMachineCodes(mi++, (byte) 0xBA);
16712          // "register 0x7" is really part of the opcode
16713          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
16714          emitImm8((byte)imm);
16715        } else {
16716          throw new InternalError("Data too large for BTC instruction");
16717        }
16718        if (lister != null) lister.RFDI(miStart, "BTC", dstIndex, dstScale, dstDisp, imm);
16719      }
16720    
16721      /**
16722       * Generate a absolute--immediate BTC. That is,
16723       * <PRE>
16724       * [dstDisp] BTC=  imm
16725       * </PRE>
16726       *
16727       * @param dstDisp the destination displacement
16728       * @param imm immediate
16729       */
16730      public final void emitBTC_Abs_Imm(Address dstDisp, int imm) {
16731        int miStart = mi;
16732        // no group 1 to 4 prefix byte
16733        generateREXprefix(false, null, null, null);
16734        setMachineCodes(mi++, (byte) 0x0F);
16735        if (fits(imm,8)) {
16736          setMachineCodes(mi++, (byte) 0xBA);
16737          // "register 0x7" is really part of the opcode
16738          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
16739          emitImm8((byte)imm);
16740        } else {
16741          throw new InternalError("Data too large for BTC instruction");
16742        }
16743        if (lister != null) lister.RAI(miStart, "BTC", dstDisp, imm);
16744      }
16745    
16746      /**
16747       * Generate a register-index--immediate BTC. That is,
16748       * <PRE>
16749       * [dstBase + dstIndex<<dstScale + dstDisp] BTC=  imm
16750       * </PRE>
16751       *
16752       * @param dstBase the destination base register
16753       * @param dstIndex the destination index register
16754       * @param dstScale the destination shift amount
16755       * @param dstDisp the destination displacement
16756       * @param imm immediate
16757       */
16758      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
16759      public final void emitBTC_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
16760        int miStart = mi;
16761        // no group 1 to 4 prefix byte
16762        generateREXprefix(false, null, dstIndex, dstBase);
16763        setMachineCodes(mi++, (byte) 0x0F);
16764        if (fits(imm,8)) {
16765          setMachineCodes(mi++, (byte) 0xBA);
16766          // "register 0x7" is really part of the opcode
16767          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
16768          emitImm8((byte)imm);
16769        } else {
16770          throw new InternalError("Data too large for BTC instruction");
16771        }
16772        if (lister != null) lister.RXDI(miStart, "BTC", dstBase, dstIndex, dstScale, dstDisp, imm);
16773      }
16774    
16775      /**
16776       * Generate a register(indirect)--immediate BTC. That is,
16777       * <PRE>
16778       * [dstBase] BTC=  imm
16779       * </PRE>
16780       *
16781       * @param dstBase the destination base register
16782       * @param imm immediate
16783       */
16784      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16785      public final void emitBTC_RegInd_Imm(GPR dstBase, int imm) {
16786        int miStart = mi;
16787        // no group 1 to 4 prefix byte
16788        generateREXprefix(false, null, null, dstBase);
16789        setMachineCodes(mi++, (byte) 0x0F);
16790        if (fits(imm,8)) {
16791          setMachineCodes(mi++, (byte) 0xBA);
16792          // "register 0x7" is really part of the opcode
16793          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
16794          emitImm8((byte)imm);
16795        } else {
16796          throw new InternalError("Data too large for BTC instruction");
16797        }
16798        if (lister != null) lister.RNI(miStart, "BTC", dstBase, imm);
16799      }
16800    
16801      /**
16802       * Generate a register(indirect)--register BTR. That is,
16803       * <PRE>
16804       * [dstBase] BTR=  srcReg
16805       * </PRE>
16806       *
16807       * @param dstBase the destination base
16808       * @param srcReg the source register
16809       */
16810      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
16811      public final void emitBTR_RegInd_Reg(GPR dstBase, GPR srcReg) {
16812        int miStart = mi;
16813        // no group 1 to 4 prefix byte
16814        generateREXprefix(false, srcReg, null, dstBase);
16815        setMachineCodes(mi++, (byte) 0x0F);
16816        setMachineCodes(mi++, (byte) 0xB3);
16817        emitRegIndirectRegOperands(dstBase, srcReg);
16818        if (lister != null) lister.RNR(miStart, "BTR", dstBase, srcReg);
16819      }
16820    
16821      /**
16822       * Generate a register-offset--register BTR. That is,
16823       * <PRE>
16824       * [dstReg<<dstScale + dstDisp] BTR=  srcReg
16825       * </PRE>
16826       *
16827       * @param dstIndex the destination index register
16828       * @param dstScale the destination shift amount
16829       * @param dstDisp the destination displacement
16830       * @param srcReg the source register
16831       */
16832      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
16833      public final void emitBTR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
16834        int miStart = mi;
16835        // no group 1 to 4 prefix byte
16836        generateREXprefix(false, srcReg, dstIndex, null);
16837        setMachineCodes(mi++, (byte) 0x0F);
16838        setMachineCodes(mi++, (byte) 0xB3);
16839        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
16840        if (lister != null) lister.RFDR(miStart, "BTR", dstIndex, dstScale, dstDisp, srcReg);
16841      }
16842    
16843      /**
16844       * Generate a absolute--register BTR. That is,
16845       * <PRE>
16846       * [dstDisp] BTR=  srcReg
16847       * </PRE>
16848       *
16849       * @param dstDisp the destination address
16850       * @param srcReg the source register
16851       */
16852      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
16853      public final void emitBTR_Abs_Reg(Address dstDisp, GPR srcReg) {
16854        int miStart = mi;
16855        // no group 1 to 4 prefix byte
16856        generateREXprefix(false, srcReg, null, null);
16857        setMachineCodes(mi++, (byte) 0x0F);
16858        setMachineCodes(mi++, (byte) 0xB3);
16859        emitAbsRegOperands(dstDisp, srcReg);
16860        if (lister != null) lister.RAR(miStart, "BTR", dstDisp, srcReg);
16861      }
16862    
16863      /**
16864       * Generate a register-index--register BTR. That is,
16865       * <PRE>
16866       * [dstBase + dstIndex<<dstScale + dstDisp] BTR=  srcReg
16867       * </PRE>
16868       *
16869       * @param dstBase the base register
16870       * @param dstIndex the destination index register
16871       * @param dstScale the destination shift amount
16872       * @param dstDisp the destination displacement
16873       * @param srcReg the source register
16874       */
16875      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
16876      public final void emitBTR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
16877        int miStart = mi;
16878        // no group 1 to 4 prefix byte
16879        generateREXprefix(false, srcReg, dstIndex, dstBase);
16880        setMachineCodes(mi++, (byte) 0x0F);
16881        setMachineCodes(mi++, (byte) 0xB3);
16882        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
16883        if (lister != null) lister.RXDR(miStart, "BTR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
16884      }
16885    
16886      /**
16887       * Generate a register-displacement--register BTR. That is,
16888       * <PRE>
16889       * [dstBase + dstDisp] BTR=  srcReg
16890       * </PRE>
16891       *
16892       * @param dstBase the base register
16893       * @param dstDisp the destination displacement
16894       * @param srcReg the source register
16895       */
16896      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
16897      public final void emitBTR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
16898        int miStart = mi;
16899        // no group 1 to 4 prefix byte
16900        generateREXprefix(false, srcReg, null, dstBase);
16901        setMachineCodes(mi++, (byte) 0x0F);
16902        setMachineCodes(mi++, (byte) 0xB3);
16903        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
16904        if (lister != null) lister.RDR(miStart, "BTR", dstBase, dstDisp, srcReg);
16905      }
16906    
16907      /**
16908       * Generate a register--register BTR. That is,
16909       * <PRE>
16910       * dstReg BTR=  srcReg
16911       * </PRE>
16912       *
16913       * @param dstReg the destination register
16914       * @param srcReg the source register
16915       */
16916      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
16917      public final void emitBTR_Reg_Reg(GPR dstReg, GPR srcReg) {
16918        int miStart = mi;
16919        // no group 1 to 4 prefix byte
16920        generateREXprefix(false, srcReg, null, dstReg);
16921        setMachineCodes(mi++, (byte) 0x0F);
16922        setMachineCodes(mi++, (byte) 0xB3);
16923        emitRegRegOperands(dstReg, srcReg);
16924        if (lister != null) lister.RR(miStart, "BTR", dstReg, srcReg);
16925      }
16926    
16927      /**
16928       * Generate a register--immediate BTR. That is,
16929       * <PRE>
16930       * dstReg BTR=  imm
16931       * </PRE>
16932       *
16933       * @param dstReg the destination register
16934       * @param imm immediate
16935       */
16936      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16937      public final void emitBTR_Reg_Imm(GPR dstReg, int imm) {
16938        int miStart = mi;
16939        // no group 1 to 4 prefix byte
16940        generateREXprefix(false, null, null, dstReg);
16941        setMachineCodes(mi++, (byte) 0x0F);
16942        if (fits(imm,8)) {
16943          setMachineCodes(mi++, (byte) 0xBA);
16944          // "register 0x6" is really part of the opcode
16945          emitRegRegOperands(dstReg, GPR.getForOpcode(0x6));
16946          emitImm8((byte)imm);
16947        } else {
16948          throw new InternalError("Data too large for BTR instruction");
16949        }
16950        if (lister != null) lister.RI(miStart, "BTR", dstReg, imm);
16951      }
16952    
16953      /**
16954       * Generate a register-displacement--immediate BTR. That is,
16955       * <PRE>
16956       * [dstBase + dstDisp] BTR=  imm
16957       * </PRE>
16958       *
16959       * @param dstBase the destination register
16960       * @param dstDisp the destination displacement
16961       * @param imm immediate
16962       */
16963      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16964      public final void emitBTR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
16965        int miStart = mi;
16966        // no group 1 to 4 prefix byte
16967        generateREXprefix(false, null, null, dstBase);
16968        setMachineCodes(mi++, (byte) 0x0F);
16969        if (fits(imm,8)) {
16970          setMachineCodes(mi++, (byte) 0xBA);
16971          // "register 0x6" is really part of the opcode
16972          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x6));
16973          emitImm8((byte)imm);
16974        } else {
16975          throw new InternalError("Data too large for BTR instruction");
16976        }
16977        if (lister != null) lister.RDI(miStart, "BTR", dstBase, dstDisp, imm);
16978      }
16979    
16980      /**
16981       * Generate a register-offset--immediate BTR. That is,
16982       * <PRE>
16983       * [dstIndex<<dstScale + dstDisp] BTR=  imm
16984       * </PRE>
16985       *
16986       * @param dstIndex the destination index register
16987       * @param dstScale the destination shift amount
16988       * @param dstDisp the destination displacement
16989       * @param imm immediate
16990       */
16991      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
16992      public final void emitBTR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
16993        int miStart = mi;
16994        // no group 1 to 4 prefix byte
16995        generateREXprefix(false, null, dstIndex, null);
16996        setMachineCodes(mi++, (byte) 0x0F);
16997        if (fits(imm,8)) {
16998          setMachineCodes(mi++, (byte) 0xBA);
16999          // "register 0x6" is really part of the opcode
17000          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
17001          emitImm8((byte)imm);
17002        } else {
17003          throw new InternalError("Data too large for BTR instruction");
17004        }
17005        if (lister != null) lister.RFDI(miStart, "BTR", dstIndex, dstScale, dstDisp, imm);
17006      }
17007    
17008      /**
17009       * Generate a absolute--immediate BTR. That is,
17010       * <PRE>
17011       * [dstDisp] BTR=  imm
17012       * </PRE>
17013       *
17014       * @param dstDisp the destination displacement
17015       * @param imm immediate
17016       */
17017      public final void emitBTR_Abs_Imm(Address dstDisp, int imm) {
17018        int miStart = mi;
17019        // no group 1 to 4 prefix byte
17020        generateREXprefix(false, null, null, null);
17021        setMachineCodes(mi++, (byte) 0x0F);
17022        if (fits(imm,8)) {
17023          setMachineCodes(mi++, (byte) 0xBA);
17024          // "register 0x6" is really part of the opcode
17025          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x6));
17026          emitImm8((byte)imm);
17027        } else {
17028          throw new InternalError("Data too large for BTR instruction");
17029        }
17030        if (lister != null) lister.RAI(miStart, "BTR", dstDisp, imm);
17031      }
17032    
17033      /**
17034       * Generate a register-index--immediate BTR. That is,
17035       * <PRE>
17036       * [dstBase + dstIndex<<dstScale + dstDisp] BTR=  imm
17037       * </PRE>
17038       *
17039       * @param dstBase the destination base register
17040       * @param dstIndex the destination index register
17041       * @param dstScale the destination shift amount
17042       * @param dstDisp the destination displacement
17043       * @param imm immediate
17044       */
17045      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
17046      public final void emitBTR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
17047        int miStart = mi;
17048        // no group 1 to 4 prefix byte
17049        generateREXprefix(false, null, dstIndex, dstBase);
17050        setMachineCodes(mi++, (byte) 0x0F);
17051        if (fits(imm,8)) {
17052          setMachineCodes(mi++, (byte) 0xBA);
17053          // "register 0x6" is really part of the opcode
17054          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x6));
17055          emitImm8((byte)imm);
17056        } else {
17057          throw new InternalError("Data too large for BTR instruction");
17058        }
17059        if (lister != null) lister.RXDI(miStart, "BTR", dstBase, dstIndex, dstScale, dstDisp, imm);
17060      }
17061    
17062      /**
17063       * Generate a register(indirect)--immediate BTR. That is,
17064       * <PRE>
17065       * [dstBase] BTR=  imm
17066       * </PRE>
17067       *
17068       * @param dstBase the destination base register
17069       * @param imm immediate
17070       */
17071      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17072      public final void emitBTR_RegInd_Imm(GPR dstBase, int imm) {
17073        int miStart = mi;
17074        // no group 1 to 4 prefix byte
17075        generateREXprefix(false, null, null, dstBase);
17076        setMachineCodes(mi++, (byte) 0x0F);
17077        if (fits(imm,8)) {
17078          setMachineCodes(mi++, (byte) 0xBA);
17079          // "register 0x6" is really part of the opcode
17080          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x6));
17081          emitImm8((byte)imm);
17082        } else {
17083          throw new InternalError("Data too large for BTR instruction");
17084        }
17085        if (lister != null) lister.RNI(miStart, "BTR", dstBase, imm);
17086      }
17087    
17088      /**
17089       * Generate a register(indirect)--register BTS. That is,
17090       * <PRE>
17091       * [dstBase] BTS=  srcReg
17092       * </PRE>
17093       *
17094       * @param dstBase the destination base
17095       * @param srcReg the source register
17096       */
17097      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
17098      public final void emitBTS_RegInd_Reg(GPR dstBase, GPR srcReg) {
17099        int miStart = mi;
17100        // no group 1 to 4 prefix byte
17101        generateREXprefix(false, srcReg, null, dstBase);
17102        setMachineCodes(mi++, (byte) 0x0F);
17103        setMachineCodes(mi++, (byte) 0xAB);
17104        emitRegIndirectRegOperands(dstBase, srcReg);
17105        if (lister != null) lister.RNR(miStart, "BTS", dstBase, srcReg);
17106      }
17107    
17108      /**
17109       * Generate a register-offset--register BTS. That is,
17110       * <PRE>
17111       * [dstReg<<dstScale + dstDisp] BTS=  srcReg
17112       * </PRE>
17113       *
17114       * @param dstIndex the destination index register
17115       * @param dstScale the destination shift amount
17116       * @param dstDisp the destination displacement
17117       * @param srcReg the source register
17118       */
17119      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
17120      public final void emitBTS_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
17121        int miStart = mi;
17122        // no group 1 to 4 prefix byte
17123        generateREXprefix(false, srcReg, dstIndex, null);
17124        setMachineCodes(mi++, (byte) 0x0F);
17125        setMachineCodes(mi++, (byte) 0xAB);
17126        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
17127        if (lister != null) lister.RFDR(miStart, "BTS", dstIndex, dstScale, dstDisp, srcReg);
17128      }
17129    
17130      /**
17131       * Generate a absolute--register BTS. That is,
17132       * <PRE>
17133       * [dstDisp] BTS=  srcReg
17134       * </PRE>
17135       *
17136       * @param dstDisp the destination address
17137       * @param srcReg the source register
17138       */
17139      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
17140      public final void emitBTS_Abs_Reg(Address dstDisp, GPR srcReg) {
17141        int miStart = mi;
17142        // no group 1 to 4 prefix byte
17143        generateREXprefix(false, srcReg, null, null);
17144        setMachineCodes(mi++, (byte) 0x0F);
17145        setMachineCodes(mi++, (byte) 0xAB);
17146        emitAbsRegOperands(dstDisp, srcReg);
17147        if (lister != null) lister.RAR(miStart, "BTS", dstDisp, srcReg);
17148      }
17149    
17150      /**
17151       * Generate a register-index--register BTS. That is,
17152       * <PRE>
17153       * [dstBase + dstIndex<<dstScale + dstDisp] BTS=  srcReg
17154       * </PRE>
17155       *
17156       * @param dstBase the base register
17157       * @param dstIndex the destination index register
17158       * @param dstScale the destination shift amount
17159       * @param dstDisp the destination displacement
17160       * @param srcReg the source register
17161       */
17162      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
17163      public final void emitBTS_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
17164        int miStart = mi;
17165        // no group 1 to 4 prefix byte
17166        generateREXprefix(false, srcReg, dstIndex, dstBase);
17167        setMachineCodes(mi++, (byte) 0x0F);
17168        setMachineCodes(mi++, (byte) 0xAB);
17169        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
17170        if (lister != null) lister.RXDR(miStart, "BTS", dstBase, dstIndex, dstScale, dstDisp, srcReg);
17171      }
17172    
17173      /**
17174       * Generate a register-displacement--register BTS. That is,
17175       * <PRE>
17176       * [dstBase + dstDisp] BTS=  srcReg
17177       * </PRE>
17178       *
17179       * @param dstBase the base register
17180       * @param dstDisp the destination displacement
17181       * @param srcReg the source register
17182       */
17183      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
17184      public final void emitBTS_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
17185        int miStart = mi;
17186        // no group 1 to 4 prefix byte
17187        generateREXprefix(false, srcReg, null, dstBase);
17188        setMachineCodes(mi++, (byte) 0x0F);
17189        setMachineCodes(mi++, (byte) 0xAB);
17190        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
17191        if (lister != null) lister.RDR(miStart, "BTS", dstBase, dstDisp, srcReg);
17192      }
17193    
17194      /**
17195       * Generate a register--register BTS. That is,
17196       * <PRE>
17197       * dstReg BTS=  srcReg
17198       * </PRE>
17199       *
17200       * @param dstReg the destination register
17201       * @param srcReg the source register
17202       */
17203      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
17204      public final void emitBTS_Reg_Reg(GPR dstReg, GPR srcReg) {
17205        int miStart = mi;
17206        // no group 1 to 4 prefix byte
17207        generateREXprefix(false, srcReg, null, dstReg);
17208        setMachineCodes(mi++, (byte) 0x0F);
17209        setMachineCodes(mi++, (byte) 0xAB);
17210        emitRegRegOperands(dstReg, srcReg);
17211        if (lister != null) lister.RR(miStart, "BTS", dstReg, srcReg);
17212      }
17213    
17214      /**
17215       * Generate a register--immediate BTS. That is,
17216       * <PRE>
17217       * dstReg BTS=  imm
17218       * </PRE>
17219       *
17220       * @param dstReg the destination register
17221       * @param imm immediate
17222       */
17223      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17224      public final void emitBTS_Reg_Imm(GPR dstReg, int imm) {
17225        int miStart = mi;
17226        // no group 1 to 4 prefix byte
17227        generateREXprefix(false, null, null, dstReg);
17228        setMachineCodes(mi++, (byte) 0x0F);
17229        if (fits(imm,8)) {
17230          setMachineCodes(mi++, (byte) 0xBA);
17231          // "register 0x5" is really part of the opcode
17232          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
17233          emitImm8((byte)imm);
17234        } else {
17235          throw new InternalError("Data too large for BTS instruction");
17236        }
17237        if (lister != null) lister.RI(miStart, "BTS", dstReg, imm);
17238      }
17239    
17240      /**
17241       * Generate a register-displacement--immediate BTS. That is,
17242       * <PRE>
17243       * [dstBase + dstDisp] BTS=  imm
17244       * </PRE>
17245       *
17246       * @param dstBase the destination register
17247       * @param dstDisp the destination displacement
17248       * @param imm immediate
17249       */
17250      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17251      public final void emitBTS_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
17252        int miStart = mi;
17253        // no group 1 to 4 prefix byte
17254        generateREXprefix(false, null, null, dstBase);
17255        setMachineCodes(mi++, (byte) 0x0F);
17256        if (fits(imm,8)) {
17257          setMachineCodes(mi++, (byte) 0xBA);
17258          // "register 0x5" is really part of the opcode
17259          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
17260          emitImm8((byte)imm);
17261        } else {
17262          throw new InternalError("Data too large for BTS instruction");
17263        }
17264        if (lister != null) lister.RDI(miStart, "BTS", dstBase, dstDisp, imm);
17265      }
17266    
17267      /**
17268       * Generate a register-offset--immediate BTS. That is,
17269       * <PRE>
17270       * [dstIndex<<dstScale + dstDisp] BTS=  imm
17271       * </PRE>
17272       *
17273       * @param dstIndex the destination index register
17274       * @param dstScale the destination shift amount
17275       * @param dstDisp the destination displacement
17276       * @param imm immediate
17277       */
17278      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17279      public final void emitBTS_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
17280        int miStart = mi;
17281        // no group 1 to 4 prefix byte
17282        generateREXprefix(false, null, dstIndex, null);
17283        setMachineCodes(mi++, (byte) 0x0F);
17284        if (fits(imm,8)) {
17285          setMachineCodes(mi++, (byte) 0xBA);
17286          // "register 0x5" is really part of the opcode
17287          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
17288          emitImm8((byte)imm);
17289        } else {
17290          throw new InternalError("Data too large for BTS instruction");
17291        }
17292        if (lister != null) lister.RFDI(miStart, "BTS", dstIndex, dstScale, dstDisp, imm);
17293      }
17294    
17295      /**
17296       * Generate a absolute--immediate BTS. That is,
17297       * <PRE>
17298       * [dstDisp] BTS=  imm
17299       * </PRE>
17300       *
17301       * @param dstDisp the destination displacement
17302       * @param imm immediate
17303       */
17304      public final void emitBTS_Abs_Imm(Address dstDisp, int imm) {
17305        int miStart = mi;
17306        // no group 1 to 4 prefix byte
17307        generateREXprefix(false, null, null, null);
17308        setMachineCodes(mi++, (byte) 0x0F);
17309        if (fits(imm,8)) {
17310          setMachineCodes(mi++, (byte) 0xBA);
17311          // "register 0x5" is really part of the opcode
17312          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
17313          emitImm8((byte)imm);
17314        } else {
17315          throw new InternalError("Data too large for BTS instruction");
17316        }
17317        if (lister != null) lister.RAI(miStart, "BTS", dstDisp, imm);
17318      }
17319    
17320      /**
17321       * Generate a register-index--immediate BTS. That is,
17322       * <PRE>
17323       * [dstBase + dstIndex<<dstScale + dstDisp] BTS=  imm
17324       * </PRE>
17325       *
17326       * @param dstBase the destination base register
17327       * @param dstIndex the destination index register
17328       * @param dstScale the destination shift amount
17329       * @param dstDisp the destination displacement
17330       * @param imm immediate
17331       */
17332      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
17333      public final void emitBTS_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
17334        int miStart = mi;
17335        // no group 1 to 4 prefix byte
17336        generateREXprefix(false, null, dstIndex, dstBase);
17337        setMachineCodes(mi++, (byte) 0x0F);
17338        if (fits(imm,8)) {
17339          setMachineCodes(mi++, (byte) 0xBA);
17340          // "register 0x5" is really part of the opcode
17341          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
17342          emitImm8((byte)imm);
17343        } else {
17344          throw new InternalError("Data too large for BTS instruction");
17345        }
17346        if (lister != null) lister.RXDI(miStart, "BTS", dstBase, dstIndex, dstScale, dstDisp, imm);
17347      }
17348    
17349      /**
17350       * Generate a register(indirect)--immediate BTS. That is,
17351       * <PRE>
17352       * [dstBase] BTS=  imm
17353       * </PRE>
17354       *
17355       * @param dstBase the destination base register
17356       * @param imm immediate
17357       */
17358      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17359      public final void emitBTS_RegInd_Imm(GPR dstBase, int imm) {
17360        int miStart = mi;
17361        // no group 1 to 4 prefix byte
17362        generateREXprefix(false, null, null, dstBase);
17363        setMachineCodes(mi++, (byte) 0x0F);
17364        if (fits(imm,8)) {
17365          setMachineCodes(mi++, (byte) 0xBA);
17366          // "register 0x5" is really part of the opcode
17367          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
17368          emitImm8((byte)imm);
17369        } else {
17370          throw new InternalError("Data too large for BTS instruction");
17371        }
17372        if (lister != null) lister.RNI(miStart, "BTS", dstBase, imm);
17373      }
17374    
17375      /**
17376       * Generate a CALL to a label or immediate. That is,
17377       * <PRE>
17378       *  pc = {future address from label | imm}
17379       * </PRE>
17380       *
17381       * @param imm offset to immediate CALL to. 0 means use
17382       * label. Immediate is assumed to be within current instructions.
17383       * @param label label to branch to (used when imm == 0)
17384       */
17385      public final void emitCALL_ImmOrLabel(int imm, int label) {
17386        if (imm == 0)
17387          emitCALL_Label(label);
17388        else
17389          emitCALL_Imm(imm);
17390      }
17391    
17392      /**
17393       * Branch to the given target with a CALL instruction
17394       * <PRE>
17395       * IP = (instruction @ label)
17396       * </PRE>
17397       *
17398       * This emit method is expecting only a forward branch (that is
17399       * what the Label operand means); it creates a ForwardReference
17400       * to the given label, and puts it into the assembler's list of
17401       * references to resolve.  This emitter knows the branch is
17402       * unconditional, so it uses
17403       * {@link org.jikesrvm.compilers.common.assembler.ForwardReference.UnconditionalBranch}
17404       * as the forward reference type to create.
17405       *
17406       * All forward branches have a label as the branch target; clients
17407       * can arbirarily associate labels and instructions, but must be
17408       * consistent in giving the chosen label as the target of branches
17409       * to an instruction and calling resolveForwardBranches with the
17410       * given label immediately before emitting the target instruction.
17411       * See the header comments of ForwardReference for more details.
17412       *
17413       * @param label the label associated with the branch target instrucion
17414       */
17415      public final void emitCALL_Label(int label) {
17416          int miStart = mi;
17417          ForwardReference r =
17418            new ForwardReference.UnconditionalBranch(mi, label);
17419          forwardRefs = ForwardReference.enqueue(forwardRefs, r);
17420          setMachineCodes(mi++, (byte) 0xE8);
17421          mi += 4; // leave space for displacement
17422          if (lister != null) lister.I(miStart, "CALL", label);
17423      }
17424    
17425      /**
17426       * Generate a CALL to immediate. That is,
17427       * <PRE>
17428       * pc = imm
17429       * </PRE>
17430       *
17431       * @param imm offset to immediate CALL to (within current instructions)
17432       */
17433      public final void emitCALL_Imm(int imm) {
17434        int miStart = mi;
17435           setMachineCodes(mi++, (byte) 0xE8);
17436           // offset of next instruction (this instruction is 5 bytes,
17437           // but we just accounted for one of them in the mi++ above)
17438           emitImm32(imm - (mi + 4));
17439        if (lister != null) lister.I(miStart, "CALL", imm);
17440      }
17441    
17442      /**
17443       * Generate a CALL to register. That is,
17444       * <PRE>
17445       * pc = dstReg
17446       * </PRE>
17447       *
17448       * @param dstReg register containing destination address
17449       */
17450      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17451      public final void emitCALL_Reg(GPR dstReg) {
17452        int miStart = mi;
17453        generateREXprefix(false, null, null, dstReg);
17454        setMachineCodes(mi++, (byte) 0xFF);
17455        // "register 0x2" is really part of the CALL opcode
17456        emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
17457        if (lister != null) lister.R(miStart, "CALL", dstReg);
17458      }
17459    
17460      /**
17461       * Generate a CALL to register and displacement. That is,
17462       * <PRE>
17463       * pc = [dstBase + dstDisp]
17464       * </PRE>
17465       *
17466       * @param dstBase the destination base address register
17467       * @param dstDisp the destination displacement
17468       */
17469      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17470      public final void emitCALL_RegDisp(GPR dstBase, Offset dstDisp) {
17471        int miStart = mi;
17472        generateREXprefix(false, null, null, dstBase);
17473        setMachineCodes(mi++, (byte) 0xFF);
17474        // "register 0x2" is really part of the CALL opcode
17475        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
17476        if (lister != null) lister.RD(miStart, "CALL", dstBase, dstDisp);
17477      }
17478    
17479      /**
17480       * Generate a CALL to register indirect. That is,
17481       * <PRE>
17482       * pc = [dstBase]
17483       * </PRE>
17484       *
17485       * @param dstBase the destination base address register
17486       */
17487      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17488      public final void emitCALL_RegInd(GPR dstBase) {
17489        int miStart = mi;
17490        generateREXprefix(false, null, null, dstBase);
17491        setMachineCodes(mi++, (byte) 0xFF);
17492        // "register 0x2" is really part of the CALL opcode
17493        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
17494        if (lister != null) lister.RN(miStart, "CALL", dstBase);
17495      }
17496    
17497      /**
17498       * Generate a CALL to register offset. That is,
17499       * <PRE>
17500       * pc = [dstIndex<<dstScale + dstDisp]
17501       * </PRE>
17502       *
17503       * @param dstIndex the destination index register
17504       * @param dstScale the destination shift amount
17505       * @param dstDisp the destination displacement
17506       */
17507      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17508      public final void emitCALL_RegOff(GPR dstIndex, short dstScale, Offset dstDisp) {
17509        int miStart = mi;
17510        generateREXprefix(false, null, dstIndex, null);
17511        setMachineCodes(mi++, (byte) 0xFF);
17512        // "register 0x2" is really part of the CALL opcode
17513        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
17514        if (lister != null) lister.RFD(miStart, "CALL", dstIndex, dstScale, dstDisp);
17515      }
17516    
17517      /**
17518       * Generate a CALL to absolute address. That is,
17519       * <PRE>
17520       * pc = [dstDisp]
17521       * </PRE>
17522       *
17523       * @param dstDisp the destination displacement
17524       */
17525      public final void emitCALL_Abs(Address dstDisp) {
17526        int miStart = mi;
17527        setMachineCodes(mi++, (byte) 0xFF);
17528        // "register 0x2" is really part of the CALL opcode
17529        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
17530        if (lister != null) lister.RA(miStart, "CALL", dstDisp);
17531      }
17532    
17533      /**
17534       * Generate a CALL to register offset. That is,
17535       * <PRE>
17536       * pc = [dstBase + dstIndex<<dstScale + dstDisp]
17537       * </PRE>
17538       *
17539       * @param dstBase the destination base register
17540       * @param dstIndex the destination index register
17541       * @param dstScale the destination shift amount
17542       * @param dstDisp the destination displacement
17543       */
17544      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
17545      public final void emitCALL_RegIdx(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp) {
17546        int miStart = mi;
17547        generateREXprefix(false, null, dstIndex, dstBase);
17548        setMachineCodes(mi++, (byte) 0xFF);
17549        // "register 0x2" is really part of the CALL opcode
17550        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
17551        if (lister != null) lister.RXD(miStart, "CALL", dstBase, dstIndex, dstScale, dstDisp);
17552      }
17553    
17554      /**
17555       * Generate a JMP to a label or immediate. That is,
17556       * <PRE>
17557       *  pc = {future address from label | imm}
17558       * </PRE>
17559       *
17560       * @param imm offset to immediate JMP to. 0 means use
17561       * label. Immediate is assumed to be within current instructions.
17562       * @param label label to branch to (used when imm == 0)
17563       */
17564      public final void emitJMP_ImmOrLabel(int imm, int label) {
17565        if (imm == 0)
17566          emitJMP_Label(label);
17567        else
17568          emitJMP_Imm(imm);
17569      }
17570    
17571      /**
17572       * Branch to the given target with a JMP instruction
17573       * <PRE>
17574       * IP = (instruction @ label)
17575       * </PRE>
17576       *
17577       * This emit method is expecting only a forward branch (that is
17578       * what the Label operand means); it creates a ForwardReference
17579       * to the given label, and puts it into the assembler's list of
17580       * references to resolve.  This emitter knows the branch is
17581       * unconditional, so it uses
17582       * {@link org.jikesrvm.compilers.common.assembler.ForwardReference.UnconditionalBranch}
17583       * as the forward reference type to create.
17584       *
17585       * All forward branches have a label as the branch target; clients
17586       * can arbirarily associate labels and instructions, but must be
17587       * consistent in giving the chosen label as the target of branches
17588       * to an instruction and calling resolveForwardBranches with the
17589       * given label immediately before emitting the target instruction.
17590       * See the header comments of ForwardReference for more details.
17591       *
17592       * @param label the label associated with the branch target instrucion
17593       */
17594      public final void emitJMP_Label(int label) {
17595          int miStart = mi;
17596          ForwardReference r =
17597            new ForwardReference.UnconditionalBranch(mi, label);
17598          forwardRefs = ForwardReference.enqueue(forwardRefs, r);
17599          setMachineCodes(mi++, (byte) 0xE9);
17600          mi += 4; // leave space for displacement
17601          if (lister != null) lister.I(miStart, "JMP", label);
17602      }
17603    
17604      /**
17605       * Generate a JMP to immediate. That is,
17606       * <PRE>
17607       * pc = imm
17608       * </PRE>
17609       *
17610       * @param imm offset to immediate JMP to (within current instructions)
17611       */
17612      public final void emitJMP_Imm(int imm) {
17613        int miStart = mi;
17614        // can we fit the offset from the next instruction into 8
17615        // bits, assuming this instruction is 2 bytes (which it will
17616        // be if the offset fits into 8 bits)?
17617        int relOffset = imm - (mi + 2);
17618        if (fits(relOffset,8)) {
17619          // yes, so use short form.
17620          setMachineCodes(mi++, (byte) 0xEB);
17621          emitImm8((byte) relOffset);
17622        } else {
17623           // no, must use 32 bit offset and ignore relOffset to
17624           // account for the fact that this instruction now has to
17625           // be 5 bytes long.
17626           setMachineCodes(mi++, (byte) 0xE9);
17627           // offset of next instruction (this instruction is 5 bytes,
17628           // but we just accounted for one of them in the mi++ above)
17629           emitImm32(imm - (mi + 4));
17630        }
17631        if (lister != null) lister.I(miStart, "JMP", imm);
17632      }
17633    
17634      /**
17635       * Generate a JMP to register. That is,
17636       * <PRE>
17637       * pc = dstReg
17638       * </PRE>
17639       *
17640       * @param dstReg register containing destination address
17641       */
17642      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17643      public final void emitJMP_Reg(GPR dstReg) {
17644        int miStart = mi;
17645        generateREXprefix(false, null, null, dstReg);
17646        setMachineCodes(mi++, (byte) 0xFF);
17647        // "register 0x4" is really part of the JMP opcode
17648        emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
17649        if (lister != null) lister.R(miStart, "JMP", dstReg);
17650      }
17651    
17652      /**
17653       * Generate a JMP to register and displacement. That is,
17654       * <PRE>
17655       * pc = [dstBase + dstDisp]
17656       * </PRE>
17657       *
17658       * @param dstBase the destination base address register
17659       * @param dstDisp the destination displacement
17660       */
17661      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17662      public final void emitJMP_RegDisp(GPR dstBase, Offset dstDisp) {
17663        int miStart = mi;
17664        generateREXprefix(false, null, null, dstBase);
17665        setMachineCodes(mi++, (byte) 0xFF);
17666        // "register 0x4" is really part of the JMP opcode
17667        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
17668        if (lister != null) lister.RD(miStart, "JMP", dstBase, dstDisp);
17669      }
17670    
17671      /**
17672       * Generate a JMP to register indirect. That is,
17673       * <PRE>
17674       * pc = [dstBase]
17675       * </PRE>
17676       *
17677       * @param dstBase the destination base address register
17678       */
17679      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17680      public final void emitJMP_RegInd(GPR dstBase) {
17681        int miStart = mi;
17682        generateREXprefix(false, null, null, dstBase);
17683        setMachineCodes(mi++, (byte) 0xFF);
17684        // "register 0x4" is really part of the JMP opcode
17685        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
17686        if (lister != null) lister.RN(miStart, "JMP", dstBase);
17687      }
17688    
17689      /**
17690       * Generate a JMP to register offset. That is,
17691       * <PRE>
17692       * pc = [dstIndex<<dstScale + dstDisp]
17693       * </PRE>
17694       *
17695       * @param dstIndex the destination index register
17696       * @param dstScale the destination shift amount
17697       * @param dstDisp the destination displacement
17698       */
17699      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17700      public final void emitJMP_RegOff(GPR dstIndex, short dstScale, Offset dstDisp) {
17701        int miStart = mi;
17702        generateREXprefix(false, null, dstIndex, null);
17703        setMachineCodes(mi++, (byte) 0xFF);
17704        // "register 0x4" is really part of the JMP opcode
17705        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
17706        if (lister != null) lister.RFD(miStart, "JMP", dstIndex, dstScale, dstDisp);
17707      }
17708    
17709      /**
17710       * Generate a JMP to absolute address. That is,
17711       * <PRE>
17712       * pc = [dstDisp]
17713       * </PRE>
17714       *
17715       * @param dstDisp the destination displacement
17716       */
17717      public final void emitJMP_Abs(Address dstDisp) {
17718        int miStart = mi;
17719        setMachineCodes(mi++, (byte) 0xFF);
17720        // "register 0x4" is really part of the JMP opcode
17721        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
17722        if (lister != null) lister.RA(miStart, "JMP", dstDisp);
17723      }
17724    
17725      /**
17726       * Generate a JMP to register offset. That is,
17727       * <PRE>
17728       * pc = [dstBase + dstIndex<<dstScale + dstDisp]
17729       * </PRE>
17730       *
17731       * @param dstBase the destination base register
17732       * @param dstIndex the destination index register
17733       * @param dstScale the destination shift amount
17734       * @param dstDisp the destination displacement
17735       */
17736      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
17737      public final void emitJMP_RegIdx(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp) {
17738        int miStart = mi;
17739        generateREXprefix(false, null, dstIndex, dstBase);
17740        setMachineCodes(mi++, (byte) 0xFF);
17741        // "register 0x4" is really part of the JMP opcode
17742        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
17743        if (lister != null) lister.RXD(miStart, "JMP", dstBase, dstIndex, dstScale, dstDisp);
17744      }
17745    
17746      /**
17747       * Generate a DEC on a register. That is,
17748       * <PRE>
17749       * --  reg
17750       * </PRE>
17751       *
17752       * @param reg register to operate upon
17753       */
17754      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17755      public void emitDEC_Reg(GPR reg) {
17756        int miStart = mi;
17757        // no group 1 to 4 prefix byte
17758        generateREXprefix(false, null, null, reg);
17759        if (!VM.buildFor32Addr()) {
17760          setMachineCodes(mi++, (byte) (0xFF));
17761          emitRegRegOperands(reg, GPR.getForOpcode(0x1));
17762        } else {
17763          setMachineCodes(mi++, (byte) (0x48 | (reg.value() & 7)));
17764        }
17765        if (lister != null) lister.R(miStart, "DEC", reg);
17766      }
17767      /**
17768       * Generate a DEC to register-displacement offset. That is,
17769       * <PRE>
17770       * --  [base + disp]
17771       * </PRE>
17772       *
17773       * @param base the destination base register
17774       * @param disp the destination displacement
17775       */
17776      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17777      public final void emitDEC_RegDisp(GPR base, Offset disp) {
17778        int miStart = mi;
17779        // no group 1 to 4 prefix byte
17780        generateREXprefix(false, null, null, base);
17781        setMachineCodes(mi++, (byte) 0xFF);
17782        // "register 0x1" is really part of the opcode
17783        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x1));
17784        if (lister != null) lister.RD(miStart, "DEC", base, disp);
17785      }
17786    
17787      /**
17788       * Generate a DEC to register indirect. That is,
17789       * <PRE>
17790       * --  [reg]
17791       * </PRE>
17792       *
17793       * @param base the destination base register
17794       */
17795      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17796      public final void emitDEC_RegInd(GPR base) {
17797        int miStart = mi;
17798        // no group 1 to 4 prefix byte
17799        generateREXprefix(false, null, null, base);
17800        setMachineCodes(mi++, (byte) 0xFF);
17801        // "register 0x1" is really part of the opcode
17802        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x1));
17803        if (lister != null) lister.RN(miStart, "DEC", base);
17804      }
17805    
17806      /**
17807       * Generate a DEC to register offset. That is,
17808       * <PRE>
17809       * --  [index<<scale + disp]
17810       * </PRE>
17811       *
17812       * @param index the destination index register
17813       * @param scale the destination shift amount
17814       * @param disp the destination displacement
17815       */
17816      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17817      public final void emitDEC_RegOff(GPR index, short scale, Offset disp) {
17818        int miStart = mi;
17819        // no group 1 to 4 prefix byte
17820        generateREXprefix(false, null, index, null);
17821        setMachineCodes(mi++, (byte) 0xFF);
17822        // "register 0x1" is really part of the opcode
17823        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x1));
17824        if (lister != null) lister.RFD(miStart, "DEC", index, scale, disp);
17825      }
17826    
17827      /**
17828       * Generate a DEC to absolute address. That is,
17829       * <PRE>
17830       * --  [disp]
17831       * </PRE>
17832       *
17833       * @param disp the destination displacement
17834       */
17835      public final void emitDEC_Abs(Address disp) {
17836        int miStart = mi;
17837        // no group 1 to 4 prefix byte
17838        generateREXprefix(false, null, null, null);
17839        setMachineCodes(mi++, (byte) 0xFF);
17840        // "register 0x1" is really part of the opcode
17841        emitAbsRegOperands(disp, GPR.getForOpcode(0x1));
17842        if (lister != null) lister.RA(miStart, "DEC", disp);
17843      }
17844    
17845      /**
17846       * Generate a DEC to register offset. That is,
17847       * <PRE>
17848       * --  [base + index<<scale + disp]
17849       * </PRE>
17850       *
17851       * @param base the destination base register
17852       * @param index the destination index register
17853       * @param scale the destination shift amount
17854       * @param disp the destination displacement
17855       */
17856      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
17857      public final void emitDEC_RegIdx(GPR base, GPR index, short scale, Offset disp) {
17858        int miStart = mi;
17859        // no group 1 to 4 prefix byte
17860        generateREXprefix(false, null, index, base);
17861        setMachineCodes(mi++, (byte) 0xFF);
17862        // "register 0x1" is really part of the opcode
17863        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x1));
17864        if (lister != null) lister.RXD(miStart, "DEC", base, index, scale, disp);
17865      }
17866    
17867      /**
17868       * Generate a DEC on a register. That is,
17869       * <PRE>
17870       * --  (byte)  reg
17871       * </PRE>
17872       *
17873       * @param reg register to operate upon
17874       */
17875      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17876      public final void emitDEC_Reg_Byte(GPR reg) {
17877        int miStart = mi;
17878        // no group 1 to 4 prefix byte
17879        generateREXprefix(false, null, null, reg);
17880        setMachineCodes(mi++, (byte) 0xFE);
17881        emitRegRegOperands(reg, GPR.getForOpcode(0x1));
17882        if (lister != null) lister.R(miStart, "DEC", reg);
17883      }
17884      /**
17885       * Generate a DEC to register-displacement offset. That is,
17886       * <PRE>
17887       * --  (byte)  [base + disp]
17888       * </PRE>
17889       *
17890       * @param base the destination base register
17891       * @param disp the destination displacement
17892       */
17893      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17894      public final void emitDEC_RegDisp_Byte(GPR base, Offset disp) {
17895        int miStart = mi;
17896        // no group 1 to 4 prefix byte
17897        generateREXprefix(false, null, null, base);
17898        setMachineCodes(mi++, (byte) 0xFE);
17899        // "register 0x1" is really part of the opcode
17900        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x1));
17901        if (lister != null) lister.RD(miStart, "DEC", base, disp);
17902      }
17903    
17904      /**
17905       * Generate a DEC to register indirect. That is,
17906       * <PRE>
17907       * --  (byte)  [reg]
17908       * </PRE>
17909       *
17910       * @param base the destination base register
17911       */
17912      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17913      public final void emitDEC_RegInd_Byte(GPR base) {
17914        int miStart = mi;
17915        // no group 1 to 4 prefix byte
17916        generateREXprefix(false, null, null, base);
17917        setMachineCodes(mi++, (byte) 0xFE);
17918        // "register 0x1" is really part of the opcode
17919        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x1));
17920        if (lister != null) lister.RN(miStart, "DEC", base);
17921      }
17922    
17923      /**
17924       * Generate a DEC to register offset. That is,
17925       * <PRE>
17926       * --  (byte)  [index<<scale + disp]
17927       * </PRE>
17928       *
17929       * @param index the destination index register
17930       * @param scale the destination shift amount
17931       * @param disp the destination displacement
17932       */
17933      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17934      public final void emitDEC_RegOff_Byte(GPR index, short scale, Offset disp) {
17935        int miStart = mi;
17936        // no group 1 to 4 prefix byte
17937        generateREXprefix(false, null, index, null);
17938        setMachineCodes(mi++, (byte) 0xFE);
17939        // "register 0x1" is really part of the opcode
17940        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x1));
17941        if (lister != null) lister.RFD(miStart, "DEC", index, scale, disp);
17942      }
17943    
17944      /**
17945       * Generate a DEC to absolute address. That is,
17946       * <PRE>
17947       * --  (byte)  [disp]
17948       * </PRE>
17949       *
17950       * @param disp the destination displacement
17951       */
17952      public final void emitDEC_Abs_Byte(Address disp) {
17953        int miStart = mi;
17954        // no group 1 to 4 prefix byte
17955        generateREXprefix(false, null, null, null);
17956        setMachineCodes(mi++, (byte) 0xFE);
17957        // "register 0x1" is really part of the opcode
17958        emitAbsRegOperands(disp, GPR.getForOpcode(0x1));
17959        if (lister != null) lister.RA(miStart, "DEC", disp);
17960      }
17961    
17962      /**
17963       * Generate a DEC to register offset. That is,
17964       * <PRE>
17965       * --  (byte)  [base + index<<scale + disp]
17966       * </PRE>
17967       *
17968       * @param base the destination base register
17969       * @param index the destination index register
17970       * @param scale the destination shift amount
17971       * @param disp the destination displacement
17972       */
17973      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
17974      public final void emitDEC_RegIdx_Byte(GPR base, GPR index, short scale, Offset disp) {
17975        int miStart = mi;
17976        // no group 1 to 4 prefix byte
17977        generateREXprefix(false, null, index, base);
17978        setMachineCodes(mi++, (byte) 0xFE);
17979        // "register 0x1" is really part of the opcode
17980        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x1));
17981        if (lister != null) lister.RXD(miStart, "DEC", base, index, scale, disp);
17982      }
17983    
17984      /**
17985       * Generate a DEC on a register. That is,
17986       * <PRE>
17987       * --  (word)  reg
17988       * </PRE>
17989       *
17990       * @param reg register to operate upon
17991       */
17992      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
17993      public void emitDEC_Reg_Word(GPR reg) {
17994        int miStart = mi;
17995        setMachineCodes(mi++, (byte) 0x66);
17996        generateREXprefix(false, null, null, reg);
17997        if (!VM.buildFor32Addr()) {
17998          setMachineCodes(mi++, (byte) (0xFF));
17999          emitRegRegOperands(reg, GPR.getForOpcode(0x1));
18000        } else {
18001          setMachineCodes(mi++, (byte) (0x48 | (reg.value() & 7)));
18002        }
18003        if (lister != null) lister.R(miStart, "DEC", reg);
18004      }
18005      /**
18006       * Generate a DEC to register-displacement offset. That is,
18007       * <PRE>
18008       * --  (word)  [base + disp]
18009       * </PRE>
18010       *
18011       * @param base the destination base register
18012       * @param disp the destination displacement
18013       */
18014      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18015      public final void emitDEC_RegDisp_Word(GPR base, Offset disp) {
18016        int miStart = mi;
18017        setMachineCodes(mi++, (byte) 0x66);
18018        generateREXprefix(false, null, null, base);
18019        setMachineCodes(mi++, (byte) 0xFF);
18020        // "register 0x1" is really part of the opcode
18021        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x1));
18022        if (lister != null) lister.RD(miStart, "DEC", base, disp);
18023      }
18024    
18025      /**
18026       * Generate a DEC to register indirect. That is,
18027       * <PRE>
18028       * --  (word)  [reg]
18029       * </PRE>
18030       *
18031       * @param base the destination base register
18032       */
18033      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18034      public final void emitDEC_RegInd_Word(GPR base) {
18035        int miStart = mi;
18036        setMachineCodes(mi++, (byte) 0x66);
18037        generateREXprefix(false, null, null, base);
18038        setMachineCodes(mi++, (byte) 0xFF);
18039        // "register 0x1" is really part of the opcode
18040        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x1));
18041        if (lister != null) lister.RN(miStart, "DEC", base);
18042      }
18043    
18044      /**
18045       * Generate a DEC to register offset. That is,
18046       * <PRE>
18047       * --  (word)  [index<<scale + disp]
18048       * </PRE>
18049       *
18050       * @param index the destination index register
18051       * @param scale the destination shift amount
18052       * @param disp the destination displacement
18053       */
18054      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18055      public final void emitDEC_RegOff_Word(GPR index, short scale, Offset disp) {
18056        int miStart = mi;
18057        setMachineCodes(mi++, (byte) 0x66);
18058        generateREXprefix(false, null, index, null);
18059        setMachineCodes(mi++, (byte) 0xFF);
18060        // "register 0x1" is really part of the opcode
18061        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x1));
18062        if (lister != null) lister.RFD(miStart, "DEC", index, scale, disp);
18063      }
18064    
18065      /**
18066       * Generate a DEC to absolute address. That is,
18067       * <PRE>
18068       * --  (word)  [disp]
18069       * </PRE>
18070       *
18071       * @param disp the destination displacement
18072       */
18073      public final void emitDEC_Abs_Word(Address disp) {
18074        int miStart = mi;
18075        setMachineCodes(mi++, (byte) 0x66);
18076        generateREXprefix(false, null, null, null);
18077        setMachineCodes(mi++, (byte) 0xFF);
18078        // "register 0x1" is really part of the opcode
18079        emitAbsRegOperands(disp, GPR.getForOpcode(0x1));
18080        if (lister != null) lister.RA(miStart, "DEC", disp);
18081      }
18082    
18083      /**
18084       * Generate a DEC to register offset. That is,
18085       * <PRE>
18086       * --  (word)  [base + index<<scale + disp]
18087       * </PRE>
18088       *
18089       * @param base the destination base register
18090       * @param index the destination index register
18091       * @param scale the destination shift amount
18092       * @param disp the destination displacement
18093       */
18094      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
18095      public final void emitDEC_RegIdx_Word(GPR base, GPR index, short scale, Offset disp) {
18096        int miStart = mi;
18097        setMachineCodes(mi++, (byte) 0x66);
18098        generateREXprefix(false, null, index, base);
18099        setMachineCodes(mi++, (byte) 0xFF);
18100        // "register 0x1" is really part of the opcode
18101        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x1));
18102        if (lister != null) lister.RXD(miStart, "DEC", base, index, scale, disp);
18103      }
18104    
18105      /**
18106       * Generate a DEC on a register. That is,
18107       * <PRE>
18108       * --  (quad)  reg
18109       * </PRE>
18110       *
18111       * @param reg register to operate upon
18112       */
18113      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18114      public void emitDEC_Reg_Quad(GPR reg) {
18115        int miStart = mi;
18116        // no group 1 to 4 prefix byte
18117        generateREXprefix(true, null, null, reg);
18118        if (!VM.buildFor32Addr()) {
18119          setMachineCodes(mi++, (byte) (0xFF));
18120          emitRegRegOperands(reg, GPR.getForOpcode(0x1));
18121        } else {
18122          setMachineCodes(mi++, (byte) (0x48 | (reg.value() & 7)));
18123        }
18124        if (lister != null) lister.R(miStart, "DEC", reg);
18125      }
18126      /**
18127       * Generate a DEC to register-displacement offset. That is,
18128       * <PRE>
18129       * --  (quad)  [base + disp]
18130       * </PRE>
18131       *
18132       * @param base the destination base register
18133       * @param disp the destination displacement
18134       */
18135      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18136      public final void emitDEC_RegDisp_Quad(GPR base, Offset disp) {
18137        int miStart = mi;
18138        // no group 1 to 4 prefix byte
18139        generateREXprefix(true, null, null, base);
18140        setMachineCodes(mi++, (byte) 0xFF);
18141        // "register 0x1" is really part of the opcode
18142        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x1));
18143        if (lister != null) lister.RD(miStart, "DEC", base, disp);
18144      }
18145    
18146      /**
18147       * Generate a DEC to register indirect. That is,
18148       * <PRE>
18149       * --  (quad)  [reg]
18150       * </PRE>
18151       *
18152       * @param base the destination base register
18153       */
18154      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18155      public final void emitDEC_RegInd_Quad(GPR base) {
18156        int miStart = mi;
18157        // no group 1 to 4 prefix byte
18158        generateREXprefix(true, null, null, base);
18159        setMachineCodes(mi++, (byte) 0xFF);
18160        // "register 0x1" is really part of the opcode
18161        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x1));
18162        if (lister != null) lister.RN(miStart, "DEC", base);
18163      }
18164    
18165      /**
18166       * Generate a DEC to register offset. That is,
18167       * <PRE>
18168       * --  (quad)  [index<<scale + disp]
18169       * </PRE>
18170       *
18171       * @param index the destination index register
18172       * @param scale the destination shift amount
18173       * @param disp the destination displacement
18174       */
18175      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18176      public final void emitDEC_RegOff_Quad(GPR index, short scale, Offset disp) {
18177        int miStart = mi;
18178        // no group 1 to 4 prefix byte
18179        generateREXprefix(true, null, index, null);
18180        setMachineCodes(mi++, (byte) 0xFF);
18181        // "register 0x1" is really part of the opcode
18182        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x1));
18183        if (lister != null) lister.RFD(miStart, "DEC", index, scale, disp);
18184      }
18185    
18186      /**
18187       * Generate a DEC to absolute address. That is,
18188       * <PRE>
18189       * --  (quad)  [disp]
18190       * </PRE>
18191       *
18192       * @param disp the destination displacement
18193       */
18194      public final void emitDEC_Abs_Quad(Address disp) {
18195        int miStart = mi;
18196        // no group 1 to 4 prefix byte
18197        generateREXprefix(true, null, null, null);
18198        setMachineCodes(mi++, (byte) 0xFF);
18199        // "register 0x1" is really part of the opcode
18200        emitAbsRegOperands(disp, GPR.getForOpcode(0x1));
18201        if (lister != null) lister.RA(miStart, "DEC", disp);
18202      }
18203    
18204      /**
18205       * Generate a DEC to register offset. That is,
18206       * <PRE>
18207       * --  (quad)  [base + index<<scale + disp]
18208       * </PRE>
18209       *
18210       * @param base the destination base register
18211       * @param index the destination index register
18212       * @param scale the destination shift amount
18213       * @param disp the destination displacement
18214       */
18215      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
18216      public final void emitDEC_RegIdx_Quad(GPR base, GPR index, short scale, Offset disp) {
18217        int miStart = mi;
18218        // no group 1 to 4 prefix byte
18219        generateREXprefix(true, null, index, base);
18220        setMachineCodes(mi++, (byte) 0xFF);
18221        // "register 0x1" is really part of the opcode
18222        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x1));
18223        if (lister != null) lister.RXD(miStart, "DEC", base, index, scale, disp);
18224      }
18225    
18226      /**
18227       * Generate a INC on a register. That is,
18228       * <PRE>
18229       * ++  reg
18230       * </PRE>
18231       *
18232       * @param reg register to operate upon
18233       */
18234      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18235      public void emitINC_Reg(GPR reg) {
18236        int miStart = mi;
18237        // no group 1 to 4 prefix byte
18238        generateREXprefix(false, null, null, reg);
18239        if (!VM.buildFor32Addr()) {
18240          setMachineCodes(mi++, (byte) (0xFF));
18241          emitRegRegOperands(reg, GPR.getForOpcode(0x0));
18242        } else {
18243          setMachineCodes(mi++, (byte) (0x40 | (reg.value() & 7)));
18244        }
18245        if (lister != null) lister.R(miStart, "INC", reg);
18246      }
18247      /**
18248       * Generate a INC to register-displacement offset. That is,
18249       * <PRE>
18250       * ++  [base + disp]
18251       * </PRE>
18252       *
18253       * @param base the destination base register
18254       * @param disp the destination displacement
18255       */
18256      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18257      public final void emitINC_RegDisp(GPR base, Offset disp) {
18258        int miStart = mi;
18259        // no group 1 to 4 prefix byte
18260        generateREXprefix(false, null, null, base);
18261        setMachineCodes(mi++, (byte) 0xFF);
18262        // "register 0x0" is really part of the opcode
18263        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x0));
18264        if (lister != null) lister.RD(miStart, "INC", base, disp);
18265      }
18266    
18267      /**
18268       * Generate a INC to register indirect. That is,
18269       * <PRE>
18270       * ++  [reg]
18271       * </PRE>
18272       *
18273       * @param base the destination base register
18274       */
18275      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18276      public final void emitINC_RegInd(GPR base) {
18277        int miStart = mi;
18278        // no group 1 to 4 prefix byte
18279        generateREXprefix(false, null, null, base);
18280        setMachineCodes(mi++, (byte) 0xFF);
18281        // "register 0x0" is really part of the opcode
18282        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x0));
18283        if (lister != null) lister.RN(miStart, "INC", base);
18284      }
18285    
18286      /**
18287       * Generate a INC to register offset. That is,
18288       * <PRE>
18289       * ++  [index<<scale + disp]
18290       * </PRE>
18291       *
18292       * @param index the destination index register
18293       * @param scale the destination shift amount
18294       * @param disp the destination displacement
18295       */
18296      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18297      public final void emitINC_RegOff(GPR index, short scale, Offset disp) {
18298        int miStart = mi;
18299        // no group 1 to 4 prefix byte
18300        generateREXprefix(false, null, index, null);
18301        setMachineCodes(mi++, (byte) 0xFF);
18302        // "register 0x0" is really part of the opcode
18303        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x0));
18304        if (lister != null) lister.RFD(miStart, "INC", index, scale, disp);
18305      }
18306    
18307      /**
18308       * Generate a INC to absolute address. That is,
18309       * <PRE>
18310       * ++  [disp]
18311       * </PRE>
18312       *
18313       * @param disp the destination displacement
18314       */
18315      public final void emitINC_Abs(Address disp) {
18316        int miStart = mi;
18317        // no group 1 to 4 prefix byte
18318        generateREXprefix(false, null, null, null);
18319        setMachineCodes(mi++, (byte) 0xFF);
18320        // "register 0x0" is really part of the opcode
18321        emitAbsRegOperands(disp, GPR.getForOpcode(0x0));
18322        if (lister != null) lister.RA(miStart, "INC", disp);
18323      }
18324    
18325      /**
18326       * Generate a INC to register offset. That is,
18327       * <PRE>
18328       * ++  [base + index<<scale + disp]
18329       * </PRE>
18330       *
18331       * @param base the destination base register
18332       * @param index the destination index register
18333       * @param scale the destination shift amount
18334       * @param disp the destination displacement
18335       */
18336      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
18337      public final void emitINC_RegIdx(GPR base, GPR index, short scale, Offset disp) {
18338        int miStart = mi;
18339        // no group 1 to 4 prefix byte
18340        generateREXprefix(false, null, index, base);
18341        setMachineCodes(mi++, (byte) 0xFF);
18342        // "register 0x0" is really part of the opcode
18343        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x0));
18344        if (lister != null) lister.RXD(miStart, "INC", base, index, scale, disp);
18345      }
18346    
18347      /**
18348       * Generate a INC on a register. That is,
18349       * <PRE>
18350       * ++  (byte)  reg
18351       * </PRE>
18352       *
18353       * @param reg register to operate upon
18354       */
18355      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18356      public final void emitINC_Reg_Byte(GPR reg) {
18357        int miStart = mi;
18358        // no group 1 to 4 prefix byte
18359        generateREXprefix(false, null, null, reg);
18360        setMachineCodes(mi++, (byte) 0xFE);
18361        emitRegRegOperands(reg, GPR.getForOpcode(0x0));
18362        if (lister != null) lister.R(miStart, "INC", reg);
18363      }
18364      /**
18365       * Generate a INC to register-displacement offset. That is,
18366       * <PRE>
18367       * ++  (byte)  [base + disp]
18368       * </PRE>
18369       *
18370       * @param base the destination base register
18371       * @param disp the destination displacement
18372       */
18373      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18374      public final void emitINC_RegDisp_Byte(GPR base, Offset disp) {
18375        int miStart = mi;
18376        // no group 1 to 4 prefix byte
18377        generateREXprefix(false, null, null, base);
18378        setMachineCodes(mi++, (byte) 0xFE);
18379        // "register 0x0" is really part of the opcode
18380        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x0));
18381        if (lister != null) lister.RD(miStart, "INC", base, disp);
18382      }
18383    
18384      /**
18385       * Generate a INC to register indirect. That is,
18386       * <PRE>
18387       * ++  (byte)  [reg]
18388       * </PRE>
18389       *
18390       * @param base the destination base register
18391       */
18392      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18393      public final void emitINC_RegInd_Byte(GPR base) {
18394        int miStart = mi;
18395        // no group 1 to 4 prefix byte
18396        generateREXprefix(false, null, null, base);
18397        setMachineCodes(mi++, (byte) 0xFE);
18398        // "register 0x0" is really part of the opcode
18399        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x0));
18400        if (lister != null) lister.RN(miStart, "INC", base);
18401      }
18402    
18403      /**
18404       * Generate a INC to register offset. That is,
18405       * <PRE>
18406       * ++  (byte)  [index<<scale + disp]
18407       * </PRE>
18408       *
18409       * @param index the destination index register
18410       * @param scale the destination shift amount
18411       * @param disp the destination displacement
18412       */
18413      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18414      public final void emitINC_RegOff_Byte(GPR index, short scale, Offset disp) {
18415        int miStart = mi;
18416        // no group 1 to 4 prefix byte
18417        generateREXprefix(false, null, index, null);
18418        setMachineCodes(mi++, (byte) 0xFE);
18419        // "register 0x0" is really part of the opcode
18420        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x0));
18421        if (lister != null) lister.RFD(miStart, "INC", index, scale, disp);
18422      }
18423    
18424      /**
18425       * Generate a INC to absolute address. That is,
18426       * <PRE>
18427       * ++  (byte)  [disp]
18428       * </PRE>
18429       *
18430       * @param disp the destination displacement
18431       */
18432      public final void emitINC_Abs_Byte(Address disp) {
18433        int miStart = mi;
18434        // no group 1 to 4 prefix byte
18435        generateREXprefix(false, null, null, null);
18436        setMachineCodes(mi++, (byte) 0xFE);
18437        // "register 0x0" is really part of the opcode
18438        emitAbsRegOperands(disp, GPR.getForOpcode(0x0));
18439        if (lister != null) lister.RA(miStart, "INC", disp);
18440      }
18441    
18442      /**
18443       * Generate a INC to register offset. That is,
18444       * <PRE>
18445       * ++  (byte)  [base + index<<scale + disp]
18446       * </PRE>
18447       *
18448       * @param base the destination base register
18449       * @param index the destination index register
18450       * @param scale the destination shift amount
18451       * @param disp the destination displacement
18452       */
18453      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
18454      public final void emitINC_RegIdx_Byte(GPR base, GPR index, short scale, Offset disp) {
18455        int miStart = mi;
18456        // no group 1 to 4 prefix byte
18457        generateREXprefix(false, null, index, base);
18458        setMachineCodes(mi++, (byte) 0xFE);
18459        // "register 0x0" is really part of the opcode
18460        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x0));
18461        if (lister != null) lister.RXD(miStart, "INC", base, index, scale, disp);
18462      }
18463    
18464      /**
18465       * Generate a INC on a register. That is,
18466       * <PRE>
18467       * ++  (word)  reg
18468       * </PRE>
18469       *
18470       * @param reg register to operate upon
18471       */
18472      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18473      public void emitINC_Reg_Word(GPR reg) {
18474        int miStart = mi;
18475        setMachineCodes(mi++, (byte) 0x66);
18476        generateREXprefix(false, null, null, reg);
18477        if (!VM.buildFor32Addr()) {
18478          setMachineCodes(mi++, (byte) (0xFF));
18479          emitRegRegOperands(reg, GPR.getForOpcode(0x0));
18480        } else {
18481          setMachineCodes(mi++, (byte) (0x40 | (reg.value() & 7)));
18482        }
18483        if (lister != null) lister.R(miStart, "INC", reg);
18484      }
18485      /**
18486       * Generate a INC to register-displacement offset. That is,
18487       * <PRE>
18488       * ++  (word)  [base + disp]
18489       * </PRE>
18490       *
18491       * @param base the destination base register
18492       * @param disp the destination displacement
18493       */
18494      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18495      public final void emitINC_RegDisp_Word(GPR base, Offset disp) {
18496        int miStart = mi;
18497        setMachineCodes(mi++, (byte) 0x66);
18498        generateREXprefix(false, null, null, base);
18499        setMachineCodes(mi++, (byte) 0xFF);
18500        // "register 0x0" is really part of the opcode
18501        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x0));
18502        if (lister != null) lister.RD(miStart, "INC", base, disp);
18503      }
18504    
18505      /**
18506       * Generate a INC to register indirect. That is,
18507       * <PRE>
18508       * ++  (word)  [reg]
18509       * </PRE>
18510       *
18511       * @param base the destination base register
18512       */
18513      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18514      public final void emitINC_RegInd_Word(GPR base) {
18515        int miStart = mi;
18516        setMachineCodes(mi++, (byte) 0x66);
18517        generateREXprefix(false, null, null, base);
18518        setMachineCodes(mi++, (byte) 0xFF);
18519        // "register 0x0" is really part of the opcode
18520        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x0));
18521        if (lister != null) lister.RN(miStart, "INC", base);
18522      }
18523    
18524      /**
18525       * Generate a INC to register offset. That is,
18526       * <PRE>
18527       * ++  (word)  [index<<scale + disp]
18528       * </PRE>
18529       *
18530       * @param index the destination index register
18531       * @param scale the destination shift amount
18532       * @param disp the destination displacement
18533       */
18534      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18535      public final void emitINC_RegOff_Word(GPR index, short scale, Offset disp) {
18536        int miStart = mi;
18537        setMachineCodes(mi++, (byte) 0x66);
18538        generateREXprefix(false, null, index, null);
18539        setMachineCodes(mi++, (byte) 0xFF);
18540        // "register 0x0" is really part of the opcode
18541        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x0));
18542        if (lister != null) lister.RFD(miStart, "INC", index, scale, disp);
18543      }
18544    
18545      /**
18546       * Generate a INC to absolute address. That is,
18547       * <PRE>
18548       * ++  (word)  [disp]
18549       * </PRE>
18550       *
18551       * @param disp the destination displacement
18552       */
18553      public final void emitINC_Abs_Word(Address disp) {
18554        int miStart = mi;
18555        setMachineCodes(mi++, (byte) 0x66);
18556        generateREXprefix(false, null, null, null);
18557        setMachineCodes(mi++, (byte) 0xFF);
18558        // "register 0x0" is really part of the opcode
18559        emitAbsRegOperands(disp, GPR.getForOpcode(0x0));
18560        if (lister != null) lister.RA(miStart, "INC", disp);
18561      }
18562    
18563      /**
18564       * Generate a INC to register offset. That is,
18565       * <PRE>
18566       * ++  (word)  [base + index<<scale + disp]
18567       * </PRE>
18568       *
18569       * @param base the destination base register
18570       * @param index the destination index register
18571       * @param scale the destination shift amount
18572       * @param disp the destination displacement
18573       */
18574      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
18575      public final void emitINC_RegIdx_Word(GPR base, GPR index, short scale, Offset disp) {
18576        int miStart = mi;
18577        setMachineCodes(mi++, (byte) 0x66);
18578        generateREXprefix(false, null, index, base);
18579        setMachineCodes(mi++, (byte) 0xFF);
18580        // "register 0x0" is really part of the opcode
18581        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x0));
18582        if (lister != null) lister.RXD(miStart, "INC", base, index, scale, disp);
18583      }
18584    
18585      /**
18586       * Generate a INC on a register. That is,
18587       * <PRE>
18588       * ++  (quad)  reg
18589       * </PRE>
18590       *
18591       * @param reg register to operate upon
18592       */
18593      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18594      public void emitINC_Reg_Quad(GPR reg) {
18595        int miStart = mi;
18596        // no group 1 to 4 prefix byte
18597        generateREXprefix(true, null, null, reg);
18598        if (!VM.buildFor32Addr()) {
18599          setMachineCodes(mi++, (byte) (0xFF));
18600          emitRegRegOperands(reg, GPR.getForOpcode(0x0));
18601        } else {
18602          setMachineCodes(mi++, (byte) (0x40 | (reg.value() & 7)));
18603        }
18604        if (lister != null) lister.R(miStart, "INC", reg);
18605      }
18606      /**
18607       * Generate a INC to register-displacement offset. That is,
18608       * <PRE>
18609       * ++  (quad)  [base + disp]
18610       * </PRE>
18611       *
18612       * @param base the destination base register
18613       * @param disp the destination displacement
18614       */
18615      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18616      public final void emitINC_RegDisp_Quad(GPR base, Offset disp) {
18617        int miStart = mi;
18618        // no group 1 to 4 prefix byte
18619        generateREXprefix(true, null, null, base);
18620        setMachineCodes(mi++, (byte) 0xFF);
18621        // "register 0x0" is really part of the opcode
18622        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x0));
18623        if (lister != null) lister.RD(miStart, "INC", base, disp);
18624      }
18625    
18626      /**
18627       * Generate a INC to register indirect. That is,
18628       * <PRE>
18629       * ++  (quad)  [reg]
18630       * </PRE>
18631       *
18632       * @param base the destination base register
18633       */
18634      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18635      public final void emitINC_RegInd_Quad(GPR base) {
18636        int miStart = mi;
18637        // no group 1 to 4 prefix byte
18638        generateREXprefix(true, null, null, base);
18639        setMachineCodes(mi++, (byte) 0xFF);
18640        // "register 0x0" is really part of the opcode
18641        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x0));
18642        if (lister != null) lister.RN(miStart, "INC", base);
18643      }
18644    
18645      /**
18646       * Generate a INC to register offset. That is,
18647       * <PRE>
18648       * ++  (quad)  [index<<scale + disp]
18649       * </PRE>
18650       *
18651       * @param index the destination index register
18652       * @param scale the destination shift amount
18653       * @param disp the destination displacement
18654       */
18655      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18656      public final void emitINC_RegOff_Quad(GPR index, short scale, Offset disp) {
18657        int miStart = mi;
18658        // no group 1 to 4 prefix byte
18659        generateREXprefix(true, null, index, null);
18660        setMachineCodes(mi++, (byte) 0xFF);
18661        // "register 0x0" is really part of the opcode
18662        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x0));
18663        if (lister != null) lister.RFD(miStart, "INC", index, scale, disp);
18664      }
18665    
18666      /**
18667       * Generate a INC to absolute address. That is,
18668       * <PRE>
18669       * ++  (quad)  [disp]
18670       * </PRE>
18671       *
18672       * @param disp the destination displacement
18673       */
18674      public final void emitINC_Abs_Quad(Address disp) {
18675        int miStart = mi;
18676        // no group 1 to 4 prefix byte
18677        generateREXprefix(true, null, null, null);
18678        setMachineCodes(mi++, (byte) 0xFF);
18679        // "register 0x0" is really part of the opcode
18680        emitAbsRegOperands(disp, GPR.getForOpcode(0x0));
18681        if (lister != null) lister.RA(miStart, "INC", disp);
18682      }
18683    
18684      /**
18685       * Generate a INC to register offset. That is,
18686       * <PRE>
18687       * ++  (quad)  [base + index<<scale + disp]
18688       * </PRE>
18689       *
18690       * @param base the destination base register
18691       * @param index the destination index register
18692       * @param scale the destination shift amount
18693       * @param disp the destination displacement
18694       */
18695      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
18696      public final void emitINC_RegIdx_Quad(GPR base, GPR index, short scale, Offset disp) {
18697        int miStart = mi;
18698        // no group 1 to 4 prefix byte
18699        generateREXprefix(true, null, index, base);
18700        setMachineCodes(mi++, (byte) 0xFF);
18701        // "register 0x0" is really part of the opcode
18702        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x0));
18703        if (lister != null) lister.RXD(miStart, "INC", base, index, scale, disp);
18704      }
18705    
18706      /**
18707       * Generate a NEG on a register. That is,
18708       * <PRE>
18709       * -  reg
18710       * </PRE>
18711       *
18712       * @param reg register to operate upon
18713       */
18714      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18715      public final void emitNEG_Reg(GPR reg) {
18716        int miStart = mi;
18717        // no group 1 to 4 prefix byte
18718        generateREXprefix(false, null, null, reg);
18719        setMachineCodes(mi++, (byte) 0xF7);
18720        emitRegRegOperands(reg, GPR.getForOpcode(0x3));
18721        if (lister != null) lister.R(miStart, "NEG", reg);
18722      }
18723      /**
18724       * Generate a NEG to register-displacement offset. That is,
18725       * <PRE>
18726       * -  [base + disp]
18727       * </PRE>
18728       *
18729       * @param base the destination base register
18730       * @param disp the destination displacement
18731       */
18732      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18733      public final void emitNEG_RegDisp(GPR base, Offset disp) {
18734        int miStart = mi;
18735        // no group 1 to 4 prefix byte
18736        generateREXprefix(false, null, null, base);
18737        setMachineCodes(mi++, (byte) 0xF7);
18738        // "register 0x3" is really part of the opcode
18739        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x3));
18740        if (lister != null) lister.RD(miStart, "NEG", base, disp);
18741      }
18742    
18743      /**
18744       * Generate a NEG to register indirect. That is,
18745       * <PRE>
18746       * -  [reg]
18747       * </PRE>
18748       *
18749       * @param base the destination base register
18750       */
18751      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18752      public final void emitNEG_RegInd(GPR base) {
18753        int miStart = mi;
18754        // no group 1 to 4 prefix byte
18755        generateREXprefix(false, null, null, base);
18756        setMachineCodes(mi++, (byte) 0xF7);
18757        // "register 0x3" is really part of the opcode
18758        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x3));
18759        if (lister != null) lister.RN(miStart, "NEG", base);
18760      }
18761    
18762      /**
18763       * Generate a NEG to register offset. That is,
18764       * <PRE>
18765       * -  [index<<scale + disp]
18766       * </PRE>
18767       *
18768       * @param index the destination index register
18769       * @param scale the destination shift amount
18770       * @param disp the destination displacement
18771       */
18772      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18773      public final void emitNEG_RegOff(GPR index, short scale, Offset disp) {
18774        int miStart = mi;
18775        // no group 1 to 4 prefix byte
18776        generateREXprefix(false, null, index, null);
18777        setMachineCodes(mi++, (byte) 0xF7);
18778        // "register 0x3" is really part of the opcode
18779        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x3));
18780        if (lister != null) lister.RFD(miStart, "NEG", index, scale, disp);
18781      }
18782    
18783      /**
18784       * Generate a NEG to absolute address. That is,
18785       * <PRE>
18786       * -  [disp]
18787       * </PRE>
18788       *
18789       * @param disp the destination displacement
18790       */
18791      public final void emitNEG_Abs(Address disp) {
18792        int miStart = mi;
18793        // no group 1 to 4 prefix byte
18794        generateREXprefix(false, null, null, null);
18795        setMachineCodes(mi++, (byte) 0xF7);
18796        // "register 0x3" is really part of the opcode
18797        emitAbsRegOperands(disp, GPR.getForOpcode(0x3));
18798        if (lister != null) lister.RA(miStart, "NEG", disp);
18799      }
18800    
18801      /**
18802       * Generate a NEG to register offset. That is,
18803       * <PRE>
18804       * -  [base + index<<scale + disp]
18805       * </PRE>
18806       *
18807       * @param base the destination base register
18808       * @param index the destination index register
18809       * @param scale the destination shift amount
18810       * @param disp the destination displacement
18811       */
18812      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
18813      public final void emitNEG_RegIdx(GPR base, GPR index, short scale, Offset disp) {
18814        int miStart = mi;
18815        // no group 1 to 4 prefix byte
18816        generateREXprefix(false, null, index, base);
18817        setMachineCodes(mi++, (byte) 0xF7);
18818        // "register 0x3" is really part of the opcode
18819        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x3));
18820        if (lister != null) lister.RXD(miStart, "NEG", base, index, scale, disp);
18821      }
18822    
18823      /**
18824       * Generate a NEG on a register. That is,
18825       * <PRE>
18826       * -  (byte)  reg
18827       * </PRE>
18828       *
18829       * @param reg register to operate upon
18830       */
18831      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18832      public final void emitNEG_Reg_Byte(GPR reg) {
18833        int miStart = mi;
18834        // no group 1 to 4 prefix byte
18835        generateREXprefix(false, null, null, reg);
18836        setMachineCodes(mi++, (byte) 0xF6);
18837        emitRegRegOperands(reg, GPR.getForOpcode(0x3));
18838        if (lister != null) lister.R(miStart, "NEG", reg);
18839      }
18840      /**
18841       * Generate a NEG to register-displacement offset. That is,
18842       * <PRE>
18843       * -  (byte)  [base + disp]
18844       * </PRE>
18845       *
18846       * @param base the destination base register
18847       * @param disp the destination displacement
18848       */
18849      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18850      public final void emitNEG_RegDisp_Byte(GPR base, Offset disp) {
18851        int miStart = mi;
18852        // no group 1 to 4 prefix byte
18853        generateREXprefix(false, null, null, base);
18854        setMachineCodes(mi++, (byte) 0xF6);
18855        // "register 0x3" is really part of the opcode
18856        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x3));
18857        if (lister != null) lister.RD(miStart, "NEG", base, disp);
18858      }
18859    
18860      /**
18861       * Generate a NEG to register indirect. That is,
18862       * <PRE>
18863       * -  (byte)  [reg]
18864       * </PRE>
18865       *
18866       * @param base the destination base register
18867       */
18868      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18869      public final void emitNEG_RegInd_Byte(GPR base) {
18870        int miStart = mi;
18871        // no group 1 to 4 prefix byte
18872        generateREXprefix(false, null, null, base);
18873        setMachineCodes(mi++, (byte) 0xF6);
18874        // "register 0x3" is really part of the opcode
18875        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x3));
18876        if (lister != null) lister.RN(miStart, "NEG", base);
18877      }
18878    
18879      /**
18880       * Generate a NEG to register offset. That is,
18881       * <PRE>
18882       * -  (byte)  [index<<scale + disp]
18883       * </PRE>
18884       *
18885       * @param index the destination index register
18886       * @param scale the destination shift amount
18887       * @param disp the destination displacement
18888       */
18889      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18890      public final void emitNEG_RegOff_Byte(GPR index, short scale, Offset disp) {
18891        int miStart = mi;
18892        // no group 1 to 4 prefix byte
18893        generateREXprefix(false, null, index, null);
18894        setMachineCodes(mi++, (byte) 0xF6);
18895        // "register 0x3" is really part of the opcode
18896        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x3));
18897        if (lister != null) lister.RFD(miStart, "NEG", index, scale, disp);
18898      }
18899    
18900      /**
18901       * Generate a NEG to absolute address. That is,
18902       * <PRE>
18903       * -  (byte)  [disp]
18904       * </PRE>
18905       *
18906       * @param disp the destination displacement
18907       */
18908      public final void emitNEG_Abs_Byte(Address disp) {
18909        int miStart = mi;
18910        // no group 1 to 4 prefix byte
18911        generateREXprefix(false, null, null, null);
18912        setMachineCodes(mi++, (byte) 0xF6);
18913        // "register 0x3" is really part of the opcode
18914        emitAbsRegOperands(disp, GPR.getForOpcode(0x3));
18915        if (lister != null) lister.RA(miStart, "NEG", disp);
18916      }
18917    
18918      /**
18919       * Generate a NEG to register offset. That is,
18920       * <PRE>
18921       * -  (byte)  [base + index<<scale + disp]
18922       * </PRE>
18923       *
18924       * @param base the destination base register
18925       * @param index the destination index register
18926       * @param scale the destination shift amount
18927       * @param disp the destination displacement
18928       */
18929      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
18930      public final void emitNEG_RegIdx_Byte(GPR base, GPR index, short scale, Offset disp) {
18931        int miStart = mi;
18932        // no group 1 to 4 prefix byte
18933        generateREXprefix(false, null, index, base);
18934        setMachineCodes(mi++, (byte) 0xF6);
18935        // "register 0x3" is really part of the opcode
18936        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x3));
18937        if (lister != null) lister.RXD(miStart, "NEG", base, index, scale, disp);
18938      }
18939    
18940      /**
18941       * Generate a NEG on a register. That is,
18942       * <PRE>
18943       * -  (word)  reg
18944       * </PRE>
18945       *
18946       * @param reg register to operate upon
18947       */
18948      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18949      public final void emitNEG_Reg_Word(GPR reg) {
18950        int miStart = mi;
18951        setMachineCodes(mi++, (byte) 0x66);
18952        generateREXprefix(false, null, null, reg);
18953        setMachineCodes(mi++, (byte) 0xF7);
18954        emitRegRegOperands(reg, GPR.getForOpcode(0x3));
18955        if (lister != null) lister.R(miStart, "NEG", reg);
18956      }
18957      /**
18958       * Generate a NEG to register-displacement offset. That is,
18959       * <PRE>
18960       * -  (word)  [base + disp]
18961       * </PRE>
18962       *
18963       * @param base the destination base register
18964       * @param disp the destination displacement
18965       */
18966      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18967      public final void emitNEG_RegDisp_Word(GPR base, Offset disp) {
18968        int miStart = mi;
18969        setMachineCodes(mi++, (byte) 0x66);
18970        generateREXprefix(false, null, null, base);
18971        setMachineCodes(mi++, (byte) 0xF7);
18972        // "register 0x3" is really part of the opcode
18973        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x3));
18974        if (lister != null) lister.RD(miStart, "NEG", base, disp);
18975      }
18976    
18977      /**
18978       * Generate a NEG to register indirect. That is,
18979       * <PRE>
18980       * -  (word)  [reg]
18981       * </PRE>
18982       *
18983       * @param base the destination base register
18984       */
18985      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
18986      public final void emitNEG_RegInd_Word(GPR base) {
18987        int miStart = mi;
18988        setMachineCodes(mi++, (byte) 0x66);
18989        generateREXprefix(false, null, null, base);
18990        setMachineCodes(mi++, (byte) 0xF7);
18991        // "register 0x3" is really part of the opcode
18992        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x3));
18993        if (lister != null) lister.RN(miStart, "NEG", base);
18994      }
18995    
18996      /**
18997       * Generate a NEG to register offset. That is,
18998       * <PRE>
18999       * -  (word)  [index<<scale + disp]
19000       * </PRE>
19001       *
19002       * @param index the destination index register
19003       * @param scale the destination shift amount
19004       * @param disp the destination displacement
19005       */
19006      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19007      public final void emitNEG_RegOff_Word(GPR index, short scale, Offset disp) {
19008        int miStart = mi;
19009        setMachineCodes(mi++, (byte) 0x66);
19010        generateREXprefix(false, null, index, null);
19011        setMachineCodes(mi++, (byte) 0xF7);
19012        // "register 0x3" is really part of the opcode
19013        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x3));
19014        if (lister != null) lister.RFD(miStart, "NEG", index, scale, disp);
19015      }
19016    
19017      /**
19018       * Generate a NEG to absolute address. That is,
19019       * <PRE>
19020       * -  (word)  [disp]
19021       * </PRE>
19022       *
19023       * @param disp the destination displacement
19024       */
19025      public final void emitNEG_Abs_Word(Address disp) {
19026        int miStart = mi;
19027        setMachineCodes(mi++, (byte) 0x66);
19028        generateREXprefix(false, null, null, null);
19029        setMachineCodes(mi++, (byte) 0xF7);
19030        // "register 0x3" is really part of the opcode
19031        emitAbsRegOperands(disp, GPR.getForOpcode(0x3));
19032        if (lister != null) lister.RA(miStart, "NEG", disp);
19033      }
19034    
19035      /**
19036       * Generate a NEG to register offset. That is,
19037       * <PRE>
19038       * -  (word)  [base + index<<scale + disp]
19039       * </PRE>
19040       *
19041       * @param base the destination base register
19042       * @param index the destination index register
19043       * @param scale the destination shift amount
19044       * @param disp the destination displacement
19045       */
19046      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19047      public final void emitNEG_RegIdx_Word(GPR base, GPR index, short scale, Offset disp) {
19048        int miStart = mi;
19049        setMachineCodes(mi++, (byte) 0x66);
19050        generateREXprefix(false, null, index, base);
19051        setMachineCodes(mi++, (byte) 0xF7);
19052        // "register 0x3" is really part of the opcode
19053        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x3));
19054        if (lister != null) lister.RXD(miStart, "NEG", base, index, scale, disp);
19055      }
19056    
19057      /**
19058       * Generate a NEG on a register. That is,
19059       * <PRE>
19060       * -  (quad)  reg
19061       * </PRE>
19062       *
19063       * @param reg register to operate upon
19064       */
19065      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19066      public final void emitNEG_Reg_Quad(GPR reg) {
19067        int miStart = mi;
19068        // no group 1 to 4 prefix byte
19069        generateREXprefix(true, null, null, reg);
19070        setMachineCodes(mi++, (byte) 0xF7);
19071        emitRegRegOperands(reg, GPR.getForOpcode(0x3));
19072        if (lister != null) lister.R(miStart, "NEG", reg);
19073      }
19074      /**
19075       * Generate a NEG to register-displacement offset. That is,
19076       * <PRE>
19077       * -  (quad)  [base + disp]
19078       * </PRE>
19079       *
19080       * @param base the destination base register
19081       * @param disp the destination displacement
19082       */
19083      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19084      public final void emitNEG_RegDisp_Quad(GPR base, Offset disp) {
19085        int miStart = mi;
19086        // no group 1 to 4 prefix byte
19087        generateREXprefix(true, null, null, base);
19088        setMachineCodes(mi++, (byte) 0xF7);
19089        // "register 0x3" is really part of the opcode
19090        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x3));
19091        if (lister != null) lister.RD(miStart, "NEG", base, disp);
19092      }
19093    
19094      /**
19095       * Generate a NEG to register indirect. That is,
19096       * <PRE>
19097       * -  (quad)  [reg]
19098       * </PRE>
19099       *
19100       * @param base the destination base register
19101       */
19102      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19103      public final void emitNEG_RegInd_Quad(GPR base) {
19104        int miStart = mi;
19105        // no group 1 to 4 prefix byte
19106        generateREXprefix(true, null, null, base);
19107        setMachineCodes(mi++, (byte) 0xF7);
19108        // "register 0x3" is really part of the opcode
19109        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x3));
19110        if (lister != null) lister.RN(miStart, "NEG", base);
19111      }
19112    
19113      /**
19114       * Generate a NEG to register offset. That is,
19115       * <PRE>
19116       * -  (quad)  [index<<scale + disp]
19117       * </PRE>
19118       *
19119       * @param index the destination index register
19120       * @param scale the destination shift amount
19121       * @param disp the destination displacement
19122       */
19123      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19124      public final void emitNEG_RegOff_Quad(GPR index, short scale, Offset disp) {
19125        int miStart = mi;
19126        // no group 1 to 4 prefix byte
19127        generateREXprefix(true, null, index, null);
19128        setMachineCodes(mi++, (byte) 0xF7);
19129        // "register 0x3" is really part of the opcode
19130        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x3));
19131        if (lister != null) lister.RFD(miStart, "NEG", index, scale, disp);
19132      }
19133    
19134      /**
19135       * Generate a NEG to absolute address. That is,
19136       * <PRE>
19137       * -  (quad)  [disp]
19138       * </PRE>
19139       *
19140       * @param disp the destination displacement
19141       */
19142      public final void emitNEG_Abs_Quad(Address disp) {
19143        int miStart = mi;
19144        // no group 1 to 4 prefix byte
19145        generateREXprefix(true, null, null, null);
19146        setMachineCodes(mi++, (byte) 0xF7);
19147        // "register 0x3" is really part of the opcode
19148        emitAbsRegOperands(disp, GPR.getForOpcode(0x3));
19149        if (lister != null) lister.RA(miStart, "NEG", disp);
19150      }
19151    
19152      /**
19153       * Generate a NEG to register offset. That is,
19154       * <PRE>
19155       * -  (quad)  [base + index<<scale + disp]
19156       * </PRE>
19157       *
19158       * @param base the destination base register
19159       * @param index the destination index register
19160       * @param scale the destination shift amount
19161       * @param disp the destination displacement
19162       */
19163      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19164      public final void emitNEG_RegIdx_Quad(GPR base, GPR index, short scale, Offset disp) {
19165        int miStart = mi;
19166        // no group 1 to 4 prefix byte
19167        generateREXprefix(true, null, index, base);
19168        setMachineCodes(mi++, (byte) 0xF7);
19169        // "register 0x3" is really part of the opcode
19170        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x3));
19171        if (lister != null) lister.RXD(miStart, "NEG", base, index, scale, disp);
19172      }
19173    
19174      /**
19175       * Generate a NOT on a register. That is,
19176       * <PRE>
19177       * ~  reg
19178       * </PRE>
19179       *
19180       * @param reg register to operate upon
19181       */
19182      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19183      public final void emitNOT_Reg(GPR reg) {
19184        int miStart = mi;
19185        // no group 1 to 4 prefix byte
19186        generateREXprefix(false, null, null, reg);
19187        setMachineCodes(mi++, (byte) 0xF7);
19188        emitRegRegOperands(reg, GPR.getForOpcode(0x2));
19189        if (lister != null) lister.R(miStart, "NOT", reg);
19190      }
19191      /**
19192       * Generate a NOT to register-displacement offset. That is,
19193       * <PRE>
19194       * ~  [base + disp]
19195       * </PRE>
19196       *
19197       * @param base the destination base register
19198       * @param disp the destination displacement
19199       */
19200      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19201      public final void emitNOT_RegDisp(GPR base, Offset disp) {
19202        int miStart = mi;
19203        // no group 1 to 4 prefix byte
19204        generateREXprefix(false, null, null, base);
19205        setMachineCodes(mi++, (byte) 0xF7);
19206        // "register 0x2" is really part of the opcode
19207        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x2));
19208        if (lister != null) lister.RD(miStart, "NOT", base, disp);
19209      }
19210    
19211      /**
19212       * Generate a NOT to register indirect. That is,
19213       * <PRE>
19214       * ~  [reg]
19215       * </PRE>
19216       *
19217       * @param base the destination base register
19218       */
19219      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19220      public final void emitNOT_RegInd(GPR base) {
19221        int miStart = mi;
19222        // no group 1 to 4 prefix byte
19223        generateREXprefix(false, null, null, base);
19224        setMachineCodes(mi++, (byte) 0xF7);
19225        // "register 0x2" is really part of the opcode
19226        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x2));
19227        if (lister != null) lister.RN(miStart, "NOT", base);
19228      }
19229    
19230      /**
19231       * Generate a NOT to register offset. That is,
19232       * <PRE>
19233       * ~  [index<<scale + disp]
19234       * </PRE>
19235       *
19236       * @param index the destination index register
19237       * @param scale the destination shift amount
19238       * @param disp the destination displacement
19239       */
19240      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19241      public final void emitNOT_RegOff(GPR index, short scale, Offset disp) {
19242        int miStart = mi;
19243        // no group 1 to 4 prefix byte
19244        generateREXprefix(false, null, index, null);
19245        setMachineCodes(mi++, (byte) 0xF7);
19246        // "register 0x2" is really part of the opcode
19247        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x2));
19248        if (lister != null) lister.RFD(miStart, "NOT", index, scale, disp);
19249      }
19250    
19251      /**
19252       * Generate a NOT to absolute address. That is,
19253       * <PRE>
19254       * ~  [disp]
19255       * </PRE>
19256       *
19257       * @param disp the destination displacement
19258       */
19259      public final void emitNOT_Abs(Address disp) {
19260        int miStart = mi;
19261        // no group 1 to 4 prefix byte
19262        generateREXprefix(false, null, null, null);
19263        setMachineCodes(mi++, (byte) 0xF7);
19264        // "register 0x2" is really part of the opcode
19265        emitAbsRegOperands(disp, GPR.getForOpcode(0x2));
19266        if (lister != null) lister.RA(miStart, "NOT", disp);
19267      }
19268    
19269      /**
19270       * Generate a NOT to register offset. That is,
19271       * <PRE>
19272       * ~  [base + index<<scale + disp]
19273       * </PRE>
19274       *
19275       * @param base the destination base register
19276       * @param index the destination index register
19277       * @param scale the destination shift amount
19278       * @param disp the destination displacement
19279       */
19280      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19281      public final void emitNOT_RegIdx(GPR base, GPR index, short scale, Offset disp) {
19282        int miStart = mi;
19283        // no group 1 to 4 prefix byte
19284        generateREXprefix(false, null, index, base);
19285        setMachineCodes(mi++, (byte) 0xF7);
19286        // "register 0x2" is really part of the opcode
19287        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x2));
19288        if (lister != null) lister.RXD(miStart, "NOT", base, index, scale, disp);
19289      }
19290    
19291      /**
19292       * Generate a NOT on a register. That is,
19293       * <PRE>
19294       * ~  (byte)  reg
19295       * </PRE>
19296       *
19297       * @param reg register to operate upon
19298       */
19299      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19300      public final void emitNOT_Reg_Byte(GPR reg) {
19301        int miStart = mi;
19302        // no group 1 to 4 prefix byte
19303        generateREXprefix(false, null, null, reg);
19304        setMachineCodes(mi++, (byte) 0xF6);
19305        emitRegRegOperands(reg, GPR.getForOpcode(0x2));
19306        if (lister != null) lister.R(miStart, "NOT", reg);
19307      }
19308      /**
19309       * Generate a NOT to register-displacement offset. That is,
19310       * <PRE>
19311       * ~  (byte)  [base + disp]
19312       * </PRE>
19313       *
19314       * @param base the destination base register
19315       * @param disp the destination displacement
19316       */
19317      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19318      public final void emitNOT_RegDisp_Byte(GPR base, Offset disp) {
19319        int miStart = mi;
19320        // no group 1 to 4 prefix byte
19321        generateREXprefix(false, null, null, base);
19322        setMachineCodes(mi++, (byte) 0xF6);
19323        // "register 0x2" is really part of the opcode
19324        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x2));
19325        if (lister != null) lister.RD(miStart, "NOT", base, disp);
19326      }
19327    
19328      /**
19329       * Generate a NOT to register indirect. That is,
19330       * <PRE>
19331       * ~  (byte)  [reg]
19332       * </PRE>
19333       *
19334       * @param base the destination base register
19335       */
19336      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19337      public final void emitNOT_RegInd_Byte(GPR base) {
19338        int miStart = mi;
19339        // no group 1 to 4 prefix byte
19340        generateREXprefix(false, null, null, base);
19341        setMachineCodes(mi++, (byte) 0xF6);
19342        // "register 0x2" is really part of the opcode
19343        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x2));
19344        if (lister != null) lister.RN(miStart, "NOT", base);
19345      }
19346    
19347      /**
19348       * Generate a NOT to register offset. That is,
19349       * <PRE>
19350       * ~  (byte)  [index<<scale + disp]
19351       * </PRE>
19352       *
19353       * @param index the destination index register
19354       * @param scale the destination shift amount
19355       * @param disp the destination displacement
19356       */
19357      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19358      public final void emitNOT_RegOff_Byte(GPR index, short scale, Offset disp) {
19359        int miStart = mi;
19360        // no group 1 to 4 prefix byte
19361        generateREXprefix(false, null, index, null);
19362        setMachineCodes(mi++, (byte) 0xF6);
19363        // "register 0x2" is really part of the opcode
19364        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x2));
19365        if (lister != null) lister.RFD(miStart, "NOT", index, scale, disp);
19366      }
19367    
19368      /**
19369       * Generate a NOT to absolute address. That is,
19370       * <PRE>
19371       * ~  (byte)  [disp]
19372       * </PRE>
19373       *
19374       * @param disp the destination displacement
19375       */
19376      public final void emitNOT_Abs_Byte(Address disp) {
19377        int miStart = mi;
19378        // no group 1 to 4 prefix byte
19379        generateREXprefix(false, null, null, null);
19380        setMachineCodes(mi++, (byte) 0xF6);
19381        // "register 0x2" is really part of the opcode
19382        emitAbsRegOperands(disp, GPR.getForOpcode(0x2));
19383        if (lister != null) lister.RA(miStart, "NOT", disp);
19384      }
19385    
19386      /**
19387       * Generate a NOT to register offset. That is,
19388       * <PRE>
19389       * ~  (byte)  [base + index<<scale + disp]
19390       * </PRE>
19391       *
19392       * @param base the destination base register
19393       * @param index the destination index register
19394       * @param scale the destination shift amount
19395       * @param disp the destination displacement
19396       */
19397      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19398      public final void emitNOT_RegIdx_Byte(GPR base, GPR index, short scale, Offset disp) {
19399        int miStart = mi;
19400        // no group 1 to 4 prefix byte
19401        generateREXprefix(false, null, index, base);
19402        setMachineCodes(mi++, (byte) 0xF6);
19403        // "register 0x2" is really part of the opcode
19404        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x2));
19405        if (lister != null) lister.RXD(miStart, "NOT", base, index, scale, disp);
19406      }
19407    
19408      /**
19409       * Generate a NOT on a register. That is,
19410       * <PRE>
19411       * ~  (word)  reg
19412       * </PRE>
19413       *
19414       * @param reg register to operate upon
19415       */
19416      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19417      public final void emitNOT_Reg_Word(GPR reg) {
19418        int miStart = mi;
19419        setMachineCodes(mi++, (byte) 0x66);
19420        generateREXprefix(false, null, null, reg);
19421        setMachineCodes(mi++, (byte) 0xF7);
19422        emitRegRegOperands(reg, GPR.getForOpcode(0x2));
19423        if (lister != null) lister.R(miStart, "NOT", reg);
19424      }
19425      /**
19426       * Generate a NOT to register-displacement offset. That is,
19427       * <PRE>
19428       * ~  (word)  [base + disp]
19429       * </PRE>
19430       *
19431       * @param base the destination base register
19432       * @param disp the destination displacement
19433       */
19434      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19435      public final void emitNOT_RegDisp_Word(GPR base, Offset disp) {
19436        int miStart = mi;
19437        setMachineCodes(mi++, (byte) 0x66);
19438        generateREXprefix(false, null, null, base);
19439        setMachineCodes(mi++, (byte) 0xF7);
19440        // "register 0x2" is really part of the opcode
19441        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x2));
19442        if (lister != null) lister.RD(miStart, "NOT", base, disp);
19443      }
19444    
19445      /**
19446       * Generate a NOT to register indirect. That is,
19447       * <PRE>
19448       * ~  (word)  [reg]
19449       * </PRE>
19450       *
19451       * @param base the destination base register
19452       */
19453      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19454      public final void emitNOT_RegInd_Word(GPR base) {
19455        int miStart = mi;
19456        setMachineCodes(mi++, (byte) 0x66);
19457        generateREXprefix(false, null, null, base);
19458        setMachineCodes(mi++, (byte) 0xF7);
19459        // "register 0x2" is really part of the opcode
19460        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x2));
19461        if (lister != null) lister.RN(miStart, "NOT", base);
19462      }
19463    
19464      /**
19465       * Generate a NOT to register offset. That is,
19466       * <PRE>
19467       * ~  (word)  [index<<scale + disp]
19468       * </PRE>
19469       *
19470       * @param index the destination index register
19471       * @param scale the destination shift amount
19472       * @param disp the destination displacement
19473       */
19474      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19475      public final void emitNOT_RegOff_Word(GPR index, short scale, Offset disp) {
19476        int miStart = mi;
19477        setMachineCodes(mi++, (byte) 0x66);
19478        generateREXprefix(false, null, index, null);
19479        setMachineCodes(mi++, (byte) 0xF7);
19480        // "register 0x2" is really part of the opcode
19481        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x2));
19482        if (lister != null) lister.RFD(miStart, "NOT", index, scale, disp);
19483      }
19484    
19485      /**
19486       * Generate a NOT to absolute address. That is,
19487       * <PRE>
19488       * ~  (word)  [disp]
19489       * </PRE>
19490       *
19491       * @param disp the destination displacement
19492       */
19493      public final void emitNOT_Abs_Word(Address disp) {
19494        int miStart = mi;
19495        setMachineCodes(mi++, (byte) 0x66);
19496        generateREXprefix(false, null, null, null);
19497        setMachineCodes(mi++, (byte) 0xF7);
19498        // "register 0x2" is really part of the opcode
19499        emitAbsRegOperands(disp, GPR.getForOpcode(0x2));
19500        if (lister != null) lister.RA(miStart, "NOT", disp);
19501      }
19502    
19503      /**
19504       * Generate a NOT to register offset. That is,
19505       * <PRE>
19506       * ~  (word)  [base + index<<scale + disp]
19507       * </PRE>
19508       *
19509       * @param base the destination base register
19510       * @param index the destination index register
19511       * @param scale the destination shift amount
19512       * @param disp the destination displacement
19513       */
19514      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19515      public final void emitNOT_RegIdx_Word(GPR base, GPR index, short scale, Offset disp) {
19516        int miStart = mi;
19517        setMachineCodes(mi++, (byte) 0x66);
19518        generateREXprefix(false, null, index, base);
19519        setMachineCodes(mi++, (byte) 0xF7);
19520        // "register 0x2" is really part of the opcode
19521        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x2));
19522        if (lister != null) lister.RXD(miStart, "NOT", base, index, scale, disp);
19523      }
19524    
19525      /**
19526       * Generate a NOT on a register. That is,
19527       * <PRE>
19528       * ~  (quad)  reg
19529       * </PRE>
19530       *
19531       * @param reg register to operate upon
19532       */
19533      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19534      public final void emitNOT_Reg_Quad(GPR reg) {
19535        int miStart = mi;
19536        // no group 1 to 4 prefix byte
19537        generateREXprefix(true, null, null, reg);
19538        setMachineCodes(mi++, (byte) 0xF7);
19539        emitRegRegOperands(reg, GPR.getForOpcode(0x2));
19540        if (lister != null) lister.R(miStart, "NOT", reg);
19541      }
19542      /**
19543       * Generate a NOT to register-displacement offset. That is,
19544       * <PRE>
19545       * ~  (quad)  [base + disp]
19546       * </PRE>
19547       *
19548       * @param base the destination base register
19549       * @param disp the destination displacement
19550       */
19551      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19552      public final void emitNOT_RegDisp_Quad(GPR base, Offset disp) {
19553        int miStart = mi;
19554        // no group 1 to 4 prefix byte
19555        generateREXprefix(true, null, null, base);
19556        setMachineCodes(mi++, (byte) 0xF7);
19557        // "register 0x2" is really part of the opcode
19558        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x2));
19559        if (lister != null) lister.RD(miStart, "NOT", base, disp);
19560      }
19561    
19562      /**
19563       * Generate a NOT to register indirect. That is,
19564       * <PRE>
19565       * ~  (quad)  [reg]
19566       * </PRE>
19567       *
19568       * @param base the destination base register
19569       */
19570      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19571      public final void emitNOT_RegInd_Quad(GPR base) {
19572        int miStart = mi;
19573        // no group 1 to 4 prefix byte
19574        generateREXprefix(true, null, null, base);
19575        setMachineCodes(mi++, (byte) 0xF7);
19576        // "register 0x2" is really part of the opcode
19577        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x2));
19578        if (lister != null) lister.RN(miStart, "NOT", base);
19579      }
19580    
19581      /**
19582       * Generate a NOT to register offset. That is,
19583       * <PRE>
19584       * ~  (quad)  [index<<scale + disp]
19585       * </PRE>
19586       *
19587       * @param index the destination index register
19588       * @param scale the destination shift amount
19589       * @param disp the destination displacement
19590       */
19591      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19592      public final void emitNOT_RegOff_Quad(GPR index, short scale, Offset disp) {
19593        int miStart = mi;
19594        // no group 1 to 4 prefix byte
19595        generateREXprefix(true, null, index, null);
19596        setMachineCodes(mi++, (byte) 0xF7);
19597        // "register 0x2" is really part of the opcode
19598        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x2));
19599        if (lister != null) lister.RFD(miStart, "NOT", index, scale, disp);
19600      }
19601    
19602      /**
19603       * Generate a NOT to absolute address. That is,
19604       * <PRE>
19605       * ~  (quad)  [disp]
19606       * </PRE>
19607       *
19608       * @param disp the destination displacement
19609       */
19610      public final void emitNOT_Abs_Quad(Address disp) {
19611        int miStart = mi;
19612        // no group 1 to 4 prefix byte
19613        generateREXprefix(true, null, null, null);
19614        setMachineCodes(mi++, (byte) 0xF7);
19615        // "register 0x2" is really part of the opcode
19616        emitAbsRegOperands(disp, GPR.getForOpcode(0x2));
19617        if (lister != null) lister.RA(miStart, "NOT", disp);
19618      }
19619    
19620      /**
19621       * Generate a NOT to register offset. That is,
19622       * <PRE>
19623       * ~  (quad)  [base + index<<scale + disp]
19624       * </PRE>
19625       *
19626       * @param base the destination base register
19627       * @param index the destination index register
19628       * @param scale the destination shift amount
19629       * @param disp the destination displacement
19630       */
19631      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19632      public final void emitNOT_RegIdx_Quad(GPR base, GPR index, short scale, Offset disp) {
19633        int miStart = mi;
19634        // no group 1 to 4 prefix byte
19635        generateREXprefix(true, null, index, base);
19636        setMachineCodes(mi++, (byte) 0xF7);
19637        // "register 0x2" is really part of the opcode
19638        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x2));
19639        if (lister != null) lister.RXD(miStart, "NOT", base, index, scale, disp);
19640      }
19641    
19642      /**
19643       * Generate a MUL by register. That is,
19644       * <PRE>
19645       * EAX:EDX = EAX * srcReg
19646       * </PRE>
19647       *
19648       * @param dstReg must always be EAX/R0
19649       * @param srcReg the source register
19650       */
19651      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19652      public final void emitMUL_Reg_Reg(GPR dstReg, GPR srcReg) {
19653        int miStart = mi;
19654        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19655        generateREXprefix(false, null, null, srcReg);
19656        setMachineCodes(mi++, (byte) 0xF7);
19657        emitRegRegOperands(srcReg, GPR.getForOpcode(0x4));
19658        if (lister != null) lister.RR(miStart, "MUL", dstReg, srcReg);
19659      }
19660    
19661      /**
19662       * Generate a MUL by register displacement. That is,
19663       * <PRE>
19664       * EAX:EDX = EAX * [srcBase + srcDisp]
19665       * </PRE>
19666       *
19667       * @param dstReg must always be EAX/R0
19668       * @param srcBase the source base register
19669       * @param srcDisp the source displacement
19670       */
19671      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19672      public final void emitMUL_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
19673        int miStart = mi;
19674        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19675        generateREXprefix(false, null, null, srcBase);
19676        setMachineCodes(mi++, (byte) 0xF7);
19677        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x4));
19678        if (lister != null) lister.RRD(miStart, "MUL", dstReg, srcBase, srcDisp);
19679      }
19680    
19681      /**
19682       * Generate a MUL by register indirect. That is,
19683       * <PRE>
19684       * EAX:EDX = EAX * [srcBase]
19685       * </PRE>
19686       *
19687       * @param dstReg must always be EAX/R0
19688       * @param srcBase the source base register
19689       */
19690      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19691      public final void emitMUL_Reg_RegInd(GPR dstReg, GPR srcBase) {
19692        int miStart = mi;
19693        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19694        generateREXprefix(false, null, null, srcBase);
19695        setMachineCodes(mi++, (byte) 0xF7);
19696        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x4));
19697        if (lister != null) lister.RRN(miStart, "MUL", dstReg, srcBase);
19698      }
19699    
19700      /**
19701       * Generate a MUL by register indexed. That is,
19702       * <PRE>
19703       * EAX:EDX = EAX * [srcBase + srcIndex<<srcScale + srcDisp]
19704       * </PRE>
19705       *
19706       * @param dstReg must always be EAX/R0
19707       * @param srcBase the source base register
19708       * @param srcIndex the source index register
19709       * @param srcScale the source scale of the index
19710       * @param srcDisp the source displacement
19711       */
19712      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
19713      public final void emitMUL_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
19714        int miStart = mi;
19715        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19716        generateREXprefix(false, null, srcIndex, srcBase);
19717        setMachineCodes(mi++, (byte) 0xF7);
19718        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x4));
19719        if (lister != null) lister.RRXD(miStart, "MUL", dstReg, srcBase, srcIndex, srcScale, srcDisp);
19720      }
19721    
19722      /**
19723       * Generate a MUL by register offseted. That is,
19724       * <PRE>
19725       * EAX:EDX = EAX * [srcIndex<<srcScale + srcDisp]
19726       * </PRE>
19727       *
19728       * @param dstReg must always be EAX/R0
19729       * @param srcIndex the source index register
19730       * @param srcScale the source scale of the index
19731       * @param srcDisp the source displacement
19732       */
19733      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19734      public final void emitMUL_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
19735        int miStart = mi;
19736        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19737        generateREXprefix(false, null, srcIndex, null);
19738        setMachineCodes(mi++, (byte) 0xF7);
19739        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x4));
19740        if (lister != null) lister.RRFD(miStart, "MUL", dstReg, srcIndex, srcScale, srcDisp);
19741      }
19742    
19743      /**
19744       * Generate a MUL by absolute address. That is,
19745       * <PRE>
19746       * EAX:EDX = EAX * [srcDisp]
19747       * </PRE>
19748       *
19749       * @param dstReg must always be EAX/R0
19750       * @param srcDisp the source displacement
19751       */
19752      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19753      public final void emitMUL_Reg_Abs(GPR dstReg, Address srcDisp) {
19754        int miStart = mi;
19755        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19756        generateREXprefix(false, null, null, null);
19757        setMachineCodes(mi++, (byte) 0xF7);
19758        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x4));
19759        if (lister != null) lister.RRA(miStart, "MUL", dstReg, srcDisp);
19760      }
19761    
19762      /**
19763       * Generate a MUL by register. That is,
19764       * <PRE>
19765       * EAX:EDX = EAX * srcReg
19766       * </PRE>
19767       *
19768       * @param dstReg must always be EAX/R0
19769       * @param srcReg the source register
19770       */
19771      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19772      public final void emitMUL_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
19773        int miStart = mi;
19774        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19775        generateREXprefix(true, null, null, srcReg);
19776        setMachineCodes(mi++, (byte) 0xF7);
19777        emitRegRegOperands(srcReg, GPR.getForOpcode(0x4));
19778        if (lister != null) lister.RR(miStart, "MUL", dstReg, srcReg);
19779      }
19780    
19781      /**
19782       * Generate a MUL by register displacement. That is,
19783       * <PRE>
19784       * EAX:EDX = EAX * [srcBase + srcDisp]
19785       * </PRE>
19786       *
19787       * @param dstReg must always be EAX/R0
19788       * @param srcBase the source base register
19789       * @param srcDisp the source displacement
19790       */
19791      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19792      public final void emitMUL_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
19793        int miStart = mi;
19794        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19795        generateREXprefix(true, null, null, srcBase);
19796        setMachineCodes(mi++, (byte) 0xF7);
19797        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x4));
19798        if (lister != null) lister.RRD(miStart, "MUL", dstReg, srcBase, srcDisp);
19799      }
19800    
19801      /**
19802       * Generate a MUL by register indirect. That is,
19803       * <PRE>
19804       * EAX:EDX = EAX * [srcBase]
19805       * </PRE>
19806       *
19807       * @param dstReg must always be EAX/R0
19808       * @param srcBase the source base register
19809       */
19810      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19811      public final void emitMUL_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
19812        int miStart = mi;
19813        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19814        generateREXprefix(true, null, null, srcBase);
19815        setMachineCodes(mi++, (byte) 0xF7);
19816        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x4));
19817        if (lister != null) lister.RRN(miStart, "MUL", dstReg, srcBase);
19818      }
19819    
19820      /**
19821       * Generate a MUL by register indexed. That is,
19822       * <PRE>
19823       * EAX:EDX = EAX * [srcBase + srcIndex<<srcScale + srcDisp]
19824       * </PRE>
19825       *
19826       * @param dstReg must always be EAX/R0
19827       * @param srcBase the source base register
19828       * @param srcIndex the source index register
19829       * @param srcScale the source scale of the index
19830       * @param srcDisp the source displacement
19831       */
19832      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
19833      public final void emitMUL_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
19834        int miStart = mi;
19835        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19836        generateREXprefix(true, null, srcIndex, srcBase);
19837        setMachineCodes(mi++, (byte) 0xF7);
19838        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x4));
19839        if (lister != null) lister.RRXD(miStart, "MUL", dstReg, srcBase, srcIndex, srcScale, srcDisp);
19840      }
19841    
19842      /**
19843       * Generate a MUL by register offseted. That is,
19844       * <PRE>
19845       * EAX:EDX = EAX * [srcIndex<<srcScale + srcDisp]
19846       * </PRE>
19847       *
19848       * @param dstReg must always be EAX/R0
19849       * @param srcIndex the source index register
19850       * @param srcScale the source scale of the index
19851       * @param srcDisp the source displacement
19852       */
19853      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19854      public final void emitMUL_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
19855        int miStart = mi;
19856        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19857        generateREXprefix(true, null, srcIndex, null);
19858        setMachineCodes(mi++, (byte) 0xF7);
19859        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x4));
19860        if (lister != null) lister.RRFD(miStart, "MUL", dstReg, srcIndex, srcScale, srcDisp);
19861      }
19862    
19863      /**
19864       * Generate a MUL by absolute address. That is,
19865       * <PRE>
19866       * EAX:EDX = EAX * [srcDisp]
19867       * </PRE>
19868       *
19869       * @param dstReg must always be EAX/R0
19870       * @param srcDisp the source displacement
19871       */
19872      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19873      public final void emitMUL_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
19874        int miStart = mi;
19875        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19876        generateREXprefix(true, null, null, null);
19877        setMachineCodes(mi++, (byte) 0xF7);
19878        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x4));
19879        if (lister != null) lister.RRA(miStart, "MUL", dstReg, srcDisp);
19880      }
19881    
19882      /**
19883       * Generate a IMUL1 by register. That is,
19884       * <PRE>
19885       * EAX:EDX = EAX * srcReg
19886       * </PRE>
19887       *
19888       * @param dstReg must always be EAX/R0
19889       * @param srcReg the source register
19890       */
19891      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19892      public final void emitIMUL1_Reg_Reg(GPR dstReg, GPR srcReg) {
19893        int miStart = mi;
19894        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19895        generateREXprefix(false, null, null, srcReg);
19896        setMachineCodes(mi++, (byte) 0xF7);
19897        emitRegRegOperands(srcReg, GPR.getForOpcode(0x5));
19898        if (lister != null) lister.RR(miStart, "IMUL1", dstReg, srcReg);
19899      }
19900    
19901      /**
19902       * Generate a IMUL1 by register displacement. That is,
19903       * <PRE>
19904       * EAX:EDX = EAX * [srcBase + srcDisp]
19905       * </PRE>
19906       *
19907       * @param dstReg must always be EAX/R0
19908       * @param srcBase the source base register
19909       * @param srcDisp the source displacement
19910       */
19911      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19912      public final void emitIMUL1_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
19913        int miStart = mi;
19914        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19915        generateREXprefix(false, null, null, srcBase);
19916        setMachineCodes(mi++, (byte) 0xF7);
19917        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x5));
19918        if (lister != null) lister.RRD(miStart, "IMUL1", dstReg, srcBase, srcDisp);
19919      }
19920    
19921      /**
19922       * Generate a IMUL1 by register indirect. That is,
19923       * <PRE>
19924       * EAX:EDX = EAX * [srcBase]
19925       * </PRE>
19926       *
19927       * @param dstReg must always be EAX/R0
19928       * @param srcBase the source base register
19929       */
19930      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19931      public final void emitIMUL1_Reg_RegInd(GPR dstReg, GPR srcBase) {
19932        int miStart = mi;
19933        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19934        generateREXprefix(false, null, null, srcBase);
19935        setMachineCodes(mi++, (byte) 0xF7);
19936        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x5));
19937        if (lister != null) lister.RRN(miStart, "IMUL1", dstReg, srcBase);
19938      }
19939    
19940      /**
19941       * Generate a IMUL1 by register indexed. That is,
19942       * <PRE>
19943       * EAX:EDX = EAX * [srcBase + srcIndex<<srcScale + srcDisp]
19944       * </PRE>
19945       *
19946       * @param dstReg must always be EAX/R0
19947       * @param srcBase the source base register
19948       * @param srcIndex the source index register
19949       * @param srcScale the source scale of the index
19950       * @param srcDisp the source displacement
19951       */
19952      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
19953      public final void emitIMUL1_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
19954        int miStart = mi;
19955        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19956        generateREXprefix(false, null, srcIndex, srcBase);
19957        setMachineCodes(mi++, (byte) 0xF7);
19958        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x5));
19959        if (lister != null) lister.RRXD(miStart, "IMUL1", dstReg, srcBase, srcIndex, srcScale, srcDisp);
19960      }
19961    
19962      /**
19963       * Generate a IMUL1 by register offseted. That is,
19964       * <PRE>
19965       * EAX:EDX = EAX * [srcIndex<<srcScale + srcDisp]
19966       * </PRE>
19967       *
19968       * @param dstReg must always be EAX/R0
19969       * @param srcIndex the source index register
19970       * @param srcScale the source scale of the index
19971       * @param srcDisp the source displacement
19972       */
19973      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
19974      public final void emitIMUL1_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
19975        int miStart = mi;
19976        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19977        generateREXprefix(false, null, srcIndex, null);
19978        setMachineCodes(mi++, (byte) 0xF7);
19979        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x5));
19980        if (lister != null) lister.RRFD(miStart, "IMUL1", dstReg, srcIndex, srcScale, srcDisp);
19981      }
19982    
19983      /**
19984       * Generate a IMUL1 by absolute address. That is,
19985       * <PRE>
19986       * EAX:EDX = EAX * [srcDisp]
19987       * </PRE>
19988       *
19989       * @param dstReg must always be EAX/R0
19990       * @param srcDisp the source displacement
19991       */
19992      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
19993      public final void emitIMUL1_Reg_Abs(GPR dstReg, Address srcDisp) {
19994        int miStart = mi;
19995        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
19996        generateREXprefix(false, null, null, null);
19997        setMachineCodes(mi++, (byte) 0xF7);
19998        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x5));
19999        if (lister != null) lister.RRA(miStart, "IMUL1", dstReg, srcDisp);
20000      }
20001    
20002      /**
20003       * Generate a IMUL1 by register. That is,
20004       * <PRE>
20005       * EAX:EDX = EAX * srcReg
20006       * </PRE>
20007       *
20008       * @param dstReg must always be EAX/R0
20009       * @param srcReg the source register
20010       */
20011      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20012      public final void emitIMUL1_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
20013        int miStart = mi;
20014        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20015        generateREXprefix(true, null, null, srcReg);
20016        setMachineCodes(mi++, (byte) 0xF7);
20017        emitRegRegOperands(srcReg, GPR.getForOpcode(0x5));
20018        if (lister != null) lister.RR(miStart, "IMUL1", dstReg, srcReg);
20019      }
20020    
20021      /**
20022       * Generate a IMUL1 by register displacement. That is,
20023       * <PRE>
20024       * EAX:EDX = EAX * [srcBase + srcDisp]
20025       * </PRE>
20026       *
20027       * @param dstReg must always be EAX/R0
20028       * @param srcBase the source base register
20029       * @param srcDisp the source displacement
20030       */
20031      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20032      public final void emitIMUL1_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
20033        int miStart = mi;
20034        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20035        generateREXprefix(true, null, null, srcBase);
20036        setMachineCodes(mi++, (byte) 0xF7);
20037        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x5));
20038        if (lister != null) lister.RRD(miStart, "IMUL1", dstReg, srcBase, srcDisp);
20039      }
20040    
20041      /**
20042       * Generate a IMUL1 by register indirect. That is,
20043       * <PRE>
20044       * EAX:EDX = EAX * [srcBase]
20045       * </PRE>
20046       *
20047       * @param dstReg must always be EAX/R0
20048       * @param srcBase the source base register
20049       */
20050      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20051      public final void emitIMUL1_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
20052        int miStart = mi;
20053        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20054        generateREXprefix(true, null, null, srcBase);
20055        setMachineCodes(mi++, (byte) 0xF7);
20056        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x5));
20057        if (lister != null) lister.RRN(miStart, "IMUL1", dstReg, srcBase);
20058      }
20059    
20060      /**
20061       * Generate a IMUL1 by register indexed. That is,
20062       * <PRE>
20063       * EAX:EDX = EAX * [srcBase + srcIndex<<srcScale + srcDisp]
20064       * </PRE>
20065       *
20066       * @param dstReg must always be EAX/R0
20067       * @param srcBase the source base register
20068       * @param srcIndex the source index register
20069       * @param srcScale the source scale of the index
20070       * @param srcDisp the source displacement
20071       */
20072      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
20073      public final void emitIMUL1_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
20074        int miStart = mi;
20075        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20076        generateREXprefix(true, null, srcIndex, srcBase);
20077        setMachineCodes(mi++, (byte) 0xF7);
20078        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x5));
20079        if (lister != null) lister.RRXD(miStart, "IMUL1", dstReg, srcBase, srcIndex, srcScale, srcDisp);
20080      }
20081    
20082      /**
20083       * Generate a IMUL1 by register offseted. That is,
20084       * <PRE>
20085       * EAX:EDX = EAX * [srcIndex<<srcScale + srcDisp]
20086       * </PRE>
20087       *
20088       * @param dstReg must always be EAX/R0
20089       * @param srcIndex the source index register
20090       * @param srcScale the source scale of the index
20091       * @param srcDisp the source displacement
20092       */
20093      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20094      public final void emitIMUL1_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
20095        int miStart = mi;
20096        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20097        generateREXprefix(true, null, srcIndex, null);
20098        setMachineCodes(mi++, (byte) 0xF7);
20099        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x5));
20100        if (lister != null) lister.RRFD(miStart, "IMUL1", dstReg, srcIndex, srcScale, srcDisp);
20101      }
20102    
20103      /**
20104       * Generate a IMUL1 by absolute address. That is,
20105       * <PRE>
20106       * EAX:EDX = EAX * [srcDisp]
20107       * </PRE>
20108       *
20109       * @param dstReg must always be EAX/R0
20110       * @param srcDisp the source displacement
20111       */
20112      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
20113      public final void emitIMUL1_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
20114        int miStart = mi;
20115        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20116        generateREXprefix(true, null, null, null);
20117        setMachineCodes(mi++, (byte) 0xF7);
20118        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x5));
20119        if (lister != null) lister.RRA(miStart, "IMUL1", dstReg, srcDisp);
20120      }
20121    
20122      /**
20123       * Generate a DIV by register. That is,
20124       * <PRE>
20125       * EAX:EDX = EAX / srcReg
20126       * </PRE>
20127       *
20128       * @param dstReg must always be EAX/R0
20129       * @param srcReg the source register
20130       */
20131      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20132      public final void emitDIV_Reg_Reg(GPR dstReg, GPR srcReg) {
20133        int miStart = mi;
20134        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20135        generateREXprefix(false, null, null, srcReg);
20136        setMachineCodes(mi++, (byte) 0xF7);
20137        emitRegRegOperands(srcReg, GPR.getForOpcode(0x6));
20138        if (lister != null) lister.RR(miStart, "DIV", dstReg, srcReg);
20139      }
20140    
20141      /**
20142       * Generate a DIV by register displacement. That is,
20143       * <PRE>
20144       * EAX:EDX = EAX / [srcBase + srcDisp]
20145       * </PRE>
20146       *
20147       * @param dstReg must always be EAX/R0
20148       * @param srcBase the source base register
20149       * @param srcDisp the source displacement
20150       */
20151      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20152      public final void emitDIV_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
20153        int miStart = mi;
20154        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20155        generateREXprefix(false, null, null, srcBase);
20156        setMachineCodes(mi++, (byte) 0xF7);
20157        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x6));
20158        if (lister != null) lister.RRD(miStart, "DIV", dstReg, srcBase, srcDisp);
20159      }
20160    
20161      /**
20162       * Generate a DIV by register indirect. That is,
20163       * <PRE>
20164       * EAX:EDX = EAX / [srcBase]
20165       * </PRE>
20166       *
20167       * @param dstReg must always be EAX/R0
20168       * @param srcBase the source base register
20169       */
20170      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20171      public final void emitDIV_Reg_RegInd(GPR dstReg, GPR srcBase) {
20172        int miStart = mi;
20173        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20174        generateREXprefix(false, null, null, srcBase);
20175        setMachineCodes(mi++, (byte) 0xF7);
20176        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x6));
20177        if (lister != null) lister.RRN(miStart, "DIV", dstReg, srcBase);
20178      }
20179    
20180      /**
20181       * Generate a DIV by register indexed. That is,
20182       * <PRE>
20183       * EAX:EDX = EAX / [srcBase + srcIndex<<srcScale + srcDisp]
20184       * </PRE>
20185       *
20186       * @param dstReg must always be EAX/R0
20187       * @param srcBase the source base register
20188       * @param srcIndex the source index register
20189       * @param srcScale the source scale of the index
20190       * @param srcDisp the source displacement
20191       */
20192      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
20193      public final void emitDIV_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
20194        int miStart = mi;
20195        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20196        generateREXprefix(false, null, srcIndex, srcBase);
20197        setMachineCodes(mi++, (byte) 0xF7);
20198        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x6));
20199        if (lister != null) lister.RRXD(miStart, "DIV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
20200      }
20201    
20202      /**
20203       * Generate a DIV by register offseted. That is,
20204       * <PRE>
20205       * EAX:EDX = EAX / [srcIndex<<srcScale + srcDisp]
20206       * </PRE>
20207       *
20208       * @param dstReg must always be EAX/R0
20209       * @param srcIndex the source index register
20210       * @param srcScale the source scale of the index
20211       * @param srcDisp the source displacement
20212       */
20213      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20214      public final void emitDIV_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
20215        int miStart = mi;
20216        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20217        generateREXprefix(false, null, srcIndex, null);
20218        setMachineCodes(mi++, (byte) 0xF7);
20219        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x6));
20220        if (lister != null) lister.RRFD(miStart, "DIV", dstReg, srcIndex, srcScale, srcDisp);
20221      }
20222    
20223      /**
20224       * Generate a DIV by absolute address. That is,
20225       * <PRE>
20226       * EAX:EDX = EAX / [srcDisp]
20227       * </PRE>
20228       *
20229       * @param dstReg must always be EAX/R0
20230       * @param srcDisp the source displacement
20231       */
20232      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
20233      public final void emitDIV_Reg_Abs(GPR dstReg, Address srcDisp) {
20234        int miStart = mi;
20235        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20236        generateREXprefix(false, null, null, null);
20237        setMachineCodes(mi++, (byte) 0xF7);
20238        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x6));
20239        if (lister != null) lister.RRA(miStart, "DIV", dstReg, srcDisp);
20240      }
20241    
20242      /**
20243       * Generate a DIV by register. That is,
20244       * <PRE>
20245       * EAX:EDX = EAX / srcReg
20246       * </PRE>
20247       *
20248       * @param dstReg must always be EAX/R0
20249       * @param srcReg the source register
20250       */
20251      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20252      public final void emitDIV_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
20253        int miStart = mi;
20254        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20255        generateREXprefix(true, null, null, srcReg);
20256        setMachineCodes(mi++, (byte) 0xF7);
20257        emitRegRegOperands(srcReg, GPR.getForOpcode(0x6));
20258        if (lister != null) lister.RR(miStart, "DIV", dstReg, srcReg);
20259      }
20260    
20261      /**
20262       * Generate a DIV by register displacement. That is,
20263       * <PRE>
20264       * EAX:EDX = EAX / [srcBase + srcDisp]
20265       * </PRE>
20266       *
20267       * @param dstReg must always be EAX/R0
20268       * @param srcBase the source base register
20269       * @param srcDisp the source displacement
20270       */
20271      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20272      public final void emitDIV_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
20273        int miStart = mi;
20274        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20275        generateREXprefix(true, null, null, srcBase);
20276        setMachineCodes(mi++, (byte) 0xF7);
20277        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x6));
20278        if (lister != null) lister.RRD(miStart, "DIV", dstReg, srcBase, srcDisp);
20279      }
20280    
20281      /**
20282       * Generate a DIV by register indirect. That is,
20283       * <PRE>
20284       * EAX:EDX = EAX / [srcBase]
20285       * </PRE>
20286       *
20287       * @param dstReg must always be EAX/R0
20288       * @param srcBase the source base register
20289       */
20290      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20291      public final void emitDIV_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
20292        int miStart = mi;
20293        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20294        generateREXprefix(true, null, null, srcBase);
20295        setMachineCodes(mi++, (byte) 0xF7);
20296        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x6));
20297        if (lister != null) lister.RRN(miStart, "DIV", dstReg, srcBase);
20298      }
20299    
20300      /**
20301       * Generate a DIV by register indexed. That is,
20302       * <PRE>
20303       * EAX:EDX = EAX / [srcBase + srcIndex<<srcScale + srcDisp]
20304       * </PRE>
20305       *
20306       * @param dstReg must always be EAX/R0
20307       * @param srcBase the source base register
20308       * @param srcIndex the source index register
20309       * @param srcScale the source scale of the index
20310       * @param srcDisp the source displacement
20311       */
20312      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
20313      public final void emitDIV_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
20314        int miStart = mi;
20315        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20316        generateREXprefix(true, null, srcIndex, srcBase);
20317        setMachineCodes(mi++, (byte) 0xF7);
20318        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x6));
20319        if (lister != null) lister.RRXD(miStart, "DIV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
20320      }
20321    
20322      /**
20323       * Generate a DIV by register offseted. That is,
20324       * <PRE>
20325       * EAX:EDX = EAX / [srcIndex<<srcScale + srcDisp]
20326       * </PRE>
20327       *
20328       * @param dstReg must always be EAX/R0
20329       * @param srcIndex the source index register
20330       * @param srcScale the source scale of the index
20331       * @param srcDisp the source displacement
20332       */
20333      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20334      public final void emitDIV_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
20335        int miStart = mi;
20336        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20337        generateREXprefix(true, null, srcIndex, null);
20338        setMachineCodes(mi++, (byte) 0xF7);
20339        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x6));
20340        if (lister != null) lister.RRFD(miStart, "DIV", dstReg, srcIndex, srcScale, srcDisp);
20341      }
20342    
20343      /**
20344       * Generate a DIV by absolute address. That is,
20345       * <PRE>
20346       * EAX:EDX = EAX / [srcDisp]
20347       * </PRE>
20348       *
20349       * @param dstReg must always be EAX/R0
20350       * @param srcDisp the source displacement
20351       */
20352      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
20353      public final void emitDIV_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
20354        int miStart = mi;
20355        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20356        generateREXprefix(true, null, null, null);
20357        setMachineCodes(mi++, (byte) 0xF7);
20358        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x6));
20359        if (lister != null) lister.RRA(miStart, "DIV", dstReg, srcDisp);
20360      }
20361    
20362      /**
20363       * Generate a IDIV by register. That is,
20364       * <PRE>
20365       * EAX:EDX = EAX u/ srcReg
20366       * </PRE>
20367       *
20368       * @param dstReg must always be EAX/R0
20369       * @param srcReg the source register
20370       */
20371      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20372      public final void emitIDIV_Reg_Reg(GPR dstReg, GPR srcReg) {
20373        int miStart = mi;
20374        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20375        generateREXprefix(false, null, null, srcReg);
20376        setMachineCodes(mi++, (byte) 0xF7);
20377        emitRegRegOperands(srcReg, GPR.getForOpcode(0x7));
20378        if (lister != null) lister.RR(miStart, "IDIV", dstReg, srcReg);
20379      }
20380    
20381      /**
20382       * Generate a IDIV by register displacement. That is,
20383       * <PRE>
20384       * EAX:EDX = EAX u/ [srcBase + srcDisp]
20385       * </PRE>
20386       *
20387       * @param dstReg must always be EAX/R0
20388       * @param srcBase the source base register
20389       * @param srcDisp the source displacement
20390       */
20391      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20392      public final void emitIDIV_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
20393        int miStart = mi;
20394        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20395        generateREXprefix(false, null, null, srcBase);
20396        setMachineCodes(mi++, (byte) 0xF7);
20397        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x7));
20398        if (lister != null) lister.RRD(miStart, "IDIV", dstReg, srcBase, srcDisp);
20399      }
20400    
20401      /**
20402       * Generate a IDIV by register indirect. That is,
20403       * <PRE>
20404       * EAX:EDX = EAX u/ [srcBase]
20405       * </PRE>
20406       *
20407       * @param dstReg must always be EAX/R0
20408       * @param srcBase the source base register
20409       */
20410      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20411      public final void emitIDIV_Reg_RegInd(GPR dstReg, GPR srcBase) {
20412        int miStart = mi;
20413        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20414        generateREXprefix(false, null, null, srcBase);
20415        setMachineCodes(mi++, (byte) 0xF7);
20416        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x7));
20417        if (lister != null) lister.RRN(miStart, "IDIV", dstReg, srcBase);
20418      }
20419    
20420      /**
20421       * Generate a IDIV by register indexed. That is,
20422       * <PRE>
20423       * EAX:EDX = EAX u/ [srcBase + srcIndex<<srcScale + srcDisp]
20424       * </PRE>
20425       *
20426       * @param dstReg must always be EAX/R0
20427       * @param srcBase the source base register
20428       * @param srcIndex the source index register
20429       * @param srcScale the source scale of the index
20430       * @param srcDisp the source displacement
20431       */
20432      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
20433      public final void emitIDIV_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
20434        int miStart = mi;
20435        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20436        generateREXprefix(false, null, srcIndex, srcBase);
20437        setMachineCodes(mi++, (byte) 0xF7);
20438        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x7));
20439        if (lister != null) lister.RRXD(miStart, "IDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
20440      }
20441    
20442      /**
20443       * Generate a IDIV by register offseted. That is,
20444       * <PRE>
20445       * EAX:EDX = EAX u/ [srcIndex<<srcScale + srcDisp]
20446       * </PRE>
20447       *
20448       * @param dstReg must always be EAX/R0
20449       * @param srcIndex the source index register
20450       * @param srcScale the source scale of the index
20451       * @param srcDisp the source displacement
20452       */
20453      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20454      public final void emitIDIV_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
20455        int miStart = mi;
20456        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20457        generateREXprefix(false, null, srcIndex, null);
20458        setMachineCodes(mi++, (byte) 0xF7);
20459        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x7));
20460        if (lister != null) lister.RRFD(miStart, "IDIV", dstReg, srcIndex, srcScale, srcDisp);
20461      }
20462    
20463      /**
20464       * Generate a IDIV by absolute address. That is,
20465       * <PRE>
20466       * EAX:EDX = EAX u/ [srcDisp]
20467       * </PRE>
20468       *
20469       * @param dstReg must always be EAX/R0
20470       * @param srcDisp the source displacement
20471       */
20472      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
20473      public final void emitIDIV_Reg_Abs(GPR dstReg, Address srcDisp) {
20474        int miStart = mi;
20475        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20476        generateREXprefix(false, null, null, null);
20477        setMachineCodes(mi++, (byte) 0xF7);
20478        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x7));
20479        if (lister != null) lister.RRA(miStart, "IDIV", dstReg, srcDisp);
20480      }
20481    
20482      /**
20483       * Generate a IDIV by register. That is,
20484       * <PRE>
20485       * EAX:EDX = EAX u/ srcReg
20486       * </PRE>
20487       *
20488       * @param dstReg must always be EAX/R0
20489       * @param srcReg the source register
20490       */
20491      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20492      public final void emitIDIV_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
20493        int miStart = mi;
20494        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20495        generateREXprefix(true, null, null, srcReg);
20496        setMachineCodes(mi++, (byte) 0xF7);
20497        emitRegRegOperands(srcReg, GPR.getForOpcode(0x7));
20498        if (lister != null) lister.RR(miStart, "IDIV", dstReg, srcReg);
20499      }
20500    
20501      /**
20502       * Generate a IDIV by register displacement. That is,
20503       * <PRE>
20504       * EAX:EDX = EAX u/ [srcBase + srcDisp]
20505       * </PRE>
20506       *
20507       * @param dstReg must always be EAX/R0
20508       * @param srcBase the source base register
20509       * @param srcDisp the source displacement
20510       */
20511      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20512      public final void emitIDIV_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
20513        int miStart = mi;
20514        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20515        generateREXprefix(true, null, null, srcBase);
20516        setMachineCodes(mi++, (byte) 0xF7);
20517        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0x7));
20518        if (lister != null) lister.RRD(miStart, "IDIV", dstReg, srcBase, srcDisp);
20519      }
20520    
20521      /**
20522       * Generate a IDIV by register indirect. That is,
20523       * <PRE>
20524       * EAX:EDX = EAX u/ [srcBase]
20525       * </PRE>
20526       *
20527       * @param dstReg must always be EAX/R0
20528       * @param srcBase the source base register
20529       */
20530      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20531      public final void emitIDIV_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
20532        int miStart = mi;
20533        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20534        generateREXprefix(true, null, null, srcBase);
20535        setMachineCodes(mi++, (byte) 0xF7);
20536        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0x7));
20537        if (lister != null) lister.RRN(miStart, "IDIV", dstReg, srcBase);
20538      }
20539    
20540      /**
20541       * Generate a IDIV by register indexed. That is,
20542       * <PRE>
20543       * EAX:EDX = EAX u/ [srcBase + srcIndex<<srcScale + srcDisp]
20544       * </PRE>
20545       *
20546       * @param dstReg must always be EAX/R0
20547       * @param srcBase the source base register
20548       * @param srcIndex the source index register
20549       * @param srcScale the source scale of the index
20550       * @param srcDisp the source displacement
20551       */
20552      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
20553      public final void emitIDIV_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
20554        int miStart = mi;
20555        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20556        generateREXprefix(true, null, srcIndex, srcBase);
20557        setMachineCodes(mi++, (byte) 0xF7);
20558        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x7));
20559        if (lister != null) lister.RRXD(miStart, "IDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
20560      }
20561    
20562      /**
20563       * Generate a IDIV by register offseted. That is,
20564       * <PRE>
20565       * EAX:EDX = EAX u/ [srcIndex<<srcScale + srcDisp]
20566       * </PRE>
20567       *
20568       * @param dstReg must always be EAX/R0
20569       * @param srcIndex the source index register
20570       * @param srcScale the source scale of the index
20571       * @param srcDisp the source displacement
20572       */
20573      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20574      public final void emitIDIV_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
20575        int miStart = mi;
20576        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20577        generateREXprefix(true, null, srcIndex, null);
20578        setMachineCodes(mi++, (byte) 0xF7);
20579        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0x7));
20580        if (lister != null) lister.RRFD(miStart, "IDIV", dstReg, srcIndex, srcScale, srcDisp);
20581      }
20582    
20583      /**
20584       * Generate a IDIV by absolute address. That is,
20585       * <PRE>
20586       * EAX:EDX = EAX u/ [srcDisp]
20587       * </PRE>
20588       *
20589       * @param dstReg must always be EAX/R0
20590       * @param srcDisp the source displacement
20591       */
20592      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
20593      public final void emitIDIV_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
20594        int miStart = mi;
20595        if (VM.VerifyAssertions) VM._assert(dstReg == EAX);
20596        generateREXprefix(true, null, null, null);
20597        setMachineCodes(mi++, (byte) 0xF7);
20598        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0x7));
20599        if (lister != null) lister.RRA(miStart, "IDIV", dstReg, srcDisp);
20600      }
20601    
20602      /**
20603       * Generate a register(indirect)--register MOV. That is,
20604       * <PRE>
20605       * [dstBase] :=  srcReg
20606       * </PRE>
20607       *
20608       * @param dstBase the destination base
20609       * @param srcReg the source register
20610       */
20611      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20612      public final void emitMOV_RegInd_Reg(GPR dstBase, GPR srcReg) {
20613        int miStart = mi;
20614        // no group 1 to 4 prefix byte
20615        generateREXprefix(false, srcReg, null, dstBase);
20616        // single byte opcode
20617        setMachineCodes(mi++, (byte) 0x89);
20618        emitRegIndirectRegOperands(dstBase, srcReg);
20619        if (lister != null) lister.RNR(miStart, "MOV", dstBase, srcReg);
20620      }
20621    
20622      /**
20623       * Generate a register-offset--register MOV. That is,
20624       * <PRE>
20625       * [dstReg<<dstScale + dstDisp] :=  srcReg
20626       * </PRE>
20627       *
20628       * @param dstIndex the destination index register
20629       * @param dstScale the destination shift amount
20630       * @param dstDisp the destination displacement
20631       * @param srcReg the source register
20632       */
20633      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
20634      public final void emitMOV_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
20635        int miStart = mi;
20636        // no group 1 to 4 prefix byte
20637        generateREXprefix(false, srcReg, dstIndex, null);
20638        // single byte opcode
20639        setMachineCodes(mi++, (byte) 0x89);
20640        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
20641        if (lister != null) lister.RFDR(miStart, "MOV", dstIndex, dstScale, dstDisp, srcReg);
20642      }
20643    
20644      /**
20645       * Generate a absolute--register MOV. That is,
20646       * <PRE>
20647       * [dstDisp] :=  srcReg
20648       * </PRE>
20649       *
20650       * @param dstDisp the destination address
20651       * @param srcReg the source register
20652       */
20653      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
20654      public final void emitMOV_Abs_Reg(Address dstDisp, GPR srcReg) {
20655        int miStart = mi;
20656        // no group 1 to 4 prefix byte
20657        generateREXprefix(false, srcReg, null, null);
20658        // single byte opcode
20659        setMachineCodes(mi++, (byte) 0x89);
20660        emitAbsRegOperands(dstDisp, srcReg);
20661        if (lister != null) lister.RAR(miStart, "MOV", dstDisp, srcReg);
20662      }
20663    
20664      /**
20665       * Generate a register-index--register MOV. That is,
20666       * <PRE>
20667       * [dstBase + dstIndex<<dstScale + dstDisp] :=  srcReg
20668       * </PRE>
20669       *
20670       * @param dstBase the base register
20671       * @param dstIndex the destination index register
20672       * @param dstScale the destination shift amount
20673       * @param dstDisp the destination displacement
20674       * @param srcReg the source register
20675       */
20676      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
20677      public final void emitMOV_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
20678        int miStart = mi;
20679        // no group 1 to 4 prefix byte
20680        generateREXprefix(false, srcReg, dstIndex, dstBase);
20681        // single byte opcode
20682        setMachineCodes(mi++, (byte) 0x89);
20683        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
20684        if (lister != null) lister.RXDR(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, srcReg);
20685      }
20686    
20687      /**
20688       * Generate a register-displacement--register MOV. That is,
20689       * <PRE>
20690       * [dstBase + dstDisp] :=  srcReg
20691       * </PRE>
20692       *
20693       * @param dstBase the base register
20694       * @param dstDisp the destination displacement
20695       * @param srcReg the source register
20696       */
20697      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
20698      public final void emitMOV_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
20699        int miStart = mi;
20700        // no group 1 to 4 prefix byte
20701        generateREXprefix(false, srcReg, null, dstBase);
20702        // single byte opcode
20703        setMachineCodes(mi++, (byte) 0x89);
20704        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
20705        if (lister != null) lister.RDR(miStart, "MOV", dstBase, dstDisp, srcReg);
20706      }
20707    
20708      /**
20709       * Generate a register--register MOV. That is,
20710       * <PRE>
20711       * dstReg :=  srcReg
20712       * </PRE>
20713       *
20714       * @param dstReg the destination register
20715       * @param srcReg the source register
20716       */
20717      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20718      public final void emitMOV_Reg_Reg(GPR dstReg, GPR srcReg) {
20719        int miStart = mi;
20720        // no group 1 to 4 prefix byte
20721        generateREXprefix(false, srcReg, null, dstReg);
20722        // single byte opcode
20723        setMachineCodes(mi++, (byte) 0x89);
20724        emitRegRegOperands(dstReg, srcReg);
20725        if (lister != null) lister.RR(miStart, "MOV", dstReg, srcReg);
20726      }
20727    
20728      /**
20729       * Generate a register--register-displacement MOV. That is,
20730       * <PRE>
20731       * dstReg :=  [srcReg + srcDisp]
20732       * </PRE>
20733       *
20734       * @param dstReg the destination register
20735       * @param srcBase the source register
20736       * @param srcDisp the source displacement
20737       */
20738      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20739      public final void emitMOV_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
20740        int miStart = mi;
20741        // no group 1 to 4 prefix byte
20742        generateREXprefix(false, dstReg, null, srcBase);
20743        // single byte opcode
20744        setMachineCodes(mi++, (byte) 0x8B);
20745        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
20746        if (lister != null) lister.RRD(miStart, "MOV", dstReg, srcBase, srcDisp);
20747      }
20748    
20749      /**
20750       * Generate a register--register-offset MOV. That is,
20751       * <PRE>
20752       * dstReg :=  [srcIndex<<srcScale + srcDisp]
20753       * </PRE>
20754       *
20755       * @param dstReg the destination register
20756       * @param srcIndex the source index register
20757       * @param srcScale the source shift amount
20758       * @param srcDisp the source displacement
20759       */
20760      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20761      public final void emitMOV_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
20762        int miStart = mi;
20763        // no group 1 to 4 prefix byte
20764        generateREXprefix(false, dstReg, srcIndex, null);
20765        // single byte opcode
20766        setMachineCodes(mi++, (byte) 0x8B);
20767        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
20768        if (lister != null) lister.RRFD(miStart, "MOV", dstReg, srcIndex, srcScale, srcDisp);
20769      }
20770    
20771      /**
20772       * Generate a register--register-offset MOV. That is,
20773       * <PRE>
20774       * dstReg :=  [srcDisp]
20775       * </PRE>
20776       *
20777       * @param dstReg the destination register
20778       * @param srcDisp the source displacement
20779       */
20780      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
20781      public final void emitMOV_Reg_Abs(GPR dstReg, Address srcDisp) {
20782        int miStart = mi;
20783        // no group 1 to 4 prefix byte
20784        generateREXprefix(false, dstReg, null, null);
20785        // single byte opcode
20786        setMachineCodes(mi++, (byte) 0x8B);
20787        emitAbsRegOperands(srcDisp, dstReg);
20788        if (lister != null) lister.RRA(miStart, "MOV", dstReg, srcDisp);
20789      }
20790    
20791      /**
20792       * Generate a register--register-offset MOV. That is,
20793       * <PRE>
20794       * dstReg :=  [srcBase + srcIndex<<srcScale + srcDisp]
20795       * </PRE>
20796       *
20797       * @param dstReg the destination register
20798       * @param srcBase the source base register
20799       * @param srcIndex the source index register
20800       * @param srcScale the source shift amount
20801       * @param srcDisp the source displacement
20802       */
20803      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
20804      public final void emitMOV_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
20805        int miStart = mi;
20806        // no group 1 to 4 prefix byte
20807        generateREXprefix(false, dstReg, srcIndex, srcBase);
20808        // single byte opcode
20809        setMachineCodes(mi++, (byte) 0x8B);
20810        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
20811        if (lister != null) lister.RRXD(miStart, "MOV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
20812      }
20813    
20814      /**
20815       * Generate a register--register(indirect) MOV. That is,
20816       * <PRE>
20817       * dstReg :=  [srcBase]
20818       * </PRE>
20819       *
20820       * @param dstReg the destination register
20821       * @param srcBase the source base register
20822       */
20823      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20824      public final void emitMOV_Reg_RegInd(GPR dstReg, GPR srcBase) {
20825        int miStart = mi;
20826        // no group 1 to 4 prefix byte
20827        generateREXprefix(false, dstReg, null, srcBase);
20828        // single byte opcode
20829        setMachineCodes(mi++, (byte) 0x8B);
20830        emitRegIndirectRegOperands(srcBase, dstReg);
20831        if (lister != null) lister.RRN(miStart, "MOV", dstReg, srcBase);
20832      }
20833    
20834      /**
20835       * Generate a register(indirect)--register MOV. That is,
20836       * <PRE>
20837       * [dstBase] :=  (byte)  srcReg
20838       * </PRE>
20839       *
20840       * @param dstBase the destination base
20841       * @param srcReg the source register
20842       */
20843      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20844      public final void emitMOV_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
20845        int miStart = mi;
20846        // no group 1 to 4 prefix byte
20847        generateREXprefix(false, srcReg, null, dstBase);
20848        // single byte opcode
20849        setMachineCodes(mi++, (byte) 0x88);
20850        emitRegIndirectRegOperands(dstBase, srcReg);
20851        if (lister != null) lister.RNR(miStart, "MOV", dstBase, srcReg);
20852      }
20853    
20854      /**
20855       * Generate a register-offset--register MOV. That is,
20856       * <PRE>
20857       * [dstReg<<dstScale + dstDisp] :=  (byte)  srcReg
20858       * </PRE>
20859       *
20860       * @param dstIndex the destination index register
20861       * @param dstScale the destination shift amount
20862       * @param dstDisp the destination displacement
20863       * @param srcReg the source register
20864       */
20865      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
20866      public final void emitMOV_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
20867        int miStart = mi;
20868        // no group 1 to 4 prefix byte
20869        generateREXprefix(false, srcReg, dstIndex, null);
20870        // single byte opcode
20871        setMachineCodes(mi++, (byte) 0x88);
20872        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
20873        if (lister != null) lister.RFDR(miStart, "MOV", dstIndex, dstScale, dstDisp, srcReg);
20874      }
20875    
20876      /**
20877       * Generate a absolute--register MOV. That is,
20878       * <PRE>
20879       * [dstDisp] :=  (byte)  srcReg
20880       * </PRE>
20881       *
20882       * @param dstDisp the destination address
20883       * @param srcReg the source register
20884       */
20885      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
20886      public final void emitMOV_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
20887        int miStart = mi;
20888        // no group 1 to 4 prefix byte
20889        generateREXprefix(false, srcReg, null, null);
20890        // single byte opcode
20891        setMachineCodes(mi++, (byte) 0x88);
20892        emitAbsRegOperands(dstDisp, srcReg);
20893        if (lister != null) lister.RAR(miStart, "MOV", dstDisp, srcReg);
20894      }
20895    
20896      /**
20897       * Generate a register-index--register MOV. That is,
20898       * <PRE>
20899       * [dstBase + dstIndex<<dstScale + dstDisp] :=  (byte)  srcReg
20900       * </PRE>
20901       *
20902       * @param dstBase the base register
20903       * @param dstIndex the destination index register
20904       * @param dstScale the destination shift amount
20905       * @param dstDisp the destination displacement
20906       * @param srcReg the source register
20907       */
20908      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
20909      public final void emitMOV_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
20910        int miStart = mi;
20911        // no group 1 to 4 prefix byte
20912        generateREXprefix(false, srcReg, dstIndex, dstBase);
20913        // single byte opcode
20914        setMachineCodes(mi++, (byte) 0x88);
20915        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
20916        if (lister != null) lister.RXDR(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, srcReg);
20917      }
20918    
20919      /**
20920       * Generate a register-displacement--register MOV. That is,
20921       * <PRE>
20922       * [dstBase + dstDisp] :=  (byte)  srcReg
20923       * </PRE>
20924       *
20925       * @param dstBase the base register
20926       * @param dstDisp the destination displacement
20927       * @param srcReg the source register
20928       */
20929      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
20930      public final void emitMOV_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
20931        int miStart = mi;
20932        // no group 1 to 4 prefix byte
20933        generateREXprefix(false, srcReg, null, dstBase);
20934        // single byte opcode
20935        setMachineCodes(mi++, (byte) 0x88);
20936        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
20937        if (lister != null) lister.RDR(miStart, "MOV", dstBase, dstDisp, srcReg);
20938      }
20939    
20940      /**
20941       * Generate a register--register MOV. That is,
20942       * <PRE>
20943       * dstReg :=  (byte)  srcReg
20944       * </PRE>
20945       *
20946       * @param dstReg the destination register
20947       * @param srcReg the source register
20948       */
20949      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20950      public final void emitMOV_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
20951        int miStart = mi;
20952        // no group 1 to 4 prefix byte
20953        generateREXprefix(false, srcReg, null, dstReg);
20954        // single byte opcode
20955        setMachineCodes(mi++, (byte) 0x88);
20956        emitRegRegOperands(dstReg, srcReg);
20957        if (lister != null) lister.RR(miStart, "MOV", dstReg, srcReg);
20958      }
20959    
20960      /**
20961       * Generate a register--register-displacement MOV. That is,
20962       * <PRE>
20963       * dstReg :=  (byte)  [srcReg + srcDisp]
20964       * </PRE>
20965       *
20966       * @param dstReg the destination register
20967       * @param srcBase the source register
20968       * @param srcDisp the source displacement
20969       */
20970      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20971      public final void emitMOV_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
20972        int miStart = mi;
20973        // no group 1 to 4 prefix byte
20974        generateREXprefix(false, dstReg, null, srcBase);
20975        // single byte opcode
20976        setMachineCodes(mi++, (byte) 0x8A);
20977        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
20978        if (lister != null) lister.RRD(miStart, "MOV", dstReg, srcBase, srcDisp);
20979      }
20980    
20981      /**
20982       * Generate a register--register-offset MOV. That is,
20983       * <PRE>
20984       * dstReg :=  (byte)  [srcIndex<<srcScale + srcDisp]
20985       * </PRE>
20986       *
20987       * @param dstReg the destination register
20988       * @param srcIndex the source index register
20989       * @param srcScale the source shift amount
20990       * @param srcDisp the source displacement
20991       */
20992      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
20993      public final void emitMOV_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
20994        int miStart = mi;
20995        // no group 1 to 4 prefix byte
20996        generateREXprefix(false, dstReg, srcIndex, null);
20997        // single byte opcode
20998        setMachineCodes(mi++, (byte) 0x8A);
20999        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
21000        if (lister != null) lister.RRFD(miStart, "MOV", dstReg, srcIndex, srcScale, srcDisp);
21001      }
21002    
21003      /**
21004       * Generate a register--register-offset MOV. That is,
21005       * <PRE>
21006       * dstReg :=  (byte)  [srcDisp]
21007       * </PRE>
21008       *
21009       * @param dstReg the destination register
21010       * @param srcDisp the source displacement
21011       */
21012      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21013      public final void emitMOV_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
21014        int miStart = mi;
21015        // no group 1 to 4 prefix byte
21016        generateREXprefix(false, dstReg, null, null);
21017        // single byte opcode
21018        setMachineCodes(mi++, (byte) 0x8A);
21019        emitAbsRegOperands(srcDisp, dstReg);
21020        if (lister != null) lister.RRA(miStart, "MOV", dstReg, srcDisp);
21021      }
21022    
21023      /**
21024       * Generate a register--register-offset MOV. That is,
21025       * <PRE>
21026       * dstReg :=  (byte)  [srcBase + srcIndex<<srcScale + srcDisp]
21027       * </PRE>
21028       *
21029       * @param dstReg the destination register
21030       * @param srcBase the source base register
21031       * @param srcIndex the source index register
21032       * @param srcScale the source shift amount
21033       * @param srcDisp the source displacement
21034       */
21035      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
21036      public final void emitMOV_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
21037        int miStart = mi;
21038        // no group 1 to 4 prefix byte
21039        generateREXprefix(false, dstReg, srcIndex, srcBase);
21040        // single byte opcode
21041        setMachineCodes(mi++, (byte) 0x8A);
21042        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
21043        if (lister != null) lister.RRXD(miStart, "MOV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
21044      }
21045    
21046      /**
21047       * Generate a register--register(indirect) MOV. That is,
21048       * <PRE>
21049       * dstReg :=  (byte)  [srcBase]
21050       * </PRE>
21051       *
21052       * @param dstReg the destination register
21053       * @param srcBase the source base register
21054       */
21055      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21056      public final void emitMOV_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
21057        int miStart = mi;
21058        // no group 1 to 4 prefix byte
21059        generateREXprefix(false, dstReg, null, srcBase);
21060        // single byte opcode
21061        setMachineCodes(mi++, (byte) 0x8A);
21062        emitRegIndirectRegOperands(srcBase, dstReg);
21063        if (lister != null) lister.RRN(miStart, "MOV", dstReg, srcBase);
21064      }
21065    
21066      /**
21067       * Generate a register(indirect)--register MOV. That is,
21068       * <PRE>
21069       * [dstBase] :=  (word)  srcReg
21070       * </PRE>
21071       *
21072       * @param dstBase the destination base
21073       * @param srcReg the source register
21074       */
21075      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21076      public final void emitMOV_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
21077        int miStart = mi;
21078        setMachineCodes(mi++, (byte) 0x66);
21079        generateREXprefix(false, srcReg, null, dstBase);
21080        // single byte opcode
21081        setMachineCodes(mi++, (byte) 0x89);
21082        emitRegIndirectRegOperands(dstBase, srcReg);
21083        if (lister != null) lister.RNR(miStart, "MOV", dstBase, srcReg);
21084      }
21085    
21086      /**
21087       * Generate a register-offset--register MOV. That is,
21088       * <PRE>
21089       * [dstReg<<dstScale + dstDisp] :=  (word)  srcReg
21090       * </PRE>
21091       *
21092       * @param dstIndex the destination index register
21093       * @param dstScale the destination shift amount
21094       * @param dstDisp the destination displacement
21095       * @param srcReg the source register
21096       */
21097      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
21098      public final void emitMOV_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
21099        int miStart = mi;
21100        setMachineCodes(mi++, (byte) 0x66);
21101        generateREXprefix(false, srcReg, dstIndex, null);
21102        // single byte opcode
21103        setMachineCodes(mi++, (byte) 0x89);
21104        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
21105        if (lister != null) lister.RFDR(miStart, "MOV", dstIndex, dstScale, dstDisp, srcReg);
21106      }
21107    
21108      /**
21109       * Generate a absolute--register MOV. That is,
21110       * <PRE>
21111       * [dstDisp] :=  (word)  srcReg
21112       * </PRE>
21113       *
21114       * @param dstDisp the destination address
21115       * @param srcReg the source register
21116       */
21117      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
21118      public final void emitMOV_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
21119        int miStart = mi;
21120        setMachineCodes(mi++, (byte) 0x66);
21121        generateREXprefix(false, srcReg, null, null);
21122        // single byte opcode
21123        setMachineCodes(mi++, (byte) 0x89);
21124        emitAbsRegOperands(dstDisp, srcReg);
21125        if (lister != null) lister.RAR(miStart, "MOV", dstDisp, srcReg);
21126      }
21127    
21128      /**
21129       * Generate a register-index--register MOV. That is,
21130       * <PRE>
21131       * [dstBase + dstIndex<<dstScale + dstDisp] :=  (word)  srcReg
21132       * </PRE>
21133       *
21134       * @param dstBase the base register
21135       * @param dstIndex the destination index register
21136       * @param dstScale the destination shift amount
21137       * @param dstDisp the destination displacement
21138       * @param srcReg the source register
21139       */
21140      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
21141      public final void emitMOV_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
21142        int miStart = mi;
21143        setMachineCodes(mi++, (byte) 0x66);
21144        generateREXprefix(false, srcReg, dstIndex, dstBase);
21145        // single byte opcode
21146        setMachineCodes(mi++, (byte) 0x89);
21147        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
21148        if (lister != null) lister.RXDR(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, srcReg);
21149      }
21150    
21151      /**
21152       * Generate a register-displacement--register MOV. That is,
21153       * <PRE>
21154       * [dstBase + dstDisp] :=  (word)  srcReg
21155       * </PRE>
21156       *
21157       * @param dstBase the base register
21158       * @param dstDisp the destination displacement
21159       * @param srcReg the source register
21160       */
21161      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
21162      public final void emitMOV_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
21163        int miStart = mi;
21164        setMachineCodes(mi++, (byte) 0x66);
21165        generateREXprefix(false, srcReg, null, dstBase);
21166        // single byte opcode
21167        setMachineCodes(mi++, (byte) 0x89);
21168        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
21169        if (lister != null) lister.RDR(miStart, "MOV", dstBase, dstDisp, srcReg);
21170      }
21171    
21172      /**
21173       * Generate a register--register MOV. That is,
21174       * <PRE>
21175       * dstReg :=  (word)  srcReg
21176       * </PRE>
21177       *
21178       * @param dstReg the destination register
21179       * @param srcReg the source register
21180       */
21181      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21182      public final void emitMOV_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
21183        int miStart = mi;
21184        setMachineCodes(mi++, (byte) 0x66);
21185        generateREXprefix(false, srcReg, null, dstReg);
21186        // single byte opcode
21187        setMachineCodes(mi++, (byte) 0x89);
21188        emitRegRegOperands(dstReg, srcReg);
21189        if (lister != null) lister.RR(miStart, "MOV", dstReg, srcReg);
21190      }
21191    
21192      /**
21193       * Generate a register--register-displacement MOV. That is,
21194       * <PRE>
21195       * dstReg :=  (word)  [srcReg + srcDisp]
21196       * </PRE>
21197       *
21198       * @param dstReg the destination register
21199       * @param srcBase the source register
21200       * @param srcDisp the source displacement
21201       */
21202      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21203      public final void emitMOV_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
21204        int miStart = mi;
21205        setMachineCodes(mi++, (byte) 0x66);
21206        generateREXprefix(false, dstReg, null, srcBase);
21207        // single byte opcode
21208        setMachineCodes(mi++, (byte) 0x8B);
21209        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
21210        if (lister != null) lister.RRD(miStart, "MOV", dstReg, srcBase, srcDisp);
21211      }
21212    
21213      /**
21214       * Generate a register--register-offset MOV. That is,
21215       * <PRE>
21216       * dstReg :=  (word)  [srcIndex<<srcScale + srcDisp]
21217       * </PRE>
21218       *
21219       * @param dstReg the destination register
21220       * @param srcIndex the source index register
21221       * @param srcScale the source shift amount
21222       * @param srcDisp the source displacement
21223       */
21224      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21225      public final void emitMOV_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
21226        int miStart = mi;
21227        setMachineCodes(mi++, (byte) 0x66);
21228        generateREXprefix(false, dstReg, srcIndex, null);
21229        // single byte opcode
21230        setMachineCodes(mi++, (byte) 0x8B);
21231        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
21232        if (lister != null) lister.RRFD(miStart, "MOV", dstReg, srcIndex, srcScale, srcDisp);
21233      }
21234    
21235      /**
21236       * Generate a register--register-offset MOV. That is,
21237       * <PRE>
21238       * dstReg :=  (word)  [srcDisp]
21239       * </PRE>
21240       *
21241       * @param dstReg the destination register
21242       * @param srcDisp the source displacement
21243       */
21244      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21245      public final void emitMOV_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
21246        int miStart = mi;
21247        setMachineCodes(mi++, (byte) 0x66);
21248        generateREXprefix(false, dstReg, null, null);
21249        // single byte opcode
21250        setMachineCodes(mi++, (byte) 0x8B);
21251        emitAbsRegOperands(srcDisp, dstReg);
21252        if (lister != null) lister.RRA(miStart, "MOV", dstReg, srcDisp);
21253      }
21254    
21255      /**
21256       * Generate a register--register-offset MOV. That is,
21257       * <PRE>
21258       * dstReg :=  (word)  [srcBase + srcIndex<<srcScale + srcDisp]
21259       * </PRE>
21260       *
21261       * @param dstReg the destination register
21262       * @param srcBase the source base register
21263       * @param srcIndex the source index register
21264       * @param srcScale the source shift amount
21265       * @param srcDisp the source displacement
21266       */
21267      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
21268      public final void emitMOV_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
21269        int miStart = mi;
21270        setMachineCodes(mi++, (byte) 0x66);
21271        generateREXprefix(false, dstReg, srcIndex, srcBase);
21272        // single byte opcode
21273        setMachineCodes(mi++, (byte) 0x8B);
21274        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
21275        if (lister != null) lister.RRXD(miStart, "MOV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
21276      }
21277    
21278      /**
21279       * Generate a register--register(indirect) MOV. That is,
21280       * <PRE>
21281       * dstReg :=  (word)  [srcBase]
21282       * </PRE>
21283       *
21284       * @param dstReg the destination register
21285       * @param srcBase the source base register
21286       */
21287      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21288      public final void emitMOV_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
21289        int miStart = mi;
21290        setMachineCodes(mi++, (byte) 0x66);
21291        generateREXprefix(false, dstReg, null, srcBase);
21292        // single byte opcode
21293        setMachineCodes(mi++, (byte) 0x8B);
21294        emitRegIndirectRegOperands(srcBase, dstReg);
21295        if (lister != null) lister.RRN(miStart, "MOV", dstReg, srcBase);
21296      }
21297    
21298      /**
21299       * Generate a register(indirect)--register MOV. That is,
21300       * <PRE>
21301       * [dstBase] :=  (quad)  srcReg
21302       * </PRE>
21303       *
21304       * @param dstBase the destination base
21305       * @param srcReg the source register
21306       */
21307      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21308      public final void emitMOV_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
21309        int miStart = mi;
21310        // no group 1 to 4 prefix byte
21311        generateREXprefix(true, srcReg, null, dstBase);
21312        // single byte opcode
21313        setMachineCodes(mi++, (byte) 0x89);
21314        emitRegIndirectRegOperands(dstBase, srcReg);
21315        if (lister != null) lister.RNR(miStart, "MOV", dstBase, srcReg);
21316      }
21317    
21318      /**
21319       * Generate a register-offset--register MOV. That is,
21320       * <PRE>
21321       * [dstReg<<dstScale + dstDisp] :=  (quad)  srcReg
21322       * </PRE>
21323       *
21324       * @param dstIndex the destination index register
21325       * @param dstScale the destination shift amount
21326       * @param dstDisp the destination displacement
21327       * @param srcReg the source register
21328       */
21329      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
21330      public final void emitMOV_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
21331        int miStart = mi;
21332        // no group 1 to 4 prefix byte
21333        generateREXprefix(true, srcReg, dstIndex, null);
21334        // single byte opcode
21335        setMachineCodes(mi++, (byte) 0x89);
21336        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
21337        if (lister != null) lister.RFDR(miStart, "MOV", dstIndex, dstScale, dstDisp, srcReg);
21338      }
21339    
21340      /**
21341       * Generate a absolute--register MOV. That is,
21342       * <PRE>
21343       * [dstDisp] :=  (quad)  srcReg
21344       * </PRE>
21345       *
21346       * @param dstDisp the destination address
21347       * @param srcReg the source register
21348       */
21349      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
21350      public final void emitMOV_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
21351        int miStart = mi;
21352        // no group 1 to 4 prefix byte
21353        generateREXprefix(true, srcReg, null, null);
21354        // single byte opcode
21355        setMachineCodes(mi++, (byte) 0x89);
21356        emitAbsRegOperands(dstDisp, srcReg);
21357        if (lister != null) lister.RAR(miStart, "MOV", dstDisp, srcReg);
21358      }
21359    
21360      /**
21361       * Generate a register-index--register MOV. That is,
21362       * <PRE>
21363       * [dstBase + dstIndex<<dstScale + dstDisp] :=  (quad)  srcReg
21364       * </PRE>
21365       *
21366       * @param dstBase the base register
21367       * @param dstIndex the destination index register
21368       * @param dstScale the destination shift amount
21369       * @param dstDisp the destination displacement
21370       * @param srcReg the source register
21371       */
21372      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
21373      public final void emitMOV_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
21374        int miStart = mi;
21375        // no group 1 to 4 prefix byte
21376        generateREXprefix(true, srcReg, dstIndex, dstBase);
21377        // single byte opcode
21378        setMachineCodes(mi++, (byte) 0x89);
21379        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
21380        if (lister != null) lister.RXDR(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, srcReg);
21381      }
21382    
21383      /**
21384       * Generate a register-displacement--register MOV. That is,
21385       * <PRE>
21386       * [dstBase + dstDisp] :=  (quad)  srcReg
21387       * </PRE>
21388       *
21389       * @param dstBase the base register
21390       * @param dstDisp the destination displacement
21391       * @param srcReg the source register
21392       */
21393      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
21394      public final void emitMOV_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
21395        int miStart = mi;
21396        // no group 1 to 4 prefix byte
21397        generateREXprefix(true, srcReg, null, dstBase);
21398        // single byte opcode
21399        setMachineCodes(mi++, (byte) 0x89);
21400        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
21401        if (lister != null) lister.RDR(miStart, "MOV", dstBase, dstDisp, srcReg);
21402      }
21403    
21404      /**
21405       * Generate a register--register MOV. That is,
21406       * <PRE>
21407       * dstReg :=  (quad)  srcReg
21408       * </PRE>
21409       *
21410       * @param dstReg the destination register
21411       * @param srcReg the source register
21412       */
21413      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21414      public final void emitMOV_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
21415        int miStart = mi;
21416        // no group 1 to 4 prefix byte
21417        generateREXprefix(true, srcReg, null, dstReg);
21418        // single byte opcode
21419        setMachineCodes(mi++, (byte) 0x89);
21420        emitRegRegOperands(dstReg, srcReg);
21421        if (lister != null) lister.RR(miStart, "MOV", dstReg, srcReg);
21422      }
21423    
21424      /**
21425       * Generate a register--register-displacement MOV. That is,
21426       * <PRE>
21427       * dstReg :=  (quad)  [srcReg + srcDisp]
21428       * </PRE>
21429       *
21430       * @param dstReg the destination register
21431       * @param srcBase the source register
21432       * @param srcDisp the source displacement
21433       */
21434      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21435      public final void emitMOV_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
21436        int miStart = mi;
21437        // no group 1 to 4 prefix byte
21438        generateREXprefix(true, dstReg, null, srcBase);
21439        // single byte opcode
21440        setMachineCodes(mi++, (byte) 0x8B);
21441        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
21442        if (lister != null) lister.RRD(miStart, "MOV", dstReg, srcBase, srcDisp);
21443      }
21444    
21445      /**
21446       * Generate a register--register-offset MOV. That is,
21447       * <PRE>
21448       * dstReg :=  (quad)  [srcIndex<<srcScale + srcDisp]
21449       * </PRE>
21450       *
21451       * @param dstReg the destination register
21452       * @param srcIndex the source index register
21453       * @param srcScale the source shift amount
21454       * @param srcDisp the source displacement
21455       */
21456      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21457      public final void emitMOV_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
21458        int miStart = mi;
21459        // no group 1 to 4 prefix byte
21460        generateREXprefix(true, dstReg, srcIndex, null);
21461        // single byte opcode
21462        setMachineCodes(mi++, (byte) 0x8B);
21463        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
21464        if (lister != null) lister.RRFD(miStart, "MOV", dstReg, srcIndex, srcScale, srcDisp);
21465      }
21466    
21467      /**
21468       * Generate a register--register-offset MOV. That is,
21469       * <PRE>
21470       * dstReg :=  (quad)  [srcDisp]
21471       * </PRE>
21472       *
21473       * @param dstReg the destination register
21474       * @param srcDisp the source displacement
21475       */
21476      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21477      public final void emitMOV_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
21478        int miStart = mi;
21479        // no group 1 to 4 prefix byte
21480        generateREXprefix(true, dstReg, null, null);
21481        // single byte opcode
21482        setMachineCodes(mi++, (byte) 0x8B);
21483        emitAbsRegOperands(srcDisp, dstReg);
21484        if (lister != null) lister.RRA(miStart, "MOV", dstReg, srcDisp);
21485      }
21486    
21487      /**
21488       * Generate a register--register-offset MOV. That is,
21489       * <PRE>
21490       * dstReg :=  (quad)  [srcBase + srcIndex<<srcScale + srcDisp]
21491       * </PRE>
21492       *
21493       * @param dstReg the destination register
21494       * @param srcBase the source base register
21495       * @param srcIndex the source index register
21496       * @param srcScale the source shift amount
21497       * @param srcDisp the source displacement
21498       */
21499      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
21500      public final void emitMOV_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
21501        int miStart = mi;
21502        // no group 1 to 4 prefix byte
21503        generateREXprefix(true, dstReg, srcIndex, srcBase);
21504        // single byte opcode
21505        setMachineCodes(mi++, (byte) 0x8B);
21506        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
21507        if (lister != null) lister.RRXD(miStart, "MOV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
21508      }
21509    
21510      /**
21511       * Generate a register--register(indirect) MOV. That is,
21512       * <PRE>
21513       * dstReg :=  (quad)  [srcBase]
21514       * </PRE>
21515       *
21516       * @param dstReg the destination register
21517       * @param srcBase the source base register
21518       */
21519      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21520      public final void emitMOV_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
21521        int miStart = mi;
21522        // no group 1 to 4 prefix byte
21523        generateREXprefix(true, dstReg, null, srcBase);
21524        // single byte opcode
21525        setMachineCodes(mi++, (byte) 0x8B);
21526        emitRegIndirectRegOperands(srcBase, dstReg);
21527        if (lister != null) lister.RRN(miStart, "MOV", dstReg, srcBase);
21528      }
21529    
21530      /**
21531       * Generate a register-indirect--immediate MOV. That is,
21532       * <PRE>
21533       * [dstBase] MOV = imm
21534       * </PRE>
21535       *
21536       * @param dstBase the destination base register
21537       * @param imm immediate
21538       */
21539      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21540      public final void emitMOV_RegInd_Imm_Byte(GPR dstBase, int imm) {
21541        int miStart = mi;
21542        // no prefix byte
21543        generateREXprefix(false, null, null, dstBase);
21544        setMachineCodes(mi++, (byte) 0xC6);
21545        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
21546        emitImm8(imm);
21547        if (lister != null) lister.RNI(miStart, "MOV", dstBase, imm);
21548      }
21549    
21550      /**
21551       * Generate a register-displacement--immediate MOV. That is,
21552       * <PRE>
21553       * [dstBase + dstDisp] MOV = imm
21554       * </PRE>
21555       *
21556       * @param dstBase the destination base register
21557       * @param dstDisp the destination displacement
21558       * @param imm immediate
21559       */
21560      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21561      public final void emitMOV_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
21562        int miStart = mi;
21563        // no prefix byte
21564        generateREXprefix(false, null, null, dstBase);
21565        setMachineCodes(mi++, (byte) 0xC6);
21566        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
21567        emitImm8(imm);
21568        if (lister != null) lister.RDI(miStart, "MOV", dstBase, dstDisp, imm);
21569      }
21570    
21571      /**
21572       * Generate a register-index--immediate MOV. That is,
21573       * <PRE>
21574       * [dstBase + dstIndex<<scale + dstDisp] MOV = imm
21575       * </PRE>
21576       *
21577       * @param dstBase the destination base register
21578       * @param dstIndex the destination index register
21579       * @param dstScale the destination shift amount
21580       * @param dstDisp the destination displacement
21581       * @param imm immediate
21582       */
21583      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21584      public final void emitMOV_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
21585        int miStart = mi;
21586        // no prefix byte
21587        generateREXprefix(false, null, dstIndex, dstBase);
21588        setMachineCodes(mi++, (byte) 0xC6);
21589        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
21590        emitImm8(imm);
21591        if (lister != null) lister.RXDI(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, imm);
21592      }
21593    
21594      /**
21595       * Generate a register-index--immediate MOV. That is,
21596       * <PRE>
21597       * [dstIndex<<scale + dstDisp] MOV = imm
21598       * </PRE>
21599       *
21600       * @param dstIndex the destination index register
21601       * @param dstScale the destination shift amount
21602       * @param dstDisp the destination displacement
21603       * @param imm immediate
21604       */
21605      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21606      public final void emitMOV_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
21607        int miStart = mi;
21608        // no prefix byte
21609        generateREXprefix(false, null, dstIndex, null);
21610        setMachineCodes(mi++, (byte) 0xC6);
21611        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
21612        emitImm8(imm);
21613        if (lister != null) lister.RFDI(miStart, "MOV", dstIndex, dstScale, dstDisp, imm);
21614      }
21615    
21616      /**
21617       * Generate an absolute MOV. That is,
21618       * <PRE>
21619       * [dstDisp] MOV = imm
21620       * </PRE>
21621       *
21622       * @param dstDisp the destination displacement
21623       * @param imm immediate
21624       */
21625      public final void emitMOV_Abs_Imm_Byte(Address dstDisp, int imm) {
21626        int miStart = mi;
21627        // no prefix byte
21628        generateREXprefix(false, null, null, null);
21629        setMachineCodes(mi++, (byte) 0xC6);
21630        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
21631        emitImm8(imm);
21632        if (lister != null) lister.RAI(miStart, "MOV", dstDisp, imm);
21633      }
21634    
21635      /**
21636       * Generate a register-indirect--immediate MOV. That is,
21637       * <PRE>
21638       * [dstBase] MOV = imm
21639       * </PRE>
21640       *
21641       * @param dstBase the destination base register
21642       * @param imm immediate
21643       */
21644      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21645      public final void emitMOV_RegInd_Imm_Word(GPR dstBase, int imm) {
21646        int miStart = mi;
21647        setMachineCodes(mi++, (byte) 0x66);
21648        generateREXprefix(false, null, null, dstBase);
21649        setMachineCodes(mi++, (byte) 0xC7);
21650        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
21651        emitImm16(imm);
21652        if (lister != null) lister.RNI(miStart, "MOV", dstBase, imm);
21653      }
21654    
21655      /**
21656       * Generate a register-displacement--immediate MOV. That is,
21657       * <PRE>
21658       * [dstBase + dstDisp] MOV = imm
21659       * </PRE>
21660       *
21661       * @param dstBase the destination base register
21662       * @param dstDisp the destination displacement
21663       * @param imm immediate
21664       */
21665      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21666      public final void emitMOV_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
21667        int miStart = mi;
21668        setMachineCodes(mi++, (byte) 0x66);
21669        generateREXprefix(false, null, null, dstBase);
21670        setMachineCodes(mi++, (byte) 0xC7);
21671        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
21672        emitImm16(imm);
21673        if (lister != null) lister.RDI(miStart, "MOV", dstBase, dstDisp, imm);
21674      }
21675    
21676      /**
21677       * Generate a register-index--immediate MOV. That is,
21678       * <PRE>
21679       * [dstBase + dstIndex<<scale + dstDisp] MOV = imm
21680       * </PRE>
21681       *
21682       * @param dstBase the destination base register
21683       * @param dstIndex the destination index register
21684       * @param dstScale the destination shift amount
21685       * @param dstDisp the destination displacement
21686       * @param imm immediate
21687       */
21688      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21689      public final void emitMOV_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
21690        int miStart = mi;
21691        setMachineCodes(mi++, (byte) 0x66);
21692        generateREXprefix(false, null, dstIndex, dstBase);
21693        setMachineCodes(mi++, (byte) 0xC7);
21694        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
21695        emitImm16(imm);
21696        if (lister != null) lister.RXDI(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, imm);
21697      }
21698    
21699      /**
21700       * Generate a register-index--immediate MOV. That is,
21701       * <PRE>
21702       * [dstIndex<<scale + dstDisp] MOV = imm
21703       * </PRE>
21704       *
21705       * @param dstIndex the destination index register
21706       * @param dstScale the destination shift amount
21707       * @param dstDisp the destination displacement
21708       * @param imm immediate
21709       */
21710      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21711      public final void emitMOV_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
21712        int miStart = mi;
21713        setMachineCodes(mi++, (byte) 0x66);
21714        generateREXprefix(false, null, dstIndex, null);
21715        setMachineCodes(mi++, (byte) 0xC7);
21716        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
21717        emitImm16(imm);
21718        if (lister != null) lister.RFDI(miStart, "MOV", dstIndex, dstScale, dstDisp, imm);
21719      }
21720    
21721      /**
21722       * Generate an absolute MOV. That is,
21723       * <PRE>
21724       * [dstDisp] MOV = imm
21725       * </PRE>
21726       *
21727       * @param dstDisp the destination displacement
21728       * @param imm immediate
21729       */
21730      public final void emitMOV_Abs_Imm_Word(Address dstDisp, int imm) {
21731        int miStart = mi;
21732        setMachineCodes(mi++, (byte) 0x66);
21733        generateREXprefix(false, null, null, null);
21734        setMachineCodes(mi++, (byte) 0xC7);
21735        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
21736        emitImm16(imm);
21737        if (lister != null) lister.RAI(miStart, "MOV", dstDisp, imm);
21738      }
21739    
21740      /**
21741       * Generate a register-indirect--immediate MOV. That is,
21742       * <PRE>
21743       * [dstBase] MOV = imm
21744       * </PRE>
21745       *
21746       * @param dstBase the destination base register
21747       * @param imm immediate
21748       */
21749      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21750      public final void emitMOV_RegInd_Imm(GPR dstBase, int imm) {
21751        int miStart = mi;
21752        // no prefix byte
21753        generateREXprefix(false, null, null, dstBase);
21754        setMachineCodes(mi++, (byte) 0xC7);
21755        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
21756        emitImm32(imm);
21757        if (lister != null) lister.RNI(miStart, "MOV", dstBase, imm);
21758      }
21759    
21760      /**
21761       * Generate a register-displacement--immediate MOV. That is,
21762       * <PRE>
21763       * [dstBase + dstDisp] MOV = imm
21764       * </PRE>
21765       *
21766       * @param dstBase the destination base register
21767       * @param dstDisp the destination displacement
21768       * @param imm immediate
21769       */
21770      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21771      public final void emitMOV_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
21772        int miStart = mi;
21773        // no prefix byte
21774        generateREXprefix(false, null, null, dstBase);
21775        setMachineCodes(mi++, (byte) 0xC7);
21776        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
21777        emitImm32(imm);
21778        if (lister != null) lister.RDI(miStart, "MOV", dstBase, dstDisp, imm);
21779      }
21780    
21781      /**
21782       * Generate a register-index--immediate MOV. That is,
21783       * <PRE>
21784       * [dstBase + dstIndex<<scale + dstDisp] MOV = imm
21785       * </PRE>
21786       *
21787       * @param dstBase the destination base register
21788       * @param dstIndex the destination index register
21789       * @param dstScale the destination shift amount
21790       * @param dstDisp the destination displacement
21791       * @param imm immediate
21792       */
21793      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21794      public final void emitMOV_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
21795        int miStart = mi;
21796        // no prefix byte
21797        generateREXprefix(false, null, dstIndex, dstBase);
21798        setMachineCodes(mi++, (byte) 0xC7);
21799        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
21800        emitImm32(imm);
21801        if (lister != null) lister.RXDI(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, imm);
21802      }
21803    
21804      /**
21805       * Generate a register-index--immediate MOV. That is,
21806       * <PRE>
21807       * [dstIndex<<scale + dstDisp] MOV = imm
21808       * </PRE>
21809       *
21810       * @param dstIndex the destination index register
21811       * @param dstScale the destination shift amount
21812       * @param dstDisp the destination displacement
21813       * @param imm immediate
21814       */
21815      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21816      public final void emitMOV_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
21817        int miStart = mi;
21818        // no prefix byte
21819        generateREXprefix(false, null, dstIndex, null);
21820        setMachineCodes(mi++, (byte) 0xC7);
21821        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
21822        emitImm32(imm);
21823        if (lister != null) lister.RFDI(miStart, "MOV", dstIndex, dstScale, dstDisp, imm);
21824      }
21825    
21826      /**
21827       * Generate an absolute MOV. That is,
21828       * <PRE>
21829       * [dstDisp] MOV = imm
21830       * </PRE>
21831       *
21832       * @param dstDisp the destination displacement
21833       * @param imm immediate
21834       */
21835      public final void emitMOV_Abs_Imm(Address dstDisp, int imm) {
21836        int miStart = mi;
21837        // no prefix byte
21838        generateREXprefix(false, null, null, null);
21839        setMachineCodes(mi++, (byte) 0xC7);
21840        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
21841        emitImm32(imm);
21842        if (lister != null) lister.RAI(miStart, "MOV", dstDisp, imm);
21843      }
21844    
21845      /**
21846       * Generate a register-indirect--immediate MOV. That is,
21847       * <PRE>
21848       * [dstBase] MOV = imm
21849       * </PRE>
21850       *
21851       * @param dstBase the destination base register
21852       * @param imm immediate
21853       */
21854      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21855      public final void emitMOV_RegInd_Imm_Quad(GPR dstBase, int imm) {
21856        int miStart = mi;
21857        // no prefix byte
21858        generateREXprefix(true, null, null, dstBase);
21859        setMachineCodes(mi++, (byte) 0xC7);
21860        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
21861        emitImm32(imm);
21862        if (lister != null) lister.RNI(miStart, "MOV", dstBase, imm);
21863      }
21864    
21865      /**
21866       * Generate a register-displacement--immediate MOV. That is,
21867       * <PRE>
21868       * [dstBase + dstDisp] MOV = imm
21869       * </PRE>
21870       *
21871       * @param dstBase the destination base register
21872       * @param dstDisp the destination displacement
21873       * @param imm immediate
21874       */
21875      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21876      public final void emitMOV_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
21877        int miStart = mi;
21878        // no prefix byte
21879        generateREXprefix(true, null, null, dstBase);
21880        setMachineCodes(mi++, (byte) 0xC7);
21881        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
21882        emitImm32(imm);
21883        if (lister != null) lister.RDI(miStart, "MOV", dstBase, dstDisp, imm);
21884      }
21885    
21886      /**
21887       * Generate a register-index--immediate MOV. That is,
21888       * <PRE>
21889       * [dstBase + dstIndex<<scale + dstDisp] MOV = imm
21890       * </PRE>
21891       *
21892       * @param dstBase the destination base register
21893       * @param dstIndex the destination index register
21894       * @param dstScale the destination shift amount
21895       * @param dstDisp the destination displacement
21896       * @param imm immediate
21897       */
21898      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21899      public final void emitMOV_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
21900        int miStart = mi;
21901        // no prefix byte
21902        generateREXprefix(true, null, dstIndex, dstBase);
21903        setMachineCodes(mi++, (byte) 0xC7);
21904        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
21905        emitImm32(imm);
21906        if (lister != null) lister.RXDI(miStart, "MOV", dstBase, dstIndex, dstScale, dstDisp, imm);
21907      }
21908    
21909      /**
21910       * Generate a register-index--immediate MOV. That is,
21911       * <PRE>
21912       * [dstIndex<<scale + dstDisp] MOV = imm
21913       * </PRE>
21914       *
21915       * @param dstIndex the destination index register
21916       * @param dstScale the destination shift amount
21917       * @param dstDisp the destination displacement
21918       * @param imm immediate
21919       */
21920      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
21921      public final void emitMOV_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
21922        int miStart = mi;
21923        // no prefix byte
21924        generateREXprefix(true, null, dstIndex, null);
21925        setMachineCodes(mi++, (byte) 0xC7);
21926        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
21927        emitImm32(imm);
21928        if (lister != null) lister.RFDI(miStart, "MOV", dstIndex, dstScale, dstDisp, imm);
21929      }
21930    
21931      /**
21932       * Generate an absolute MOV. That is,
21933       * <PRE>
21934       * [dstDisp] MOV = imm
21935       * </PRE>
21936       *
21937       * @param dstDisp the destination displacement
21938       * @param imm immediate
21939       */
21940      public final void emitMOV_Abs_Imm_Quad(Address dstDisp, int imm) {
21941        int miStart = mi;
21942        // no prefix byte
21943        generateREXprefix(true, null, null, null);
21944        setMachineCodes(mi++, (byte) 0xC7);
21945        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
21946        emitImm32(imm);
21947        if (lister != null) lister.RAI(miStart, "MOV", dstDisp, imm);
21948      }
21949    
21950      /**
21951       * Generate a move sign extended from register. That is,
21952       * <PRE>
21953       * dstReg := (byte) srcReg (sign extended)
21954       * </PRE>
21955       *
21956       * @param dstReg the destination register
21957       * @param srcReg the source register
21958       */
21959      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21960      public final void emitMOVSX_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
21961        int miStart = mi;
21962        generateREXprefix(false, dstReg, null, srcReg);
21963        setMachineCodes(mi++, (byte) 0x0F);
21964        setMachineCodes(mi++, (byte) 0xBE);
21965        emitRegRegOperands(srcReg, dstReg);
21966        if (lister != null) lister.RR(miStart, "MOVSX", dstReg, srcReg);
21967      }
21968    
21969      /**
21970       * Generate a move sign extended from register displacement. That is,
21971       * <PRE>
21972       * dstReg := (byte) [srcBase + srcDisp] (sign extended)
21973       * </PRE>
21974       *
21975       * @param dstReg the destination register
21976       * @param srcBase the source base register
21977       * @param srcDisp the source displacement
21978       */
21979      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21980      public final void emitMOVSX_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
21981        int miStart = mi;
21982        generateREXprefix(false, dstReg, null, srcBase);
21983        setMachineCodes(mi++, (byte) 0x0F);
21984        setMachineCodes(mi++, (byte) 0xBE);
21985        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
21986        if (lister != null) lister.RRD(miStart, "MOVSX", dstReg, srcBase, srcDisp);
21987      }
21988    
21989      /**
21990       * Generate a move sign extended from register indirect. That is,
21991       * <PRE>
21992       * dstReg := (byte) [srcBase] (sign extended)
21993       * </PRE>
21994       *
21995       * @param dstReg the destination register
21996       * @param srcBase the source base register
21997       */
21998      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
21999      public final void emitMOVSX_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
22000        int miStart = mi;
22001        generateREXprefix(false, dstReg, null, srcBase);
22002        setMachineCodes(mi++, (byte) 0x0F);
22003        setMachineCodes(mi++, (byte) 0xBE);
22004        emitRegIndirectRegOperands(srcBase, dstReg);
22005        if (lister != null) lister.RRN(miStart, "MOVSX", dstReg, srcBase);
22006      }
22007    
22008      /**
22009       * Generate a move sign extended from register offset. That is,
22010       * <PRE>
22011       * dstReg := (byte) [srcIndex<<srcScale + srcDisp] (sign extended)
22012       * </PRE>
22013       *
22014       * @param dstReg the destination register
22015       * @param srcIndex the source index register
22016       * @param srcScale the source scale of the index
22017       * @param srcDisp the source displacement
22018       */
22019      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22020      public final void emitMOVSX_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
22021        int miStart = mi;
22022        generateREXprefix(false, dstReg, srcIndex, null);
22023        setMachineCodes(mi++, (byte) 0x0F);
22024        setMachineCodes(mi++, (byte) 0xBE);
22025        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
22026        if (lister != null) lister.RRFD(miStart, "MOVSX", dstReg, srcIndex, srcScale, srcDisp);
22027      }
22028    
22029      /**
22030       * Generate a move sign extended from an absolute address. That is,
22031       * <PRE>
22032       * dstReg := (byte) [srcDisp] (sign extended)
22033       * </PRE>
22034       *
22035       * @param dstReg the destination register
22036       * @param srcDisp the source displacement
22037       */
22038      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
22039      public final void emitMOVSX_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
22040        int miStart = mi;
22041        generateREXprefix(false, dstReg, null, null);
22042        setMachineCodes(mi++, (byte) 0x0F);
22043        setMachineCodes(mi++, (byte) 0xBE);
22044        emitAbsRegOperands(srcDisp, dstReg);
22045        if (lister != null) lister.RRA(miStart, "MOVSX", dstReg, srcDisp);
22046      }
22047    
22048      /**
22049       * Generate a move sign extended by register indexed. That is,
22050       * <PRE>
22051       * dstReg := (byte) [srcBase + srcIndex<<srcScale + srcDisp] (sign extended)
22052       * </PRE>
22053       *
22054       * @param dstReg the destination register
22055       * @param srcBase the source base register
22056       * @param srcIndex the source index register
22057       * @param srcScale the source scale of the index
22058       * @param srcDisp the source displacement
22059       */
22060      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
22061      public final void emitMOVSX_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
22062        int miStart = mi;
22063        generateREXprefix(false, dstReg, srcIndex, srcBase);
22064        setMachineCodes(mi++, (byte) 0x0F);
22065        setMachineCodes(mi++, (byte) 0xBE);
22066        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
22067        if (lister != null) lister.RRXD(miStart, "MOVSX", dstReg, srcBase, srcIndex, srcScale, srcDisp);
22068      }
22069    
22070      /**
22071       * Generate a move sign extended from register. That is,
22072       * <PRE>
22073       * dstReg := (word) srcReg (sign extended)
22074       * </PRE>
22075       *
22076       * @param dstReg the destination register
22077       * @param srcReg the source register
22078       */
22079      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22080      public final void emitMOVSX_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
22081        int miStart = mi;
22082        generateREXprefix(false, dstReg, null, srcReg);
22083        setMachineCodes(mi++, (byte) 0x0F);
22084        setMachineCodes(mi++, (byte) 0xBF);
22085        emitRegRegOperands(srcReg, dstReg);
22086        if (lister != null) lister.RR(miStart, "MOVSX", dstReg, srcReg);
22087      }
22088    
22089      /**
22090       * Generate a move sign extended from register displacement. That is,
22091       * <PRE>
22092       * dstReg := (word) [srcBase + srcDisp] (sign extended)
22093       * </PRE>
22094       *
22095       * @param dstReg the destination register
22096       * @param srcBase the source base register
22097       * @param srcDisp the source displacement
22098       */
22099      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22100      public final void emitMOVSX_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
22101        int miStart = mi;
22102        generateREXprefix(false, dstReg, null, srcBase);
22103        setMachineCodes(mi++, (byte) 0x0F);
22104        setMachineCodes(mi++, (byte) 0xBF);
22105        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
22106        if (lister != null) lister.RRD(miStart, "MOVSX", dstReg, srcBase, srcDisp);
22107      }
22108    
22109      /**
22110       * Generate a move sign extended from register indirect. That is,
22111       * <PRE>
22112       * dstReg := (word) [srcBase] (sign extended)
22113       * </PRE>
22114       *
22115       * @param dstReg the destination register
22116       * @param srcBase the source base register
22117       */
22118      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22119      public final void emitMOVSX_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
22120        int miStart = mi;
22121        generateREXprefix(false, dstReg, null, srcBase);
22122        setMachineCodes(mi++, (byte) 0x0F);
22123        setMachineCodes(mi++, (byte) 0xBF);
22124        emitRegIndirectRegOperands(srcBase, dstReg);
22125        if (lister != null) lister.RRN(miStart, "MOVSX", dstReg, srcBase);
22126      }
22127    
22128      /**
22129       * Generate a move sign extended from register offset. That is,
22130       * <PRE>
22131       * dstReg := (word) [srcIndex<<srcScale + srcDisp] (sign extended)
22132       * </PRE>
22133       *
22134       * @param dstReg the destination register
22135       * @param srcIndex the source index register
22136       * @param srcScale the source scale of the index
22137       * @param srcDisp the source displacement
22138       */
22139      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22140      public final void emitMOVSX_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
22141        int miStart = mi;
22142        generateREXprefix(false, dstReg, srcIndex, null);
22143        setMachineCodes(mi++, (byte) 0x0F);
22144        setMachineCodes(mi++, (byte) 0xBF);
22145        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
22146        if (lister != null) lister.RRFD(miStart, "MOVSX", dstReg, srcIndex, srcScale, srcDisp);
22147      }
22148    
22149      /**
22150       * Generate a move sign extended from an absolute address. That is,
22151       * <PRE>
22152       * dstReg := (word) [srcDisp] (sign extended)
22153       * </PRE>
22154       *
22155       * @param dstReg the destination register
22156       * @param srcDisp the source displacement
22157       */
22158      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
22159      public final void emitMOVSX_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
22160        int miStart = mi;
22161        generateREXprefix(false, dstReg, null, null);
22162        setMachineCodes(mi++, (byte) 0x0F);
22163        setMachineCodes(mi++, (byte) 0xBF);
22164        emitAbsRegOperands(srcDisp, dstReg);
22165        if (lister != null) lister.RRA(miStart, "MOVSX", dstReg, srcDisp);
22166      }
22167    
22168      /**
22169       * Generate a move sign extended by register indexed. That is,
22170       * <PRE>
22171       * dstReg := (word) [srcBase + srcIndex<<srcScale + srcDisp] (sign extended)
22172       * </PRE>
22173       *
22174       * @param dstReg the destination register
22175       * @param srcBase the source base register
22176       * @param srcIndex the source index register
22177       * @param srcScale the source scale of the index
22178       * @param srcDisp the source displacement
22179       */
22180      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
22181      public final void emitMOVSX_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
22182        int miStart = mi;
22183        generateREXprefix(false, dstReg, srcIndex, srcBase);
22184        setMachineCodes(mi++, (byte) 0x0F);
22185        setMachineCodes(mi++, (byte) 0xBF);
22186        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
22187        if (lister != null) lister.RRXD(miStart, "MOVSX", dstReg, srcBase, srcIndex, srcScale, srcDisp);
22188        }
22189    
22190      /**
22191       * Generate a move sign extended from register. That is,
22192       * <PRE>
22193       * dstReg := (byte) srcReg (sign extended)
22194       * </PRE>
22195       *
22196       * @param dstReg the destination register
22197       * @param srcReg the source register
22198       */
22199      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22200      public final void emitMOVSXQ_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
22201        int miStart = mi;
22202        generateREXprefix(true, dstReg, null, srcReg);
22203        setMachineCodes(mi++, (byte) 0x0F);
22204        setMachineCodes(mi++, (byte) 0xBE);
22205        emitRegRegOperands(srcReg, dstReg);
22206        if (lister != null) lister.RR(miStart, "MOVSXQ", dstReg, srcReg);
22207      }
22208    
22209      /**
22210       * Generate a move sign extended from register displacement. That is,
22211       * <PRE>
22212       * dstReg := (byte) [srcBase + srcDisp] (sign extended)
22213       * </PRE>
22214       *
22215       * @param dstReg the destination register
22216       * @param srcBase the source base register
22217       * @param srcDisp the source displacement
22218       */
22219      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22220      public final void emitMOVSXQ_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
22221        int miStart = mi;
22222        generateREXprefix(true, dstReg, null, srcBase);
22223        setMachineCodes(mi++, (byte) 0x0F);
22224        setMachineCodes(mi++, (byte) 0xBE);
22225        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
22226        if (lister != null) lister.RRD(miStart, "MOVSXQ", dstReg, srcBase, srcDisp);
22227      }
22228    
22229      /**
22230       * Generate a move sign extended from register indirect. That is,
22231       * <PRE>
22232       * dstReg := (byte) [srcBase] (sign extended)
22233       * </PRE>
22234       *
22235       * @param dstReg the destination register
22236       * @param srcBase the source base register
22237       */
22238      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22239      public final void emitMOVSXQ_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
22240        int miStart = mi;
22241        generateREXprefix(true, dstReg, null, srcBase);
22242        setMachineCodes(mi++, (byte) 0x0F);
22243        setMachineCodes(mi++, (byte) 0xBE);
22244        emitRegIndirectRegOperands(srcBase, dstReg);
22245        if (lister != null) lister.RRN(miStart, "MOVSXQ", dstReg, srcBase);
22246      }
22247    
22248      /**
22249       * Generate a move sign extended from register offset. That is,
22250       * <PRE>
22251       * dstReg := (byte) [srcIndex<<srcScale + srcDisp] (sign extended)
22252       * </PRE>
22253       *
22254       * @param dstReg the destination register
22255       * @param srcIndex the source index register
22256       * @param srcScale the source scale of the index
22257       * @param srcDisp the source displacement
22258       */
22259      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22260      public final void emitMOVSXQ_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
22261        int miStart = mi;
22262        generateREXprefix(true, dstReg, srcIndex, null);
22263        setMachineCodes(mi++, (byte) 0x0F);
22264        setMachineCodes(mi++, (byte) 0xBE);
22265        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
22266        if (lister != null) lister.RRFD(miStart, "MOVSXQ", dstReg, srcIndex, srcScale, srcDisp);
22267      }
22268    
22269      /**
22270       * Generate a move sign extended from an absolute address. That is,
22271       * <PRE>
22272       * dstReg := (byte) [srcDisp] (sign extended)
22273       * </PRE>
22274       *
22275       * @param dstReg the destination register
22276       * @param srcDisp the source displacement
22277       */
22278      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
22279      public final void emitMOVSXQ_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
22280        int miStart = mi;
22281        generateREXprefix(true, dstReg, null, null);
22282        setMachineCodes(mi++, (byte) 0x0F);
22283        setMachineCodes(mi++, (byte) 0xBE);
22284        emitAbsRegOperands(srcDisp, dstReg);
22285        if (lister != null) lister.RRA(miStart, "MOVSXQ", dstReg, srcDisp);
22286      }
22287    
22288      /**
22289       * Generate a move sign extended by register indexed. That is,
22290       * <PRE>
22291       * dstReg := (byte) [srcBase + srcIndex<<srcScale + srcDisp] (sign extended)
22292       * </PRE>
22293       *
22294       * @param dstReg the destination register
22295       * @param srcBase the source base register
22296       * @param srcIndex the source index register
22297       * @param srcScale the source scale of the index
22298       * @param srcDisp the source displacement
22299       */
22300      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
22301      public final void emitMOVSXQ_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
22302        int miStart = mi;
22303        generateREXprefix(true, dstReg, srcIndex, srcBase);
22304        setMachineCodes(mi++, (byte) 0x0F);
22305        setMachineCodes(mi++, (byte) 0xBE);
22306        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
22307        if (lister != null) lister.RRXD(miStart, "MOVSXQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
22308      }
22309    
22310      /**
22311       * Generate a move sign extended from register. That is,
22312       * <PRE>
22313       * dstReg := (word) srcReg (sign extended)
22314       * </PRE>
22315       *
22316       * @param dstReg the destination register
22317       * @param srcReg the source register
22318       */
22319      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22320      public final void emitMOVSXQ_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
22321        int miStart = mi;
22322        generateREXprefix(true, dstReg, null, srcReg);
22323        setMachineCodes(mi++, (byte) 0x0F);
22324        setMachineCodes(mi++, (byte) 0xBF);
22325        emitRegRegOperands(srcReg, dstReg);
22326        if (lister != null) lister.RR(miStart, "MOVSXQ", dstReg, srcReg);
22327      }
22328    
22329      /**
22330       * Generate a move sign extended from register displacement. That is,
22331       * <PRE>
22332       * dstReg := (word) [srcBase + srcDisp] (sign extended)
22333       * </PRE>
22334       *
22335       * @param dstReg the destination register
22336       * @param srcBase the source base register
22337       * @param srcDisp the source displacement
22338       */
22339      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22340      public final void emitMOVSXQ_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
22341        int miStart = mi;
22342        generateREXprefix(true, dstReg, null, srcBase);
22343        setMachineCodes(mi++, (byte) 0x0F);
22344        setMachineCodes(mi++, (byte) 0xBF);
22345        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
22346        if (lister != null) lister.RRD(miStart, "MOVSXQ", dstReg, srcBase, srcDisp);
22347      }
22348    
22349      /**
22350       * Generate a move sign extended from register indirect. That is,
22351       * <PRE>
22352       * dstReg := (word) [srcBase] (sign extended)
22353       * </PRE>
22354       *
22355       * @param dstReg the destination register
22356       * @param srcBase the source base register
22357       */
22358      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22359      public final void emitMOVSXQ_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
22360        int miStart = mi;
22361        generateREXprefix(true, dstReg, null, srcBase);
22362        setMachineCodes(mi++, (byte) 0x0F);
22363        setMachineCodes(mi++, (byte) 0xBF);
22364        emitRegIndirectRegOperands(srcBase, dstReg);
22365        if (lister != null) lister.RRN(miStart, "MOVSXQ", dstReg, srcBase);
22366      }
22367    
22368      /**
22369       * Generate a move sign extended from register offset. That is,
22370       * <PRE>
22371       * dstReg := (word) [srcIndex<<srcScale + srcDisp] (sign extended)
22372       * </PRE>
22373       *
22374       * @param dstReg the destination register
22375       * @param srcIndex the source index register
22376       * @param srcScale the source scale of the index
22377       * @param srcDisp the source displacement
22378       */
22379      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22380      public final void emitMOVSXQ_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
22381        int miStart = mi;
22382        generateREXprefix(true, dstReg, srcIndex, null);
22383        setMachineCodes(mi++, (byte) 0x0F);
22384        setMachineCodes(mi++, (byte) 0xBF);
22385        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
22386        if (lister != null) lister.RRFD(miStart, "MOVSXQ", dstReg, srcIndex, srcScale, srcDisp);
22387      }
22388    
22389      /**
22390       * Generate a move sign extended from an absolute address. That is,
22391       * <PRE>
22392       * dstReg := (word) [srcDisp] (sign extended)
22393       * </PRE>
22394       *
22395       * @param dstReg the destination register
22396       * @param srcDisp the source displacement
22397       */
22398      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
22399      public final void emitMOVSXQ_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
22400        int miStart = mi;
22401        generateREXprefix(true, dstReg, null, null);
22402        setMachineCodes(mi++, (byte) 0x0F);
22403        setMachineCodes(mi++, (byte) 0xBF);
22404        emitAbsRegOperands(srcDisp, dstReg);
22405        if (lister != null) lister.RRA(miStart, "MOVSXQ", dstReg, srcDisp);
22406      }
22407    
22408      /**
22409       * Generate a move sign extended by register indexed. That is,
22410       * <PRE>
22411       * dstReg := (word) [srcBase + srcIndex<<srcScale + srcDisp] (sign extended)
22412       * </PRE>
22413       *
22414       * @param dstReg the destination register
22415       * @param srcBase the source base register
22416       * @param srcIndex the source index register
22417       * @param srcScale the source scale of the index
22418       * @param srcDisp the source displacement
22419       */
22420      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
22421      public final void emitMOVSXQ_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
22422        int miStart = mi;
22423        generateREXprefix(true, dstReg, srcIndex, srcBase);
22424        setMachineCodes(mi++, (byte) 0x0F);
22425        setMachineCodes(mi++, (byte) 0xBF);
22426        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
22427        if (lister != null) lister.RRXD(miStart, "MOVSXQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
22428        }
22429    
22430      /**
22431       * Generate a move zero extended from register. That is,
22432       * <PRE>
22433       * dstReg := (byte) srcReg (zero extended)
22434       * </PRE>
22435       *
22436       * @param dstReg the destination register
22437       * @param srcReg the source register
22438       */
22439      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22440      public final void emitMOVZX_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
22441        int miStart = mi;
22442        generateREXprefix(false, dstReg, null, srcReg);
22443        setMachineCodes(mi++, (byte) 0x0F);
22444        setMachineCodes(mi++, (byte) 0xB6);
22445        emitRegRegOperands(srcReg, dstReg);
22446        if (lister != null) lister.RR(miStart, "MOVZX", dstReg, srcReg);
22447      }
22448    
22449      /**
22450       * Generate a move zero extended from register displacement. That is,
22451       * <PRE>
22452       * dstReg := (byte) [srcBase + srcDisp] (zero extended)
22453       * </PRE>
22454       *
22455       * @param dstReg the destination register
22456       * @param srcBase the source base register
22457       * @param srcDisp the source displacement
22458       */
22459      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22460      public final void emitMOVZX_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
22461        int miStart = mi;
22462        generateREXprefix(false, dstReg, null, srcBase);
22463        setMachineCodes(mi++, (byte) 0x0F);
22464        setMachineCodes(mi++, (byte) 0xB6);
22465        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
22466        if (lister != null) lister.RRD(miStart, "MOVZX", dstReg, srcBase, srcDisp);
22467      }
22468    
22469      /**
22470       * Generate a move zero extended from register indirect. That is,
22471       * <PRE>
22472       * dstReg := (byte) [srcBase] (zero extended)
22473       * </PRE>
22474       *
22475       * @param dstReg the destination register
22476       * @param srcBase the source base register
22477       */
22478      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22479      public final void emitMOVZX_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
22480        int miStart = mi;
22481        generateREXprefix(false, dstReg, null, srcBase);
22482        setMachineCodes(mi++, (byte) 0x0F);
22483        setMachineCodes(mi++, (byte) 0xB6);
22484        emitRegIndirectRegOperands(srcBase, dstReg);
22485        if (lister != null) lister.RRN(miStart, "MOVZX", dstReg, srcBase);
22486      }
22487    
22488      /**
22489       * Generate a move zero extended from register offset. That is,
22490       * <PRE>
22491       * dstReg := (byte) [srcIndex<<srcScale + srcDisp] (zero extended)
22492       * </PRE>
22493       *
22494       * @param dstReg the destination register
22495       * @param srcIndex the source index register
22496       * @param srcScale the source scale of the index
22497       * @param srcDisp the source displacement
22498       */
22499      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22500      public final void emitMOVZX_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
22501        int miStart = mi;
22502        generateREXprefix(false, dstReg, srcIndex, null);
22503        setMachineCodes(mi++, (byte) 0x0F);
22504        setMachineCodes(mi++, (byte) 0xB6);
22505        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
22506        if (lister != null) lister.RRFD(miStart, "MOVZX", dstReg, srcIndex, srcScale, srcDisp);
22507      }
22508    
22509      /**
22510       * Generate a move zero extended from an absolute address. That is,
22511       * <PRE>
22512       * dstReg := (byte) [srcDisp] (zero extended)
22513       * </PRE>
22514       *
22515       * @param dstReg the destination register
22516       * @param srcDisp the source displacement
22517       */
22518      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
22519      public final void emitMOVZX_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
22520        int miStart = mi;
22521        generateREXprefix(false, dstReg, null, null);
22522        setMachineCodes(mi++, (byte) 0x0F);
22523        setMachineCodes(mi++, (byte) 0xB6);
22524        emitAbsRegOperands(srcDisp, dstReg);
22525        if (lister != null) lister.RRA(miStart, "MOVZX", dstReg, srcDisp);
22526      }
22527    
22528      /**
22529       * Generate a move zero extended by register indexed. That is,
22530       * <PRE>
22531       * dstReg := (byte) [srcBase + srcIndex<<srcScale + srcDisp] (zero extended)
22532       * </PRE>
22533       *
22534       * @param dstReg the destination register
22535       * @param srcBase the source base register
22536       * @param srcIndex the source index register
22537       * @param srcScale the source scale of the index
22538       * @param srcDisp the source displacement
22539       */
22540      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
22541      public final void emitMOVZX_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
22542        int miStart = mi;
22543        generateREXprefix(false, dstReg, srcIndex, srcBase);
22544        setMachineCodes(mi++, (byte) 0x0F);
22545        setMachineCodes(mi++, (byte) 0xB6);
22546        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
22547        if (lister != null) lister.RRXD(miStart, "MOVZX", dstReg, srcBase, srcIndex, srcScale, srcDisp);
22548      }
22549    
22550      /**
22551       * Generate a move zero extended from register. That is,
22552       * <PRE>
22553       * dstReg := (word) srcReg (zero extended)
22554       * </PRE>
22555       *
22556       * @param dstReg the destination register
22557       * @param srcReg the source register
22558       */
22559      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22560      public final void emitMOVZX_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
22561        int miStart = mi;
22562        generateREXprefix(false, dstReg, null, srcReg);
22563        setMachineCodes(mi++, (byte) 0x0F);
22564        setMachineCodes(mi++, (byte) 0xB7);
22565        emitRegRegOperands(srcReg, dstReg);
22566        if (lister != null) lister.RR(miStart, "MOVZX", dstReg, srcReg);
22567      }
22568    
22569      /**
22570       * Generate a move zero extended from register displacement. That is,
22571       * <PRE>
22572       * dstReg := (word) [srcBase + srcDisp] (zero extended)
22573       * </PRE>
22574       *
22575       * @param dstReg the destination register
22576       * @param srcBase the source base register
22577       * @param srcDisp the source displacement
22578       */
22579      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22580      public final void emitMOVZX_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
22581        int miStart = mi;
22582        generateREXprefix(false, dstReg, null, srcBase);
22583        setMachineCodes(mi++, (byte) 0x0F);
22584        setMachineCodes(mi++, (byte) 0xB7);
22585        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
22586        if (lister != null) lister.RRD(miStart, "MOVZX", dstReg, srcBase, srcDisp);
22587      }
22588    
22589      /**
22590       * Generate a move zero extended from register indirect. That is,
22591       * <PRE>
22592       * dstReg := (word) [srcBase] (zero extended)
22593       * </PRE>
22594       *
22595       * @param dstReg the destination register
22596       * @param srcBase the source base register
22597       */
22598      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22599      public final void emitMOVZX_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
22600        int miStart = mi;
22601        generateREXprefix(false, dstReg, null, srcBase);
22602        setMachineCodes(mi++, (byte) 0x0F);
22603        setMachineCodes(mi++, (byte) 0xB7);
22604        emitRegIndirectRegOperands(srcBase, dstReg);
22605        if (lister != null) lister.RRN(miStart, "MOVZX", dstReg, srcBase);
22606      }
22607    
22608      /**
22609       * Generate a move zero extended from register offset. That is,
22610       * <PRE>
22611       * dstReg := (word) [srcIndex<<srcScale + srcDisp] (zero extended)
22612       * </PRE>
22613       *
22614       * @param dstReg the destination register
22615       * @param srcIndex the source index register
22616       * @param srcScale the source scale of the index
22617       * @param srcDisp the source displacement
22618       */
22619      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22620      public final void emitMOVZX_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
22621        int miStart = mi;
22622        generateREXprefix(false, dstReg, srcIndex, null);
22623        setMachineCodes(mi++, (byte) 0x0F);
22624        setMachineCodes(mi++, (byte) 0xB7);
22625        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
22626        if (lister != null) lister.RRFD(miStart, "MOVZX", dstReg, srcIndex, srcScale, srcDisp);
22627      }
22628    
22629      /**
22630       * Generate a move zero extended from an absolute address. That is,
22631       * <PRE>
22632       * dstReg := (word) [srcDisp] (zero extended)
22633       * </PRE>
22634       *
22635       * @param dstReg the destination register
22636       * @param srcDisp the source displacement
22637       */
22638      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
22639      public final void emitMOVZX_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
22640        int miStart = mi;
22641        generateREXprefix(false, dstReg, null, null);
22642        setMachineCodes(mi++, (byte) 0x0F);
22643        setMachineCodes(mi++, (byte) 0xB7);
22644        emitAbsRegOperands(srcDisp, dstReg);
22645        if (lister != null) lister.RRA(miStart, "MOVZX", dstReg, srcDisp);
22646      }
22647    
22648      /**
22649       * Generate a move zero extended by register indexed. That is,
22650       * <PRE>
22651       * dstReg := (word) [srcBase + srcIndex<<srcScale + srcDisp] (zero extended)
22652       * </PRE>
22653       *
22654       * @param dstReg the destination register
22655       * @param srcBase the source base register
22656       * @param srcIndex the source index register
22657       * @param srcScale the source scale of the index
22658       * @param srcDisp the source displacement
22659       */
22660      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
22661      public final void emitMOVZX_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
22662        int miStart = mi;
22663        generateREXprefix(false, dstReg, srcIndex, srcBase);
22664        setMachineCodes(mi++, (byte) 0x0F);
22665        setMachineCodes(mi++, (byte) 0xB7);
22666        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
22667        if (lister != null) lister.RRXD(miStart, "MOVZX", dstReg, srcBase, srcIndex, srcScale, srcDisp);
22668        }
22669    
22670      /**
22671       * Generate a move zero extended from register. That is,
22672       * <PRE>
22673       * dstReg := (byte) srcReg (zero extended)
22674       * </PRE>
22675       *
22676       * @param dstReg the destination register
22677       * @param srcReg the source register
22678       */
22679      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22680      public final void emitMOVZXQ_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
22681        int miStart = mi;
22682        generateREXprefix(true, dstReg, null, srcReg);
22683        setMachineCodes(mi++, (byte) 0x0F);
22684        setMachineCodes(mi++, (byte) 0xB6);
22685        emitRegRegOperands(srcReg, dstReg);
22686        if (lister != null) lister.RR(miStart, "MOVZXQ", dstReg, srcReg);
22687      }
22688    
22689      /**
22690       * Generate a move zero extended from register displacement. That is,
22691       * <PRE>
22692       * dstReg := (byte) [srcBase + srcDisp] (zero extended)
22693       * </PRE>
22694       *
22695       * @param dstReg the destination register
22696       * @param srcBase the source base register
22697       * @param srcDisp the source displacement
22698       */
22699      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22700      public final void emitMOVZXQ_Reg_RegDisp_Byte(GPR dstReg, GPR srcBase, Offset srcDisp) {
22701        int miStart = mi;
22702        generateREXprefix(true, dstReg, null, srcBase);
22703        setMachineCodes(mi++, (byte) 0x0F);
22704        setMachineCodes(mi++, (byte) 0xB6);
22705        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
22706        if (lister != null) lister.RRD(miStart, "MOVZXQ", dstReg, srcBase, srcDisp);
22707      }
22708    
22709      /**
22710       * Generate a move zero extended from register indirect. That is,
22711       * <PRE>
22712       * dstReg := (byte) [srcBase] (zero extended)
22713       * </PRE>
22714       *
22715       * @param dstReg the destination register
22716       * @param srcBase the source base register
22717       */
22718      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22719      public final void emitMOVZXQ_Reg_RegInd_Byte(GPR dstReg, GPR srcBase) {
22720        int miStart = mi;
22721        generateREXprefix(true, dstReg, null, srcBase);
22722        setMachineCodes(mi++, (byte) 0x0F);
22723        setMachineCodes(mi++, (byte) 0xB6);
22724        emitRegIndirectRegOperands(srcBase, dstReg);
22725        if (lister != null) lister.RRN(miStart, "MOVZXQ", dstReg, srcBase);
22726      }
22727    
22728      /**
22729       * Generate a move zero extended from register offset. That is,
22730       * <PRE>
22731       * dstReg := (byte) [srcIndex<<srcScale + srcDisp] (zero extended)
22732       * </PRE>
22733       *
22734       * @param dstReg the destination register
22735       * @param srcIndex the source index register
22736       * @param srcScale the source scale of the index
22737       * @param srcDisp the source displacement
22738       */
22739      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22740      public final void emitMOVZXQ_Reg_RegOff_Byte(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
22741        int miStart = mi;
22742        generateREXprefix(true, dstReg, srcIndex, null);
22743        setMachineCodes(mi++, (byte) 0x0F);
22744        setMachineCodes(mi++, (byte) 0xB6);
22745        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
22746        if (lister != null) lister.RRFD(miStart, "MOVZXQ", dstReg, srcIndex, srcScale, srcDisp);
22747      }
22748    
22749      /**
22750       * Generate a move zero extended from an absolute address. That is,
22751       * <PRE>
22752       * dstReg := (byte) [srcDisp] (zero extended)
22753       * </PRE>
22754       *
22755       * @param dstReg the destination register
22756       * @param srcDisp the source displacement
22757       */
22758      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
22759      public final void emitMOVZXQ_Reg_Abs_Byte(GPR dstReg, Address srcDisp) {
22760        int miStart = mi;
22761        generateREXprefix(true, dstReg, null, null);
22762        setMachineCodes(mi++, (byte) 0x0F);
22763        setMachineCodes(mi++, (byte) 0xB6);
22764        emitAbsRegOperands(srcDisp, dstReg);
22765        if (lister != null) lister.RRA(miStart, "MOVZXQ", dstReg, srcDisp);
22766      }
22767    
22768      /**
22769       * Generate a move zero extended by register indexed. That is,
22770       * <PRE>
22771       * dstReg := (byte) [srcBase + srcIndex<<srcScale + srcDisp] (zero extended)
22772       * </PRE>
22773       *
22774       * @param dstReg the destination register
22775       * @param srcBase the source base register
22776       * @param srcIndex the source index register
22777       * @param srcScale the source scale of the index
22778       * @param srcDisp the source displacement
22779       */
22780      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
22781      public final void emitMOVZXQ_Reg_RegIdx_Byte(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
22782        int miStart = mi;
22783        generateREXprefix(true, dstReg, srcIndex, srcBase);
22784        setMachineCodes(mi++, (byte) 0x0F);
22785        setMachineCodes(mi++, (byte) 0xB6);
22786        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
22787        if (lister != null) lister.RRXD(miStart, "MOVZXQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
22788      }
22789    
22790      /**
22791       * Generate a move zero extended from register. That is,
22792       * <PRE>
22793       * dstReg := (word) srcReg (zero extended)
22794       * </PRE>
22795       *
22796       * @param dstReg the destination register
22797       * @param srcReg the source register
22798       */
22799      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22800      public final void emitMOVZXQ_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
22801        int miStart = mi;
22802        generateREXprefix(true, dstReg, null, srcReg);
22803        setMachineCodes(mi++, (byte) 0x0F);
22804        setMachineCodes(mi++, (byte) 0xB7);
22805        emitRegRegOperands(srcReg, dstReg);
22806        if (lister != null) lister.RR(miStart, "MOVZXQ", dstReg, srcReg);
22807      }
22808    
22809      /**
22810       * Generate a move zero extended from register displacement. That is,
22811       * <PRE>
22812       * dstReg := (word) [srcBase + srcDisp] (zero extended)
22813       * </PRE>
22814       *
22815       * @param dstReg the destination register
22816       * @param srcBase the source base register
22817       * @param srcDisp the source displacement
22818       */
22819      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22820      public final void emitMOVZXQ_Reg_RegDisp_Word(GPR dstReg, GPR srcBase, Offset srcDisp) {
22821        int miStart = mi;
22822        generateREXprefix(true, dstReg, null, srcBase);
22823        setMachineCodes(mi++, (byte) 0x0F);
22824        setMachineCodes(mi++, (byte) 0xB7);
22825        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
22826        if (lister != null) lister.RRD(miStart, "MOVZXQ", dstReg, srcBase, srcDisp);
22827      }
22828    
22829      /**
22830       * Generate a move zero extended from register indirect. That is,
22831       * <PRE>
22832       * dstReg := (word) [srcBase] (zero extended)
22833       * </PRE>
22834       *
22835       * @param dstReg the destination register
22836       * @param srcBase the source base register
22837       */
22838      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22839      public final void emitMOVZXQ_Reg_RegInd_Word(GPR dstReg, GPR srcBase) {
22840        int miStart = mi;
22841        generateREXprefix(true, dstReg, null, srcBase);
22842        setMachineCodes(mi++, (byte) 0x0F);
22843        setMachineCodes(mi++, (byte) 0xB7);
22844        emitRegIndirectRegOperands(srcBase, dstReg);
22845        if (lister != null) lister.RRN(miStart, "MOVZXQ", dstReg, srcBase);
22846      }
22847    
22848      /**
22849       * Generate a move zero extended from register offset. That is,
22850       * <PRE>
22851       * dstReg := (word) [srcIndex<<srcScale + srcDisp] (zero extended)
22852       * </PRE>
22853       *
22854       * @param dstReg the destination register
22855       * @param srcIndex the source index register
22856       * @param srcScale the source scale of the index
22857       * @param srcDisp the source displacement
22858       */
22859      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22860      public final void emitMOVZXQ_Reg_RegOff_Word(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
22861        int miStart = mi;
22862        generateREXprefix(true, dstReg, srcIndex, null);
22863        setMachineCodes(mi++, (byte) 0x0F);
22864        setMachineCodes(mi++, (byte) 0xB7);
22865        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
22866        if (lister != null) lister.RRFD(miStart, "MOVZXQ", dstReg, srcIndex, srcScale, srcDisp);
22867      }
22868    
22869      /**
22870       * Generate a move zero extended from an absolute address. That is,
22871       * <PRE>
22872       * dstReg := (word) [srcDisp] (zero extended)
22873       * </PRE>
22874       *
22875       * @param dstReg the destination register
22876       * @param srcDisp the source displacement
22877       */
22878      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
22879      public final void emitMOVZXQ_Reg_Abs_Word(GPR dstReg, Address srcDisp) {
22880        int miStart = mi;
22881        generateREXprefix(true, dstReg, null, null);
22882        setMachineCodes(mi++, (byte) 0x0F);
22883        setMachineCodes(mi++, (byte) 0xB7);
22884        emitAbsRegOperands(srcDisp, dstReg);
22885        if (lister != null) lister.RRA(miStart, "MOVZXQ", dstReg, srcDisp);
22886      }
22887    
22888      /**
22889       * Generate a move zero extended by register indexed. That is,
22890       * <PRE>
22891       * dstReg := (word) [srcBase + srcIndex<<srcScale + srcDisp] (zero extended)
22892       * </PRE>
22893       *
22894       * @param dstReg the destination register
22895       * @param srcBase the source base register
22896       * @param srcIndex the source index register
22897       * @param srcScale the source scale of the index
22898       * @param srcDisp the source displacement
22899       */
22900      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
22901      public final void emitMOVZXQ_Reg_RegIdx_Word(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
22902        int miStart = mi;
22903        generateREXprefix(true, dstReg, srcIndex, srcBase);
22904        setMachineCodes(mi++, (byte) 0x0F);
22905        setMachineCodes(mi++, (byte) 0xB7);
22906        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
22907        if (lister != null) lister.RRXD(miStart, "MOVZXQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
22908        }
22909    
22910      /**
22911       * Generate a register(indirect)--register CMPXCHG. That is,
22912       * <PRE>
22913       * [dstBase] <->=  srcReg
22914       * </PRE>
22915       *
22916       * @param dstBase the destination base
22917       * @param srcReg the source register
22918       */
22919      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
22920      public final void emitCMPXCHG_RegInd_Reg(GPR dstBase, GPR srcReg) {
22921        int miStart = mi;
22922        // no group 1 to 4 prefix byte
22923        generateREXprefix(false, srcReg, null, dstBase);
22924        setMachineCodes(mi++, (byte) 0x0F);
22925        setMachineCodes(mi++, (byte) 0xB1);
22926        emitRegIndirectRegOperands(dstBase, srcReg);
22927        if (lister != null) lister.RNR(miStart, "CMPXCHG", dstBase, srcReg);
22928      }
22929    
22930      /**
22931       * Generate a register-offset--register CMPXCHG. That is,
22932       * <PRE>
22933       * [dstReg<<dstScale + dstDisp] <->=  srcReg
22934       * </PRE>
22935       *
22936       * @param dstIndex the destination index register
22937       * @param dstScale the destination shift amount
22938       * @param dstDisp the destination displacement
22939       * @param srcReg the source register
22940       */
22941      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
22942      public final void emitCMPXCHG_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
22943        int miStart = mi;
22944        // no group 1 to 4 prefix byte
22945        generateREXprefix(false, srcReg, dstIndex, null);
22946        setMachineCodes(mi++, (byte) 0x0F);
22947        setMachineCodes(mi++, (byte) 0xB1);
22948        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
22949        if (lister != null) lister.RFDR(miStart, "CMPXCHG", dstIndex, dstScale, dstDisp, srcReg);
22950      }
22951    
22952      /**
22953       * Generate a absolute--register CMPXCHG. That is,
22954       * <PRE>
22955       * [dstDisp] <->=  srcReg
22956       * </PRE>
22957       *
22958       * @param dstDisp the destination address
22959       * @param srcReg the source register
22960       */
22961      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
22962      public final void emitCMPXCHG_Abs_Reg(Address dstDisp, GPR srcReg) {
22963        int miStart = mi;
22964        // no group 1 to 4 prefix byte
22965        generateREXprefix(false, srcReg, null, null);
22966        setMachineCodes(mi++, (byte) 0x0F);
22967        setMachineCodes(mi++, (byte) 0xB1);
22968        emitAbsRegOperands(dstDisp, srcReg);
22969        if (lister != null) lister.RAR(miStart, "CMPXCHG", dstDisp, srcReg);
22970      }
22971    
22972      /**
22973       * Generate a register-index--register CMPXCHG. That is,
22974       * <PRE>
22975       * [dstBase + dstIndex<<dstScale + dstDisp] <->=  srcReg
22976       * </PRE>
22977       *
22978       * @param dstBase the base register
22979       * @param dstIndex the destination index register
22980       * @param dstScale the destination shift amount
22981       * @param dstDisp the destination displacement
22982       * @param srcReg the source register
22983       */
22984      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
22985      public final void emitCMPXCHG_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
22986        int miStart = mi;
22987        // no group 1 to 4 prefix byte
22988        generateREXprefix(false, srcReg, dstIndex, dstBase);
22989        setMachineCodes(mi++, (byte) 0x0F);
22990        setMachineCodes(mi++, (byte) 0xB1);
22991        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
22992        if (lister != null) lister.RXDR(miStart, "CMPXCHG", dstBase, dstIndex, dstScale, dstDisp, srcReg);
22993      }
22994    
22995      /**
22996       * Generate a register-displacement--register CMPXCHG. That is,
22997       * <PRE>
22998       * [dstBase + dstDisp] <->=  srcReg
22999       * </PRE>
23000       *
23001       * @param dstBase the base register
23002       * @param dstDisp the destination displacement
23003       * @param srcReg the source register
23004       */
23005      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
23006      public final void emitCMPXCHG_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
23007        int miStart = mi;
23008        // no group 1 to 4 prefix byte
23009        generateREXprefix(false, srcReg, null, dstBase);
23010        setMachineCodes(mi++, (byte) 0x0F);
23011        setMachineCodes(mi++, (byte) 0xB1);
23012        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
23013        if (lister != null) lister.RDR(miStart, "CMPXCHG", dstBase, dstDisp, srcReg);
23014      }
23015    
23016      /**
23017       * Generate a register--register CMPXCHG. That is,
23018       * <PRE>
23019       * dstReg <->=  srcReg
23020       * </PRE>
23021       *
23022       * @param dstReg the destination register
23023       * @param srcReg the source register
23024       */
23025      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23026      public final void emitCMPXCHG_Reg_Reg(GPR dstReg, GPR srcReg) {
23027        int miStart = mi;
23028        // no group 1 to 4 prefix byte
23029        generateREXprefix(false, srcReg, null, dstReg);
23030        setMachineCodes(mi++, (byte) 0x0F);
23031        setMachineCodes(mi++, (byte) 0xB1);
23032        emitRegRegOperands(dstReg, srcReg);
23033        if (lister != null) lister.RR(miStart, "CMPXCHG", dstReg, srcReg);
23034      }
23035    
23036      /**
23037       * Generate a register(indirect)--register CMPXCHG. That is,
23038       * <PRE>
23039       * [dstBase] <->=  (quad)  srcReg
23040       * </PRE>
23041       *
23042       * @param dstBase the destination base
23043       * @param srcReg the source register
23044       */
23045      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23046      public final void emitCMPXCHG_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
23047        int miStart = mi;
23048        // no group 1 to 4 prefix byte
23049        generateREXprefix(true, srcReg, null, dstBase);
23050        setMachineCodes(mi++, (byte) 0x0F);
23051        setMachineCodes(mi++, (byte) 0xB1);
23052        emitRegIndirectRegOperands(dstBase, srcReg);
23053        if (lister != null) lister.RNR(miStart, "CMPXCHG", dstBase, srcReg);
23054      }
23055    
23056      /**
23057       * Generate a register-offset--register CMPXCHG. That is,
23058       * <PRE>
23059       * [dstReg<<dstScale + dstDisp] <->=  (quad)  srcReg
23060       * </PRE>
23061       *
23062       * @param dstIndex the destination index register
23063       * @param dstScale the destination shift amount
23064       * @param dstDisp the destination displacement
23065       * @param srcReg the source register
23066       */
23067      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
23068      public final void emitCMPXCHG_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
23069        int miStart = mi;
23070        // no group 1 to 4 prefix byte
23071        generateREXprefix(true, srcReg, dstIndex, null);
23072        setMachineCodes(mi++, (byte) 0x0F);
23073        setMachineCodes(mi++, (byte) 0xB1);
23074        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
23075        if (lister != null) lister.RFDR(miStart, "CMPXCHG", dstIndex, dstScale, dstDisp, srcReg);
23076      }
23077    
23078      /**
23079       * Generate a absolute--register CMPXCHG. That is,
23080       * <PRE>
23081       * [dstDisp] <->=  (quad)  srcReg
23082       * </PRE>
23083       *
23084       * @param dstDisp the destination address
23085       * @param srcReg the source register
23086       */
23087      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
23088      public final void emitCMPXCHG_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
23089        int miStart = mi;
23090        // no group 1 to 4 prefix byte
23091        generateREXprefix(true, srcReg, null, null);
23092        setMachineCodes(mi++, (byte) 0x0F);
23093        setMachineCodes(mi++, (byte) 0xB1);
23094        emitAbsRegOperands(dstDisp, srcReg);
23095        if (lister != null) lister.RAR(miStart, "CMPXCHG", dstDisp, srcReg);
23096      }
23097    
23098      /**
23099       * Generate a register-index--register CMPXCHG. That is,
23100       * <PRE>
23101       * [dstBase + dstIndex<<dstScale + dstDisp] <->=  (quad)  srcReg
23102       * </PRE>
23103       *
23104       * @param dstBase the base register
23105       * @param dstIndex the destination index register
23106       * @param dstScale the destination shift amount
23107       * @param dstDisp the destination displacement
23108       * @param srcReg the source register
23109       */
23110      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
23111      public final void emitCMPXCHG_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
23112        int miStart = mi;
23113        // no group 1 to 4 prefix byte
23114        generateREXprefix(true, srcReg, dstIndex, dstBase);
23115        setMachineCodes(mi++, (byte) 0x0F);
23116        setMachineCodes(mi++, (byte) 0xB1);
23117        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
23118        if (lister != null) lister.RXDR(miStart, "CMPXCHG", dstBase, dstIndex, dstScale, dstDisp, srcReg);
23119      }
23120    
23121      /**
23122       * Generate a register-displacement--register CMPXCHG. That is,
23123       * <PRE>
23124       * [dstBase + dstDisp] <->=  (quad)  srcReg
23125       * </PRE>
23126       *
23127       * @param dstBase the base register
23128       * @param dstDisp the destination displacement
23129       * @param srcReg the source register
23130       */
23131      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
23132      public final void emitCMPXCHG_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
23133        int miStart = mi;
23134        // no group 1 to 4 prefix byte
23135        generateREXprefix(true, srcReg, null, dstBase);
23136        setMachineCodes(mi++, (byte) 0x0F);
23137        setMachineCodes(mi++, (byte) 0xB1);
23138        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
23139        if (lister != null) lister.RDR(miStart, "CMPXCHG", dstBase, dstDisp, srcReg);
23140      }
23141    
23142      /**
23143       * Generate a register--register CMPXCHG. That is,
23144       * <PRE>
23145       * dstReg <->=  (quad)  srcReg
23146       * </PRE>
23147       *
23148       * @param dstReg the destination register
23149       * @param srcReg the source register
23150       */
23151      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23152      public final void emitCMPXCHG_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
23153        int miStart = mi;
23154        // no group 1 to 4 prefix byte
23155        generateREXprefix(true, srcReg, null, dstReg);
23156        setMachineCodes(mi++, (byte) 0x0F);
23157        setMachineCodes(mi++, (byte) 0xB1);
23158        emitRegRegOperands(dstReg, srcReg);
23159        if (lister != null) lister.RR(miStart, "CMPXCHG", dstReg, srcReg);
23160      }
23161    
23162      /**
23163       * Generate a register--immediate ROL. That is,
23164       * <PRE>
23165       * rotate left of dstReg by imm
23166       * </PRE>
23167       *
23168       * @param dstReg the destination register
23169       * @param imm immediate
23170       */
23171      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23172      public final void emitROL_Reg_Imm_Byte(GPR dstReg, int imm) {
23173        int miStart = mi;
23174        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23175        // no size prefix
23176        generateREXprefix(false, null, null, dstReg);
23177        if (imm == 1) {
23178          setMachineCodes(mi++, (byte) 0xD0);
23179          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
23180        } else {
23181          setMachineCodes(mi++, (byte) 0xC0);
23182          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
23183          emitImm8((byte)imm);
23184        }
23185        if (lister != null) lister.RI(miStart, "ROL", dstReg, imm);
23186      }
23187    
23188      /**
23189       * Generate a register-indirect--immediate ROL. That is,
23190       * <PRE>
23191       * rotate left of [dstBase] by imm
23192       * </PRE>
23193       *
23194       * @param dstBase the destination base register
23195       * @param imm immediate
23196       */
23197      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23198      public final void emitROL_RegInd_Imm_Byte(GPR dstBase, int imm) {
23199        int miStart = mi;
23200        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23201        // no size prefix
23202        generateREXprefix(false, null, null, dstBase);
23203        if (imm == 1) {
23204          setMachineCodes(mi++, (byte) 0xD0);
23205          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
23206        } else {
23207          setMachineCodes(mi++, (byte) 0xC0);
23208          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
23209          emitImm8((byte)imm);
23210        }
23211        if (lister != null) lister.RNI(miStart, "ROL", dstBase, imm);
23212      }
23213    
23214      /**
23215       * Generate a register-displacement--immediate ROL. That is,
23216       * <PRE>
23217       * rotate left of [dstBase + dstDisp] by imm
23218       * </PRE>
23219       *
23220       * @param dstBase the destination base register
23221       * @param dstDisp the destination displacement
23222       * @param imm immediate
23223       */
23224      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23225      public final void emitROL_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
23226        int miStart = mi;
23227        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23228        // no size prefix
23229        generateREXprefix(false, null, null, dstBase);
23230        if (imm == 1) {
23231          setMachineCodes(mi++, (byte) 0xD0);
23232          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
23233        } else {
23234          setMachineCodes(mi++, (byte) 0xC0);
23235          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
23236          emitImm8((byte)imm);
23237        }
23238        if (lister != null) lister.RDI(miStart, "ROL", dstBase, dstDisp, imm);
23239      }
23240    
23241      /**
23242       * Generate a register-offset--immediate ROL. That is,
23243       * <PRE>
23244       * rotate left of [dstIndex<<dstScale + dstDisp] by imm
23245       * </PRE>
23246       *
23247       * @param dstIndex the destination index register
23248       * @param dstScale the destination shift amount
23249       * @param dstDisp the destination displacement
23250       * @param imm immediate
23251       */
23252      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23253      public final void emitROL_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
23254        int miStart = mi;
23255        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23256        // no size prefix
23257        generateREXprefix(false, null, dstIndex, null);
23258        if (imm == 1) {
23259          setMachineCodes(mi++, (byte) 0xD0);
23260          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23261        } else {
23262          setMachineCodes(mi++, (byte) 0xC0);
23263          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23264          emitImm8((byte)imm);
23265        }
23266        if (lister != null) lister.RFDI(miStart, "ROL", dstIndex, dstScale, dstDisp, imm);
23267      }
23268    
23269      /**
23270       * Generate a absolute--immediate ROL. That is,
23271       * <PRE>
23272       * rotate left of [dstDisp] by imm
23273       * </PRE>
23274       *
23275       * @param dstDisp the destination displacement
23276       * @param imm immediate
23277       */
23278      public final void emitROL_Abs_Imm_Byte(Address dstDisp, int imm) {
23279        int miStart = mi;
23280        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23281        // no size prefix
23282        generateREXprefix(false, null, null, null);
23283        if (imm == 1) {
23284          setMachineCodes(mi++, (byte) 0xD0);
23285          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
23286        } else {
23287          setMachineCodes(mi++, (byte) 0xC0);
23288          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
23289          emitImm8((byte)imm);
23290        }
23291        if (lister != null) lister.RAI(miStart, "ROL", dstDisp, imm);
23292      }
23293    
23294      /**
23295       * Generate a register-index--immediate ROL. That is,
23296       * <PRE>
23297       * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
23298       * </PRE>
23299       *
23300       * @param dstBase the destination base register
23301       * @param dstIndex the destination index register
23302       * @param dstScale the destination shift amount
23303       * @param dstDisp the destination displacement
23304       * @param imm immediate
23305       */
23306      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23307      public final void emitROL_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
23308        int miStart = mi;
23309        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23310        // no size prefix
23311        generateREXprefix(false, null, dstIndex, dstBase);
23312        if (imm == 1) {
23313          setMachineCodes(mi++, (byte) 0xD0);
23314          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23315        } else {
23316          setMachineCodes(mi++, (byte) 0xC0);
23317          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23318          emitImm8((byte)imm);
23319        }
23320        if (lister != null) lister.RXDI(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, imm);
23321      }
23322    
23323      /**
23324       * Generate a register--register ROL. That is,
23325       * <PRE>
23326       * rotate left of dstReg by srcReg
23327       * </PRE>
23328       *
23329       * @param dstReg the destination register
23330       * @param srcReg must always be ECX
23331       */
23332      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23333      public final void emitROL_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
23334        int miStart = mi;
23335        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23336        // no size prefix
23337        generateREXprefix(false, null, null, dstReg);
23338        setMachineCodes(mi++, (byte) 0xD2);
23339        emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
23340        if (lister != null) lister.RR(miStart, "ROL", dstReg, srcReg);
23341      }
23342    
23343      /**
23344       * Generate a register-indirect--register ROL. That is,
23345       * <PRE>
23346       * rotate left of [dstBase] by srcReg
23347       * </PRE>
23348       *
23349       * @param dstBase the destination register
23350       * @param srcReg must always be ECX
23351       */
23352      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23353      public final void emitROL_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
23354        int miStart = mi;
23355        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23356        // no size prefix
23357        generateREXprefix(false, null, null, dstBase);
23358        setMachineCodes(mi++, (byte) 0xD2);
23359        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
23360        if (lister != null) lister.RNR(miStart, "ROL", dstBase, srcReg);
23361      }
23362    
23363      /**
23364       * Generate a register-displacement--register ROL. That is,
23365       * <PRE>
23366       * rotate left of [dstBase + dstDisp] by srcReg
23367       * </PRE>
23368       *
23369       * @param dstBase the destination base register
23370       * @param dstDisp the destination displacement
23371       * @param srcReg must always be ECX
23372       */
23373      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
23374      public final void emitROL_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
23375        int miStart = mi;
23376        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23377        // no size prefix
23378        generateREXprefix(false, null, null, dstBase);
23379        setMachineCodes(mi++, (byte) 0xD2);
23380        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
23381        if (lister != null) lister.RDR(miStart, "ROL", dstBase, dstDisp, srcReg);
23382      }
23383    
23384      /**
23385       * Generate a register-offset--register ROL. That is,
23386       * <PRE>
23387       * rotate left of [dstIndex<<dstScale + dstDisp] by srcReg
23388       * </PRE>
23389       *
23390       * @param dstIndex the destination index register
23391       * @param dstScale the destination shift amount
23392       * @param dstDisp the destination displacement
23393       * @param srcReg must always be ECX
23394       */
23395      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
23396      public final void emitROL_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
23397        int miStart = mi;
23398        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23399        // no size prefix
23400        generateREXprefix(false, null, dstIndex, null);
23401        setMachineCodes(mi++, (byte) 0xD2);
23402        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23403        if (lister != null) lister.RFDR(miStart, "ROL", dstIndex, dstScale, dstDisp, srcReg);
23404      }
23405    
23406      /**
23407       * Generate an absolute--register ROL. That is,
23408       * <PRE>
23409       * rotate left of [dstDisp] by srcReg
23410       * </PRE>
23411       *
23412       * @param dstDisp the destination displacement
23413       * @param srcReg must always be ECX
23414       */
23415      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
23416      public final void emitROL_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
23417        int miStart = mi;
23418        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23419        // no size prefix
23420        generateREXprefix(false, null, null, null);
23421        setMachineCodes(mi++, (byte) 0xD2);
23422        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
23423        if (lister != null) lister.RAR(miStart, "ROL", dstDisp, srcReg);
23424      }
23425    
23426      /**
23427       * Generate a register-displacement--register ROL. That is,
23428       * <PRE>
23429       * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
23430       * </PRE>
23431       *
23432       * @param dstBase the destination base register
23433       * @param dstIndex the destination index register
23434       * @param dstScale the destination shift amount
23435       * @param dstDisp the destination displacement
23436       * @param srcReg must always be ECX
23437       */
23438      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
23439      public final void emitROL_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
23440        int miStart = mi;
23441        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23442        // no size prefix
23443        generateREXprefix(false, null, dstIndex, dstBase);
23444        setMachineCodes(mi++, (byte) 0xD2);
23445        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23446        if (lister != null) lister.RXDR(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
23447      }
23448    
23449      /**
23450       * Generate a register--immediate ROL. That is,
23451       * <PRE>
23452       * rotate left of dstReg by imm
23453       * </PRE>
23454       *
23455       * @param dstReg the destination register
23456       * @param imm immediate
23457       */
23458      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23459      public final void emitROL_Reg_Imm_Word(GPR dstReg, int imm) {
23460        int miStart = mi;
23461        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23462        setMachineCodes(mi++, (byte) 0x66);
23463        generateREXprefix(false, null, null, dstReg);
23464        if (imm == 1) {
23465          setMachineCodes(mi++, (byte) 0xD1);
23466          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
23467        } else {
23468          setMachineCodes(mi++, (byte) 0xC1);
23469          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
23470          emitImm8((byte)imm);
23471        }
23472        if (lister != null) lister.RI(miStart, "ROL", dstReg, imm);
23473      }
23474    
23475      /**
23476       * Generate a register-indirect--immediate ROL. That is,
23477       * <PRE>
23478       * rotate left of [dstBase] by imm
23479       * </PRE>
23480       *
23481       * @param dstBase the destination base register
23482       * @param imm immediate
23483       */
23484      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23485      public final void emitROL_RegInd_Imm_Word(GPR dstBase, int imm) {
23486        int miStart = mi;
23487        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23488        setMachineCodes(mi++, (byte) 0x66);
23489        generateREXprefix(false, null, null, dstBase);
23490        if (imm == 1) {
23491          setMachineCodes(mi++, (byte) 0xD1);
23492          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
23493        } else {
23494          setMachineCodes(mi++, (byte) 0xC1);
23495          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
23496          emitImm8((byte)imm);
23497        }
23498        if (lister != null) lister.RNI(miStart, "ROL", dstBase, imm);
23499      }
23500    
23501      /**
23502       * Generate a register-displacement--immediate ROL. That is,
23503       * <PRE>
23504       * rotate left of [dstBase + dstDisp] by imm
23505       * </PRE>
23506       *
23507       * @param dstBase the destination base register
23508       * @param dstDisp the destination displacement
23509       * @param imm immediate
23510       */
23511      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23512      public final void emitROL_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
23513        int miStart = mi;
23514        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23515        setMachineCodes(mi++, (byte) 0x66);
23516        generateREXprefix(false, null, null, dstBase);
23517        if (imm == 1) {
23518          setMachineCodes(mi++, (byte) 0xD1);
23519          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
23520        } else {
23521          setMachineCodes(mi++, (byte) 0xC1);
23522          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
23523          emitImm8((byte)imm);
23524        }
23525        if (lister != null) lister.RDI(miStart, "ROL", dstBase, dstDisp, imm);
23526      }
23527    
23528      /**
23529       * Generate a register-offset--immediate ROL. That is,
23530       * <PRE>
23531       * rotate left of [dstIndex<<dstScale + dstDisp] by imm
23532       * </PRE>
23533       *
23534       * @param dstIndex the destination index register
23535       * @param dstScale the destination shift amount
23536       * @param dstDisp the destination displacement
23537       * @param imm immediate
23538       */
23539      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23540      public final void emitROL_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
23541        int miStart = mi;
23542        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23543        setMachineCodes(mi++, (byte) 0x66);
23544        generateREXprefix(false, null, dstIndex, null);
23545        if (imm == 1) {
23546          setMachineCodes(mi++, (byte) 0xD1);
23547          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23548        } else {
23549          setMachineCodes(mi++, (byte) 0xC1);
23550          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23551          emitImm8((byte)imm);
23552        }
23553        if (lister != null) lister.RFDI(miStart, "ROL", dstIndex, dstScale, dstDisp, imm);
23554      }
23555    
23556      /**
23557       * Generate a absolute--immediate ROL. That is,
23558       * <PRE>
23559       * rotate left of [dstDisp] by imm
23560       * </PRE>
23561       *
23562       * @param dstDisp the destination displacement
23563       * @param imm immediate
23564       */
23565      public final void emitROL_Abs_Imm_Word(Address dstDisp, int imm) {
23566        int miStart = mi;
23567        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23568        setMachineCodes(mi++, (byte) 0x66);
23569        generateREXprefix(false, null, null, null);
23570        if (imm == 1) {
23571          setMachineCodes(mi++, (byte) 0xD1);
23572          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
23573        } else {
23574          setMachineCodes(mi++, (byte) 0xC1);
23575          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
23576          emitImm8((byte)imm);
23577        }
23578        if (lister != null) lister.RAI(miStart, "ROL", dstDisp, imm);
23579      }
23580    
23581      /**
23582       * Generate a register-index--immediate ROL. That is,
23583       * <PRE>
23584       * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
23585       * </PRE>
23586       *
23587       * @param dstBase the destination base register
23588       * @param dstIndex the destination index register
23589       * @param dstScale the destination shift amount
23590       * @param dstDisp the destination displacement
23591       * @param imm immediate
23592       */
23593      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23594      public final void emitROL_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
23595        int miStart = mi;
23596        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23597        setMachineCodes(mi++, (byte) 0x66);
23598        generateREXprefix(false, null, dstIndex, dstBase);
23599        if (imm == 1) {
23600          setMachineCodes(mi++, (byte) 0xD1);
23601          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23602        } else {
23603          setMachineCodes(mi++, (byte) 0xC1);
23604          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23605          emitImm8((byte)imm);
23606        }
23607        if (lister != null) lister.RXDI(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, imm);
23608      }
23609    
23610      /**
23611       * Generate a register--register ROL. That is,
23612       * <PRE>
23613       * rotate left of dstReg by srcReg
23614       * </PRE>
23615       *
23616       * @param dstReg the destination register
23617       * @param srcReg must always be ECX
23618       */
23619      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23620      public final void emitROL_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
23621        int miStart = mi;
23622        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23623        setMachineCodes(mi++, (byte) 0x66);
23624        generateREXprefix(false, null, null, dstReg);
23625        setMachineCodes(mi++, (byte) 0xD3);
23626        emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
23627        if (lister != null) lister.RR(miStart, "ROL", dstReg, srcReg);
23628      }
23629    
23630      /**
23631       * Generate a register-indirect--register ROL. That is,
23632       * <PRE>
23633       * rotate left of [dstBase] by srcReg
23634       * </PRE>
23635       *
23636       * @param dstBase the destination register
23637       * @param srcReg must always be ECX
23638       */
23639      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23640      public final void emitROL_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
23641        int miStart = mi;
23642        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23643        setMachineCodes(mi++, (byte) 0x66);
23644        generateREXprefix(false, null, null, dstBase);
23645        setMachineCodes(mi++, (byte) 0xD3);
23646        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
23647        if (lister != null) lister.RNR(miStart, "ROL", dstBase, srcReg);
23648      }
23649    
23650      /**
23651       * Generate a register-displacement--register ROL. That is,
23652       * <PRE>
23653       * rotate left of [dstBase + dstDisp] by srcReg
23654       * </PRE>
23655       *
23656       * @param dstBase the destination base register
23657       * @param dstDisp the destination displacement
23658       * @param srcReg must always be ECX
23659       */
23660      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
23661      public final void emitROL_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
23662        int miStart = mi;
23663        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23664        setMachineCodes(mi++, (byte) 0x66);
23665        generateREXprefix(false, null, null, dstBase);
23666        setMachineCodes(mi++, (byte) 0xD3);
23667        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
23668        if (lister != null) lister.RDR(miStart, "ROL", dstBase, dstDisp, srcReg);
23669      }
23670    
23671      /**
23672       * Generate a register-offset--register ROL. That is,
23673       * <PRE>
23674       * rotate left of [dstIndex<<dstScale + dstDisp] by srcReg
23675       * </PRE>
23676       *
23677       * @param dstIndex the destination index register
23678       * @param dstScale the destination shift amount
23679       * @param dstDisp the destination displacement
23680       * @param srcReg must always be ECX
23681       */
23682      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
23683      public final void emitROL_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
23684        int miStart = mi;
23685        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23686        setMachineCodes(mi++, (byte) 0x66);
23687        generateREXprefix(false, null, dstIndex, null);
23688        setMachineCodes(mi++, (byte) 0xD3);
23689        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23690        if (lister != null) lister.RFDR(miStart, "ROL", dstIndex, dstScale, dstDisp, srcReg);
23691      }
23692    
23693      /**
23694       * Generate an absolute--register ROL. That is,
23695       * <PRE>
23696       * rotate left of [dstDisp] by srcReg
23697       * </PRE>
23698       *
23699       * @param dstDisp the destination displacement
23700       * @param srcReg must always be ECX
23701       */
23702      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
23703      public final void emitROL_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
23704        int miStart = mi;
23705        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23706        setMachineCodes(mi++, (byte) 0x66);
23707        generateREXprefix(false, null, null, null);
23708        setMachineCodes(mi++, (byte) 0xD3);
23709        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
23710        if (lister != null) lister.RAR(miStart, "ROL", dstDisp, srcReg);
23711      }
23712    
23713      /**
23714       * Generate a register-displacement--register ROL. That is,
23715       * <PRE>
23716       * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
23717       * </PRE>
23718       *
23719       * @param dstBase the destination base register
23720       * @param dstIndex the destination index register
23721       * @param dstScale the destination shift amount
23722       * @param dstDisp the destination displacement
23723       * @param srcReg must always be ECX
23724       */
23725      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
23726      public final void emitROL_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
23727        int miStart = mi;
23728        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23729        setMachineCodes(mi++, (byte) 0x66);
23730        generateREXprefix(false, null, dstIndex, dstBase);
23731        setMachineCodes(mi++, (byte) 0xD3);
23732        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23733        if (lister != null) lister.RXDR(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
23734      }
23735    
23736      /**
23737       * Generate a register--immediate ROL. That is,
23738       * <PRE>
23739       * rotate left of dstReg by imm
23740       * </PRE>
23741       *
23742       * @param dstReg the destination register
23743       * @param imm immediate
23744       */
23745      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23746      public final void emitROL_Reg_Imm(GPR dstReg, int imm) {
23747        int miStart = mi;
23748        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23749        // no size prefix
23750        generateREXprefix(false, null, null, dstReg);
23751        if (imm == 1) {
23752          setMachineCodes(mi++, (byte) 0xD1);
23753          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
23754        } else {
23755          setMachineCodes(mi++, (byte) 0xC1);
23756          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
23757          emitImm8((byte)imm);
23758        }
23759        if (lister != null) lister.RI(miStart, "ROL", dstReg, imm);
23760      }
23761    
23762      /**
23763       * Generate a register-indirect--immediate ROL. That is,
23764       * <PRE>
23765       * rotate left of [dstBase] by imm
23766       * </PRE>
23767       *
23768       * @param dstBase the destination base register
23769       * @param imm immediate
23770       */
23771      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23772      public final void emitROL_RegInd_Imm(GPR dstBase, int imm) {
23773        int miStart = mi;
23774        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23775        // no size prefix
23776        generateREXprefix(false, null, null, dstBase);
23777        if (imm == 1) {
23778          setMachineCodes(mi++, (byte) 0xD1);
23779          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
23780        } else {
23781          setMachineCodes(mi++, (byte) 0xC1);
23782          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
23783          emitImm8((byte)imm);
23784        }
23785        if (lister != null) lister.RNI(miStart, "ROL", dstBase, imm);
23786      }
23787    
23788      /**
23789       * Generate a register-displacement--immediate ROL. That is,
23790       * <PRE>
23791       * rotate left of [dstBase + dstDisp] by imm
23792       * </PRE>
23793       *
23794       * @param dstBase the destination base register
23795       * @param dstDisp the destination displacement
23796       * @param imm immediate
23797       */
23798      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23799      public final void emitROL_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
23800        int miStart = mi;
23801        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23802        // no size prefix
23803        generateREXprefix(false, null, null, dstBase);
23804        if (imm == 1) {
23805          setMachineCodes(mi++, (byte) 0xD1);
23806          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
23807        } else {
23808          setMachineCodes(mi++, (byte) 0xC1);
23809          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
23810          emitImm8((byte)imm);
23811        }
23812        if (lister != null) lister.RDI(miStart, "ROL", dstBase, dstDisp, imm);
23813      }
23814    
23815      /**
23816       * Generate a register-offset--immediate ROL. That is,
23817       * <PRE>
23818       * rotate left of [dstIndex<<dstScale + dstDisp] by imm
23819       * </PRE>
23820       *
23821       * @param dstIndex the destination index register
23822       * @param dstScale the destination shift amount
23823       * @param dstDisp the destination displacement
23824       * @param imm immediate
23825       */
23826      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
23827      public final void emitROL_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
23828        int miStart = mi;
23829        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23830        // no size prefix
23831        generateREXprefix(false, null, dstIndex, null);
23832        if (imm == 1) {
23833          setMachineCodes(mi++, (byte) 0xD1);
23834          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23835        } else {
23836          setMachineCodes(mi++, (byte) 0xC1);
23837          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23838          emitImm8((byte)imm);
23839        }
23840        if (lister != null) lister.RFDI(miStart, "ROL", dstIndex, dstScale, dstDisp, imm);
23841      }
23842    
23843      /**
23844       * Generate a absolute--immediate ROL. That is,
23845       * <PRE>
23846       * rotate left of [dstDisp] by imm
23847       * </PRE>
23848       *
23849       * @param dstDisp the destination displacement
23850       * @param imm immediate
23851       */
23852      public final void emitROL_Abs_Imm(Address dstDisp, int imm) {
23853        int miStart = mi;
23854        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23855        // no size prefix
23856        generateREXprefix(false, null, null, null);
23857        if (imm == 1) {
23858          setMachineCodes(mi++, (byte) 0xD1);
23859          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
23860        } else {
23861          setMachineCodes(mi++, (byte) 0xC1);
23862          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
23863          emitImm8((byte)imm);
23864        }
23865        if (lister != null) lister.RAI(miStart, "ROL", dstDisp, imm);
23866      }
23867    
23868      /**
23869       * Generate a register-index--immediate ROL. That is,
23870       * <PRE>
23871       * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
23872       * </PRE>
23873       *
23874       * @param dstBase the destination base register
23875       * @param dstIndex the destination index register
23876       * @param dstScale the destination shift amount
23877       * @param dstDisp the destination displacement
23878       * @param imm immediate
23879       */
23880      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23881      public final void emitROL_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
23882        int miStart = mi;
23883        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
23884        // no size prefix
23885        generateREXprefix(false, null, dstIndex, dstBase);
23886        if (imm == 1) {
23887          setMachineCodes(mi++, (byte) 0xD1);
23888          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23889        } else {
23890          setMachineCodes(mi++, (byte) 0xC1);
23891          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23892          emitImm8((byte)imm);
23893        }
23894        if (lister != null) lister.RXDI(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, imm);
23895      }
23896    
23897      /**
23898       * Generate a register--register ROL. That is,
23899       * <PRE>
23900       * rotate left of dstReg by srcReg
23901       * </PRE>
23902       *
23903       * @param dstReg the destination register
23904       * @param srcReg must always be ECX
23905       */
23906      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23907      public final void emitROL_Reg_Reg(GPR dstReg, GPR srcReg) {
23908        int miStart = mi;
23909        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23910        // no size prefix
23911        generateREXprefix(false, null, null, dstReg);
23912        setMachineCodes(mi++, (byte) 0xD3);
23913        emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
23914        if (lister != null) lister.RR(miStart, "ROL", dstReg, srcReg);
23915      }
23916    
23917      /**
23918       * Generate a register-indirect--register ROL. That is,
23919       * <PRE>
23920       * rotate left of [dstBase] by srcReg
23921       * </PRE>
23922       *
23923       * @param dstBase the destination register
23924       * @param srcReg must always be ECX
23925       */
23926      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
23927      public final void emitROL_RegInd_Reg(GPR dstBase, GPR srcReg) {
23928        int miStart = mi;
23929        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23930        // no size prefix
23931        generateREXprefix(false, null, null, dstBase);
23932        setMachineCodes(mi++, (byte) 0xD3);
23933        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
23934        if (lister != null) lister.RNR(miStart, "ROL", dstBase, srcReg);
23935      }
23936    
23937      /**
23938       * Generate a register-displacement--register ROL. That is,
23939       * <PRE>
23940       * rotate left of [dstBase + dstDisp] by srcReg
23941       * </PRE>
23942       *
23943       * @param dstBase the destination base register
23944       * @param dstDisp the destination displacement
23945       * @param srcReg must always be ECX
23946       */
23947      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
23948      public final void emitROL_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
23949        int miStart = mi;
23950        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23951        // no size prefix
23952        generateREXprefix(false, null, null, dstBase);
23953        setMachineCodes(mi++, (byte) 0xD3);
23954        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
23955        if (lister != null) lister.RDR(miStart, "ROL", dstBase, dstDisp, srcReg);
23956      }
23957    
23958      /**
23959       * Generate a register-offset--register ROL. That is,
23960       * <PRE>
23961       * rotate left of [dstIndex<<dstScale + dstDisp] by srcReg
23962       * </PRE>
23963       *
23964       * @param dstIndex the destination index register
23965       * @param dstScale the destination shift amount
23966       * @param dstDisp the destination displacement
23967       * @param srcReg must always be ECX
23968       */
23969      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
23970      public final void emitROL_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
23971        int miStart = mi;
23972        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23973        // no size prefix
23974        generateREXprefix(false, null, dstIndex, null);
23975        setMachineCodes(mi++, (byte) 0xD3);
23976        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
23977        if (lister != null) lister.RFDR(miStart, "ROL", dstIndex, dstScale, dstDisp, srcReg);
23978      }
23979    
23980      /**
23981       * Generate an absolute--register ROL. That is,
23982       * <PRE>
23983       * rotate left of [dstDisp] by srcReg
23984       * </PRE>
23985       *
23986       * @param dstDisp the destination displacement
23987       * @param srcReg must always be ECX
23988       */
23989      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
23990      public final void emitROL_Abs_Reg(Address dstDisp, GPR srcReg) {
23991        int miStart = mi;
23992        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
23993        // no size prefix
23994        generateREXprefix(false, null, null, null);
23995        setMachineCodes(mi++, (byte) 0xD3);
23996        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
23997        if (lister != null) lister.RAR(miStart, "ROL", dstDisp, srcReg);
23998      }
23999    
24000      /**
24001       * Generate a register-displacement--register ROL. That is,
24002       * <PRE>
24003       * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
24004       * </PRE>
24005       *
24006       * @param dstBase the destination base register
24007       * @param dstIndex the destination index register
24008       * @param dstScale the destination shift amount
24009       * @param dstDisp the destination displacement
24010       * @param srcReg must always be ECX
24011       */
24012      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
24013      public final void emitROL_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
24014        int miStart = mi;
24015        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24016        // no size prefix
24017        generateREXprefix(false, null, dstIndex, dstBase);
24018        setMachineCodes(mi++, (byte) 0xD3);
24019        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
24020        if (lister != null) lister.RXDR(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
24021      }
24022    
24023      /**
24024       * Generate a register--immediate ROL. That is,
24025       * <PRE>
24026       * rotate left of dstReg by imm
24027       * </PRE>
24028       *
24029       * @param dstReg the destination register
24030       * @param imm immediate
24031       */
24032      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24033      public final void emitROL_Reg_Imm_Quad(GPR dstReg, int imm) {
24034        int miStart = mi;
24035        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24036        // no size prefix
24037        generateREXprefix(true, null, null, dstReg);
24038        if (imm == 1) {
24039          setMachineCodes(mi++, (byte) 0xD1);
24040          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
24041        } else {
24042          setMachineCodes(mi++, (byte) 0xC1);
24043          emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
24044          emitImm8((byte)imm);
24045        }
24046        if (lister != null) lister.RI(miStart, "ROL", dstReg, imm);
24047      }
24048    
24049      /**
24050       * Generate a register-indirect--immediate ROL. That is,
24051       * <PRE>
24052       * rotate left of [dstBase] by imm
24053       * </PRE>
24054       *
24055       * @param dstBase the destination base register
24056       * @param imm immediate
24057       */
24058      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24059      public final void emitROL_RegInd_Imm_Quad(GPR dstBase, int imm) {
24060        int miStart = mi;
24061        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24062        // no size prefix
24063        generateREXprefix(true, null, null, dstBase);
24064        if (imm == 1) {
24065          setMachineCodes(mi++, (byte) 0xD1);
24066          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
24067        } else {
24068          setMachineCodes(mi++, (byte) 0xC1);
24069          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
24070          emitImm8((byte)imm);
24071        }
24072        if (lister != null) lister.RNI(miStart, "ROL", dstBase, imm);
24073      }
24074    
24075      /**
24076       * Generate a register-displacement--immediate ROL. That is,
24077       * <PRE>
24078       * rotate left of [dstBase + dstDisp] by imm
24079       * </PRE>
24080       *
24081       * @param dstBase the destination base register
24082       * @param dstDisp the destination displacement
24083       * @param imm immediate
24084       */
24085      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24086      public final void emitROL_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
24087        int miStart = mi;
24088        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24089        // no size prefix
24090        generateREXprefix(true, null, null, dstBase);
24091        if (imm == 1) {
24092          setMachineCodes(mi++, (byte) 0xD1);
24093          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
24094        } else {
24095          setMachineCodes(mi++, (byte) 0xC1);
24096          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
24097          emitImm8((byte)imm);
24098        }
24099        if (lister != null) lister.RDI(miStart, "ROL", dstBase, dstDisp, imm);
24100      }
24101    
24102      /**
24103       * Generate a register-offset--immediate ROL. That is,
24104       * <PRE>
24105       * rotate left of [dstIndex<<dstScale + dstDisp] by imm
24106       * </PRE>
24107       *
24108       * @param dstIndex the destination index register
24109       * @param dstScale the destination shift amount
24110       * @param dstDisp the destination displacement
24111       * @param imm immediate
24112       */
24113      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24114      public final void emitROL_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
24115        int miStart = mi;
24116        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24117        // no size prefix
24118        generateREXprefix(true, null, dstIndex, null);
24119        if (imm == 1) {
24120          setMachineCodes(mi++, (byte) 0xD1);
24121          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
24122        } else {
24123          setMachineCodes(mi++, (byte) 0xC1);
24124          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
24125          emitImm8((byte)imm);
24126        }
24127        if (lister != null) lister.RFDI(miStart, "ROL", dstIndex, dstScale, dstDisp, imm);
24128      }
24129    
24130      /**
24131       * Generate a absolute--immediate ROL. That is,
24132       * <PRE>
24133       * rotate left of [dstDisp] by imm
24134       * </PRE>
24135       *
24136       * @param dstDisp the destination displacement
24137       * @param imm immediate
24138       */
24139      public final void emitROL_Abs_Imm_Quad(Address dstDisp, int imm) {
24140        int miStart = mi;
24141        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24142        // no size prefix
24143        generateREXprefix(true, null, null, null);
24144        if (imm == 1) {
24145          setMachineCodes(mi++, (byte) 0xD1);
24146          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
24147        } else {
24148          setMachineCodes(mi++, (byte) 0xC1);
24149          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
24150          emitImm8((byte)imm);
24151        }
24152        if (lister != null) lister.RAI(miStart, "ROL", dstDisp, imm);
24153      }
24154    
24155      /**
24156       * Generate a register-index--immediate ROL. That is,
24157       * <PRE>
24158       * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
24159       * </PRE>
24160       *
24161       * @param dstBase the destination base register
24162       * @param dstIndex the destination index register
24163       * @param dstScale the destination shift amount
24164       * @param dstDisp the destination displacement
24165       * @param imm immediate
24166       */
24167      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
24168      public final void emitROL_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
24169        int miStart = mi;
24170        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24171        // no size prefix
24172        generateREXprefix(true, null, dstIndex, dstBase);
24173        if (imm == 1) {
24174          setMachineCodes(mi++, (byte) 0xD1);
24175          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
24176        } else {
24177          setMachineCodes(mi++, (byte) 0xC1);
24178          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
24179          emitImm8((byte)imm);
24180        }
24181        if (lister != null) lister.RXDI(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, imm);
24182      }
24183    
24184      /**
24185       * Generate a register--register ROL. That is,
24186       * <PRE>
24187       * rotate left of dstReg by srcReg
24188       * </PRE>
24189       *
24190       * @param dstReg the destination register
24191       * @param srcReg must always be ECX
24192       */
24193      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
24194      public final void emitROL_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
24195        int miStart = mi;
24196        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24197        // no size prefix
24198        generateREXprefix(true, null, null, dstReg);
24199        setMachineCodes(mi++, (byte) 0xD3);
24200        emitRegRegOperands(dstReg, GPR.getForOpcode(0x0));
24201        if (lister != null) lister.RR(miStart, "ROL", dstReg, srcReg);
24202      }
24203    
24204      /**
24205       * Generate a register-indirect--register ROL. That is,
24206       * <PRE>
24207       * rotate left of [dstBase] by srcReg
24208       * </PRE>
24209       *
24210       * @param dstBase the destination register
24211       * @param srcReg must always be ECX
24212       */
24213      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
24214      public final void emitROL_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
24215        int miStart = mi;
24216        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24217        // no size prefix
24218        generateREXprefix(true, null, null, dstBase);
24219        setMachineCodes(mi++, (byte) 0xD3);
24220        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x0));
24221        if (lister != null) lister.RNR(miStart, "ROL", dstBase, srcReg);
24222      }
24223    
24224      /**
24225       * Generate a register-displacement--register ROL. That is,
24226       * <PRE>
24227       * rotate left of [dstBase + dstDisp] by srcReg
24228       * </PRE>
24229       *
24230       * @param dstBase the destination base register
24231       * @param dstDisp the destination displacement
24232       * @param srcReg must always be ECX
24233       */
24234      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
24235      public final void emitROL_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
24236        int miStart = mi;
24237        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24238        // no size prefix
24239        generateREXprefix(true, null, null, dstBase);
24240        setMachineCodes(mi++, (byte) 0xD3);
24241        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x0));
24242        if (lister != null) lister.RDR(miStart, "ROL", dstBase, dstDisp, srcReg);
24243      }
24244    
24245      /**
24246       * Generate a register-offset--register ROL. That is,
24247       * <PRE>
24248       * rotate left of [dstIndex<<dstScale + dstDisp] by srcReg
24249       * </PRE>
24250       *
24251       * @param dstIndex the destination index register
24252       * @param dstScale the destination shift amount
24253       * @param dstDisp the destination displacement
24254       * @param srcReg must always be ECX
24255       */
24256      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
24257      public final void emitROL_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
24258        int miStart = mi;
24259        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24260        // no size prefix
24261        generateREXprefix(true, null, dstIndex, null);
24262        setMachineCodes(mi++, (byte) 0xD3);
24263        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
24264        if (lister != null) lister.RFDR(miStart, "ROL", dstIndex, dstScale, dstDisp, srcReg);
24265      }
24266    
24267      /**
24268       * Generate an absolute--register ROL. That is,
24269       * <PRE>
24270       * rotate left of [dstDisp] by srcReg
24271       * </PRE>
24272       *
24273       * @param dstDisp the destination displacement
24274       * @param srcReg must always be ECX
24275       */
24276      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
24277      public final void emitROL_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
24278        int miStart = mi;
24279        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24280        // no size prefix
24281        generateREXprefix(true, null, null, null);
24282        setMachineCodes(mi++, (byte) 0xD3);
24283        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x0));
24284        if (lister != null) lister.RAR(miStart, "ROL", dstDisp, srcReg);
24285      }
24286    
24287      /**
24288       * Generate a register-displacement--register ROL. That is,
24289       * <PRE>
24290       * rotate left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
24291       * </PRE>
24292       *
24293       * @param dstBase the destination base register
24294       * @param dstIndex the destination index register
24295       * @param dstScale the destination shift amount
24296       * @param dstDisp the destination displacement
24297       * @param srcReg must always be ECX
24298       */
24299      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
24300      public final void emitROL_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
24301        int miStart = mi;
24302        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24303        // no size prefix
24304        generateREXprefix(true, null, dstIndex, dstBase);
24305        setMachineCodes(mi++, (byte) 0xD3);
24306        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x0));
24307        if (lister != null) lister.RXDR(miStart, "ROL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
24308      }
24309    
24310      /**
24311       * Generate a register--immediate ROR. That is,
24312       * <PRE>
24313       * rotate right of dstReg by imm
24314       * </PRE>
24315       *
24316       * @param dstReg the destination register
24317       * @param imm immediate
24318       */
24319      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24320      public final void emitROR_Reg_Imm_Byte(GPR dstReg, int imm) {
24321        int miStart = mi;
24322        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24323        // no size prefix
24324        generateREXprefix(false, null, null, dstReg);
24325        if (imm == 1) {
24326          setMachineCodes(mi++, (byte) 0xD0);
24327          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
24328        } else {
24329          setMachineCodes(mi++, (byte) 0xC0);
24330          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
24331          emitImm8((byte)imm);
24332        }
24333        if (lister != null) lister.RI(miStart, "ROR", dstReg, imm);
24334      }
24335    
24336      /**
24337       * Generate a register-indirect--immediate ROR. That is,
24338       * <PRE>
24339       * rotate right of [dstBase] by imm
24340       * </PRE>
24341       *
24342       * @param dstBase the destination base register
24343       * @param imm immediate
24344       */
24345      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24346      public final void emitROR_RegInd_Imm_Byte(GPR dstBase, int imm) {
24347        int miStart = mi;
24348        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24349        // no size prefix
24350        generateREXprefix(false, null, null, dstBase);
24351        if (imm == 1) {
24352          setMachineCodes(mi++, (byte) 0xD0);
24353          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
24354        } else {
24355          setMachineCodes(mi++, (byte) 0xC0);
24356          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
24357          emitImm8((byte)imm);
24358        }
24359        if (lister != null) lister.RNI(miStart, "ROR", dstBase, imm);
24360      }
24361    
24362      /**
24363       * Generate a register-displacement--immediate ROR. That is,
24364       * <PRE>
24365       * rotate right of [dstBase + dstDisp] by imm
24366       * </PRE>
24367       *
24368       * @param dstBase the destination base register
24369       * @param dstDisp the destination displacement
24370       * @param imm immediate
24371       */
24372      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24373      public final void emitROR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
24374        int miStart = mi;
24375        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24376        // no size prefix
24377        generateREXprefix(false, null, null, dstBase);
24378        if (imm == 1) {
24379          setMachineCodes(mi++, (byte) 0xD0);
24380          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
24381        } else {
24382          setMachineCodes(mi++, (byte) 0xC0);
24383          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
24384          emitImm8((byte)imm);
24385        }
24386        if (lister != null) lister.RDI(miStart, "ROR", dstBase, dstDisp, imm);
24387      }
24388    
24389      /**
24390       * Generate a register-offset--immediate ROR. That is,
24391       * <PRE>
24392       * rotate right of [dstIndex<<dstScale + dstDisp] by imm
24393       * </PRE>
24394       *
24395       * @param dstIndex the destination index register
24396       * @param dstScale the destination shift amount
24397       * @param dstDisp the destination displacement
24398       * @param imm immediate
24399       */
24400      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24401      public final void emitROR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
24402        int miStart = mi;
24403        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24404        // no size prefix
24405        generateREXprefix(false, null, dstIndex, null);
24406        if (imm == 1) {
24407          setMachineCodes(mi++, (byte) 0xD0);
24408          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24409        } else {
24410          setMachineCodes(mi++, (byte) 0xC0);
24411          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24412          emitImm8((byte)imm);
24413        }
24414        if (lister != null) lister.RFDI(miStart, "ROR", dstIndex, dstScale, dstDisp, imm);
24415      }
24416    
24417      /**
24418       * Generate a absolute--immediate ROR. That is,
24419       * <PRE>
24420       * rotate right of [dstDisp] by imm
24421       * </PRE>
24422       *
24423       * @param dstDisp the destination displacement
24424       * @param imm immediate
24425       */
24426      public final void emitROR_Abs_Imm_Byte(Address dstDisp, int imm) {
24427        int miStart = mi;
24428        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24429        // no size prefix
24430        generateREXprefix(false, null, null, null);
24431        if (imm == 1) {
24432          setMachineCodes(mi++, (byte) 0xD0);
24433          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
24434        } else {
24435          setMachineCodes(mi++, (byte) 0xC0);
24436          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
24437          emitImm8((byte)imm);
24438        }
24439        if (lister != null) lister.RAI(miStart, "ROR", dstDisp, imm);
24440      }
24441    
24442      /**
24443       * Generate a register-index--immediate ROR. That is,
24444       * <PRE>
24445       * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
24446       * </PRE>
24447       *
24448       * @param dstBase the destination base register
24449       * @param dstIndex the destination index register
24450       * @param dstScale the destination shift amount
24451       * @param dstDisp the destination displacement
24452       * @param imm immediate
24453       */
24454      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
24455      public final void emitROR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
24456        int miStart = mi;
24457        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24458        // no size prefix
24459        generateREXprefix(false, null, dstIndex, dstBase);
24460        if (imm == 1) {
24461          setMachineCodes(mi++, (byte) 0xD0);
24462          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24463        } else {
24464          setMachineCodes(mi++, (byte) 0xC0);
24465          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24466          emitImm8((byte)imm);
24467        }
24468        if (lister != null) lister.RXDI(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, imm);
24469      }
24470    
24471      /**
24472       * Generate a register--register ROR. That is,
24473       * <PRE>
24474       * rotate right of dstReg by srcReg
24475       * </PRE>
24476       *
24477       * @param dstReg the destination register
24478       * @param srcReg must always be ECX
24479       */
24480      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
24481      public final void emitROR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
24482        int miStart = mi;
24483        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24484        // no size prefix
24485        generateREXprefix(false, null, null, dstReg);
24486        setMachineCodes(mi++, (byte) 0xD2);
24487        emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
24488        if (lister != null) lister.RR(miStart, "ROR", dstReg, srcReg);
24489      }
24490    
24491      /**
24492       * Generate a register-indirect--register ROR. That is,
24493       * <PRE>
24494       * rotate right of [dstBase] by srcReg
24495       * </PRE>
24496       *
24497       * @param dstBase the destination register
24498       * @param srcReg must always be ECX
24499       */
24500      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
24501      public final void emitROR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
24502        int miStart = mi;
24503        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24504        // no size prefix
24505        generateREXprefix(false, null, null, dstBase);
24506        setMachineCodes(mi++, (byte) 0xD2);
24507        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
24508        if (lister != null) lister.RNR(miStart, "ROR", dstBase, srcReg);
24509      }
24510    
24511      /**
24512       * Generate a register-displacement--register ROR. That is,
24513       * <PRE>
24514       * rotate right of [dstBase + dstDisp] by srcReg
24515       * </PRE>
24516       *
24517       * @param dstBase the destination base register
24518       * @param dstDisp the destination displacement
24519       * @param srcReg must always be ECX
24520       */
24521      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
24522      public final void emitROR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
24523        int miStart = mi;
24524        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24525        // no size prefix
24526        generateREXprefix(false, null, null, dstBase);
24527        setMachineCodes(mi++, (byte) 0xD2);
24528        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
24529        if (lister != null) lister.RDR(miStart, "ROR", dstBase, dstDisp, srcReg);
24530      }
24531    
24532      /**
24533       * Generate a register-offset--register ROR. That is,
24534       * <PRE>
24535       * rotate right of [dstIndex<<dstScale + dstDisp] by srcReg
24536       * </PRE>
24537       *
24538       * @param dstIndex the destination index register
24539       * @param dstScale the destination shift amount
24540       * @param dstDisp the destination displacement
24541       * @param srcReg must always be ECX
24542       */
24543      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
24544      public final void emitROR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
24545        int miStart = mi;
24546        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24547        // no size prefix
24548        generateREXprefix(false, null, dstIndex, null);
24549        setMachineCodes(mi++, (byte) 0xD2);
24550        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24551        if (lister != null) lister.RFDR(miStart, "ROR", dstIndex, dstScale, dstDisp, srcReg);
24552      }
24553    
24554      /**
24555       * Generate an absolute--register ROR. That is,
24556       * <PRE>
24557       * rotate right of [dstDisp] by srcReg
24558       * </PRE>
24559       *
24560       * @param dstDisp the destination displacement
24561       * @param srcReg must always be ECX
24562       */
24563      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
24564      public final void emitROR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
24565        int miStart = mi;
24566        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24567        // no size prefix
24568        generateREXprefix(false, null, null, null);
24569        setMachineCodes(mi++, (byte) 0xD2);
24570        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
24571        if (lister != null) lister.RAR(miStart, "ROR", dstDisp, srcReg);
24572      }
24573    
24574      /**
24575       * Generate a register-displacement--register ROR. That is,
24576       * <PRE>
24577       * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
24578       * </PRE>
24579       *
24580       * @param dstBase the destination base register
24581       * @param dstIndex the destination index register
24582       * @param dstScale the destination shift amount
24583       * @param dstDisp the destination displacement
24584       * @param srcReg must always be ECX
24585       */
24586      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
24587      public final void emitROR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
24588        int miStart = mi;
24589        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24590        // no size prefix
24591        generateREXprefix(false, null, dstIndex, dstBase);
24592        setMachineCodes(mi++, (byte) 0xD2);
24593        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24594        if (lister != null) lister.RXDR(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
24595      }
24596    
24597      /**
24598       * Generate a register--immediate ROR. That is,
24599       * <PRE>
24600       * rotate right of dstReg by imm
24601       * </PRE>
24602       *
24603       * @param dstReg the destination register
24604       * @param imm immediate
24605       */
24606      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24607      public final void emitROR_Reg_Imm_Word(GPR dstReg, int imm) {
24608        int miStart = mi;
24609        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24610        setMachineCodes(mi++, (byte) 0x66);
24611        generateREXprefix(false, null, null, dstReg);
24612        if (imm == 1) {
24613          setMachineCodes(mi++, (byte) 0xD1);
24614          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
24615        } else {
24616          setMachineCodes(mi++, (byte) 0xC1);
24617          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
24618          emitImm8((byte)imm);
24619        }
24620        if (lister != null) lister.RI(miStart, "ROR", dstReg, imm);
24621      }
24622    
24623      /**
24624       * Generate a register-indirect--immediate ROR. That is,
24625       * <PRE>
24626       * rotate right of [dstBase] by imm
24627       * </PRE>
24628       *
24629       * @param dstBase the destination base register
24630       * @param imm immediate
24631       */
24632      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24633      public final void emitROR_RegInd_Imm_Word(GPR dstBase, int imm) {
24634        int miStart = mi;
24635        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24636        setMachineCodes(mi++, (byte) 0x66);
24637        generateREXprefix(false, null, null, dstBase);
24638        if (imm == 1) {
24639          setMachineCodes(mi++, (byte) 0xD1);
24640          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
24641        } else {
24642          setMachineCodes(mi++, (byte) 0xC1);
24643          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
24644          emitImm8((byte)imm);
24645        }
24646        if (lister != null) lister.RNI(miStart, "ROR", dstBase, imm);
24647      }
24648    
24649      /**
24650       * Generate a register-displacement--immediate ROR. That is,
24651       * <PRE>
24652       * rotate right of [dstBase + dstDisp] by imm
24653       * </PRE>
24654       *
24655       * @param dstBase the destination base register
24656       * @param dstDisp the destination displacement
24657       * @param imm immediate
24658       */
24659      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24660      public final void emitROR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
24661        int miStart = mi;
24662        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24663        setMachineCodes(mi++, (byte) 0x66);
24664        generateREXprefix(false, null, null, dstBase);
24665        if (imm == 1) {
24666          setMachineCodes(mi++, (byte) 0xD1);
24667          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
24668        } else {
24669          setMachineCodes(mi++, (byte) 0xC1);
24670          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
24671          emitImm8((byte)imm);
24672        }
24673        if (lister != null) lister.RDI(miStart, "ROR", dstBase, dstDisp, imm);
24674      }
24675    
24676      /**
24677       * Generate a register-offset--immediate ROR. That is,
24678       * <PRE>
24679       * rotate right of [dstIndex<<dstScale + dstDisp] by imm
24680       * </PRE>
24681       *
24682       * @param dstIndex the destination index register
24683       * @param dstScale the destination shift amount
24684       * @param dstDisp the destination displacement
24685       * @param imm immediate
24686       */
24687      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24688      public final void emitROR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
24689        int miStart = mi;
24690        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24691        setMachineCodes(mi++, (byte) 0x66);
24692        generateREXprefix(false, null, dstIndex, null);
24693        if (imm == 1) {
24694          setMachineCodes(mi++, (byte) 0xD1);
24695          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24696        } else {
24697          setMachineCodes(mi++, (byte) 0xC1);
24698          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24699          emitImm8((byte)imm);
24700        }
24701        if (lister != null) lister.RFDI(miStart, "ROR", dstIndex, dstScale, dstDisp, imm);
24702      }
24703    
24704      /**
24705       * Generate a absolute--immediate ROR. That is,
24706       * <PRE>
24707       * rotate right of [dstDisp] by imm
24708       * </PRE>
24709       *
24710       * @param dstDisp the destination displacement
24711       * @param imm immediate
24712       */
24713      public final void emitROR_Abs_Imm_Word(Address dstDisp, int imm) {
24714        int miStart = mi;
24715        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24716        setMachineCodes(mi++, (byte) 0x66);
24717        generateREXprefix(false, null, null, null);
24718        if (imm == 1) {
24719          setMachineCodes(mi++, (byte) 0xD1);
24720          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
24721        } else {
24722          setMachineCodes(mi++, (byte) 0xC1);
24723          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
24724          emitImm8((byte)imm);
24725        }
24726        if (lister != null) lister.RAI(miStart, "ROR", dstDisp, imm);
24727      }
24728    
24729      /**
24730       * Generate a register-index--immediate ROR. That is,
24731       * <PRE>
24732       * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
24733       * </PRE>
24734       *
24735       * @param dstBase the destination base register
24736       * @param dstIndex the destination index register
24737       * @param dstScale the destination shift amount
24738       * @param dstDisp the destination displacement
24739       * @param imm immediate
24740       */
24741      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
24742      public final void emitROR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
24743        int miStart = mi;
24744        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24745        setMachineCodes(mi++, (byte) 0x66);
24746        generateREXprefix(false, null, dstIndex, dstBase);
24747        if (imm == 1) {
24748          setMachineCodes(mi++, (byte) 0xD1);
24749          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24750        } else {
24751          setMachineCodes(mi++, (byte) 0xC1);
24752          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24753          emitImm8((byte)imm);
24754        }
24755        if (lister != null) lister.RXDI(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, imm);
24756      }
24757    
24758      /**
24759       * Generate a register--register ROR. That is,
24760       * <PRE>
24761       * rotate right of dstReg by srcReg
24762       * </PRE>
24763       *
24764       * @param dstReg the destination register
24765       * @param srcReg must always be ECX
24766       */
24767      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
24768      public final void emitROR_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
24769        int miStart = mi;
24770        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24771        setMachineCodes(mi++, (byte) 0x66);
24772        generateREXprefix(false, null, null, dstReg);
24773        setMachineCodes(mi++, (byte) 0xD3);
24774        emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
24775        if (lister != null) lister.RR(miStart, "ROR", dstReg, srcReg);
24776      }
24777    
24778      /**
24779       * Generate a register-indirect--register ROR. That is,
24780       * <PRE>
24781       * rotate right of [dstBase] by srcReg
24782       * </PRE>
24783       *
24784       * @param dstBase the destination register
24785       * @param srcReg must always be ECX
24786       */
24787      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
24788      public final void emitROR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
24789        int miStart = mi;
24790        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24791        setMachineCodes(mi++, (byte) 0x66);
24792        generateREXprefix(false, null, null, dstBase);
24793        setMachineCodes(mi++, (byte) 0xD3);
24794        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
24795        if (lister != null) lister.RNR(miStart, "ROR", dstBase, srcReg);
24796      }
24797    
24798      /**
24799       * Generate a register-displacement--register ROR. That is,
24800       * <PRE>
24801       * rotate right of [dstBase + dstDisp] by srcReg
24802       * </PRE>
24803       *
24804       * @param dstBase the destination base register
24805       * @param dstDisp the destination displacement
24806       * @param srcReg must always be ECX
24807       */
24808      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
24809      public final void emitROR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
24810        int miStart = mi;
24811        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24812        setMachineCodes(mi++, (byte) 0x66);
24813        generateREXprefix(false, null, null, dstBase);
24814        setMachineCodes(mi++, (byte) 0xD3);
24815        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
24816        if (lister != null) lister.RDR(miStart, "ROR", dstBase, dstDisp, srcReg);
24817      }
24818    
24819      /**
24820       * Generate a register-offset--register ROR. That is,
24821       * <PRE>
24822       * rotate right of [dstIndex<<dstScale + dstDisp] by srcReg
24823       * </PRE>
24824       *
24825       * @param dstIndex the destination index register
24826       * @param dstScale the destination shift amount
24827       * @param dstDisp the destination displacement
24828       * @param srcReg must always be ECX
24829       */
24830      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
24831      public final void emitROR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
24832        int miStart = mi;
24833        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24834        setMachineCodes(mi++, (byte) 0x66);
24835        generateREXprefix(false, null, dstIndex, null);
24836        setMachineCodes(mi++, (byte) 0xD3);
24837        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24838        if (lister != null) lister.RFDR(miStart, "ROR", dstIndex, dstScale, dstDisp, srcReg);
24839      }
24840    
24841      /**
24842       * Generate an absolute--register ROR. That is,
24843       * <PRE>
24844       * rotate right of [dstDisp] by srcReg
24845       * </PRE>
24846       *
24847       * @param dstDisp the destination displacement
24848       * @param srcReg must always be ECX
24849       */
24850      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
24851      public final void emitROR_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
24852        int miStart = mi;
24853        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24854        setMachineCodes(mi++, (byte) 0x66);
24855        generateREXprefix(false, null, null, null);
24856        setMachineCodes(mi++, (byte) 0xD3);
24857        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
24858        if (lister != null) lister.RAR(miStart, "ROR", dstDisp, srcReg);
24859      }
24860    
24861      /**
24862       * Generate a register-displacement--register ROR. That is,
24863       * <PRE>
24864       * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
24865       * </PRE>
24866       *
24867       * @param dstBase the destination base register
24868       * @param dstIndex the destination index register
24869       * @param dstScale the destination shift amount
24870       * @param dstDisp the destination displacement
24871       * @param srcReg must always be ECX
24872       */
24873      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
24874      public final void emitROR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
24875        int miStart = mi;
24876        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
24877        setMachineCodes(mi++, (byte) 0x66);
24878        generateREXprefix(false, null, dstIndex, dstBase);
24879        setMachineCodes(mi++, (byte) 0xD3);
24880        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24881        if (lister != null) lister.RXDR(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
24882      }
24883    
24884      /**
24885       * Generate a register--immediate ROR. That is,
24886       * <PRE>
24887       * rotate right of dstReg by imm
24888       * </PRE>
24889       *
24890       * @param dstReg the destination register
24891       * @param imm immediate
24892       */
24893      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24894      public final void emitROR_Reg_Imm(GPR dstReg, int imm) {
24895        int miStart = mi;
24896        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24897        // no size prefix
24898        generateREXprefix(false, null, null, dstReg);
24899        if (imm == 1) {
24900          setMachineCodes(mi++, (byte) 0xD1);
24901          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
24902        } else {
24903          setMachineCodes(mi++, (byte) 0xC1);
24904          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
24905          emitImm8((byte)imm);
24906        }
24907        if (lister != null) lister.RI(miStart, "ROR", dstReg, imm);
24908      }
24909    
24910      /**
24911       * Generate a register-indirect--immediate ROR. That is,
24912       * <PRE>
24913       * rotate right of [dstBase] by imm
24914       * </PRE>
24915       *
24916       * @param dstBase the destination base register
24917       * @param imm immediate
24918       */
24919      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24920      public final void emitROR_RegInd_Imm(GPR dstBase, int imm) {
24921        int miStart = mi;
24922        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24923        // no size prefix
24924        generateREXprefix(false, null, null, dstBase);
24925        if (imm == 1) {
24926          setMachineCodes(mi++, (byte) 0xD1);
24927          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
24928        } else {
24929          setMachineCodes(mi++, (byte) 0xC1);
24930          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
24931          emitImm8((byte)imm);
24932        }
24933        if (lister != null) lister.RNI(miStart, "ROR", dstBase, imm);
24934      }
24935    
24936      /**
24937       * Generate a register-displacement--immediate ROR. That is,
24938       * <PRE>
24939       * rotate right of [dstBase + dstDisp] by imm
24940       * </PRE>
24941       *
24942       * @param dstBase the destination base register
24943       * @param dstDisp the destination displacement
24944       * @param imm immediate
24945       */
24946      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24947      public final void emitROR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
24948        int miStart = mi;
24949        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24950        // no size prefix
24951        generateREXprefix(false, null, null, dstBase);
24952        if (imm == 1) {
24953          setMachineCodes(mi++, (byte) 0xD1);
24954          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
24955        } else {
24956          setMachineCodes(mi++, (byte) 0xC1);
24957          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
24958          emitImm8((byte)imm);
24959        }
24960        if (lister != null) lister.RDI(miStart, "ROR", dstBase, dstDisp, imm);
24961      }
24962    
24963      /**
24964       * Generate a register-offset--immediate ROR. That is,
24965       * <PRE>
24966       * rotate right of [dstIndex<<dstScale + dstDisp] by imm
24967       * </PRE>
24968       *
24969       * @param dstIndex the destination index register
24970       * @param dstScale the destination shift amount
24971       * @param dstDisp the destination displacement
24972       * @param imm immediate
24973       */
24974      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
24975      public final void emitROR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
24976        int miStart = mi;
24977        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
24978        // no size prefix
24979        generateREXprefix(false, null, dstIndex, null);
24980        if (imm == 1) {
24981          setMachineCodes(mi++, (byte) 0xD1);
24982          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24983        } else {
24984          setMachineCodes(mi++, (byte) 0xC1);
24985          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
24986          emitImm8((byte)imm);
24987        }
24988        if (lister != null) lister.RFDI(miStart, "ROR", dstIndex, dstScale, dstDisp, imm);
24989      }
24990    
24991      /**
24992       * Generate a absolute--immediate ROR. That is,
24993       * <PRE>
24994       * rotate right of [dstDisp] by imm
24995       * </PRE>
24996       *
24997       * @param dstDisp the destination displacement
24998       * @param imm immediate
24999       */
25000      public final void emitROR_Abs_Imm(Address dstDisp, int imm) {
25001        int miStart = mi;
25002        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25003        // no size prefix
25004        generateREXprefix(false, null, null, null);
25005        if (imm == 1) {
25006          setMachineCodes(mi++, (byte) 0xD1);
25007          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
25008        } else {
25009          setMachineCodes(mi++, (byte) 0xC1);
25010          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
25011          emitImm8((byte)imm);
25012        }
25013        if (lister != null) lister.RAI(miStart, "ROR", dstDisp, imm);
25014      }
25015    
25016      /**
25017       * Generate a register-index--immediate ROR. That is,
25018       * <PRE>
25019       * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
25020       * </PRE>
25021       *
25022       * @param dstBase the destination base register
25023       * @param dstIndex the destination index register
25024       * @param dstScale the destination shift amount
25025       * @param dstDisp the destination displacement
25026       * @param imm immediate
25027       */
25028      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25029      public final void emitROR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
25030        int miStart = mi;
25031        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25032        // no size prefix
25033        generateREXprefix(false, null, dstIndex, dstBase);
25034        if (imm == 1) {
25035          setMachineCodes(mi++, (byte) 0xD1);
25036          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
25037        } else {
25038          setMachineCodes(mi++, (byte) 0xC1);
25039          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
25040          emitImm8((byte)imm);
25041        }
25042        if (lister != null) lister.RXDI(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, imm);
25043      }
25044    
25045      /**
25046       * Generate a register--register ROR. That is,
25047       * <PRE>
25048       * rotate right of dstReg by srcReg
25049       * </PRE>
25050       *
25051       * @param dstReg the destination register
25052       * @param srcReg must always be ECX
25053       */
25054      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25055      public final void emitROR_Reg_Reg(GPR dstReg, GPR srcReg) {
25056        int miStart = mi;
25057        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25058        // no size prefix
25059        generateREXprefix(false, null, null, dstReg);
25060        setMachineCodes(mi++, (byte) 0xD3);
25061        emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
25062        if (lister != null) lister.RR(miStart, "ROR", dstReg, srcReg);
25063      }
25064    
25065      /**
25066       * Generate a register-indirect--register ROR. That is,
25067       * <PRE>
25068       * rotate right of [dstBase] by srcReg
25069       * </PRE>
25070       *
25071       * @param dstBase the destination register
25072       * @param srcReg must always be ECX
25073       */
25074      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25075      public final void emitROR_RegInd_Reg(GPR dstBase, GPR srcReg) {
25076        int miStart = mi;
25077        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25078        // no size prefix
25079        generateREXprefix(false, null, null, dstBase);
25080        setMachineCodes(mi++, (byte) 0xD3);
25081        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
25082        if (lister != null) lister.RNR(miStart, "ROR", dstBase, srcReg);
25083      }
25084    
25085      /**
25086       * Generate a register-displacement--register ROR. That is,
25087       * <PRE>
25088       * rotate right of [dstBase + dstDisp] by srcReg
25089       * </PRE>
25090       *
25091       * @param dstBase the destination base register
25092       * @param dstDisp the destination displacement
25093       * @param srcReg must always be ECX
25094       */
25095      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
25096      public final void emitROR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
25097        int miStart = mi;
25098        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25099        // no size prefix
25100        generateREXprefix(false, null, null, dstBase);
25101        setMachineCodes(mi++, (byte) 0xD3);
25102        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
25103        if (lister != null) lister.RDR(miStart, "ROR", dstBase, dstDisp, srcReg);
25104      }
25105    
25106      /**
25107       * Generate a register-offset--register ROR. That is,
25108       * <PRE>
25109       * rotate right of [dstIndex<<dstScale + dstDisp] by srcReg
25110       * </PRE>
25111       *
25112       * @param dstIndex the destination index register
25113       * @param dstScale the destination shift amount
25114       * @param dstDisp the destination displacement
25115       * @param srcReg must always be ECX
25116       */
25117      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
25118      public final void emitROR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
25119        int miStart = mi;
25120        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25121        // no size prefix
25122        generateREXprefix(false, null, dstIndex, null);
25123        setMachineCodes(mi++, (byte) 0xD3);
25124        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
25125        if (lister != null) lister.RFDR(miStart, "ROR", dstIndex, dstScale, dstDisp, srcReg);
25126      }
25127    
25128      /**
25129       * Generate an absolute--register ROR. That is,
25130       * <PRE>
25131       * rotate right of [dstDisp] by srcReg
25132       * </PRE>
25133       *
25134       * @param dstDisp the destination displacement
25135       * @param srcReg must always be ECX
25136       */
25137      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
25138      public final void emitROR_Abs_Reg(Address dstDisp, GPR srcReg) {
25139        int miStart = mi;
25140        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25141        // no size prefix
25142        generateREXprefix(false, null, null, null);
25143        setMachineCodes(mi++, (byte) 0xD3);
25144        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
25145        if (lister != null) lister.RAR(miStart, "ROR", dstDisp, srcReg);
25146      }
25147    
25148      /**
25149       * Generate a register-displacement--register ROR. That is,
25150       * <PRE>
25151       * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
25152       * </PRE>
25153       *
25154       * @param dstBase the destination base register
25155       * @param dstIndex the destination index register
25156       * @param dstScale the destination shift amount
25157       * @param dstDisp the destination displacement
25158       * @param srcReg must always be ECX
25159       */
25160      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
25161      public final void emitROR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
25162        int miStart = mi;
25163        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25164        // no size prefix
25165        generateREXprefix(false, null, dstIndex, dstBase);
25166        setMachineCodes(mi++, (byte) 0xD3);
25167        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
25168        if (lister != null) lister.RXDR(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
25169      }
25170    
25171      /**
25172       * Generate a register--immediate ROR. That is,
25173       * <PRE>
25174       * rotate right of dstReg by imm
25175       * </PRE>
25176       *
25177       * @param dstReg the destination register
25178       * @param imm immediate
25179       */
25180      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25181      public final void emitROR_Reg_Imm_Quad(GPR dstReg, int imm) {
25182        int miStart = mi;
25183        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25184        // no size prefix
25185        generateREXprefix(true, null, null, dstReg);
25186        if (imm == 1) {
25187          setMachineCodes(mi++, (byte) 0xD1);
25188          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
25189        } else {
25190          setMachineCodes(mi++, (byte) 0xC1);
25191          emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
25192          emitImm8((byte)imm);
25193        }
25194        if (lister != null) lister.RI(miStart, "ROR", dstReg, imm);
25195      }
25196    
25197      /**
25198       * Generate a register-indirect--immediate ROR. That is,
25199       * <PRE>
25200       * rotate right of [dstBase] by imm
25201       * </PRE>
25202       *
25203       * @param dstBase the destination base register
25204       * @param imm immediate
25205       */
25206      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25207      public final void emitROR_RegInd_Imm_Quad(GPR dstBase, int imm) {
25208        int miStart = mi;
25209        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25210        // no size prefix
25211        generateREXprefix(true, null, null, dstBase);
25212        if (imm == 1) {
25213          setMachineCodes(mi++, (byte) 0xD1);
25214          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
25215        } else {
25216          setMachineCodes(mi++, (byte) 0xC1);
25217          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
25218          emitImm8((byte)imm);
25219        }
25220        if (lister != null) lister.RNI(miStart, "ROR", dstBase, imm);
25221      }
25222    
25223      /**
25224       * Generate a register-displacement--immediate ROR. That is,
25225       * <PRE>
25226       * rotate right of [dstBase + dstDisp] by imm
25227       * </PRE>
25228       *
25229       * @param dstBase the destination base register
25230       * @param dstDisp the destination displacement
25231       * @param imm immediate
25232       */
25233      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25234      public final void emitROR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
25235        int miStart = mi;
25236        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25237        // no size prefix
25238        generateREXprefix(true, null, null, dstBase);
25239        if (imm == 1) {
25240          setMachineCodes(mi++, (byte) 0xD1);
25241          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
25242        } else {
25243          setMachineCodes(mi++, (byte) 0xC1);
25244          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
25245          emitImm8((byte)imm);
25246        }
25247        if (lister != null) lister.RDI(miStart, "ROR", dstBase, dstDisp, imm);
25248      }
25249    
25250      /**
25251       * Generate a register-offset--immediate ROR. That is,
25252       * <PRE>
25253       * rotate right of [dstIndex<<dstScale + dstDisp] by imm
25254       * </PRE>
25255       *
25256       * @param dstIndex the destination index register
25257       * @param dstScale the destination shift amount
25258       * @param dstDisp the destination displacement
25259       * @param imm immediate
25260       */
25261      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25262      public final void emitROR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
25263        int miStart = mi;
25264        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25265        // no size prefix
25266        generateREXprefix(true, null, dstIndex, null);
25267        if (imm == 1) {
25268          setMachineCodes(mi++, (byte) 0xD1);
25269          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
25270        } else {
25271          setMachineCodes(mi++, (byte) 0xC1);
25272          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
25273          emitImm8((byte)imm);
25274        }
25275        if (lister != null) lister.RFDI(miStart, "ROR", dstIndex, dstScale, dstDisp, imm);
25276      }
25277    
25278      /**
25279       * Generate a absolute--immediate ROR. That is,
25280       * <PRE>
25281       * rotate right of [dstDisp] by imm
25282       * </PRE>
25283       *
25284       * @param dstDisp the destination displacement
25285       * @param imm immediate
25286       */
25287      public final void emitROR_Abs_Imm_Quad(Address dstDisp, int imm) {
25288        int miStart = mi;
25289        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25290        // no size prefix
25291        generateREXprefix(true, null, null, null);
25292        if (imm == 1) {
25293          setMachineCodes(mi++, (byte) 0xD1);
25294          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
25295        } else {
25296          setMachineCodes(mi++, (byte) 0xC1);
25297          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
25298          emitImm8((byte)imm);
25299        }
25300        if (lister != null) lister.RAI(miStart, "ROR", dstDisp, imm);
25301      }
25302    
25303      /**
25304       * Generate a register-index--immediate ROR. That is,
25305       * <PRE>
25306       * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
25307       * </PRE>
25308       *
25309       * @param dstBase the destination base register
25310       * @param dstIndex the destination index register
25311       * @param dstScale the destination shift amount
25312       * @param dstDisp the destination displacement
25313       * @param imm immediate
25314       */
25315      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25316      public final void emitROR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
25317        int miStart = mi;
25318        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25319        // no size prefix
25320        generateREXprefix(true, null, dstIndex, dstBase);
25321        if (imm == 1) {
25322          setMachineCodes(mi++, (byte) 0xD1);
25323          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
25324        } else {
25325          setMachineCodes(mi++, (byte) 0xC1);
25326          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
25327          emitImm8((byte)imm);
25328        }
25329        if (lister != null) lister.RXDI(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, imm);
25330      }
25331    
25332      /**
25333       * Generate a register--register ROR. That is,
25334       * <PRE>
25335       * rotate right of dstReg by srcReg
25336       * </PRE>
25337       *
25338       * @param dstReg the destination register
25339       * @param srcReg must always be ECX
25340       */
25341      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25342      public final void emitROR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
25343        int miStart = mi;
25344        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25345        // no size prefix
25346        generateREXprefix(true, null, null, dstReg);
25347        setMachineCodes(mi++, (byte) 0xD3);
25348        emitRegRegOperands(dstReg, GPR.getForOpcode(0x1));
25349        if (lister != null) lister.RR(miStart, "ROR", dstReg, srcReg);
25350      }
25351    
25352      /**
25353       * Generate a register-indirect--register ROR. That is,
25354       * <PRE>
25355       * rotate right of [dstBase] by srcReg
25356       * </PRE>
25357       *
25358       * @param dstBase the destination register
25359       * @param srcReg must always be ECX
25360       */
25361      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25362      public final void emitROR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
25363        int miStart = mi;
25364        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25365        // no size prefix
25366        generateREXprefix(true, null, null, dstBase);
25367        setMachineCodes(mi++, (byte) 0xD3);
25368        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x1));
25369        if (lister != null) lister.RNR(miStart, "ROR", dstBase, srcReg);
25370      }
25371    
25372      /**
25373       * Generate a register-displacement--register ROR. That is,
25374       * <PRE>
25375       * rotate right of [dstBase + dstDisp] by srcReg
25376       * </PRE>
25377       *
25378       * @param dstBase the destination base register
25379       * @param dstDisp the destination displacement
25380       * @param srcReg must always be ECX
25381       */
25382      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
25383      public final void emitROR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
25384        int miStart = mi;
25385        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25386        // no size prefix
25387        generateREXprefix(true, null, null, dstBase);
25388        setMachineCodes(mi++, (byte) 0xD3);
25389        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x1));
25390        if (lister != null) lister.RDR(miStart, "ROR", dstBase, dstDisp, srcReg);
25391      }
25392    
25393      /**
25394       * Generate a register-offset--register ROR. That is,
25395       * <PRE>
25396       * rotate right of [dstIndex<<dstScale + dstDisp] by srcReg
25397       * </PRE>
25398       *
25399       * @param dstIndex the destination index register
25400       * @param dstScale the destination shift amount
25401       * @param dstDisp the destination displacement
25402       * @param srcReg must always be ECX
25403       */
25404      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
25405      public final void emitROR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
25406        int miStart = mi;
25407        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25408        // no size prefix
25409        generateREXprefix(true, null, dstIndex, null);
25410        setMachineCodes(mi++, (byte) 0xD3);
25411        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
25412        if (lister != null) lister.RFDR(miStart, "ROR", dstIndex, dstScale, dstDisp, srcReg);
25413      }
25414    
25415      /**
25416       * Generate an absolute--register ROR. That is,
25417       * <PRE>
25418       * rotate right of [dstDisp] by srcReg
25419       * </PRE>
25420       *
25421       * @param dstDisp the destination displacement
25422       * @param srcReg must always be ECX
25423       */
25424      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
25425      public final void emitROR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
25426        int miStart = mi;
25427        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25428        // no size prefix
25429        generateREXprefix(true, null, null, null);
25430        setMachineCodes(mi++, (byte) 0xD3);
25431        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x1));
25432        if (lister != null) lister.RAR(miStart, "ROR", dstDisp, srcReg);
25433      }
25434    
25435      /**
25436       * Generate a register-displacement--register ROR. That is,
25437       * <PRE>
25438       * rotate right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
25439       * </PRE>
25440       *
25441       * @param dstBase the destination base register
25442       * @param dstIndex the destination index register
25443       * @param dstScale the destination shift amount
25444       * @param dstDisp the destination displacement
25445       * @param srcReg must always be ECX
25446       */
25447      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
25448      public final void emitROR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
25449        int miStart = mi;
25450        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25451        // no size prefix
25452        generateREXprefix(true, null, dstIndex, dstBase);
25453        setMachineCodes(mi++, (byte) 0xD3);
25454        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x1));
25455        if (lister != null) lister.RXDR(miStart, "ROR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
25456      }
25457    
25458      /**
25459       * Generate a register--immediate RCL. That is,
25460       * <PRE>
25461       * rotate left with carry of dstReg by imm
25462       * </PRE>
25463       *
25464       * @param dstReg the destination register
25465       * @param imm immediate
25466       */
25467      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25468      public final void emitRCL_Reg_Imm_Byte(GPR dstReg, int imm) {
25469        int miStart = mi;
25470        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25471        // no size prefix
25472        generateREXprefix(false, null, null, dstReg);
25473        if (imm == 1) {
25474          setMachineCodes(mi++, (byte) 0xD0);
25475          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
25476        } else {
25477          setMachineCodes(mi++, (byte) 0xC0);
25478          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
25479          emitImm8((byte)imm);
25480        }
25481        if (lister != null) lister.RI(miStart, "RCL", dstReg, imm);
25482      }
25483    
25484      /**
25485       * Generate a register-indirect--immediate RCL. That is,
25486       * <PRE>
25487       * rotate left with carry of [dstBase] by imm
25488       * </PRE>
25489       *
25490       * @param dstBase the destination base register
25491       * @param imm immediate
25492       */
25493      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25494      public final void emitRCL_RegInd_Imm_Byte(GPR dstBase, int imm) {
25495        int miStart = mi;
25496        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25497        // no size prefix
25498        generateREXprefix(false, null, null, dstBase);
25499        if (imm == 1) {
25500          setMachineCodes(mi++, (byte) 0xD0);
25501          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
25502        } else {
25503          setMachineCodes(mi++, (byte) 0xC0);
25504          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
25505          emitImm8((byte)imm);
25506        }
25507        if (lister != null) lister.RNI(miStart, "RCL", dstBase, imm);
25508      }
25509    
25510      /**
25511       * Generate a register-displacement--immediate RCL. That is,
25512       * <PRE>
25513       * rotate left with carry of [dstBase + dstDisp] by imm
25514       * </PRE>
25515       *
25516       * @param dstBase the destination base register
25517       * @param dstDisp the destination displacement
25518       * @param imm immediate
25519       */
25520      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25521      public final void emitRCL_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
25522        int miStart = mi;
25523        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25524        // no size prefix
25525        generateREXprefix(false, null, null, dstBase);
25526        if (imm == 1) {
25527          setMachineCodes(mi++, (byte) 0xD0);
25528          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
25529        } else {
25530          setMachineCodes(mi++, (byte) 0xC0);
25531          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
25532          emitImm8((byte)imm);
25533        }
25534        if (lister != null) lister.RDI(miStart, "RCL", dstBase, dstDisp, imm);
25535      }
25536    
25537      /**
25538       * Generate a register-offset--immediate RCL. That is,
25539       * <PRE>
25540       * rotate left with carry of [dstIndex<<dstScale + dstDisp] by imm
25541       * </PRE>
25542       *
25543       * @param dstIndex the destination index register
25544       * @param dstScale the destination shift amount
25545       * @param dstDisp the destination displacement
25546       * @param imm immediate
25547       */
25548      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25549      public final void emitRCL_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
25550        int miStart = mi;
25551        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25552        // no size prefix
25553        generateREXprefix(false, null, dstIndex, null);
25554        if (imm == 1) {
25555          setMachineCodes(mi++, (byte) 0xD0);
25556          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25557        } else {
25558          setMachineCodes(mi++, (byte) 0xC0);
25559          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25560          emitImm8((byte)imm);
25561        }
25562        if (lister != null) lister.RFDI(miStart, "RCL", dstIndex, dstScale, dstDisp, imm);
25563      }
25564    
25565      /**
25566       * Generate a absolute--immediate RCL. That is,
25567       * <PRE>
25568       * rotate left with carry of [dstDisp] by imm
25569       * </PRE>
25570       *
25571       * @param dstDisp the destination displacement
25572       * @param imm immediate
25573       */
25574      public final void emitRCL_Abs_Imm_Byte(Address dstDisp, int imm) {
25575        int miStart = mi;
25576        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25577        // no size prefix
25578        generateREXprefix(false, null, null, null);
25579        if (imm == 1) {
25580          setMachineCodes(mi++, (byte) 0xD0);
25581          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
25582        } else {
25583          setMachineCodes(mi++, (byte) 0xC0);
25584          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
25585          emitImm8((byte)imm);
25586        }
25587        if (lister != null) lister.RAI(miStart, "RCL", dstDisp, imm);
25588      }
25589    
25590      /**
25591       * Generate a register-index--immediate RCL. That is,
25592       * <PRE>
25593       * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm
25594       * </PRE>
25595       *
25596       * @param dstBase the destination base register
25597       * @param dstIndex the destination index register
25598       * @param dstScale the destination shift amount
25599       * @param dstDisp the destination displacement
25600       * @param imm immediate
25601       */
25602      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25603      public final void emitRCL_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
25604        int miStart = mi;
25605        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25606        // no size prefix
25607        generateREXprefix(false, null, dstIndex, dstBase);
25608        if (imm == 1) {
25609          setMachineCodes(mi++, (byte) 0xD0);
25610          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25611        } else {
25612          setMachineCodes(mi++, (byte) 0xC0);
25613          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25614          emitImm8((byte)imm);
25615        }
25616        if (lister != null) lister.RXDI(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, imm);
25617      }
25618    
25619      /**
25620       * Generate a register--register RCL. That is,
25621       * <PRE>
25622       * rotate left with carry of dstReg by srcReg
25623       * </PRE>
25624       *
25625       * @param dstReg the destination register
25626       * @param srcReg must always be ECX
25627       */
25628      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25629      public final void emitRCL_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
25630        int miStart = mi;
25631        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25632        // no size prefix
25633        generateREXprefix(false, null, null, dstReg);
25634        setMachineCodes(mi++, (byte) 0xD2);
25635        emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
25636        if (lister != null) lister.RR(miStart, "RCL", dstReg, srcReg);
25637      }
25638    
25639      /**
25640       * Generate a register-indirect--register RCL. That is,
25641       * <PRE>
25642       * rotate left with carry of [dstBase] by srcReg
25643       * </PRE>
25644       *
25645       * @param dstBase the destination register
25646       * @param srcReg must always be ECX
25647       */
25648      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25649      public final void emitRCL_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
25650        int miStart = mi;
25651        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25652        // no size prefix
25653        generateREXprefix(false, null, null, dstBase);
25654        setMachineCodes(mi++, (byte) 0xD2);
25655        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
25656        if (lister != null) lister.RNR(miStart, "RCL", dstBase, srcReg);
25657      }
25658    
25659      /**
25660       * Generate a register-displacement--register RCL. That is,
25661       * <PRE>
25662       * rotate left with carry of [dstBase + dstDisp] by srcReg
25663       * </PRE>
25664       *
25665       * @param dstBase the destination base register
25666       * @param dstDisp the destination displacement
25667       * @param srcReg must always be ECX
25668       */
25669      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
25670      public final void emitRCL_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
25671        int miStart = mi;
25672        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25673        // no size prefix
25674        generateREXprefix(false, null, null, dstBase);
25675        setMachineCodes(mi++, (byte) 0xD2);
25676        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
25677        if (lister != null) lister.RDR(miStart, "RCL", dstBase, dstDisp, srcReg);
25678      }
25679    
25680      /**
25681       * Generate a register-offset--register RCL. That is,
25682       * <PRE>
25683       * rotate left with carry of [dstIndex<<dstScale + dstDisp] by srcReg
25684       * </PRE>
25685       *
25686       * @param dstIndex the destination index register
25687       * @param dstScale the destination shift amount
25688       * @param dstDisp the destination displacement
25689       * @param srcReg must always be ECX
25690       */
25691      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
25692      public final void emitRCL_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
25693        int miStart = mi;
25694        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25695        // no size prefix
25696        generateREXprefix(false, null, dstIndex, null);
25697        setMachineCodes(mi++, (byte) 0xD2);
25698        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25699        if (lister != null) lister.RFDR(miStart, "RCL", dstIndex, dstScale, dstDisp, srcReg);
25700      }
25701    
25702      /**
25703       * Generate an absolute--register RCL. That is,
25704       * <PRE>
25705       * rotate left with carry of [dstDisp] by srcReg
25706       * </PRE>
25707       *
25708       * @param dstDisp the destination displacement
25709       * @param srcReg must always be ECX
25710       */
25711      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
25712      public final void emitRCL_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
25713        int miStart = mi;
25714        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25715        // no size prefix
25716        generateREXprefix(false, null, null, null);
25717        setMachineCodes(mi++, (byte) 0xD2);
25718        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
25719        if (lister != null) lister.RAR(miStart, "RCL", dstDisp, srcReg);
25720      }
25721    
25722      /**
25723       * Generate a register-displacement--register RCL. That is,
25724       * <PRE>
25725       * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
25726       * </PRE>
25727       *
25728       * @param dstBase the destination base register
25729       * @param dstIndex the destination index register
25730       * @param dstScale the destination shift amount
25731       * @param dstDisp the destination displacement
25732       * @param srcReg must always be ECX
25733       */
25734      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
25735      public final void emitRCL_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
25736        int miStart = mi;
25737        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25738        // no size prefix
25739        generateREXprefix(false, null, dstIndex, dstBase);
25740        setMachineCodes(mi++, (byte) 0xD2);
25741        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25742        if (lister != null) lister.RXDR(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
25743      }
25744    
25745      /**
25746       * Generate a register--immediate RCL. That is,
25747       * <PRE>
25748       * rotate left with carry of dstReg by imm
25749       * </PRE>
25750       *
25751       * @param dstReg the destination register
25752       * @param imm immediate
25753       */
25754      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25755      public final void emitRCL_Reg_Imm_Word(GPR dstReg, int imm) {
25756        int miStart = mi;
25757        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25758        setMachineCodes(mi++, (byte) 0x66);
25759        generateREXprefix(false, null, null, dstReg);
25760        if (imm == 1) {
25761          setMachineCodes(mi++, (byte) 0xD1);
25762          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
25763        } else {
25764          setMachineCodes(mi++, (byte) 0xC1);
25765          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
25766          emitImm8((byte)imm);
25767        }
25768        if (lister != null) lister.RI(miStart, "RCL", dstReg, imm);
25769      }
25770    
25771      /**
25772       * Generate a register-indirect--immediate RCL. That is,
25773       * <PRE>
25774       * rotate left with carry of [dstBase] by imm
25775       * </PRE>
25776       *
25777       * @param dstBase the destination base register
25778       * @param imm immediate
25779       */
25780      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25781      public final void emitRCL_RegInd_Imm_Word(GPR dstBase, int imm) {
25782        int miStart = mi;
25783        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25784        setMachineCodes(mi++, (byte) 0x66);
25785        generateREXprefix(false, null, null, dstBase);
25786        if (imm == 1) {
25787          setMachineCodes(mi++, (byte) 0xD1);
25788          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
25789        } else {
25790          setMachineCodes(mi++, (byte) 0xC1);
25791          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
25792          emitImm8((byte)imm);
25793        }
25794        if (lister != null) lister.RNI(miStart, "RCL", dstBase, imm);
25795      }
25796    
25797      /**
25798       * Generate a register-displacement--immediate RCL. That is,
25799       * <PRE>
25800       * rotate left with carry of [dstBase + dstDisp] by imm
25801       * </PRE>
25802       *
25803       * @param dstBase the destination base register
25804       * @param dstDisp the destination displacement
25805       * @param imm immediate
25806       */
25807      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25808      public final void emitRCL_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
25809        int miStart = mi;
25810        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25811        setMachineCodes(mi++, (byte) 0x66);
25812        generateREXprefix(false, null, null, dstBase);
25813        if (imm == 1) {
25814          setMachineCodes(mi++, (byte) 0xD1);
25815          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
25816        } else {
25817          setMachineCodes(mi++, (byte) 0xC1);
25818          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
25819          emitImm8((byte)imm);
25820        }
25821        if (lister != null) lister.RDI(miStart, "RCL", dstBase, dstDisp, imm);
25822      }
25823    
25824      /**
25825       * Generate a register-offset--immediate RCL. That is,
25826       * <PRE>
25827       * rotate left with carry of [dstIndex<<dstScale + dstDisp] by imm
25828       * </PRE>
25829       *
25830       * @param dstIndex the destination index register
25831       * @param dstScale the destination shift amount
25832       * @param dstDisp the destination displacement
25833       * @param imm immediate
25834       */
25835      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
25836      public final void emitRCL_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
25837        int miStart = mi;
25838        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25839        setMachineCodes(mi++, (byte) 0x66);
25840        generateREXprefix(false, null, dstIndex, null);
25841        if (imm == 1) {
25842          setMachineCodes(mi++, (byte) 0xD1);
25843          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25844        } else {
25845          setMachineCodes(mi++, (byte) 0xC1);
25846          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25847          emitImm8((byte)imm);
25848        }
25849        if (lister != null) lister.RFDI(miStart, "RCL", dstIndex, dstScale, dstDisp, imm);
25850      }
25851    
25852      /**
25853       * Generate a absolute--immediate RCL. That is,
25854       * <PRE>
25855       * rotate left with carry of [dstDisp] by imm
25856       * </PRE>
25857       *
25858       * @param dstDisp the destination displacement
25859       * @param imm immediate
25860       */
25861      public final void emitRCL_Abs_Imm_Word(Address dstDisp, int imm) {
25862        int miStart = mi;
25863        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25864        setMachineCodes(mi++, (byte) 0x66);
25865        generateREXprefix(false, null, null, null);
25866        if (imm == 1) {
25867          setMachineCodes(mi++, (byte) 0xD1);
25868          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
25869        } else {
25870          setMachineCodes(mi++, (byte) 0xC1);
25871          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
25872          emitImm8((byte)imm);
25873        }
25874        if (lister != null) lister.RAI(miStart, "RCL", dstDisp, imm);
25875      }
25876    
25877      /**
25878       * Generate a register-index--immediate RCL. That is,
25879       * <PRE>
25880       * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm
25881       * </PRE>
25882       *
25883       * @param dstBase the destination base register
25884       * @param dstIndex the destination index register
25885       * @param dstScale the destination shift amount
25886       * @param dstDisp the destination displacement
25887       * @param imm immediate
25888       */
25889      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25890      public final void emitRCL_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
25891        int miStart = mi;
25892        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
25893        setMachineCodes(mi++, (byte) 0x66);
25894        generateREXprefix(false, null, dstIndex, dstBase);
25895        if (imm == 1) {
25896          setMachineCodes(mi++, (byte) 0xD1);
25897          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25898        } else {
25899          setMachineCodes(mi++, (byte) 0xC1);
25900          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25901          emitImm8((byte)imm);
25902        }
25903        if (lister != null) lister.RXDI(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, imm);
25904      }
25905    
25906      /**
25907       * Generate a register--register RCL. That is,
25908       * <PRE>
25909       * rotate left with carry of dstReg by srcReg
25910       * </PRE>
25911       *
25912       * @param dstReg the destination register
25913       * @param srcReg must always be ECX
25914       */
25915      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25916      public final void emitRCL_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
25917        int miStart = mi;
25918        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25919        setMachineCodes(mi++, (byte) 0x66);
25920        generateREXprefix(false, null, null, dstReg);
25921        setMachineCodes(mi++, (byte) 0xD3);
25922        emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
25923        if (lister != null) lister.RR(miStart, "RCL", dstReg, srcReg);
25924      }
25925    
25926      /**
25927       * Generate a register-indirect--register RCL. That is,
25928       * <PRE>
25929       * rotate left with carry of [dstBase] by srcReg
25930       * </PRE>
25931       *
25932       * @param dstBase the destination register
25933       * @param srcReg must always be ECX
25934       */
25935      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
25936      public final void emitRCL_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
25937        int miStart = mi;
25938        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25939        setMachineCodes(mi++, (byte) 0x66);
25940        generateREXprefix(false, null, null, dstBase);
25941        setMachineCodes(mi++, (byte) 0xD3);
25942        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
25943        if (lister != null) lister.RNR(miStart, "RCL", dstBase, srcReg);
25944      }
25945    
25946      /**
25947       * Generate a register-displacement--register RCL. That is,
25948       * <PRE>
25949       * rotate left with carry of [dstBase + dstDisp] by srcReg
25950       * </PRE>
25951       *
25952       * @param dstBase the destination base register
25953       * @param dstDisp the destination displacement
25954       * @param srcReg must always be ECX
25955       */
25956      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
25957      public final void emitRCL_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
25958        int miStart = mi;
25959        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25960        setMachineCodes(mi++, (byte) 0x66);
25961        generateREXprefix(false, null, null, dstBase);
25962        setMachineCodes(mi++, (byte) 0xD3);
25963        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
25964        if (lister != null) lister.RDR(miStart, "RCL", dstBase, dstDisp, srcReg);
25965      }
25966    
25967      /**
25968       * Generate a register-offset--register RCL. That is,
25969       * <PRE>
25970       * rotate left with carry of [dstIndex<<dstScale + dstDisp] by srcReg
25971       * </PRE>
25972       *
25973       * @param dstIndex the destination index register
25974       * @param dstScale the destination shift amount
25975       * @param dstDisp the destination displacement
25976       * @param srcReg must always be ECX
25977       */
25978      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
25979      public final void emitRCL_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
25980        int miStart = mi;
25981        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
25982        setMachineCodes(mi++, (byte) 0x66);
25983        generateREXprefix(false, null, dstIndex, null);
25984        setMachineCodes(mi++, (byte) 0xD3);
25985        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
25986        if (lister != null) lister.RFDR(miStart, "RCL", dstIndex, dstScale, dstDisp, srcReg);
25987      }
25988    
25989      /**
25990       * Generate an absolute--register RCL. That is,
25991       * <PRE>
25992       * rotate left with carry of [dstDisp] by srcReg
25993       * </PRE>
25994       *
25995       * @param dstDisp the destination displacement
25996       * @param srcReg must always be ECX
25997       */
25998      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
25999      public final void emitRCL_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
26000        int miStart = mi;
26001        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26002        setMachineCodes(mi++, (byte) 0x66);
26003        generateREXprefix(false, null, null, null);
26004        setMachineCodes(mi++, (byte) 0xD3);
26005        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
26006        if (lister != null) lister.RAR(miStart, "RCL", dstDisp, srcReg);
26007      }
26008    
26009      /**
26010       * Generate a register-displacement--register RCL. That is,
26011       * <PRE>
26012       * rotate left with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
26013       * </PRE>
26014       *
26015       * @param dstBase the destination base register
26016       * @param dstIndex the destination index register
26017       * @param dstScale the destination shift amount
26018       * @param dstDisp the destination displacement
26019       * @param srcReg must always be ECX
26020       */
26021      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
26022      public final void emitRCL_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
26023        int miStart = mi;
26024        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26025        setMachineCodes(mi++, (byte) 0x66);
26026        generateREXprefix(false, null, dstIndex, dstBase);
26027        setMachineCodes(mi++, (byte) 0xD3);
26028        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26029        if (lister != null) lister.RXDR(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
26030      }
26031    
26032      /**
26033       * Generate a register--immediate RCL. That is,
26034       * <PRE>
26035       * rotate left with carry  of dstReg by imm
26036       * </PRE>
26037       *
26038       * @param dstReg the destination register
26039       * @param imm immediate
26040       */
26041      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26042      public final void emitRCL_Reg_Imm(GPR dstReg, int imm) {
26043        int miStart = mi;
26044        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26045        // no size prefix
26046        generateREXprefix(false, null, null, dstReg);
26047        if (imm == 1) {
26048          setMachineCodes(mi++, (byte) 0xD1);
26049          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
26050        } else {
26051          setMachineCodes(mi++, (byte) 0xC1);
26052          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
26053          emitImm8((byte)imm);
26054        }
26055        if (lister != null) lister.RI(miStart, "RCL", dstReg, imm);
26056      }
26057    
26058      /**
26059       * Generate a register-indirect--immediate RCL. That is,
26060       * <PRE>
26061       * rotate left with carry  of [dstBase] by imm
26062       * </PRE>
26063       *
26064       * @param dstBase the destination base register
26065       * @param imm immediate
26066       */
26067      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26068      public final void emitRCL_RegInd_Imm(GPR dstBase, int imm) {
26069        int miStart = mi;
26070        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26071        // no size prefix
26072        generateREXprefix(false, null, null, dstBase);
26073        if (imm == 1) {
26074          setMachineCodes(mi++, (byte) 0xD1);
26075          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
26076        } else {
26077          setMachineCodes(mi++, (byte) 0xC1);
26078          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
26079          emitImm8((byte)imm);
26080        }
26081        if (lister != null) lister.RNI(miStart, "RCL", dstBase, imm);
26082      }
26083    
26084      /**
26085       * Generate a register-displacement--immediate RCL. That is,
26086       * <PRE>
26087       * rotate left with carry  of [dstBase + dstDisp] by imm
26088       * </PRE>
26089       *
26090       * @param dstBase the destination base register
26091       * @param dstDisp the destination displacement
26092       * @param imm immediate
26093       */
26094      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26095      public final void emitRCL_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
26096        int miStart = mi;
26097        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26098        // no size prefix
26099        generateREXprefix(false, null, null, dstBase);
26100        if (imm == 1) {
26101          setMachineCodes(mi++, (byte) 0xD1);
26102          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
26103        } else {
26104          setMachineCodes(mi++, (byte) 0xC1);
26105          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
26106          emitImm8((byte)imm);
26107        }
26108        if (lister != null) lister.RDI(miStart, "RCL", dstBase, dstDisp, imm);
26109      }
26110    
26111      /**
26112       * Generate a register-offset--immediate RCL. That is,
26113       * <PRE>
26114       * rotate left with carry  of [dstIndex<<dstScale + dstDisp] by imm
26115       * </PRE>
26116       *
26117       * @param dstIndex the destination index register
26118       * @param dstScale the destination shift amount
26119       * @param dstDisp the destination displacement
26120       * @param imm immediate
26121       */
26122      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26123      public final void emitRCL_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
26124        int miStart = mi;
26125        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26126        // no size prefix
26127        generateREXprefix(false, null, dstIndex, null);
26128        if (imm == 1) {
26129          setMachineCodes(mi++, (byte) 0xD1);
26130          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26131        } else {
26132          setMachineCodes(mi++, (byte) 0xC1);
26133          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26134          emitImm8((byte)imm);
26135        }
26136        if (lister != null) lister.RFDI(miStart, "RCL", dstIndex, dstScale, dstDisp, imm);
26137      }
26138    
26139      /**
26140       * Generate a absolute--immediate RCL. That is,
26141       * <PRE>
26142       * rotate left with carry  of [dstDisp] by imm
26143       * </PRE>
26144       *
26145       * @param dstDisp the destination displacement
26146       * @param imm immediate
26147       */
26148      public final void emitRCL_Abs_Imm(Address dstDisp, int imm) {
26149        int miStart = mi;
26150        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26151        // no size prefix
26152        generateREXprefix(false, null, null, null);
26153        if (imm == 1) {
26154          setMachineCodes(mi++, (byte) 0xD1);
26155          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
26156        } else {
26157          setMachineCodes(mi++, (byte) 0xC1);
26158          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
26159          emitImm8((byte)imm);
26160        }
26161        if (lister != null) lister.RAI(miStart, "RCL", dstDisp, imm);
26162      }
26163    
26164      /**
26165       * Generate a register-index--immediate RCL. That is,
26166       * <PRE>
26167       * rotate left with carry  of [dstBase + dstIndex<<dstScale + dstDisp] by imm
26168       * </PRE>
26169       *
26170       * @param dstBase the destination base register
26171       * @param dstIndex the destination index register
26172       * @param dstScale the destination shift amount
26173       * @param dstDisp the destination displacement
26174       * @param imm immediate
26175       */
26176      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
26177      public final void emitRCL_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
26178        int miStart = mi;
26179        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26180        // no size prefix
26181        generateREXprefix(false, null, dstIndex, dstBase);
26182        if (imm == 1) {
26183          setMachineCodes(mi++, (byte) 0xD1);
26184          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26185        } else {
26186          setMachineCodes(mi++, (byte) 0xC1);
26187          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26188          emitImm8((byte)imm);
26189        }
26190        if (lister != null) lister.RXDI(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, imm);
26191      }
26192    
26193      /**
26194       * Generate a register--register RCL. That is,
26195       * <PRE>
26196       * rotate left with carry  of dstReg by srcReg
26197       * </PRE>
26198       *
26199       * @param dstReg the destination register
26200       * @param srcReg must always be ECX
26201       */
26202      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
26203      public final void emitRCL_Reg_Reg(GPR dstReg, GPR srcReg) {
26204        int miStart = mi;
26205        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26206        // no size prefix
26207        generateREXprefix(false, null, null, dstReg);
26208        setMachineCodes(mi++, (byte) 0xD3);
26209        emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
26210        if (lister != null) lister.RR(miStart, "RCL", dstReg, srcReg);
26211      }
26212    
26213      /**
26214       * Generate a register-indirect--register RCL. That is,
26215       * <PRE>
26216       * rotate left with carry  of [dstBase] by srcReg
26217       * </PRE>
26218       *
26219       * @param dstBase the destination register
26220       * @param srcReg must always be ECX
26221       */
26222      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
26223      public final void emitRCL_RegInd_Reg(GPR dstBase, GPR srcReg) {
26224        int miStart = mi;
26225        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26226        // no size prefix
26227        generateREXprefix(false, null, null, dstBase);
26228        setMachineCodes(mi++, (byte) 0xD3);
26229        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
26230        if (lister != null) lister.RNR(miStart, "RCL", dstBase, srcReg);
26231      }
26232    
26233      /**
26234       * Generate a register-displacement--register RCL. That is,
26235       * <PRE>
26236       * rotate left with carry  of [dstBase + dstDisp] by srcReg
26237       * </PRE>
26238       *
26239       * @param dstBase the destination base register
26240       * @param dstDisp the destination displacement
26241       * @param srcReg must always be ECX
26242       */
26243      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
26244      public final void emitRCL_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
26245        int miStart = mi;
26246        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26247        // no size prefix
26248        generateREXprefix(false, null, null, dstBase);
26249        setMachineCodes(mi++, (byte) 0xD3);
26250        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
26251        if (lister != null) lister.RDR(miStart, "RCL", dstBase, dstDisp, srcReg);
26252      }
26253    
26254      /**
26255       * Generate a register-offset--register RCL. That is,
26256       * <PRE>
26257       * rotate left with carry  of [dstIndex<<dstScale + dstDisp] by srcReg
26258       * </PRE>
26259       *
26260       * @param dstIndex the destination index register
26261       * @param dstScale the destination shift amount
26262       * @param dstDisp the destination displacement
26263       * @param srcReg must always be ECX
26264       */
26265      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
26266      public final void emitRCL_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
26267        int miStart = mi;
26268        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26269        // no size prefix
26270        generateREXprefix(false, null, dstIndex, null);
26271        setMachineCodes(mi++, (byte) 0xD3);
26272        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26273        if (lister != null) lister.RFDR(miStart, "RCL", dstIndex, dstScale, dstDisp, srcReg);
26274      }
26275    
26276      /**
26277       * Generate an absolute--register RCL. That is,
26278       * <PRE>
26279       * rotate left with carry  of [dstDisp] by srcReg
26280       * </PRE>
26281       *
26282       * @param dstDisp the destination displacement
26283       * @param srcReg must always be ECX
26284       */
26285      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
26286      public final void emitRCL_Abs_Reg(Address dstDisp, GPR srcReg) {
26287        int miStart = mi;
26288        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26289        // no size prefix
26290        generateREXprefix(false, null, null, null);
26291        setMachineCodes(mi++, (byte) 0xD3);
26292        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
26293        if (lister != null) lister.RAR(miStart, "RCL", dstDisp, srcReg);
26294      }
26295    
26296      /**
26297       * Generate a register-displacement--register RCL. That is,
26298       * <PRE>
26299       * rotate left with carry  of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
26300       * </PRE>
26301       *
26302       * @param dstBase the destination base register
26303       * @param dstIndex the destination index register
26304       * @param dstScale the destination shift amount
26305       * @param dstDisp the destination displacement
26306       * @param srcReg must always be ECX
26307       */
26308      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
26309      public final void emitRCL_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
26310        int miStart = mi;
26311        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26312        // no size prefix
26313        generateREXprefix(false, null, dstIndex, dstBase);
26314        setMachineCodes(mi++, (byte) 0xD3);
26315        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26316        if (lister != null) lister.RXDR(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
26317      }
26318    
26319      /**
26320       * Generate a register--immediate RCL. That is,
26321       * <PRE>
26322       * rotate left with carry  of dstReg by imm
26323       * </PRE>
26324       *
26325       * @param dstReg the destination register
26326       * @param imm immediate
26327       */
26328      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26329      public final void emitRCL_Reg_Imm_Quad(GPR dstReg, int imm) {
26330        int miStart = mi;
26331        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26332        // no size prefix
26333        generateREXprefix(true, null, null, dstReg);
26334        if (imm == 1) {
26335          setMachineCodes(mi++, (byte) 0xD1);
26336          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
26337        } else {
26338          setMachineCodes(mi++, (byte) 0xC1);
26339          emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
26340          emitImm8((byte)imm);
26341        }
26342        if (lister != null) lister.RI(miStart, "RCL", dstReg, imm);
26343      }
26344    
26345      /**
26346       * Generate a register-indirect--immediate RCL. That is,
26347       * <PRE>
26348       * rotate left with carry  of [dstBase] by imm
26349       * </PRE>
26350       *
26351       * @param dstBase the destination base register
26352       * @param imm immediate
26353       */
26354      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26355      public final void emitRCL_RegInd_Imm_Quad(GPR dstBase, int imm) {
26356        int miStart = mi;
26357        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26358        // no size prefix
26359        generateREXprefix(true, null, null, dstBase);
26360        if (imm == 1) {
26361          setMachineCodes(mi++, (byte) 0xD1);
26362          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
26363        } else {
26364          setMachineCodes(mi++, (byte) 0xC1);
26365          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
26366          emitImm8((byte)imm);
26367        }
26368        if (lister != null) lister.RNI(miStart, "RCL", dstBase, imm);
26369      }
26370    
26371      /**
26372       * Generate a register-displacement--immediate RCL. That is,
26373       * <PRE>
26374       * rotate left with carry  of [dstBase + dstDisp] by imm
26375       * </PRE>
26376       *
26377       * @param dstBase the destination base register
26378       * @param dstDisp the destination displacement
26379       * @param imm immediate
26380       */
26381      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26382      public final void emitRCL_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
26383        int miStart = mi;
26384        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26385        // no size prefix
26386        generateREXprefix(true, null, null, dstBase);
26387        if (imm == 1) {
26388          setMachineCodes(mi++, (byte) 0xD1);
26389          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
26390        } else {
26391          setMachineCodes(mi++, (byte) 0xC1);
26392          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
26393          emitImm8((byte)imm);
26394        }
26395        if (lister != null) lister.RDI(miStart, "RCL", dstBase, dstDisp, imm);
26396      }
26397    
26398      /**
26399       * Generate a register-offset--immediate RCL. That is,
26400       * <PRE>
26401       * rotate left with carry  of [dstIndex<<dstScale + dstDisp] by imm
26402       * </PRE>
26403       *
26404       * @param dstIndex the destination index register
26405       * @param dstScale the destination shift amount
26406       * @param dstDisp the destination displacement
26407       * @param imm immediate
26408       */
26409      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26410      public final void emitRCL_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
26411        int miStart = mi;
26412        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26413        // no size prefix
26414        generateREXprefix(true, null, dstIndex, null);
26415        if (imm == 1) {
26416          setMachineCodes(mi++, (byte) 0xD1);
26417          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26418        } else {
26419          setMachineCodes(mi++, (byte) 0xC1);
26420          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26421          emitImm8((byte)imm);
26422        }
26423        if (lister != null) lister.RFDI(miStart, "RCL", dstIndex, dstScale, dstDisp, imm);
26424      }
26425    
26426      /**
26427       * Generate a absolute--immediate RCL. That is,
26428       * <PRE>
26429       * rotate left with carry  of [dstDisp] by imm
26430       * </PRE>
26431       *
26432       * @param dstDisp the destination displacement
26433       * @param imm immediate
26434       */
26435      public final void emitRCL_Abs_Imm_Quad(Address dstDisp, int imm) {
26436        int miStart = mi;
26437        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26438        // no size prefix
26439        generateREXprefix(true, null, null, null);
26440        if (imm == 1) {
26441          setMachineCodes(mi++, (byte) 0xD1);
26442          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
26443        } else {
26444          setMachineCodes(mi++, (byte) 0xC1);
26445          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
26446          emitImm8((byte)imm);
26447        }
26448        if (lister != null) lister.RAI(miStart, "RCL", dstDisp, imm);
26449      }
26450    
26451      /**
26452       * Generate a register-index--immediate RCL. That is,
26453       * <PRE>
26454       * rotate left with carry  of [dstBase + dstIndex<<dstScale + dstDisp] by imm
26455       * </PRE>
26456       *
26457       * @param dstBase the destination base register
26458       * @param dstIndex the destination index register
26459       * @param dstScale the destination shift amount
26460       * @param dstDisp the destination displacement
26461       * @param imm immediate
26462       */
26463      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
26464      public final void emitRCL_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
26465        int miStart = mi;
26466        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26467        // no size prefix
26468        generateREXprefix(true, null, dstIndex, dstBase);
26469        if (imm == 1) {
26470          setMachineCodes(mi++, (byte) 0xD1);
26471          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26472        } else {
26473          setMachineCodes(mi++, (byte) 0xC1);
26474          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26475          emitImm8((byte)imm);
26476        }
26477        if (lister != null) lister.RXDI(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, imm);
26478      }
26479    
26480      /**
26481       * Generate a register--register RCL. That is,
26482       * <PRE>
26483       * rotate left with carry  of dstReg by srcReg
26484       * </PRE>
26485       *
26486       * @param dstReg the destination register
26487       * @param srcReg must always be ECX
26488       */
26489      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
26490      public final void emitRCL_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
26491        int miStart = mi;
26492        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26493        // no size prefix
26494        generateREXprefix(true, null, null, dstReg);
26495        setMachineCodes(mi++, (byte) 0xD3);
26496        emitRegRegOperands(dstReg, GPR.getForOpcode(0x2));
26497        if (lister != null) lister.RR(miStart, "RCL", dstReg, srcReg);
26498      }
26499    
26500      /**
26501       * Generate a register-indirect--register RCL. That is,
26502       * <PRE>
26503       * rotate left with carry  of [dstBase] by srcReg
26504       * </PRE>
26505       *
26506       * @param dstBase the destination register
26507       * @param srcReg must always be ECX
26508       */
26509      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
26510      public final void emitRCL_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
26511        int miStart = mi;
26512        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26513        // no size prefix
26514        generateREXprefix(true, null, null, dstBase);
26515        setMachineCodes(mi++, (byte) 0xD3);
26516        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x2));
26517        if (lister != null) lister.RNR(miStart, "RCL", dstBase, srcReg);
26518      }
26519    
26520      /**
26521       * Generate a register-displacement--register RCL. That is,
26522       * <PRE>
26523       * rotate left with carry  of [dstBase + dstDisp] by srcReg
26524       * </PRE>
26525       *
26526       * @param dstBase the destination base register
26527       * @param dstDisp the destination displacement
26528       * @param srcReg must always be ECX
26529       */
26530      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
26531      public final void emitRCL_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
26532        int miStart = mi;
26533        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26534        // no size prefix
26535        generateREXprefix(true, null, null, dstBase);
26536        setMachineCodes(mi++, (byte) 0xD3);
26537        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x2));
26538        if (lister != null) lister.RDR(miStart, "RCL", dstBase, dstDisp, srcReg);
26539      }
26540    
26541      /**
26542       * Generate a register-offset--register RCL. That is,
26543       * <PRE>
26544       * rotate left with carry  of [dstIndex<<dstScale + dstDisp] by srcReg
26545       * </PRE>
26546       *
26547       * @param dstIndex the destination index register
26548       * @param dstScale the destination shift amount
26549       * @param dstDisp the destination displacement
26550       * @param srcReg must always be ECX
26551       */
26552      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
26553      public final void emitRCL_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
26554        int miStart = mi;
26555        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26556        // no size prefix
26557        generateREXprefix(true, null, dstIndex, null);
26558        setMachineCodes(mi++, (byte) 0xD3);
26559        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26560        if (lister != null) lister.RFDR(miStart, "RCL", dstIndex, dstScale, dstDisp, srcReg);
26561      }
26562    
26563      /**
26564       * Generate an absolute--register RCL. That is,
26565       * <PRE>
26566       * rotate left with carry  of [dstDisp] by srcReg
26567       * </PRE>
26568       *
26569       * @param dstDisp the destination displacement
26570       * @param srcReg must always be ECX
26571       */
26572      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
26573      public final void emitRCL_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
26574        int miStart = mi;
26575        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26576        // no size prefix
26577        generateREXprefix(true, null, null, null);
26578        setMachineCodes(mi++, (byte) 0xD3);
26579        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x2));
26580        if (lister != null) lister.RAR(miStart, "RCL", dstDisp, srcReg);
26581      }
26582    
26583      /**
26584       * Generate a register-displacement--register RCL. That is,
26585       * <PRE>
26586       * rotate left with carry  of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
26587       * </PRE>
26588       *
26589       * @param dstBase the destination base register
26590       * @param dstIndex the destination index register
26591       * @param dstScale the destination shift amount
26592       * @param dstDisp the destination displacement
26593       * @param srcReg must always be ECX
26594       */
26595      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
26596      public final void emitRCL_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
26597        int miStart = mi;
26598        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26599        // no size prefix
26600        generateREXprefix(true, null, dstIndex, dstBase);
26601        setMachineCodes(mi++, (byte) 0xD3);
26602        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x2));
26603        if (lister != null) lister.RXDR(miStart, "RCL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
26604      }
26605    
26606      /**
26607       * Generate a register--immediate RCR. That is,
26608       * <PRE>
26609       * rotate right with carry of dstReg by imm
26610       * </PRE>
26611       *
26612       * @param dstReg the destination register
26613       * @param imm immediate
26614       */
26615      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26616      public final void emitRCR_Reg_Imm_Byte(GPR dstReg, int imm) {
26617        int miStart = mi;
26618        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26619        // no size prefix
26620        generateREXprefix(false, null, null, dstReg);
26621        if (imm == 1) {
26622          setMachineCodes(mi++, (byte) 0xD0);
26623          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
26624        } else {
26625          setMachineCodes(mi++, (byte) 0xC0);
26626          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
26627          emitImm8((byte)imm);
26628        }
26629        if (lister != null) lister.RI(miStart, "RCR", dstReg, imm);
26630      }
26631    
26632      /**
26633       * Generate a register-indirect--immediate RCR. That is,
26634       * <PRE>
26635       * rotate right with carry of [dstBase] by imm
26636       * </PRE>
26637       *
26638       * @param dstBase the destination base register
26639       * @param imm immediate
26640       */
26641      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26642      public final void emitRCR_RegInd_Imm_Byte(GPR dstBase, int imm) {
26643        int miStart = mi;
26644        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26645        // no size prefix
26646        generateREXprefix(false, null, null, dstBase);
26647        if (imm == 1) {
26648          setMachineCodes(mi++, (byte) 0xD0);
26649          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
26650        } else {
26651          setMachineCodes(mi++, (byte) 0xC0);
26652          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
26653          emitImm8((byte)imm);
26654        }
26655        if (lister != null) lister.RNI(miStart, "RCR", dstBase, imm);
26656      }
26657    
26658      /**
26659       * Generate a register-displacement--immediate RCR. That is,
26660       * <PRE>
26661       * rotate right with carry of [dstBase + dstDisp] by imm
26662       * </PRE>
26663       *
26664       * @param dstBase the destination base register
26665       * @param dstDisp the destination displacement
26666       * @param imm immediate
26667       */
26668      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26669      public final void emitRCR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
26670        int miStart = mi;
26671        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26672        // no size prefix
26673        generateREXprefix(false, null, null, dstBase);
26674        if (imm == 1) {
26675          setMachineCodes(mi++, (byte) 0xD0);
26676          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
26677        } else {
26678          setMachineCodes(mi++, (byte) 0xC0);
26679          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
26680          emitImm8((byte)imm);
26681        }
26682        if (lister != null) lister.RDI(miStart, "RCR", dstBase, dstDisp, imm);
26683      }
26684    
26685      /**
26686       * Generate a register-offset--immediate RCR. That is,
26687       * <PRE>
26688       * rotate right with carry of [dstIndex<<dstScale + dstDisp] by imm
26689       * </PRE>
26690       *
26691       * @param dstIndex the destination index register
26692       * @param dstScale the destination shift amount
26693       * @param dstDisp the destination displacement
26694       * @param imm immediate
26695       */
26696      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26697      public final void emitRCR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
26698        int miStart = mi;
26699        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26700        // no size prefix
26701        generateREXprefix(false, null, dstIndex, null);
26702        if (imm == 1) {
26703          setMachineCodes(mi++, (byte) 0xD0);
26704          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
26705        } else {
26706          setMachineCodes(mi++, (byte) 0xC0);
26707          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
26708          emitImm8((byte)imm);
26709        }
26710        if (lister != null) lister.RFDI(miStart, "RCR", dstIndex, dstScale, dstDisp, imm);
26711      }
26712    
26713      /**
26714       * Generate a absolute--immediate RCR. That is,
26715       * <PRE>
26716       * rotate right with carry of [dstDisp] by imm
26717       * </PRE>
26718       *
26719       * @param dstDisp the destination displacement
26720       * @param imm immediate
26721       */
26722      public final void emitRCR_Abs_Imm_Byte(Address dstDisp, int imm) {
26723        int miStart = mi;
26724        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26725        // no size prefix
26726        generateREXprefix(false, null, null, null);
26727        if (imm == 1) {
26728          setMachineCodes(mi++, (byte) 0xD0);
26729          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
26730        } else {
26731          setMachineCodes(mi++, (byte) 0xC0);
26732          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
26733          emitImm8((byte)imm);
26734        }
26735        if (lister != null) lister.RAI(miStart, "RCR", dstDisp, imm);
26736      }
26737    
26738      /**
26739       * Generate a register-index--immediate RCR. That is,
26740       * <PRE>
26741       * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm
26742       * </PRE>
26743       *
26744       * @param dstBase the destination base register
26745       * @param dstIndex the destination index register
26746       * @param dstScale the destination shift amount
26747       * @param dstDisp the destination displacement
26748       * @param imm immediate
26749       */
26750      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
26751      public final void emitRCR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
26752        int miStart = mi;
26753        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26754        // no size prefix
26755        generateREXprefix(false, null, dstIndex, dstBase);
26756        if (imm == 1) {
26757          setMachineCodes(mi++, (byte) 0xD0);
26758          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
26759        } else {
26760          setMachineCodes(mi++, (byte) 0xC0);
26761          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
26762          emitImm8((byte)imm);
26763        }
26764        if (lister != null) lister.RXDI(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, imm);
26765      }
26766    
26767      /**
26768       * Generate a register--register RCR. That is,
26769       * <PRE>
26770       * rotate right with carry of dstReg by srcReg
26771       * </PRE>
26772       *
26773       * @param dstReg the destination register
26774       * @param srcReg must always be ECX
26775       */
26776      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
26777      public final void emitRCR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
26778        int miStart = mi;
26779        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26780        // no size prefix
26781        generateREXprefix(false, null, null, dstReg);
26782        setMachineCodes(mi++, (byte) 0xD2);
26783        emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
26784        if (lister != null) lister.RR(miStart, "RCR", dstReg, srcReg);
26785      }
26786    
26787      /**
26788       * Generate a register-indirect--register RCR. That is,
26789       * <PRE>
26790       * rotate right with carry of [dstBase] by srcReg
26791       * </PRE>
26792       *
26793       * @param dstBase the destination register
26794       * @param srcReg must always be ECX
26795       */
26796      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
26797      public final void emitRCR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
26798        int miStart = mi;
26799        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26800        // no size prefix
26801        generateREXprefix(false, null, null, dstBase);
26802        setMachineCodes(mi++, (byte) 0xD2);
26803        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
26804        if (lister != null) lister.RNR(miStart, "RCR", dstBase, srcReg);
26805      }
26806    
26807      /**
26808       * Generate a register-displacement--register RCR. That is,
26809       * <PRE>
26810       * rotate right with carry of [dstBase + dstDisp] by srcReg
26811       * </PRE>
26812       *
26813       * @param dstBase the destination base register
26814       * @param dstDisp the destination displacement
26815       * @param srcReg must always be ECX
26816       */
26817      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
26818      public final void emitRCR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
26819        int miStart = mi;
26820        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26821        // no size prefix
26822        generateREXprefix(false, null, null, dstBase);
26823        setMachineCodes(mi++, (byte) 0xD2);
26824        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
26825        if (lister != null) lister.RDR(miStart, "RCR", dstBase, dstDisp, srcReg);
26826      }
26827    
26828      /**
26829       * Generate a register-offset--register RCR. That is,
26830       * <PRE>
26831       * rotate right with carry of [dstIndex<<dstScale + dstDisp] by srcReg
26832       * </PRE>
26833       *
26834       * @param dstIndex the destination index register
26835       * @param dstScale the destination shift amount
26836       * @param dstDisp the destination displacement
26837       * @param srcReg must always be ECX
26838       */
26839      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
26840      public final void emitRCR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
26841        int miStart = mi;
26842        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26843        // no size prefix
26844        generateREXprefix(false, null, dstIndex, null);
26845        setMachineCodes(mi++, (byte) 0xD2);
26846        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
26847        if (lister != null) lister.RFDR(miStart, "RCR", dstIndex, dstScale, dstDisp, srcReg);
26848      }
26849    
26850      /**
26851       * Generate an absolute--register RCR. That is,
26852       * <PRE>
26853       * rotate right with carry of [dstDisp] by srcReg
26854       * </PRE>
26855       *
26856       * @param dstDisp the destination displacement
26857       * @param srcReg must always be ECX
26858       */
26859      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
26860      public final void emitRCR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
26861        int miStart = mi;
26862        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26863        // no size prefix
26864        generateREXprefix(false, null, null, null);
26865        setMachineCodes(mi++, (byte) 0xD2);
26866        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
26867        if (lister != null) lister.RAR(miStart, "RCR", dstDisp, srcReg);
26868      }
26869    
26870      /**
26871       * Generate a register-displacement--register RCR. That is,
26872       * <PRE>
26873       * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
26874       * </PRE>
26875       *
26876       * @param dstBase the destination base register
26877       * @param dstIndex the destination index register
26878       * @param dstScale the destination shift amount
26879       * @param dstDisp the destination displacement
26880       * @param srcReg must always be ECX
26881       */
26882      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
26883      public final void emitRCR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
26884        int miStart = mi;
26885        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
26886        // no size prefix
26887        generateREXprefix(false, null, dstIndex, dstBase);
26888        setMachineCodes(mi++, (byte) 0xD2);
26889        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
26890        if (lister != null) lister.RXDR(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
26891      }
26892    
26893      /**
26894       * Generate a register--immediate RCR. That is,
26895       * <PRE>
26896       * rotate right with carry of dstReg by imm
26897       * </PRE>
26898       *
26899       * @param dstReg the destination register
26900       * @param imm immediate
26901       */
26902      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26903      public final void emitRCR_Reg_Imm_Word(GPR dstReg, int imm) {
26904        int miStart = mi;
26905        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26906        setMachineCodes(mi++, (byte) 0x66);
26907        generateREXprefix(false, null, null, dstReg);
26908        if (imm == 1) {
26909          setMachineCodes(mi++, (byte) 0xD1);
26910          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
26911        } else {
26912          setMachineCodes(mi++, (byte) 0xC1);
26913          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
26914          emitImm8((byte)imm);
26915        }
26916        if (lister != null) lister.RI(miStart, "RCR", dstReg, imm);
26917      }
26918    
26919      /**
26920       * Generate a register-indirect--immediate RCR. That is,
26921       * <PRE>
26922       * rotate right with carry of [dstBase] by imm
26923       * </PRE>
26924       *
26925       * @param dstBase the destination base register
26926       * @param imm immediate
26927       */
26928      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26929      public final void emitRCR_RegInd_Imm_Word(GPR dstBase, int imm) {
26930        int miStart = mi;
26931        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26932        setMachineCodes(mi++, (byte) 0x66);
26933        generateREXprefix(false, null, null, dstBase);
26934        if (imm == 1) {
26935          setMachineCodes(mi++, (byte) 0xD1);
26936          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
26937        } else {
26938          setMachineCodes(mi++, (byte) 0xC1);
26939          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
26940          emitImm8((byte)imm);
26941        }
26942        if (lister != null) lister.RNI(miStart, "RCR", dstBase, imm);
26943      }
26944    
26945      /**
26946       * Generate a register-displacement--immediate RCR. That is,
26947       * <PRE>
26948       * rotate right with carry of [dstBase + dstDisp] by imm
26949       * </PRE>
26950       *
26951       * @param dstBase the destination base register
26952       * @param dstDisp the destination displacement
26953       * @param imm immediate
26954       */
26955      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26956      public final void emitRCR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
26957        int miStart = mi;
26958        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26959        setMachineCodes(mi++, (byte) 0x66);
26960        generateREXprefix(false, null, null, dstBase);
26961        if (imm == 1) {
26962          setMachineCodes(mi++, (byte) 0xD1);
26963          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
26964        } else {
26965          setMachineCodes(mi++, (byte) 0xC1);
26966          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
26967          emitImm8((byte)imm);
26968        }
26969        if (lister != null) lister.RDI(miStart, "RCR", dstBase, dstDisp, imm);
26970      }
26971    
26972      /**
26973       * Generate a register-offset--immediate RCR. That is,
26974       * <PRE>
26975       * rotate right with carry of [dstIndex<<dstScale + dstDisp] by imm
26976       * </PRE>
26977       *
26978       * @param dstIndex the destination index register
26979       * @param dstScale the destination shift amount
26980       * @param dstDisp the destination displacement
26981       * @param imm immediate
26982       */
26983      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
26984      public final void emitRCR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
26985        int miStart = mi;
26986        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
26987        setMachineCodes(mi++, (byte) 0x66);
26988        generateREXprefix(false, null, dstIndex, null);
26989        if (imm == 1) {
26990          setMachineCodes(mi++, (byte) 0xD1);
26991          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
26992        } else {
26993          setMachineCodes(mi++, (byte) 0xC1);
26994          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
26995          emitImm8((byte)imm);
26996        }
26997        if (lister != null) lister.RFDI(miStart, "RCR", dstIndex, dstScale, dstDisp, imm);
26998      }
26999    
27000      /**
27001       * Generate a absolute--immediate RCR. That is,
27002       * <PRE>
27003       * rotate right with carry of [dstDisp] by imm
27004       * </PRE>
27005       *
27006       * @param dstDisp the destination displacement
27007       * @param imm immediate
27008       */
27009      public final void emitRCR_Abs_Imm_Word(Address dstDisp, int imm) {
27010        int miStart = mi;
27011        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27012        setMachineCodes(mi++, (byte) 0x66);
27013        generateREXprefix(false, null, null, null);
27014        if (imm == 1) {
27015          setMachineCodes(mi++, (byte) 0xD1);
27016          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
27017        } else {
27018          setMachineCodes(mi++, (byte) 0xC1);
27019          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
27020          emitImm8((byte)imm);
27021        }
27022        if (lister != null) lister.RAI(miStart, "RCR", dstDisp, imm);
27023      }
27024    
27025      /**
27026       * Generate a register-index--immediate RCR. That is,
27027       * <PRE>
27028       * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm
27029       * </PRE>
27030       *
27031       * @param dstBase the destination base register
27032       * @param dstIndex the destination index register
27033       * @param dstScale the destination shift amount
27034       * @param dstDisp the destination displacement
27035       * @param imm immediate
27036       */
27037      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27038      public final void emitRCR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
27039        int miStart = mi;
27040        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27041        setMachineCodes(mi++, (byte) 0x66);
27042        generateREXprefix(false, null, dstIndex, dstBase);
27043        if (imm == 1) {
27044          setMachineCodes(mi++, (byte) 0xD1);
27045          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27046        } else {
27047          setMachineCodes(mi++, (byte) 0xC1);
27048          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27049          emitImm8((byte)imm);
27050        }
27051        if (lister != null) lister.RXDI(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, imm);
27052      }
27053    
27054      /**
27055       * Generate a register--register RCR. That is,
27056       * <PRE>
27057       * rotate right with carry of dstReg by srcReg
27058       * </PRE>
27059       *
27060       * @param dstReg the destination register
27061       * @param srcReg must always be ECX
27062       */
27063      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27064      public final void emitRCR_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
27065        int miStart = mi;
27066        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27067        setMachineCodes(mi++, (byte) 0x66);
27068        generateREXprefix(false, null, null, dstReg);
27069        setMachineCodes(mi++, (byte) 0xD3);
27070        emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
27071        if (lister != null) lister.RR(miStart, "RCR", dstReg, srcReg);
27072      }
27073    
27074      /**
27075       * Generate a register-indirect--register RCR. That is,
27076       * <PRE>
27077       * rotate right with carry of [dstBase] by srcReg
27078       * </PRE>
27079       *
27080       * @param dstBase the destination register
27081       * @param srcReg must always be ECX
27082       */
27083      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27084      public final void emitRCR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
27085        int miStart = mi;
27086        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27087        setMachineCodes(mi++, (byte) 0x66);
27088        generateREXprefix(false, null, null, dstBase);
27089        setMachineCodes(mi++, (byte) 0xD3);
27090        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
27091        if (lister != null) lister.RNR(miStart, "RCR", dstBase, srcReg);
27092      }
27093    
27094      /**
27095       * Generate a register-displacement--register RCR. That is,
27096       * <PRE>
27097       * rotate right with carry of [dstBase + dstDisp] by srcReg
27098       * </PRE>
27099       *
27100       * @param dstBase the destination base register
27101       * @param dstDisp the destination displacement
27102       * @param srcReg must always be ECX
27103       */
27104      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
27105      public final void emitRCR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
27106        int miStart = mi;
27107        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27108        setMachineCodes(mi++, (byte) 0x66);
27109        generateREXprefix(false, null, null, dstBase);
27110        setMachineCodes(mi++, (byte) 0xD3);
27111        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
27112        if (lister != null) lister.RDR(miStart, "RCR", dstBase, dstDisp, srcReg);
27113      }
27114    
27115      /**
27116       * Generate a register-offset--register RCR. That is,
27117       * <PRE>
27118       * rotate right with carry of [dstIndex<<dstScale + dstDisp] by srcReg
27119       * </PRE>
27120       *
27121       * @param dstIndex the destination index register
27122       * @param dstScale the destination shift amount
27123       * @param dstDisp the destination displacement
27124       * @param srcReg must always be ECX
27125       */
27126      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
27127      public final void emitRCR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
27128        int miStart = mi;
27129        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27130        setMachineCodes(mi++, (byte) 0x66);
27131        generateREXprefix(false, null, dstIndex, null);
27132        setMachineCodes(mi++, (byte) 0xD3);
27133        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27134        if (lister != null) lister.RFDR(miStart, "RCR", dstIndex, dstScale, dstDisp, srcReg);
27135      }
27136    
27137      /**
27138       * Generate an absolute--register RCR. That is,
27139       * <PRE>
27140       * rotate right with carry of [dstDisp] by srcReg
27141       * </PRE>
27142       *
27143       * @param dstDisp the destination displacement
27144       * @param srcReg must always be ECX
27145       */
27146      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
27147      public final void emitRCR_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
27148        int miStart = mi;
27149        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27150        setMachineCodes(mi++, (byte) 0x66);
27151        generateREXprefix(false, null, null, null);
27152        setMachineCodes(mi++, (byte) 0xD3);
27153        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
27154        if (lister != null) lister.RAR(miStart, "RCR", dstDisp, srcReg);
27155      }
27156    
27157      /**
27158       * Generate a register-displacement--register RCR. That is,
27159       * <PRE>
27160       * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
27161       * </PRE>
27162       *
27163       * @param dstBase the destination base register
27164       * @param dstIndex the destination index register
27165       * @param dstScale the destination shift amount
27166       * @param dstDisp the destination displacement
27167       * @param srcReg must always be ECX
27168       */
27169      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
27170      public final void emitRCR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
27171        int miStart = mi;
27172        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27173        setMachineCodes(mi++, (byte) 0x66);
27174        generateREXprefix(false, null, dstIndex, dstBase);
27175        setMachineCodes(mi++, (byte) 0xD3);
27176        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27177        if (lister != null) lister.RXDR(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
27178      }
27179    
27180      /**
27181       * Generate a register--immediate RCR. That is,
27182       * <PRE>
27183       * rotate right with carry of dstReg by imm
27184       * </PRE>
27185       *
27186       * @param dstReg the destination register
27187       * @param imm immediate
27188       */
27189      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27190      public final void emitRCR_Reg_Imm(GPR dstReg, int imm) {
27191        int miStart = mi;
27192        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27193        // no size prefix
27194        generateREXprefix(false, null, null, dstReg);
27195        if (imm == 1) {
27196          setMachineCodes(mi++, (byte) 0xD1);
27197          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
27198        } else {
27199          setMachineCodes(mi++, (byte) 0xC1);
27200          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
27201          emitImm8((byte)imm);
27202        }
27203        if (lister != null) lister.RI(miStart, "RCR", dstReg, imm);
27204      }
27205    
27206      /**
27207       * Generate a register-indirect--immediate RCR. That is,
27208       * <PRE>
27209       * rotate right with carry of [dstBase] by imm
27210       * </PRE>
27211       *
27212       * @param dstBase the destination base register
27213       * @param imm immediate
27214       */
27215      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27216      public final void emitRCR_RegInd_Imm(GPR dstBase, int imm) {
27217        int miStart = mi;
27218        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27219        // no size prefix
27220        generateREXprefix(false, null, null, dstBase);
27221        if (imm == 1) {
27222          setMachineCodes(mi++, (byte) 0xD1);
27223          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
27224        } else {
27225          setMachineCodes(mi++, (byte) 0xC1);
27226          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
27227          emitImm8((byte)imm);
27228        }
27229        if (lister != null) lister.RNI(miStart, "RCR", dstBase, imm);
27230      }
27231    
27232      /**
27233       * Generate a register-displacement--immediate RCR. That is,
27234       * <PRE>
27235       * rotate right with carry of [dstBase + dstDisp] by imm
27236       * </PRE>
27237       *
27238       * @param dstBase the destination base register
27239       * @param dstDisp the destination displacement
27240       * @param imm immediate
27241       */
27242      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27243      public final void emitRCR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
27244        int miStart = mi;
27245        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27246        // no size prefix
27247        generateREXprefix(false, null, null, dstBase);
27248        if (imm == 1) {
27249          setMachineCodes(mi++, (byte) 0xD1);
27250          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
27251        } else {
27252          setMachineCodes(mi++, (byte) 0xC1);
27253          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
27254          emitImm8((byte)imm);
27255        }
27256        if (lister != null) lister.RDI(miStart, "RCR", dstBase, dstDisp, imm);
27257      }
27258    
27259      /**
27260       * Generate a register-offset--immediate RCR. That is,
27261       * <PRE>
27262       * rotate right with carry of [dstIndex<<dstScale + dstDisp] by imm
27263       * </PRE>
27264       *
27265       * @param dstIndex the destination index register
27266       * @param dstScale the destination shift amount
27267       * @param dstDisp the destination displacement
27268       * @param imm immediate
27269       */
27270      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27271      public final void emitRCR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
27272        int miStart = mi;
27273        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27274        // no size prefix
27275        generateREXprefix(false, null, dstIndex, null);
27276        if (imm == 1) {
27277          setMachineCodes(mi++, (byte) 0xD1);
27278          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27279        } else {
27280          setMachineCodes(mi++, (byte) 0xC1);
27281          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27282          emitImm8((byte)imm);
27283        }
27284        if (lister != null) lister.RFDI(miStart, "RCR", dstIndex, dstScale, dstDisp, imm);
27285      }
27286    
27287      /**
27288       * Generate a absolute--immediate RCR. That is,
27289       * <PRE>
27290       * rotate right with carry of [dstDisp] by imm
27291       * </PRE>
27292       *
27293       * @param dstDisp the destination displacement
27294       * @param imm immediate
27295       */
27296      public final void emitRCR_Abs_Imm(Address dstDisp, int imm) {
27297        int miStart = mi;
27298        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27299        // no size prefix
27300        generateREXprefix(false, null, null, null);
27301        if (imm == 1) {
27302          setMachineCodes(mi++, (byte) 0xD1);
27303          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
27304        } else {
27305          setMachineCodes(mi++, (byte) 0xC1);
27306          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
27307          emitImm8((byte)imm);
27308        }
27309        if (lister != null) lister.RAI(miStart, "RCR", dstDisp, imm);
27310      }
27311    
27312      /**
27313       * Generate a register-index--immediate RCR. That is,
27314       * <PRE>
27315       * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm
27316       * </PRE>
27317       *
27318       * @param dstBase the destination base register
27319       * @param dstIndex the destination index register
27320       * @param dstScale the destination shift amount
27321       * @param dstDisp the destination displacement
27322       * @param imm immediate
27323       */
27324      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27325      public final void emitRCR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
27326        int miStart = mi;
27327        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27328        // no size prefix
27329        generateREXprefix(false, null, dstIndex, dstBase);
27330        if (imm == 1) {
27331          setMachineCodes(mi++, (byte) 0xD1);
27332          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27333        } else {
27334          setMachineCodes(mi++, (byte) 0xC1);
27335          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27336          emitImm8((byte)imm);
27337        }
27338        if (lister != null) lister.RXDI(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, imm);
27339      }
27340    
27341      /**
27342       * Generate a register--register RCR. That is,
27343       * <PRE>
27344       * rotate right with carry of dstReg by srcReg
27345       * </PRE>
27346       *
27347       * @param dstReg the destination register
27348       * @param srcReg must always be ECX
27349       */
27350      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27351      public final void emitRCR_Reg_Reg(GPR dstReg, GPR srcReg) {
27352        int miStart = mi;
27353        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27354        // no size prefix
27355        generateREXprefix(false, null, null, dstReg);
27356        setMachineCodes(mi++, (byte) 0xD3);
27357        emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
27358        if (lister != null) lister.RR(miStart, "RCR", dstReg, srcReg);
27359      }
27360    
27361      /**
27362       * Generate a register-indirect--register RCR. That is,
27363       * <PRE>
27364       * rotate right with carry of [dstBase] by srcReg
27365       * </PRE>
27366       *
27367       * @param dstBase the destination register
27368       * @param srcReg must always be ECX
27369       */
27370      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27371      public final void emitRCR_RegInd_Reg(GPR dstBase, GPR srcReg) {
27372        int miStart = mi;
27373        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27374        // no size prefix
27375        generateREXprefix(false, null, null, dstBase);
27376        setMachineCodes(mi++, (byte) 0xD3);
27377        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
27378        if (lister != null) lister.RNR(miStart, "RCR", dstBase, srcReg);
27379      }
27380    
27381      /**
27382       * Generate a register-displacement--register RCR. That is,
27383       * <PRE>
27384       * rotate right with carry of [dstBase + dstDisp] by srcReg
27385       * </PRE>
27386       *
27387       * @param dstBase the destination base register
27388       * @param dstDisp the destination displacement
27389       * @param srcReg must always be ECX
27390       */
27391      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
27392      public final void emitRCR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
27393        int miStart = mi;
27394        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27395        // no size prefix
27396        generateREXprefix(false, null, null, dstBase);
27397        setMachineCodes(mi++, (byte) 0xD3);
27398        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
27399        if (lister != null) lister.RDR(miStart, "RCR", dstBase, dstDisp, srcReg);
27400      }
27401    
27402      /**
27403       * Generate a register-offset--register RCR. That is,
27404       * <PRE>
27405       * rotate right with carry of [dstIndex<<dstScale + dstDisp] by srcReg
27406       * </PRE>
27407       *
27408       * @param dstIndex the destination index register
27409       * @param dstScale the destination shift amount
27410       * @param dstDisp the destination displacement
27411       * @param srcReg must always be ECX
27412       */
27413      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
27414      public final void emitRCR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
27415        int miStart = mi;
27416        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27417        // no size prefix
27418        generateREXprefix(false, null, dstIndex, null);
27419        setMachineCodes(mi++, (byte) 0xD3);
27420        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27421        if (lister != null) lister.RFDR(miStart, "RCR", dstIndex, dstScale, dstDisp, srcReg);
27422      }
27423    
27424      /**
27425       * Generate an absolute--register RCR. That is,
27426       * <PRE>
27427       * rotate right with carry of [dstDisp] by srcReg
27428       * </PRE>
27429       *
27430       * @param dstDisp the destination displacement
27431       * @param srcReg must always be ECX
27432       */
27433      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
27434      public final void emitRCR_Abs_Reg(Address dstDisp, GPR srcReg) {
27435        int miStart = mi;
27436        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27437        // no size prefix
27438        generateREXprefix(false, null, null, null);
27439        setMachineCodes(mi++, (byte) 0xD3);
27440        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
27441        if (lister != null) lister.RAR(miStart, "RCR", dstDisp, srcReg);
27442      }
27443    
27444      /**
27445       * Generate a register-displacement--register RCR. That is,
27446       * <PRE>
27447       * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
27448       * </PRE>
27449       *
27450       * @param dstBase the destination base register
27451       * @param dstIndex the destination index register
27452       * @param dstScale the destination shift amount
27453       * @param dstDisp the destination displacement
27454       * @param srcReg must always be ECX
27455       */
27456      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
27457      public final void emitRCR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
27458        int miStart = mi;
27459        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27460        // no size prefix
27461        generateREXprefix(false, null, dstIndex, dstBase);
27462        setMachineCodes(mi++, (byte) 0xD3);
27463        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27464        if (lister != null) lister.RXDR(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
27465      }
27466    
27467      /**
27468       * Generate a register--immediate RCR. That is,
27469       * <PRE>
27470       * rotate right with carry of dstReg by imm
27471       * </PRE>
27472       *
27473       * @param dstReg the destination register
27474       * @param imm immediate
27475       */
27476      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27477      public final void emitRCR_Reg_Imm_Quad(GPR dstReg, int imm) {
27478        int miStart = mi;
27479        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27480        // no size prefix
27481        generateREXprefix(true, null, null, dstReg);
27482        if (imm == 1) {
27483          setMachineCodes(mi++, (byte) 0xD1);
27484          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
27485        } else {
27486          setMachineCodes(mi++, (byte) 0xC1);
27487          emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
27488          emitImm8((byte)imm);
27489        }
27490        if (lister != null) lister.RI(miStart, "RCR", dstReg, imm);
27491      }
27492    
27493      /**
27494       * Generate a register-indirect--immediate RCR. That is,
27495       * <PRE>
27496       * rotate right with carry of [dstBase] by imm
27497       * </PRE>
27498       *
27499       * @param dstBase the destination base register
27500       * @param imm immediate
27501       */
27502      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27503      public final void emitRCR_RegInd_Imm_Quad(GPR dstBase, int imm) {
27504        int miStart = mi;
27505        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27506        // no size prefix
27507        generateREXprefix(true, null, null, dstBase);
27508        if (imm == 1) {
27509          setMachineCodes(mi++, (byte) 0xD1);
27510          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
27511        } else {
27512          setMachineCodes(mi++, (byte) 0xC1);
27513          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
27514          emitImm8((byte)imm);
27515        }
27516        if (lister != null) lister.RNI(miStart, "RCR", dstBase, imm);
27517      }
27518    
27519      /**
27520       * Generate a register-displacement--immediate RCR. That is,
27521       * <PRE>
27522       * rotate right with carry of [dstBase + dstDisp] by imm
27523       * </PRE>
27524       *
27525       * @param dstBase the destination base register
27526       * @param dstDisp the destination displacement
27527       * @param imm immediate
27528       */
27529      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27530      public final void emitRCR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
27531        int miStart = mi;
27532        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27533        // no size prefix
27534        generateREXprefix(true, null, null, dstBase);
27535        if (imm == 1) {
27536          setMachineCodes(mi++, (byte) 0xD1);
27537          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
27538        } else {
27539          setMachineCodes(mi++, (byte) 0xC1);
27540          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
27541          emitImm8((byte)imm);
27542        }
27543        if (lister != null) lister.RDI(miStart, "RCR", dstBase, dstDisp, imm);
27544      }
27545    
27546      /**
27547       * Generate a register-offset--immediate RCR. That is,
27548       * <PRE>
27549       * rotate right with carry of [dstIndex<<dstScale + dstDisp] by imm
27550       * </PRE>
27551       *
27552       * @param dstIndex the destination index register
27553       * @param dstScale the destination shift amount
27554       * @param dstDisp the destination displacement
27555       * @param imm immediate
27556       */
27557      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27558      public final void emitRCR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
27559        int miStart = mi;
27560        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27561        // no size prefix
27562        generateREXprefix(true, null, dstIndex, null);
27563        if (imm == 1) {
27564          setMachineCodes(mi++, (byte) 0xD1);
27565          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27566        } else {
27567          setMachineCodes(mi++, (byte) 0xC1);
27568          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27569          emitImm8((byte)imm);
27570        }
27571        if (lister != null) lister.RFDI(miStart, "RCR", dstIndex, dstScale, dstDisp, imm);
27572      }
27573    
27574      /**
27575       * Generate a absolute--immediate RCR. That is,
27576       * <PRE>
27577       * rotate right with carry of [dstDisp] by imm
27578       * </PRE>
27579       *
27580       * @param dstDisp the destination displacement
27581       * @param imm immediate
27582       */
27583      public final void emitRCR_Abs_Imm_Quad(Address dstDisp, int imm) {
27584        int miStart = mi;
27585        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27586        // no size prefix
27587        generateREXprefix(true, null, null, null);
27588        if (imm == 1) {
27589          setMachineCodes(mi++, (byte) 0xD1);
27590          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
27591        } else {
27592          setMachineCodes(mi++, (byte) 0xC1);
27593          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
27594          emitImm8((byte)imm);
27595        }
27596        if (lister != null) lister.RAI(miStart, "RCR", dstDisp, imm);
27597      }
27598    
27599      /**
27600       * Generate a register-index--immediate RCR. That is,
27601       * <PRE>
27602       * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by imm
27603       * </PRE>
27604       *
27605       * @param dstBase the destination base register
27606       * @param dstIndex the destination index register
27607       * @param dstScale the destination shift amount
27608       * @param dstDisp the destination displacement
27609       * @param imm immediate
27610       */
27611      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27612      public final void emitRCR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
27613        int miStart = mi;
27614        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27615        // no size prefix
27616        generateREXprefix(true, null, dstIndex, dstBase);
27617        if (imm == 1) {
27618          setMachineCodes(mi++, (byte) 0xD1);
27619          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27620        } else {
27621          setMachineCodes(mi++, (byte) 0xC1);
27622          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27623          emitImm8((byte)imm);
27624        }
27625        if (lister != null) lister.RXDI(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, imm);
27626      }
27627    
27628      /**
27629       * Generate a register--register RCR. That is,
27630       * <PRE>
27631       * rotate right with carry of dstReg by srcReg
27632       * </PRE>
27633       *
27634       * @param dstReg the destination register
27635       * @param srcReg must always be ECX
27636       */
27637      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27638      public final void emitRCR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
27639        int miStart = mi;
27640        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27641        // no size prefix
27642        generateREXprefix(true, null, null, dstReg);
27643        setMachineCodes(mi++, (byte) 0xD3);
27644        emitRegRegOperands(dstReg, GPR.getForOpcode(0x3));
27645        if (lister != null) lister.RR(miStart, "RCR", dstReg, srcReg);
27646      }
27647    
27648      /**
27649       * Generate a register-indirect--register RCR. That is,
27650       * <PRE>
27651       * rotate right with carry of [dstBase] by srcReg
27652       * </PRE>
27653       *
27654       * @param dstBase the destination register
27655       * @param srcReg must always be ECX
27656       */
27657      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27658      public final void emitRCR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
27659        int miStart = mi;
27660        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27661        // no size prefix
27662        generateREXprefix(true, null, null, dstBase);
27663        setMachineCodes(mi++, (byte) 0xD3);
27664        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x3));
27665        if (lister != null) lister.RNR(miStart, "RCR", dstBase, srcReg);
27666      }
27667    
27668      /**
27669       * Generate a register-displacement--register RCR. That is,
27670       * <PRE>
27671       * rotate right with carry of [dstBase + dstDisp] by srcReg
27672       * </PRE>
27673       *
27674       * @param dstBase the destination base register
27675       * @param dstDisp the destination displacement
27676       * @param srcReg must always be ECX
27677       */
27678      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
27679      public final void emitRCR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
27680        int miStart = mi;
27681        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27682        // no size prefix
27683        generateREXprefix(true, null, null, dstBase);
27684        setMachineCodes(mi++, (byte) 0xD3);
27685        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x3));
27686        if (lister != null) lister.RDR(miStart, "RCR", dstBase, dstDisp, srcReg);
27687      }
27688    
27689      /**
27690       * Generate a register-offset--register RCR. That is,
27691       * <PRE>
27692       * rotate right with carry of [dstIndex<<dstScale + dstDisp] by srcReg
27693       * </PRE>
27694       *
27695       * @param dstIndex the destination index register
27696       * @param dstScale the destination shift amount
27697       * @param dstDisp the destination displacement
27698       * @param srcReg must always be ECX
27699       */
27700      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
27701      public final void emitRCR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
27702        int miStart = mi;
27703        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27704        // no size prefix
27705        generateREXprefix(true, null, dstIndex, null);
27706        setMachineCodes(mi++, (byte) 0xD3);
27707        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27708        if (lister != null) lister.RFDR(miStart, "RCR", dstIndex, dstScale, dstDisp, srcReg);
27709      }
27710    
27711      /**
27712       * Generate an absolute--register RCR. That is,
27713       * <PRE>
27714       * rotate right with carry of [dstDisp] by srcReg
27715       * </PRE>
27716       *
27717       * @param dstDisp the destination displacement
27718       * @param srcReg must always be ECX
27719       */
27720      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
27721      public final void emitRCR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
27722        int miStart = mi;
27723        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27724        // no size prefix
27725        generateREXprefix(true, null, null, null);
27726        setMachineCodes(mi++, (byte) 0xD3);
27727        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x3));
27728        if (lister != null) lister.RAR(miStart, "RCR", dstDisp, srcReg);
27729      }
27730    
27731      /**
27732       * Generate a register-displacement--register RCR. That is,
27733       * <PRE>
27734       * rotate right with carry of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
27735       * </PRE>
27736       *
27737       * @param dstBase the destination base register
27738       * @param dstIndex the destination index register
27739       * @param dstScale the destination shift amount
27740       * @param dstDisp the destination displacement
27741       * @param srcReg must always be ECX
27742       */
27743      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
27744      public final void emitRCR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
27745        int miStart = mi;
27746        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27747        // no size prefix
27748        generateREXprefix(true, null, dstIndex, dstBase);
27749        setMachineCodes(mi++, (byte) 0xD3);
27750        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x3));
27751        if (lister != null) lister.RXDR(miStart, "RCR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
27752      }
27753    
27754      /**
27755       * Generate a register--immediate SAL. That is,
27756       * <PRE>
27757       * arithemetic shift left of dstReg by imm
27758       * </PRE>
27759       *
27760       * @param dstReg the destination register
27761       * @param imm immediate
27762       */
27763      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27764      public final void emitSAL_Reg_Imm_Byte(GPR dstReg, int imm) {
27765        int miStart = mi;
27766        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27767        // no size prefix
27768        generateREXprefix(false, null, null, dstReg);
27769        if (imm == 1) {
27770          setMachineCodes(mi++, (byte) 0xD0);
27771          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
27772        } else {
27773          setMachineCodes(mi++, (byte) 0xC0);
27774          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
27775          emitImm8((byte)imm);
27776        }
27777        if (lister != null) lister.RI(miStart, "SAL", dstReg, imm);
27778      }
27779    
27780      /**
27781       * Generate a register-indirect--immediate SAL. That is,
27782       * <PRE>
27783       * arithemetic shift left of [dstBase] by imm
27784       * </PRE>
27785       *
27786       * @param dstBase the destination base register
27787       * @param imm immediate
27788       */
27789      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27790      public final void emitSAL_RegInd_Imm_Byte(GPR dstBase, int imm) {
27791        int miStart = mi;
27792        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27793        // no size prefix
27794        generateREXprefix(false, null, null, dstBase);
27795        if (imm == 1) {
27796          setMachineCodes(mi++, (byte) 0xD0);
27797          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
27798        } else {
27799          setMachineCodes(mi++, (byte) 0xC0);
27800          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
27801          emitImm8((byte)imm);
27802        }
27803        if (lister != null) lister.RNI(miStart, "SAL", dstBase, imm);
27804      }
27805    
27806      /**
27807       * Generate a register-displacement--immediate SAL. That is,
27808       * <PRE>
27809       * arithemetic shift left of [dstBase + dstDisp] by imm
27810       * </PRE>
27811       *
27812       * @param dstBase the destination base register
27813       * @param dstDisp the destination displacement
27814       * @param imm immediate
27815       */
27816      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27817      public final void emitSAL_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
27818        int miStart = mi;
27819        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27820        // no size prefix
27821        generateREXprefix(false, null, null, dstBase);
27822        if (imm == 1) {
27823          setMachineCodes(mi++, (byte) 0xD0);
27824          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
27825        } else {
27826          setMachineCodes(mi++, (byte) 0xC0);
27827          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
27828          emitImm8((byte)imm);
27829        }
27830        if (lister != null) lister.RDI(miStart, "SAL", dstBase, dstDisp, imm);
27831      }
27832    
27833      /**
27834       * Generate a register-offset--immediate SAL. That is,
27835       * <PRE>
27836       * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by imm
27837       * </PRE>
27838       *
27839       * @param dstIndex the destination index register
27840       * @param dstScale the destination shift amount
27841       * @param dstDisp the destination displacement
27842       * @param imm immediate
27843       */
27844      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
27845      public final void emitSAL_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
27846        int miStart = mi;
27847        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27848        // no size prefix
27849        generateREXprefix(false, null, dstIndex, null);
27850        if (imm == 1) {
27851          setMachineCodes(mi++, (byte) 0xD0);
27852          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
27853        } else {
27854          setMachineCodes(mi++, (byte) 0xC0);
27855          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
27856          emitImm8((byte)imm);
27857        }
27858        if (lister != null) lister.RFDI(miStart, "SAL", dstIndex, dstScale, dstDisp, imm);
27859      }
27860    
27861      /**
27862       * Generate a absolute--immediate SAL. That is,
27863       * <PRE>
27864       * arithemetic shift left of [dstDisp] by imm
27865       * </PRE>
27866       *
27867       * @param dstDisp the destination displacement
27868       * @param imm immediate
27869       */
27870      public final void emitSAL_Abs_Imm_Byte(Address dstDisp, int imm) {
27871        int miStart = mi;
27872        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27873        // no size prefix
27874        generateREXprefix(false, null, null, null);
27875        if (imm == 1) {
27876          setMachineCodes(mi++, (byte) 0xD0);
27877          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
27878        } else {
27879          setMachineCodes(mi++, (byte) 0xC0);
27880          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
27881          emitImm8((byte)imm);
27882        }
27883        if (lister != null) lister.RAI(miStart, "SAL", dstDisp, imm);
27884      }
27885    
27886      /**
27887       * Generate a register-index--immediate SAL. That is,
27888       * <PRE>
27889       * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
27890       * </PRE>
27891       *
27892       * @param dstBase the destination base register
27893       * @param dstIndex the destination index register
27894       * @param dstScale the destination shift amount
27895       * @param dstDisp the destination displacement
27896       * @param imm immediate
27897       */
27898      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27899      public final void emitSAL_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
27900        int miStart = mi;
27901        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
27902        // no size prefix
27903        generateREXprefix(false, null, dstIndex, dstBase);
27904        if (imm == 1) {
27905          setMachineCodes(mi++, (byte) 0xD0);
27906          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
27907        } else {
27908          setMachineCodes(mi++, (byte) 0xC0);
27909          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
27910          emitImm8((byte)imm);
27911        }
27912        if (lister != null) lister.RXDI(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, imm);
27913      }
27914    
27915      /**
27916       * Generate a register--register SAL. That is,
27917       * <PRE>
27918       * arithemetic shift left of dstReg by srcReg
27919       * </PRE>
27920       *
27921       * @param dstReg the destination register
27922       * @param srcReg must always be ECX
27923       */
27924      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27925      public final void emitSAL_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
27926        int miStart = mi;
27927        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27928        // no size prefix
27929        generateREXprefix(false, null, null, dstReg);
27930        setMachineCodes(mi++, (byte) 0xD2);
27931        emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
27932        if (lister != null) lister.RR(miStart, "SAL", dstReg, srcReg);
27933      }
27934    
27935      /**
27936       * Generate a register-indirect--register SAL. That is,
27937       * <PRE>
27938       * arithemetic shift left of [dstBase] by srcReg
27939       * </PRE>
27940       *
27941       * @param dstBase the destination register
27942       * @param srcReg must always be ECX
27943       */
27944      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
27945      public final void emitSAL_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
27946        int miStart = mi;
27947        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27948        // no size prefix
27949        generateREXprefix(false, null, null, dstBase);
27950        setMachineCodes(mi++, (byte) 0xD2);
27951        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
27952        if (lister != null) lister.RNR(miStart, "SAL", dstBase, srcReg);
27953      }
27954    
27955      /**
27956       * Generate a register-displacement--register SAL. That is,
27957       * <PRE>
27958       * arithemetic shift left of [dstBase + dstDisp] by srcReg
27959       * </PRE>
27960       *
27961       * @param dstBase the destination base register
27962       * @param dstDisp the destination displacement
27963       * @param srcReg must always be ECX
27964       */
27965      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
27966      public final void emitSAL_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
27967        int miStart = mi;
27968        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27969        // no size prefix
27970        generateREXprefix(false, null, null, dstBase);
27971        setMachineCodes(mi++, (byte) 0xD2);
27972        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
27973        if (lister != null) lister.RDR(miStart, "SAL", dstBase, dstDisp, srcReg);
27974      }
27975    
27976      /**
27977       * Generate a register-offset--register SAL. That is,
27978       * <PRE>
27979       * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by srcReg
27980       * </PRE>
27981       *
27982       * @param dstIndex the destination index register
27983       * @param dstScale the destination shift amount
27984       * @param dstDisp the destination displacement
27985       * @param srcReg must always be ECX
27986       */
27987      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
27988      public final void emitSAL_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
27989        int miStart = mi;
27990        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
27991        // no size prefix
27992        generateREXprefix(false, null, dstIndex, null);
27993        setMachineCodes(mi++, (byte) 0xD2);
27994        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
27995        if (lister != null) lister.RFDR(miStart, "SAL", dstIndex, dstScale, dstDisp, srcReg);
27996      }
27997    
27998      /**
27999       * Generate an absolute--register SAL. That is,
28000       * <PRE>
28001       * arithemetic shift left of [dstDisp] by srcReg
28002       * </PRE>
28003       *
28004       * @param dstDisp the destination displacement
28005       * @param srcReg must always be ECX
28006       */
28007      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
28008      public final void emitSAL_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
28009        int miStart = mi;
28010        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28011        // no size prefix
28012        generateREXprefix(false, null, null, null);
28013        setMachineCodes(mi++, (byte) 0xD2);
28014        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
28015        if (lister != null) lister.RAR(miStart, "SAL", dstDisp, srcReg);
28016      }
28017    
28018      /**
28019       * Generate a register-displacement--register SAL. That is,
28020       * <PRE>
28021       * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
28022       * </PRE>
28023       *
28024       * @param dstBase the destination base register
28025       * @param dstIndex the destination index register
28026       * @param dstScale the destination shift amount
28027       * @param dstDisp the destination displacement
28028       * @param srcReg must always be ECX
28029       */
28030      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
28031      public final void emitSAL_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
28032        int miStart = mi;
28033        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28034        // no size prefix
28035        generateREXprefix(false, null, dstIndex, dstBase);
28036        setMachineCodes(mi++, (byte) 0xD2);
28037        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28038        if (lister != null) lister.RXDR(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
28039      }
28040    
28041      /**
28042       * Generate a register--immediate SAL. That is,
28043       * <PRE>
28044       * arithemetic shift left of dstReg by imm
28045       * </PRE>
28046       *
28047       * @param dstReg the destination register
28048       * @param imm immediate
28049       */
28050      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28051      public final void emitSAL_Reg_Imm_Word(GPR dstReg, int imm) {
28052        int miStart = mi;
28053        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28054        setMachineCodes(mi++, (byte) 0x66);
28055        generateREXprefix(false, null, null, dstReg);
28056        if (imm == 1) {
28057          setMachineCodes(mi++, (byte) 0xD1);
28058          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28059        } else {
28060          setMachineCodes(mi++, (byte) 0xC1);
28061          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28062          emitImm8((byte)imm);
28063        }
28064        if (lister != null) lister.RI(miStart, "SAL", dstReg, imm);
28065      }
28066    
28067      /**
28068       * Generate a register-indirect--immediate SAL. That is,
28069       * <PRE>
28070       * arithemetic shift left of [dstBase] by imm
28071       * </PRE>
28072       *
28073       * @param dstBase the destination base register
28074       * @param imm immediate
28075       */
28076      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28077      public final void emitSAL_RegInd_Imm_Word(GPR dstBase, int imm) {
28078        int miStart = mi;
28079        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28080        setMachineCodes(mi++, (byte) 0x66);
28081        generateREXprefix(false, null, null, dstBase);
28082        if (imm == 1) {
28083          setMachineCodes(mi++, (byte) 0xD1);
28084          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28085        } else {
28086          setMachineCodes(mi++, (byte) 0xC1);
28087          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28088          emitImm8((byte)imm);
28089        }
28090        if (lister != null) lister.RNI(miStart, "SAL", dstBase, imm);
28091      }
28092    
28093      /**
28094       * Generate a register-displacement--immediate SAL. That is,
28095       * <PRE>
28096       * arithemetic shift left of [dstBase + dstDisp] by imm
28097       * </PRE>
28098       *
28099       * @param dstBase the destination base register
28100       * @param dstDisp the destination displacement
28101       * @param imm immediate
28102       */
28103      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28104      public final void emitSAL_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
28105        int miStart = mi;
28106        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28107        setMachineCodes(mi++, (byte) 0x66);
28108        generateREXprefix(false, null, null, dstBase);
28109        if (imm == 1) {
28110          setMachineCodes(mi++, (byte) 0xD1);
28111          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28112        } else {
28113          setMachineCodes(mi++, (byte) 0xC1);
28114          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28115          emitImm8((byte)imm);
28116        }
28117        if (lister != null) lister.RDI(miStart, "SAL", dstBase, dstDisp, imm);
28118      }
28119    
28120      /**
28121       * Generate a register-offset--immediate SAL. That is,
28122       * <PRE>
28123       * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by imm
28124       * </PRE>
28125       *
28126       * @param dstIndex the destination index register
28127       * @param dstScale the destination shift amount
28128       * @param dstDisp the destination displacement
28129       * @param imm immediate
28130       */
28131      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28132      public final void emitSAL_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
28133        int miStart = mi;
28134        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28135        setMachineCodes(mi++, (byte) 0x66);
28136        generateREXprefix(false, null, dstIndex, null);
28137        if (imm == 1) {
28138          setMachineCodes(mi++, (byte) 0xD1);
28139          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28140        } else {
28141          setMachineCodes(mi++, (byte) 0xC1);
28142          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28143          emitImm8((byte)imm);
28144        }
28145        if (lister != null) lister.RFDI(miStart, "SAL", dstIndex, dstScale, dstDisp, imm);
28146      }
28147    
28148      /**
28149       * Generate a absolute--immediate SAL. That is,
28150       * <PRE>
28151       * arithemetic shift left of [dstDisp] by imm
28152       * </PRE>
28153       *
28154       * @param dstDisp the destination displacement
28155       * @param imm immediate
28156       */
28157      public final void emitSAL_Abs_Imm_Word(Address dstDisp, int imm) {
28158        int miStart = mi;
28159        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28160        setMachineCodes(mi++, (byte) 0x66);
28161        generateREXprefix(false, null, null, null);
28162        if (imm == 1) {
28163          setMachineCodes(mi++, (byte) 0xD1);
28164          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
28165        } else {
28166          setMachineCodes(mi++, (byte) 0xC1);
28167          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
28168          emitImm8((byte)imm);
28169        }
28170        if (lister != null) lister.RAI(miStart, "SAL", dstDisp, imm);
28171      }
28172    
28173      /**
28174       * Generate a register-index--immediate SAL. That is,
28175       * <PRE>
28176       * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
28177       * </PRE>
28178       *
28179       * @param dstBase the destination base register
28180       * @param dstIndex the destination index register
28181       * @param dstScale the destination shift amount
28182       * @param dstDisp the destination displacement
28183       * @param imm immediate
28184       */
28185      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
28186      public final void emitSAL_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
28187        int miStart = mi;
28188        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28189        setMachineCodes(mi++, (byte) 0x66);
28190        generateREXprefix(false, null, dstIndex, dstBase);
28191        if (imm == 1) {
28192          setMachineCodes(mi++, (byte) 0xD1);
28193          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28194        } else {
28195          setMachineCodes(mi++, (byte) 0xC1);
28196          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28197          emitImm8((byte)imm);
28198        }
28199        if (lister != null) lister.RXDI(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, imm);
28200      }
28201    
28202      /**
28203       * Generate a register--register SAL. That is,
28204       * <PRE>
28205       * arithemetic shift left of dstReg by srcReg
28206       * </PRE>
28207       *
28208       * @param dstReg the destination register
28209       * @param srcReg must always be ECX
28210       */
28211      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
28212      public final void emitSAL_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
28213        int miStart = mi;
28214        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28215        setMachineCodes(mi++, (byte) 0x66);
28216        generateREXprefix(false, null, null, dstReg);
28217        setMachineCodes(mi++, (byte) 0xD3);
28218        emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28219        if (lister != null) lister.RR(miStart, "SAL", dstReg, srcReg);
28220      }
28221    
28222      /**
28223       * Generate a register-indirect--register SAL. That is,
28224       * <PRE>
28225       * arithemetic shift left of [dstBase] by srcReg
28226       * </PRE>
28227       *
28228       * @param dstBase the destination register
28229       * @param srcReg must always be ECX
28230       */
28231      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
28232      public final void emitSAL_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
28233        int miStart = mi;
28234        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28235        setMachineCodes(mi++, (byte) 0x66);
28236        generateREXprefix(false, null, null, dstBase);
28237        setMachineCodes(mi++, (byte) 0xD3);
28238        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28239        if (lister != null) lister.RNR(miStart, "SAL", dstBase, srcReg);
28240      }
28241    
28242      /**
28243       * Generate a register-displacement--register SAL. That is,
28244       * <PRE>
28245       * arithemetic shift left of [dstBase + dstDisp] by srcReg
28246       * </PRE>
28247       *
28248       * @param dstBase the destination base register
28249       * @param dstDisp the destination displacement
28250       * @param srcReg must always be ECX
28251       */
28252      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
28253      public final void emitSAL_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
28254        int miStart = mi;
28255        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28256        setMachineCodes(mi++, (byte) 0x66);
28257        generateREXprefix(false, null, null, dstBase);
28258        setMachineCodes(mi++, (byte) 0xD3);
28259        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28260        if (lister != null) lister.RDR(miStart, "SAL", dstBase, dstDisp, srcReg);
28261      }
28262    
28263      /**
28264       * Generate a register-offset--register SAL. That is,
28265       * <PRE>
28266       * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by srcReg
28267       * </PRE>
28268       *
28269       * @param dstIndex the destination index register
28270       * @param dstScale the destination shift amount
28271       * @param dstDisp the destination displacement
28272       * @param srcReg must always be ECX
28273       */
28274      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
28275      public final void emitSAL_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
28276        int miStart = mi;
28277        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28278        setMachineCodes(mi++, (byte) 0x66);
28279        generateREXprefix(false, null, dstIndex, null);
28280        setMachineCodes(mi++, (byte) 0xD3);
28281        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28282        if (lister != null) lister.RFDR(miStart, "SAL", dstIndex, dstScale, dstDisp, srcReg);
28283      }
28284    
28285      /**
28286       * Generate an absolute--register SAL. That is,
28287       * <PRE>
28288       * arithemetic shift left of [dstDisp] by srcReg
28289       * </PRE>
28290       *
28291       * @param dstDisp the destination displacement
28292       * @param srcReg must always be ECX
28293       */
28294      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
28295      public final void emitSAL_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
28296        int miStart = mi;
28297        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28298        setMachineCodes(mi++, (byte) 0x66);
28299        generateREXprefix(false, null, null, null);
28300        setMachineCodes(mi++, (byte) 0xD3);
28301        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
28302        if (lister != null) lister.RAR(miStart, "SAL", dstDisp, srcReg);
28303      }
28304    
28305      /**
28306       * Generate a register-displacement--register SAL. That is,
28307       * <PRE>
28308       * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
28309       * </PRE>
28310       *
28311       * @param dstBase the destination base register
28312       * @param dstIndex the destination index register
28313       * @param dstScale the destination shift amount
28314       * @param dstDisp the destination displacement
28315       * @param srcReg must always be ECX
28316       */
28317      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
28318      public final void emitSAL_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
28319        int miStart = mi;
28320        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28321        setMachineCodes(mi++, (byte) 0x66);
28322        generateREXprefix(false, null, dstIndex, dstBase);
28323        setMachineCodes(mi++, (byte) 0xD3);
28324        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28325        if (lister != null) lister.RXDR(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
28326      }
28327    
28328      /**
28329       * Generate a register--immediate SAL. That is,
28330       * <PRE>
28331       * arithemetic shift left of dstReg by imm
28332       * </PRE>
28333       *
28334       * @param dstReg the destination register
28335       * @param imm immediate
28336       */
28337      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28338      public final void emitSAL_Reg_Imm(GPR dstReg, int imm) {
28339        int miStart = mi;
28340        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28341        // no size prefix
28342        generateREXprefix(false, null, null, dstReg);
28343        if (imm == 1) {
28344          setMachineCodes(mi++, (byte) 0xD1);
28345          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28346        } else {
28347          setMachineCodes(mi++, (byte) 0xC1);
28348          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28349          emitImm8((byte)imm);
28350        }
28351        if (lister != null) lister.RI(miStart, "SAL", dstReg, imm);
28352      }
28353    
28354      /**
28355       * Generate a register-indirect--immediate SAL. That is,
28356       * <PRE>
28357       * arithemetic shift left of [dstBase] by imm
28358       * </PRE>
28359       *
28360       * @param dstBase the destination base register
28361       * @param imm immediate
28362       */
28363      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28364      public final void emitSAL_RegInd_Imm(GPR dstBase, int imm) {
28365        int miStart = mi;
28366        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28367        // no size prefix
28368        generateREXprefix(false, null, null, dstBase);
28369        if (imm == 1) {
28370          setMachineCodes(mi++, (byte) 0xD1);
28371          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28372        } else {
28373          setMachineCodes(mi++, (byte) 0xC1);
28374          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28375          emitImm8((byte)imm);
28376        }
28377        if (lister != null) lister.RNI(miStart, "SAL", dstBase, imm);
28378      }
28379    
28380      /**
28381       * Generate a register-displacement--immediate SAL. That is,
28382       * <PRE>
28383       * arithemetic shift left of [dstBase + dstDisp] by imm
28384       * </PRE>
28385       *
28386       * @param dstBase the destination base register
28387       * @param dstDisp the destination displacement
28388       * @param imm immediate
28389       */
28390      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28391      public final void emitSAL_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
28392        int miStart = mi;
28393        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28394        // no size prefix
28395        generateREXprefix(false, null, null, dstBase);
28396        if (imm == 1) {
28397          setMachineCodes(mi++, (byte) 0xD1);
28398          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28399        } else {
28400          setMachineCodes(mi++, (byte) 0xC1);
28401          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28402          emitImm8((byte)imm);
28403        }
28404        if (lister != null) lister.RDI(miStart, "SAL", dstBase, dstDisp, imm);
28405      }
28406    
28407      /**
28408       * Generate a register-offset--immediate SAL. That is,
28409       * <PRE>
28410       * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by imm
28411       * </PRE>
28412       *
28413       * @param dstIndex the destination index register
28414       * @param dstScale the destination shift amount
28415       * @param dstDisp the destination displacement
28416       * @param imm immediate
28417       */
28418      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28419      public final void emitSAL_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
28420        int miStart = mi;
28421        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28422        // no size prefix
28423        generateREXprefix(false, null, dstIndex, null);
28424        if (imm == 1) {
28425          setMachineCodes(mi++, (byte) 0xD1);
28426          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28427        } else {
28428          setMachineCodes(mi++, (byte) 0xC1);
28429          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28430          emitImm8((byte)imm);
28431        }
28432        if (lister != null) lister.RFDI(miStart, "SAL", dstIndex, dstScale, dstDisp, imm);
28433      }
28434    
28435      /**
28436       * Generate a absolute--immediate SAL. That is,
28437       * <PRE>
28438       * arithemetic shift left of [dstDisp] by imm
28439       * </PRE>
28440       *
28441       * @param dstDisp the destination displacement
28442       * @param imm immediate
28443       */
28444      public final void emitSAL_Abs_Imm(Address dstDisp, int imm) {
28445        int miStart = mi;
28446        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28447        // no size prefix
28448        generateREXprefix(false, null, null, null);
28449        if (imm == 1) {
28450          setMachineCodes(mi++, (byte) 0xD1);
28451          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
28452        } else {
28453          setMachineCodes(mi++, (byte) 0xC1);
28454          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
28455          emitImm8((byte)imm);
28456        }
28457        if (lister != null) lister.RAI(miStart, "SAL", dstDisp, imm);
28458      }
28459    
28460      /**
28461       * Generate a register-index--immediate SAL. That is,
28462       * <PRE>
28463       * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
28464       * </PRE>
28465       *
28466       * @param dstBase the destination base register
28467       * @param dstIndex the destination index register
28468       * @param dstScale the destination shift amount
28469       * @param dstDisp the destination displacement
28470       * @param imm immediate
28471       */
28472      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
28473      public final void emitSAL_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
28474        int miStart = mi;
28475        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28476        // no size prefix
28477        generateREXprefix(false, null, dstIndex, dstBase);
28478        if (imm == 1) {
28479          setMachineCodes(mi++, (byte) 0xD1);
28480          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28481        } else {
28482          setMachineCodes(mi++, (byte) 0xC1);
28483          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28484          emitImm8((byte)imm);
28485        }
28486        if (lister != null) lister.RXDI(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, imm);
28487      }
28488    
28489      /**
28490       * Generate a register--register SAL. That is,
28491       * <PRE>
28492       * arithemetic shift left of dstReg by srcReg
28493       * </PRE>
28494       *
28495       * @param dstReg the destination register
28496       * @param srcReg must always be ECX
28497       */
28498      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
28499      public final void emitSAL_Reg_Reg(GPR dstReg, GPR srcReg) {
28500        int miStart = mi;
28501        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28502        // no size prefix
28503        generateREXprefix(false, null, null, dstReg);
28504        setMachineCodes(mi++, (byte) 0xD3);
28505        emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28506        if (lister != null) lister.RR(miStart, "SAL", dstReg, srcReg);
28507      }
28508    
28509      /**
28510       * Generate a register-indirect--register SAL. That is,
28511       * <PRE>
28512       * arithemetic shift left of [dstBase] by srcReg
28513       * </PRE>
28514       *
28515       * @param dstBase the destination register
28516       * @param srcReg must always be ECX
28517       */
28518      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
28519      public final void emitSAL_RegInd_Reg(GPR dstBase, GPR srcReg) {
28520        int miStart = mi;
28521        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28522        // no size prefix
28523        generateREXprefix(false, null, null, dstBase);
28524        setMachineCodes(mi++, (byte) 0xD3);
28525        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28526        if (lister != null) lister.RNR(miStart, "SAL", dstBase, srcReg);
28527      }
28528    
28529      /**
28530       * Generate a register-displacement--register SAL. That is,
28531       * <PRE>
28532       * arithemetic shift left of [dstBase + dstDisp] by srcReg
28533       * </PRE>
28534       *
28535       * @param dstBase the destination base register
28536       * @param dstDisp the destination displacement
28537       * @param srcReg must always be ECX
28538       */
28539      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
28540      public final void emitSAL_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
28541        int miStart = mi;
28542        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28543        // no size prefix
28544        generateREXprefix(false, null, null, dstBase);
28545        setMachineCodes(mi++, (byte) 0xD3);
28546        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28547        if (lister != null) lister.RDR(miStart, "SAL", dstBase, dstDisp, srcReg);
28548      }
28549    
28550      /**
28551       * Generate a register-offset--register SAL. That is,
28552       * <PRE>
28553       * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by srcReg
28554       * </PRE>
28555       *
28556       * @param dstIndex the destination index register
28557       * @param dstScale the destination shift amount
28558       * @param dstDisp the destination displacement
28559       * @param srcReg must always be ECX
28560       */
28561      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
28562      public final void emitSAL_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
28563        int miStart = mi;
28564        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28565        // no size prefix
28566        generateREXprefix(false, null, dstIndex, null);
28567        setMachineCodes(mi++, (byte) 0xD3);
28568        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28569        if (lister != null) lister.RFDR(miStart, "SAL", dstIndex, dstScale, dstDisp, srcReg);
28570      }
28571    
28572      /**
28573       * Generate an absolute--register SAL. That is,
28574       * <PRE>
28575       * arithemetic shift left of [dstDisp] by srcReg
28576       * </PRE>
28577       *
28578       * @param dstDisp the destination displacement
28579       * @param srcReg must always be ECX
28580       */
28581      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
28582      public final void emitSAL_Abs_Reg(Address dstDisp, GPR srcReg) {
28583        int miStart = mi;
28584        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28585        // no size prefix
28586        generateREXprefix(false, null, null, null);
28587        setMachineCodes(mi++, (byte) 0xD3);
28588        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
28589        if (lister != null) lister.RAR(miStart, "SAL", dstDisp, srcReg);
28590      }
28591    
28592      /**
28593       * Generate a register-displacement--register SAL. That is,
28594       * <PRE>
28595       * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
28596       * </PRE>
28597       *
28598       * @param dstBase the destination base register
28599       * @param dstIndex the destination index register
28600       * @param dstScale the destination shift amount
28601       * @param dstDisp the destination displacement
28602       * @param srcReg must always be ECX
28603       */
28604      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
28605      public final void emitSAL_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
28606        int miStart = mi;
28607        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28608        // no size prefix
28609        generateREXprefix(false, null, dstIndex, dstBase);
28610        setMachineCodes(mi++, (byte) 0xD3);
28611        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28612        if (lister != null) lister.RXDR(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
28613      }
28614    
28615      /**
28616       * Generate a register--immediate SAL. That is,
28617       * <PRE>
28618       * arithemetic shift left of dstReg by imm
28619       * </PRE>
28620       *
28621       * @param dstReg the destination register
28622       * @param imm immediate
28623       */
28624      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28625      public final void emitSAL_Reg_Imm_Quad(GPR dstReg, int imm) {
28626        int miStart = mi;
28627        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28628        // no size prefix
28629        generateREXprefix(true, null, null, dstReg);
28630        if (imm == 1) {
28631          setMachineCodes(mi++, (byte) 0xD1);
28632          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28633        } else {
28634          setMachineCodes(mi++, (byte) 0xC1);
28635          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28636          emitImm8((byte)imm);
28637        }
28638        if (lister != null) lister.RI(miStart, "SAL", dstReg, imm);
28639      }
28640    
28641      /**
28642       * Generate a register-indirect--immediate SAL. That is,
28643       * <PRE>
28644       * arithemetic shift left of [dstBase] by imm
28645       * </PRE>
28646       *
28647       * @param dstBase the destination base register
28648       * @param imm immediate
28649       */
28650      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28651      public final void emitSAL_RegInd_Imm_Quad(GPR dstBase, int imm) {
28652        int miStart = mi;
28653        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28654        // no size prefix
28655        generateREXprefix(true, null, null, dstBase);
28656        if (imm == 1) {
28657          setMachineCodes(mi++, (byte) 0xD1);
28658          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28659        } else {
28660          setMachineCodes(mi++, (byte) 0xC1);
28661          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28662          emitImm8((byte)imm);
28663        }
28664        if (lister != null) lister.RNI(miStart, "SAL", dstBase, imm);
28665      }
28666    
28667      /**
28668       * Generate a register-displacement--immediate SAL. That is,
28669       * <PRE>
28670       * arithemetic shift left of [dstBase + dstDisp] by imm
28671       * </PRE>
28672       *
28673       * @param dstBase the destination base register
28674       * @param dstDisp the destination displacement
28675       * @param imm immediate
28676       */
28677      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28678      public final void emitSAL_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
28679        int miStart = mi;
28680        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28681        // no size prefix
28682        generateREXprefix(true, null, null, dstBase);
28683        if (imm == 1) {
28684          setMachineCodes(mi++, (byte) 0xD1);
28685          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28686        } else {
28687          setMachineCodes(mi++, (byte) 0xC1);
28688          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28689          emitImm8((byte)imm);
28690        }
28691        if (lister != null) lister.RDI(miStart, "SAL", dstBase, dstDisp, imm);
28692      }
28693    
28694      /**
28695       * Generate a register-offset--immediate SAL. That is,
28696       * <PRE>
28697       * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by imm
28698       * </PRE>
28699       *
28700       * @param dstIndex the destination index register
28701       * @param dstScale the destination shift amount
28702       * @param dstDisp the destination displacement
28703       * @param imm immediate
28704       */
28705      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28706      public final void emitSAL_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
28707        int miStart = mi;
28708        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28709        // no size prefix
28710        generateREXprefix(true, null, dstIndex, null);
28711        if (imm == 1) {
28712          setMachineCodes(mi++, (byte) 0xD1);
28713          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28714        } else {
28715          setMachineCodes(mi++, (byte) 0xC1);
28716          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28717          emitImm8((byte)imm);
28718        }
28719        if (lister != null) lister.RFDI(miStart, "SAL", dstIndex, dstScale, dstDisp, imm);
28720      }
28721    
28722      /**
28723       * Generate a absolute--immediate SAL. That is,
28724       * <PRE>
28725       * arithemetic shift left of [dstDisp] by imm
28726       * </PRE>
28727       *
28728       * @param dstDisp the destination displacement
28729       * @param imm immediate
28730       */
28731      public final void emitSAL_Abs_Imm_Quad(Address dstDisp, int imm) {
28732        int miStart = mi;
28733        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28734        // no size prefix
28735        generateREXprefix(true, null, null, null);
28736        if (imm == 1) {
28737          setMachineCodes(mi++, (byte) 0xD1);
28738          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
28739        } else {
28740          setMachineCodes(mi++, (byte) 0xC1);
28741          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
28742          emitImm8((byte)imm);
28743        }
28744        if (lister != null) lister.RAI(miStart, "SAL", dstDisp, imm);
28745      }
28746    
28747      /**
28748       * Generate a register-index--immediate SAL. That is,
28749       * <PRE>
28750       * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
28751       * </PRE>
28752       *
28753       * @param dstBase the destination base register
28754       * @param dstIndex the destination index register
28755       * @param dstScale the destination shift amount
28756       * @param dstDisp the destination displacement
28757       * @param imm immediate
28758       */
28759      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
28760      public final void emitSAL_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
28761        int miStart = mi;
28762        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28763        // no size prefix
28764        generateREXprefix(true, null, dstIndex, dstBase);
28765        if (imm == 1) {
28766          setMachineCodes(mi++, (byte) 0xD1);
28767          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28768        } else {
28769          setMachineCodes(mi++, (byte) 0xC1);
28770          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28771          emitImm8((byte)imm);
28772        }
28773        if (lister != null) lister.RXDI(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, imm);
28774      }
28775    
28776      /**
28777       * Generate a register--register SAL. That is,
28778       * <PRE>
28779       * arithemetic shift left of dstReg by srcReg
28780       * </PRE>
28781       *
28782       * @param dstReg the destination register
28783       * @param srcReg must always be ECX
28784       */
28785      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
28786      public final void emitSAL_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
28787        int miStart = mi;
28788        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28789        // no size prefix
28790        generateREXprefix(true, null, null, dstReg);
28791        setMachineCodes(mi++, (byte) 0xD3);
28792        emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28793        if (lister != null) lister.RR(miStart, "SAL", dstReg, srcReg);
28794      }
28795    
28796      /**
28797       * Generate a register-indirect--register SAL. That is,
28798       * <PRE>
28799       * arithemetic shift left of [dstBase] by srcReg
28800       * </PRE>
28801       *
28802       * @param dstBase the destination register
28803       * @param srcReg must always be ECX
28804       */
28805      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
28806      public final void emitSAL_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
28807        int miStart = mi;
28808        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28809        // no size prefix
28810        generateREXprefix(true, null, null, dstBase);
28811        setMachineCodes(mi++, (byte) 0xD3);
28812        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28813        if (lister != null) lister.RNR(miStart, "SAL", dstBase, srcReg);
28814      }
28815    
28816      /**
28817       * Generate a register-displacement--register SAL. That is,
28818       * <PRE>
28819       * arithemetic shift left of [dstBase + dstDisp] by srcReg
28820       * </PRE>
28821       *
28822       * @param dstBase the destination base register
28823       * @param dstDisp the destination displacement
28824       * @param srcReg must always be ECX
28825       */
28826      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
28827      public final void emitSAL_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
28828        int miStart = mi;
28829        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28830        // no size prefix
28831        generateREXprefix(true, null, null, dstBase);
28832        setMachineCodes(mi++, (byte) 0xD3);
28833        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28834        if (lister != null) lister.RDR(miStart, "SAL", dstBase, dstDisp, srcReg);
28835      }
28836    
28837      /**
28838       * Generate a register-offset--register SAL. That is,
28839       * <PRE>
28840       * arithemetic shift left of [dstIndex<<dstScale + dstDisp] by srcReg
28841       * </PRE>
28842       *
28843       * @param dstIndex the destination index register
28844       * @param dstScale the destination shift amount
28845       * @param dstDisp the destination displacement
28846       * @param srcReg must always be ECX
28847       */
28848      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
28849      public final void emitSAL_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
28850        int miStart = mi;
28851        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28852        // no size prefix
28853        generateREXprefix(true, null, dstIndex, null);
28854        setMachineCodes(mi++, (byte) 0xD3);
28855        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28856        if (lister != null) lister.RFDR(miStart, "SAL", dstIndex, dstScale, dstDisp, srcReg);
28857      }
28858    
28859      /**
28860       * Generate an absolute--register SAL. That is,
28861       * <PRE>
28862       * arithemetic shift left of [dstDisp] by srcReg
28863       * </PRE>
28864       *
28865       * @param dstDisp the destination displacement
28866       * @param srcReg must always be ECX
28867       */
28868      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
28869      public final void emitSAL_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
28870        int miStart = mi;
28871        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28872        // no size prefix
28873        generateREXprefix(true, null, null, null);
28874        setMachineCodes(mi++, (byte) 0xD3);
28875        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
28876        if (lister != null) lister.RAR(miStart, "SAL", dstDisp, srcReg);
28877      }
28878    
28879      /**
28880       * Generate a register-displacement--register SAL. That is,
28881       * <PRE>
28882       * arithemetic shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
28883       * </PRE>
28884       *
28885       * @param dstBase the destination base register
28886       * @param dstIndex the destination index register
28887       * @param dstScale the destination shift amount
28888       * @param dstDisp the destination displacement
28889       * @param srcReg must always be ECX
28890       */
28891      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
28892      public final void emitSAL_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
28893        int miStart = mi;
28894        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
28895        // no size prefix
28896        generateREXprefix(true, null, dstIndex, dstBase);
28897        setMachineCodes(mi++, (byte) 0xD3);
28898        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
28899        if (lister != null) lister.RXDR(miStart, "SAL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
28900      }
28901    
28902      /**
28903       * Generate a register--immediate SHL. That is,
28904       * <PRE>
28905       * logical shift left of dstReg by imm
28906       * </PRE>
28907       *
28908       * @param dstReg the destination register
28909       * @param imm immediate
28910       */
28911      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28912      public final void emitSHL_Reg_Imm_Byte(GPR dstReg, int imm) {
28913        int miStart = mi;
28914        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28915        // no size prefix
28916        generateREXprefix(false, null, null, dstReg);
28917        if (imm == 1) {
28918          setMachineCodes(mi++, (byte) 0xD0);
28919          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28920        } else {
28921          setMachineCodes(mi++, (byte) 0xC0);
28922          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
28923          emitImm8((byte)imm);
28924        }
28925        if (lister != null) lister.RI(miStart, "SHL", dstReg, imm);
28926      }
28927    
28928      /**
28929       * Generate a register-indirect--immediate SHL. That is,
28930       * <PRE>
28931       * logical shift left of [dstBase] by imm
28932       * </PRE>
28933       *
28934       * @param dstBase the destination base register
28935       * @param imm immediate
28936       */
28937      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28938      public final void emitSHL_RegInd_Imm_Byte(GPR dstBase, int imm) {
28939        int miStart = mi;
28940        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28941        // no size prefix
28942        generateREXprefix(false, null, null, dstBase);
28943        if (imm == 1) {
28944          setMachineCodes(mi++, (byte) 0xD0);
28945          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28946        } else {
28947          setMachineCodes(mi++, (byte) 0xC0);
28948          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
28949          emitImm8((byte)imm);
28950        }
28951        if (lister != null) lister.RNI(miStart, "SHL", dstBase, imm);
28952      }
28953    
28954      /**
28955       * Generate a register-displacement--immediate SHL. That is,
28956       * <PRE>
28957       * logical shift left of [dstBase + dstDisp] by imm
28958       * </PRE>
28959       *
28960       * @param dstBase the destination base register
28961       * @param dstDisp the destination displacement
28962       * @param imm immediate
28963       */
28964      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28965      public final void emitSHL_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
28966        int miStart = mi;
28967        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28968        // no size prefix
28969        generateREXprefix(false, null, null, dstBase);
28970        if (imm == 1) {
28971          setMachineCodes(mi++, (byte) 0xD0);
28972          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28973        } else {
28974          setMachineCodes(mi++, (byte) 0xC0);
28975          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
28976          emitImm8((byte)imm);
28977        }
28978        if (lister != null) lister.RDI(miStart, "SHL", dstBase, dstDisp, imm);
28979      }
28980    
28981      /**
28982       * Generate a register-offset--immediate SHL. That is,
28983       * <PRE>
28984       * logical shift left of [dstIndex<<dstScale + dstDisp] by imm
28985       * </PRE>
28986       *
28987       * @param dstIndex the destination index register
28988       * @param dstScale the destination shift amount
28989       * @param dstDisp the destination displacement
28990       * @param imm immediate
28991       */
28992      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
28993      public final void emitSHL_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
28994        int miStart = mi;
28995        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
28996        // no size prefix
28997        generateREXprefix(false, null, dstIndex, null);
28998        if (imm == 1) {
28999          setMachineCodes(mi++, (byte) 0xD0);
29000          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29001        } else {
29002          setMachineCodes(mi++, (byte) 0xC0);
29003          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29004          emitImm8((byte)imm);
29005        }
29006        if (lister != null) lister.RFDI(miStart, "SHL", dstIndex, dstScale, dstDisp, imm);
29007      }
29008    
29009      /**
29010       * Generate a absolute--immediate SHL. That is,
29011       * <PRE>
29012       * logical shift left of [dstDisp] by imm
29013       * </PRE>
29014       *
29015       * @param dstDisp the destination displacement
29016       * @param imm immediate
29017       */
29018      public final void emitSHL_Abs_Imm_Byte(Address dstDisp, int imm) {
29019        int miStart = mi;
29020        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29021        // no size prefix
29022        generateREXprefix(false, null, null, null);
29023        if (imm == 1) {
29024          setMachineCodes(mi++, (byte) 0xD0);
29025          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29026        } else {
29027          setMachineCodes(mi++, (byte) 0xC0);
29028          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29029          emitImm8((byte)imm);
29030        }
29031        if (lister != null) lister.RAI(miStart, "SHL", dstDisp, imm);
29032      }
29033    
29034      /**
29035       * Generate a register-index--immediate SHL. That is,
29036       * <PRE>
29037       * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
29038       * </PRE>
29039       *
29040       * @param dstBase the destination base register
29041       * @param dstIndex the destination index register
29042       * @param dstScale the destination shift amount
29043       * @param dstDisp the destination displacement
29044       * @param imm immediate
29045       */
29046      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29047      public final void emitSHL_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
29048        int miStart = mi;
29049        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29050        // no size prefix
29051        generateREXprefix(false, null, dstIndex, dstBase);
29052        if (imm == 1) {
29053          setMachineCodes(mi++, (byte) 0xD0);
29054          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29055        } else {
29056          setMachineCodes(mi++, (byte) 0xC0);
29057          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29058          emitImm8((byte)imm);
29059        }
29060        if (lister != null) lister.RXDI(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, imm);
29061      }
29062    
29063      /**
29064       * Generate a register--register SHL. That is,
29065       * <PRE>
29066       * logical shift left of dstReg by srcReg
29067       * </PRE>
29068       *
29069       * @param dstReg the destination register
29070       * @param srcReg must always be ECX
29071       */
29072      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29073      public final void emitSHL_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
29074        int miStart = mi;
29075        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29076        // no size prefix
29077        generateREXprefix(false, null, null, dstReg);
29078        setMachineCodes(mi++, (byte) 0xD2);
29079        emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
29080        if (lister != null) lister.RR(miStart, "SHL", dstReg, srcReg);
29081      }
29082    
29083      /**
29084       * Generate a register-indirect--register SHL. That is,
29085       * <PRE>
29086       * logical shift left of [dstBase] by srcReg
29087       * </PRE>
29088       *
29089       * @param dstBase the destination register
29090       * @param srcReg must always be ECX
29091       */
29092      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29093      public final void emitSHL_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
29094        int miStart = mi;
29095        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29096        // no size prefix
29097        generateREXprefix(false, null, null, dstBase);
29098        setMachineCodes(mi++, (byte) 0xD2);
29099        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
29100        if (lister != null) lister.RNR(miStart, "SHL", dstBase, srcReg);
29101      }
29102    
29103      /**
29104       * Generate a register-displacement--register SHL. That is,
29105       * <PRE>
29106       * logical shift left of [dstBase + dstDisp] by srcReg
29107       * </PRE>
29108       *
29109       * @param dstBase the destination base register
29110       * @param dstDisp the destination displacement
29111       * @param srcReg must always be ECX
29112       */
29113      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
29114      public final void emitSHL_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
29115        int miStart = mi;
29116        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29117        // no size prefix
29118        generateREXprefix(false, null, null, dstBase);
29119        setMachineCodes(mi++, (byte) 0xD2);
29120        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
29121        if (lister != null) lister.RDR(miStart, "SHL", dstBase, dstDisp, srcReg);
29122      }
29123    
29124      /**
29125       * Generate a register-offset--register SHL. That is,
29126       * <PRE>
29127       * logical shift left of [dstIndex<<dstScale + dstDisp] by srcReg
29128       * </PRE>
29129       *
29130       * @param dstIndex the destination index register
29131       * @param dstScale the destination shift amount
29132       * @param dstDisp the destination displacement
29133       * @param srcReg must always be ECX
29134       */
29135      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
29136      public final void emitSHL_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
29137        int miStart = mi;
29138        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29139        // no size prefix
29140        generateREXprefix(false, null, dstIndex, null);
29141        setMachineCodes(mi++, (byte) 0xD2);
29142        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29143        if (lister != null) lister.RFDR(miStart, "SHL", dstIndex, dstScale, dstDisp, srcReg);
29144      }
29145    
29146      /**
29147       * Generate an absolute--register SHL. That is,
29148       * <PRE>
29149       * logical shift left of [dstDisp] by srcReg
29150       * </PRE>
29151       *
29152       * @param dstDisp the destination displacement
29153       * @param srcReg must always be ECX
29154       */
29155      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
29156      public final void emitSHL_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
29157        int miStart = mi;
29158        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29159        // no size prefix
29160        generateREXprefix(false, null, null, null);
29161        setMachineCodes(mi++, (byte) 0xD2);
29162        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29163        if (lister != null) lister.RAR(miStart, "SHL", dstDisp, srcReg);
29164      }
29165    
29166      /**
29167       * Generate a register-displacement--register SHL. That is,
29168       * <PRE>
29169       * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
29170       * </PRE>
29171       *
29172       * @param dstBase the destination base register
29173       * @param dstIndex the destination index register
29174       * @param dstScale the destination shift amount
29175       * @param dstDisp the destination displacement
29176       * @param srcReg must always be ECX
29177       */
29178      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
29179      public final void emitSHL_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
29180        int miStart = mi;
29181        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29182        // no size prefix
29183        generateREXprefix(false, null, dstIndex, dstBase);
29184        setMachineCodes(mi++, (byte) 0xD2);
29185        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29186        if (lister != null) lister.RXDR(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
29187      }
29188    
29189      /**
29190       * Generate a register--immediate SHL. That is,
29191       * <PRE>
29192       * logical shift left of dstReg by imm
29193       * </PRE>
29194       *
29195       * @param dstReg the destination register
29196       * @param imm immediate
29197       */
29198      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29199      public final void emitSHL_Reg_Imm_Word(GPR dstReg, int imm) {
29200        int miStart = mi;
29201        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29202        setMachineCodes(mi++, (byte) 0x66);
29203        generateREXprefix(false, null, null, dstReg);
29204        if (imm == 1) {
29205          setMachineCodes(mi++, (byte) 0xD1);
29206          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
29207        } else {
29208          setMachineCodes(mi++, (byte) 0xC1);
29209          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
29210          emitImm8((byte)imm);
29211        }
29212        if (lister != null) lister.RI(miStart, "SHL", dstReg, imm);
29213      }
29214    
29215      /**
29216       * Generate a register-indirect--immediate SHL. That is,
29217       * <PRE>
29218       * logical shift left of [dstBase] by imm
29219       * </PRE>
29220       *
29221       * @param dstBase the destination base register
29222       * @param imm immediate
29223       */
29224      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29225      public final void emitSHL_RegInd_Imm_Word(GPR dstBase, int imm) {
29226        int miStart = mi;
29227        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29228        setMachineCodes(mi++, (byte) 0x66);
29229        generateREXprefix(false, null, null, dstBase);
29230        if (imm == 1) {
29231          setMachineCodes(mi++, (byte) 0xD1);
29232          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
29233        } else {
29234          setMachineCodes(mi++, (byte) 0xC1);
29235          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
29236          emitImm8((byte)imm);
29237        }
29238        if (lister != null) lister.RNI(miStart, "SHL", dstBase, imm);
29239      }
29240    
29241      /**
29242       * Generate a register-displacement--immediate SHL. That is,
29243       * <PRE>
29244       * logical shift left of [dstBase + dstDisp] by imm
29245       * </PRE>
29246       *
29247       * @param dstBase the destination base register
29248       * @param dstDisp the destination displacement
29249       * @param imm immediate
29250       */
29251      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29252      public final void emitSHL_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
29253        int miStart = mi;
29254        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29255        setMachineCodes(mi++, (byte) 0x66);
29256        generateREXprefix(false, null, null, dstBase);
29257        if (imm == 1) {
29258          setMachineCodes(mi++, (byte) 0xD1);
29259          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
29260        } else {
29261          setMachineCodes(mi++, (byte) 0xC1);
29262          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
29263          emitImm8((byte)imm);
29264        }
29265        if (lister != null) lister.RDI(miStart, "SHL", dstBase, dstDisp, imm);
29266      }
29267    
29268      /**
29269       * Generate a register-offset--immediate SHL. That is,
29270       * <PRE>
29271       * logical shift left of [dstIndex<<dstScale + dstDisp] by imm
29272       * </PRE>
29273       *
29274       * @param dstIndex the destination index register
29275       * @param dstScale the destination shift amount
29276       * @param dstDisp the destination displacement
29277       * @param imm immediate
29278       */
29279      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29280      public final void emitSHL_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
29281        int miStart = mi;
29282        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29283        setMachineCodes(mi++, (byte) 0x66);
29284        generateREXprefix(false, null, dstIndex, null);
29285        if (imm == 1) {
29286          setMachineCodes(mi++, (byte) 0xD1);
29287          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29288        } else {
29289          setMachineCodes(mi++, (byte) 0xC1);
29290          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29291          emitImm8((byte)imm);
29292        }
29293        if (lister != null) lister.RFDI(miStart, "SHL", dstIndex, dstScale, dstDisp, imm);
29294      }
29295    
29296      /**
29297       * Generate a absolute--immediate SHL. That is,
29298       * <PRE>
29299       * logical shift left of [dstDisp] by imm
29300       * </PRE>
29301       *
29302       * @param dstDisp the destination displacement
29303       * @param imm immediate
29304       */
29305      public final void emitSHL_Abs_Imm_Word(Address dstDisp, int imm) {
29306        int miStart = mi;
29307        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29308        setMachineCodes(mi++, (byte) 0x66);
29309        generateREXprefix(false, null, null, null);
29310        if (imm == 1) {
29311          setMachineCodes(mi++, (byte) 0xD1);
29312          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29313        } else {
29314          setMachineCodes(mi++, (byte) 0xC1);
29315          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29316          emitImm8((byte)imm);
29317        }
29318        if (lister != null) lister.RAI(miStart, "SHL", dstDisp, imm);
29319      }
29320    
29321      /**
29322       * Generate a register-index--immediate SHL. That is,
29323       * <PRE>
29324       * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
29325       * </PRE>
29326       *
29327       * @param dstBase the destination base register
29328       * @param dstIndex the destination index register
29329       * @param dstScale the destination shift amount
29330       * @param dstDisp the destination displacement
29331       * @param imm immediate
29332       */
29333      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29334      public final void emitSHL_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
29335        int miStart = mi;
29336        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29337        setMachineCodes(mi++, (byte) 0x66);
29338        generateREXprefix(false, null, dstIndex, dstBase);
29339        if (imm == 1) {
29340          setMachineCodes(mi++, (byte) 0xD1);
29341          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29342        } else {
29343          setMachineCodes(mi++, (byte) 0xC1);
29344          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29345          emitImm8((byte)imm);
29346        }
29347        if (lister != null) lister.RXDI(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, imm);
29348      }
29349    
29350      /**
29351       * Generate a register--register SHL. That is,
29352       * <PRE>
29353       * logical shift left of dstReg by srcReg
29354       * </PRE>
29355       *
29356       * @param dstReg the destination register
29357       * @param srcReg must always be ECX
29358       */
29359      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29360      public final void emitSHL_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
29361        int miStart = mi;
29362        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29363        setMachineCodes(mi++, (byte) 0x66);
29364        generateREXprefix(false, null, null, dstReg);
29365        setMachineCodes(mi++, (byte) 0xD3);
29366        emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
29367        if (lister != null) lister.RR(miStart, "SHL", dstReg, srcReg);
29368      }
29369    
29370      /**
29371       * Generate a register-indirect--register SHL. That is,
29372       * <PRE>
29373       * logical shift left of [dstBase] by srcReg
29374       * </PRE>
29375       *
29376       * @param dstBase the destination register
29377       * @param srcReg must always be ECX
29378       */
29379      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29380      public final void emitSHL_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
29381        int miStart = mi;
29382        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29383        setMachineCodes(mi++, (byte) 0x66);
29384        generateREXprefix(false, null, null, dstBase);
29385        setMachineCodes(mi++, (byte) 0xD3);
29386        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
29387        if (lister != null) lister.RNR(miStart, "SHL", dstBase, srcReg);
29388      }
29389    
29390      /**
29391       * Generate a register-displacement--register SHL. That is,
29392       * <PRE>
29393       * logical shift left of [dstBase + dstDisp] by srcReg
29394       * </PRE>
29395       *
29396       * @param dstBase the destination base register
29397       * @param dstDisp the destination displacement
29398       * @param srcReg must always be ECX
29399       */
29400      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
29401      public final void emitSHL_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
29402        int miStart = mi;
29403        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29404        setMachineCodes(mi++, (byte) 0x66);
29405        generateREXprefix(false, null, null, dstBase);
29406        setMachineCodes(mi++, (byte) 0xD3);
29407        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
29408        if (lister != null) lister.RDR(miStart, "SHL", dstBase, dstDisp, srcReg);
29409      }
29410    
29411      /**
29412       * Generate a register-offset--register SHL. That is,
29413       * <PRE>
29414       * logical shift left of [dstIndex<<dstScale + dstDisp] by srcReg
29415       * </PRE>
29416       *
29417       * @param dstIndex the destination index register
29418       * @param dstScale the destination shift amount
29419       * @param dstDisp the destination displacement
29420       * @param srcReg must always be ECX
29421       */
29422      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
29423      public final void emitSHL_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
29424        int miStart = mi;
29425        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29426        setMachineCodes(mi++, (byte) 0x66);
29427        generateREXprefix(false, null, dstIndex, null);
29428        setMachineCodes(mi++, (byte) 0xD3);
29429        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29430        if (lister != null) lister.RFDR(miStart, "SHL", dstIndex, dstScale, dstDisp, srcReg);
29431      }
29432    
29433      /**
29434       * Generate an absolute--register SHL. That is,
29435       * <PRE>
29436       * logical shift left of [dstDisp] by srcReg
29437       * </PRE>
29438       *
29439       * @param dstDisp the destination displacement
29440       * @param srcReg must always be ECX
29441       */
29442      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
29443      public final void emitSHL_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
29444        int miStart = mi;
29445        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29446        setMachineCodes(mi++, (byte) 0x66);
29447        generateREXprefix(false, null, null, null);
29448        setMachineCodes(mi++, (byte) 0xD3);
29449        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29450        if (lister != null) lister.RAR(miStart, "SHL", dstDisp, srcReg);
29451      }
29452    
29453      /**
29454       * Generate a register-displacement--register SHL. That is,
29455       * <PRE>
29456       * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
29457       * </PRE>
29458       *
29459       * @param dstBase the destination base register
29460       * @param dstIndex the destination index register
29461       * @param dstScale the destination shift amount
29462       * @param dstDisp the destination displacement
29463       * @param srcReg must always be ECX
29464       */
29465      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
29466      public final void emitSHL_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
29467        int miStart = mi;
29468        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29469        setMachineCodes(mi++, (byte) 0x66);
29470        generateREXprefix(false, null, dstIndex, dstBase);
29471        setMachineCodes(mi++, (byte) 0xD3);
29472        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29473        if (lister != null) lister.RXDR(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
29474      }
29475    
29476      /**
29477       * Generate a register--immediate SHL. That is,
29478       * <PRE>
29479       * logical shift left of dstReg by imm
29480       * </PRE>
29481       *
29482       * @param dstReg the destination register
29483       * @param imm immediate
29484       */
29485      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29486      public final void emitSHL_Reg_Imm(GPR dstReg, int imm) {
29487        int miStart = mi;
29488        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29489        // no size prefix
29490        generateREXprefix(false, null, null, dstReg);
29491        if (imm == 1) {
29492          setMachineCodes(mi++, (byte) 0xD1);
29493          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
29494        } else {
29495          setMachineCodes(mi++, (byte) 0xC1);
29496          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
29497          emitImm8((byte)imm);
29498        }
29499        if (lister != null) lister.RI(miStart, "SHL", dstReg, imm);
29500      }
29501    
29502      /**
29503       * Generate a register-indirect--immediate SHL. That is,
29504       * <PRE>
29505       * logical shift left of [dstBase] by imm
29506       * </PRE>
29507       *
29508       * @param dstBase the destination base register
29509       * @param imm immediate
29510       */
29511      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29512      public final void emitSHL_RegInd_Imm(GPR dstBase, int imm) {
29513        int miStart = mi;
29514        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29515        // no size prefix
29516        generateREXprefix(false, null, null, dstBase);
29517        if (imm == 1) {
29518          setMachineCodes(mi++, (byte) 0xD1);
29519          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
29520        } else {
29521          setMachineCodes(mi++, (byte) 0xC1);
29522          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
29523          emitImm8((byte)imm);
29524        }
29525        if (lister != null) lister.RNI(miStart, "SHL", dstBase, imm);
29526      }
29527    
29528      /**
29529       * Generate a register-displacement--immediate SHL. That is,
29530       * <PRE>
29531       * logical shift left of [dstBase + dstDisp] by imm
29532       * </PRE>
29533       *
29534       * @param dstBase the destination base register
29535       * @param dstDisp the destination displacement
29536       * @param imm immediate
29537       */
29538      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29539      public final void emitSHL_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
29540        int miStart = mi;
29541        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29542        // no size prefix
29543        generateREXprefix(false, null, null, dstBase);
29544        if (imm == 1) {
29545          setMachineCodes(mi++, (byte) 0xD1);
29546          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
29547        } else {
29548          setMachineCodes(mi++, (byte) 0xC1);
29549          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
29550          emitImm8((byte)imm);
29551        }
29552        if (lister != null) lister.RDI(miStart, "SHL", dstBase, dstDisp, imm);
29553      }
29554    
29555      /**
29556       * Generate a register-offset--immediate SHL. That is,
29557       * <PRE>
29558       * logical shift left of [dstIndex<<dstScale + dstDisp] by imm
29559       * </PRE>
29560       *
29561       * @param dstIndex the destination index register
29562       * @param dstScale the destination shift amount
29563       * @param dstDisp the destination displacement
29564       * @param imm immediate
29565       */
29566      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29567      public final void emitSHL_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
29568        int miStart = mi;
29569        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29570        // no size prefix
29571        generateREXprefix(false, null, dstIndex, null);
29572        if (imm == 1) {
29573          setMachineCodes(mi++, (byte) 0xD1);
29574          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29575        } else {
29576          setMachineCodes(mi++, (byte) 0xC1);
29577          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29578          emitImm8((byte)imm);
29579        }
29580        if (lister != null) lister.RFDI(miStart, "SHL", dstIndex, dstScale, dstDisp, imm);
29581      }
29582    
29583      /**
29584       * Generate a absolute--immediate SHL. That is,
29585       * <PRE>
29586       * logical shift left of [dstDisp] by imm
29587       * </PRE>
29588       *
29589       * @param dstDisp the destination displacement
29590       * @param imm immediate
29591       */
29592      public final void emitSHL_Abs_Imm(Address dstDisp, int imm) {
29593        int miStart = mi;
29594        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29595        // no size prefix
29596        generateREXprefix(false, null, null, null);
29597        if (imm == 1) {
29598          setMachineCodes(mi++, (byte) 0xD1);
29599          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29600        } else {
29601          setMachineCodes(mi++, (byte) 0xC1);
29602          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29603          emitImm8((byte)imm);
29604        }
29605        if (lister != null) lister.RAI(miStart, "SHL", dstDisp, imm);
29606      }
29607    
29608      /**
29609       * Generate a register-index--immediate SHL. That is,
29610       * <PRE>
29611       * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
29612       * </PRE>
29613       *
29614       * @param dstBase the destination base register
29615       * @param dstIndex the destination index register
29616       * @param dstScale the destination shift amount
29617       * @param dstDisp the destination displacement
29618       * @param imm immediate
29619       */
29620      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29621      public final void emitSHL_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
29622        int miStart = mi;
29623        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29624        // no size prefix
29625        generateREXprefix(false, null, dstIndex, dstBase);
29626        if (imm == 1) {
29627          setMachineCodes(mi++, (byte) 0xD1);
29628          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29629        } else {
29630          setMachineCodes(mi++, (byte) 0xC1);
29631          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29632          emitImm8((byte)imm);
29633        }
29634        if (lister != null) lister.RXDI(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, imm);
29635      }
29636    
29637      /**
29638       * Generate a register--register SHL. That is,
29639       * <PRE>
29640       * logical shift left of dstReg by srcReg
29641       * </PRE>
29642       *
29643       * @param dstReg the destination register
29644       * @param srcReg must always be ECX
29645       */
29646      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29647      public final void emitSHL_Reg_Reg(GPR dstReg, GPR srcReg) {
29648        int miStart = mi;
29649        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29650        // no size prefix
29651        generateREXprefix(false, null, null, dstReg);
29652        setMachineCodes(mi++, (byte) 0xD3);
29653        emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
29654        if (lister != null) lister.RR(miStart, "SHL", dstReg, srcReg);
29655      }
29656    
29657      /**
29658       * Generate a register-indirect--register SHL. That is,
29659       * <PRE>
29660       * logical shift left of [dstBase] by srcReg
29661       * </PRE>
29662       *
29663       * @param dstBase the destination register
29664       * @param srcReg must always be ECX
29665       */
29666      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29667      public final void emitSHL_RegInd_Reg(GPR dstBase, GPR srcReg) {
29668        int miStart = mi;
29669        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29670        // no size prefix
29671        generateREXprefix(false, null, null, dstBase);
29672        setMachineCodes(mi++, (byte) 0xD3);
29673        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
29674        if (lister != null) lister.RNR(miStart, "SHL", dstBase, srcReg);
29675      }
29676    
29677      /**
29678       * Generate a register-displacement--register SHL. That is,
29679       * <PRE>
29680       * logical shift left of [dstBase + dstDisp] by srcReg
29681       * </PRE>
29682       *
29683       * @param dstBase the destination base register
29684       * @param dstDisp the destination displacement
29685       * @param srcReg must always be ECX
29686       */
29687      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
29688      public final void emitSHL_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
29689        int miStart = mi;
29690        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29691        // no size prefix
29692        generateREXprefix(false, null, null, dstBase);
29693        setMachineCodes(mi++, (byte) 0xD3);
29694        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
29695        if (lister != null) lister.RDR(miStart, "SHL", dstBase, dstDisp, srcReg);
29696      }
29697    
29698      /**
29699       * Generate a register-offset--register SHL. That is,
29700       * <PRE>
29701       * logical shift left of [dstIndex<<dstScale + dstDisp] by srcReg
29702       * </PRE>
29703       *
29704       * @param dstIndex the destination index register
29705       * @param dstScale the destination shift amount
29706       * @param dstDisp the destination displacement
29707       * @param srcReg must always be ECX
29708       */
29709      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
29710      public final void emitSHL_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
29711        int miStart = mi;
29712        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29713        // no size prefix
29714        generateREXprefix(false, null, dstIndex, null);
29715        setMachineCodes(mi++, (byte) 0xD3);
29716        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29717        if (lister != null) lister.RFDR(miStart, "SHL", dstIndex, dstScale, dstDisp, srcReg);
29718      }
29719    
29720      /**
29721       * Generate an absolute--register SHL. That is,
29722       * <PRE>
29723       * logical shift left of [dstDisp] by srcReg
29724       * </PRE>
29725       *
29726       * @param dstDisp the destination displacement
29727       * @param srcReg must always be ECX
29728       */
29729      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
29730      public final void emitSHL_Abs_Reg(Address dstDisp, GPR srcReg) {
29731        int miStart = mi;
29732        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29733        // no size prefix
29734        generateREXprefix(false, null, null, null);
29735        setMachineCodes(mi++, (byte) 0xD3);
29736        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29737        if (lister != null) lister.RAR(miStart, "SHL", dstDisp, srcReg);
29738      }
29739    
29740      /**
29741       * Generate a register-displacement--register SHL. That is,
29742       * <PRE>
29743       * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
29744       * </PRE>
29745       *
29746       * @param dstBase the destination base register
29747       * @param dstIndex the destination index register
29748       * @param dstScale the destination shift amount
29749       * @param dstDisp the destination displacement
29750       * @param srcReg must always be ECX
29751       */
29752      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
29753      public final void emitSHL_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
29754        int miStart = mi;
29755        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29756        // no size prefix
29757        generateREXprefix(false, null, dstIndex, dstBase);
29758        setMachineCodes(mi++, (byte) 0xD3);
29759        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29760        if (lister != null) lister.RXDR(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
29761      }
29762    
29763      /**
29764       * Generate a register--immediate SHL. That is,
29765       * <PRE>
29766       * logical shift left of dstReg by imm
29767       * </PRE>
29768       *
29769       * @param dstReg the destination register
29770       * @param imm immediate
29771       */
29772      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29773      public final void emitSHL_Reg_Imm_Quad(GPR dstReg, int imm) {
29774        int miStart = mi;
29775        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29776        // no size prefix
29777        generateREXprefix(true, null, null, dstReg);
29778        if (imm == 1) {
29779          setMachineCodes(mi++, (byte) 0xD1);
29780          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
29781        } else {
29782          setMachineCodes(mi++, (byte) 0xC1);
29783          emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
29784          emitImm8((byte)imm);
29785        }
29786        if (lister != null) lister.RI(miStart, "SHL", dstReg, imm);
29787      }
29788    
29789      /**
29790       * Generate a register-indirect--immediate SHL. That is,
29791       * <PRE>
29792       * logical shift left of [dstBase] by imm
29793       * </PRE>
29794       *
29795       * @param dstBase the destination base register
29796       * @param imm immediate
29797       */
29798      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29799      public final void emitSHL_RegInd_Imm_Quad(GPR dstBase, int imm) {
29800        int miStart = mi;
29801        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29802        // no size prefix
29803        generateREXprefix(true, null, null, dstBase);
29804        if (imm == 1) {
29805          setMachineCodes(mi++, (byte) 0xD1);
29806          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
29807        } else {
29808          setMachineCodes(mi++, (byte) 0xC1);
29809          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
29810          emitImm8((byte)imm);
29811        }
29812        if (lister != null) lister.RNI(miStart, "SHL", dstBase, imm);
29813      }
29814    
29815      /**
29816       * Generate a register-displacement--immediate SHL. That is,
29817       * <PRE>
29818       * logical shift left of [dstBase + dstDisp] by imm
29819       * </PRE>
29820       *
29821       * @param dstBase the destination base register
29822       * @param dstDisp the destination displacement
29823       * @param imm immediate
29824       */
29825      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29826      public final void emitSHL_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
29827        int miStart = mi;
29828        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29829        // no size prefix
29830        generateREXprefix(true, null, null, dstBase);
29831        if (imm == 1) {
29832          setMachineCodes(mi++, (byte) 0xD1);
29833          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
29834        } else {
29835          setMachineCodes(mi++, (byte) 0xC1);
29836          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
29837          emitImm8((byte)imm);
29838        }
29839        if (lister != null) lister.RDI(miStart, "SHL", dstBase, dstDisp, imm);
29840      }
29841    
29842      /**
29843       * Generate a register-offset--immediate SHL. That is,
29844       * <PRE>
29845       * logical shift left of [dstIndex<<dstScale + dstDisp] by imm
29846       * </PRE>
29847       *
29848       * @param dstIndex the destination index register
29849       * @param dstScale the destination shift amount
29850       * @param dstDisp the destination displacement
29851       * @param imm immediate
29852       */
29853      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
29854      public final void emitSHL_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
29855        int miStart = mi;
29856        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29857        // no size prefix
29858        generateREXprefix(true, null, dstIndex, null);
29859        if (imm == 1) {
29860          setMachineCodes(mi++, (byte) 0xD1);
29861          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29862        } else {
29863          setMachineCodes(mi++, (byte) 0xC1);
29864          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29865          emitImm8((byte)imm);
29866        }
29867        if (lister != null) lister.RFDI(miStart, "SHL", dstIndex, dstScale, dstDisp, imm);
29868      }
29869    
29870      /**
29871       * Generate a absolute--immediate SHL. That is,
29872       * <PRE>
29873       * logical shift left of [dstDisp] by imm
29874       * </PRE>
29875       *
29876       * @param dstDisp the destination displacement
29877       * @param imm immediate
29878       */
29879      public final void emitSHL_Abs_Imm_Quad(Address dstDisp, int imm) {
29880        int miStart = mi;
29881        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29882        // no size prefix
29883        generateREXprefix(true, null, null, null);
29884        if (imm == 1) {
29885          setMachineCodes(mi++, (byte) 0xD1);
29886          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29887        } else {
29888          setMachineCodes(mi++, (byte) 0xC1);
29889          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
29890          emitImm8((byte)imm);
29891        }
29892        if (lister != null) lister.RAI(miStart, "SHL", dstDisp, imm);
29893      }
29894    
29895      /**
29896       * Generate a register-index--immediate SHL. That is,
29897       * <PRE>
29898       * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by imm
29899       * </PRE>
29900       *
29901       * @param dstBase the destination base register
29902       * @param dstIndex the destination index register
29903       * @param dstScale the destination shift amount
29904       * @param dstDisp the destination displacement
29905       * @param imm immediate
29906       */
29907      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29908      public final void emitSHL_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
29909        int miStart = mi;
29910        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
29911        // no size prefix
29912        generateREXprefix(true, null, dstIndex, dstBase);
29913        if (imm == 1) {
29914          setMachineCodes(mi++, (byte) 0xD1);
29915          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29916        } else {
29917          setMachineCodes(mi++, (byte) 0xC1);
29918          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
29919          emitImm8((byte)imm);
29920        }
29921        if (lister != null) lister.RXDI(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, imm);
29922      }
29923    
29924      /**
29925       * Generate a register--register SHL. That is,
29926       * <PRE>
29927       * logical shift left of dstReg by srcReg
29928       * </PRE>
29929       *
29930       * @param dstReg the destination register
29931       * @param srcReg must always be ECX
29932       */
29933      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29934      public final void emitSHL_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
29935        int miStart = mi;
29936        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29937        // no size prefix
29938        generateREXprefix(true, null, null, dstReg);
29939        setMachineCodes(mi++, (byte) 0xD3);
29940        emitRegRegOperands(dstReg, GPR.getForOpcode(0x4));
29941        if (lister != null) lister.RR(miStart, "SHL", dstReg, srcReg);
29942      }
29943    
29944      /**
29945       * Generate a register-indirect--register SHL. That is,
29946       * <PRE>
29947       * logical shift left of [dstBase] by srcReg
29948       * </PRE>
29949       *
29950       * @param dstBase the destination register
29951       * @param srcReg must always be ECX
29952       */
29953      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
29954      public final void emitSHL_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
29955        int miStart = mi;
29956        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29957        // no size prefix
29958        generateREXprefix(true, null, null, dstBase);
29959        setMachineCodes(mi++, (byte) 0xD3);
29960        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x4));
29961        if (lister != null) lister.RNR(miStart, "SHL", dstBase, srcReg);
29962      }
29963    
29964      /**
29965       * Generate a register-displacement--register SHL. That is,
29966       * <PRE>
29967       * logical shift left of [dstBase + dstDisp] by srcReg
29968       * </PRE>
29969       *
29970       * @param dstBase the destination base register
29971       * @param dstDisp the destination displacement
29972       * @param srcReg must always be ECX
29973       */
29974      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
29975      public final void emitSHL_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
29976        int miStart = mi;
29977        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
29978        // no size prefix
29979        generateREXprefix(true, null, null, dstBase);
29980        setMachineCodes(mi++, (byte) 0xD3);
29981        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x4));
29982        if (lister != null) lister.RDR(miStart, "SHL", dstBase, dstDisp, srcReg);
29983      }
29984    
29985      /**
29986       * Generate a register-offset--register SHL. That is,
29987       * <PRE>
29988       * logical shift left of [dstIndex<<dstScale + dstDisp] by srcReg
29989       * </PRE>
29990       *
29991       * @param dstIndex the destination index register
29992       * @param dstScale the destination shift amount
29993       * @param dstDisp the destination displacement
29994       * @param srcReg must always be ECX
29995       */
29996      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
29997      public final void emitSHL_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
29998        int miStart = mi;
29999        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30000        // no size prefix
30001        generateREXprefix(true, null, dstIndex, null);
30002        setMachineCodes(mi++, (byte) 0xD3);
30003        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
30004        if (lister != null) lister.RFDR(miStart, "SHL", dstIndex, dstScale, dstDisp, srcReg);
30005      }
30006    
30007      /**
30008       * Generate an absolute--register SHL. That is,
30009       * <PRE>
30010       * logical shift left of [dstDisp] by srcReg
30011       * </PRE>
30012       *
30013       * @param dstDisp the destination displacement
30014       * @param srcReg must always be ECX
30015       */
30016      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
30017      public final void emitSHL_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
30018        int miStart = mi;
30019        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30020        // no size prefix
30021        generateREXprefix(true, null, null, null);
30022        setMachineCodes(mi++, (byte) 0xD3);
30023        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x4));
30024        if (lister != null) lister.RAR(miStart, "SHL", dstDisp, srcReg);
30025      }
30026    
30027      /**
30028       * Generate a register-displacement--register SHL. That is,
30029       * <PRE>
30030       * logical shift left of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
30031       * </PRE>
30032       *
30033       * @param dstBase the destination base register
30034       * @param dstIndex the destination index register
30035       * @param dstScale the destination shift amount
30036       * @param dstDisp the destination displacement
30037       * @param srcReg must always be ECX
30038       */
30039      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
30040      public final void emitSHL_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
30041        int miStart = mi;
30042        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30043        // no size prefix
30044        generateREXprefix(true, null, dstIndex, dstBase);
30045        setMachineCodes(mi++, (byte) 0xD3);
30046        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x4));
30047        if (lister != null) lister.RXDR(miStart, "SHL", dstBase, dstIndex, dstScale, dstDisp, srcReg);
30048      }
30049    
30050      /**
30051       * Generate a register--immediate SHR. That is,
30052       * <PRE>
30053       * logical shift right of dstReg by imm
30054       * </PRE>
30055       *
30056       * @param dstReg the destination register
30057       * @param imm immediate
30058       */
30059      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30060      public final void emitSHR_Reg_Imm_Byte(GPR dstReg, int imm) {
30061        int miStart = mi;
30062        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30063        // no size prefix
30064        generateREXprefix(false, null, null, dstReg);
30065        if (imm == 1) {
30066          setMachineCodes(mi++, (byte) 0xD0);
30067          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30068        } else {
30069          setMachineCodes(mi++, (byte) 0xC0);
30070          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30071          emitImm8((byte)imm);
30072        }
30073        if (lister != null) lister.RI(miStart, "SHR", dstReg, imm);
30074      }
30075    
30076      /**
30077       * Generate a register-indirect--immediate SHR. That is,
30078       * <PRE>
30079       * logical shift right of [dstBase] by imm
30080       * </PRE>
30081       *
30082       * @param dstBase the destination base register
30083       * @param imm immediate
30084       */
30085      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30086      public final void emitSHR_RegInd_Imm_Byte(GPR dstBase, int imm) {
30087        int miStart = mi;
30088        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30089        // no size prefix
30090        generateREXprefix(false, null, null, dstBase);
30091        if (imm == 1) {
30092          setMachineCodes(mi++, (byte) 0xD0);
30093          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30094        } else {
30095          setMachineCodes(mi++, (byte) 0xC0);
30096          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30097          emitImm8((byte)imm);
30098        }
30099        if (lister != null) lister.RNI(miStart, "SHR", dstBase, imm);
30100      }
30101    
30102      /**
30103       * Generate a register-displacement--immediate SHR. That is,
30104       * <PRE>
30105       * logical shift right of [dstBase + dstDisp] by imm
30106       * </PRE>
30107       *
30108       * @param dstBase the destination base register
30109       * @param dstDisp the destination displacement
30110       * @param imm immediate
30111       */
30112      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30113      public final void emitSHR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
30114        int miStart = mi;
30115        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30116        // no size prefix
30117        generateREXprefix(false, null, null, dstBase);
30118        if (imm == 1) {
30119          setMachineCodes(mi++, (byte) 0xD0);
30120          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30121        } else {
30122          setMachineCodes(mi++, (byte) 0xC0);
30123          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30124          emitImm8((byte)imm);
30125        }
30126        if (lister != null) lister.RDI(miStart, "SHR", dstBase, dstDisp, imm);
30127      }
30128    
30129      /**
30130       * Generate a register-offset--immediate SHR. That is,
30131       * <PRE>
30132       * logical shift right of [dstIndex<<dstScale + dstDisp] by imm
30133       * </PRE>
30134       *
30135       * @param dstIndex the destination index register
30136       * @param dstScale the destination shift amount
30137       * @param dstDisp the destination displacement
30138       * @param imm immediate
30139       */
30140      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30141      public final void emitSHR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
30142        int miStart = mi;
30143        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30144        // no size prefix
30145        generateREXprefix(false, null, dstIndex, null);
30146        if (imm == 1) {
30147          setMachineCodes(mi++, (byte) 0xD0);
30148          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30149        } else {
30150          setMachineCodes(mi++, (byte) 0xC0);
30151          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30152          emitImm8((byte)imm);
30153        }
30154        if (lister != null) lister.RFDI(miStart, "SHR", dstIndex, dstScale, dstDisp, imm);
30155      }
30156    
30157      /**
30158       * Generate a absolute--immediate SHR. That is,
30159       * <PRE>
30160       * logical shift right of [dstDisp] by imm
30161       * </PRE>
30162       *
30163       * @param dstDisp the destination displacement
30164       * @param imm immediate
30165       */
30166      public final void emitSHR_Abs_Imm_Byte(Address dstDisp, int imm) {
30167        int miStart = mi;
30168        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30169        // no size prefix
30170        generateREXprefix(false, null, null, null);
30171        if (imm == 1) {
30172          setMachineCodes(mi++, (byte) 0xD0);
30173          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
30174        } else {
30175          setMachineCodes(mi++, (byte) 0xC0);
30176          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
30177          emitImm8((byte)imm);
30178        }
30179        if (lister != null) lister.RAI(miStart, "SHR", dstDisp, imm);
30180      }
30181    
30182      /**
30183       * Generate a register-index--immediate SHR. That is,
30184       * <PRE>
30185       * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
30186       * </PRE>
30187       *
30188       * @param dstBase the destination base register
30189       * @param dstIndex the destination index register
30190       * @param dstScale the destination shift amount
30191       * @param dstDisp the destination displacement
30192       * @param imm immediate
30193       */
30194      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
30195      public final void emitSHR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
30196        int miStart = mi;
30197        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30198        // no size prefix
30199        generateREXprefix(false, null, dstIndex, dstBase);
30200        if (imm == 1) {
30201          setMachineCodes(mi++, (byte) 0xD0);
30202          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30203        } else {
30204          setMachineCodes(mi++, (byte) 0xC0);
30205          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30206          emitImm8((byte)imm);
30207        }
30208        if (lister != null) lister.RXDI(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, imm);
30209      }
30210    
30211      /**
30212       * Generate a register--register SHR. That is,
30213       * <PRE>
30214       * logical shift right of dstReg by srcReg
30215       * </PRE>
30216       *
30217       * @param dstReg the destination register
30218       * @param srcReg must always be ECX
30219       */
30220      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
30221      public final void emitSHR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
30222        int miStart = mi;
30223        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30224        // no size prefix
30225        generateREXprefix(false, null, null, dstReg);
30226        setMachineCodes(mi++, (byte) 0xD2);
30227        emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30228        if (lister != null) lister.RR(miStart, "SHR", dstReg, srcReg);
30229      }
30230    
30231      /**
30232       * Generate a register-indirect--register SHR. That is,
30233       * <PRE>
30234       * logical shift right of [dstBase] by srcReg
30235       * </PRE>
30236       *
30237       * @param dstBase the destination register
30238       * @param srcReg must always be ECX
30239       */
30240      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
30241      public final void emitSHR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
30242        int miStart = mi;
30243        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30244        // no size prefix
30245        generateREXprefix(false, null, null, dstBase);
30246        setMachineCodes(mi++, (byte) 0xD2);
30247        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30248        if (lister != null) lister.RNR(miStart, "SHR", dstBase, srcReg);
30249      }
30250    
30251      /**
30252       * Generate a register-displacement--register SHR. That is,
30253       * <PRE>
30254       * logical shift right of [dstBase + dstDisp] by srcReg
30255       * </PRE>
30256       *
30257       * @param dstBase the destination base register
30258       * @param dstDisp the destination displacement
30259       * @param srcReg must always be ECX
30260       */
30261      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
30262      public final void emitSHR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
30263        int miStart = mi;
30264        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30265        // no size prefix
30266        generateREXprefix(false, null, null, dstBase);
30267        setMachineCodes(mi++, (byte) 0xD2);
30268        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30269        if (lister != null) lister.RDR(miStart, "SHR", dstBase, dstDisp, srcReg);
30270      }
30271    
30272      /**
30273       * Generate a register-offset--register SHR. That is,
30274       * <PRE>
30275       * logical shift right of [dstIndex<<dstScale + dstDisp] by srcReg
30276       * </PRE>
30277       *
30278       * @param dstIndex the destination index register
30279       * @param dstScale the destination shift amount
30280       * @param dstDisp the destination displacement
30281       * @param srcReg must always be ECX
30282       */
30283      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
30284      public final void emitSHR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
30285        int miStart = mi;
30286        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30287        // no size prefix
30288        generateREXprefix(false, null, dstIndex, null);
30289        setMachineCodes(mi++, (byte) 0xD2);
30290        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30291        if (lister != null) lister.RFDR(miStart, "SHR", dstIndex, dstScale, dstDisp, srcReg);
30292      }
30293    
30294      /**
30295       * Generate an absolute--register SHR. That is,
30296       * <PRE>
30297       * logical shift right of [dstDisp] by srcReg
30298       * </PRE>
30299       *
30300       * @param dstDisp the destination displacement
30301       * @param srcReg must always be ECX
30302       */
30303      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
30304      public final void emitSHR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
30305        int miStart = mi;
30306        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30307        // no size prefix
30308        generateREXprefix(false, null, null, null);
30309        setMachineCodes(mi++, (byte) 0xD2);
30310        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
30311        if (lister != null) lister.RAR(miStart, "SHR", dstDisp, srcReg);
30312      }
30313    
30314      /**
30315       * Generate a register-displacement--register SHR. That is,
30316       * <PRE>
30317       * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
30318       * </PRE>
30319       *
30320       * @param dstBase the destination base register
30321       * @param dstIndex the destination index register
30322       * @param dstScale the destination shift amount
30323       * @param dstDisp the destination displacement
30324       * @param srcReg must always be ECX
30325       */
30326      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
30327      public final void emitSHR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
30328        int miStart = mi;
30329        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30330        // no size prefix
30331        generateREXprefix(false, null, dstIndex, dstBase);
30332        setMachineCodes(mi++, (byte) 0xD2);
30333        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30334        if (lister != null) lister.RXDR(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
30335      }
30336    
30337      /**
30338       * Generate a register--immediate SHR. That is,
30339       * <PRE>
30340       * logical shift right of dstReg by imm
30341       * </PRE>
30342       *
30343       * @param dstReg the destination register
30344       * @param imm immediate
30345       */
30346      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30347      public final void emitSHR_Reg_Imm_Word(GPR dstReg, int imm) {
30348        int miStart = mi;
30349        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30350        setMachineCodes(mi++, (byte) 0x66);
30351        generateREXprefix(false, null, null, dstReg);
30352        if (imm == 1) {
30353          setMachineCodes(mi++, (byte) 0xD1);
30354          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30355        } else {
30356          setMachineCodes(mi++, (byte) 0xC1);
30357          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30358          emitImm8((byte)imm);
30359        }
30360        if (lister != null) lister.RI(miStart, "SHR", dstReg, imm);
30361      }
30362    
30363      /**
30364       * Generate a register-indirect--immediate SHR. That is,
30365       * <PRE>
30366       * logical shift right of [dstBase] by imm
30367       * </PRE>
30368       *
30369       * @param dstBase the destination base register
30370       * @param imm immediate
30371       */
30372      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30373      public final void emitSHR_RegInd_Imm_Word(GPR dstBase, int imm) {
30374        int miStart = mi;
30375        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30376        setMachineCodes(mi++, (byte) 0x66);
30377        generateREXprefix(false, null, null, dstBase);
30378        if (imm == 1) {
30379          setMachineCodes(mi++, (byte) 0xD1);
30380          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30381        } else {
30382          setMachineCodes(mi++, (byte) 0xC1);
30383          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30384          emitImm8((byte)imm);
30385        }
30386        if (lister != null) lister.RNI(miStart, "SHR", dstBase, imm);
30387      }
30388    
30389      /**
30390       * Generate a register-displacement--immediate SHR. That is,
30391       * <PRE>
30392       * logical shift right of [dstBase + dstDisp] by imm
30393       * </PRE>
30394       *
30395       * @param dstBase the destination base register
30396       * @param dstDisp the destination displacement
30397       * @param imm immediate
30398       */
30399      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30400      public final void emitSHR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
30401        int miStart = mi;
30402        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30403        setMachineCodes(mi++, (byte) 0x66);
30404        generateREXprefix(false, null, null, dstBase);
30405        if (imm == 1) {
30406          setMachineCodes(mi++, (byte) 0xD1);
30407          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30408        } else {
30409          setMachineCodes(mi++, (byte) 0xC1);
30410          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30411          emitImm8((byte)imm);
30412        }
30413        if (lister != null) lister.RDI(miStart, "SHR", dstBase, dstDisp, imm);
30414      }
30415    
30416      /**
30417       * Generate a register-offset--immediate SHR. That is,
30418       * <PRE>
30419       * logical shift right of [dstIndex<<dstScale + dstDisp] by imm
30420       * </PRE>
30421       *
30422       * @param dstIndex the destination index register
30423       * @param dstScale the destination shift amount
30424       * @param dstDisp the destination displacement
30425       * @param imm immediate
30426       */
30427      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30428      public final void emitSHR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
30429        int miStart = mi;
30430        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30431        setMachineCodes(mi++, (byte) 0x66);
30432        generateREXprefix(false, null, dstIndex, null);
30433        if (imm == 1) {
30434          setMachineCodes(mi++, (byte) 0xD1);
30435          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30436        } else {
30437          setMachineCodes(mi++, (byte) 0xC1);
30438          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30439          emitImm8((byte)imm);
30440        }
30441        if (lister != null) lister.RFDI(miStart, "SHR", dstIndex, dstScale, dstDisp, imm);
30442      }
30443    
30444      /**
30445       * Generate a absolute--immediate SHR. That is,
30446       * <PRE>
30447       * logical shift right of [dstDisp] by imm
30448       * </PRE>
30449       *
30450       * @param dstDisp the destination displacement
30451       * @param imm immediate
30452       */
30453      public final void emitSHR_Abs_Imm_Word(Address dstDisp, int imm) {
30454        int miStart = mi;
30455        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30456        setMachineCodes(mi++, (byte) 0x66);
30457        generateREXprefix(false, null, null, null);
30458        if (imm == 1) {
30459          setMachineCodes(mi++, (byte) 0xD1);
30460          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
30461        } else {
30462          setMachineCodes(mi++, (byte) 0xC1);
30463          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
30464          emitImm8((byte)imm);
30465        }
30466        if (lister != null) lister.RAI(miStart, "SHR", dstDisp, imm);
30467      }
30468    
30469      /**
30470       * Generate a register-index--immediate SHR. That is,
30471       * <PRE>
30472       * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
30473       * </PRE>
30474       *
30475       * @param dstBase the destination base register
30476       * @param dstIndex the destination index register
30477       * @param dstScale the destination shift amount
30478       * @param dstDisp the destination displacement
30479       * @param imm immediate
30480       */
30481      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
30482      public final void emitSHR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
30483        int miStart = mi;
30484        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30485        setMachineCodes(mi++, (byte) 0x66);
30486        generateREXprefix(false, null, dstIndex, dstBase);
30487        if (imm == 1) {
30488          setMachineCodes(mi++, (byte) 0xD1);
30489          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30490        } else {
30491          setMachineCodes(mi++, (byte) 0xC1);
30492          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30493          emitImm8((byte)imm);
30494        }
30495        if (lister != null) lister.RXDI(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, imm);
30496      }
30497    
30498      /**
30499       * Generate a register--register SHR. That is,
30500       * <PRE>
30501       * logical shift right of dstReg by srcReg
30502       * </PRE>
30503       *
30504       * @param dstReg the destination register
30505       * @param srcReg must always be ECX
30506       */
30507      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
30508      public final void emitSHR_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
30509        int miStart = mi;
30510        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30511        setMachineCodes(mi++, (byte) 0x66);
30512        generateREXprefix(false, null, null, dstReg);
30513        setMachineCodes(mi++, (byte) 0xD3);
30514        emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30515        if (lister != null) lister.RR(miStart, "SHR", dstReg, srcReg);
30516      }
30517    
30518      /**
30519       * Generate a register-indirect--register SHR. That is,
30520       * <PRE>
30521       * logical shift right of [dstBase] by srcReg
30522       * </PRE>
30523       *
30524       * @param dstBase the destination register
30525       * @param srcReg must always be ECX
30526       */
30527      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
30528      public final void emitSHR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
30529        int miStart = mi;
30530        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30531        setMachineCodes(mi++, (byte) 0x66);
30532        generateREXprefix(false, null, null, dstBase);
30533        setMachineCodes(mi++, (byte) 0xD3);
30534        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30535        if (lister != null) lister.RNR(miStart, "SHR", dstBase, srcReg);
30536      }
30537    
30538      /**
30539       * Generate a register-displacement--register SHR. That is,
30540       * <PRE>
30541       * logical shift right of [dstBase + dstDisp] by srcReg
30542       * </PRE>
30543       *
30544       * @param dstBase the destination base register
30545       * @param dstDisp the destination displacement
30546       * @param srcReg must always be ECX
30547       */
30548      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
30549      public final void emitSHR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
30550        int miStart = mi;
30551        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30552        setMachineCodes(mi++, (byte) 0x66);
30553        generateREXprefix(false, null, null, dstBase);
30554        setMachineCodes(mi++, (byte) 0xD3);
30555        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30556        if (lister != null) lister.RDR(miStart, "SHR", dstBase, dstDisp, srcReg);
30557      }
30558    
30559      /**
30560       * Generate a register-offset--register SHR. That is,
30561       * <PRE>
30562       * logical shift right of [dstIndex<<dstScale + dstDisp] by srcReg
30563       * </PRE>
30564       *
30565       * @param dstIndex the destination index register
30566       * @param dstScale the destination shift amount
30567       * @param dstDisp the destination displacement
30568       * @param srcReg must always be ECX
30569       */
30570      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
30571      public final void emitSHR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
30572        int miStart = mi;
30573        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30574        setMachineCodes(mi++, (byte) 0x66);
30575        generateREXprefix(false, null, dstIndex, null);
30576        setMachineCodes(mi++, (byte) 0xD3);
30577        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30578        if (lister != null) lister.RFDR(miStart, "SHR", dstIndex, dstScale, dstDisp, srcReg);
30579      }
30580    
30581      /**
30582       * Generate an absolute--register SHR. That is,
30583       * <PRE>
30584       * logical shift right of [dstDisp] by srcReg
30585       * </PRE>
30586       *
30587       * @param dstDisp the destination displacement
30588       * @param srcReg must always be ECX
30589       */
30590      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
30591      public final void emitSHR_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
30592        int miStart = mi;
30593        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30594        setMachineCodes(mi++, (byte) 0x66);
30595        generateREXprefix(false, null, null, null);
30596        setMachineCodes(mi++, (byte) 0xD3);
30597        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
30598        if (lister != null) lister.RAR(miStart, "SHR", dstDisp, srcReg);
30599      }
30600    
30601      /**
30602       * Generate a register-displacement--register SHR. That is,
30603       * <PRE>
30604       * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
30605       * </PRE>
30606       *
30607       * @param dstBase the destination base register
30608       * @param dstIndex the destination index register
30609       * @param dstScale the destination shift amount
30610       * @param dstDisp the destination displacement
30611       * @param srcReg must always be ECX
30612       */
30613      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
30614      public final void emitSHR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
30615        int miStart = mi;
30616        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30617        setMachineCodes(mi++, (byte) 0x66);
30618        generateREXprefix(false, null, dstIndex, dstBase);
30619        setMachineCodes(mi++, (byte) 0xD3);
30620        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30621        if (lister != null) lister.RXDR(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
30622      }
30623    
30624      /**
30625       * Generate a register--immediate SHR. That is,
30626       * <PRE>
30627       * logical shift right of dstReg by imm
30628       * </PRE>
30629       *
30630       * @param dstReg the destination register
30631       * @param imm immediate
30632       */
30633      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30634      public final void emitSHR_Reg_Imm(GPR dstReg, int imm) {
30635        int miStart = mi;
30636        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30637        // no size prefix
30638        generateREXprefix(false, null, null, dstReg);
30639        if (imm == 1) {
30640          setMachineCodes(mi++, (byte) 0xD1);
30641          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30642        } else {
30643          setMachineCodes(mi++, (byte) 0xC1);
30644          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30645          emitImm8((byte)imm);
30646        }
30647        if (lister != null) lister.RI(miStart, "SHR", dstReg, imm);
30648      }
30649    
30650      /**
30651       * Generate a register-indirect--immediate SHR. That is,
30652       * <PRE>
30653       * logical shift right of [dstBase] by imm
30654       * </PRE>
30655       *
30656       * @param dstBase the destination base register
30657       * @param imm immediate
30658       */
30659      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30660      public final void emitSHR_RegInd_Imm(GPR dstBase, int imm) {
30661        int miStart = mi;
30662        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30663        // no size prefix
30664        generateREXprefix(false, null, null, dstBase);
30665        if (imm == 1) {
30666          setMachineCodes(mi++, (byte) 0xD1);
30667          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30668        } else {
30669          setMachineCodes(mi++, (byte) 0xC1);
30670          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30671          emitImm8((byte)imm);
30672        }
30673        if (lister != null) lister.RNI(miStart, "SHR", dstBase, imm);
30674      }
30675    
30676      /**
30677       * Generate a register-displacement--immediate SHR. That is,
30678       * <PRE>
30679       * logical shift right of [dstBase + dstDisp] by imm
30680       * </PRE>
30681       *
30682       * @param dstBase the destination base register
30683       * @param dstDisp the destination displacement
30684       * @param imm immediate
30685       */
30686      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30687      public final void emitSHR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
30688        int miStart = mi;
30689        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30690        // no size prefix
30691        generateREXprefix(false, null, null, dstBase);
30692        if (imm == 1) {
30693          setMachineCodes(mi++, (byte) 0xD1);
30694          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30695        } else {
30696          setMachineCodes(mi++, (byte) 0xC1);
30697          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30698          emitImm8((byte)imm);
30699        }
30700        if (lister != null) lister.RDI(miStart, "SHR", dstBase, dstDisp, imm);
30701      }
30702    
30703      /**
30704       * Generate a register-offset--immediate SHR. That is,
30705       * <PRE>
30706       * logical shift right of [dstIndex<<dstScale + dstDisp] by imm
30707       * </PRE>
30708       *
30709       * @param dstIndex the destination index register
30710       * @param dstScale the destination shift amount
30711       * @param dstDisp the destination displacement
30712       * @param imm immediate
30713       */
30714      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30715      public final void emitSHR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
30716        int miStart = mi;
30717        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30718        // no size prefix
30719        generateREXprefix(false, null, dstIndex, null);
30720        if (imm == 1) {
30721          setMachineCodes(mi++, (byte) 0xD1);
30722          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30723        } else {
30724          setMachineCodes(mi++, (byte) 0xC1);
30725          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30726          emitImm8((byte)imm);
30727        }
30728        if (lister != null) lister.RFDI(miStart, "SHR", dstIndex, dstScale, dstDisp, imm);
30729      }
30730    
30731      /**
30732       * Generate a absolute--immediate SHR. That is,
30733       * <PRE>
30734       * logical shift right of [dstDisp] by imm
30735       * </PRE>
30736       *
30737       * @param dstDisp the destination displacement
30738       * @param imm immediate
30739       */
30740      public final void emitSHR_Abs_Imm(Address dstDisp, int imm) {
30741        int miStart = mi;
30742        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30743        // no size prefix
30744        generateREXprefix(false, null, null, null);
30745        if (imm == 1) {
30746          setMachineCodes(mi++, (byte) 0xD1);
30747          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
30748        } else {
30749          setMachineCodes(mi++, (byte) 0xC1);
30750          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
30751          emitImm8((byte)imm);
30752        }
30753        if (lister != null) lister.RAI(miStart, "SHR", dstDisp, imm);
30754      }
30755    
30756      /**
30757       * Generate a register-index--immediate SHR. That is,
30758       * <PRE>
30759       * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
30760       * </PRE>
30761       *
30762       * @param dstBase the destination base register
30763       * @param dstIndex the destination index register
30764       * @param dstScale the destination shift amount
30765       * @param dstDisp the destination displacement
30766       * @param imm immediate
30767       */
30768      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
30769      public final void emitSHR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
30770        int miStart = mi;
30771        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30772        // no size prefix
30773        generateREXprefix(false, null, dstIndex, dstBase);
30774        if (imm == 1) {
30775          setMachineCodes(mi++, (byte) 0xD1);
30776          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30777        } else {
30778          setMachineCodes(mi++, (byte) 0xC1);
30779          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30780          emitImm8((byte)imm);
30781        }
30782        if (lister != null) lister.RXDI(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, imm);
30783      }
30784    
30785      /**
30786       * Generate a register--register SHR. That is,
30787       * <PRE>
30788       * logical shift right of dstReg by srcReg
30789       * </PRE>
30790       *
30791       * @param dstReg the destination register
30792       * @param srcReg must always be ECX
30793       */
30794      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
30795      public final void emitSHR_Reg_Reg(GPR dstReg, GPR srcReg) {
30796        int miStart = mi;
30797        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30798        // no size prefix
30799        generateREXprefix(false, null, null, dstReg);
30800        setMachineCodes(mi++, (byte) 0xD3);
30801        emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30802        if (lister != null) lister.RR(miStart, "SHR", dstReg, srcReg);
30803      }
30804    
30805      /**
30806       * Generate a register-indirect--register SHR. That is,
30807       * <PRE>
30808       * logical shift right of [dstBase] by srcReg
30809       * </PRE>
30810       *
30811       * @param dstBase the destination register
30812       * @param srcReg must always be ECX
30813       */
30814      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
30815      public final void emitSHR_RegInd_Reg(GPR dstBase, GPR srcReg) {
30816        int miStart = mi;
30817        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30818        // no size prefix
30819        generateREXprefix(false, null, null, dstBase);
30820        setMachineCodes(mi++, (byte) 0xD3);
30821        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30822        if (lister != null) lister.RNR(miStart, "SHR", dstBase, srcReg);
30823      }
30824    
30825      /**
30826       * Generate a register-displacement--register SHR. That is,
30827       * <PRE>
30828       * logical shift right of [dstBase + dstDisp] by srcReg
30829       * </PRE>
30830       *
30831       * @param dstBase the destination base register
30832       * @param dstDisp the destination displacement
30833       * @param srcReg must always be ECX
30834       */
30835      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
30836      public final void emitSHR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
30837        int miStart = mi;
30838        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30839        // no size prefix
30840        generateREXprefix(false, null, null, dstBase);
30841        setMachineCodes(mi++, (byte) 0xD3);
30842        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30843        if (lister != null) lister.RDR(miStart, "SHR", dstBase, dstDisp, srcReg);
30844      }
30845    
30846      /**
30847       * Generate a register-offset--register SHR. That is,
30848       * <PRE>
30849       * logical shift right of [dstIndex<<dstScale + dstDisp] by srcReg
30850       * </PRE>
30851       *
30852       * @param dstIndex the destination index register
30853       * @param dstScale the destination shift amount
30854       * @param dstDisp the destination displacement
30855       * @param srcReg must always be ECX
30856       */
30857      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
30858      public final void emitSHR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
30859        int miStart = mi;
30860        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30861        // no size prefix
30862        generateREXprefix(false, null, dstIndex, null);
30863        setMachineCodes(mi++, (byte) 0xD3);
30864        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30865        if (lister != null) lister.RFDR(miStart, "SHR", dstIndex, dstScale, dstDisp, srcReg);
30866      }
30867    
30868      /**
30869       * Generate an absolute--register SHR. That is,
30870       * <PRE>
30871       * logical shift right of [dstDisp] by srcReg
30872       * </PRE>
30873       *
30874       * @param dstDisp the destination displacement
30875       * @param srcReg must always be ECX
30876       */
30877      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
30878      public final void emitSHR_Abs_Reg(Address dstDisp, GPR srcReg) {
30879        int miStart = mi;
30880        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30881        // no size prefix
30882        generateREXprefix(false, null, null, null);
30883        setMachineCodes(mi++, (byte) 0xD3);
30884        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
30885        if (lister != null) lister.RAR(miStart, "SHR", dstDisp, srcReg);
30886      }
30887    
30888      /**
30889       * Generate a register-displacement--register SHR. That is,
30890       * <PRE>
30891       * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
30892       * </PRE>
30893       *
30894       * @param dstBase the destination base register
30895       * @param dstIndex the destination index register
30896       * @param dstScale the destination shift amount
30897       * @param dstDisp the destination displacement
30898       * @param srcReg must always be ECX
30899       */
30900      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
30901      public final void emitSHR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
30902        int miStart = mi;
30903        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
30904        // no size prefix
30905        generateREXprefix(false, null, dstIndex, dstBase);
30906        setMachineCodes(mi++, (byte) 0xD3);
30907        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
30908        if (lister != null) lister.RXDR(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
30909      }
30910    
30911      /**
30912       * Generate a register--immediate SHR. That is,
30913       * <PRE>
30914       * logical shift right of dstReg by imm
30915       * </PRE>
30916       *
30917       * @param dstReg the destination register
30918       * @param imm immediate
30919       */
30920      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30921      public final void emitSHR_Reg_Imm_Quad(GPR dstReg, int imm) {
30922        int miStart = mi;
30923        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30924        // no size prefix
30925        generateREXprefix(true, null, null, dstReg);
30926        if (imm == 1) {
30927          setMachineCodes(mi++, (byte) 0xD1);
30928          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30929        } else {
30930          setMachineCodes(mi++, (byte) 0xC1);
30931          emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
30932          emitImm8((byte)imm);
30933        }
30934        if (lister != null) lister.RI(miStart, "SHR", dstReg, imm);
30935      }
30936    
30937      /**
30938       * Generate a register-indirect--immediate SHR. That is,
30939       * <PRE>
30940       * logical shift right of [dstBase] by imm
30941       * </PRE>
30942       *
30943       * @param dstBase the destination base register
30944       * @param imm immediate
30945       */
30946      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30947      public final void emitSHR_RegInd_Imm_Quad(GPR dstBase, int imm) {
30948        int miStart = mi;
30949        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30950        // no size prefix
30951        generateREXprefix(true, null, null, dstBase);
30952        if (imm == 1) {
30953          setMachineCodes(mi++, (byte) 0xD1);
30954          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30955        } else {
30956          setMachineCodes(mi++, (byte) 0xC1);
30957          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
30958          emitImm8((byte)imm);
30959        }
30960        if (lister != null) lister.RNI(miStart, "SHR", dstBase, imm);
30961      }
30962    
30963      /**
30964       * Generate a register-displacement--immediate SHR. That is,
30965       * <PRE>
30966       * logical shift right of [dstBase + dstDisp] by imm
30967       * </PRE>
30968       *
30969       * @param dstBase the destination base register
30970       * @param dstDisp the destination displacement
30971       * @param imm immediate
30972       */
30973      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
30974      public final void emitSHR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
30975        int miStart = mi;
30976        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
30977        // no size prefix
30978        generateREXprefix(true, null, null, dstBase);
30979        if (imm == 1) {
30980          setMachineCodes(mi++, (byte) 0xD1);
30981          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30982        } else {
30983          setMachineCodes(mi++, (byte) 0xC1);
30984          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
30985          emitImm8((byte)imm);
30986        }
30987        if (lister != null) lister.RDI(miStart, "SHR", dstBase, dstDisp, imm);
30988      }
30989    
30990      /**
30991       * Generate a register-offset--immediate SHR. That is,
30992       * <PRE>
30993       * logical shift right of [dstIndex<<dstScale + dstDisp] by imm
30994       * </PRE>
30995       *
30996       * @param dstIndex the destination index register
30997       * @param dstScale the destination shift amount
30998       * @param dstDisp the destination displacement
30999       * @param imm immediate
31000       */
31001      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31002      public final void emitSHR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
31003        int miStart = mi;
31004        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31005        // no size prefix
31006        generateREXprefix(true, null, dstIndex, null);
31007        if (imm == 1) {
31008          setMachineCodes(mi++, (byte) 0xD1);
31009          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
31010        } else {
31011          setMachineCodes(mi++, (byte) 0xC1);
31012          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
31013          emitImm8((byte)imm);
31014        }
31015        if (lister != null) lister.RFDI(miStart, "SHR", dstIndex, dstScale, dstDisp, imm);
31016      }
31017    
31018      /**
31019       * Generate a absolute--immediate SHR. That is,
31020       * <PRE>
31021       * logical shift right of [dstDisp] by imm
31022       * </PRE>
31023       *
31024       * @param dstDisp the destination displacement
31025       * @param imm immediate
31026       */
31027      public final void emitSHR_Abs_Imm_Quad(Address dstDisp, int imm) {
31028        int miStart = mi;
31029        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31030        // no size prefix
31031        generateREXprefix(true, null, null, null);
31032        if (imm == 1) {
31033          setMachineCodes(mi++, (byte) 0xD1);
31034          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
31035        } else {
31036          setMachineCodes(mi++, (byte) 0xC1);
31037          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
31038          emitImm8((byte)imm);
31039        }
31040        if (lister != null) lister.RAI(miStart, "SHR", dstDisp, imm);
31041      }
31042    
31043      /**
31044       * Generate a register-index--immediate SHR. That is,
31045       * <PRE>
31046       * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
31047       * </PRE>
31048       *
31049       * @param dstBase the destination base register
31050       * @param dstIndex the destination index register
31051       * @param dstScale the destination shift amount
31052       * @param dstDisp the destination displacement
31053       * @param imm immediate
31054       */
31055      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31056      public final void emitSHR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
31057        int miStart = mi;
31058        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31059        // no size prefix
31060        generateREXprefix(true, null, dstIndex, dstBase);
31061        if (imm == 1) {
31062          setMachineCodes(mi++, (byte) 0xD1);
31063          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
31064        } else {
31065          setMachineCodes(mi++, (byte) 0xC1);
31066          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
31067          emitImm8((byte)imm);
31068        }
31069        if (lister != null) lister.RXDI(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, imm);
31070      }
31071    
31072      /**
31073       * Generate a register--register SHR. That is,
31074       * <PRE>
31075       * logical shift right of dstReg by srcReg
31076       * </PRE>
31077       *
31078       * @param dstReg the destination register
31079       * @param srcReg must always be ECX
31080       */
31081      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31082      public final void emitSHR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
31083        int miStart = mi;
31084        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31085        // no size prefix
31086        generateREXprefix(true, null, null, dstReg);
31087        setMachineCodes(mi++, (byte) 0xD3);
31088        emitRegRegOperands(dstReg, GPR.getForOpcode(0x5));
31089        if (lister != null) lister.RR(miStart, "SHR", dstReg, srcReg);
31090      }
31091    
31092      /**
31093       * Generate a register-indirect--register SHR. That is,
31094       * <PRE>
31095       * logical shift right of [dstBase] by srcReg
31096       * </PRE>
31097       *
31098       * @param dstBase the destination register
31099       * @param srcReg must always be ECX
31100       */
31101      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31102      public final void emitSHR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
31103        int miStart = mi;
31104        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31105        // no size prefix
31106        generateREXprefix(true, null, null, dstBase);
31107        setMachineCodes(mi++, (byte) 0xD3);
31108        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x5));
31109        if (lister != null) lister.RNR(miStart, "SHR", dstBase, srcReg);
31110      }
31111    
31112      /**
31113       * Generate a register-displacement--register SHR. That is,
31114       * <PRE>
31115       * logical shift right of [dstBase + dstDisp] by srcReg
31116       * </PRE>
31117       *
31118       * @param dstBase the destination base register
31119       * @param dstDisp the destination displacement
31120       * @param srcReg must always be ECX
31121       */
31122      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
31123      public final void emitSHR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
31124        int miStart = mi;
31125        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31126        // no size prefix
31127        generateREXprefix(true, null, null, dstBase);
31128        setMachineCodes(mi++, (byte) 0xD3);
31129        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x5));
31130        if (lister != null) lister.RDR(miStart, "SHR", dstBase, dstDisp, srcReg);
31131      }
31132    
31133      /**
31134       * Generate a register-offset--register SHR. That is,
31135       * <PRE>
31136       * logical shift right of [dstIndex<<dstScale + dstDisp] by srcReg
31137       * </PRE>
31138       *
31139       * @param dstIndex the destination index register
31140       * @param dstScale the destination shift amount
31141       * @param dstDisp the destination displacement
31142       * @param srcReg must always be ECX
31143       */
31144      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
31145      public final void emitSHR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
31146        int miStart = mi;
31147        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31148        // no size prefix
31149        generateREXprefix(true, null, dstIndex, null);
31150        setMachineCodes(mi++, (byte) 0xD3);
31151        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
31152        if (lister != null) lister.RFDR(miStart, "SHR", dstIndex, dstScale, dstDisp, srcReg);
31153      }
31154    
31155      /**
31156       * Generate an absolute--register SHR. That is,
31157       * <PRE>
31158       * logical shift right of [dstDisp] by srcReg
31159       * </PRE>
31160       *
31161       * @param dstDisp the destination displacement
31162       * @param srcReg must always be ECX
31163       */
31164      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
31165      public final void emitSHR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
31166        int miStart = mi;
31167        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31168        // no size prefix
31169        generateREXprefix(true, null, null, null);
31170        setMachineCodes(mi++, (byte) 0xD3);
31171        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x5));
31172        if (lister != null) lister.RAR(miStart, "SHR", dstDisp, srcReg);
31173      }
31174    
31175      /**
31176       * Generate a register-displacement--register SHR. That is,
31177       * <PRE>
31178       * logical shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
31179       * </PRE>
31180       *
31181       * @param dstBase the destination base register
31182       * @param dstIndex the destination index register
31183       * @param dstScale the destination shift amount
31184       * @param dstDisp the destination displacement
31185       * @param srcReg must always be ECX
31186       */
31187      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
31188      public final void emitSHR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
31189        int miStart = mi;
31190        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31191        // no size prefix
31192        generateREXprefix(true, null, dstIndex, dstBase);
31193        setMachineCodes(mi++, (byte) 0xD3);
31194        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x5));
31195        if (lister != null) lister.RXDR(miStart, "SHR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
31196      }
31197    
31198      /**
31199       * Generate a register--immediate SAR. That is,
31200       * <PRE>
31201       * arithemetic shift right of dstReg by imm
31202       * </PRE>
31203       *
31204       * @param dstReg the destination register
31205       * @param imm immediate
31206       */
31207      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31208      public final void emitSAR_Reg_Imm_Byte(GPR dstReg, int imm) {
31209        int miStart = mi;
31210        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31211        // no size prefix
31212        generateREXprefix(false, null, null, dstReg);
31213        if (imm == 1) {
31214          setMachineCodes(mi++, (byte) 0xD0);
31215          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
31216        } else {
31217          setMachineCodes(mi++, (byte) 0xC0);
31218          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
31219          emitImm8((byte)imm);
31220        }
31221        if (lister != null) lister.RI(miStart, "SAR", dstReg, imm);
31222      }
31223    
31224      /**
31225       * Generate a register-indirect--immediate SAR. That is,
31226       * <PRE>
31227       * arithemetic shift right of [dstBase] by imm
31228       * </PRE>
31229       *
31230       * @param dstBase the destination base register
31231       * @param imm immediate
31232       */
31233      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31234      public final void emitSAR_RegInd_Imm_Byte(GPR dstBase, int imm) {
31235        int miStart = mi;
31236        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31237        // no size prefix
31238        generateREXprefix(false, null, null, dstBase);
31239        if (imm == 1) {
31240          setMachineCodes(mi++, (byte) 0xD0);
31241          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
31242        } else {
31243          setMachineCodes(mi++, (byte) 0xC0);
31244          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
31245          emitImm8((byte)imm);
31246        }
31247        if (lister != null) lister.RNI(miStart, "SAR", dstBase, imm);
31248      }
31249    
31250      /**
31251       * Generate a register-displacement--immediate SAR. That is,
31252       * <PRE>
31253       * arithemetic shift right of [dstBase + dstDisp] by imm
31254       * </PRE>
31255       *
31256       * @param dstBase the destination base register
31257       * @param dstDisp the destination displacement
31258       * @param imm immediate
31259       */
31260      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31261      public final void emitSAR_RegDisp_Imm_Byte(GPR dstBase, Offset dstDisp, int imm) {
31262        int miStart = mi;
31263        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31264        // no size prefix
31265        generateREXprefix(false, null, null, dstBase);
31266        if (imm == 1) {
31267          setMachineCodes(mi++, (byte) 0xD0);
31268          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
31269        } else {
31270          setMachineCodes(mi++, (byte) 0xC0);
31271          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
31272          emitImm8((byte)imm);
31273        }
31274        if (lister != null) lister.RDI(miStart, "SAR", dstBase, dstDisp, imm);
31275      }
31276    
31277      /**
31278       * Generate a register-offset--immediate SAR. That is,
31279       * <PRE>
31280       * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by imm
31281       * </PRE>
31282       *
31283       * @param dstIndex the destination index register
31284       * @param dstScale the destination shift amount
31285       * @param dstDisp the destination displacement
31286       * @param imm immediate
31287       */
31288      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31289      public final void emitSAR_RegOff_Imm_Byte(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
31290        int miStart = mi;
31291        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31292        // no size prefix
31293        generateREXprefix(false, null, dstIndex, null);
31294        if (imm == 1) {
31295          setMachineCodes(mi++, (byte) 0xD0);
31296          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31297        } else {
31298          setMachineCodes(mi++, (byte) 0xC0);
31299          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31300          emitImm8((byte)imm);
31301        }
31302        if (lister != null) lister.RFDI(miStart, "SAR", dstIndex, dstScale, dstDisp, imm);
31303      }
31304    
31305      /**
31306       * Generate a absolute--immediate SAR. That is,
31307       * <PRE>
31308       * arithemetic shift right of [dstDisp] by imm
31309       * </PRE>
31310       *
31311       * @param dstDisp the destination displacement
31312       * @param imm immediate
31313       */
31314      public final void emitSAR_Abs_Imm_Byte(Address dstDisp, int imm) {
31315        int miStart = mi;
31316        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31317        // no size prefix
31318        generateREXprefix(false, null, null, null);
31319        if (imm == 1) {
31320          setMachineCodes(mi++, (byte) 0xD0);
31321          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
31322        } else {
31323          setMachineCodes(mi++, (byte) 0xC0);
31324          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
31325          emitImm8((byte)imm);
31326        }
31327        if (lister != null) lister.RAI(miStart, "SAR", dstDisp, imm);
31328      }
31329    
31330      /**
31331       * Generate a register-index--immediate SAR. That is,
31332       * <PRE>
31333       * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
31334       * </PRE>
31335       *
31336       * @param dstBase the destination base register
31337       * @param dstIndex the destination index register
31338       * @param dstScale the destination shift amount
31339       * @param dstDisp the destination displacement
31340       * @param imm immediate
31341       */
31342      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31343      public final void emitSAR_RegIdx_Imm_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
31344        int miStart = mi;
31345        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31346        // no size prefix
31347        generateREXprefix(false, null, dstIndex, dstBase);
31348        if (imm == 1) {
31349          setMachineCodes(mi++, (byte) 0xD0);
31350          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31351        } else {
31352          setMachineCodes(mi++, (byte) 0xC0);
31353          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31354          emitImm8((byte)imm);
31355        }
31356        if (lister != null) lister.RXDI(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, imm);
31357      }
31358    
31359      /**
31360       * Generate a register--register SAR. That is,
31361       * <PRE>
31362       * arithemetic shift right of dstReg by srcReg
31363       * </PRE>
31364       *
31365       * @param dstReg the destination register
31366       * @param srcReg must always be ECX
31367       */
31368      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31369      public final void emitSAR_Reg_Reg_Byte(GPR dstReg, GPR srcReg) {
31370        int miStart = mi;
31371        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31372        // no size prefix
31373        generateREXprefix(false, null, null, dstReg);
31374        setMachineCodes(mi++, (byte) 0xD2);
31375        emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
31376        if (lister != null) lister.RR(miStart, "SAR", dstReg, srcReg);
31377      }
31378    
31379      /**
31380       * Generate a register-indirect--register SAR. That is,
31381       * <PRE>
31382       * arithemetic shift right of [dstBase] by srcReg
31383       * </PRE>
31384       *
31385       * @param dstBase the destination register
31386       * @param srcReg must always be ECX
31387       */
31388      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31389      public final void emitSAR_RegInd_Reg_Byte(GPR dstBase, GPR srcReg) {
31390        int miStart = mi;
31391        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31392        // no size prefix
31393        generateREXprefix(false, null, null, dstBase);
31394        setMachineCodes(mi++, (byte) 0xD2);
31395        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
31396        if (lister != null) lister.RNR(miStart, "SAR", dstBase, srcReg);
31397      }
31398    
31399      /**
31400       * Generate a register-displacement--register SAR. That is,
31401       * <PRE>
31402       * arithemetic shift right of [dstBase + dstDisp] by srcReg
31403       * </PRE>
31404       *
31405       * @param dstBase the destination base register
31406       * @param dstDisp the destination displacement
31407       * @param srcReg must always be ECX
31408       */
31409      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
31410      public final void emitSAR_RegDisp_Reg_Byte(GPR dstBase, Offset dstDisp, GPR srcReg) {
31411        int miStart = mi;
31412        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31413        // no size prefix
31414        generateREXprefix(false, null, null, dstBase);
31415        setMachineCodes(mi++, (byte) 0xD2);
31416        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
31417        if (lister != null) lister.RDR(miStart, "SAR", dstBase, dstDisp, srcReg);
31418      }
31419    
31420      /**
31421       * Generate a register-offset--register SAR. That is,
31422       * <PRE>
31423       * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by srcReg
31424       * </PRE>
31425       *
31426       * @param dstIndex the destination index register
31427       * @param dstScale the destination shift amount
31428       * @param dstDisp the destination displacement
31429       * @param srcReg must always be ECX
31430       */
31431      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
31432      public final void emitSAR_RegOff_Reg_Byte(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
31433        int miStart = mi;
31434        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31435        // no size prefix
31436        generateREXprefix(false, null, dstIndex, null);
31437        setMachineCodes(mi++, (byte) 0xD2);
31438        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31439        if (lister != null) lister.RFDR(miStart, "SAR", dstIndex, dstScale, dstDisp, srcReg);
31440      }
31441    
31442      /**
31443       * Generate an absolute--register SAR. That is,
31444       * <PRE>
31445       * arithemetic shift right of [dstDisp] by srcReg
31446       * </PRE>
31447       *
31448       * @param dstDisp the destination displacement
31449       * @param srcReg must always be ECX
31450       */
31451      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
31452      public final void emitSAR_Abs_Reg_Byte(Address dstDisp, GPR srcReg) {
31453        int miStart = mi;
31454        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31455        // no size prefix
31456        generateREXprefix(false, null, null, null);
31457        setMachineCodes(mi++, (byte) 0xD2);
31458        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
31459        if (lister != null) lister.RAR(miStart, "SAR", dstDisp, srcReg);
31460      }
31461    
31462      /**
31463       * Generate a register-displacement--register SAR. That is,
31464       * <PRE>
31465       * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
31466       * </PRE>
31467       *
31468       * @param dstBase the destination base register
31469       * @param dstIndex the destination index register
31470       * @param dstScale the destination shift amount
31471       * @param dstDisp the destination displacement
31472       * @param srcReg must always be ECX
31473       */
31474      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
31475      public final void emitSAR_RegIdx_Reg_Byte(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
31476        int miStart = mi;
31477        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31478        // no size prefix
31479        generateREXprefix(false, null, dstIndex, dstBase);
31480        setMachineCodes(mi++, (byte) 0xD2);
31481        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31482        if (lister != null) lister.RXDR(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
31483      }
31484    
31485      /**
31486       * Generate a register--immediate SAR. That is,
31487       * <PRE>
31488       * arithemetic shift right of dstReg by imm
31489       * </PRE>
31490       *
31491       * @param dstReg the destination register
31492       * @param imm immediate
31493       */
31494      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31495      public final void emitSAR_Reg_Imm_Word(GPR dstReg, int imm) {
31496        int miStart = mi;
31497        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31498        setMachineCodes(mi++, (byte) 0x66);
31499        generateREXprefix(false, null, null, dstReg);
31500        if (imm == 1) {
31501          setMachineCodes(mi++, (byte) 0xD1);
31502          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
31503        } else {
31504          setMachineCodes(mi++, (byte) 0xC1);
31505          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
31506          emitImm8((byte)imm);
31507        }
31508        if (lister != null) lister.RI(miStart, "SAR", dstReg, imm);
31509      }
31510    
31511      /**
31512       * Generate a register-indirect--immediate SAR. That is,
31513       * <PRE>
31514       * arithemetic shift right of [dstBase] by imm
31515       * </PRE>
31516       *
31517       * @param dstBase the destination base register
31518       * @param imm immediate
31519       */
31520      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31521      public final void emitSAR_RegInd_Imm_Word(GPR dstBase, int imm) {
31522        int miStart = mi;
31523        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31524        setMachineCodes(mi++, (byte) 0x66);
31525        generateREXprefix(false, null, null, dstBase);
31526        if (imm == 1) {
31527          setMachineCodes(mi++, (byte) 0xD1);
31528          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
31529        } else {
31530          setMachineCodes(mi++, (byte) 0xC1);
31531          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
31532          emitImm8((byte)imm);
31533        }
31534        if (lister != null) lister.RNI(miStart, "SAR", dstBase, imm);
31535      }
31536    
31537      /**
31538       * Generate a register-displacement--immediate SAR. That is,
31539       * <PRE>
31540       * arithemetic shift right of [dstBase + dstDisp] by imm
31541       * </PRE>
31542       *
31543       * @param dstBase the destination base register
31544       * @param dstDisp the destination displacement
31545       * @param imm immediate
31546       */
31547      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31548      public final void emitSAR_RegDisp_Imm_Word(GPR dstBase, Offset dstDisp, int imm) {
31549        int miStart = mi;
31550        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31551        setMachineCodes(mi++, (byte) 0x66);
31552        generateREXprefix(false, null, null, dstBase);
31553        if (imm == 1) {
31554          setMachineCodes(mi++, (byte) 0xD1);
31555          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
31556        } else {
31557          setMachineCodes(mi++, (byte) 0xC1);
31558          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
31559          emitImm8((byte)imm);
31560        }
31561        if (lister != null) lister.RDI(miStart, "SAR", dstBase, dstDisp, imm);
31562      }
31563    
31564      /**
31565       * Generate a register-offset--immediate SAR. That is,
31566       * <PRE>
31567       * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by imm
31568       * </PRE>
31569       *
31570       * @param dstIndex the destination index register
31571       * @param dstScale the destination shift amount
31572       * @param dstDisp the destination displacement
31573       * @param imm immediate
31574       */
31575      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31576      public final void emitSAR_RegOff_Imm_Word(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
31577        int miStart = mi;
31578        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31579        setMachineCodes(mi++, (byte) 0x66);
31580        generateREXprefix(false, null, dstIndex, null);
31581        if (imm == 1) {
31582          setMachineCodes(mi++, (byte) 0xD1);
31583          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31584        } else {
31585          setMachineCodes(mi++, (byte) 0xC1);
31586          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31587          emitImm8((byte)imm);
31588        }
31589        if (lister != null) lister.RFDI(miStart, "SAR", dstIndex, dstScale, dstDisp, imm);
31590      }
31591    
31592      /**
31593       * Generate a absolute--immediate SAR. That is,
31594       * <PRE>
31595       * arithemetic shift right of [dstDisp] by imm
31596       * </PRE>
31597       *
31598       * @param dstDisp the destination displacement
31599       * @param imm immediate
31600       */
31601      public final void emitSAR_Abs_Imm_Word(Address dstDisp, int imm) {
31602        int miStart = mi;
31603        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31604        setMachineCodes(mi++, (byte) 0x66);
31605        generateREXprefix(false, null, null, null);
31606        if (imm == 1) {
31607          setMachineCodes(mi++, (byte) 0xD1);
31608          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
31609        } else {
31610          setMachineCodes(mi++, (byte) 0xC1);
31611          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
31612          emitImm8((byte)imm);
31613        }
31614        if (lister != null) lister.RAI(miStart, "SAR", dstDisp, imm);
31615      }
31616    
31617      /**
31618       * Generate a register-index--immediate SAR. That is,
31619       * <PRE>
31620       * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
31621       * </PRE>
31622       *
31623       * @param dstBase the destination base register
31624       * @param dstIndex the destination index register
31625       * @param dstScale the destination shift amount
31626       * @param dstDisp the destination displacement
31627       * @param imm immediate
31628       */
31629      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31630      public final void emitSAR_RegIdx_Imm_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
31631        int miStart = mi;
31632        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31633        setMachineCodes(mi++, (byte) 0x66);
31634        generateREXprefix(false, null, dstIndex, dstBase);
31635        if (imm == 1) {
31636          setMachineCodes(mi++, (byte) 0xD1);
31637          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31638        } else {
31639          setMachineCodes(mi++, (byte) 0xC1);
31640          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31641          emitImm8((byte)imm);
31642        }
31643        if (lister != null) lister.RXDI(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, imm);
31644      }
31645    
31646      /**
31647       * Generate a register--register SAR. That is,
31648       * <PRE>
31649       * arithemetic shift right of dstReg by srcReg
31650       * </PRE>
31651       *
31652       * @param dstReg the destination register
31653       * @param srcReg must always be ECX
31654       */
31655      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31656      public final void emitSAR_Reg_Reg_Word(GPR dstReg, GPR srcReg) {
31657        int miStart = mi;
31658        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31659        setMachineCodes(mi++, (byte) 0x66);
31660        generateREXprefix(false, null, null, dstReg);
31661        setMachineCodes(mi++, (byte) 0xD3);
31662        emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
31663        if (lister != null) lister.RR(miStart, "SAR", dstReg, srcReg);
31664      }
31665    
31666      /**
31667       * Generate a register-indirect--register SAR. That is,
31668       * <PRE>
31669       * arithemetic shift right of [dstBase] by srcReg
31670       * </PRE>
31671       *
31672       * @param dstBase the destination register
31673       * @param srcReg must always be ECX
31674       */
31675      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31676      public final void emitSAR_RegInd_Reg_Word(GPR dstBase, GPR srcReg) {
31677        int miStart = mi;
31678        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31679        setMachineCodes(mi++, (byte) 0x66);
31680        generateREXprefix(false, null, null, dstBase);
31681        setMachineCodes(mi++, (byte) 0xD3);
31682        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
31683        if (lister != null) lister.RNR(miStart, "SAR", dstBase, srcReg);
31684      }
31685    
31686      /**
31687       * Generate a register-displacement--register SAR. That is,
31688       * <PRE>
31689       * arithemetic shift right of [dstBase + dstDisp] by srcReg
31690       * </PRE>
31691       *
31692       * @param dstBase the destination base register
31693       * @param dstDisp the destination displacement
31694       * @param srcReg must always be ECX
31695       */
31696      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
31697      public final void emitSAR_RegDisp_Reg_Word(GPR dstBase, Offset dstDisp, GPR srcReg) {
31698        int miStart = mi;
31699        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31700        setMachineCodes(mi++, (byte) 0x66);
31701        generateREXprefix(false, null, null, dstBase);
31702        setMachineCodes(mi++, (byte) 0xD3);
31703        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
31704        if (lister != null) lister.RDR(miStart, "SAR", dstBase, dstDisp, srcReg);
31705      }
31706    
31707      /**
31708       * Generate a register-offset--register SAR. That is,
31709       * <PRE>
31710       * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by srcReg
31711       * </PRE>
31712       *
31713       * @param dstIndex the destination index register
31714       * @param dstScale the destination shift amount
31715       * @param dstDisp the destination displacement
31716       * @param srcReg must always be ECX
31717       */
31718      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
31719      public final void emitSAR_RegOff_Reg_Word(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
31720        int miStart = mi;
31721        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31722        setMachineCodes(mi++, (byte) 0x66);
31723        generateREXprefix(false, null, dstIndex, null);
31724        setMachineCodes(mi++, (byte) 0xD3);
31725        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31726        if (lister != null) lister.RFDR(miStart, "SAR", dstIndex, dstScale, dstDisp, srcReg);
31727      }
31728    
31729      /**
31730       * Generate an absolute--register SAR. That is,
31731       * <PRE>
31732       * arithemetic shift right of [dstDisp] by srcReg
31733       * </PRE>
31734       *
31735       * @param dstDisp the destination displacement
31736       * @param srcReg must always be ECX
31737       */
31738      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
31739      public final void emitSAR_Abs_Reg_Word(Address dstDisp, GPR srcReg) {
31740        int miStart = mi;
31741        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31742        setMachineCodes(mi++, (byte) 0x66);
31743        generateREXprefix(false, null, null, null);
31744        setMachineCodes(mi++, (byte) 0xD3);
31745        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
31746        if (lister != null) lister.RAR(miStart, "SAR", dstDisp, srcReg);
31747      }
31748    
31749      /**
31750       * Generate a register-displacement--register SAR. That is,
31751       * <PRE>
31752       * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
31753       * </PRE>
31754       *
31755       * @param dstBase the destination base register
31756       * @param dstIndex the destination index register
31757       * @param dstScale the destination shift amount
31758       * @param dstDisp the destination displacement
31759       * @param srcReg must always be ECX
31760       */
31761      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
31762      public final void emitSAR_RegIdx_Reg_Word(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
31763        int miStart = mi;
31764        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31765        setMachineCodes(mi++, (byte) 0x66);
31766        generateREXprefix(false, null, dstIndex, dstBase);
31767        setMachineCodes(mi++, (byte) 0xD3);
31768        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31769        if (lister != null) lister.RXDR(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
31770      }
31771    
31772      /**
31773       * Generate a register--immediate SAR. That is,
31774       * <PRE>
31775       * arithemetic shift right of dstReg by imm
31776       * </PRE>
31777       *
31778       * @param dstReg the destination register
31779       * @param imm immediate
31780       */
31781      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31782      public final void emitSAR_Reg_Imm(GPR dstReg, int imm) {
31783        int miStart = mi;
31784        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31785        // no size prefix
31786        generateREXprefix(false, null, null, dstReg);
31787        if (imm == 1) {
31788          setMachineCodes(mi++, (byte) 0xD1);
31789          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
31790        } else {
31791          setMachineCodes(mi++, (byte) 0xC1);
31792          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
31793          emitImm8((byte)imm);
31794        }
31795        if (lister != null) lister.RI(miStart, "SAR", dstReg, imm);
31796      }
31797    
31798      /**
31799       * Generate a register-indirect--immediate SAR. That is,
31800       * <PRE>
31801       * arithemetic shift right of [dstBase] by imm
31802       * </PRE>
31803       *
31804       * @param dstBase the destination base register
31805       * @param imm immediate
31806       */
31807      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31808      public final void emitSAR_RegInd_Imm(GPR dstBase, int imm) {
31809        int miStart = mi;
31810        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31811        // no size prefix
31812        generateREXprefix(false, null, null, dstBase);
31813        if (imm == 1) {
31814          setMachineCodes(mi++, (byte) 0xD1);
31815          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
31816        } else {
31817          setMachineCodes(mi++, (byte) 0xC1);
31818          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
31819          emitImm8((byte)imm);
31820        }
31821        if (lister != null) lister.RNI(miStart, "SAR", dstBase, imm);
31822      }
31823    
31824      /**
31825       * Generate a register-displacement--immediate SAR. That is,
31826       * <PRE>
31827       * arithemetic shift right of [dstBase + dstDisp] by imm
31828       * </PRE>
31829       *
31830       * @param dstBase the destination base register
31831       * @param dstDisp the destination displacement
31832       * @param imm immediate
31833       */
31834      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31835      public final void emitSAR_RegDisp_Imm(GPR dstBase, Offset dstDisp, int imm) {
31836        int miStart = mi;
31837        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31838        // no size prefix
31839        generateREXprefix(false, null, null, dstBase);
31840        if (imm == 1) {
31841          setMachineCodes(mi++, (byte) 0xD1);
31842          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
31843        } else {
31844          setMachineCodes(mi++, (byte) 0xC1);
31845          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
31846          emitImm8((byte)imm);
31847        }
31848        if (lister != null) lister.RDI(miStart, "SAR", dstBase, dstDisp, imm);
31849      }
31850    
31851      /**
31852       * Generate a register-offset--immediate SAR. That is,
31853       * <PRE>
31854       * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by imm
31855       * </PRE>
31856       *
31857       * @param dstIndex the destination index register
31858       * @param dstScale the destination shift amount
31859       * @param dstDisp the destination displacement
31860       * @param imm immediate
31861       */
31862      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
31863      public final void emitSAR_RegOff_Imm(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
31864        int miStart = mi;
31865        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31866        // no size prefix
31867        generateREXprefix(false, null, dstIndex, null);
31868        if (imm == 1) {
31869          setMachineCodes(mi++, (byte) 0xD1);
31870          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31871        } else {
31872          setMachineCodes(mi++, (byte) 0xC1);
31873          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31874          emitImm8((byte)imm);
31875        }
31876        if (lister != null) lister.RFDI(miStart, "SAR", dstIndex, dstScale, dstDisp, imm);
31877      }
31878    
31879      /**
31880       * Generate a absolute--immediate SAR. That is,
31881       * <PRE>
31882       * arithemetic shift right of [dstDisp] by imm
31883       * </PRE>
31884       *
31885       * @param dstDisp the destination displacement
31886       * @param imm immediate
31887       */
31888      public final void emitSAR_Abs_Imm(Address dstDisp, int imm) {
31889        int miStart = mi;
31890        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31891        // no size prefix
31892        generateREXprefix(false, null, null, null);
31893        if (imm == 1) {
31894          setMachineCodes(mi++, (byte) 0xD1);
31895          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
31896        } else {
31897          setMachineCodes(mi++, (byte) 0xC1);
31898          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
31899          emitImm8((byte)imm);
31900        }
31901        if (lister != null) lister.RAI(miStart, "SAR", dstDisp, imm);
31902      }
31903    
31904      /**
31905       * Generate a register-index--immediate SAR. That is,
31906       * <PRE>
31907       * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
31908       * </PRE>
31909       *
31910       * @param dstBase the destination base register
31911       * @param dstIndex the destination index register
31912       * @param dstScale the destination shift amount
31913       * @param dstDisp the destination displacement
31914       * @param imm immediate
31915       */
31916      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31917      public final void emitSAR_RegIdx_Imm(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
31918        int miStart = mi;
31919        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
31920        // no size prefix
31921        generateREXprefix(false, null, dstIndex, dstBase);
31922        if (imm == 1) {
31923          setMachineCodes(mi++, (byte) 0xD1);
31924          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31925        } else {
31926          setMachineCodes(mi++, (byte) 0xC1);
31927          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
31928          emitImm8((byte)imm);
31929        }
31930        if (lister != null) lister.RXDI(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, imm);
31931      }
31932    
31933      /**
31934       * Generate a register--register SAR. That is,
31935       * <PRE>
31936       * arithemetic shift right of dstReg by srcReg
31937       * </PRE>
31938       *
31939       * @param dstReg the destination register
31940       * @param srcReg must always be ECX
31941       */
31942      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31943      public final void emitSAR_Reg_Reg(GPR dstReg, GPR srcReg) {
31944        int miStart = mi;
31945        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31946        // no size prefix
31947        generateREXprefix(false, null, null, dstReg);
31948        setMachineCodes(mi++, (byte) 0xD3);
31949        emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
31950        if (lister != null) lister.RR(miStart, "SAR", dstReg, srcReg);
31951      }
31952    
31953      /**
31954       * Generate a register-indirect--register SAR. That is,
31955       * <PRE>
31956       * arithemetic shift right of [dstBase] by srcReg
31957       * </PRE>
31958       *
31959       * @param dstBase the destination register
31960       * @param srcReg must always be ECX
31961       */
31962      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
31963      public final void emitSAR_RegInd_Reg(GPR dstBase, GPR srcReg) {
31964        int miStart = mi;
31965        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31966        // no size prefix
31967        generateREXprefix(false, null, null, dstBase);
31968        setMachineCodes(mi++, (byte) 0xD3);
31969        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
31970        if (lister != null) lister.RNR(miStart, "SAR", dstBase, srcReg);
31971      }
31972    
31973      /**
31974       * Generate a register-displacement--register SAR. That is,
31975       * <PRE>
31976       * arithemetic shift right of [dstBase + dstDisp] by srcReg
31977       * </PRE>
31978       *
31979       * @param dstBase the destination base register
31980       * @param dstDisp the destination displacement
31981       * @param srcReg must always be ECX
31982       */
31983      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
31984      public final void emitSAR_RegDisp_Reg(GPR dstBase, Offset dstDisp, GPR srcReg) {
31985        int miStart = mi;
31986        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
31987        // no size prefix
31988        generateREXprefix(false, null, null, dstBase);
31989        setMachineCodes(mi++, (byte) 0xD3);
31990        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
31991        if (lister != null) lister.RDR(miStart, "SAR", dstBase, dstDisp, srcReg);
31992      }
31993    
31994      /**
31995       * Generate a register-offset--register SAR. That is,
31996       * <PRE>
31997       * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by srcReg
31998       * </PRE>
31999       *
32000       * @param dstIndex the destination index register
32001       * @param dstScale the destination shift amount
32002       * @param dstDisp the destination displacement
32003       * @param srcReg must always be ECX
32004       */
32005      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
32006      public final void emitSAR_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
32007        int miStart = mi;
32008        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
32009        // no size prefix
32010        generateREXprefix(false, null, dstIndex, null);
32011        setMachineCodes(mi++, (byte) 0xD3);
32012        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
32013        if (lister != null) lister.RFDR(miStart, "SAR", dstIndex, dstScale, dstDisp, srcReg);
32014      }
32015    
32016      /**
32017       * Generate an absolute--register SAR. That is,
32018       * <PRE>
32019       * arithemetic shift right of [dstDisp] by srcReg
32020       * </PRE>
32021       *
32022       * @param dstDisp the destination displacement
32023       * @param srcReg must always be ECX
32024       */
32025      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
32026      public final void emitSAR_Abs_Reg(Address dstDisp, GPR srcReg) {
32027        int miStart = mi;
32028        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
32029        // no size prefix
32030        generateREXprefix(false, null, null, null);
32031        setMachineCodes(mi++, (byte) 0xD3);
32032        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
32033        if (lister != null) lister.RAR(miStart, "SAR", dstDisp, srcReg);
32034      }
32035    
32036      /**
32037       * Generate a register-displacement--register SAR. That is,
32038       * <PRE>
32039       * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
32040       * </PRE>
32041       *
32042       * @param dstBase the destination base register
32043       * @param dstIndex the destination index register
32044       * @param dstScale the destination shift amount
32045       * @param dstDisp the destination displacement
32046       * @param srcReg must always be ECX
32047       */
32048      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
32049      public final void emitSAR_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
32050        int miStart = mi;
32051        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
32052        // no size prefix
32053        generateREXprefix(false, null, dstIndex, dstBase);
32054        setMachineCodes(mi++, (byte) 0xD3);
32055        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
32056        if (lister != null) lister.RXDR(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
32057      }
32058    
32059      /**
32060       * Generate a register--immediate SAR. That is,
32061       * <PRE>
32062       * arithemetic shift right of dstReg by imm
32063       * </PRE>
32064       *
32065       * @param dstReg the destination register
32066       * @param imm immediate
32067       */
32068      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
32069      public final void emitSAR_Reg_Imm_Quad(GPR dstReg, int imm) {
32070        int miStart = mi;
32071        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
32072        // no size prefix
32073        generateREXprefix(true, null, null, dstReg);
32074        if (imm == 1) {
32075          setMachineCodes(mi++, (byte) 0xD1);
32076          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
32077        } else {
32078          setMachineCodes(mi++, (byte) 0xC1);
32079          emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
32080          emitImm8((byte)imm);
32081        }
32082        if (lister != null) lister.RI(miStart, "SAR", dstReg, imm);
32083      }
32084    
32085      /**
32086       * Generate a register-indirect--immediate SAR. That is,
32087       * <PRE>
32088       * arithemetic shift right of [dstBase] by imm
32089       * </PRE>
32090       *
32091       * @param dstBase the destination base register
32092       * @param imm immediate
32093       */
32094      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
32095      public final void emitSAR_RegInd_Imm_Quad(GPR dstBase, int imm) {
32096        int miStart = mi;
32097        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
32098        // no size prefix
32099        generateREXprefix(true, null, null, dstBase);
32100        if (imm == 1) {
32101          setMachineCodes(mi++, (byte) 0xD1);
32102          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
32103        } else {
32104          setMachineCodes(mi++, (byte) 0xC1);
32105          emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
32106          emitImm8((byte)imm);
32107        }
32108        if (lister != null) lister.RNI(miStart, "SAR", dstBase, imm);
32109      }
32110    
32111      /**
32112       * Generate a register-displacement--immediate SAR. That is,
32113       * <PRE>
32114       * arithemetic shift right of [dstBase + dstDisp] by imm
32115       * </PRE>
32116       *
32117       * @param dstBase the destination base register
32118       * @param dstDisp the destination displacement
32119       * @param imm immediate
32120       */
32121      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
32122      public final void emitSAR_RegDisp_Imm_Quad(GPR dstBase, Offset dstDisp, int imm) {
32123        int miStart = mi;
32124        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
32125        // no size prefix
32126        generateREXprefix(true, null, null, dstBase);
32127        if (imm == 1) {
32128          setMachineCodes(mi++, (byte) 0xD1);
32129          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
32130        } else {
32131          setMachineCodes(mi++, (byte) 0xC1);
32132          emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
32133          emitImm8((byte)imm);
32134        }
32135        if (lister != null) lister.RDI(miStart, "SAR", dstBase, dstDisp, imm);
32136      }
32137    
32138      /**
32139       * Generate a register-offset--immediate SAR. That is,
32140       * <PRE>
32141       * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by imm
32142       * </PRE>
32143       *
32144       * @param dstIndex the destination index register
32145       * @param dstScale the destination shift amount
32146       * @param dstDisp the destination displacement
32147       * @param imm immediate
32148       */
32149      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
32150      public final void emitSAR_RegOff_Imm_Quad(GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
32151        int miStart = mi;
32152        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
32153        // no size prefix
32154        generateREXprefix(true, null, dstIndex, null);
32155        if (imm == 1) {
32156          setMachineCodes(mi++, (byte) 0xD1);
32157          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
32158        } else {
32159          setMachineCodes(mi++, (byte) 0xC1);
32160          emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
32161          emitImm8((byte)imm);
32162        }
32163        if (lister != null) lister.RFDI(miStart, "SAR", dstIndex, dstScale, dstDisp, imm);
32164      }
32165    
32166      /**
32167       * Generate a absolute--immediate SAR. That is,
32168       * <PRE>
32169       * arithemetic shift right of [dstDisp] by imm
32170       * </PRE>
32171       *
32172       * @param dstDisp the destination displacement
32173       * @param imm immediate
32174       */
32175      public final void emitSAR_Abs_Imm_Quad(Address dstDisp, int imm) {
32176        int miStart = mi;
32177        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
32178        // no size prefix
32179        generateREXprefix(true, null, null, null);
32180        if (imm == 1) {
32181          setMachineCodes(mi++, (byte) 0xD1);
32182          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
32183        } else {
32184          setMachineCodes(mi++, (byte) 0xC1);
32185          emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
32186          emitImm8((byte)imm);
32187        }
32188        if (lister != null) lister.RAI(miStart, "SAR", dstDisp, imm);
32189      }
32190    
32191      /**
32192       * Generate a register-index--immediate SAR. That is,
32193       * <PRE>
32194       * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by imm
32195       * </PRE>
32196       *
32197       * @param dstBase the destination base register
32198       * @param dstIndex the destination index register
32199       * @param dstScale the destination shift amount
32200       * @param dstDisp the destination displacement
32201       * @param imm immediate
32202       */
32203      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
32204      public final void emitSAR_RegIdx_Imm_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, int imm) {
32205        int miStart = mi;
32206        if (VM.VerifyAssertions) VM._assert(fits(imm,8));
32207        // no size prefix
32208        generateREXprefix(true, null, dstIndex, dstBase);
32209        if (imm == 1) {
32210          setMachineCodes(mi++, (byte) 0xD1);
32211          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
32212        } else {
32213          setMachineCodes(mi++, (byte) 0xC1);
32214          emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
32215          emitImm8((byte)imm);
32216        }
32217        if (lister != null) lister.RXDI(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, imm);
32218      }
32219    
32220      /**
32221       * Generate a register--register SAR. That is,
32222       * <PRE>
32223       * arithemetic shift right of dstReg by srcReg
32224       * </PRE>
32225       *
32226       * @param dstReg the destination register
32227       * @param srcReg must always be ECX
32228       */
32229      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
32230      public final void emitSAR_Reg_Reg_Quad(GPR dstReg, GPR srcReg) {
32231        int miStart = mi;
32232        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
32233        // no size prefix
32234        generateREXprefix(true, null, null, dstReg);
32235        setMachineCodes(mi++, (byte) 0xD3);
32236        emitRegRegOperands(dstReg, GPR.getForOpcode(0x7));
32237        if (lister != null) lister.RR(miStart, "SAR", dstReg, srcReg);
32238      }
32239    
32240      /**
32241       * Generate a register-indirect--register SAR. That is,
32242       * <PRE>
32243       * arithemetic shift right of [dstBase] by srcReg
32244       * </PRE>
32245       *
32246       * @param dstBase the destination register
32247       * @param srcReg must always be ECX
32248       */
32249      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
32250      public final void emitSAR_RegInd_Reg_Quad(GPR dstBase, GPR srcReg) {
32251        int miStart = mi;
32252        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
32253        // no size prefix
32254        generateREXprefix(true, null, null, dstBase);
32255        setMachineCodes(mi++, (byte) 0xD3);
32256        emitRegIndirectRegOperands(dstBase, GPR.getForOpcode(0x7));
32257        if (lister != null) lister.RNR(miStart, "SAR", dstBase, srcReg);
32258      }
32259    
32260      /**
32261       * Generate a register-displacement--register SAR. That is,
32262       * <PRE>
32263       * arithemetic shift right of [dstBase + dstDisp] by srcReg
32264       * </PRE>
32265       *
32266       * @param dstBase the destination base register
32267       * @param dstDisp the destination displacement
32268       * @param srcReg must always be ECX
32269       */
32270      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
32271      public final void emitSAR_RegDisp_Reg_Quad(GPR dstBase, Offset dstDisp, GPR srcReg) {
32272        int miStart = mi;
32273        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
32274        // no size prefix
32275        generateREXprefix(true, null, null, dstBase);
32276        setMachineCodes(mi++, (byte) 0xD3);
32277        emitRegDispRegOperands(dstBase, dstDisp, GPR.getForOpcode(0x7));
32278        if (lister != null) lister.RDR(miStart, "SAR", dstBase, dstDisp, srcReg);
32279      }
32280    
32281      /**
32282       * Generate a register-offset--register SAR. That is,
32283       * <PRE>
32284       * arithemetic shift right of [dstIndex<<dstScale + dstDisp] by srcReg
32285       * </PRE>
32286       *
32287       * @param dstIndex the destination index register
32288       * @param dstScale the destination shift amount
32289       * @param dstDisp the destination displacement
32290       * @param srcReg must always be ECX
32291       */
32292      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
32293      public final void emitSAR_RegOff_Reg_Quad(GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
32294        int miStart = mi;
32295        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
32296        // no size prefix
32297        generateREXprefix(true, null, dstIndex, null);
32298        setMachineCodes(mi++, (byte) 0xD3);
32299        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
32300        if (lister != null) lister.RFDR(miStart, "SAR", dstIndex, dstScale, dstDisp, srcReg);
32301      }
32302    
32303      /**
32304       * Generate an absolute--register SAR. That is,
32305       * <PRE>
32306       * arithemetic shift right of [dstDisp] by srcReg
32307       * </PRE>
32308       *
32309       * @param dstDisp the destination displacement
32310       * @param srcReg must always be ECX
32311       */
32312      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
32313      public final void emitSAR_Abs_Reg_Quad(Address dstDisp, GPR srcReg) {
32314        int miStart = mi;
32315        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
32316        // no size prefix
32317        generateREXprefix(true, null, null, null);
32318        setMachineCodes(mi++, (byte) 0xD3);
32319        emitAbsRegOperands(dstDisp, GPR.getForOpcode(0x7));
32320        if (lister != null) lister.RAR(miStart, "SAR", dstDisp, srcReg);
32321      }
32322    
32323      /**
32324       * Generate a register-displacement--register SAR. That is,
32325       * <PRE>
32326       * arithemetic shift right of [dstBase + dstIndex<<dstScale + dstDisp] by srcReg
32327       * </PRE>
32328       *
32329       * @param dstBase the destination base register
32330       * @param dstIndex the destination index register
32331       * @param dstScale the destination shift amount
32332       * @param dstDisp the destination displacement
32333       * @param srcReg must always be ECX
32334       */
32335      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
32336      public final void emitSAR_RegIdx_Reg_Quad(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, GPR srcReg) {
32337        int miStart = mi;
32338        if (VM.VerifyAssertions) VM._assert(srcReg == ECX);
32339        // no size prefix
32340        generateREXprefix(true, null, dstIndex, dstBase);
32341        setMachineCodes(mi++, (byte) 0xD3);
32342        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, GPR.getForOpcode(0x7));
32343        if (lister != null) lister.RXDR(miStart, "SAR", dstBase, dstIndex, dstScale, dstDisp, srcReg);
32344      }
32345    
32346      /**
32347       * Generate a register--register--immediate SHLD. That is,
32348       * <PRE>
32349       * left <<= shiftBy (with bits from right shifted in)
32350       * </PRE>
32351       *
32352       * @param left the destination register
32353       * @param right the register containing bits that are shifted in
32354       * @param shiftBy the amount to shift by
32355       */
32356      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
32357      public final void emitSHLD_Reg_Reg_Imm(GPR left, GPR right, int shiftBy) {
32358        int miStart = mi;
32359        generateREXprefix(false, right, null, left);
32360        setMachineCodes(mi++, (byte) 0x0F);
32361        setMachineCodes(mi++, (byte) 0xA4);
32362        emitRegRegOperands(left, right);
32363        emitImm8((byte)shiftBy);
32364        if (lister != null) lister.RRI(miStart, "SHLD", left, right, shiftBy);
32365      }
32366    
32367      /**
32368       * Generate a register-indirect--register--immediate SHLD. That is,
32369       * <PRE>
32370       * [left] <<= shiftBy (with bits from right shifted in)
32371       * </PRE>
32372       *
32373       * @param left the destination base register
32374       * @param right the register containing bits that are shifted in
32375       * @param shiftBy the amount to shift by
32376       */
32377      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
32378      public final void emitSHLD_RegInd_Reg_Imm(GPR left, GPR right, int shiftBy) {
32379        int miStart = mi;
32380        generateREXprefix(false, right, null, left);
32381        setMachineCodes(mi++, (byte) 0x0F);
32382        setMachineCodes(mi++, (byte) 0xA4);
32383        emitRegIndirectRegOperands(left, right);
32384        emitImm8((byte)shiftBy);
32385        if (lister != null) lister.RNRI(miStart, "SHLD", left, right, shiftBy);
32386      }
32387    
32388      /**
32389       * Generate a register-displacement--register--immediate SHLD. That is,
32390       * <PRE>
32391       * [left + disp] <<= shiftBy (with bits from right shifted in)
32392       * </PRE>
32393       *
32394       * @param left the destination base register
32395       * @param disp the destination displacement
32396       * @param right the register containing bits that are shifted in
32397       * @param shiftBy the amount to shift by
32398       */
32399      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
32400      public final void emitSHLD_RegDisp_Reg_Imm(GPR left, Offset disp, GPR right, int shiftBy) {
32401        int miStart = mi;
32402        generateREXprefix(false, right, null, left);
32403        setMachineCodes(mi++, (byte) 0x0F);
32404        setMachineCodes(mi++, (byte) 0xA4);
32405        emitRegDispRegOperands(left, disp, right);
32406        emitImm8((byte)shiftBy);
32407        if (lister != null) lister.RDRI(miStart, "SHLD", left, disp, right, shiftBy);
32408      }
32409    
32410      /**
32411       * Generate a register-index--register--immediate SHLD. That is,
32412       * <PRE>
32413       * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
32414       * </PRE>
32415       *
32416       * @param leftBase the destination base register
32417       * @param leftIndex the destination index register
32418       * @param scale the destination scale
32419       * @param disp the destination displacement
32420       * @param right the register containing bits that are shifted in
32421       * @param shiftBy the amount to shift by
32422       */
32423      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
32424      public final void emitSHLD_RegIdx_Reg_Imm(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) {
32425        int miStart = mi;
32426        generateREXprefix(false, right, leftIndex, leftBase);
32427        setMachineCodes(mi++, (byte) 0x0F);
32428        setMachineCodes(mi++, (byte) 0xA4);
32429        emitSIBRegOperands(leftBase, leftIndex, scale, disp, right);
32430        emitImm8((byte)shiftBy);
32431        if (lister != null) lister.RXDRI(miStart, "SHLD", leftBase, leftIndex, scale, disp, right, shiftBy);
32432      }
32433    
32434      /**
32435       * Generate a register-offset--register--immediate SHLD. That is,
32436       * <PRE>
32437       * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
32438       * </PRE>
32439       *
32440       * @param leftIndex the destination index register
32441       * @param scale the destination scale
32442       * @param disp the destination displacement
32443       * @param right the register containing bits that are shifted in
32444       * @param shiftBy the amount to shift by
32445       */
32446      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
32447      public final void emitSHLD_RegOff_Reg_Imm(GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) {
32448        int miStart = mi;
32449        generateREXprefix(false, right, leftIndex, null);
32450        setMachineCodes(mi++, (byte) 0x0F);
32451        setMachineCodes(mi++, (byte) 0xA4);
32452        emitRegOffRegOperands(leftIndex, scale, disp, right);
32453        emitImm8((byte)shiftBy);
32454        if (lister != null) lister.RFDRI(miStart, "SHLD", leftIndex, scale, disp, right, shiftBy);
32455      }
32456    
32457      /**
32458       * Generate an absolute--register--immediate SHLD. That is,
32459       * <PRE>
32460       * [disp] <<= shiftBy (with bits from right shifted in)
32461       * </PRE>
32462       *
32463       * @param disp the destination displacement
32464       * @param right the register containing bits that are shifted in
32465       * @param shiftBy the amount to shift by
32466       */
32467      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
32468      public final void emitSHLD_Abs_Reg_Imm(Address disp, GPR right, int shiftBy) {
32469        int miStart = mi;
32470        generateREXprefix(false, right, null, null);
32471        setMachineCodes(mi++, (byte) 0x0F);
32472        setMachineCodes(mi++, (byte) 0xA4);
32473        emitAbsRegOperands(disp, right);
32474        emitImm8((byte)shiftBy);
32475        if (lister != null) lister.RARI(miStart, "SHLD", disp, right, shiftBy);
32476      }
32477    
32478      /**
32479       * Generate a register--register--register SHLD. That is,
32480       * <PRE>
32481       * left <<= shiftBy (with bits from right shifted in)
32482       * </PRE>
32483       *
32484       * @param left the destination register
32485       * @param right the register containing bits that are shifted in
32486       * @param shiftBy must be ECX
32487       */
32488      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
32489      public final void emitSHLD_Reg_Reg_Reg(GPR left, GPR right, GPR shiftBy) {
32490        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32491        int miStart = mi;
32492        generateREXprefix(false, right, null, left);
32493        setMachineCodes(mi++, (byte) 0x0F);
32494        setMachineCodes(mi++, (byte) 0xA5);
32495        emitRegRegOperands(left, right);
32496        if (lister != null) lister.RRR(miStart, "SHLD", left, right, shiftBy);
32497      }
32498    
32499      /**
32500       * Generate a register-indirect--register--register SHLD. That is,
32501       * <PRE>
32502       * [left] <<= shiftBy (with bits from right shifted in)
32503       * </PRE>
32504       *
32505       * @param left the destination base register
32506       * @param right the register containing bits that are shifted in
32507       * @param shiftBy must be ECX
32508       */
32509      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
32510      public final void emitSHLD_RegInd_Reg_Reg(GPR left, GPR right, GPR shiftBy) {
32511        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32512        int miStart = mi;
32513        generateREXprefix(false, right, null, left);
32514        setMachineCodes(mi++, (byte) 0x0F);
32515        setMachineCodes(mi++, (byte) 0xA5);
32516        emitRegIndirectRegOperands(left, right);
32517        if (lister != null) lister.RNRR(miStart, "SHLD", left, right, shiftBy);
32518      }
32519    
32520      /**
32521       * Generate a register-displacement--register--register SHLD. That is,
32522       * <PRE>
32523       * [left + disp] <<= shiftBy (with bits from right shifted in)
32524       * </PRE>
32525       *
32526       * @param left the destination base register
32527       * @param disp the destination displacement
32528       * @param right the register containing bits that are shifted in
32529       * @param shiftBy must be ECX
32530       */
32531      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3,4})
32532      public final void emitSHLD_RegDisp_Reg_Reg(GPR left, Offset disp, GPR right, GPR shiftBy) {
32533        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32534        int miStart = mi;
32535        generateREXprefix(false, right, null, left);
32536        setMachineCodes(mi++, (byte) 0x0F);
32537        setMachineCodes(mi++, (byte) 0xA5);
32538        emitRegDispRegOperands(left, disp, right);
32539        if (lister != null) lister.RDRR(miStart, "SHLD", left, disp, right, shiftBy);
32540      }
32541    
32542      /**
32543       * Generate a register-index--register--register SHLD. That is,
32544       * <PRE>
32545       * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
32546       * </PRE>
32547       *
32548       * @param leftBase the destination base register
32549       * @param leftIndex the destination index register
32550       * @param scale the destination scale
32551       * @param disp the destination displacement
32552       * @param right the register containing bits that are shifted in
32553       * @param shiftBy must be ECX
32554       */
32555      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5,6})
32556      public final void emitSHLD_RegIdx_Reg_Reg(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) {
32557        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32558        int miStart = mi;
32559        generateREXprefix(false, right, leftIndex, leftBase);
32560        setMachineCodes(mi++, (byte) 0x0F);
32561        setMachineCodes(mi++, (byte) 0xA5);
32562        emitSIBRegOperands(leftBase, leftIndex, scale, disp, right);
32563        if (lister != null) lister.RXDRR(miStart, "SHLD", leftBase, leftIndex, scale, disp, right, shiftBy);
32564      }
32565    
32566      /**
32567       * Generate a register-index--register--register SHLD. That is,
32568       * <PRE>
32569       * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
32570       * </PRE>
32571       *
32572       * @param leftIndex the destination index register
32573       * @param scale the destination scale
32574       * @param disp the destination displacement
32575       * @param right the register containing bits that are shifted in
32576       * @param shiftBy must be ECX
32577       */
32578      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4,5})
32579      public final void emitSHLD_RegOff_Reg_Reg(GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) {
32580        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32581        int miStart = mi;
32582        generateREXprefix(false, right, leftIndex, null);
32583        setMachineCodes(mi++, (byte) 0x0F);
32584        setMachineCodes(mi++, (byte) 0xA5);
32585        emitRegOffRegOperands(leftIndex, scale, disp, right);
32586        if (lister != null) lister.RFDRR(miStart, "SHLD", leftIndex, scale, disp, right, shiftBy);
32587      }
32588    
32589      /**
32590       * Generate a register-index--register--register SHLD. That is,
32591       * <PRE>
32592       * [disp] <<= shiftBy (with bits from right shifted in)
32593       * </PRE>
32594       *
32595       * @param disp the destination displacement
32596       * @param right the register containing bits that are shifted in
32597       * @param shiftBy must be ECX
32598       */
32599      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
32600      public final void emitSHLD_Abs_Reg_Reg(Address disp, GPR right, GPR shiftBy) {
32601        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32602        int miStart = mi;
32603        generateREXprefix(false, right, null, null);
32604        setMachineCodes(mi++, (byte) 0x0F);
32605        setMachineCodes(mi++, (byte) 0xA5);
32606        emitAbsRegOperands(disp, right);
32607        if (lister != null) lister.RARR(miStart, "SHLD", disp, right, shiftBy);
32608      }
32609    
32610      /**
32611       * Generate a register--register--immediate SHLD. That is,
32612       * <PRE>
32613       * left <<= shiftBy (with bits from right shifted in)
32614       * </PRE>
32615       *
32616       * @param left the destination register
32617       * @param right the register containing bits that are shifted in
32618       * @param shiftBy the amount to shift by
32619       */
32620      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
32621      public final void emitSHLD_Reg_Reg_Imm_Quad(GPR left, GPR right, int shiftBy) {
32622        int miStart = mi;
32623        generateREXprefix(true, right, null, left);
32624        setMachineCodes(mi++, (byte) 0x0F);
32625        setMachineCodes(mi++, (byte) 0xA4);
32626        emitRegRegOperands(left, right);
32627        emitImm8((byte)shiftBy);
32628        if (lister != null) lister.RRI(miStart, "SHLD", left, right, shiftBy);
32629      }
32630    
32631      /**
32632       * Generate a register-indirect--register--immediate SHLD. That is,
32633       * <PRE>
32634       * [left] <<= shiftBy (with bits from right shifted in)
32635       * </PRE>
32636       *
32637       * @param left the destination base register
32638       * @param right the register containing bits that are shifted in
32639       * @param shiftBy the amount to shift by
32640       */
32641      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
32642      public final void emitSHLD_RegInd_Reg_Imm_Quad(GPR left, GPR right, int shiftBy) {
32643        int miStart = mi;
32644        generateREXprefix(true, right, null, left);
32645        setMachineCodes(mi++, (byte) 0x0F);
32646        setMachineCodes(mi++, (byte) 0xA4);
32647        emitRegIndirectRegOperands(left, right);
32648        emitImm8((byte)shiftBy);
32649        if (lister != null) lister.RNRI(miStart, "SHLD", left, right, shiftBy);
32650      }
32651    
32652      /**
32653       * Generate a register-displacement--register--immediate SHLD. That is,
32654       * <PRE>
32655       * [left + disp] <<= shiftBy (with bits from right shifted in)
32656       * </PRE>
32657       *
32658       * @param left the destination base register
32659       * @param disp the destination displacement
32660       * @param right the register containing bits that are shifted in
32661       * @param shiftBy the amount to shift by
32662       */
32663      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
32664      public final void emitSHLD_RegDisp_Reg_Imm_Quad(GPR left, Offset disp, GPR right, int shiftBy) {
32665        int miStart = mi;
32666        generateREXprefix(true, right, null, left);
32667        setMachineCodes(mi++, (byte) 0x0F);
32668        setMachineCodes(mi++, (byte) 0xA4);
32669        emitRegDispRegOperands(left, disp, right);
32670        emitImm8((byte)shiftBy);
32671        if (lister != null) lister.RDRI(miStart, "SHLD", left, disp, right, shiftBy);
32672      }
32673    
32674      /**
32675       * Generate a register-index--register--immediate SHLD. That is,
32676       * <PRE>
32677       * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
32678       * </PRE>
32679       *
32680       * @param leftBase the destination base register
32681       * @param leftIndex the destination index register
32682       * @param scale the destination scale
32683       * @param disp the destination displacement
32684       * @param right the register containing bits that are shifted in
32685       * @param shiftBy the amount to shift by
32686       */
32687      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
32688      public final void emitSHLD_RegIdx_Reg_Imm_Quad(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) {
32689        int miStart = mi;
32690        generateREXprefix(true, right, leftIndex, leftBase);
32691        setMachineCodes(mi++, (byte) 0x0F);
32692        setMachineCodes(mi++, (byte) 0xA4);
32693        emitSIBRegOperands(leftBase, leftIndex, scale, disp, right);
32694        emitImm8((byte)shiftBy);
32695        if (lister != null) lister.RXDRI(miStart, "SHLD", leftBase, leftIndex, scale, disp, right, shiftBy);
32696      }
32697    
32698      /**
32699       * Generate a register-offset--register--immediate SHLD. That is,
32700       * <PRE>
32701       * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
32702       * </PRE>
32703       *
32704       * @param leftIndex the destination index register
32705       * @param scale the destination scale
32706       * @param disp the destination displacement
32707       * @param right the register containing bits that are shifted in
32708       * @param shiftBy the amount to shift by
32709       */
32710      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
32711      public final void emitSHLD_RegOff_Reg_Imm_Quad(GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) {
32712        int miStart = mi;
32713        generateREXprefix(true, right, leftIndex, null);
32714        setMachineCodes(mi++, (byte) 0x0F);
32715        setMachineCodes(mi++, (byte) 0xA4);
32716        emitRegOffRegOperands(leftIndex, scale, disp, right);
32717        emitImm8((byte)shiftBy);
32718        if (lister != null) lister.RFDRI(miStart, "SHLD", leftIndex, scale, disp, right, shiftBy);
32719      }
32720    
32721      /**
32722       * Generate an absolute--register--immediate SHLD. That is,
32723       * <PRE>
32724       * [disp] <<= shiftBy (with bits from right shifted in)
32725       * </PRE>
32726       *
32727       * @param disp the destination displacement
32728       * @param right the register containing bits that are shifted in
32729       * @param shiftBy the amount to shift by
32730       */
32731      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
32732      public final void emitSHLD_Abs_Reg_Imm_Quad(Address disp, GPR right, int shiftBy) {
32733        int miStart = mi;
32734        generateREXprefix(true, right, null, null);
32735        setMachineCodes(mi++, (byte) 0x0F);
32736        setMachineCodes(mi++, (byte) 0xA4);
32737        emitAbsRegOperands(disp, right);
32738        emitImm8((byte)shiftBy);
32739        if (lister != null) lister.RARI(miStart, "SHLD", disp, right, shiftBy);
32740      }
32741    
32742      /**
32743       * Generate a register--register--register SHLD. That is,
32744       * <PRE>
32745       * left <<= shiftBy (with bits from right shifted in)
32746       * </PRE>
32747       *
32748       * @param left the destination register
32749       * @param right the register containing bits that are shifted in
32750       * @param shiftBy must be ECX
32751       */
32752      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
32753      public final void emitSHLD_Reg_Reg_Reg_Quad(GPR left, GPR right, GPR shiftBy) {
32754        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32755        int miStart = mi;
32756        generateREXprefix(true, right, null, left);
32757        setMachineCodes(mi++, (byte) 0x0F);
32758        setMachineCodes(mi++, (byte) 0xA5);
32759        emitRegRegOperands(left, right);
32760        if (lister != null) lister.RRR(miStart, "SHLD", left, right, shiftBy);
32761      }
32762    
32763      /**
32764       * Generate a register-indirect--register--register SHLD. That is,
32765       * <PRE>
32766       * [left] <<= shiftBy (with bits from right shifted in)
32767       * </PRE>
32768       *
32769       * @param left the destination base register
32770       * @param right the register containing bits that are shifted in
32771       * @param shiftBy must be ECX
32772       */
32773      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
32774      public final void emitSHLD_RegInd_Reg_Reg_Quad(GPR left, GPR right, GPR shiftBy) {
32775        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32776        int miStart = mi;
32777        generateREXprefix(true, right, null, left);
32778        setMachineCodes(mi++, (byte) 0x0F);
32779        setMachineCodes(mi++, (byte) 0xA5);
32780        emitRegIndirectRegOperands(left, right);
32781        if (lister != null) lister.RNRR(miStart, "SHLD", left, right, shiftBy);
32782      }
32783    
32784      /**
32785       * Generate a register-displacement--register--register SHLD. That is,
32786       * <PRE>
32787       * [left + disp] <<= shiftBy (with bits from right shifted in)
32788       * </PRE>
32789       *
32790       * @param left the destination base register
32791       * @param disp the destination displacement
32792       * @param right the register containing bits that are shifted in
32793       * @param shiftBy must be ECX
32794       */
32795      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3,4})
32796      public final void emitSHLD_RegDisp_Reg_Reg_Quad(GPR left, Offset disp, GPR right, GPR shiftBy) {
32797        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32798        int miStart = mi;
32799        generateREXprefix(true, right, null, left);
32800        setMachineCodes(mi++, (byte) 0x0F);
32801        setMachineCodes(mi++, (byte) 0xA5);
32802        emitRegDispRegOperands(left, disp, right);
32803        if (lister != null) lister.RDRR(miStart, "SHLD", left, disp, right, shiftBy);
32804      }
32805    
32806      /**
32807       * Generate a register-index--register--register SHLD. That is,
32808       * <PRE>
32809       * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
32810       * </PRE>
32811       *
32812       * @param leftBase the destination base register
32813       * @param leftIndex the destination index register
32814       * @param scale the destination scale
32815       * @param disp the destination displacement
32816       * @param right the register containing bits that are shifted in
32817       * @param shiftBy must be ECX
32818       */
32819      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5,6})
32820      public final void emitSHLD_RegIdx_Reg_Reg_Quad(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) {
32821        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32822        int miStart = mi;
32823        generateREXprefix(true, right, leftIndex, leftBase);
32824        setMachineCodes(mi++, (byte) 0x0F);
32825        setMachineCodes(mi++, (byte) 0xA5);
32826        emitSIBRegOperands(leftBase, leftIndex, scale, disp, right);
32827        if (lister != null) lister.RXDRR(miStart, "SHLD", leftBase, leftIndex, scale, disp, right, shiftBy);
32828      }
32829    
32830      /**
32831       * Generate a register-index--register--register SHLD. That is,
32832       * <PRE>
32833       * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
32834       * </PRE>
32835       *
32836       * @param leftIndex the destination index register
32837       * @param scale the destination scale
32838       * @param disp the destination displacement
32839       * @param right the register containing bits that are shifted in
32840       * @param shiftBy must be ECX
32841       */
32842      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4,5})
32843      public final void emitSHLD_RegOff_Reg_Reg_Quad(GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) {
32844        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32845        int miStart = mi;
32846        generateREXprefix(true, right, leftIndex, null);
32847        setMachineCodes(mi++, (byte) 0x0F);
32848        setMachineCodes(mi++, (byte) 0xA5);
32849        emitRegOffRegOperands(leftIndex, scale, disp, right);
32850        if (lister != null) lister.RFDRR(miStart, "SHLD", leftIndex, scale, disp, right, shiftBy);
32851      }
32852    
32853      /**
32854       * Generate a register-index--register--register SHLD. That is,
32855       * <PRE>
32856       * [disp] <<= shiftBy (with bits from right shifted in)
32857       * </PRE>
32858       *
32859       * @param disp the destination displacement
32860       * @param right the register containing bits that are shifted in
32861       * @param shiftBy must be ECX
32862       */
32863      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
32864      public final void emitSHLD_Abs_Reg_Reg_Quad(Address disp, GPR right, GPR shiftBy) {
32865        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
32866        int miStart = mi;
32867        generateREXprefix(true, right, null, null);
32868        setMachineCodes(mi++, (byte) 0x0F);
32869        setMachineCodes(mi++, (byte) 0xA5);
32870        emitAbsRegOperands(disp, right);
32871        if (lister != null) lister.RARR(miStart, "SHLD", disp, right, shiftBy);
32872      }
32873    
32874      /**
32875       * Generate a register--register--immediate SHRD. That is,
32876       * <PRE>
32877       * left <<= shiftBy (with bits from right shifted in)
32878       * </PRE>
32879       *
32880       * @param left the destination register
32881       * @param right the register containing bits that are shifted in
32882       * @param shiftBy the amount to shift by
32883       */
32884      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
32885      public final void emitSHRD_Reg_Reg_Imm(GPR left, GPR right, int shiftBy) {
32886        int miStart = mi;
32887        generateREXprefix(false, right, null, left);
32888        setMachineCodes(mi++, (byte) 0x0F);
32889        setMachineCodes(mi++, (byte) 0xAC);
32890        emitRegRegOperands(left, right);
32891        emitImm8((byte)shiftBy);
32892        if (lister != null) lister.RRI(miStart, "SHRD", left, right, shiftBy);
32893      }
32894    
32895      /**
32896       * Generate a register-indirect--register--immediate SHRD. That is,
32897       * <PRE>
32898       * [left] <<= shiftBy (with bits from right shifted in)
32899       * </PRE>
32900       *
32901       * @param left the destination base register
32902       * @param right the register containing bits that are shifted in
32903       * @param shiftBy the amount to shift by
32904       */
32905      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
32906      public final void emitSHRD_RegInd_Reg_Imm(GPR left, GPR right, int shiftBy) {
32907        int miStart = mi;
32908        generateREXprefix(false, right, null, left);
32909        setMachineCodes(mi++, (byte) 0x0F);
32910        setMachineCodes(mi++, (byte) 0xAC);
32911        emitRegIndirectRegOperands(left, right);
32912        emitImm8((byte)shiftBy);
32913        if (lister != null) lister.RNRI(miStart, "SHRD", left, right, shiftBy);
32914      }
32915    
32916      /**
32917       * Generate a register-displacement--register--immediate SHRD. That is,
32918       * <PRE>
32919       * [left + disp] <<= shiftBy (with bits from right shifted in)
32920       * </PRE>
32921       *
32922       * @param left the destination base register
32923       * @param disp the destination displacement
32924       * @param right the register containing bits that are shifted in
32925       * @param shiftBy the amount to shift by
32926       */
32927      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
32928      public final void emitSHRD_RegDisp_Reg_Imm(GPR left, Offset disp, GPR right, int shiftBy) {
32929        int miStart = mi;
32930        generateREXprefix(false, right, null, left);
32931        setMachineCodes(mi++, (byte) 0x0F);
32932        setMachineCodes(mi++, (byte) 0xAC);
32933        emitRegDispRegOperands(left, disp, right);
32934        emitImm8((byte)shiftBy);
32935        if (lister != null) lister.RDRI(miStart, "SHRD", left, disp, right, shiftBy);
32936      }
32937    
32938      /**
32939       * Generate a register-index--register--immediate SHRD. That is,
32940       * <PRE>
32941       * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
32942       * </PRE>
32943       *
32944       * @param leftBase the destination base register
32945       * @param leftIndex the destination index register
32946       * @param scale the destination scale
32947       * @param disp the destination displacement
32948       * @param right the register containing bits that are shifted in
32949       * @param shiftBy the amount to shift by
32950       */
32951      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
32952      public final void emitSHRD_RegIdx_Reg_Imm(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) {
32953        int miStart = mi;
32954        generateREXprefix(false, right, leftIndex, leftBase);
32955        setMachineCodes(mi++, (byte) 0x0F);
32956        setMachineCodes(mi++, (byte) 0xAC);
32957        emitSIBRegOperands(leftBase, leftIndex, scale, disp, right);
32958        emitImm8((byte)shiftBy);
32959        if (lister != null) lister.RXDRI(miStart, "SHRD", leftBase, leftIndex, scale, disp, right, shiftBy);
32960      }
32961    
32962      /**
32963       * Generate a register-offset--register--immediate SHRD. That is,
32964       * <PRE>
32965       * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
32966       * </PRE>
32967       *
32968       * @param leftIndex the destination index register
32969       * @param scale the destination scale
32970       * @param disp the destination displacement
32971       * @param right the register containing bits that are shifted in
32972       * @param shiftBy the amount to shift by
32973       */
32974      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
32975      public final void emitSHRD_RegOff_Reg_Imm(GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) {
32976        int miStart = mi;
32977        generateREXprefix(false, right, leftIndex, null);
32978        setMachineCodes(mi++, (byte) 0x0F);
32979        setMachineCodes(mi++, (byte) 0xAC);
32980        emitRegOffRegOperands(leftIndex, scale, disp, right);
32981        emitImm8((byte)shiftBy);
32982        if (lister != null) lister.RFDRI(miStart, "SHRD", leftIndex, scale, disp, right, shiftBy);
32983      }
32984    
32985      /**
32986       * Generate an absolute--register--immediate SHRD. That is,
32987       * <PRE>
32988       * [disp] <<= shiftBy (with bits from right shifted in)
32989       * </PRE>
32990       *
32991       * @param disp the destination displacement
32992       * @param right the register containing bits that are shifted in
32993       * @param shiftBy the amount to shift by
32994       */
32995      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
32996      public final void emitSHRD_Abs_Reg_Imm(Address disp, GPR right, int shiftBy) {
32997        int miStart = mi;
32998        generateREXprefix(false, right, null, null);
32999        setMachineCodes(mi++, (byte) 0x0F);
33000        setMachineCodes(mi++, (byte) 0xAC);
33001        emitAbsRegOperands(disp, right);
33002        emitImm8((byte)shiftBy);
33003        if (lister != null) lister.RARI(miStart, "SHRD", disp, right, shiftBy);
33004      }
33005    
33006      /**
33007       * Generate a register--register--register SHRD. That is,
33008       * <PRE>
33009       * left <<= shiftBy (with bits from right shifted in)
33010       * </PRE>
33011       *
33012       * @param left the destination register
33013       * @param right the register containing bits that are shifted in
33014       * @param shiftBy must be ECX
33015       */
33016      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
33017      public final void emitSHRD_Reg_Reg_Reg(GPR left, GPR right, GPR shiftBy) {
33018        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33019        int miStart = mi;
33020        generateREXprefix(false, right, null, left);
33021        setMachineCodes(mi++, (byte) 0x0F);
33022        setMachineCodes(mi++, (byte) 0xAD);
33023        emitRegRegOperands(left, right);
33024        if (lister != null) lister.RRR(miStart, "SHRD", left, right, shiftBy);
33025      }
33026    
33027      /**
33028       * Generate a register-indirect--register--register SHRD. That is,
33029       * <PRE>
33030       * [left] <<= shiftBy (with bits from right shifted in)
33031       * </PRE>
33032       *
33033       * @param left the destination base register
33034       * @param right the register containing bits that are shifted in
33035       * @param shiftBy must be ECX
33036       */
33037      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
33038      public final void emitSHRD_RegInd_Reg_Reg(GPR left, GPR right, GPR shiftBy) {
33039        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33040        int miStart = mi;
33041        generateREXprefix(false, right, null, left);
33042        setMachineCodes(mi++, (byte) 0x0F);
33043        setMachineCodes(mi++, (byte) 0xAD);
33044        emitRegIndirectRegOperands(left, right);
33045        if (lister != null) lister.RNRR(miStart, "SHRD", left, right, shiftBy);
33046      }
33047    
33048      /**
33049       * Generate a register-displacement--register--register SHRD. That is,
33050       * <PRE>
33051       * [left + disp] <<= shiftBy (with bits from right shifted in)
33052       * </PRE>
33053       *
33054       * @param left the destination base register
33055       * @param disp the destination displacement
33056       * @param right the register containing bits that are shifted in
33057       * @param shiftBy must be ECX
33058       */
33059      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3,4})
33060      public final void emitSHRD_RegDisp_Reg_Reg(GPR left, Offset disp, GPR right, GPR shiftBy) {
33061        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33062        int miStart = mi;
33063        generateREXprefix(false, right, null, left);
33064        setMachineCodes(mi++, (byte) 0x0F);
33065        setMachineCodes(mi++, (byte) 0xAD);
33066        emitRegDispRegOperands(left, disp, right);
33067        if (lister != null) lister.RDRR(miStart, "SHRD", left, disp, right, shiftBy);
33068      }
33069    
33070      /**
33071       * Generate a register-index--register--register SHRD. That is,
33072       * <PRE>
33073       * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
33074       * </PRE>
33075       *
33076       * @param leftBase the destination base register
33077       * @param leftIndex the destination index register
33078       * @param scale the destination scale
33079       * @param disp the destination displacement
33080       * @param right the register containing bits that are shifted in
33081       * @param shiftBy must be ECX
33082       */
33083      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5,6})
33084      public final void emitSHRD_RegIdx_Reg_Reg(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) {
33085        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33086        int miStart = mi;
33087        generateREXprefix(false, right, leftIndex, leftBase);
33088        setMachineCodes(mi++, (byte) 0x0F);
33089        setMachineCodes(mi++, (byte) 0xAD);
33090        emitSIBRegOperands(leftBase, leftIndex, scale, disp, right);
33091        if (lister != null) lister.RXDRR(miStart, "SHRD", leftBase, leftIndex, scale, disp, right, shiftBy);
33092      }
33093    
33094      /**
33095       * Generate a register-index--register--register SHRD. That is,
33096       * <PRE>
33097       * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
33098       * </PRE>
33099       *
33100       * @param leftIndex the destination index register
33101       * @param scale the destination scale
33102       * @param disp the destination displacement
33103       * @param right the register containing bits that are shifted in
33104       * @param shiftBy must be ECX
33105       */
33106      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4,5})
33107      public final void emitSHRD_RegOff_Reg_Reg(GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) {
33108        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33109        int miStart = mi;
33110        generateREXprefix(false, right, leftIndex, null);
33111        setMachineCodes(mi++, (byte) 0x0F);
33112        setMachineCodes(mi++, (byte) 0xAD);
33113        emitRegOffRegOperands(leftIndex, scale, disp, right);
33114        if (lister != null) lister.RFDRR(miStart, "SHRD", leftIndex, scale, disp, right, shiftBy);
33115      }
33116    
33117      /**
33118       * Generate a register-index--register--register SHRD. That is,
33119       * <PRE>
33120       * [disp] <<= shiftBy (with bits from right shifted in)
33121       * </PRE>
33122       *
33123       * @param disp the destination displacement
33124       * @param right the register containing bits that are shifted in
33125       * @param shiftBy must be ECX
33126       */
33127      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
33128      public final void emitSHRD_Abs_Reg_Reg(Address disp, GPR right, GPR shiftBy) {
33129        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33130        int miStart = mi;
33131        generateREXprefix(false, right, null, null);
33132        setMachineCodes(mi++, (byte) 0x0F);
33133        setMachineCodes(mi++, (byte) 0xAD);
33134        emitAbsRegOperands(disp, right);
33135        if (lister != null) lister.RARR(miStart, "SHRD", disp, right, shiftBy);
33136      }
33137    
33138      /**
33139       * Generate a register--register--immediate SHRD. That is,
33140       * <PRE>
33141       * left <<= shiftBy (with bits from right shifted in)
33142       * </PRE>
33143       *
33144       * @param left the destination register
33145       * @param right the register containing bits that are shifted in
33146       * @param shiftBy the amount to shift by
33147       */
33148      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33149      public final void emitSHRD_Reg_Reg_Imm_Quad(GPR left, GPR right, int shiftBy) {
33150        int miStart = mi;
33151        generateREXprefix(true, right, null, left);
33152        setMachineCodes(mi++, (byte) 0x0F);
33153        setMachineCodes(mi++, (byte) 0xAC);
33154        emitRegRegOperands(left, right);
33155        emitImm8((byte)shiftBy);
33156        if (lister != null) lister.RRI(miStart, "SHRD", left, right, shiftBy);
33157      }
33158    
33159      /**
33160       * Generate a register-indirect--register--immediate SHRD. That is,
33161       * <PRE>
33162       * [left] <<= shiftBy (with bits from right shifted in)
33163       * </PRE>
33164       *
33165       * @param left the destination base register
33166       * @param right the register containing bits that are shifted in
33167       * @param shiftBy the amount to shift by
33168       */
33169      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33170      public final void emitSHRD_RegInd_Reg_Imm_Quad(GPR left, GPR right, int shiftBy) {
33171        int miStart = mi;
33172        generateREXprefix(true, right, null, left);
33173        setMachineCodes(mi++, (byte) 0x0F);
33174        setMachineCodes(mi++, (byte) 0xAC);
33175        emitRegIndirectRegOperands(left, right);
33176        emitImm8((byte)shiftBy);
33177        if (lister != null) lister.RNRI(miStart, "SHRD", left, right, shiftBy);
33178      }
33179    
33180      /**
33181       * Generate a register-displacement--register--immediate SHRD. That is,
33182       * <PRE>
33183       * [left + disp] <<= shiftBy (with bits from right shifted in)
33184       * </PRE>
33185       *
33186       * @param left the destination base register
33187       * @param disp the destination displacement
33188       * @param right the register containing bits that are shifted in
33189       * @param shiftBy the amount to shift by
33190       */
33191      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
33192      public final void emitSHRD_RegDisp_Reg_Imm_Quad(GPR left, Offset disp, GPR right, int shiftBy) {
33193        int miStart = mi;
33194        generateREXprefix(true, right, null, left);
33195        setMachineCodes(mi++, (byte) 0x0F);
33196        setMachineCodes(mi++, (byte) 0xAC);
33197        emitRegDispRegOperands(left, disp, right);
33198        emitImm8((byte)shiftBy);
33199        if (lister != null) lister.RDRI(miStart, "SHRD", left, disp, right, shiftBy);
33200      }
33201    
33202      /**
33203       * Generate a register-index--register--immediate SHRD. That is,
33204       * <PRE>
33205       * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
33206       * </PRE>
33207       *
33208       * @param leftBase the destination base register
33209       * @param leftIndex the destination index register
33210       * @param scale the destination scale
33211       * @param disp the destination displacement
33212       * @param right the register containing bits that are shifted in
33213       * @param shiftBy the amount to shift by
33214       */
33215      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
33216      public final void emitSHRD_RegIdx_Reg_Imm_Quad(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) {
33217        int miStart = mi;
33218        generateREXprefix(true, right, leftIndex, leftBase);
33219        setMachineCodes(mi++, (byte) 0x0F);
33220        setMachineCodes(mi++, (byte) 0xAC);
33221        emitSIBRegOperands(leftBase, leftIndex, scale, disp, right);
33222        emitImm8((byte)shiftBy);
33223        if (lister != null) lister.RXDRI(miStart, "SHRD", leftBase, leftIndex, scale, disp, right, shiftBy);
33224      }
33225    
33226      /**
33227       * Generate a register-offset--register--immediate SHRD. That is,
33228       * <PRE>
33229       * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
33230       * </PRE>
33231       *
33232       * @param leftIndex the destination index register
33233       * @param scale the destination scale
33234       * @param disp the destination displacement
33235       * @param right the register containing bits that are shifted in
33236       * @param shiftBy the amount to shift by
33237       */
33238      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
33239      public final void emitSHRD_RegOff_Reg_Imm_Quad(GPR leftIndex, short scale, Offset disp, GPR right, int shiftBy) {
33240        int miStart = mi;
33241        generateREXprefix(true, right, leftIndex, null);
33242        setMachineCodes(mi++, (byte) 0x0F);
33243        setMachineCodes(mi++, (byte) 0xAC);
33244        emitRegOffRegOperands(leftIndex, scale, disp, right);
33245        emitImm8((byte)shiftBy);
33246        if (lister != null) lister.RFDRI(miStart, "SHRD", leftIndex, scale, disp, right, shiftBy);
33247      }
33248    
33249      /**
33250       * Generate an absolute--register--immediate SHRD. That is,
33251       * <PRE>
33252       * [disp] <<= shiftBy (with bits from right shifted in)
33253       * </PRE>
33254       *
33255       * @param disp the destination displacement
33256       * @param right the register containing bits that are shifted in
33257       * @param shiftBy the amount to shift by
33258       */
33259      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
33260      public final void emitSHRD_Abs_Reg_Imm_Quad(Address disp, GPR right, int shiftBy) {
33261        int miStart = mi;
33262        generateREXprefix(true, right, null, null);
33263        setMachineCodes(mi++, (byte) 0x0F);
33264        setMachineCodes(mi++, (byte) 0xAC);
33265        emitAbsRegOperands(disp, right);
33266        emitImm8((byte)shiftBy);
33267        if (lister != null) lister.RARI(miStart, "SHRD", disp, right, shiftBy);
33268      }
33269    
33270      /**
33271       * Generate a register--register--register SHRD. That is,
33272       * <PRE>
33273       * left <<= shiftBy (with bits from right shifted in)
33274       * </PRE>
33275       *
33276       * @param left the destination register
33277       * @param right the register containing bits that are shifted in
33278       * @param shiftBy must be ECX
33279       */
33280      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
33281      public final void emitSHRD_Reg_Reg_Reg_Quad(GPR left, GPR right, GPR shiftBy) {
33282        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33283        int miStart = mi;
33284        generateREXprefix(true, right, null, left);
33285        setMachineCodes(mi++, (byte) 0x0F);
33286        setMachineCodes(mi++, (byte) 0xAD);
33287        emitRegRegOperands(left, right);
33288        if (lister != null) lister.RRR(miStart, "SHRD", left, right, shiftBy);
33289      }
33290    
33291      /**
33292       * Generate a register-indirect--register--register SHRD. That is,
33293       * <PRE>
33294       * [left] <<= shiftBy (with bits from right shifted in)
33295       * </PRE>
33296       *
33297       * @param left the destination base register
33298       * @param right the register containing bits that are shifted in
33299       * @param shiftBy must be ECX
33300       */
33301      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
33302      public final void emitSHRD_RegInd_Reg_Reg_Quad(GPR left, GPR right, GPR shiftBy) {
33303        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33304        int miStart = mi;
33305        generateREXprefix(true, right, null, left);
33306        setMachineCodes(mi++, (byte) 0x0F);
33307        setMachineCodes(mi++, (byte) 0xAD);
33308        emitRegIndirectRegOperands(left, right);
33309        if (lister != null) lister.RNRR(miStart, "SHRD", left, right, shiftBy);
33310      }
33311    
33312      /**
33313       * Generate a register-displacement--register--register SHRD. That is,
33314       * <PRE>
33315       * [left + disp] <<= shiftBy (with bits from right shifted in)
33316       * </PRE>
33317       *
33318       * @param left the destination base register
33319       * @param disp the destination displacement
33320       * @param right the register containing bits that are shifted in
33321       * @param shiftBy must be ECX
33322       */
33323      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3,4})
33324      public final void emitSHRD_RegDisp_Reg_Reg_Quad(GPR left, Offset disp, GPR right, GPR shiftBy) {
33325        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33326        int miStart = mi;
33327        generateREXprefix(true, right, null, left);
33328        setMachineCodes(mi++, (byte) 0x0F);
33329        setMachineCodes(mi++, (byte) 0xAD);
33330        emitRegDispRegOperands(left, disp, right);
33331        if (lister != null) lister.RDRR(miStart, "SHRD", left, disp, right, shiftBy);
33332      }
33333    
33334      /**
33335       * Generate a register-index--register--register SHRD. That is,
33336       * <PRE>
33337       * [leftBase + leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
33338       * </PRE>
33339       *
33340       * @param leftBase the destination base register
33341       * @param leftIndex the destination index register
33342       * @param scale the destination scale
33343       * @param disp the destination displacement
33344       * @param right the register containing bits that are shifted in
33345       * @param shiftBy must be ECX
33346       */
33347      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5,6})
33348      public final void emitSHRD_RegIdx_Reg_Reg_Quad(GPR leftBase, GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) {
33349        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33350        int miStart = mi;
33351        generateREXprefix(true, right, leftIndex, leftBase);
33352        setMachineCodes(mi++, (byte) 0x0F);
33353        setMachineCodes(mi++, (byte) 0xAD);
33354        emitSIBRegOperands(leftBase, leftIndex, scale, disp, right);
33355        if (lister != null) lister.RXDRR(miStart, "SHRD", leftBase, leftIndex, scale, disp, right, shiftBy);
33356      }
33357    
33358      /**
33359       * Generate a register-index--register--register SHRD. That is,
33360       * <PRE>
33361       * [leftIndex<<scale + disp] <<= shiftBy (with bits from right shifted in)
33362       * </PRE>
33363       *
33364       * @param leftIndex the destination index register
33365       * @param scale the destination scale
33366       * @param disp the destination displacement
33367       * @param right the register containing bits that are shifted in
33368       * @param shiftBy must be ECX
33369       */
33370      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4,5})
33371      public final void emitSHRD_RegOff_Reg_Reg_Quad(GPR leftIndex, short scale, Offset disp, GPR right, GPR shiftBy) {
33372        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33373        int miStart = mi;
33374        generateREXprefix(true, right, leftIndex, null);
33375        setMachineCodes(mi++, (byte) 0x0F);
33376        setMachineCodes(mi++, (byte) 0xAD);
33377        emitRegOffRegOperands(leftIndex, scale, disp, right);
33378        if (lister != null) lister.RFDRR(miStart, "SHRD", leftIndex, scale, disp, right, shiftBy);
33379      }
33380    
33381      /**
33382       * Generate a register-index--register--register SHRD. That is,
33383       * <PRE>
33384       * [disp] <<= shiftBy (with bits from right shifted in)
33385       * </PRE>
33386       *
33387       * @param disp the destination displacement
33388       * @param right the register containing bits that are shifted in
33389       * @param shiftBy must be ECX
33390       */
33391      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2,3})
33392      public final void emitSHRD_Abs_Reg_Reg_Quad(Address disp, GPR right, GPR shiftBy) {
33393        if (VM.VerifyAssertions) VM._assert(shiftBy == ECX);
33394        int miStart = mi;
33395        generateREXprefix(true, right, null, null);
33396        setMachineCodes(mi++, (byte) 0x0F);
33397        setMachineCodes(mi++, (byte) 0xAD);
33398        emitAbsRegOperands(disp, right);
33399        if (lister != null) lister.RARR(miStart, "SHRD", disp, right, shiftBy);
33400      }
33401    
33402      /**
33403       * Generate a register POP. That is,
33404       * <PRE>
33405       * pop dstReg, SP -= 4
33406       * </PRE>
33407       *
33408       * @param reg the destination register
33409       */
33410      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33411      public final void emitPOP_Reg (GPR reg) {
33412        int miStart = mi;
33413        generateREXprefix(false, null, null, reg);
33414        setMachineCodes(mi++, (byte) (0x58 + reg.valueForOpcode()));
33415        if (lister != null) lister.R(miStart, "POP", reg);
33416      }
33417    
33418      /**
33419       * Generate a register-displacement POP. That is,
33420       * <PRE>
33421       * pop [base + disp], SP -= 4
33422       * </PRE>
33423       *
33424       * @param base the base register
33425       * @param disp the displacement
33426       */
33427      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33428      public final void emitPOP_RegDisp (GPR base, Offset disp) {
33429        int miStart = mi;
33430        generateREXprefix(false, null, null, base);
33431        setMachineCodes(mi++, (byte) 0x8F);
33432        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x0));
33433        if (lister != null) lister.RD(miStart, "POP", base, disp);
33434      }
33435    
33436      /**
33437       * Generate a register-indirect POP. That is,
33438       * <PRE>
33439       * pop [base], SP -= 4
33440       * </PRE>
33441       *
33442       * @param base the base register
33443       */
33444      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33445      public final void emitPOP_RegInd (GPR base) {
33446        int miStart = mi;
33447        generateREXprefix(false, null, null, base);
33448        setMachineCodes(mi++, (byte) 0x8F);
33449        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x0));
33450        if (lister != null) lister.RN(miStart, "POP", base);
33451      }
33452    
33453      /**
33454       * Generate a register-index POP. That is,
33455       * <PRE>
33456       * pop [base + index<<scale + disp], SP -= 4
33457       * </PRE>
33458       *
33459       * @param base the base register
33460       * @param index the index register
33461       * @param scale the scale
33462       * @param disp the displacement
33463       */
33464      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33465      public final void emitPOP_RegIdx (GPR base, GPR index, short scale, Offset disp) {
33466        int miStart = mi;
33467        generateREXprefix(false, null, index, base);
33468        setMachineCodes(mi++, (byte) 0x8F);
33469        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x0));
33470        if (lister != null) lister.RXD(miStart, "POP", base, index, scale, disp);
33471      }
33472    
33473      /**
33474       * Generate a register-offset POP. That is,
33475       * <PRE>
33476       * pop [index<<scale + disp], SP -= 4
33477       * </PRE>
33478       *
33479       * @param index the index register
33480       * @param scale the scale
33481       * @param disp the displacement
33482       */
33483      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33484      public final void emitPOP_RegOff (GPR index, short scale, Offset disp) {
33485        int miStart = mi;
33486        generateREXprefix(false, null, index, null);
33487        setMachineCodes(mi++, (byte) 0x8F);
33488        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x0));
33489        if (lister != null) lister.RFD(miStart, "POP", index, scale, disp);
33490      }
33491    
33492      /**
33493       * Generate an absolute POP. That is,
33494       * <PRE>
33495       * pop [disp], SP -= 4
33496       * </PRE>
33497       *
33498       * @param disp the displacement
33499       */
33500      public final void emitPOP_Abs (Address disp) {
33501        int miStart = mi;
33502        setMachineCodes(mi++, (byte) 0x8F);
33503        emitAbsRegOperands(disp, GPR.getForOpcode(0x0));
33504        if (lister != null) lister.RA(miStart, "POP", disp);
33505      }
33506    
33507      /**
33508       * Generate a register PUSH. That is,
33509       * <PRE>
33510       * push dstReg, SP += 4
33511       * </PRE>
33512       *
33513       * @param reg the destination register
33514       */
33515      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33516      public final void emitPUSH_Reg (GPR reg) {
33517        int miStart = mi;
33518        generateREXprefix(false, null, null, reg);
33519        setMachineCodes(mi++, (byte) (0x50 + reg.valueForOpcode()));
33520        if (lister != null) lister.R(miStart, "PUSH", reg);
33521      }
33522    
33523      /**
33524       * Generate a register-displacement PUSH. That is,
33525       * <PRE>
33526       * push [base + disp], SP += 4
33527       * </PRE>
33528       *
33529       * @param base the base register
33530       * @param disp the displacement
33531       */
33532      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33533      public final void emitPUSH_RegDisp (GPR base, Offset disp) {
33534        int miStart = mi;
33535        generateREXprefix(false, null, null, base);
33536        setMachineCodes(mi++, (byte) 0xFF);
33537        emitRegDispRegOperands(base, disp, GPR.getForOpcode(0x6));
33538        if (lister != null) lister.RD(miStart, "PUSH", base, disp);
33539      }
33540    
33541      /**
33542       * Generate a register-indirect PUSH. That is,
33543       * <PRE>
33544       * push [base], SP += 4
33545       * </PRE>
33546       *
33547       * @param base the base register
33548       */
33549      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33550      public final void emitPUSH_RegInd (GPR base) {
33551        int miStart = mi;
33552        generateREXprefix(false, null, null, base);
33553        setMachineCodes(mi++, (byte) 0xFF);
33554        emitRegIndirectRegOperands(base, GPR.getForOpcode(0x6));
33555        if (lister != null) lister.RN(miStart, "PUSH", base);
33556      }
33557    
33558      /**
33559       * Generate a register-index PUSH. That is,
33560       * <PRE>
33561       * push [base + index<<scale + disp], SP += 4
33562       * </PRE>
33563       *
33564       * @param base the base register
33565       * @param index the index register
33566       * @param scale the scale
33567       * @param disp the displacement
33568       */
33569      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33570      public final void emitPUSH_RegIdx (GPR base, GPR index, short scale, Offset disp) {
33571        int miStart = mi;
33572        generateREXprefix(false, null, index, base);
33573        setMachineCodes(mi++, (byte) 0xFF);
33574        emitSIBRegOperands(base, index, scale, disp, GPR.getForOpcode(0x6));
33575        if (lister != null) lister.RXD(miStart, "PUSH", base, index, scale, disp);
33576      }
33577    
33578      /**
33579       * Generate a register-offset PUSH. That is,
33580       * <PRE>
33581       * push [index<<scale + disp], SP += 4
33582       * </PRE>
33583       *
33584       * @param index the index register
33585       * @param scale the scale
33586       * @param disp the displacement
33587       */
33588      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33589      public final void emitPUSH_RegOff (GPR index, short scale, Offset disp) {
33590        int miStart = mi;
33591        generateREXprefix(false, null, index, null);
33592        setMachineCodes(mi++, (byte) 0xFF);
33593        emitRegOffRegOperands(index, scale, disp, GPR.getForOpcode(0x6));
33594        if (lister != null) lister.RFD(miStart, "PUSH", index, scale, disp);
33595      }
33596    
33597      /**
33598       * Generate an absolute PUSH. That is,
33599       * <PRE>
33600       * push [disp], SP += 4
33601       * </PRE>
33602       *
33603       * @param disp the displacement
33604       */
33605      public final void emitPUSH_Abs (Address disp) {
33606        int miStart = mi;
33607        setMachineCodes(mi++, (byte) 0xFF);
33608        emitAbsRegOperands(disp, GPR.getForOpcode(0x6));
33609        if (lister != null) lister.RA(miStart, "PUSH", disp);
33610      }
33611    
33612      /**
33613       * Generate an immediate PUSH. That is,
33614       * <PRE>
33615       * push imm, SP += 4
33616       * </PRE>
33617       *
33618       * @param imm the immediate value
33619       */
33620      public final void emitPUSH_Imm(int imm) {
33621        int miStart = mi;
33622        if (fits(imm, 8)) {
33623          setMachineCodes(mi++, (byte) 0x6A);
33624          emitImm8(imm);
33625        } else {
33626          setMachineCodes(mi++, (byte) 0x68);
33627          emitImm32(imm);
33628        }
33629        if (lister != null) lister.I(miStart, "PUSH", imm);
33630      }
33631    
33632    
33633      /**
33634       * Generate a register--register ADDSS. That is,
33635       * <PRE>
33636       * dstReg <<=  (quad)  srcReg
33637       * </PRE>
33638       *
33639       * @param dstReg destination register
33640       * @param srcReg source register
33641       */
33642      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33643      public final void emitADDSS_Reg_Reg(XMM dstReg, XMM srcReg) {
33644        int miStart = mi;
33645        setMachineCodes(mi++, (byte) 0xF3);
33646        generateREXprefix(false, dstReg, null, srcReg);
33647        setMachineCodes(mi++, (byte) 0x0F);
33648        setMachineCodes(mi++, (byte) 0x58);
33649        emitRegRegOperands(srcReg, dstReg);
33650        if (lister != null) lister.RR(miStart, "ADDSS", dstReg, srcReg);
33651      }
33652    
33653      /**
33654       * Generate a register--register-displacement ADDSS. That is,
33655       * <PRE>
33656       * dstReg <<=  (quad)  [srcBase + srcDisp]
33657       * </PRE>
33658       *
33659       * @param dstReg destination register
33660       * @param srcBase the source base register
33661       * @param srcDisp the source displacement
33662       */
33663      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33664      public final void emitADDSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
33665        int miStart = mi;
33666        setMachineCodes(mi++, (byte) 0xF3);
33667        generateREXprefix(false, dstReg, null, srcBase);
33668        setMachineCodes(mi++, (byte) 0x0F);
33669        setMachineCodes(mi++, (byte) 0x58);
33670        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
33671        if (lister != null) lister.RRD(miStart, "ADDSS", dstReg, srcBase, srcDisp);
33672      }
33673    
33674      /**
33675       * Generate a register--register-offset ADDSS. That is,
33676       * <PRE>
33677       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
33678       * </PRE>
33679       *
33680       * @param dstReg destination register
33681       * @param srcIndex the source index register
33682       * @param srcScale the source scale
33683       * @param srcDisp the source displacement
33684       */
33685      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33686      public final void emitADDSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
33687        int miStart = mi;
33688        setMachineCodes(mi++, (byte) 0xF3);
33689        generateREXprefix(false, dstReg, srcIndex, null);
33690        setMachineCodes(mi++, (byte) 0x0F);
33691        setMachineCodes(mi++, (byte) 0x58);
33692        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
33693        if (lister != null) lister.RRFD(miStart, "ADDSS", dstReg, srcIndex, srcScale, srcDisp);
33694      }
33695    
33696      /**
33697       * Generate a register--absolute ADDSS. That is,
33698       * <PRE>
33699       *  dstReg <<=  (quad)  [srcDisp]
33700       * </PRE>
33701       *
33702       * @param dstReg destination register
33703       * @param srcDisp the source displacement
33704       */
33705      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33706      public final void emitADDSS_Reg_Abs(XMM dstReg, Address srcDisp) {
33707        int miStart = mi;
33708        setMachineCodes(mi++, (byte) 0xF3);
33709        generateREXprefix(false, dstReg, null, null);
33710        setMachineCodes(mi++, (byte) 0x0F);
33711        setMachineCodes(mi++, (byte) 0x58);
33712        emitAbsRegOperands(srcDisp, dstReg);
33713        if (lister != null) lister.RRA(miStart, "ADDSS", dstReg, srcDisp);
33714      }
33715    
33716      /**
33717       * Generate a register--register-index ADDSS. That is,
33718       * <PRE>
33719       * dstReg <<=  (quad)  srcReg
33720       * </PRE>
33721       *
33722       * @param dstReg destination register
33723       * @param srcBase the source base register
33724       * @param srcIndex the source index register
33725       * @param srcScale the source scale
33726       * @param srcDisp the source displacement
33727       */
33728      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
33729      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
33730      public final void emitADDSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
33731        int miStart = mi;
33732        setMachineCodes(mi++, (byte) 0xF3);
33733        generateREXprefix(false, dstReg, srcIndex, srcBase);
33734        setMachineCodes(mi++, (byte) 0x0F);
33735        setMachineCodes(mi++, (byte) 0x58);
33736        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
33737        if (lister != null) lister.RRXD(miStart, "ADDSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
33738      }
33739    
33740      /**
33741       * Generate a register--register-indirect ADDSS. That is,
33742       * <PRE>
33743       * dstReg <<=  (quad)  [srcBase]
33744       * </PRE>
33745       *
33746       * @param dstReg destination register
33747       * @param srcBase the source base register
33748       */
33749      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33750      public final void emitADDSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
33751        int miStart = mi;
33752        setMachineCodes(mi++, (byte) 0xF3);
33753        generateREXprefix(false, dstReg, null, srcBase);
33754        setMachineCodes(mi++, (byte) 0x0F);
33755        setMachineCodes(mi++, (byte) 0x58);
33756        emitRegIndirectRegOperands(srcBase, dstReg);
33757        if (lister != null) lister.RRN(miStart, "ADDSS", dstReg, srcBase);
33758      }
33759    
33760    
33761      /**
33762       * Generate a register--register SUBSS. That is,
33763       * <PRE>
33764       * dstReg <<=  (quad)  srcReg
33765       * </PRE>
33766       *
33767       * @param dstReg destination register
33768       * @param srcReg source register
33769       */
33770      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33771      public final void emitSUBSS_Reg_Reg(XMM dstReg, XMM srcReg) {
33772        int miStart = mi;
33773        setMachineCodes(mi++, (byte) 0xF3);
33774        generateREXprefix(false, dstReg, null, srcReg);
33775        setMachineCodes(mi++, (byte) 0x0F);
33776        setMachineCodes(mi++, (byte) 0x5C);
33777        emitRegRegOperands(srcReg, dstReg);
33778        if (lister != null) lister.RR(miStart, "SUBSS", dstReg, srcReg);
33779      }
33780    
33781      /**
33782       * Generate a register--register-displacement SUBSS. That is,
33783       * <PRE>
33784       * dstReg <<=  (quad)  [srcBase + srcDisp]
33785       * </PRE>
33786       *
33787       * @param dstReg destination register
33788       * @param srcBase the source base register
33789       * @param srcDisp the source displacement
33790       */
33791      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33792      public final void emitSUBSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
33793        int miStart = mi;
33794        setMachineCodes(mi++, (byte) 0xF3);
33795        generateREXprefix(false, dstReg, null, srcBase);
33796        setMachineCodes(mi++, (byte) 0x0F);
33797        setMachineCodes(mi++, (byte) 0x5C);
33798        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
33799        if (lister != null) lister.RRD(miStart, "SUBSS", dstReg, srcBase, srcDisp);
33800      }
33801    
33802      /**
33803       * Generate a register--register-offset SUBSS. That is,
33804       * <PRE>
33805       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
33806       * </PRE>
33807       *
33808       * @param dstReg destination register
33809       * @param srcIndex the source index register
33810       * @param srcScale the source scale
33811       * @param srcDisp the source displacement
33812       */
33813      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33814      public final void emitSUBSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
33815        int miStart = mi;
33816        setMachineCodes(mi++, (byte) 0xF3);
33817        generateREXprefix(false, dstReg, srcIndex, null);
33818        setMachineCodes(mi++, (byte) 0x0F);
33819        setMachineCodes(mi++, (byte) 0x5C);
33820        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
33821        if (lister != null) lister.RRFD(miStart, "SUBSS", dstReg, srcIndex, srcScale, srcDisp);
33822      }
33823    
33824      /**
33825       * Generate a register--absolute SUBSS. That is,
33826       * <PRE>
33827       *  dstReg <<=  (quad)  [srcDisp]
33828       * </PRE>
33829       *
33830       * @param dstReg destination register
33831       * @param srcDisp the source displacement
33832       */
33833      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33834      public final void emitSUBSS_Reg_Abs(XMM dstReg, Address srcDisp) {
33835        int miStart = mi;
33836        setMachineCodes(mi++, (byte) 0xF3);
33837        generateREXprefix(false, dstReg, null, null);
33838        setMachineCodes(mi++, (byte) 0x0F);
33839        setMachineCodes(mi++, (byte) 0x5C);
33840        emitAbsRegOperands(srcDisp, dstReg);
33841        if (lister != null) lister.RRA(miStart, "SUBSS", dstReg, srcDisp);
33842      }
33843    
33844      /**
33845       * Generate a register--register-index SUBSS. That is,
33846       * <PRE>
33847       * dstReg <<=  (quad)  srcReg
33848       * </PRE>
33849       *
33850       * @param dstReg destination register
33851       * @param srcBase the source base register
33852       * @param srcIndex the source index register
33853       * @param srcScale the source scale
33854       * @param srcDisp the source displacement
33855       */
33856      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
33857      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
33858      public final void emitSUBSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
33859        int miStart = mi;
33860        setMachineCodes(mi++, (byte) 0xF3);
33861        generateREXprefix(false, dstReg, srcIndex, srcBase);
33862        setMachineCodes(mi++, (byte) 0x0F);
33863        setMachineCodes(mi++, (byte) 0x5C);
33864        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
33865        if (lister != null) lister.RRXD(miStart, "SUBSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
33866      }
33867    
33868      /**
33869       * Generate a register--register-indirect SUBSS. That is,
33870       * <PRE>
33871       * dstReg <<=  (quad)  [srcBase]
33872       * </PRE>
33873       *
33874       * @param dstReg destination register
33875       * @param srcBase the source base register
33876       */
33877      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33878      public final void emitSUBSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
33879        int miStart = mi;
33880        setMachineCodes(mi++, (byte) 0xF3);
33881        generateREXprefix(false, dstReg, null, srcBase);
33882        setMachineCodes(mi++, (byte) 0x0F);
33883        setMachineCodes(mi++, (byte) 0x5C);
33884        emitRegIndirectRegOperands(srcBase, dstReg);
33885        if (lister != null) lister.RRN(miStart, "SUBSS", dstReg, srcBase);
33886      }
33887    
33888    
33889      /**
33890       * Generate a register--register MULSS. That is,
33891       * <PRE>
33892       * dstReg <<=  (quad)  srcReg
33893       * </PRE>
33894       *
33895       * @param dstReg destination register
33896       * @param srcReg source register
33897       */
33898      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33899      public final void emitMULSS_Reg_Reg(XMM dstReg, XMM srcReg) {
33900        int miStart = mi;
33901        setMachineCodes(mi++, (byte) 0xF3);
33902        generateREXprefix(false, dstReg, null, srcReg);
33903        setMachineCodes(mi++, (byte) 0x0F);
33904        setMachineCodes(mi++, (byte) 0x59);
33905        emitRegRegOperands(srcReg, dstReg);
33906        if (lister != null) lister.RR(miStart, "MULSS", dstReg, srcReg);
33907      }
33908    
33909      /**
33910       * Generate a register--register-displacement MULSS. That is,
33911       * <PRE>
33912       * dstReg <<=  (quad)  [srcBase + srcDisp]
33913       * </PRE>
33914       *
33915       * @param dstReg destination register
33916       * @param srcBase the source base register
33917       * @param srcDisp the source displacement
33918       */
33919      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33920      public final void emitMULSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
33921        int miStart = mi;
33922        setMachineCodes(mi++, (byte) 0xF3);
33923        generateREXprefix(false, dstReg, null, srcBase);
33924        setMachineCodes(mi++, (byte) 0x0F);
33925        setMachineCodes(mi++, (byte) 0x59);
33926        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
33927        if (lister != null) lister.RRD(miStart, "MULSS", dstReg, srcBase, srcDisp);
33928      }
33929    
33930      /**
33931       * Generate a register--register-offset MULSS. That is,
33932       * <PRE>
33933       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
33934       * </PRE>
33935       *
33936       * @param dstReg destination register
33937       * @param srcIndex the source index register
33938       * @param srcScale the source scale
33939       * @param srcDisp the source displacement
33940       */
33941      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
33942      public final void emitMULSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
33943        int miStart = mi;
33944        setMachineCodes(mi++, (byte) 0xF3);
33945        generateREXprefix(false, dstReg, srcIndex, null);
33946        setMachineCodes(mi++, (byte) 0x0F);
33947        setMachineCodes(mi++, (byte) 0x59);
33948        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
33949        if (lister != null) lister.RRFD(miStart, "MULSS", dstReg, srcIndex, srcScale, srcDisp);
33950      }
33951    
33952      /**
33953       * Generate a register--absolute MULSS. That is,
33954       * <PRE>
33955       *  dstReg <<=  (quad)  [srcDisp]
33956       * </PRE>
33957       *
33958       * @param dstReg destination register
33959       * @param srcDisp the source displacement
33960       */
33961      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
33962      public final void emitMULSS_Reg_Abs(XMM dstReg, Address srcDisp) {
33963        int miStart = mi;
33964        setMachineCodes(mi++, (byte) 0xF3);
33965        generateREXprefix(false, dstReg, null, null);
33966        setMachineCodes(mi++, (byte) 0x0F);
33967        setMachineCodes(mi++, (byte) 0x59);
33968        emitAbsRegOperands(srcDisp, dstReg);
33969        if (lister != null) lister.RRA(miStart, "MULSS", dstReg, srcDisp);
33970      }
33971    
33972      /**
33973       * Generate a register--register-index MULSS. That is,
33974       * <PRE>
33975       * dstReg <<=  (quad)  srcReg
33976       * </PRE>
33977       *
33978       * @param dstReg destination register
33979       * @param srcBase the source base register
33980       * @param srcIndex the source index register
33981       * @param srcScale the source scale
33982       * @param srcDisp the source displacement
33983       */
33984      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
33985      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
33986      public final void emitMULSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
33987        int miStart = mi;
33988        setMachineCodes(mi++, (byte) 0xF3);
33989        generateREXprefix(false, dstReg, srcIndex, srcBase);
33990        setMachineCodes(mi++, (byte) 0x0F);
33991        setMachineCodes(mi++, (byte) 0x59);
33992        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
33993        if (lister != null) lister.RRXD(miStart, "MULSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
33994      }
33995    
33996      /**
33997       * Generate a register--register-indirect MULSS. That is,
33998       * <PRE>
33999       * dstReg <<=  (quad)  [srcBase]
34000       * </PRE>
34001       *
34002       * @param dstReg destination register
34003       * @param srcBase the source base register
34004       */
34005      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34006      public final void emitMULSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
34007        int miStart = mi;
34008        setMachineCodes(mi++, (byte) 0xF3);
34009        generateREXprefix(false, dstReg, null, srcBase);
34010        setMachineCodes(mi++, (byte) 0x0F);
34011        setMachineCodes(mi++, (byte) 0x59);
34012        emitRegIndirectRegOperands(srcBase, dstReg);
34013        if (lister != null) lister.RRN(miStart, "MULSS", dstReg, srcBase);
34014      }
34015    
34016    
34017      /**
34018       * Generate a register--register DIVSS. That is,
34019       * <PRE>
34020       * dstReg <<=  (quad)  srcReg
34021       * </PRE>
34022       *
34023       * @param dstReg destination register
34024       * @param srcReg source register
34025       */
34026      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34027      public final void emitDIVSS_Reg_Reg(XMM dstReg, XMM srcReg) {
34028        int miStart = mi;
34029        setMachineCodes(mi++, (byte) 0xF3);
34030        generateREXprefix(false, dstReg, null, srcReg);
34031        setMachineCodes(mi++, (byte) 0x0F);
34032        setMachineCodes(mi++, (byte) 0x5E);
34033        emitRegRegOperands(srcReg, dstReg);
34034        if (lister != null) lister.RR(miStart, "DIVSS", dstReg, srcReg);
34035      }
34036    
34037      /**
34038       * Generate a register--register-displacement DIVSS. That is,
34039       * <PRE>
34040       * dstReg <<=  (quad)  [srcBase + srcDisp]
34041       * </PRE>
34042       *
34043       * @param dstReg destination register
34044       * @param srcBase the source base register
34045       * @param srcDisp the source displacement
34046       */
34047      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34048      public final void emitDIVSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
34049        int miStart = mi;
34050        setMachineCodes(mi++, (byte) 0xF3);
34051        generateREXprefix(false, dstReg, null, srcBase);
34052        setMachineCodes(mi++, (byte) 0x0F);
34053        setMachineCodes(mi++, (byte) 0x5E);
34054        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
34055        if (lister != null) lister.RRD(miStart, "DIVSS", dstReg, srcBase, srcDisp);
34056      }
34057    
34058      /**
34059       * Generate a register--register-offset DIVSS. That is,
34060       * <PRE>
34061       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
34062       * </PRE>
34063       *
34064       * @param dstReg destination register
34065       * @param srcIndex the source index register
34066       * @param srcScale the source scale
34067       * @param srcDisp the source displacement
34068       */
34069      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34070      public final void emitDIVSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
34071        int miStart = mi;
34072        setMachineCodes(mi++, (byte) 0xF3);
34073        generateREXprefix(false, dstReg, srcIndex, null);
34074        setMachineCodes(mi++, (byte) 0x0F);
34075        setMachineCodes(mi++, (byte) 0x5E);
34076        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
34077        if (lister != null) lister.RRFD(miStart, "DIVSS", dstReg, srcIndex, srcScale, srcDisp);
34078      }
34079    
34080      /**
34081       * Generate a register--absolute DIVSS. That is,
34082       * <PRE>
34083       *  dstReg <<=  (quad)  [srcDisp]
34084       * </PRE>
34085       *
34086       * @param dstReg destination register
34087       * @param srcDisp the source displacement
34088       */
34089      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
34090      public final void emitDIVSS_Reg_Abs(XMM dstReg, Address srcDisp) {
34091        int miStart = mi;
34092        setMachineCodes(mi++, (byte) 0xF3);
34093        generateREXprefix(false, dstReg, null, null);
34094        setMachineCodes(mi++, (byte) 0x0F);
34095        setMachineCodes(mi++, (byte) 0x5E);
34096        emitAbsRegOperands(srcDisp, dstReg);
34097        if (lister != null) lister.RRA(miStart, "DIVSS", dstReg, srcDisp);
34098      }
34099    
34100      /**
34101       * Generate a register--register-index DIVSS. That is,
34102       * <PRE>
34103       * dstReg <<=  (quad)  srcReg
34104       * </PRE>
34105       *
34106       * @param dstReg destination register
34107       * @param srcBase the source base register
34108       * @param srcIndex the source index register
34109       * @param srcScale the source scale
34110       * @param srcDisp the source displacement
34111       */
34112      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
34113      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
34114      public final void emitDIVSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
34115        int miStart = mi;
34116        setMachineCodes(mi++, (byte) 0xF3);
34117        generateREXprefix(false, dstReg, srcIndex, srcBase);
34118        setMachineCodes(mi++, (byte) 0x0F);
34119        setMachineCodes(mi++, (byte) 0x5E);
34120        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
34121        if (lister != null) lister.RRXD(miStart, "DIVSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
34122      }
34123    
34124      /**
34125       * Generate a register--register-indirect DIVSS. That is,
34126       * <PRE>
34127       * dstReg <<=  (quad)  [srcBase]
34128       * </PRE>
34129       *
34130       * @param dstReg destination register
34131       * @param srcBase the source base register
34132       */
34133      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34134      public final void emitDIVSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
34135        int miStart = mi;
34136        setMachineCodes(mi++, (byte) 0xF3);
34137        generateREXprefix(false, dstReg, null, srcBase);
34138        setMachineCodes(mi++, (byte) 0x0F);
34139        setMachineCodes(mi++, (byte) 0x5E);
34140        emitRegIndirectRegOperands(srcBase, dstReg);
34141        if (lister != null) lister.RRN(miStart, "DIVSS", dstReg, srcBase);
34142      }
34143    
34144    
34145      /**
34146       * Generate a register--register MOVSS. That is,
34147       * <PRE>
34148       * dstReg <<=  (quad)  srcReg
34149       * </PRE>
34150       *
34151       * @param dstReg destination register
34152       * @param srcReg source register
34153       */
34154      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34155      public final void emitMOVSS_Reg_Reg(XMM dstReg, XMM srcReg) {
34156        int miStart = mi;
34157        setMachineCodes(mi++, (byte) 0xF3);
34158        generateREXprefix(false, dstReg, null, srcReg);
34159        setMachineCodes(mi++, (byte) 0x0F);
34160        setMachineCodes(mi++, (byte) 0x10);
34161        emitRegRegOperands(srcReg, dstReg);
34162        if (lister != null) lister.RR(miStart, "MOVSS", dstReg, srcReg);
34163      }
34164    
34165      /**
34166       * Generate a register--register-displacement MOVSS. That is,
34167       * <PRE>
34168       * dstReg <<=  (quad)  [srcBase + srcDisp]
34169       * </PRE>
34170       *
34171       * @param dstReg destination register
34172       * @param srcBase the source base register
34173       * @param srcDisp the source displacement
34174       */
34175      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34176      public final void emitMOVSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
34177        int miStart = mi;
34178        setMachineCodes(mi++, (byte) 0xF3);
34179        generateREXprefix(false, dstReg, null, srcBase);
34180        setMachineCodes(mi++, (byte) 0x0F);
34181        setMachineCodes(mi++, (byte) 0x10);
34182        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
34183        if (lister != null) lister.RRD(miStart, "MOVSS", dstReg, srcBase, srcDisp);
34184      }
34185    
34186      /**
34187       * Generate a register--register-offset MOVSS. That is,
34188       * <PRE>
34189       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
34190       * </PRE>
34191       *
34192       * @param dstReg destination register
34193       * @param srcIndex the source index register
34194       * @param srcScale the source scale
34195       * @param srcDisp the source displacement
34196       */
34197      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34198      public final void emitMOVSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
34199        int miStart = mi;
34200        setMachineCodes(mi++, (byte) 0xF3);
34201        generateREXprefix(false, dstReg, srcIndex, null);
34202        setMachineCodes(mi++, (byte) 0x0F);
34203        setMachineCodes(mi++, (byte) 0x10);
34204        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
34205        if (lister != null) lister.RRFD(miStart, "MOVSS", dstReg, srcIndex, srcScale, srcDisp);
34206      }
34207    
34208      /**
34209       * Generate a register--absolute MOVSS. That is,
34210       * <PRE>
34211       *  dstReg <<=  (quad)  [srcDisp]
34212       * </PRE>
34213       *
34214       * @param dstReg destination register
34215       * @param srcDisp the source displacement
34216       */
34217      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
34218      public final void emitMOVSS_Reg_Abs(XMM dstReg, Address srcDisp) {
34219        int miStart = mi;
34220        setMachineCodes(mi++, (byte) 0xF3);
34221        generateREXprefix(false, dstReg, null, null);
34222        setMachineCodes(mi++, (byte) 0x0F);
34223        setMachineCodes(mi++, (byte) 0x10);
34224        emitAbsRegOperands(srcDisp, dstReg);
34225        if (lister != null) lister.RRA(miStart, "MOVSS", dstReg, srcDisp);
34226      }
34227    
34228      /**
34229       * Generate a register--register-index MOVSS. That is,
34230       * <PRE>
34231       * dstReg <<=  (quad)  srcReg
34232       * </PRE>
34233       *
34234       * @param dstReg destination register
34235       * @param srcBase the source base register
34236       * @param srcIndex the source index register
34237       * @param srcScale the source scale
34238       * @param srcDisp the source displacement
34239       */
34240      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
34241      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
34242      public final void emitMOVSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
34243        int miStart = mi;
34244        setMachineCodes(mi++, (byte) 0xF3);
34245        generateREXprefix(false, dstReg, srcIndex, srcBase);
34246        setMachineCodes(mi++, (byte) 0x0F);
34247        setMachineCodes(mi++, (byte) 0x10);
34248        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
34249        if (lister != null) lister.RRXD(miStart, "MOVSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
34250      }
34251    
34252      /**
34253       * Generate a register--register-indirect MOVSS. That is,
34254       * <PRE>
34255       * dstReg <<=  (quad)  [srcBase]
34256       * </PRE>
34257       *
34258       * @param dstReg destination register
34259       * @param srcBase the source base register
34260       */
34261      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34262      public final void emitMOVSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
34263        int miStart = mi;
34264        setMachineCodes(mi++, (byte) 0xF3);
34265        generateREXprefix(false, dstReg, null, srcBase);
34266        setMachineCodes(mi++, (byte) 0x0F);
34267        setMachineCodes(mi++, (byte) 0x10);
34268        emitRegIndirectRegOperands(srcBase, dstReg);
34269        if (lister != null) lister.RRN(miStart, "MOVSS", dstReg, srcBase);
34270      }
34271    
34272    
34273      /**
34274       * Generate a register-indirect--register MOVSS. That is,
34275       * <PRE>
34276       * [dstBase] <<=  (quad)  srcReg
34277       * </PRE>
34278       *
34279       * @param dstBase the destination base register
34280       * @param srcReg the source register
34281       */
34282      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34283      public final void emitMOVSS_RegInd_Reg(GPR dstBase, XMM srcReg) {
34284        int miStart = mi;
34285        setMachineCodes(mi++, (byte) 0xF3);
34286        generateREXprefix(false, srcReg, null, dstBase);
34287        setMachineCodes(mi++, (byte) 0x0F);
34288        setMachineCodes(mi++, (byte) 0x11);
34289        emitRegIndirectRegOperands(dstBase, srcReg);
34290        if (lister != null) lister.RNR(miStart, "MOVSS", dstBase, srcReg);
34291      }
34292    
34293      /**
34294       * Generate a register-offset--register MOVSS. That is,
34295       * <PRE>
34296       * [dstReg<<dstScale + dstDisp] <<=  (quad)  srcReg
34297       * </PRE>
34298       *
34299       * @param dstIndex the destination index register
34300       * @param dstScale the destination shift amount
34301       * @param dstDisp the destination displacement
34302       * @param srcReg the source register
34303       */
34304      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
34305      public final void emitMOVSS_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
34306        int miStart = mi;
34307        setMachineCodes(mi++, (byte) 0xF3);
34308        generateREXprefix(false, srcReg, dstIndex, null);
34309        setMachineCodes(mi++, (byte) 0x0F);
34310        setMachineCodes(mi++, (byte) 0x11);
34311        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
34312        if (lister != null) lister.RFDR(miStart, "MOVSS", dstIndex, dstScale, dstDisp, srcReg);
34313      }
34314    
34315      /**
34316       * Generate a absolute--register MOVSS. That is,
34317       * <PRE>
34318       * [dstDisp] <<=  (quad)  srcReg
34319       * </PRE>
34320       *
34321       * @param dstDisp the destination displacement
34322       * @param srcReg the source register
34323       */
34324      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
34325      public final void emitMOVSS_Abs_Reg(Address dstDisp, XMM srcReg) {
34326        int miStart = mi;
34327        setMachineCodes(mi++, (byte) 0xF3);
34328        generateREXprefix(false, srcReg, null, null);
34329        setMachineCodes(mi++, (byte) 0x0F);
34330        setMachineCodes(mi++, (byte) 0x11);
34331        emitAbsRegOperands(dstDisp, srcReg);
34332        if (lister != null) lister.RAR(miStart, "MOVSS", dstDisp, srcReg);
34333      }
34334    
34335      /**
34336       * Generate a register-index--register MOVSS. That is,
34337       * <PRE>
34338       * [dstBase + dstIndex<<dstScale + dstDisp] <<=  (quad)  srcReg
34339       * </PRE>
34340       *
34341       * @param dstBase the destination base register
34342       * @param dstIndex the destination index register
34343       * @param dstScale the destination shift amount
34344       * @param dstDisp the destination displacement
34345       * @param srcReg the source register
34346       */
34347      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
34348      public final void emitMOVSS_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
34349        int miStart = mi;
34350        setMachineCodes(mi++, (byte) 0xF3);
34351        generateREXprefix(false, srcReg, dstIndex, dstBase);
34352        setMachineCodes(mi++, (byte) 0x0F);
34353        setMachineCodes(mi++, (byte) 0x11);
34354        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
34355        if (lister != null) lister.RXDR(miStart, "MOVSS", dstBase, dstIndex, dstScale, dstDisp, srcReg);
34356      }
34357    
34358      /**
34359       * Generate a register-displacement--register MOVSS. That is,
34360       * <PRE>
34361       * [dstBase + dstDisp] <<=  (quad)  srcReg
34362       * </PRE>
34363       *
34364       * @param dstBase the destination base register
34365       * @param dstDisp the destination displacement
34366       * @param srcReg the source register
34367       */
34368      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
34369      public final void emitMOVSS_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) {
34370        int miStart = mi;
34371        setMachineCodes(mi++, (byte) 0xF3);
34372        generateREXprefix(false, srcReg, null, dstBase);
34373        setMachineCodes(mi++, (byte) 0x0F);
34374        setMachineCodes(mi++, (byte) 0x11);
34375        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
34376        if (lister != null) lister.RDR(miStart, "MOVSS", dstBase, dstDisp, srcReg);
34377      }
34378    
34379    
34380      /**
34381       * Generate a register--register MOVLPS. That is,
34382       * <PRE>
34383       * dstReg <<=  (quad)  srcReg
34384       * </PRE>
34385       *
34386       * @param dstReg destination register
34387       * @param srcReg source register
34388       */
34389      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34390      public final void emitMOVLPS_Reg_Reg(XMM dstReg, XMM srcReg) {
34391        int miStart = mi;
34392        generateREXprefix(false, dstReg, null, srcReg);
34393        setMachineCodes(mi++, (byte) 0x0F);
34394        setMachineCodes(mi++, (byte) 0x12);
34395        emitRegRegOperands(srcReg, dstReg);
34396        if (lister != null) lister.RR(miStart, "MOVLPS", dstReg, srcReg);
34397      }
34398    
34399      /**
34400       * Generate a register--register-displacement MOVLPS. That is,
34401       * <PRE>
34402       * dstReg <<=  (quad)  [srcBase + srcDisp]
34403       * </PRE>
34404       *
34405       * @param dstReg destination register
34406       * @param srcBase the source base register
34407       * @param srcDisp the source displacement
34408       */
34409      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34410      public final void emitMOVLPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
34411        int miStart = mi;
34412        generateREXprefix(false, dstReg, null, srcBase);
34413        setMachineCodes(mi++, (byte) 0x0F);
34414        setMachineCodes(mi++, (byte) 0x12);
34415        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
34416        if (lister != null) lister.RRD(miStart, "MOVLPS", dstReg, srcBase, srcDisp);
34417      }
34418    
34419      /**
34420       * Generate a register--register-offset MOVLPS. That is,
34421       * <PRE>
34422       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
34423       * </PRE>
34424       *
34425       * @param dstReg destination register
34426       * @param srcIndex the source index register
34427       * @param srcScale the source scale
34428       * @param srcDisp the source displacement
34429       */
34430      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34431      public final void emitMOVLPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
34432        int miStart = mi;
34433        generateREXprefix(false, dstReg, srcIndex, null);
34434        setMachineCodes(mi++, (byte) 0x0F);
34435        setMachineCodes(mi++, (byte) 0x12);
34436        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
34437        if (lister != null) lister.RRFD(miStart, "MOVLPS", dstReg, srcIndex, srcScale, srcDisp);
34438      }
34439    
34440      /**
34441       * Generate a register--absolute MOVLPS. That is,
34442       * <PRE>
34443       *  dstReg <<=  (quad)  [srcDisp]
34444       * </PRE>
34445       *
34446       * @param dstReg destination register
34447       * @param srcDisp the source displacement
34448       */
34449      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
34450      public final void emitMOVLPS_Reg_Abs(XMM dstReg, Address srcDisp) {
34451        int miStart = mi;
34452        generateREXprefix(false, dstReg, null, null);
34453        setMachineCodes(mi++, (byte) 0x0F);
34454        setMachineCodes(mi++, (byte) 0x12);
34455        emitAbsRegOperands(srcDisp, dstReg);
34456        if (lister != null) lister.RRA(miStart, "MOVLPS", dstReg, srcDisp);
34457      }
34458    
34459      /**
34460       * Generate a register--register-index MOVLPS. That is,
34461       * <PRE>
34462       * dstReg <<=  (quad)  srcReg
34463       * </PRE>
34464       *
34465       * @param dstReg destination register
34466       * @param srcBase the source base register
34467       * @param srcIndex the source index register
34468       * @param srcScale the source scale
34469       * @param srcDisp the source displacement
34470       */
34471      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
34472      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
34473      public final void emitMOVLPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
34474        int miStart = mi;
34475        generateREXprefix(false, dstReg, srcIndex, srcBase);
34476        setMachineCodes(mi++, (byte) 0x0F);
34477        setMachineCodes(mi++, (byte) 0x12);
34478        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
34479        if (lister != null) lister.RRXD(miStart, "MOVLPS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
34480      }
34481    
34482      /**
34483       * Generate a register--register-indirect MOVLPS. That is,
34484       * <PRE>
34485       * dstReg <<=  (quad)  [srcBase]
34486       * </PRE>
34487       *
34488       * @param dstReg destination register
34489       * @param srcBase the source base register
34490       */
34491      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34492      public final void emitMOVLPS_Reg_RegInd(XMM dstReg, GPR srcBase) {
34493        int miStart = mi;
34494        generateREXprefix(false, dstReg, null, srcBase);
34495        setMachineCodes(mi++, (byte) 0x0F);
34496        setMachineCodes(mi++, (byte) 0x12);
34497        emitRegIndirectRegOperands(srcBase, dstReg);
34498        if (lister != null) lister.RRN(miStart, "MOVLPS", dstReg, srcBase);
34499      }
34500    
34501    
34502      /**
34503       * Generate a register-indirect--register MOVLPS. That is,
34504       * <PRE>
34505       * [dstBase] <<=  (quad)  srcReg
34506       * </PRE>
34507       *
34508       * @param dstBase the destination base register
34509       * @param srcReg the source register
34510       */
34511      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34512      public final void emitMOVLPS_RegInd_Reg(GPR dstBase, XMM srcReg) {
34513        int miStart = mi;
34514        generateREXprefix(false, srcReg, null, dstBase);
34515        setMachineCodes(mi++, (byte) 0x0F);
34516        setMachineCodes(mi++, (byte) 0x13);
34517        emitRegIndirectRegOperands(dstBase, srcReg);
34518        if (lister != null) lister.RNR(miStart, "MOVLPS", dstBase, srcReg);
34519      }
34520    
34521      /**
34522       * Generate a register-offset--register MOVLPS. That is,
34523       * <PRE>
34524       * [dstReg<<dstScale + dstDisp] <<=  (quad)  srcReg
34525       * </PRE>
34526       *
34527       * @param dstIndex the destination index register
34528       * @param dstScale the destination shift amount
34529       * @param dstDisp the destination displacement
34530       * @param srcReg the source register
34531       */
34532      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
34533      public final void emitMOVLPS_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
34534        int miStart = mi;
34535        generateREXprefix(false, srcReg, dstIndex, null);
34536        setMachineCodes(mi++, (byte) 0x0F);
34537        setMachineCodes(mi++, (byte) 0x13);
34538        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
34539        if (lister != null) lister.RFDR(miStart, "MOVLPS", dstIndex, dstScale, dstDisp, srcReg);
34540      }
34541    
34542      /**
34543       * Generate a absolute--register MOVLPS. That is,
34544       * <PRE>
34545       * [dstDisp] <<=  (quad)  srcReg
34546       * </PRE>
34547       *
34548       * @param dstDisp the destination displacement
34549       * @param srcReg the source register
34550       */
34551      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
34552      public final void emitMOVLPS_Abs_Reg(Address dstDisp, XMM srcReg) {
34553        int miStart = mi;
34554        generateREXprefix(false, srcReg, null, null);
34555        setMachineCodes(mi++, (byte) 0x0F);
34556        setMachineCodes(mi++, (byte) 0x13);
34557        emitAbsRegOperands(dstDisp, srcReg);
34558        if (lister != null) lister.RAR(miStart, "MOVLPS", dstDisp, srcReg);
34559      }
34560    
34561      /**
34562       * Generate a register-index--register MOVLPS. That is,
34563       * <PRE>
34564       * [dstBase + dstIndex<<dstScale + dstDisp] <<=  (quad)  srcReg
34565       * </PRE>
34566       *
34567       * @param dstBase the destination base register
34568       * @param dstIndex the destination index register
34569       * @param dstScale the destination shift amount
34570       * @param dstDisp the destination displacement
34571       * @param srcReg the source register
34572       */
34573      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
34574      public final void emitMOVLPS_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
34575        int miStart = mi;
34576        generateREXprefix(false, srcReg, dstIndex, dstBase);
34577        setMachineCodes(mi++, (byte) 0x0F);
34578        setMachineCodes(mi++, (byte) 0x13);
34579        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
34580        if (lister != null) lister.RXDR(miStart, "MOVLPS", dstBase, dstIndex, dstScale, dstDisp, srcReg);
34581      }
34582    
34583      /**
34584       * Generate a register-displacement--register MOVLPS. That is,
34585       * <PRE>
34586       * [dstBase + dstDisp] <<=  (quad)  srcReg
34587       * </PRE>
34588       *
34589       * @param dstBase the destination base register
34590       * @param dstDisp the destination displacement
34591       * @param srcReg the source register
34592       */
34593      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
34594      public final void emitMOVLPS_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) {
34595        int miStart = mi;
34596        generateREXprefix(false, srcReg, null, dstBase);
34597        setMachineCodes(mi++, (byte) 0x0F);
34598        setMachineCodes(mi++, (byte) 0x13);
34599        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
34600        if (lister != null) lister.RDR(miStart, "MOVLPS", dstBase, dstDisp, srcReg);
34601      }
34602    
34603    
34604      /**
34605       * Generate a register--register SQRTSS. That is,
34606       * <PRE>
34607       * dstReg <<=  (quad)  srcReg
34608       * </PRE>
34609       *
34610       * @param dstReg destination register
34611       * @param srcReg source register
34612       */
34613      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34614      public final void emitSQRTSS_Reg_Reg(XMM dstReg, XMM srcReg) {
34615        int miStart = mi;
34616        setMachineCodes(mi++, (byte) 0xF3);
34617        generateREXprefix(false, dstReg, null, srcReg);
34618        setMachineCodes(mi++, (byte) 0x0F);
34619        setMachineCodes(mi++, (byte) 0x51);
34620        emitRegRegOperands(srcReg, dstReg);
34621        if (lister != null) lister.RR(miStart, "SQRTSS", dstReg, srcReg);
34622      }
34623    
34624      /**
34625       * Generate a register--register-displacement SQRTSS. That is,
34626       * <PRE>
34627       * dstReg <<=  (quad)  [srcBase + srcDisp]
34628       * </PRE>
34629       *
34630       * @param dstReg destination register
34631       * @param srcBase the source base register
34632       * @param srcDisp the source displacement
34633       */
34634      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34635      public final void emitSQRTSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
34636        int miStart = mi;
34637        setMachineCodes(mi++, (byte) 0xF3);
34638        generateREXprefix(false, dstReg, null, srcBase);
34639        setMachineCodes(mi++, (byte) 0x0F);
34640        setMachineCodes(mi++, (byte) 0x51);
34641        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
34642        if (lister != null) lister.RRD(miStart, "SQRTSS", dstReg, srcBase, srcDisp);
34643      }
34644    
34645      /**
34646       * Generate a register--register-offset SQRTSS. That is,
34647       * <PRE>
34648       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
34649       * </PRE>
34650       *
34651       * @param dstReg destination register
34652       * @param srcIndex the source index register
34653       * @param srcScale the source scale
34654       * @param srcDisp the source displacement
34655       */
34656      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34657      public final void emitSQRTSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
34658        int miStart = mi;
34659        setMachineCodes(mi++, (byte) 0xF3);
34660        generateREXprefix(false, dstReg, srcIndex, null);
34661        setMachineCodes(mi++, (byte) 0x0F);
34662        setMachineCodes(mi++, (byte) 0x51);
34663        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
34664        if (lister != null) lister.RRFD(miStart, "SQRTSS", dstReg, srcIndex, srcScale, srcDisp);
34665      }
34666    
34667      /**
34668       * Generate a register--absolute SQRTSS. That is,
34669       * <PRE>
34670       *  dstReg <<=  (quad)  [srcDisp]
34671       * </PRE>
34672       *
34673       * @param dstReg destination register
34674       * @param srcDisp the source displacement
34675       */
34676      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
34677      public final void emitSQRTSS_Reg_Abs(XMM dstReg, Address srcDisp) {
34678        int miStart = mi;
34679        setMachineCodes(mi++, (byte) 0xF3);
34680        generateREXprefix(false, dstReg, null, null);
34681        setMachineCodes(mi++, (byte) 0x0F);
34682        setMachineCodes(mi++, (byte) 0x51);
34683        emitAbsRegOperands(srcDisp, dstReg);
34684        if (lister != null) lister.RRA(miStart, "SQRTSS", dstReg, srcDisp);
34685      }
34686    
34687      /**
34688       * Generate a register--register-index SQRTSS. That is,
34689       * <PRE>
34690       * dstReg <<=  (quad)  srcReg
34691       * </PRE>
34692       *
34693       * @param dstReg destination register
34694       * @param srcBase the source base register
34695       * @param srcIndex the source index register
34696       * @param srcScale the source scale
34697       * @param srcDisp the source displacement
34698       */
34699      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
34700      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
34701      public final void emitSQRTSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
34702        int miStart = mi;
34703        setMachineCodes(mi++, (byte) 0xF3);
34704        generateREXprefix(false, dstReg, srcIndex, srcBase);
34705        setMachineCodes(mi++, (byte) 0x0F);
34706        setMachineCodes(mi++, (byte) 0x51);
34707        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
34708        if (lister != null) lister.RRXD(miStart, "SQRTSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
34709      }
34710    
34711      /**
34712       * Generate a register--register-indirect SQRTSS. That is,
34713       * <PRE>
34714       * dstReg <<=  (quad)  [srcBase]
34715       * </PRE>
34716       *
34717       * @param dstReg destination register
34718       * @param srcBase the source base register
34719       */
34720      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34721      public final void emitSQRTSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
34722        int miStart = mi;
34723        setMachineCodes(mi++, (byte) 0xF3);
34724        generateREXprefix(false, dstReg, null, srcBase);
34725        setMachineCodes(mi++, (byte) 0x0F);
34726        setMachineCodes(mi++, (byte) 0x51);
34727        emitRegIndirectRegOperands(srcBase, dstReg);
34728        if (lister != null) lister.RRN(miStart, "SQRTSS", dstReg, srcBase);
34729      }
34730    
34731    
34732      /**
34733       * Generate a register--register CVTSS2SD. That is,
34734       * <PRE>
34735       * dstReg <<=  (quad)  srcReg
34736       * </PRE>
34737       *
34738       * @param dstReg destination register
34739       * @param srcReg source register
34740       */
34741      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34742      public final void emitCVTSS2SD_Reg_Reg(XMM dstReg, XMM srcReg) {
34743        int miStart = mi;
34744        setMachineCodes(mi++, (byte) 0xF3);
34745        generateREXprefix(false, dstReg, null, srcReg);
34746        setMachineCodes(mi++, (byte) 0x0F);
34747        setMachineCodes(mi++, (byte) 0x5A);
34748        emitRegRegOperands(srcReg, dstReg);
34749        if (lister != null) lister.RR(miStart, "CVTSS2SD", dstReg, srcReg);
34750      }
34751    
34752      /**
34753       * Generate a register--register-displacement CVTSS2SD. That is,
34754       * <PRE>
34755       * dstReg <<=  (quad)  [srcBase + srcDisp]
34756       * </PRE>
34757       *
34758       * @param dstReg destination register
34759       * @param srcBase the source base register
34760       * @param srcDisp the source displacement
34761       */
34762      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34763      public final void emitCVTSS2SD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
34764        int miStart = mi;
34765        setMachineCodes(mi++, (byte) 0xF3);
34766        generateREXprefix(false, dstReg, null, srcBase);
34767        setMachineCodes(mi++, (byte) 0x0F);
34768        setMachineCodes(mi++, (byte) 0x5A);
34769        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
34770        if (lister != null) lister.RRD(miStart, "CVTSS2SD", dstReg, srcBase, srcDisp);
34771      }
34772    
34773      /**
34774       * Generate a register--register-offset CVTSS2SD. That is,
34775       * <PRE>
34776       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
34777       * </PRE>
34778       *
34779       * @param dstReg destination register
34780       * @param srcIndex the source index register
34781       * @param srcScale the source scale
34782       * @param srcDisp the source displacement
34783       */
34784      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34785      public final void emitCVTSS2SD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
34786        int miStart = mi;
34787        setMachineCodes(mi++, (byte) 0xF3);
34788        generateREXprefix(false, dstReg, srcIndex, null);
34789        setMachineCodes(mi++, (byte) 0x0F);
34790        setMachineCodes(mi++, (byte) 0x5A);
34791        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
34792        if (lister != null) lister.RRFD(miStart, "CVTSS2SD", dstReg, srcIndex, srcScale, srcDisp);
34793      }
34794    
34795      /**
34796       * Generate a register--absolute CVTSS2SD. That is,
34797       * <PRE>
34798       *  dstReg <<=  (quad)  [srcDisp]
34799       * </PRE>
34800       *
34801       * @param dstReg destination register
34802       * @param srcDisp the source displacement
34803       */
34804      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
34805      public final void emitCVTSS2SD_Reg_Abs(XMM dstReg, Address srcDisp) {
34806        int miStart = mi;
34807        setMachineCodes(mi++, (byte) 0xF3);
34808        generateREXprefix(false, dstReg, null, null);
34809        setMachineCodes(mi++, (byte) 0x0F);
34810        setMachineCodes(mi++, (byte) 0x5A);
34811        emitAbsRegOperands(srcDisp, dstReg);
34812        if (lister != null) lister.RRA(miStart, "CVTSS2SD", dstReg, srcDisp);
34813      }
34814    
34815      /**
34816       * Generate a register--register-index CVTSS2SD. That is,
34817       * <PRE>
34818       * dstReg <<=  (quad)  srcReg
34819       * </PRE>
34820       *
34821       * @param dstReg destination register
34822       * @param srcBase the source base register
34823       * @param srcIndex the source index register
34824       * @param srcScale the source scale
34825       * @param srcDisp the source displacement
34826       */
34827      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
34828      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
34829      public final void emitCVTSS2SD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
34830        int miStart = mi;
34831        setMachineCodes(mi++, (byte) 0xF3);
34832        generateREXprefix(false, dstReg, srcIndex, srcBase);
34833        setMachineCodes(mi++, (byte) 0x0F);
34834        setMachineCodes(mi++, (byte) 0x5A);
34835        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
34836        if (lister != null) lister.RRXD(miStart, "CVTSS2SD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
34837      }
34838    
34839      /**
34840       * Generate a register--register-indirect CVTSS2SD. That is,
34841       * <PRE>
34842       * dstReg <<=  (quad)  [srcBase]
34843       * </PRE>
34844       *
34845       * @param dstReg destination register
34846       * @param srcBase the source base register
34847       */
34848      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34849      public final void emitCVTSS2SD_Reg_RegInd(XMM dstReg, GPR srcBase) {
34850        int miStart = mi;
34851        setMachineCodes(mi++, (byte) 0xF3);
34852        generateREXprefix(false, dstReg, null, srcBase);
34853        setMachineCodes(mi++, (byte) 0x0F);
34854        setMachineCodes(mi++, (byte) 0x5A);
34855        emitRegIndirectRegOperands(srcBase, dstReg);
34856        if (lister != null) lister.RRN(miStart, "CVTSS2SD", dstReg, srcBase);
34857      }
34858    
34859    
34860      /**
34861       * Generate a register--register CVTSI2SS. That is,
34862       * <PRE>
34863       * dstReg <<=  (quad)  srcReg
34864       * </PRE>
34865       *
34866       * @param dstReg destination register
34867       * @param srcReg source register
34868       */
34869      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34870      public final void emitCVTSI2SS_Reg_Reg(XMM dstReg, GPR srcReg) {
34871        int miStart = mi;
34872        setMachineCodes(mi++, (byte) 0xF3);
34873        generateREXprefix(false, dstReg, null, srcReg);
34874        setMachineCodes(mi++, (byte) 0x0F);
34875        setMachineCodes(mi++, (byte) 0x2A);
34876        emitRegRegOperands(srcReg, dstReg);
34877        if (lister != null) lister.RR(miStart, "CVTSI2SS", dstReg, srcReg);
34878      }
34879    
34880      /**
34881       * Generate a register--register-displacement CVTSI2SS. That is,
34882       * <PRE>
34883       * dstReg <<=  (quad)  [srcBase + srcDisp]
34884       * </PRE>
34885       *
34886       * @param dstReg destination register
34887       * @param srcBase the source base register
34888       * @param srcDisp the source displacement
34889       */
34890      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34891      public final void emitCVTSI2SS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
34892        int miStart = mi;
34893        setMachineCodes(mi++, (byte) 0xF3);
34894        generateREXprefix(false, dstReg, null, srcBase);
34895        setMachineCodes(mi++, (byte) 0x0F);
34896        setMachineCodes(mi++, (byte) 0x2A);
34897        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
34898        if (lister != null) lister.RRD(miStart, "CVTSI2SS", dstReg, srcBase, srcDisp);
34899      }
34900    
34901      /**
34902       * Generate a register--register-offset CVTSI2SS. That is,
34903       * <PRE>
34904       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
34905       * </PRE>
34906       *
34907       * @param dstReg destination register
34908       * @param srcIndex the source index register
34909       * @param srcScale the source scale
34910       * @param srcDisp the source displacement
34911       */
34912      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34913      public final void emitCVTSI2SS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
34914        int miStart = mi;
34915        setMachineCodes(mi++, (byte) 0xF3);
34916        generateREXprefix(false, dstReg, srcIndex, null);
34917        setMachineCodes(mi++, (byte) 0x0F);
34918        setMachineCodes(mi++, (byte) 0x2A);
34919        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
34920        if (lister != null) lister.RRFD(miStart, "CVTSI2SS", dstReg, srcIndex, srcScale, srcDisp);
34921      }
34922    
34923      /**
34924       * Generate a register--absolute CVTSI2SS. That is,
34925       * <PRE>
34926       *  dstReg <<=  (quad)  [srcDisp]
34927       * </PRE>
34928       *
34929       * @param dstReg destination register
34930       * @param srcDisp the source displacement
34931       */
34932      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
34933      public final void emitCVTSI2SS_Reg_Abs(XMM dstReg, Address srcDisp) {
34934        int miStart = mi;
34935        setMachineCodes(mi++, (byte) 0xF3);
34936        generateREXprefix(false, dstReg, null, null);
34937        setMachineCodes(mi++, (byte) 0x0F);
34938        setMachineCodes(mi++, (byte) 0x2A);
34939        emitAbsRegOperands(srcDisp, dstReg);
34940        if (lister != null) lister.RRA(miStart, "CVTSI2SS", dstReg, srcDisp);
34941      }
34942    
34943      /**
34944       * Generate a register--register-index CVTSI2SS. That is,
34945       * <PRE>
34946       * dstReg <<=  (quad)  srcReg
34947       * </PRE>
34948       *
34949       * @param dstReg destination register
34950       * @param srcBase the source base register
34951       * @param srcIndex the source index register
34952       * @param srcScale the source scale
34953       * @param srcDisp the source displacement
34954       */
34955      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
34956      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
34957      public final void emitCVTSI2SS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
34958        int miStart = mi;
34959        setMachineCodes(mi++, (byte) 0xF3);
34960        generateREXprefix(false, dstReg, srcIndex, srcBase);
34961        setMachineCodes(mi++, (byte) 0x0F);
34962        setMachineCodes(mi++, (byte) 0x2A);
34963        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
34964        if (lister != null) lister.RRXD(miStart, "CVTSI2SS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
34965      }
34966    
34967      /**
34968       * Generate a register--register-indirect CVTSI2SS. That is,
34969       * <PRE>
34970       * dstReg <<=  (quad)  [srcBase]
34971       * </PRE>
34972       *
34973       * @param dstReg destination register
34974       * @param srcBase the source base register
34975       */
34976      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34977      public final void emitCVTSI2SS_Reg_RegInd(XMM dstReg, GPR srcBase) {
34978        int miStart = mi;
34979        setMachineCodes(mi++, (byte) 0xF3);
34980        generateREXprefix(false, dstReg, null, srcBase);
34981        setMachineCodes(mi++, (byte) 0x0F);
34982        setMachineCodes(mi++, (byte) 0x2A);
34983        emitRegIndirectRegOperands(srcBase, dstReg);
34984        if (lister != null) lister.RRN(miStart, "CVTSI2SS", dstReg, srcBase);
34985      }
34986    
34987    
34988      /**
34989       * Generate a register--register CVTSI2SS. That is,
34990       * <PRE>
34991       * dstReg <<=  (quad)  srcReg
34992       * </PRE>
34993       *
34994       * @param dstReg destination register
34995       * @param srcReg source register
34996       */
34997      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
34998      public final void emitCVTSI2SS_Reg_Reg_Quad(XMM dstReg, GPR srcReg) {
34999        int miStart = mi;
35000        setMachineCodes(mi++, (byte) 0xF3);
35001        generateREXprefix(true, dstReg, null, srcReg);
35002        setMachineCodes(mi++, (byte) 0x0F);
35003        setMachineCodes(mi++, (byte) 0x2A);
35004        emitRegRegOperands(srcReg, dstReg);
35005        if (lister != null) lister.RR(miStart, "CVTSI2SS", dstReg, srcReg);
35006      }
35007    
35008      /**
35009       * Generate a register--register-displacement CVTSI2SS. That is,
35010       * <PRE>
35011       * dstReg <<=  (quad)  [srcBase + srcDisp]
35012       * </PRE>
35013       *
35014       * @param dstReg destination register
35015       * @param srcBase the source base register
35016       * @param srcDisp the source displacement
35017       */
35018      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35019      public final void emitCVTSI2SS_Reg_RegDisp_Quad(XMM dstReg, GPR srcBase, Offset srcDisp) {
35020        int miStart = mi;
35021        setMachineCodes(mi++, (byte) 0xF3);
35022        generateREXprefix(true, dstReg, null, srcBase);
35023        setMachineCodes(mi++, (byte) 0x0F);
35024        setMachineCodes(mi++, (byte) 0x2A);
35025        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
35026        if (lister != null) lister.RRD(miStart, "CVTSI2SS", dstReg, srcBase, srcDisp);
35027      }
35028    
35029      /**
35030       * Generate a register--register-offset CVTSI2SS. That is,
35031       * <PRE>
35032       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
35033       * </PRE>
35034       *
35035       * @param dstReg destination register
35036       * @param srcIndex the source index register
35037       * @param srcScale the source scale
35038       * @param srcDisp the source displacement
35039       */
35040      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35041      public final void emitCVTSI2SS_Reg_RegOff_Quad(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
35042        int miStart = mi;
35043        setMachineCodes(mi++, (byte) 0xF3);
35044        generateREXprefix(true, dstReg, srcIndex, null);
35045        setMachineCodes(mi++, (byte) 0x0F);
35046        setMachineCodes(mi++, (byte) 0x2A);
35047        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
35048        if (lister != null) lister.RRFD(miStart, "CVTSI2SS", dstReg, srcIndex, srcScale, srcDisp);
35049      }
35050    
35051      /**
35052       * Generate a register--absolute CVTSI2SS. That is,
35053       * <PRE>
35054       *  dstReg <<=  (quad)  [srcDisp]
35055       * </PRE>
35056       *
35057       * @param dstReg destination register
35058       * @param srcDisp the source displacement
35059       */
35060      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
35061      public final void emitCVTSI2SS_Reg_Abs_Quad(XMM dstReg, Address srcDisp) {
35062        int miStart = mi;
35063        setMachineCodes(mi++, (byte) 0xF3);
35064        generateREXprefix(true, dstReg, null, null);
35065        setMachineCodes(mi++, (byte) 0x0F);
35066        setMachineCodes(mi++, (byte) 0x2A);
35067        emitAbsRegOperands(srcDisp, dstReg);
35068        if (lister != null) lister.RRA(miStart, "CVTSI2SS", dstReg, srcDisp);
35069      }
35070    
35071      /**
35072       * Generate a register--register-index CVTSI2SS. That is,
35073       * <PRE>
35074       * dstReg <<=  (quad)  srcReg
35075       * </PRE>
35076       *
35077       * @param dstReg destination register
35078       * @param srcBase the source base register
35079       * @param srcIndex the source index register
35080       * @param srcScale the source scale
35081       * @param srcDisp the source displacement
35082       */
35083      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
35084      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
35085      public final void emitCVTSI2SS_Reg_RegIdx_Quad(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
35086        int miStart = mi;
35087        setMachineCodes(mi++, (byte) 0xF3);
35088        generateREXprefix(true, dstReg, srcIndex, srcBase);
35089        setMachineCodes(mi++, (byte) 0x0F);
35090        setMachineCodes(mi++, (byte) 0x2A);
35091        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
35092        if (lister != null) lister.RRXD(miStart, "CVTSI2SS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
35093      }
35094    
35095      /**
35096       * Generate a register--register-indirect CVTSI2SS. That is,
35097       * <PRE>
35098       * dstReg <<=  (quad)  [srcBase]
35099       * </PRE>
35100       *
35101       * @param dstReg destination register
35102       * @param srcBase the source base register
35103       */
35104      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35105      public final void emitCVTSI2SS_Reg_RegInd_Quad(XMM dstReg, GPR srcBase) {
35106        int miStart = mi;
35107        setMachineCodes(mi++, (byte) 0xF3);
35108        generateREXprefix(true, dstReg, null, srcBase);
35109        setMachineCodes(mi++, (byte) 0x0F);
35110        setMachineCodes(mi++, (byte) 0x2A);
35111        emitRegIndirectRegOperands(srcBase, dstReg);
35112        if (lister != null) lister.RRN(miStart, "CVTSI2SS", dstReg, srcBase);
35113      }
35114    
35115    
35116      /**
35117       * Generate a register--register CVTSS2SI. That is,
35118       * <PRE>
35119       * dstReg <<=  (quad)  srcReg
35120       * </PRE>
35121       *
35122       * @param dstReg destination register
35123       * @param srcReg source register
35124       */
35125      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35126      public final void emitCVTSS2SI_Reg_Reg(GPR dstReg, XMM srcReg) {
35127        int miStart = mi;
35128        setMachineCodes(mi++, (byte) 0xF3);
35129        generateREXprefix(false, dstReg, null, srcReg);
35130        setMachineCodes(mi++, (byte) 0x0F);
35131        setMachineCodes(mi++, (byte) 0x2D);
35132        emitRegRegOperands(srcReg, dstReg);
35133        if (lister != null) lister.RR(miStart, "CVTSS2SI", dstReg, srcReg);
35134      }
35135    
35136      /**
35137       * Generate a register--register-displacement CVTSS2SI. That is,
35138       * <PRE>
35139       * dstReg <<=  (quad)  [srcBase + srcDisp]
35140       * </PRE>
35141       *
35142       * @param dstReg destination register
35143       * @param srcBase the source base register
35144       * @param srcDisp the source displacement
35145       */
35146      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35147      public final void emitCVTSS2SI_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
35148        int miStart = mi;
35149        setMachineCodes(mi++, (byte) 0xF3);
35150        generateREXprefix(false, dstReg, null, srcBase);
35151        setMachineCodes(mi++, (byte) 0x0F);
35152        setMachineCodes(mi++, (byte) 0x2D);
35153        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
35154        if (lister != null) lister.RRD(miStart, "CVTSS2SI", dstReg, srcBase, srcDisp);
35155      }
35156    
35157      /**
35158       * Generate a register--register-offset CVTSS2SI. That is,
35159       * <PRE>
35160       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
35161       * </PRE>
35162       *
35163       * @param dstReg destination register
35164       * @param srcIndex the source index register
35165       * @param srcScale the source scale
35166       * @param srcDisp the source displacement
35167       */
35168      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35169      public final void emitCVTSS2SI_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
35170        int miStart = mi;
35171        setMachineCodes(mi++, (byte) 0xF3);
35172        generateREXprefix(false, dstReg, srcIndex, null);
35173        setMachineCodes(mi++, (byte) 0x0F);
35174        setMachineCodes(mi++, (byte) 0x2D);
35175        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
35176        if (lister != null) lister.RRFD(miStart, "CVTSS2SI", dstReg, srcIndex, srcScale, srcDisp);
35177      }
35178    
35179      /**
35180       * Generate a register--absolute CVTSS2SI. That is,
35181       * <PRE>
35182       *  dstReg <<=  (quad)  [srcDisp]
35183       * </PRE>
35184       *
35185       * @param dstReg destination register
35186       * @param srcDisp the source displacement
35187       */
35188      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
35189      public final void emitCVTSS2SI_Reg_Abs(GPR dstReg, Address srcDisp) {
35190        int miStart = mi;
35191        setMachineCodes(mi++, (byte) 0xF3);
35192        generateREXprefix(false, dstReg, null, null);
35193        setMachineCodes(mi++, (byte) 0x0F);
35194        setMachineCodes(mi++, (byte) 0x2D);
35195        emitAbsRegOperands(srcDisp, dstReg);
35196        if (lister != null) lister.RRA(miStart, "CVTSS2SI", dstReg, srcDisp);
35197      }
35198    
35199      /**
35200       * Generate a register--register-index CVTSS2SI. That is,
35201       * <PRE>
35202       * dstReg <<=  (quad)  srcReg
35203       * </PRE>
35204       *
35205       * @param dstReg destination register
35206       * @param srcBase the source base register
35207       * @param srcIndex the source index register
35208       * @param srcScale the source scale
35209       * @param srcDisp the source displacement
35210       */
35211      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
35212      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
35213      public final void emitCVTSS2SI_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
35214        int miStart = mi;
35215        setMachineCodes(mi++, (byte) 0xF3);
35216        generateREXprefix(false, dstReg, srcIndex, srcBase);
35217        setMachineCodes(mi++, (byte) 0x0F);
35218        setMachineCodes(mi++, (byte) 0x2D);
35219        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
35220        if (lister != null) lister.RRXD(miStart, "CVTSS2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp);
35221      }
35222    
35223      /**
35224       * Generate a register--register-indirect CVTSS2SI. That is,
35225       * <PRE>
35226       * dstReg <<=  (quad)  [srcBase]
35227       * </PRE>
35228       *
35229       * @param dstReg destination register
35230       * @param srcBase the source base register
35231       */
35232      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35233      public final void emitCVTSS2SI_Reg_RegInd(GPR dstReg, GPR srcBase) {
35234        int miStart = mi;
35235        setMachineCodes(mi++, (byte) 0xF3);
35236        generateREXprefix(false, dstReg, null, srcBase);
35237        setMachineCodes(mi++, (byte) 0x0F);
35238        setMachineCodes(mi++, (byte) 0x2D);
35239        emitRegIndirectRegOperands(srcBase, dstReg);
35240        if (lister != null) lister.RRN(miStart, "CVTSS2SI", dstReg, srcBase);
35241      }
35242    
35243    
35244      /**
35245       * Generate a register--register CVTSS2SI. That is,
35246       * <PRE>
35247       * dstReg <<=  (quad)  srcReg
35248       * </PRE>
35249       *
35250       * @param dstReg destination register
35251       * @param srcReg source register
35252       */
35253      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35254      public final void emitCVTSS2SI_Reg_Reg_Quad(GPR dstReg, XMM srcReg) {
35255        int miStart = mi;
35256        setMachineCodes(mi++, (byte) 0xF3);
35257        generateREXprefix(true, dstReg, null, srcReg);
35258        setMachineCodes(mi++, (byte) 0x0F);
35259        setMachineCodes(mi++, (byte) 0x2D);
35260        emitRegRegOperands(srcReg, dstReg);
35261        if (lister != null) lister.RR(miStart, "CVTSS2SI", dstReg, srcReg);
35262      }
35263    
35264      /**
35265       * Generate a register--register-displacement CVTSS2SI. That is,
35266       * <PRE>
35267       * dstReg <<=  (quad)  [srcBase + srcDisp]
35268       * </PRE>
35269       *
35270       * @param dstReg destination register
35271       * @param srcBase the source base register
35272       * @param srcDisp the source displacement
35273       */
35274      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35275      public final void emitCVTSS2SI_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
35276        int miStart = mi;
35277        setMachineCodes(mi++, (byte) 0xF3);
35278        generateREXprefix(true, dstReg, null, srcBase);
35279        setMachineCodes(mi++, (byte) 0x0F);
35280        setMachineCodes(mi++, (byte) 0x2D);
35281        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
35282        if (lister != null) lister.RRD(miStart, "CVTSS2SI", dstReg, srcBase, srcDisp);
35283      }
35284    
35285      /**
35286       * Generate a register--register-offset CVTSS2SI. That is,
35287       * <PRE>
35288       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
35289       * </PRE>
35290       *
35291       * @param dstReg destination register
35292       * @param srcIndex the source index register
35293       * @param srcScale the source scale
35294       * @param srcDisp the source displacement
35295       */
35296      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35297      public final void emitCVTSS2SI_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
35298        int miStart = mi;
35299        setMachineCodes(mi++, (byte) 0xF3);
35300        generateREXprefix(true, dstReg, srcIndex, null);
35301        setMachineCodes(mi++, (byte) 0x0F);
35302        setMachineCodes(mi++, (byte) 0x2D);
35303        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
35304        if (lister != null) lister.RRFD(miStart, "CVTSS2SI", dstReg, srcIndex, srcScale, srcDisp);
35305      }
35306    
35307      /**
35308       * Generate a register--absolute CVTSS2SI. That is,
35309       * <PRE>
35310       *  dstReg <<=  (quad)  [srcDisp]
35311       * </PRE>
35312       *
35313       * @param dstReg destination register
35314       * @param srcDisp the source displacement
35315       */
35316      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
35317      public final void emitCVTSS2SI_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
35318        int miStart = mi;
35319        setMachineCodes(mi++, (byte) 0xF3);
35320        generateREXprefix(true, dstReg, null, null);
35321        setMachineCodes(mi++, (byte) 0x0F);
35322        setMachineCodes(mi++, (byte) 0x2D);
35323        emitAbsRegOperands(srcDisp, dstReg);
35324        if (lister != null) lister.RRA(miStart, "CVTSS2SI", dstReg, srcDisp);
35325      }
35326    
35327      /**
35328       * Generate a register--register-index CVTSS2SI. That is,
35329       * <PRE>
35330       * dstReg <<=  (quad)  srcReg
35331       * </PRE>
35332       *
35333       * @param dstReg destination register
35334       * @param srcBase the source base register
35335       * @param srcIndex the source index register
35336       * @param srcScale the source scale
35337       * @param srcDisp the source displacement
35338       */
35339      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
35340      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
35341      public final void emitCVTSS2SI_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
35342        int miStart = mi;
35343        setMachineCodes(mi++, (byte) 0xF3);
35344        generateREXprefix(true, dstReg, srcIndex, srcBase);
35345        setMachineCodes(mi++, (byte) 0x0F);
35346        setMachineCodes(mi++, (byte) 0x2D);
35347        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
35348        if (lister != null) lister.RRXD(miStart, "CVTSS2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp);
35349      }
35350    
35351      /**
35352       * Generate a register--register-indirect CVTSS2SI. That is,
35353       * <PRE>
35354       * dstReg <<=  (quad)  [srcBase]
35355       * </PRE>
35356       *
35357       * @param dstReg destination register
35358       * @param srcBase the source base register
35359       */
35360      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35361      public final void emitCVTSS2SI_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
35362        int miStart = mi;
35363        setMachineCodes(mi++, (byte) 0xF3);
35364        generateREXprefix(true, dstReg, null, srcBase);
35365        setMachineCodes(mi++, (byte) 0x0F);
35366        setMachineCodes(mi++, (byte) 0x2D);
35367        emitRegIndirectRegOperands(srcBase, dstReg);
35368        if (lister != null) lister.RRN(miStart, "CVTSS2SI", dstReg, srcBase);
35369      }
35370    
35371    
35372      /**
35373       * Generate a register--register CVTTSS2SI. That is,
35374       * <PRE>
35375       * dstReg <<=  (quad)  srcReg
35376       * </PRE>
35377       *
35378       * @param dstReg destination register
35379       * @param srcReg source register
35380       */
35381      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35382      public final void emitCVTTSS2SI_Reg_Reg(GPR dstReg, XMM srcReg) {
35383        int miStart = mi;
35384        setMachineCodes(mi++, (byte) 0xF3);
35385        generateREXprefix(false, dstReg, null, srcReg);
35386        setMachineCodes(mi++, (byte) 0x0F);
35387        setMachineCodes(mi++, (byte) 0x2C);
35388        emitRegRegOperands(srcReg, dstReg);
35389        if (lister != null) lister.RR(miStart, "CVTTSS2SI", dstReg, srcReg);
35390      }
35391    
35392      /**
35393       * Generate a register--register-displacement CVTTSS2SI. That is,
35394       * <PRE>
35395       * dstReg <<=  (quad)  [srcBase + srcDisp]
35396       * </PRE>
35397       *
35398       * @param dstReg destination register
35399       * @param srcBase the source base register
35400       * @param srcDisp the source displacement
35401       */
35402      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35403      public final void emitCVTTSS2SI_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
35404        int miStart = mi;
35405        setMachineCodes(mi++, (byte) 0xF3);
35406        generateREXprefix(false, dstReg, null, srcBase);
35407        setMachineCodes(mi++, (byte) 0x0F);
35408        setMachineCodes(mi++, (byte) 0x2C);
35409        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
35410        if (lister != null) lister.RRD(miStart, "CVTTSS2SI", dstReg, srcBase, srcDisp);
35411      }
35412    
35413      /**
35414       * Generate a register--register-offset CVTTSS2SI. That is,
35415       * <PRE>
35416       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
35417       * </PRE>
35418       *
35419       * @param dstReg destination register
35420       * @param srcIndex the source index register
35421       * @param srcScale the source scale
35422       * @param srcDisp the source displacement
35423       */
35424      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35425      public final void emitCVTTSS2SI_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
35426        int miStart = mi;
35427        setMachineCodes(mi++, (byte) 0xF3);
35428        generateREXprefix(false, dstReg, srcIndex, null);
35429        setMachineCodes(mi++, (byte) 0x0F);
35430        setMachineCodes(mi++, (byte) 0x2C);
35431        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
35432        if (lister != null) lister.RRFD(miStart, "CVTTSS2SI", dstReg, srcIndex, srcScale, srcDisp);
35433      }
35434    
35435      /**
35436       * Generate a register--absolute CVTTSS2SI. That is,
35437       * <PRE>
35438       *  dstReg <<=  (quad)  [srcDisp]
35439       * </PRE>
35440       *
35441       * @param dstReg destination register
35442       * @param srcDisp the source displacement
35443       */
35444      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
35445      public final void emitCVTTSS2SI_Reg_Abs(GPR dstReg, Address srcDisp) {
35446        int miStart = mi;
35447        setMachineCodes(mi++, (byte) 0xF3);
35448        generateREXprefix(false, dstReg, null, null);
35449        setMachineCodes(mi++, (byte) 0x0F);
35450        setMachineCodes(mi++, (byte) 0x2C);
35451        emitAbsRegOperands(srcDisp, dstReg);
35452        if (lister != null) lister.RRA(miStart, "CVTTSS2SI", dstReg, srcDisp);
35453      }
35454    
35455      /**
35456       * Generate a register--register-index CVTTSS2SI. That is,
35457       * <PRE>
35458       * dstReg <<=  (quad)  srcReg
35459       * </PRE>
35460       *
35461       * @param dstReg destination register
35462       * @param srcBase the source base register
35463       * @param srcIndex the source index register
35464       * @param srcScale the source scale
35465       * @param srcDisp the source displacement
35466       */
35467      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
35468      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
35469      public final void emitCVTTSS2SI_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
35470        int miStart = mi;
35471        setMachineCodes(mi++, (byte) 0xF3);
35472        generateREXprefix(false, dstReg, srcIndex, srcBase);
35473        setMachineCodes(mi++, (byte) 0x0F);
35474        setMachineCodes(mi++, (byte) 0x2C);
35475        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
35476        if (lister != null) lister.RRXD(miStart, "CVTTSS2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp);
35477      }
35478    
35479      /**
35480       * Generate a register--register-indirect CVTTSS2SI. That is,
35481       * <PRE>
35482       * dstReg <<=  (quad)  [srcBase]
35483       * </PRE>
35484       *
35485       * @param dstReg destination register
35486       * @param srcBase the source base register
35487       */
35488      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35489      public final void emitCVTTSS2SI_Reg_RegInd(GPR dstReg, GPR srcBase) {
35490        int miStart = mi;
35491        setMachineCodes(mi++, (byte) 0xF3);
35492        generateREXprefix(false, dstReg, null, srcBase);
35493        setMachineCodes(mi++, (byte) 0x0F);
35494        setMachineCodes(mi++, (byte) 0x2C);
35495        emitRegIndirectRegOperands(srcBase, dstReg);
35496        if (lister != null) lister.RRN(miStart, "CVTTSS2SI", dstReg, srcBase);
35497      }
35498    
35499    
35500      /**
35501       * Generate a register--register CVTTSS2SI. That is,
35502       * <PRE>
35503       * dstReg <<=  (quad)  srcReg
35504       * </PRE>
35505       *
35506       * @param dstReg destination register
35507       * @param srcReg source register
35508       */
35509      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35510      public final void emitCVTTSS2SI_Reg_Reg_Quad(GPR dstReg, XMM srcReg) {
35511        int miStart = mi;
35512        setMachineCodes(mi++, (byte) 0xF3);
35513        generateREXprefix(true, dstReg, null, srcReg);
35514        setMachineCodes(mi++, (byte) 0x0F);
35515        setMachineCodes(mi++, (byte) 0x2C);
35516        emitRegRegOperands(srcReg, dstReg);
35517        if (lister != null) lister.RR(miStart, "CVTTSS2SI", dstReg, srcReg);
35518      }
35519    
35520      /**
35521       * Generate a register--register-displacement CVTTSS2SI. That is,
35522       * <PRE>
35523       * dstReg <<=  (quad)  [srcBase + srcDisp]
35524       * </PRE>
35525       *
35526       * @param dstReg destination register
35527       * @param srcBase the source base register
35528       * @param srcDisp the source displacement
35529       */
35530      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35531      public final void emitCVTTSS2SI_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
35532        int miStart = mi;
35533        setMachineCodes(mi++, (byte) 0xF3);
35534        generateREXprefix(true, dstReg, null, srcBase);
35535        setMachineCodes(mi++, (byte) 0x0F);
35536        setMachineCodes(mi++, (byte) 0x2C);
35537        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
35538        if (lister != null) lister.RRD(miStart, "CVTTSS2SI", dstReg, srcBase, srcDisp);
35539      }
35540    
35541      /**
35542       * Generate a register--register-offset CVTTSS2SI. That is,
35543       * <PRE>
35544       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
35545       * </PRE>
35546       *
35547       * @param dstReg destination register
35548       * @param srcIndex the source index register
35549       * @param srcScale the source scale
35550       * @param srcDisp the source displacement
35551       */
35552      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35553      public final void emitCVTTSS2SI_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
35554        int miStart = mi;
35555        setMachineCodes(mi++, (byte) 0xF3);
35556        generateREXprefix(true, dstReg, srcIndex, null);
35557        setMachineCodes(mi++, (byte) 0x0F);
35558        setMachineCodes(mi++, (byte) 0x2C);
35559        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
35560        if (lister != null) lister.RRFD(miStart, "CVTTSS2SI", dstReg, srcIndex, srcScale, srcDisp);
35561      }
35562    
35563      /**
35564       * Generate a register--absolute CVTTSS2SI. That is,
35565       * <PRE>
35566       *  dstReg <<=  (quad)  [srcDisp]
35567       * </PRE>
35568       *
35569       * @param dstReg destination register
35570       * @param srcDisp the source displacement
35571       */
35572      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
35573      public final void emitCVTTSS2SI_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
35574        int miStart = mi;
35575        setMachineCodes(mi++, (byte) 0xF3);
35576        generateREXprefix(true, dstReg, null, null);
35577        setMachineCodes(mi++, (byte) 0x0F);
35578        setMachineCodes(mi++, (byte) 0x2C);
35579        emitAbsRegOperands(srcDisp, dstReg);
35580        if (lister != null) lister.RRA(miStart, "CVTTSS2SI", dstReg, srcDisp);
35581      }
35582    
35583      /**
35584       * Generate a register--register-index CVTTSS2SI. That is,
35585       * <PRE>
35586       * dstReg <<=  (quad)  srcReg
35587       * </PRE>
35588       *
35589       * @param dstReg destination register
35590       * @param srcBase the source base register
35591       * @param srcIndex the source index register
35592       * @param srcScale the source scale
35593       * @param srcDisp the source displacement
35594       */
35595      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
35596      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
35597      public final void emitCVTTSS2SI_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
35598        int miStart = mi;
35599        setMachineCodes(mi++, (byte) 0xF3);
35600        generateREXprefix(true, dstReg, srcIndex, srcBase);
35601        setMachineCodes(mi++, (byte) 0x0F);
35602        setMachineCodes(mi++, (byte) 0x2C);
35603        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
35604        if (lister != null) lister.RRXD(miStart, "CVTTSS2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp);
35605      }
35606    
35607      /**
35608       * Generate a register--register-indirect CVTTSS2SI. That is,
35609       * <PRE>
35610       * dstReg <<=  (quad)  [srcBase]
35611       * </PRE>
35612       *
35613       * @param dstReg destination register
35614       * @param srcBase the source base register
35615       */
35616      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35617      public final void emitCVTTSS2SI_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
35618        int miStart = mi;
35619        setMachineCodes(mi++, (byte) 0xF3);
35620        generateREXprefix(true, dstReg, null, srcBase);
35621        setMachineCodes(mi++, (byte) 0x0F);
35622        setMachineCodes(mi++, (byte) 0x2C);
35623        emitRegIndirectRegOperands(srcBase, dstReg);
35624        if (lister != null) lister.RRN(miStart, "CVTTSS2SI", dstReg, srcBase);
35625      }
35626    
35627    
35628      /**
35629       * Generate a register--register UCOMISS. That is,
35630       * <PRE>
35631       * dstReg <<=  (quad)  srcReg
35632       * </PRE>
35633       *
35634       * @param dstReg destination register
35635       * @param srcReg source register
35636       */
35637      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35638      public final void emitUCOMISS_Reg_Reg(XMM dstReg, XMM srcReg) {
35639        int miStart = mi;
35640        generateREXprefix(false, dstReg, null, srcReg);
35641        setMachineCodes(mi++, (byte) 0x0F);
35642        setMachineCodes(mi++, (byte) 0x2E);
35643        emitRegRegOperands(srcReg, dstReg);
35644        if (lister != null) lister.RR(miStart, "UCOMISS", dstReg, srcReg);
35645      }
35646    
35647      /**
35648       * Generate a register--register-displacement UCOMISS. That is,
35649       * <PRE>
35650       * dstReg <<=  (quad)  [srcBase + srcDisp]
35651       * </PRE>
35652       *
35653       * @param dstReg destination register
35654       * @param srcBase the source base register
35655       * @param srcDisp the source displacement
35656       */
35657      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35658      public final void emitUCOMISS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
35659        int miStart = mi;
35660        generateREXprefix(false, dstReg, null, srcBase);
35661        setMachineCodes(mi++, (byte) 0x0F);
35662        setMachineCodes(mi++, (byte) 0x2E);
35663        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
35664        if (lister != null) lister.RRD(miStart, "UCOMISS", dstReg, srcBase, srcDisp);
35665      }
35666    
35667      /**
35668       * Generate a register--register-offset UCOMISS. That is,
35669       * <PRE>
35670       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
35671       * </PRE>
35672       *
35673       * @param dstReg destination register
35674       * @param srcIndex the source index register
35675       * @param srcScale the source scale
35676       * @param srcDisp the source displacement
35677       */
35678      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35679      public final void emitUCOMISS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
35680        int miStart = mi;
35681        generateREXprefix(false, dstReg, srcIndex, null);
35682        setMachineCodes(mi++, (byte) 0x0F);
35683        setMachineCodes(mi++, (byte) 0x2E);
35684        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
35685        if (lister != null) lister.RRFD(miStart, "UCOMISS", dstReg, srcIndex, srcScale, srcDisp);
35686      }
35687    
35688      /**
35689       * Generate a register--absolute UCOMISS. That is,
35690       * <PRE>
35691       *  dstReg <<=  (quad)  [srcDisp]
35692       * </PRE>
35693       *
35694       * @param dstReg destination register
35695       * @param srcDisp the source displacement
35696       */
35697      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
35698      public final void emitUCOMISS_Reg_Abs(XMM dstReg, Address srcDisp) {
35699        int miStart = mi;
35700        generateREXprefix(false, dstReg, null, null);
35701        setMachineCodes(mi++, (byte) 0x0F);
35702        setMachineCodes(mi++, (byte) 0x2E);
35703        emitAbsRegOperands(srcDisp, dstReg);
35704        if (lister != null) lister.RRA(miStart, "UCOMISS", dstReg, srcDisp);
35705      }
35706    
35707      /**
35708       * Generate a register--register-index UCOMISS. That is,
35709       * <PRE>
35710       * dstReg <<=  (quad)  srcReg
35711       * </PRE>
35712       *
35713       * @param dstReg destination register
35714       * @param srcBase the source base register
35715       * @param srcIndex the source index register
35716       * @param srcScale the source scale
35717       * @param srcDisp the source displacement
35718       */
35719      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
35720      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
35721      public final void emitUCOMISS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
35722        int miStart = mi;
35723        generateREXprefix(false, dstReg, srcIndex, srcBase);
35724        setMachineCodes(mi++, (byte) 0x0F);
35725        setMachineCodes(mi++, (byte) 0x2E);
35726        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
35727        if (lister != null) lister.RRXD(miStart, "UCOMISS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
35728      }
35729    
35730      /**
35731       * Generate a register--register-indirect UCOMISS. That is,
35732       * <PRE>
35733       * dstReg <<=  (quad)  [srcBase]
35734       * </PRE>
35735       *
35736       * @param dstReg destination register
35737       * @param srcBase the source base register
35738       */
35739      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35740      public final void emitUCOMISS_Reg_RegInd(XMM dstReg, GPR srcBase) {
35741        int miStart = mi;
35742        generateREXprefix(false, dstReg, null, srcBase);
35743        setMachineCodes(mi++, (byte) 0x0F);
35744        setMachineCodes(mi++, (byte) 0x2E);
35745        emitRegIndirectRegOperands(srcBase, dstReg);
35746        if (lister != null) lister.RRN(miStart, "UCOMISS", dstReg, srcBase);
35747      }
35748    
35749    
35750      /**
35751       * Generate a register--register CMPEQSS. That is,
35752       * <PRE>
35753       * dstReg <<=  (quad)  srcReg
35754       * </PRE>
35755       *
35756       * @param dstReg destination register
35757       * @param srcReg source register
35758       */
35759      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35760      public final void emitCMPEQSS_Reg_Reg(XMM dstReg, XMM srcReg) {
35761        int miStart = mi;
35762        setMachineCodes(mi++, (byte) 0xF3);
35763        generateREXprefix(false, dstReg, null, srcReg);
35764        setMachineCodes(mi++, (byte) 0x0F);
35765        setMachineCodes(mi++, (byte) 0xC2);
35766        emitRegRegOperands(srcReg, dstReg);
35767        setMachineCodes(mi++, (byte) 0);
35768        if (lister != null) lister.RR(miStart, "CMPEQSS", dstReg, srcReg);
35769      }
35770    
35771      /**
35772       * Generate a register--register-displacement CMPEQSS. That is,
35773       * <PRE>
35774       * dstReg <<=  (quad)  [srcBase + srcDisp]
35775       * </PRE>
35776       *
35777       * @param dstReg destination register
35778       * @param srcBase the source base register
35779       * @param srcDisp the source displacement
35780       */
35781      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35782      public final void emitCMPEQSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
35783        int miStart = mi;
35784        setMachineCodes(mi++, (byte) 0xF3);
35785        generateREXprefix(false, dstReg, null, srcBase);
35786        setMachineCodes(mi++, (byte) 0x0F);
35787        setMachineCodes(mi++, (byte) 0xC2);
35788        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
35789        setMachineCodes(mi++, (byte) 0);
35790        if (lister != null) lister.RRD(miStart, "CMPEQSS", dstReg, srcBase, srcDisp);
35791      }
35792    
35793      /**
35794       * Generate a register--register-offset CMPEQSS. That is,
35795       * <PRE>
35796       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
35797       * </PRE>
35798       *
35799       * @param dstReg destination register
35800       * @param srcIndex the source index register
35801       * @param srcScale the source scale
35802       * @param srcDisp the source displacement
35803       */
35804      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35805      public final void emitCMPEQSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
35806        int miStart = mi;
35807        setMachineCodes(mi++, (byte) 0xF3);
35808        generateREXprefix(false, dstReg, srcIndex, null);
35809        setMachineCodes(mi++, (byte) 0x0F);
35810        setMachineCodes(mi++, (byte) 0xC2);
35811        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
35812        setMachineCodes(mi++, (byte) 0);
35813        if (lister != null) lister.RRFD(miStart, "CMPEQSS", dstReg, srcIndex, srcScale, srcDisp);
35814      }
35815    
35816      /**
35817       * Generate a register--absolute CMPEQSS. That is,
35818       * <PRE>
35819       *  dstReg <<=  (quad)  [srcDisp]
35820       * </PRE>
35821       *
35822       * @param dstReg destination register
35823       * @param srcDisp the source displacement
35824       */
35825      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
35826      public final void emitCMPEQSS_Reg_Abs(XMM dstReg, Address srcDisp) {
35827        int miStart = mi;
35828        setMachineCodes(mi++, (byte) 0xF3);
35829        generateREXprefix(false, dstReg, null, null);
35830        setMachineCodes(mi++, (byte) 0x0F);
35831        setMachineCodes(mi++, (byte) 0xC2);
35832        emitAbsRegOperands(srcDisp, dstReg);
35833        setMachineCodes(mi++, (byte) 0);
35834        if (lister != null) lister.RRA(miStart, "CMPEQSS", dstReg, srcDisp);
35835      }
35836    
35837      /**
35838       * Generate a register--register-index CMPEQSS. That is,
35839       * <PRE>
35840       * dstReg <<=  (quad)  srcReg
35841       * </PRE>
35842       *
35843       * @param dstReg destination register
35844       * @param srcBase the source base register
35845       * @param srcIndex the source index register
35846       * @param srcScale the source scale
35847       * @param srcDisp the source displacement
35848       */
35849      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
35850      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
35851      public final void emitCMPEQSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
35852        int miStart = mi;
35853        setMachineCodes(mi++, (byte) 0xF3);
35854        generateREXprefix(false, dstReg, srcIndex, srcBase);
35855        setMachineCodes(mi++, (byte) 0x0F);
35856        setMachineCodes(mi++, (byte) 0xC2);
35857        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
35858        setMachineCodes(mi++, (byte) 0);
35859        if (lister != null) lister.RRXD(miStart, "CMPEQSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
35860      }
35861    
35862      /**
35863       * Generate a register--register-indirect CMPEQSS. That is,
35864       * <PRE>
35865       * dstReg <<=  (quad)  [srcBase]
35866       * </PRE>
35867       *
35868       * @param dstReg destination register
35869       * @param srcBase the source base register
35870       */
35871      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35872      public final void emitCMPEQSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
35873        int miStart = mi;
35874        setMachineCodes(mi++, (byte) 0xF3);
35875        generateREXprefix(false, dstReg, null, srcBase);
35876        setMachineCodes(mi++, (byte) 0x0F);
35877        setMachineCodes(mi++, (byte) 0xC2);
35878        emitRegIndirectRegOperands(srcBase, dstReg);
35879        setMachineCodes(mi++, (byte) 0);
35880        if (lister != null) lister.RRN(miStart, "CMPEQSS", dstReg, srcBase);
35881      }
35882    
35883    
35884      /**
35885       * Generate a register--register CMPLTSS. That is,
35886       * <PRE>
35887       * dstReg <<=  (quad)  srcReg
35888       * </PRE>
35889       *
35890       * @param dstReg destination register
35891       * @param srcReg source register
35892       */
35893      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35894      public final void emitCMPLTSS_Reg_Reg(XMM dstReg, XMM srcReg) {
35895        int miStart = mi;
35896        setMachineCodes(mi++, (byte) 0xF3);
35897        generateREXprefix(false, dstReg, null, srcReg);
35898        setMachineCodes(mi++, (byte) 0x0F);
35899        setMachineCodes(mi++, (byte) 0xC2);
35900        emitRegRegOperands(srcReg, dstReg);
35901        setMachineCodes(mi++, (byte) 1);
35902        if (lister != null) lister.RR(miStart, "CMPLTSS", dstReg, srcReg);
35903      }
35904    
35905      /**
35906       * Generate a register--register-displacement CMPLTSS. That is,
35907       * <PRE>
35908       * dstReg <<=  (quad)  [srcBase + srcDisp]
35909       * </PRE>
35910       *
35911       * @param dstReg destination register
35912       * @param srcBase the source base register
35913       * @param srcDisp the source displacement
35914       */
35915      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35916      public final void emitCMPLTSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
35917        int miStart = mi;
35918        setMachineCodes(mi++, (byte) 0xF3);
35919        generateREXprefix(false, dstReg, null, srcBase);
35920        setMachineCodes(mi++, (byte) 0x0F);
35921        setMachineCodes(mi++, (byte) 0xC2);
35922        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
35923        setMachineCodes(mi++, (byte) 1);
35924        if (lister != null) lister.RRD(miStart, "CMPLTSS", dstReg, srcBase, srcDisp);
35925      }
35926    
35927      /**
35928       * Generate a register--register-offset CMPLTSS. That is,
35929       * <PRE>
35930       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
35931       * </PRE>
35932       *
35933       * @param dstReg destination register
35934       * @param srcIndex the source index register
35935       * @param srcScale the source scale
35936       * @param srcDisp the source displacement
35937       */
35938      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
35939      public final void emitCMPLTSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
35940        int miStart = mi;
35941        setMachineCodes(mi++, (byte) 0xF3);
35942        generateREXprefix(false, dstReg, srcIndex, null);
35943        setMachineCodes(mi++, (byte) 0x0F);
35944        setMachineCodes(mi++, (byte) 0xC2);
35945        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
35946        setMachineCodes(mi++, (byte) 1);
35947        if (lister != null) lister.RRFD(miStart, "CMPLTSS", dstReg, srcIndex, srcScale, srcDisp);
35948      }
35949    
35950      /**
35951       * Generate a register--absolute CMPLTSS. That is,
35952       * <PRE>
35953       *  dstReg <<=  (quad)  [srcDisp]
35954       * </PRE>
35955       *
35956       * @param dstReg destination register
35957       * @param srcDisp the source displacement
35958       */
35959      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
35960      public final void emitCMPLTSS_Reg_Abs(XMM dstReg, Address srcDisp) {
35961        int miStart = mi;
35962        setMachineCodes(mi++, (byte) 0xF3);
35963        generateREXprefix(false, dstReg, null, null);
35964        setMachineCodes(mi++, (byte) 0x0F);
35965        setMachineCodes(mi++, (byte) 0xC2);
35966        emitAbsRegOperands(srcDisp, dstReg);
35967        setMachineCodes(mi++, (byte) 1);
35968        if (lister != null) lister.RRA(miStart, "CMPLTSS", dstReg, srcDisp);
35969      }
35970    
35971      /**
35972       * Generate a register--register-index CMPLTSS. That is,
35973       * <PRE>
35974       * dstReg <<=  (quad)  srcReg
35975       * </PRE>
35976       *
35977       * @param dstReg destination register
35978       * @param srcBase the source base register
35979       * @param srcIndex the source index register
35980       * @param srcScale the source scale
35981       * @param srcDisp the source displacement
35982       */
35983      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
35984      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
35985      public final void emitCMPLTSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
35986        int miStart = mi;
35987        setMachineCodes(mi++, (byte) 0xF3);
35988        generateREXprefix(false, dstReg, srcIndex, srcBase);
35989        setMachineCodes(mi++, (byte) 0x0F);
35990        setMachineCodes(mi++, (byte) 0xC2);
35991        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
35992        setMachineCodes(mi++, (byte) 1);
35993        if (lister != null) lister.RRXD(miStart, "CMPLTSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
35994      }
35995    
35996      /**
35997       * Generate a register--register-indirect CMPLTSS. That is,
35998       * <PRE>
35999       * dstReg <<=  (quad)  [srcBase]
36000       * </PRE>
36001       *
36002       * @param dstReg destination register
36003       * @param srcBase the source base register
36004       */
36005      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36006      public final void emitCMPLTSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
36007        int miStart = mi;
36008        setMachineCodes(mi++, (byte) 0xF3);
36009        generateREXprefix(false, dstReg, null, srcBase);
36010        setMachineCodes(mi++, (byte) 0x0F);
36011        setMachineCodes(mi++, (byte) 0xC2);
36012        emitRegIndirectRegOperands(srcBase, dstReg);
36013        setMachineCodes(mi++, (byte) 1);
36014        if (lister != null) lister.RRN(miStart, "CMPLTSS", dstReg, srcBase);
36015      }
36016    
36017    
36018      /**
36019       * Generate a register--register CMPLESS. That is,
36020       * <PRE>
36021       * dstReg <<=  (quad)  srcReg
36022       * </PRE>
36023       *
36024       * @param dstReg destination register
36025       * @param srcReg source register
36026       */
36027      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36028      public final void emitCMPLESS_Reg_Reg(XMM dstReg, XMM srcReg) {
36029        int miStart = mi;
36030        setMachineCodes(mi++, (byte) 0xF3);
36031        generateREXprefix(false, dstReg, null, srcReg);
36032        setMachineCodes(mi++, (byte) 0x0F);
36033        setMachineCodes(mi++, (byte) 0xC2);
36034        emitRegRegOperands(srcReg, dstReg);
36035        setMachineCodes(mi++, (byte) 2);
36036        if (lister != null) lister.RR(miStart, "CMPLESS", dstReg, srcReg);
36037      }
36038    
36039      /**
36040       * Generate a register--register-displacement CMPLESS. That is,
36041       * <PRE>
36042       * dstReg <<=  (quad)  [srcBase + srcDisp]
36043       * </PRE>
36044       *
36045       * @param dstReg destination register
36046       * @param srcBase the source base register
36047       * @param srcDisp the source displacement
36048       */
36049      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36050      public final void emitCMPLESS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
36051        int miStart = mi;
36052        setMachineCodes(mi++, (byte) 0xF3);
36053        generateREXprefix(false, dstReg, null, srcBase);
36054        setMachineCodes(mi++, (byte) 0x0F);
36055        setMachineCodes(mi++, (byte) 0xC2);
36056        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
36057        setMachineCodes(mi++, (byte) 2);
36058        if (lister != null) lister.RRD(miStart, "CMPLESS", dstReg, srcBase, srcDisp);
36059      }
36060    
36061      /**
36062       * Generate a register--register-offset CMPLESS. That is,
36063       * <PRE>
36064       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
36065       * </PRE>
36066       *
36067       * @param dstReg destination register
36068       * @param srcIndex the source index register
36069       * @param srcScale the source scale
36070       * @param srcDisp the source displacement
36071       */
36072      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36073      public final void emitCMPLESS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
36074        int miStart = mi;
36075        setMachineCodes(mi++, (byte) 0xF3);
36076        generateREXprefix(false, dstReg, srcIndex, null);
36077        setMachineCodes(mi++, (byte) 0x0F);
36078        setMachineCodes(mi++, (byte) 0xC2);
36079        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
36080        setMachineCodes(mi++, (byte) 2);
36081        if (lister != null) lister.RRFD(miStart, "CMPLESS", dstReg, srcIndex, srcScale, srcDisp);
36082      }
36083    
36084      /**
36085       * Generate a register--absolute CMPLESS. That is,
36086       * <PRE>
36087       *  dstReg <<=  (quad)  [srcDisp]
36088       * </PRE>
36089       *
36090       * @param dstReg destination register
36091       * @param srcDisp the source displacement
36092       */
36093      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
36094      public final void emitCMPLESS_Reg_Abs(XMM dstReg, Address srcDisp) {
36095        int miStart = mi;
36096        setMachineCodes(mi++, (byte) 0xF3);
36097        generateREXprefix(false, dstReg, null, null);
36098        setMachineCodes(mi++, (byte) 0x0F);
36099        setMachineCodes(mi++, (byte) 0xC2);
36100        emitAbsRegOperands(srcDisp, dstReg);
36101        setMachineCodes(mi++, (byte) 2);
36102        if (lister != null) lister.RRA(miStart, "CMPLESS", dstReg, srcDisp);
36103      }
36104    
36105      /**
36106       * Generate a register--register-index CMPLESS. That is,
36107       * <PRE>
36108       * dstReg <<=  (quad)  srcReg
36109       * </PRE>
36110       *
36111       * @param dstReg destination register
36112       * @param srcBase the source base register
36113       * @param srcIndex the source index register
36114       * @param srcScale the source scale
36115       * @param srcDisp the source displacement
36116       */
36117      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
36118      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
36119      public final void emitCMPLESS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
36120        int miStart = mi;
36121        setMachineCodes(mi++, (byte) 0xF3);
36122        generateREXprefix(false, dstReg, srcIndex, srcBase);
36123        setMachineCodes(mi++, (byte) 0x0F);
36124        setMachineCodes(mi++, (byte) 0xC2);
36125        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
36126        setMachineCodes(mi++, (byte) 2);
36127        if (lister != null) lister.RRXD(miStart, "CMPLESS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
36128      }
36129    
36130      /**
36131       * Generate a register--register-indirect CMPLESS. That is,
36132       * <PRE>
36133       * dstReg <<=  (quad)  [srcBase]
36134       * </PRE>
36135       *
36136       * @param dstReg destination register
36137       * @param srcBase the source base register
36138       */
36139      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36140      public final void emitCMPLESS_Reg_RegInd(XMM dstReg, GPR srcBase) {
36141        int miStart = mi;
36142        setMachineCodes(mi++, (byte) 0xF3);
36143        generateREXprefix(false, dstReg, null, srcBase);
36144        setMachineCodes(mi++, (byte) 0x0F);
36145        setMachineCodes(mi++, (byte) 0xC2);
36146        emitRegIndirectRegOperands(srcBase, dstReg);
36147        setMachineCodes(mi++, (byte) 2);
36148        if (lister != null) lister.RRN(miStart, "CMPLESS", dstReg, srcBase);
36149      }
36150    
36151    
36152      /**
36153       * Generate a register--register CMPUNORDSS. That is,
36154       * <PRE>
36155       * dstReg <<=  (quad)  srcReg
36156       * </PRE>
36157       *
36158       * @param dstReg destination register
36159       * @param srcReg source register
36160       */
36161      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36162      public final void emitCMPUNORDSS_Reg_Reg(XMM dstReg, XMM srcReg) {
36163        int miStart = mi;
36164        setMachineCodes(mi++, (byte) 0xF3);
36165        generateREXprefix(false, dstReg, null, srcReg);
36166        setMachineCodes(mi++, (byte) 0x0F);
36167        setMachineCodes(mi++, (byte) 0xC2);
36168        emitRegRegOperands(srcReg, dstReg);
36169        setMachineCodes(mi++, (byte) 3);
36170        if (lister != null) lister.RR(miStart, "CMPUNORDSS", dstReg, srcReg);
36171      }
36172    
36173      /**
36174       * Generate a register--register-displacement CMPUNORDSS. That is,
36175       * <PRE>
36176       * dstReg <<=  (quad)  [srcBase + srcDisp]
36177       * </PRE>
36178       *
36179       * @param dstReg destination register
36180       * @param srcBase the source base register
36181       * @param srcDisp the source displacement
36182       */
36183      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36184      public final void emitCMPUNORDSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
36185        int miStart = mi;
36186        setMachineCodes(mi++, (byte) 0xF3);
36187        generateREXprefix(false, dstReg, null, srcBase);
36188        setMachineCodes(mi++, (byte) 0x0F);
36189        setMachineCodes(mi++, (byte) 0xC2);
36190        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
36191        setMachineCodes(mi++, (byte) 3);
36192        if (lister != null) lister.RRD(miStart, "CMPUNORDSS", dstReg, srcBase, srcDisp);
36193      }
36194    
36195      /**
36196       * Generate a register--register-offset CMPUNORDSS. That is,
36197       * <PRE>
36198       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
36199       * </PRE>
36200       *
36201       * @param dstReg destination register
36202       * @param srcIndex the source index register
36203       * @param srcScale the source scale
36204       * @param srcDisp the source displacement
36205       */
36206      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36207      public final void emitCMPUNORDSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
36208        int miStart = mi;
36209        setMachineCodes(mi++, (byte) 0xF3);
36210        generateREXprefix(false, dstReg, srcIndex, null);
36211        setMachineCodes(mi++, (byte) 0x0F);
36212        setMachineCodes(mi++, (byte) 0xC2);
36213        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
36214        setMachineCodes(mi++, (byte) 3);
36215        if (lister != null) lister.RRFD(miStart, "CMPUNORDSS", dstReg, srcIndex, srcScale, srcDisp);
36216      }
36217    
36218      /**
36219       * Generate a register--absolute CMPUNORDSS. That is,
36220       * <PRE>
36221       *  dstReg <<=  (quad)  [srcDisp]
36222       * </PRE>
36223       *
36224       * @param dstReg destination register
36225       * @param srcDisp the source displacement
36226       */
36227      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
36228      public final void emitCMPUNORDSS_Reg_Abs(XMM dstReg, Address srcDisp) {
36229        int miStart = mi;
36230        setMachineCodes(mi++, (byte) 0xF3);
36231        generateREXprefix(false, dstReg, null, null);
36232        setMachineCodes(mi++, (byte) 0x0F);
36233        setMachineCodes(mi++, (byte) 0xC2);
36234        emitAbsRegOperands(srcDisp, dstReg);
36235        setMachineCodes(mi++, (byte) 3);
36236        if (lister != null) lister.RRA(miStart, "CMPUNORDSS", dstReg, srcDisp);
36237      }
36238    
36239      /**
36240       * Generate a register--register-index CMPUNORDSS. That is,
36241       * <PRE>
36242       * dstReg <<=  (quad)  srcReg
36243       * </PRE>
36244       *
36245       * @param dstReg destination register
36246       * @param srcBase the source base register
36247       * @param srcIndex the source index register
36248       * @param srcScale the source scale
36249       * @param srcDisp the source displacement
36250       */
36251      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
36252      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
36253      public final void emitCMPUNORDSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
36254        int miStart = mi;
36255        setMachineCodes(mi++, (byte) 0xF3);
36256        generateREXprefix(false, dstReg, srcIndex, srcBase);
36257        setMachineCodes(mi++, (byte) 0x0F);
36258        setMachineCodes(mi++, (byte) 0xC2);
36259        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
36260        setMachineCodes(mi++, (byte) 3);
36261        if (lister != null) lister.RRXD(miStart, "CMPUNORDSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
36262      }
36263    
36264      /**
36265       * Generate a register--register-indirect CMPUNORDSS. That is,
36266       * <PRE>
36267       * dstReg <<=  (quad)  [srcBase]
36268       * </PRE>
36269       *
36270       * @param dstReg destination register
36271       * @param srcBase the source base register
36272       */
36273      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36274      public final void emitCMPUNORDSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
36275        int miStart = mi;
36276        setMachineCodes(mi++, (byte) 0xF3);
36277        generateREXprefix(false, dstReg, null, srcBase);
36278        setMachineCodes(mi++, (byte) 0x0F);
36279        setMachineCodes(mi++, (byte) 0xC2);
36280        emitRegIndirectRegOperands(srcBase, dstReg);
36281        setMachineCodes(mi++, (byte) 3);
36282        if (lister != null) lister.RRN(miStart, "CMPUNORDSS", dstReg, srcBase);
36283      }
36284    
36285    
36286      /**
36287       * Generate a register--register CMPNESS. That is,
36288       * <PRE>
36289       * dstReg <<=  (quad)  srcReg
36290       * </PRE>
36291       *
36292       * @param dstReg destination register
36293       * @param srcReg source register
36294       */
36295      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36296      public final void emitCMPNESS_Reg_Reg(XMM dstReg, XMM srcReg) {
36297        int miStart = mi;
36298        setMachineCodes(mi++, (byte) 0xF3);
36299        generateREXprefix(false, dstReg, null, srcReg);
36300        setMachineCodes(mi++, (byte) 0x0F);
36301        setMachineCodes(mi++, (byte) 0xC2);
36302        emitRegRegOperands(srcReg, dstReg);
36303        setMachineCodes(mi++, (byte) 4);
36304        if (lister != null) lister.RR(miStart, "CMPNESS", dstReg, srcReg);
36305      }
36306    
36307      /**
36308       * Generate a register--register-displacement CMPNESS. That is,
36309       * <PRE>
36310       * dstReg <<=  (quad)  [srcBase + srcDisp]
36311       * </PRE>
36312       *
36313       * @param dstReg destination register
36314       * @param srcBase the source base register
36315       * @param srcDisp the source displacement
36316       */
36317      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36318      public final void emitCMPNESS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
36319        int miStart = mi;
36320        setMachineCodes(mi++, (byte) 0xF3);
36321        generateREXprefix(false, dstReg, null, srcBase);
36322        setMachineCodes(mi++, (byte) 0x0F);
36323        setMachineCodes(mi++, (byte) 0xC2);
36324        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
36325        setMachineCodes(mi++, (byte) 4);
36326        if (lister != null) lister.RRD(miStart, "CMPNESS", dstReg, srcBase, srcDisp);
36327      }
36328    
36329      /**
36330       * Generate a register--register-offset CMPNESS. That is,
36331       * <PRE>
36332       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
36333       * </PRE>
36334       *
36335       * @param dstReg destination register
36336       * @param srcIndex the source index register
36337       * @param srcScale the source scale
36338       * @param srcDisp the source displacement
36339       */
36340      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36341      public final void emitCMPNESS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
36342        int miStart = mi;
36343        setMachineCodes(mi++, (byte) 0xF3);
36344        generateREXprefix(false, dstReg, srcIndex, null);
36345        setMachineCodes(mi++, (byte) 0x0F);
36346        setMachineCodes(mi++, (byte) 0xC2);
36347        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
36348        setMachineCodes(mi++, (byte) 4);
36349        if (lister != null) lister.RRFD(miStart, "CMPNESS", dstReg, srcIndex, srcScale, srcDisp);
36350      }
36351    
36352      /**
36353       * Generate a register--absolute CMPNESS. That is,
36354       * <PRE>
36355       *  dstReg <<=  (quad)  [srcDisp]
36356       * </PRE>
36357       *
36358       * @param dstReg destination register
36359       * @param srcDisp the source displacement
36360       */
36361      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
36362      public final void emitCMPNESS_Reg_Abs(XMM dstReg, Address srcDisp) {
36363        int miStart = mi;
36364        setMachineCodes(mi++, (byte) 0xF3);
36365        generateREXprefix(false, dstReg, null, null);
36366        setMachineCodes(mi++, (byte) 0x0F);
36367        setMachineCodes(mi++, (byte) 0xC2);
36368        emitAbsRegOperands(srcDisp, dstReg);
36369        setMachineCodes(mi++, (byte) 4);
36370        if (lister != null) lister.RRA(miStart, "CMPNESS", dstReg, srcDisp);
36371      }
36372    
36373      /**
36374       * Generate a register--register-index CMPNESS. That is,
36375       * <PRE>
36376       * dstReg <<=  (quad)  srcReg
36377       * </PRE>
36378       *
36379       * @param dstReg destination register
36380       * @param srcBase the source base register
36381       * @param srcIndex the source index register
36382       * @param srcScale the source scale
36383       * @param srcDisp the source displacement
36384       */
36385      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
36386      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
36387      public final void emitCMPNESS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
36388        int miStart = mi;
36389        setMachineCodes(mi++, (byte) 0xF3);
36390        generateREXprefix(false, dstReg, srcIndex, srcBase);
36391        setMachineCodes(mi++, (byte) 0x0F);
36392        setMachineCodes(mi++, (byte) 0xC2);
36393        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
36394        setMachineCodes(mi++, (byte) 4);
36395        if (lister != null) lister.RRXD(miStart, "CMPNESS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
36396      }
36397    
36398      /**
36399       * Generate a register--register-indirect CMPNESS. That is,
36400       * <PRE>
36401       * dstReg <<=  (quad)  [srcBase]
36402       * </PRE>
36403       *
36404       * @param dstReg destination register
36405       * @param srcBase the source base register
36406       */
36407      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36408      public final void emitCMPNESS_Reg_RegInd(XMM dstReg, GPR srcBase) {
36409        int miStart = mi;
36410        setMachineCodes(mi++, (byte) 0xF3);
36411        generateREXprefix(false, dstReg, null, srcBase);
36412        setMachineCodes(mi++, (byte) 0x0F);
36413        setMachineCodes(mi++, (byte) 0xC2);
36414        emitRegIndirectRegOperands(srcBase, dstReg);
36415        setMachineCodes(mi++, (byte) 4);
36416        if (lister != null) lister.RRN(miStart, "CMPNESS", dstReg, srcBase);
36417      }
36418    
36419    
36420      /**
36421       * Generate a register--register CMPNLTSS. That is,
36422       * <PRE>
36423       * dstReg <<=  (quad)  srcReg
36424       * </PRE>
36425       *
36426       * @param dstReg destination register
36427       * @param srcReg source register
36428       */
36429      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36430      public final void emitCMPNLTSS_Reg_Reg(XMM dstReg, XMM srcReg) {
36431        int miStart = mi;
36432        setMachineCodes(mi++, (byte) 0xF3);
36433        generateREXprefix(false, dstReg, null, srcReg);
36434        setMachineCodes(mi++, (byte) 0x0F);
36435        setMachineCodes(mi++, (byte) 0xC2);
36436        emitRegRegOperands(srcReg, dstReg);
36437        setMachineCodes(mi++, (byte) 5);
36438        if (lister != null) lister.RR(miStart, "CMPNLTSS", dstReg, srcReg);
36439      }
36440    
36441      /**
36442       * Generate a register--register-displacement CMPNLTSS. That is,
36443       * <PRE>
36444       * dstReg <<=  (quad)  [srcBase + srcDisp]
36445       * </PRE>
36446       *
36447       * @param dstReg destination register
36448       * @param srcBase the source base register
36449       * @param srcDisp the source displacement
36450       */
36451      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36452      public final void emitCMPNLTSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
36453        int miStart = mi;
36454        setMachineCodes(mi++, (byte) 0xF3);
36455        generateREXprefix(false, dstReg, null, srcBase);
36456        setMachineCodes(mi++, (byte) 0x0F);
36457        setMachineCodes(mi++, (byte) 0xC2);
36458        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
36459        setMachineCodes(mi++, (byte) 5);
36460        if (lister != null) lister.RRD(miStart, "CMPNLTSS", dstReg, srcBase, srcDisp);
36461      }
36462    
36463      /**
36464       * Generate a register--register-offset CMPNLTSS. That is,
36465       * <PRE>
36466       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
36467       * </PRE>
36468       *
36469       * @param dstReg destination register
36470       * @param srcIndex the source index register
36471       * @param srcScale the source scale
36472       * @param srcDisp the source displacement
36473       */
36474      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36475      public final void emitCMPNLTSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
36476        int miStart = mi;
36477        setMachineCodes(mi++, (byte) 0xF3);
36478        generateREXprefix(false, dstReg, srcIndex, null);
36479        setMachineCodes(mi++, (byte) 0x0F);
36480        setMachineCodes(mi++, (byte) 0xC2);
36481        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
36482        setMachineCodes(mi++, (byte) 5);
36483        if (lister != null) lister.RRFD(miStart, "CMPNLTSS", dstReg, srcIndex, srcScale, srcDisp);
36484      }
36485    
36486      /**
36487       * Generate a register--absolute CMPNLTSS. That is,
36488       * <PRE>
36489       *  dstReg <<=  (quad)  [srcDisp]
36490       * </PRE>
36491       *
36492       * @param dstReg destination register
36493       * @param srcDisp the source displacement
36494       */
36495      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
36496      public final void emitCMPNLTSS_Reg_Abs(XMM dstReg, Address srcDisp) {
36497        int miStart = mi;
36498        setMachineCodes(mi++, (byte) 0xF3);
36499        generateREXprefix(false, dstReg, null, null);
36500        setMachineCodes(mi++, (byte) 0x0F);
36501        setMachineCodes(mi++, (byte) 0xC2);
36502        emitAbsRegOperands(srcDisp, dstReg);
36503        setMachineCodes(mi++, (byte) 5);
36504        if (lister != null) lister.RRA(miStart, "CMPNLTSS", dstReg, srcDisp);
36505      }
36506    
36507      /**
36508       * Generate a register--register-index CMPNLTSS. That is,
36509       * <PRE>
36510       * dstReg <<=  (quad)  srcReg
36511       * </PRE>
36512       *
36513       * @param dstReg destination register
36514       * @param srcBase the source base register
36515       * @param srcIndex the source index register
36516       * @param srcScale the source scale
36517       * @param srcDisp the source displacement
36518       */
36519      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
36520      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
36521      public final void emitCMPNLTSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
36522        int miStart = mi;
36523        setMachineCodes(mi++, (byte) 0xF3);
36524        generateREXprefix(false, dstReg, srcIndex, srcBase);
36525        setMachineCodes(mi++, (byte) 0x0F);
36526        setMachineCodes(mi++, (byte) 0xC2);
36527        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
36528        setMachineCodes(mi++, (byte) 5);
36529        if (lister != null) lister.RRXD(miStart, "CMPNLTSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
36530      }
36531    
36532      /**
36533       * Generate a register--register-indirect CMPNLTSS. That is,
36534       * <PRE>
36535       * dstReg <<=  (quad)  [srcBase]
36536       * </PRE>
36537       *
36538       * @param dstReg destination register
36539       * @param srcBase the source base register
36540       */
36541      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36542      public final void emitCMPNLTSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
36543        int miStart = mi;
36544        setMachineCodes(mi++, (byte) 0xF3);
36545        generateREXprefix(false, dstReg, null, srcBase);
36546        setMachineCodes(mi++, (byte) 0x0F);
36547        setMachineCodes(mi++, (byte) 0xC2);
36548        emitRegIndirectRegOperands(srcBase, dstReg);
36549        setMachineCodes(mi++, (byte) 5);
36550        if (lister != null) lister.RRN(miStart, "CMPNLTSS", dstReg, srcBase);
36551      }
36552    
36553    
36554      /**
36555       * Generate a register--register CMPNLESS. That is,
36556       * <PRE>
36557       * dstReg <<=  (quad)  srcReg
36558       * </PRE>
36559       *
36560       * @param dstReg destination register
36561       * @param srcReg source register
36562       */
36563      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36564      public final void emitCMPNLESS_Reg_Reg(XMM dstReg, XMM srcReg) {
36565        int miStart = mi;
36566        setMachineCodes(mi++, (byte) 0xF3);
36567        generateREXprefix(false, dstReg, null, srcReg);
36568        setMachineCodes(mi++, (byte) 0x0F);
36569        setMachineCodes(mi++, (byte) 0xC2);
36570        emitRegRegOperands(srcReg, dstReg);
36571        setMachineCodes(mi++, (byte) 6);
36572        if (lister != null) lister.RR(miStart, "CMPNLESS", dstReg, srcReg);
36573      }
36574    
36575      /**
36576       * Generate a register--register-displacement CMPNLESS. That is,
36577       * <PRE>
36578       * dstReg <<=  (quad)  [srcBase + srcDisp]
36579       * </PRE>
36580       *
36581       * @param dstReg destination register
36582       * @param srcBase the source base register
36583       * @param srcDisp the source displacement
36584       */
36585      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36586      public final void emitCMPNLESS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
36587        int miStart = mi;
36588        setMachineCodes(mi++, (byte) 0xF3);
36589        generateREXprefix(false, dstReg, null, srcBase);
36590        setMachineCodes(mi++, (byte) 0x0F);
36591        setMachineCodes(mi++, (byte) 0xC2);
36592        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
36593        setMachineCodes(mi++, (byte) 6);
36594        if (lister != null) lister.RRD(miStart, "CMPNLESS", dstReg, srcBase, srcDisp);
36595      }
36596    
36597      /**
36598       * Generate a register--register-offset CMPNLESS. That is,
36599       * <PRE>
36600       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
36601       * </PRE>
36602       *
36603       * @param dstReg destination register
36604       * @param srcIndex the source index register
36605       * @param srcScale the source scale
36606       * @param srcDisp the source displacement
36607       */
36608      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36609      public final void emitCMPNLESS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
36610        int miStart = mi;
36611        setMachineCodes(mi++, (byte) 0xF3);
36612        generateREXprefix(false, dstReg, srcIndex, null);
36613        setMachineCodes(mi++, (byte) 0x0F);
36614        setMachineCodes(mi++, (byte) 0xC2);
36615        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
36616        setMachineCodes(mi++, (byte) 6);
36617        if (lister != null) lister.RRFD(miStart, "CMPNLESS", dstReg, srcIndex, srcScale, srcDisp);
36618      }
36619    
36620      /**
36621       * Generate a register--absolute CMPNLESS. That is,
36622       * <PRE>
36623       *  dstReg <<=  (quad)  [srcDisp]
36624       * </PRE>
36625       *
36626       * @param dstReg destination register
36627       * @param srcDisp the source displacement
36628       */
36629      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
36630      public final void emitCMPNLESS_Reg_Abs(XMM dstReg, Address srcDisp) {
36631        int miStart = mi;
36632        setMachineCodes(mi++, (byte) 0xF3);
36633        generateREXprefix(false, dstReg, null, null);
36634        setMachineCodes(mi++, (byte) 0x0F);
36635        setMachineCodes(mi++, (byte) 0xC2);
36636        emitAbsRegOperands(srcDisp, dstReg);
36637        setMachineCodes(mi++, (byte) 6);
36638        if (lister != null) lister.RRA(miStart, "CMPNLESS", dstReg, srcDisp);
36639      }
36640    
36641      /**
36642       * Generate a register--register-index CMPNLESS. That is,
36643       * <PRE>
36644       * dstReg <<=  (quad)  srcReg
36645       * </PRE>
36646       *
36647       * @param dstReg destination register
36648       * @param srcBase the source base register
36649       * @param srcIndex the source index register
36650       * @param srcScale the source scale
36651       * @param srcDisp the source displacement
36652       */
36653      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
36654      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
36655      public final void emitCMPNLESS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
36656        int miStart = mi;
36657        setMachineCodes(mi++, (byte) 0xF3);
36658        generateREXprefix(false, dstReg, srcIndex, srcBase);
36659        setMachineCodes(mi++, (byte) 0x0F);
36660        setMachineCodes(mi++, (byte) 0xC2);
36661        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
36662        setMachineCodes(mi++, (byte) 6);
36663        if (lister != null) lister.RRXD(miStart, "CMPNLESS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
36664      }
36665    
36666      /**
36667       * Generate a register--register-indirect CMPNLESS. That is,
36668       * <PRE>
36669       * dstReg <<=  (quad)  [srcBase]
36670       * </PRE>
36671       *
36672       * @param dstReg destination register
36673       * @param srcBase the source base register
36674       */
36675      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36676      public final void emitCMPNLESS_Reg_RegInd(XMM dstReg, GPR srcBase) {
36677        int miStart = mi;
36678        setMachineCodes(mi++, (byte) 0xF3);
36679        generateREXprefix(false, dstReg, null, srcBase);
36680        setMachineCodes(mi++, (byte) 0x0F);
36681        setMachineCodes(mi++, (byte) 0xC2);
36682        emitRegIndirectRegOperands(srcBase, dstReg);
36683        setMachineCodes(mi++, (byte) 6);
36684        if (lister != null) lister.RRN(miStart, "CMPNLESS", dstReg, srcBase);
36685      }
36686    
36687    
36688      /**
36689       * Generate a register--register CMPORDSS. That is,
36690       * <PRE>
36691       * dstReg <<=  (quad)  srcReg
36692       * </PRE>
36693       *
36694       * @param dstReg destination register
36695       * @param srcReg source register
36696       */
36697      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36698      public final void emitCMPORDSS_Reg_Reg(XMM dstReg, XMM srcReg) {
36699        int miStart = mi;
36700        setMachineCodes(mi++, (byte) 0xF3);
36701        generateREXprefix(false, dstReg, null, srcReg);
36702        setMachineCodes(mi++, (byte) 0x0F);
36703        setMachineCodes(mi++, (byte) 0xC2);
36704        emitRegRegOperands(srcReg, dstReg);
36705        setMachineCodes(mi++, (byte) 7);
36706        if (lister != null) lister.RR(miStart, "CMPORDSS", dstReg, srcReg);
36707      }
36708    
36709      /**
36710       * Generate a register--register-displacement CMPORDSS. That is,
36711       * <PRE>
36712       * dstReg <<=  (quad)  [srcBase + srcDisp]
36713       * </PRE>
36714       *
36715       * @param dstReg destination register
36716       * @param srcBase the source base register
36717       * @param srcDisp the source displacement
36718       */
36719      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36720      public final void emitCMPORDSS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
36721        int miStart = mi;
36722        setMachineCodes(mi++, (byte) 0xF3);
36723        generateREXprefix(false, dstReg, null, srcBase);
36724        setMachineCodes(mi++, (byte) 0x0F);
36725        setMachineCodes(mi++, (byte) 0xC2);
36726        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
36727        setMachineCodes(mi++, (byte) 7);
36728        if (lister != null) lister.RRD(miStart, "CMPORDSS", dstReg, srcBase, srcDisp);
36729      }
36730    
36731      /**
36732       * Generate a register--register-offset CMPORDSS. That is,
36733       * <PRE>
36734       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
36735       * </PRE>
36736       *
36737       * @param dstReg destination register
36738       * @param srcIndex the source index register
36739       * @param srcScale the source scale
36740       * @param srcDisp the source displacement
36741       */
36742      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36743      public final void emitCMPORDSS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
36744        int miStart = mi;
36745        setMachineCodes(mi++, (byte) 0xF3);
36746        generateREXprefix(false, dstReg, srcIndex, null);
36747        setMachineCodes(mi++, (byte) 0x0F);
36748        setMachineCodes(mi++, (byte) 0xC2);
36749        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
36750        setMachineCodes(mi++, (byte) 7);
36751        if (lister != null) lister.RRFD(miStart, "CMPORDSS", dstReg, srcIndex, srcScale, srcDisp);
36752      }
36753    
36754      /**
36755       * Generate a register--absolute CMPORDSS. That is,
36756       * <PRE>
36757       *  dstReg <<=  (quad)  [srcDisp]
36758       * </PRE>
36759       *
36760       * @param dstReg destination register
36761       * @param srcDisp the source displacement
36762       */
36763      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
36764      public final void emitCMPORDSS_Reg_Abs(XMM dstReg, Address srcDisp) {
36765        int miStart = mi;
36766        setMachineCodes(mi++, (byte) 0xF3);
36767        generateREXprefix(false, dstReg, null, null);
36768        setMachineCodes(mi++, (byte) 0x0F);
36769        setMachineCodes(mi++, (byte) 0xC2);
36770        emitAbsRegOperands(srcDisp, dstReg);
36771        setMachineCodes(mi++, (byte) 7);
36772        if (lister != null) lister.RRA(miStart, "CMPORDSS", dstReg, srcDisp);
36773      }
36774    
36775      /**
36776       * Generate a register--register-index CMPORDSS. That is,
36777       * <PRE>
36778       * dstReg <<=  (quad)  srcReg
36779       * </PRE>
36780       *
36781       * @param dstReg destination register
36782       * @param srcBase the source base register
36783       * @param srcIndex the source index register
36784       * @param srcScale the source scale
36785       * @param srcDisp the source displacement
36786       */
36787      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
36788      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
36789      public final void emitCMPORDSS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
36790        int miStart = mi;
36791        setMachineCodes(mi++, (byte) 0xF3);
36792        generateREXprefix(false, dstReg, srcIndex, srcBase);
36793        setMachineCodes(mi++, (byte) 0x0F);
36794        setMachineCodes(mi++, (byte) 0xC2);
36795        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
36796        setMachineCodes(mi++, (byte) 7);
36797        if (lister != null) lister.RRXD(miStart, "CMPORDSS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
36798      }
36799    
36800      /**
36801       * Generate a register--register-indirect CMPORDSS. That is,
36802       * <PRE>
36803       * dstReg <<=  (quad)  [srcBase]
36804       * </PRE>
36805       *
36806       * @param dstReg destination register
36807       * @param srcBase the source base register
36808       */
36809      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36810      public final void emitCMPORDSS_Reg_RegInd(XMM dstReg, GPR srcBase) {
36811        int miStart = mi;
36812        setMachineCodes(mi++, (byte) 0xF3);
36813        generateREXprefix(false, dstReg, null, srcBase);
36814        setMachineCodes(mi++, (byte) 0x0F);
36815        setMachineCodes(mi++, (byte) 0xC2);
36816        emitRegIndirectRegOperands(srcBase, dstReg);
36817        setMachineCodes(mi++, (byte) 7);
36818        if (lister != null) lister.RRN(miStart, "CMPORDSS", dstReg, srcBase);
36819      }
36820    
36821    
36822      /**
36823       * Generate a register--register MOVD. That is,
36824       * <PRE>
36825       * dstReg <<=  (quad)  srcReg
36826       * </PRE>
36827       *
36828       * @param dstReg destination register
36829       * @param srcReg source register
36830       */
36831      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36832      public final void emitMOVD_Reg_Reg(GPR dstReg, MM srcReg) {
36833        int miStart = mi;
36834        generateREXprefix(false, srcReg, null, dstReg);
36835        setMachineCodes(mi++, (byte) 0x0F);
36836        setMachineCodes(mi++, (byte) 0x7E);
36837        emitRegRegOperands(dstReg, srcReg);
36838        if (lister != null) lister.RR(miStart, "MOVD", dstReg, srcReg);
36839      }
36840    
36841      /**
36842       * Generate a register-indirect--register MOVD. That is,
36843       * <PRE>
36844       * [dstBase] <<=  (quad)  srcReg
36845       * </PRE>
36846       *
36847       * @param dstBase the destination base register
36848       * @param srcReg the source register
36849       */
36850      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36851      public final void emitMOVD_RegInd_Reg(GPR dstBase, MM srcReg) {
36852        int miStart = mi;
36853        generateREXprefix(false, srcReg, null, dstBase);
36854        setMachineCodes(mi++, (byte) 0x0F);
36855        setMachineCodes(mi++, (byte) 0x7E);
36856        emitRegIndirectRegOperands(dstBase, srcReg);
36857        if (lister != null) lister.RNR(miStart, "MOVD", dstBase, srcReg);
36858      }
36859    
36860      /**
36861       * Generate a register-offset--register MOVD. That is,
36862       * <PRE>
36863       * [dstReg<<dstScale + dstDisp] <<=  (quad)  srcReg
36864       * </PRE>
36865       *
36866       * @param dstIndex the destination index register
36867       * @param dstScale the destination shift amount
36868       * @param dstDisp the destination displacement
36869       * @param srcReg the source register
36870       */
36871      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
36872      public final void emitMOVD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, MM srcReg) {
36873        int miStart = mi;
36874        generateREXprefix(false, srcReg, dstIndex, null);
36875        setMachineCodes(mi++, (byte) 0x0F);
36876        setMachineCodes(mi++, (byte) 0x7E);
36877        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
36878        if (lister != null) lister.RFDR(miStart, "MOVD", dstIndex, dstScale, dstDisp, srcReg);
36879      }
36880    
36881      /**
36882       * Generate a absolute--register MOVD. That is,
36883       * <PRE>
36884       * [dstDisp] <<=  (quad)  srcReg
36885       * </PRE>
36886       *
36887       * @param dstDisp the destination displacement
36888       * @param srcReg the source register
36889       */
36890      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
36891      public final void emitMOVD_Abs_Reg(Address dstDisp, MM srcReg) {
36892        int miStart = mi;
36893        generateREXprefix(false, srcReg, null, null);
36894        setMachineCodes(mi++, (byte) 0x0F);
36895        setMachineCodes(mi++, (byte) 0x7E);
36896        emitAbsRegOperands(dstDisp, srcReg);
36897        if (lister != null) lister.RAR(miStart, "MOVD", dstDisp, srcReg);
36898      }
36899    
36900      /**
36901       * Generate a register-index--register MOVD. That is,
36902       * <PRE>
36903       * [dstBase + dstIndex<<dstScale + dstDisp] <<=  (quad)  srcReg
36904       * </PRE>
36905       *
36906       * @param dstBase the destination base register
36907       * @param dstIndex the destination index register
36908       * @param dstScale the destination shift amount
36909       * @param dstDisp the destination displacement
36910       * @param srcReg the source register
36911       */
36912      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
36913      public final void emitMOVD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, MM srcReg) {
36914        int miStart = mi;
36915        generateREXprefix(false, srcReg, dstIndex, dstBase);
36916        setMachineCodes(mi++, (byte) 0x0F);
36917        setMachineCodes(mi++, (byte) 0x7E);
36918        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
36919        if (lister != null) lister.RXDR(miStart, "MOVD", dstBase, dstIndex, dstScale, dstDisp, srcReg);
36920      }
36921    
36922      /**
36923       * Generate a register-displacement--register MOVD. That is,
36924       * <PRE>
36925       * [dstBase + dstDisp] <<=  (quad)  srcReg
36926       * </PRE>
36927       *
36928       * @param dstBase the destination base register
36929       * @param dstDisp the destination displacement
36930       * @param srcReg the source register
36931       */
36932      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
36933      public final void emitMOVD_RegDisp_Reg(GPR dstBase, Offset dstDisp, MM srcReg) {
36934        int miStart = mi;
36935        generateREXprefix(false, srcReg, null, dstBase);
36936        setMachineCodes(mi++, (byte) 0x0F);
36937        setMachineCodes(mi++, (byte) 0x7E);
36938        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
36939        if (lister != null) lister.RDR(miStart, "MOVD", dstBase, dstDisp, srcReg);
36940      }
36941    
36942    
36943      /**
36944       * Generate a register--register MOVD. That is,
36945       * <PRE>
36946       * dstReg <<=  (quad)  srcReg
36947       * </PRE>
36948       *
36949       * @param dstReg destination register
36950       * @param srcReg source register
36951       */
36952      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36953      public final void emitMOVD_Reg_Reg(MM dstReg, GPR srcReg) {
36954        int miStart = mi;
36955        generateREXprefix(false, dstReg, null, srcReg);
36956        setMachineCodes(mi++, (byte) 0x0F);
36957        setMachineCodes(mi++, (byte) 0x6E);
36958        emitRegRegOperands(srcReg, dstReg);
36959        if (lister != null) lister.RR(miStart, "MOVD", dstReg, srcReg);
36960      }
36961    
36962      /**
36963       * Generate a register--register-displacement MOVD. That is,
36964       * <PRE>
36965       * dstReg <<=  (quad)  [srcBase + srcDisp]
36966       * </PRE>
36967       *
36968       * @param dstReg destination register
36969       * @param srcBase the source base register
36970       * @param srcDisp the source displacement
36971       */
36972      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36973      public final void emitMOVD_Reg_RegDisp(MM dstReg, GPR srcBase, Offset srcDisp) {
36974        int miStart = mi;
36975        generateREXprefix(false, dstReg, null, srcBase);
36976        setMachineCodes(mi++, (byte) 0x0F);
36977        setMachineCodes(mi++, (byte) 0x6E);
36978        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
36979        if (lister != null) lister.RRD(miStart, "MOVD", dstReg, srcBase, srcDisp);
36980      }
36981    
36982      /**
36983       * Generate a register--register-offset MOVD. That is,
36984       * <PRE>
36985       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
36986       * </PRE>
36987       *
36988       * @param dstReg destination register
36989       * @param srcIndex the source index register
36990       * @param srcScale the source scale
36991       * @param srcDisp the source displacement
36992       */
36993      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
36994      public final void emitMOVD_Reg_RegOff(MM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
36995        int miStart = mi;
36996        generateREXprefix(false, dstReg, srcIndex, null);
36997        setMachineCodes(mi++, (byte) 0x0F);
36998        setMachineCodes(mi++, (byte) 0x6E);
36999        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
37000        if (lister != null) lister.RRFD(miStart, "MOVD", dstReg, srcIndex, srcScale, srcDisp);
37001      }
37002    
37003      /**
37004       * Generate a register--absolute MOVD. That is,
37005       * <PRE>
37006       *  dstReg <<=  (quad)  [srcDisp]
37007       * </PRE>
37008       *
37009       * @param dstReg destination register
37010       * @param srcDisp the source displacement
37011       */
37012      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
37013      public final void emitMOVD_Reg_Abs(MM dstReg, Address srcDisp) {
37014        int miStart = mi;
37015        generateREXprefix(false, dstReg, null, null);
37016        setMachineCodes(mi++, (byte) 0x0F);
37017        setMachineCodes(mi++, (byte) 0x6E);
37018        emitAbsRegOperands(srcDisp, dstReg);
37019        if (lister != null) lister.RRA(miStart, "MOVD", dstReg, srcDisp);
37020      }
37021    
37022      /**
37023       * Generate a register--register-index MOVD. That is,
37024       * <PRE>
37025       * dstReg <<=  (quad)  srcReg
37026       * </PRE>
37027       *
37028       * @param dstReg destination register
37029       * @param srcBase the source base register
37030       * @param srcIndex the source index register
37031       * @param srcScale the source scale
37032       * @param srcDisp the source displacement
37033       */
37034      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
37035      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
37036      public final void emitMOVD_Reg_RegIdx(MM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
37037        int miStart = mi;
37038        generateREXprefix(false, dstReg, srcIndex, srcBase);
37039        setMachineCodes(mi++, (byte) 0x0F);
37040        setMachineCodes(mi++, (byte) 0x6E);
37041        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
37042        if (lister != null) lister.RRXD(miStart, "MOVD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
37043      }
37044    
37045      /**
37046       * Generate a register--register-indirect MOVD. That is,
37047       * <PRE>
37048       * dstReg <<=  (quad)  [srcBase]
37049       * </PRE>
37050       *
37051       * @param dstReg destination register
37052       * @param srcBase the source base register
37053       */
37054      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37055      public final void emitMOVD_Reg_RegInd(MM dstReg, GPR srcBase) {
37056        int miStart = mi;
37057        generateREXprefix(false, dstReg, null, srcBase);
37058        setMachineCodes(mi++, (byte) 0x0F);
37059        setMachineCodes(mi++, (byte) 0x6E);
37060        emitRegIndirectRegOperands(srcBase, dstReg);
37061        if (lister != null) lister.RRN(miStart, "MOVD", dstReg, srcBase);
37062      }
37063    
37064    
37065      /**
37066       * Generate a register--register MOVD. That is,
37067       * <PRE>
37068       * dstReg <<=  (quad)  srcReg
37069       * </PRE>
37070       *
37071       * @param dstReg destination register
37072       * @param srcReg source register
37073       */
37074      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37075      public final void emitMOVD_Reg_Reg(GPR dstReg, XMM srcReg) {
37076        int miStart = mi;
37077        setMachineCodes(mi++, (byte) 0x66);
37078        generateREXprefix(false, srcReg, null, dstReg);
37079        setMachineCodes(mi++, (byte) 0x0F);
37080        setMachineCodes(mi++, (byte) 0x7E);
37081        emitRegRegOperands(dstReg, srcReg);
37082        if (lister != null) lister.RR(miStart, "MOVD", dstReg, srcReg);
37083      }
37084    
37085      /**
37086       * Generate a register-indirect--register MOVD. That is,
37087       * <PRE>
37088       * [dstBase] <<=  (quad)  srcReg
37089       * </PRE>
37090       *
37091       * @param dstBase the destination base register
37092       * @param srcReg the source register
37093       */
37094      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37095      public final void emitMOVD_RegInd_Reg(GPR dstBase, XMM srcReg) {
37096        int miStart = mi;
37097        setMachineCodes(mi++, (byte) 0x66);
37098        generateREXprefix(false, srcReg, null, dstBase);
37099        setMachineCodes(mi++, (byte) 0x0F);
37100        setMachineCodes(mi++, (byte) 0x7E);
37101        emitRegIndirectRegOperands(dstBase, srcReg);
37102        if (lister != null) lister.RNR(miStart, "MOVD", dstBase, srcReg);
37103      }
37104    
37105      /**
37106       * Generate a register-offset--register MOVD. That is,
37107       * <PRE>
37108       * [dstReg<<dstScale + dstDisp] <<=  (quad)  srcReg
37109       * </PRE>
37110       *
37111       * @param dstIndex the destination index register
37112       * @param dstScale the destination shift amount
37113       * @param dstDisp the destination displacement
37114       * @param srcReg the source register
37115       */
37116      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
37117      public final void emitMOVD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
37118        int miStart = mi;
37119        setMachineCodes(mi++, (byte) 0x66);
37120        generateREXprefix(false, srcReg, dstIndex, null);
37121        setMachineCodes(mi++, (byte) 0x0F);
37122        setMachineCodes(mi++, (byte) 0x7E);
37123        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
37124        if (lister != null) lister.RFDR(miStart, "MOVD", dstIndex, dstScale, dstDisp, srcReg);
37125      }
37126    
37127      /**
37128       * Generate a absolute--register MOVD. That is,
37129       * <PRE>
37130       * [dstDisp] <<=  (quad)  srcReg
37131       * </PRE>
37132       *
37133       * @param dstDisp the destination displacement
37134       * @param srcReg the source register
37135       */
37136      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
37137      public final void emitMOVD_Abs_Reg(Address dstDisp, XMM srcReg) {
37138        int miStart = mi;
37139        setMachineCodes(mi++, (byte) 0x66);
37140        generateREXprefix(false, srcReg, null, null);
37141        setMachineCodes(mi++, (byte) 0x0F);
37142        setMachineCodes(mi++, (byte) 0x7E);
37143        emitAbsRegOperands(dstDisp, srcReg);
37144        if (lister != null) lister.RAR(miStart, "MOVD", dstDisp, srcReg);
37145      }
37146    
37147      /**
37148       * Generate a register-index--register MOVD. That is,
37149       * <PRE>
37150       * [dstBase + dstIndex<<dstScale + dstDisp] <<=  (quad)  srcReg
37151       * </PRE>
37152       *
37153       * @param dstBase the destination base register
37154       * @param dstIndex the destination index register
37155       * @param dstScale the destination shift amount
37156       * @param dstDisp the destination displacement
37157       * @param srcReg the source register
37158       */
37159      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
37160      public final void emitMOVD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
37161        int miStart = mi;
37162        setMachineCodes(mi++, (byte) 0x66);
37163        generateREXprefix(false, srcReg, dstIndex, dstBase);
37164        setMachineCodes(mi++, (byte) 0x0F);
37165        setMachineCodes(mi++, (byte) 0x7E);
37166        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
37167        if (lister != null) lister.RXDR(miStart, "MOVD", dstBase, dstIndex, dstScale, dstDisp, srcReg);
37168      }
37169    
37170      /**
37171       * Generate a register-displacement--register MOVD. That is,
37172       * <PRE>
37173       * [dstBase + dstDisp] <<=  (quad)  srcReg
37174       * </PRE>
37175       *
37176       * @param dstBase the destination base register
37177       * @param dstDisp the destination displacement
37178       * @param srcReg the source register
37179       */
37180      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
37181      public final void emitMOVD_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) {
37182        int miStart = mi;
37183        setMachineCodes(mi++, (byte) 0x66);
37184        generateREXprefix(false, srcReg, null, dstBase);
37185        setMachineCodes(mi++, (byte) 0x0F);
37186        setMachineCodes(mi++, (byte) 0x7E);
37187        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
37188        if (lister != null) lister.RDR(miStart, "MOVD", dstBase, dstDisp, srcReg);
37189      }
37190    
37191    
37192      /**
37193       * Generate a register--register MOVD. That is,
37194       * <PRE>
37195       * dstReg <<=  (quad)  srcReg
37196       * </PRE>
37197       *
37198       * @param dstReg destination register
37199       * @param srcReg source register
37200       */
37201      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37202      public final void emitMOVD_Reg_Reg(XMM dstReg, GPR srcReg) {
37203        int miStart = mi;
37204        setMachineCodes(mi++, (byte) 0x66);
37205        generateREXprefix(false, dstReg, null, srcReg);
37206        setMachineCodes(mi++, (byte) 0x0F);
37207        setMachineCodes(mi++, (byte) 0x6E);
37208        emitRegRegOperands(srcReg, dstReg);
37209        if (lister != null) lister.RR(miStart, "MOVD", dstReg, srcReg);
37210      }
37211    
37212      /**
37213       * Generate a register--register-displacement MOVD. That is,
37214       * <PRE>
37215       * dstReg <<=  (quad)  [srcBase + srcDisp]
37216       * </PRE>
37217       *
37218       * @param dstReg destination register
37219       * @param srcBase the source base register
37220       * @param srcDisp the source displacement
37221       */
37222      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37223      public final void emitMOVD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
37224        int miStart = mi;
37225        setMachineCodes(mi++, (byte) 0x66);
37226        generateREXprefix(false, dstReg, null, srcBase);
37227        setMachineCodes(mi++, (byte) 0x0F);
37228        setMachineCodes(mi++, (byte) 0x6E);
37229        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
37230        if (lister != null) lister.RRD(miStart, "MOVD", dstReg, srcBase, srcDisp);
37231      }
37232    
37233      /**
37234       * Generate a register--register-offset MOVD. That is,
37235       * <PRE>
37236       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
37237       * </PRE>
37238       *
37239       * @param dstReg destination register
37240       * @param srcIndex the source index register
37241       * @param srcScale the source scale
37242       * @param srcDisp the source displacement
37243       */
37244      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37245      public final void emitMOVD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
37246        int miStart = mi;
37247        setMachineCodes(mi++, (byte) 0x66);
37248        generateREXprefix(false, dstReg, srcIndex, null);
37249        setMachineCodes(mi++, (byte) 0x0F);
37250        setMachineCodes(mi++, (byte) 0x6E);
37251        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
37252        if (lister != null) lister.RRFD(miStart, "MOVD", dstReg, srcIndex, srcScale, srcDisp);
37253      }
37254    
37255      /**
37256       * Generate a register--absolute MOVD. That is,
37257       * <PRE>
37258       *  dstReg <<=  (quad)  [srcDisp]
37259       * </PRE>
37260       *
37261       * @param dstReg destination register
37262       * @param srcDisp the source displacement
37263       */
37264      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
37265      public final void emitMOVD_Reg_Abs(XMM dstReg, Address srcDisp) {
37266        int miStart = mi;
37267        setMachineCodes(mi++, (byte) 0x66);
37268        generateREXprefix(false, dstReg, null, null);
37269        setMachineCodes(mi++, (byte) 0x0F);
37270        setMachineCodes(mi++, (byte) 0x6E);
37271        emitAbsRegOperands(srcDisp, dstReg);
37272        if (lister != null) lister.RRA(miStart, "MOVD", dstReg, srcDisp);
37273      }
37274    
37275      /**
37276       * Generate a register--register-index MOVD. That is,
37277       * <PRE>
37278       * dstReg <<=  (quad)  srcReg
37279       * </PRE>
37280       *
37281       * @param dstReg destination register
37282       * @param srcBase the source base register
37283       * @param srcIndex the source index register
37284       * @param srcScale the source scale
37285       * @param srcDisp the source displacement
37286       */
37287      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
37288      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
37289      public final void emitMOVD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
37290        int miStart = mi;
37291        setMachineCodes(mi++, (byte) 0x66);
37292        generateREXprefix(false, dstReg, srcIndex, srcBase);
37293        setMachineCodes(mi++, (byte) 0x0F);
37294        setMachineCodes(mi++, (byte) 0x6E);
37295        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
37296        if (lister != null) lister.RRXD(miStart, "MOVD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
37297      }
37298    
37299      /**
37300       * Generate a register--register-indirect MOVD. That is,
37301       * <PRE>
37302       * dstReg <<=  (quad)  [srcBase]
37303       * </PRE>
37304       *
37305       * @param dstReg destination register
37306       * @param srcBase the source base register
37307       */
37308      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37309      public final void emitMOVD_Reg_RegInd(XMM dstReg, GPR srcBase) {
37310        int miStart = mi;
37311        setMachineCodes(mi++, (byte) 0x66);
37312        generateREXprefix(false, dstReg, null, srcBase);
37313        setMachineCodes(mi++, (byte) 0x0F);
37314        setMachineCodes(mi++, (byte) 0x6E);
37315        emitRegIndirectRegOperands(srcBase, dstReg);
37316        if (lister != null) lister.RRN(miStart, "MOVD", dstReg, srcBase);
37317      }
37318    
37319    
37320      /**
37321       * Generate a register--register MOVQ. That is,
37322       * <PRE>
37323       * dstReg <<=  (quad)  srcReg
37324       * </PRE>
37325       *
37326       * @param dstReg destination register
37327       * @param srcReg source register
37328       */
37329      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37330      public final void emitMOVQ_Reg_Reg(MM dstReg, MM srcReg) {
37331        int miStart = mi;
37332        generateREXprefix(false, dstReg, null, srcReg);
37333        setMachineCodes(mi++, (byte) 0x0F);
37334        setMachineCodes(mi++, (byte) 0x6F);
37335        emitRegRegOperands(srcReg, dstReg);
37336        if (lister != null) lister.RR(miStart, "MOVQ", dstReg, srcReg);
37337      }
37338    
37339      /**
37340       * Generate a register--register-displacement MOVQ. That is,
37341       * <PRE>
37342       * dstReg <<=  (quad)  [srcBase + srcDisp]
37343       * </PRE>
37344       *
37345       * @param dstReg destination register
37346       * @param srcBase the source base register
37347       * @param srcDisp the source displacement
37348       */
37349      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37350      public final void emitMOVQ_Reg_RegDisp(MM dstReg, GPR srcBase, Offset srcDisp) {
37351        int miStart = mi;
37352        generateREXprefix(false, dstReg, null, srcBase);
37353        setMachineCodes(mi++, (byte) 0x0F);
37354        setMachineCodes(mi++, (byte) 0x6F);
37355        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
37356        if (lister != null) lister.RRD(miStart, "MOVQ", dstReg, srcBase, srcDisp);
37357      }
37358    
37359      /**
37360       * Generate a register--register-offset MOVQ. That is,
37361       * <PRE>
37362       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
37363       * </PRE>
37364       *
37365       * @param dstReg destination register
37366       * @param srcIndex the source index register
37367       * @param srcScale the source scale
37368       * @param srcDisp the source displacement
37369       */
37370      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37371      public final void emitMOVQ_Reg_RegOff(MM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
37372        int miStart = mi;
37373        generateREXprefix(false, dstReg, srcIndex, null);
37374        setMachineCodes(mi++, (byte) 0x0F);
37375        setMachineCodes(mi++, (byte) 0x6F);
37376        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
37377        if (lister != null) lister.RRFD(miStart, "MOVQ", dstReg, srcIndex, srcScale, srcDisp);
37378      }
37379    
37380      /**
37381       * Generate a register--absolute MOVQ. That is,
37382       * <PRE>
37383       *  dstReg <<=  (quad)  [srcDisp]
37384       * </PRE>
37385       *
37386       * @param dstReg destination register
37387       * @param srcDisp the source displacement
37388       */
37389      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
37390      public final void emitMOVQ_Reg_Abs(MM dstReg, Address srcDisp) {
37391        int miStart = mi;
37392        generateREXprefix(false, dstReg, null, null);
37393        setMachineCodes(mi++, (byte) 0x0F);
37394        setMachineCodes(mi++, (byte) 0x6F);
37395        emitAbsRegOperands(srcDisp, dstReg);
37396        if (lister != null) lister.RRA(miStart, "MOVQ", dstReg, srcDisp);
37397      }
37398    
37399      /**
37400       * Generate a register--register-index MOVQ. That is,
37401       * <PRE>
37402       * dstReg <<=  (quad)  srcReg
37403       * </PRE>
37404       *
37405       * @param dstReg destination register
37406       * @param srcBase the source base register
37407       * @param srcIndex the source index register
37408       * @param srcScale the source scale
37409       * @param srcDisp the source displacement
37410       */
37411      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
37412      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
37413      public final void emitMOVQ_Reg_RegIdx(MM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
37414        int miStart = mi;
37415        generateREXprefix(false, dstReg, srcIndex, srcBase);
37416        setMachineCodes(mi++, (byte) 0x0F);
37417        setMachineCodes(mi++, (byte) 0x6F);
37418        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
37419        if (lister != null) lister.RRXD(miStart, "MOVQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
37420      }
37421    
37422      /**
37423       * Generate a register--register-indirect MOVQ. That is,
37424       * <PRE>
37425       * dstReg <<=  (quad)  [srcBase]
37426       * </PRE>
37427       *
37428       * @param dstReg destination register
37429       * @param srcBase the source base register
37430       */
37431      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37432      public final void emitMOVQ_Reg_RegInd(MM dstReg, GPR srcBase) {
37433        int miStart = mi;
37434        generateREXprefix(false, dstReg, null, srcBase);
37435        setMachineCodes(mi++, (byte) 0x0F);
37436        setMachineCodes(mi++, (byte) 0x6F);
37437        emitRegIndirectRegOperands(srcBase, dstReg);
37438        if (lister != null) lister.RRN(miStart, "MOVQ", dstReg, srcBase);
37439      }
37440    
37441    
37442      /**
37443       * Generate a register-indirect--register MOVQ. That is,
37444       * <PRE>
37445       * [dstBase] <<=  (quad)  srcReg
37446       * </PRE>
37447       *
37448       * @param dstBase the destination base register
37449       * @param srcReg the source register
37450       */
37451      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37452      public final void emitMOVQ_RegInd_Reg(GPR dstBase, MM srcReg) {
37453        int miStart = mi;
37454        generateREXprefix(false, srcReg, null, dstBase);
37455        setMachineCodes(mi++, (byte) 0x0F);
37456        setMachineCodes(mi++, (byte) 0x7F);
37457        emitRegIndirectRegOperands(dstBase, srcReg);
37458        if (lister != null) lister.RNR(miStart, "MOVQ", dstBase, srcReg);
37459      }
37460    
37461      /**
37462       * Generate a register-offset--register MOVQ. That is,
37463       * <PRE>
37464       * [dstReg<<dstScale + dstDisp] <<=  (quad)  srcReg
37465       * </PRE>
37466       *
37467       * @param dstIndex the destination index register
37468       * @param dstScale the destination shift amount
37469       * @param dstDisp the destination displacement
37470       * @param srcReg the source register
37471       */
37472      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
37473      public final void emitMOVQ_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, MM srcReg) {
37474        int miStart = mi;
37475        generateREXprefix(false, srcReg, dstIndex, null);
37476        setMachineCodes(mi++, (byte) 0x0F);
37477        setMachineCodes(mi++, (byte) 0x7F);
37478        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
37479        if (lister != null) lister.RFDR(miStart, "MOVQ", dstIndex, dstScale, dstDisp, srcReg);
37480      }
37481    
37482      /**
37483       * Generate a absolute--register MOVQ. That is,
37484       * <PRE>
37485       * [dstDisp] <<=  (quad)  srcReg
37486       * </PRE>
37487       *
37488       * @param dstDisp the destination displacement
37489       * @param srcReg the source register
37490       */
37491      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
37492      public final void emitMOVQ_Abs_Reg(Address dstDisp, MM srcReg) {
37493        int miStart = mi;
37494        generateREXprefix(false, srcReg, null, null);
37495        setMachineCodes(mi++, (byte) 0x0F);
37496        setMachineCodes(mi++, (byte) 0x7F);
37497        emitAbsRegOperands(dstDisp, srcReg);
37498        if (lister != null) lister.RAR(miStart, "MOVQ", dstDisp, srcReg);
37499      }
37500    
37501      /**
37502       * Generate a register-index--register MOVQ. That is,
37503       * <PRE>
37504       * [dstBase + dstIndex<<dstScale + dstDisp] <<=  (quad)  srcReg
37505       * </PRE>
37506       *
37507       * @param dstBase the destination base register
37508       * @param dstIndex the destination index register
37509       * @param dstScale the destination shift amount
37510       * @param dstDisp the destination displacement
37511       * @param srcReg the source register
37512       */
37513      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
37514      public final void emitMOVQ_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, MM srcReg) {
37515        int miStart = mi;
37516        generateREXprefix(false, srcReg, dstIndex, dstBase);
37517        setMachineCodes(mi++, (byte) 0x0F);
37518        setMachineCodes(mi++, (byte) 0x7F);
37519        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
37520        if (lister != null) lister.RXDR(miStart, "MOVQ", dstBase, dstIndex, dstScale, dstDisp, srcReg);
37521      }
37522    
37523      /**
37524       * Generate a register-displacement--register MOVQ. That is,
37525       * <PRE>
37526       * [dstBase + dstDisp] <<=  (quad)  srcReg
37527       * </PRE>
37528       *
37529       * @param dstBase the destination base register
37530       * @param dstDisp the destination displacement
37531       * @param srcReg the source register
37532       */
37533      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
37534      public final void emitMOVQ_RegDisp_Reg(GPR dstBase, Offset dstDisp, MM srcReg) {
37535        int miStart = mi;
37536        generateREXprefix(false, srcReg, null, dstBase);
37537        setMachineCodes(mi++, (byte) 0x0F);
37538        setMachineCodes(mi++, (byte) 0x7F);
37539        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
37540        if (lister != null) lister.RDR(miStart, "MOVQ", dstBase, dstDisp, srcReg);
37541      }
37542    
37543    
37544      /**
37545       * Generate a register--register MOVQ. That is,
37546       * <PRE>
37547       * dstReg <<=  (quad)  srcReg
37548       * </PRE>
37549       *
37550       * @param dstReg destination register
37551       * @param srcReg source register
37552       */
37553      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37554      public final void emitMOVQ_Reg_Reg(XMM dstReg, XMM srcReg) {
37555        int miStart = mi;
37556        setMachineCodes(mi++, (byte) 0xF3);
37557        generateREXprefix(false, dstReg, null, srcReg);
37558        setMachineCodes(mi++, (byte) 0x0F);
37559        setMachineCodes(mi++, (byte) 0x7E);
37560        emitRegRegOperands(srcReg, dstReg);
37561        if (lister != null) lister.RR(miStart, "MOVQ", dstReg, srcReg);
37562      }
37563    
37564      /**
37565       * Generate a register--register-displacement MOVQ. That is,
37566       * <PRE>
37567       * dstReg <<=  (quad)  [srcBase + srcDisp]
37568       * </PRE>
37569       *
37570       * @param dstReg destination register
37571       * @param srcBase the source base register
37572       * @param srcDisp the source displacement
37573       */
37574      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37575      public final void emitMOVQ_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
37576        int miStart = mi;
37577        setMachineCodes(mi++, (byte) 0xF3);
37578        generateREXprefix(false, dstReg, null, srcBase);
37579        setMachineCodes(mi++, (byte) 0x0F);
37580        setMachineCodes(mi++, (byte) 0x7E);
37581        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
37582        if (lister != null) lister.RRD(miStart, "MOVQ", dstReg, srcBase, srcDisp);
37583      }
37584    
37585      /**
37586       * Generate a register--register-offset MOVQ. That is,
37587       * <PRE>
37588       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
37589       * </PRE>
37590       *
37591       * @param dstReg destination register
37592       * @param srcIndex the source index register
37593       * @param srcScale the source scale
37594       * @param srcDisp the source displacement
37595       */
37596      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37597      public final void emitMOVQ_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
37598        int miStart = mi;
37599        setMachineCodes(mi++, (byte) 0xF3);
37600        generateREXprefix(false, dstReg, srcIndex, null);
37601        setMachineCodes(mi++, (byte) 0x0F);
37602        setMachineCodes(mi++, (byte) 0x7E);
37603        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
37604        if (lister != null) lister.RRFD(miStart, "MOVQ", dstReg, srcIndex, srcScale, srcDisp);
37605      }
37606    
37607      /**
37608       * Generate a register--absolute MOVQ. That is,
37609       * <PRE>
37610       *  dstReg <<=  (quad)  [srcDisp]
37611       * </PRE>
37612       *
37613       * @param dstReg destination register
37614       * @param srcDisp the source displacement
37615       */
37616      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
37617      public final void emitMOVQ_Reg_Abs(XMM dstReg, Address srcDisp) {
37618        int miStart = mi;
37619        setMachineCodes(mi++, (byte) 0xF3);
37620        generateREXprefix(false, dstReg, null, null);
37621        setMachineCodes(mi++, (byte) 0x0F);
37622        setMachineCodes(mi++, (byte) 0x7E);
37623        emitAbsRegOperands(srcDisp, dstReg);
37624        if (lister != null) lister.RRA(miStart, "MOVQ", dstReg, srcDisp);
37625      }
37626    
37627      /**
37628       * Generate a register--register-index MOVQ. That is,
37629       * <PRE>
37630       * dstReg <<=  (quad)  srcReg
37631       * </PRE>
37632       *
37633       * @param dstReg destination register
37634       * @param srcBase the source base register
37635       * @param srcIndex the source index register
37636       * @param srcScale the source scale
37637       * @param srcDisp the source displacement
37638       */
37639      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
37640      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
37641      public final void emitMOVQ_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
37642        int miStart = mi;
37643        setMachineCodes(mi++, (byte) 0xF3);
37644        generateREXprefix(false, dstReg, srcIndex, srcBase);
37645        setMachineCodes(mi++, (byte) 0x0F);
37646        setMachineCodes(mi++, (byte) 0x7E);
37647        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
37648        if (lister != null) lister.RRXD(miStart, "MOVQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
37649      }
37650    
37651      /**
37652       * Generate a register--register-indirect MOVQ. That is,
37653       * <PRE>
37654       * dstReg <<=  (quad)  [srcBase]
37655       * </PRE>
37656       *
37657       * @param dstReg destination register
37658       * @param srcBase the source base register
37659       */
37660      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37661      public final void emitMOVQ_Reg_RegInd(XMM dstReg, GPR srcBase) {
37662        int miStart = mi;
37663        setMachineCodes(mi++, (byte) 0xF3);
37664        generateREXprefix(false, dstReg, null, srcBase);
37665        setMachineCodes(mi++, (byte) 0x0F);
37666        setMachineCodes(mi++, (byte) 0x7E);
37667        emitRegIndirectRegOperands(srcBase, dstReg);
37668        if (lister != null) lister.RRN(miStart, "MOVQ", dstReg, srcBase);
37669      }
37670    
37671    
37672      /**
37673       * Generate a register-indirect--register MOVQ. That is,
37674       * <PRE>
37675       * [dstBase] <<=  (quad)  srcReg
37676       * </PRE>
37677       *
37678       * @param dstBase the destination base register
37679       * @param srcReg the source register
37680       */
37681      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37682      public final void emitMOVQ_RegInd_Reg(GPR dstBase, XMM srcReg) {
37683        int miStart = mi;
37684        setMachineCodes(mi++, (byte) 0x66);
37685        generateREXprefix(false, srcReg, null, dstBase);
37686        setMachineCodes(mi++, (byte) 0x0F);
37687        setMachineCodes(mi++, (byte) 0xD6);
37688        emitRegIndirectRegOperands(dstBase, srcReg);
37689        if (lister != null) lister.RNR(miStart, "MOVQ", dstBase, srcReg);
37690      }
37691    
37692      /**
37693       * Generate a register-offset--register MOVQ. That is,
37694       * <PRE>
37695       * [dstReg<<dstScale + dstDisp] <<=  (quad)  srcReg
37696       * </PRE>
37697       *
37698       * @param dstIndex the destination index register
37699       * @param dstScale the destination shift amount
37700       * @param dstDisp the destination displacement
37701       * @param srcReg the source register
37702       */
37703      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
37704      public final void emitMOVQ_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
37705        int miStart = mi;
37706        setMachineCodes(mi++, (byte) 0x66);
37707        generateREXprefix(false, srcReg, dstIndex, null);
37708        setMachineCodes(mi++, (byte) 0x0F);
37709        setMachineCodes(mi++, (byte) 0xD6);
37710        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
37711        if (lister != null) lister.RFDR(miStart, "MOVQ", dstIndex, dstScale, dstDisp, srcReg);
37712      }
37713    
37714      /**
37715       * Generate a absolute--register MOVQ. That is,
37716       * <PRE>
37717       * [dstDisp] <<=  (quad)  srcReg
37718       * </PRE>
37719       *
37720       * @param dstDisp the destination displacement
37721       * @param srcReg the source register
37722       */
37723      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
37724      public final void emitMOVQ_Abs_Reg(Address dstDisp, XMM srcReg) {
37725        int miStart = mi;
37726        setMachineCodes(mi++, (byte) 0x66);
37727        generateREXprefix(false, srcReg, null, null);
37728        setMachineCodes(mi++, (byte) 0x0F);
37729        setMachineCodes(mi++, (byte) 0xD6);
37730        emitAbsRegOperands(dstDisp, srcReg);
37731        if (lister != null) lister.RAR(miStart, "MOVQ", dstDisp, srcReg);
37732      }
37733    
37734      /**
37735       * Generate a register-index--register MOVQ. That is,
37736       * <PRE>
37737       * [dstBase + dstIndex<<dstScale + dstDisp] <<=  (quad)  srcReg
37738       * </PRE>
37739       *
37740       * @param dstBase the destination base register
37741       * @param dstIndex the destination index register
37742       * @param dstScale the destination shift amount
37743       * @param dstDisp the destination displacement
37744       * @param srcReg the source register
37745       */
37746      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
37747      public final void emitMOVQ_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
37748        int miStart = mi;
37749        setMachineCodes(mi++, (byte) 0x66);
37750        generateREXprefix(false, srcReg, dstIndex, dstBase);
37751        setMachineCodes(mi++, (byte) 0x0F);
37752        setMachineCodes(mi++, (byte) 0xD6);
37753        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
37754        if (lister != null) lister.RXDR(miStart, "MOVQ", dstBase, dstIndex, dstScale, dstDisp, srcReg);
37755      }
37756    
37757      /**
37758       * Generate a register-displacement--register MOVQ. That is,
37759       * <PRE>
37760       * [dstBase + dstDisp] <<=  (quad)  srcReg
37761       * </PRE>
37762       *
37763       * @param dstBase the destination base register
37764       * @param dstDisp the destination displacement
37765       * @param srcReg the source register
37766       */
37767      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
37768      public final void emitMOVQ_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) {
37769        int miStart = mi;
37770        setMachineCodes(mi++, (byte) 0x66);
37771        generateREXprefix(false, srcReg, null, dstBase);
37772        setMachineCodes(mi++, (byte) 0x0F);
37773        setMachineCodes(mi++, (byte) 0xD6);
37774        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
37775        if (lister != null) lister.RDR(miStart, "MOVQ", dstBase, dstDisp, srcReg);
37776      }
37777    
37778    
37779      /**
37780       * Generate a register--register ADDSD. That is,
37781       * <PRE>
37782       * dstReg <<=  (quad)  srcReg
37783       * </PRE>
37784       *
37785       * @param dstReg destination register
37786       * @param srcReg source register
37787       */
37788      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37789      public final void emitADDSD_Reg_Reg(XMM dstReg, XMM srcReg) {
37790        int miStart = mi;
37791        setMachineCodes(mi++, (byte) 0xF2);
37792        generateREXprefix(false, dstReg, null, srcReg);
37793        setMachineCodes(mi++, (byte) 0x0F);
37794        setMachineCodes(mi++, (byte) 0x58);
37795        emitRegRegOperands(srcReg, dstReg);
37796        if (lister != null) lister.RR(miStart, "ADDSD", dstReg, srcReg);
37797      }
37798    
37799      /**
37800       * Generate a register--register-displacement ADDSD. That is,
37801       * <PRE>
37802       * dstReg <<=  (quad)  [srcBase + srcDisp]
37803       * </PRE>
37804       *
37805       * @param dstReg destination register
37806       * @param srcBase the source base register
37807       * @param srcDisp the source displacement
37808       */
37809      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37810      public final void emitADDSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
37811        int miStart = mi;
37812        setMachineCodes(mi++, (byte) 0xF2);
37813        generateREXprefix(false, dstReg, null, srcBase);
37814        setMachineCodes(mi++, (byte) 0x0F);
37815        setMachineCodes(mi++, (byte) 0x58);
37816        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
37817        if (lister != null) lister.RRD(miStart, "ADDSD", dstReg, srcBase, srcDisp);
37818      }
37819    
37820      /**
37821       * Generate a register--register-offset ADDSD. That is,
37822       * <PRE>
37823       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
37824       * </PRE>
37825       *
37826       * @param dstReg destination register
37827       * @param srcIndex the source index register
37828       * @param srcScale the source scale
37829       * @param srcDisp the source displacement
37830       */
37831      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37832      public final void emitADDSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
37833        int miStart = mi;
37834        setMachineCodes(mi++, (byte) 0xF2);
37835        generateREXprefix(false, dstReg, srcIndex, null);
37836        setMachineCodes(mi++, (byte) 0x0F);
37837        setMachineCodes(mi++, (byte) 0x58);
37838        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
37839        if (lister != null) lister.RRFD(miStart, "ADDSD", dstReg, srcIndex, srcScale, srcDisp);
37840      }
37841    
37842      /**
37843       * Generate a register--absolute ADDSD. That is,
37844       * <PRE>
37845       *  dstReg <<=  (quad)  [srcDisp]
37846       * </PRE>
37847       *
37848       * @param dstReg destination register
37849       * @param srcDisp the source displacement
37850       */
37851      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
37852      public final void emitADDSD_Reg_Abs(XMM dstReg, Address srcDisp) {
37853        int miStart = mi;
37854        setMachineCodes(mi++, (byte) 0xF2);
37855        generateREXprefix(false, dstReg, null, null);
37856        setMachineCodes(mi++, (byte) 0x0F);
37857        setMachineCodes(mi++, (byte) 0x58);
37858        emitAbsRegOperands(srcDisp, dstReg);
37859        if (lister != null) lister.RRA(miStart, "ADDSD", dstReg, srcDisp);
37860      }
37861    
37862      /**
37863       * Generate a register--register-index ADDSD. That is,
37864       * <PRE>
37865       * dstReg <<=  (quad)  srcReg
37866       * </PRE>
37867       *
37868       * @param dstReg destination register
37869       * @param srcBase the source base register
37870       * @param srcIndex the source index register
37871       * @param srcScale the source scale
37872       * @param srcDisp the source displacement
37873       */
37874      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
37875      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
37876      public final void emitADDSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
37877        int miStart = mi;
37878        setMachineCodes(mi++, (byte) 0xF2);
37879        generateREXprefix(false, dstReg, srcIndex, srcBase);
37880        setMachineCodes(mi++, (byte) 0x0F);
37881        setMachineCodes(mi++, (byte) 0x58);
37882        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
37883        if (lister != null) lister.RRXD(miStart, "ADDSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
37884      }
37885    
37886      /**
37887       * Generate a register--register-indirect ADDSD. That is,
37888       * <PRE>
37889       * dstReg <<=  (quad)  [srcBase]
37890       * </PRE>
37891       *
37892       * @param dstReg destination register
37893       * @param srcBase the source base register
37894       */
37895      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37896      public final void emitADDSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
37897        int miStart = mi;
37898        setMachineCodes(mi++, (byte) 0xF2);
37899        generateREXprefix(false, dstReg, null, srcBase);
37900        setMachineCodes(mi++, (byte) 0x0F);
37901        setMachineCodes(mi++, (byte) 0x58);
37902        emitRegIndirectRegOperands(srcBase, dstReg);
37903        if (lister != null) lister.RRN(miStart, "ADDSD", dstReg, srcBase);
37904      }
37905    
37906    
37907      /**
37908       * Generate a register--register SUBSD. That is,
37909       * <PRE>
37910       * dstReg <<=  (quad)  srcReg
37911       * </PRE>
37912       *
37913       * @param dstReg destination register
37914       * @param srcReg source register
37915       */
37916      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37917      public final void emitSUBSD_Reg_Reg(XMM dstReg, XMM srcReg) {
37918        int miStart = mi;
37919        setMachineCodes(mi++, (byte) 0xF2);
37920        generateREXprefix(false, dstReg, null, srcReg);
37921        setMachineCodes(mi++, (byte) 0x0F);
37922        setMachineCodes(mi++, (byte) 0x5C);
37923        emitRegRegOperands(srcReg, dstReg);
37924        if (lister != null) lister.RR(miStart, "SUBSD", dstReg, srcReg);
37925      }
37926    
37927      /**
37928       * Generate a register--register-displacement SUBSD. That is,
37929       * <PRE>
37930       * dstReg <<=  (quad)  [srcBase + srcDisp]
37931       * </PRE>
37932       *
37933       * @param dstReg destination register
37934       * @param srcBase the source base register
37935       * @param srcDisp the source displacement
37936       */
37937      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37938      public final void emitSUBSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
37939        int miStart = mi;
37940        setMachineCodes(mi++, (byte) 0xF2);
37941        generateREXprefix(false, dstReg, null, srcBase);
37942        setMachineCodes(mi++, (byte) 0x0F);
37943        setMachineCodes(mi++, (byte) 0x5C);
37944        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
37945        if (lister != null) lister.RRD(miStart, "SUBSD", dstReg, srcBase, srcDisp);
37946      }
37947    
37948      /**
37949       * Generate a register--register-offset SUBSD. That is,
37950       * <PRE>
37951       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
37952       * </PRE>
37953       *
37954       * @param dstReg destination register
37955       * @param srcIndex the source index register
37956       * @param srcScale the source scale
37957       * @param srcDisp the source displacement
37958       */
37959      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
37960      public final void emitSUBSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
37961        int miStart = mi;
37962        setMachineCodes(mi++, (byte) 0xF2);
37963        generateREXprefix(false, dstReg, srcIndex, null);
37964        setMachineCodes(mi++, (byte) 0x0F);
37965        setMachineCodes(mi++, (byte) 0x5C);
37966        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
37967        if (lister != null) lister.RRFD(miStart, "SUBSD", dstReg, srcIndex, srcScale, srcDisp);
37968      }
37969    
37970      /**
37971       * Generate a register--absolute SUBSD. That is,
37972       * <PRE>
37973       *  dstReg <<=  (quad)  [srcDisp]
37974       * </PRE>
37975       *
37976       * @param dstReg destination register
37977       * @param srcDisp the source displacement
37978       */
37979      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
37980      public final void emitSUBSD_Reg_Abs(XMM dstReg, Address srcDisp) {
37981        int miStart = mi;
37982        setMachineCodes(mi++, (byte) 0xF2);
37983        generateREXprefix(false, dstReg, null, null);
37984        setMachineCodes(mi++, (byte) 0x0F);
37985        setMachineCodes(mi++, (byte) 0x5C);
37986        emitAbsRegOperands(srcDisp, dstReg);
37987        if (lister != null) lister.RRA(miStart, "SUBSD", dstReg, srcDisp);
37988      }
37989    
37990      /**
37991       * Generate a register--register-index SUBSD. That is,
37992       * <PRE>
37993       * dstReg <<=  (quad)  srcReg
37994       * </PRE>
37995       *
37996       * @param dstReg destination register
37997       * @param srcBase the source base register
37998       * @param srcIndex the source index register
37999       * @param srcScale the source scale
38000       * @param srcDisp the source displacement
38001       */
38002      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
38003      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
38004      public final void emitSUBSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
38005        int miStart = mi;
38006        setMachineCodes(mi++, (byte) 0xF2);
38007        generateREXprefix(false, dstReg, srcIndex, srcBase);
38008        setMachineCodes(mi++, (byte) 0x0F);
38009        setMachineCodes(mi++, (byte) 0x5C);
38010        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
38011        if (lister != null) lister.RRXD(miStart, "SUBSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
38012      }
38013    
38014      /**
38015       * Generate a register--register-indirect SUBSD. That is,
38016       * <PRE>
38017       * dstReg <<=  (quad)  [srcBase]
38018       * </PRE>
38019       *
38020       * @param dstReg destination register
38021       * @param srcBase the source base register
38022       */
38023      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38024      public final void emitSUBSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
38025        int miStart = mi;
38026        setMachineCodes(mi++, (byte) 0xF2);
38027        generateREXprefix(false, dstReg, null, srcBase);
38028        setMachineCodes(mi++, (byte) 0x0F);
38029        setMachineCodes(mi++, (byte) 0x5C);
38030        emitRegIndirectRegOperands(srcBase, dstReg);
38031        if (lister != null) lister.RRN(miStart, "SUBSD", dstReg, srcBase);
38032      }
38033    
38034    
38035      /**
38036       * Generate a register--register MULSD. That is,
38037       * <PRE>
38038       * dstReg <<=  (quad)  srcReg
38039       * </PRE>
38040       *
38041       * @param dstReg destination register
38042       * @param srcReg source register
38043       */
38044      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38045      public final void emitMULSD_Reg_Reg(XMM dstReg, XMM srcReg) {
38046        int miStart = mi;
38047        setMachineCodes(mi++, (byte) 0xF2);
38048        generateREXprefix(false, dstReg, null, srcReg);
38049        setMachineCodes(mi++, (byte) 0x0F);
38050        setMachineCodes(mi++, (byte) 0x59);
38051        emitRegRegOperands(srcReg, dstReg);
38052        if (lister != null) lister.RR(miStart, "MULSD", dstReg, srcReg);
38053      }
38054    
38055      /**
38056       * Generate a register--register-displacement MULSD. That is,
38057       * <PRE>
38058       * dstReg <<=  (quad)  [srcBase + srcDisp]
38059       * </PRE>
38060       *
38061       * @param dstReg destination register
38062       * @param srcBase the source base register
38063       * @param srcDisp the source displacement
38064       */
38065      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38066      public final void emitMULSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
38067        int miStart = mi;
38068        setMachineCodes(mi++, (byte) 0xF2);
38069        generateREXprefix(false, dstReg, null, srcBase);
38070        setMachineCodes(mi++, (byte) 0x0F);
38071        setMachineCodes(mi++, (byte) 0x59);
38072        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
38073        if (lister != null) lister.RRD(miStart, "MULSD", dstReg, srcBase, srcDisp);
38074      }
38075    
38076      /**
38077       * Generate a register--register-offset MULSD. That is,
38078       * <PRE>
38079       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
38080       * </PRE>
38081       *
38082       * @param dstReg destination register
38083       * @param srcIndex the source index register
38084       * @param srcScale the source scale
38085       * @param srcDisp the source displacement
38086       */
38087      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38088      public final void emitMULSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
38089        int miStart = mi;
38090        setMachineCodes(mi++, (byte) 0xF2);
38091        generateREXprefix(false, dstReg, srcIndex, null);
38092        setMachineCodes(mi++, (byte) 0x0F);
38093        setMachineCodes(mi++, (byte) 0x59);
38094        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
38095        if (lister != null) lister.RRFD(miStart, "MULSD", dstReg, srcIndex, srcScale, srcDisp);
38096      }
38097    
38098      /**
38099       * Generate a register--absolute MULSD. That is,
38100       * <PRE>
38101       *  dstReg <<=  (quad)  [srcDisp]
38102       * </PRE>
38103       *
38104       * @param dstReg destination register
38105       * @param srcDisp the source displacement
38106       */
38107      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
38108      public final void emitMULSD_Reg_Abs(XMM dstReg, Address srcDisp) {
38109        int miStart = mi;
38110        setMachineCodes(mi++, (byte) 0xF2);
38111        generateREXprefix(false, dstReg, null, null);
38112        setMachineCodes(mi++, (byte) 0x0F);
38113        setMachineCodes(mi++, (byte) 0x59);
38114        emitAbsRegOperands(srcDisp, dstReg);
38115        if (lister != null) lister.RRA(miStart, "MULSD", dstReg, srcDisp);
38116      }
38117    
38118      /**
38119       * Generate a register--register-index MULSD. That is,
38120       * <PRE>
38121       * dstReg <<=  (quad)  srcReg
38122       * </PRE>
38123       *
38124       * @param dstReg destination register
38125       * @param srcBase the source base register
38126       * @param srcIndex the source index register
38127       * @param srcScale the source scale
38128       * @param srcDisp the source displacement
38129       */
38130      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
38131      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
38132      public final void emitMULSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
38133        int miStart = mi;
38134        setMachineCodes(mi++, (byte) 0xF2);
38135        generateREXprefix(false, dstReg, srcIndex, srcBase);
38136        setMachineCodes(mi++, (byte) 0x0F);
38137        setMachineCodes(mi++, (byte) 0x59);
38138        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
38139        if (lister != null) lister.RRXD(miStart, "MULSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
38140      }
38141    
38142      /**
38143       * Generate a register--register-indirect MULSD. That is,
38144       * <PRE>
38145       * dstReg <<=  (quad)  [srcBase]
38146       * </PRE>
38147       *
38148       * @param dstReg destination register
38149       * @param srcBase the source base register
38150       */
38151      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38152      public final void emitMULSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
38153        int miStart = mi;
38154        setMachineCodes(mi++, (byte) 0xF2);
38155        generateREXprefix(false, dstReg, null, srcBase);
38156        setMachineCodes(mi++, (byte) 0x0F);
38157        setMachineCodes(mi++, (byte) 0x59);
38158        emitRegIndirectRegOperands(srcBase, dstReg);
38159        if (lister != null) lister.RRN(miStart, "MULSD", dstReg, srcBase);
38160      }
38161    
38162    
38163      /**
38164       * Generate a register--register DIVSD. That is,
38165       * <PRE>
38166       * dstReg <<=  (quad)  srcReg
38167       * </PRE>
38168       *
38169       * @param dstReg destination register
38170       * @param srcReg source register
38171       */
38172      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38173      public final void emitDIVSD_Reg_Reg(XMM dstReg, XMM srcReg) {
38174        int miStart = mi;
38175        setMachineCodes(mi++, (byte) 0xF2);
38176        generateREXprefix(false, dstReg, null, srcReg);
38177        setMachineCodes(mi++, (byte) 0x0F);
38178        setMachineCodes(mi++, (byte) 0x5E);
38179        emitRegRegOperands(srcReg, dstReg);
38180        if (lister != null) lister.RR(miStart, "DIVSD", dstReg, srcReg);
38181      }
38182    
38183      /**
38184       * Generate a register--register-displacement DIVSD. That is,
38185       * <PRE>
38186       * dstReg <<=  (quad)  [srcBase + srcDisp]
38187       * </PRE>
38188       *
38189       * @param dstReg destination register
38190       * @param srcBase the source base register
38191       * @param srcDisp the source displacement
38192       */
38193      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38194      public final void emitDIVSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
38195        int miStart = mi;
38196        setMachineCodes(mi++, (byte) 0xF2);
38197        generateREXprefix(false, dstReg, null, srcBase);
38198        setMachineCodes(mi++, (byte) 0x0F);
38199        setMachineCodes(mi++, (byte) 0x5E);
38200        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
38201        if (lister != null) lister.RRD(miStart, "DIVSD", dstReg, srcBase, srcDisp);
38202      }
38203    
38204      /**
38205       * Generate a register--register-offset DIVSD. That is,
38206       * <PRE>
38207       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
38208       * </PRE>
38209       *
38210       * @param dstReg destination register
38211       * @param srcIndex the source index register
38212       * @param srcScale the source scale
38213       * @param srcDisp the source displacement
38214       */
38215      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38216      public final void emitDIVSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
38217        int miStart = mi;
38218        setMachineCodes(mi++, (byte) 0xF2);
38219        generateREXprefix(false, dstReg, srcIndex, null);
38220        setMachineCodes(mi++, (byte) 0x0F);
38221        setMachineCodes(mi++, (byte) 0x5E);
38222        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
38223        if (lister != null) lister.RRFD(miStart, "DIVSD", dstReg, srcIndex, srcScale, srcDisp);
38224      }
38225    
38226      /**
38227       * Generate a register--absolute DIVSD. That is,
38228       * <PRE>
38229       *  dstReg <<=  (quad)  [srcDisp]
38230       * </PRE>
38231       *
38232       * @param dstReg destination register
38233       * @param srcDisp the source displacement
38234       */
38235      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
38236      public final void emitDIVSD_Reg_Abs(XMM dstReg, Address srcDisp) {
38237        int miStart = mi;
38238        setMachineCodes(mi++, (byte) 0xF2);
38239        generateREXprefix(false, dstReg, null, null);
38240        setMachineCodes(mi++, (byte) 0x0F);
38241        setMachineCodes(mi++, (byte) 0x5E);
38242        emitAbsRegOperands(srcDisp, dstReg);
38243        if (lister != null) lister.RRA(miStart, "DIVSD", dstReg, srcDisp);
38244      }
38245    
38246      /**
38247       * Generate a register--register-index DIVSD. That is,
38248       * <PRE>
38249       * dstReg <<=  (quad)  srcReg
38250       * </PRE>
38251       *
38252       * @param dstReg destination register
38253       * @param srcBase the source base register
38254       * @param srcIndex the source index register
38255       * @param srcScale the source scale
38256       * @param srcDisp the source displacement
38257       */
38258      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
38259      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
38260      public final void emitDIVSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
38261        int miStart = mi;
38262        setMachineCodes(mi++, (byte) 0xF2);
38263        generateREXprefix(false, dstReg, srcIndex, srcBase);
38264        setMachineCodes(mi++, (byte) 0x0F);
38265        setMachineCodes(mi++, (byte) 0x5E);
38266        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
38267        if (lister != null) lister.RRXD(miStart, "DIVSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
38268      }
38269    
38270      /**
38271       * Generate a register--register-indirect DIVSD. That is,
38272       * <PRE>
38273       * dstReg <<=  (quad)  [srcBase]
38274       * </PRE>
38275       *
38276       * @param dstReg destination register
38277       * @param srcBase the source base register
38278       */
38279      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38280      public final void emitDIVSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
38281        int miStart = mi;
38282        setMachineCodes(mi++, (byte) 0xF2);
38283        generateREXprefix(false, dstReg, null, srcBase);
38284        setMachineCodes(mi++, (byte) 0x0F);
38285        setMachineCodes(mi++, (byte) 0x5E);
38286        emitRegIndirectRegOperands(srcBase, dstReg);
38287        if (lister != null) lister.RRN(miStart, "DIVSD", dstReg, srcBase);
38288      }
38289    
38290    
38291      /**
38292       * Generate a register--register MOVSD. That is,
38293       * <PRE>
38294       * dstReg <<=  (quad)  srcReg
38295       * </PRE>
38296       *
38297       * @param dstReg destination register
38298       * @param srcReg source register
38299       */
38300      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38301      public final void emitMOVSD_Reg_Reg(XMM dstReg, XMM srcReg) {
38302        int miStart = mi;
38303        setMachineCodes(mi++, (byte) 0xF2);
38304        generateREXprefix(false, dstReg, null, srcReg);
38305        setMachineCodes(mi++, (byte) 0x0F);
38306        setMachineCodes(mi++, (byte) 0x10);
38307        emitRegRegOperands(srcReg, dstReg);
38308        if (lister != null) lister.RR(miStart, "MOVSD", dstReg, srcReg);
38309      }
38310    
38311      /**
38312       * Generate a register--register-displacement MOVSD. That is,
38313       * <PRE>
38314       * dstReg <<=  (quad)  [srcBase + srcDisp]
38315       * </PRE>
38316       *
38317       * @param dstReg destination register
38318       * @param srcBase the source base register
38319       * @param srcDisp the source displacement
38320       */
38321      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38322      public final void emitMOVSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
38323        int miStart = mi;
38324        setMachineCodes(mi++, (byte) 0xF2);
38325        generateREXprefix(false, dstReg, null, srcBase);
38326        setMachineCodes(mi++, (byte) 0x0F);
38327        setMachineCodes(mi++, (byte) 0x10);
38328        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
38329        if (lister != null) lister.RRD(miStart, "MOVSD", dstReg, srcBase, srcDisp);
38330      }
38331    
38332      /**
38333       * Generate a register--register-offset MOVSD. That is,
38334       * <PRE>
38335       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
38336       * </PRE>
38337       *
38338       * @param dstReg destination register
38339       * @param srcIndex the source index register
38340       * @param srcScale the source scale
38341       * @param srcDisp the source displacement
38342       */
38343      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38344      public final void emitMOVSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
38345        int miStart = mi;
38346        setMachineCodes(mi++, (byte) 0xF2);
38347        generateREXprefix(false, dstReg, srcIndex, null);
38348        setMachineCodes(mi++, (byte) 0x0F);
38349        setMachineCodes(mi++, (byte) 0x10);
38350        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
38351        if (lister != null) lister.RRFD(miStart, "MOVSD", dstReg, srcIndex, srcScale, srcDisp);
38352      }
38353    
38354      /**
38355       * Generate a register--absolute MOVSD. That is,
38356       * <PRE>
38357       *  dstReg <<=  (quad)  [srcDisp]
38358       * </PRE>
38359       *
38360       * @param dstReg destination register
38361       * @param srcDisp the source displacement
38362       */
38363      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
38364      public final void emitMOVSD_Reg_Abs(XMM dstReg, Address srcDisp) {
38365        int miStart = mi;
38366        setMachineCodes(mi++, (byte) 0xF2);
38367        generateREXprefix(false, dstReg, null, null);
38368        setMachineCodes(mi++, (byte) 0x0F);
38369        setMachineCodes(mi++, (byte) 0x10);
38370        emitAbsRegOperands(srcDisp, dstReg);
38371        if (lister != null) lister.RRA(miStart, "MOVSD", dstReg, srcDisp);
38372      }
38373    
38374      /**
38375       * Generate a register--register-index MOVSD. That is,
38376       * <PRE>
38377       * dstReg <<=  (quad)  srcReg
38378       * </PRE>
38379       *
38380       * @param dstReg destination register
38381       * @param srcBase the source base register
38382       * @param srcIndex the source index register
38383       * @param srcScale the source scale
38384       * @param srcDisp the source displacement
38385       */
38386      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
38387      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
38388      public final void emitMOVSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
38389        int miStart = mi;
38390        setMachineCodes(mi++, (byte) 0xF2);
38391        generateREXprefix(false, dstReg, srcIndex, srcBase);
38392        setMachineCodes(mi++, (byte) 0x0F);
38393        setMachineCodes(mi++, (byte) 0x10);
38394        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
38395        if (lister != null) lister.RRXD(miStart, "MOVSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
38396      }
38397    
38398      /**
38399       * Generate a register--register-indirect MOVSD. That is,
38400       * <PRE>
38401       * dstReg <<=  (quad)  [srcBase]
38402       * </PRE>
38403       *
38404       * @param dstReg destination register
38405       * @param srcBase the source base register
38406       */
38407      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38408      public final void emitMOVSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
38409        int miStart = mi;
38410        setMachineCodes(mi++, (byte) 0xF2);
38411        generateREXprefix(false, dstReg, null, srcBase);
38412        setMachineCodes(mi++, (byte) 0x0F);
38413        setMachineCodes(mi++, (byte) 0x10);
38414        emitRegIndirectRegOperands(srcBase, dstReg);
38415        if (lister != null) lister.RRN(miStart, "MOVSD", dstReg, srcBase);
38416      }
38417    
38418    
38419      /**
38420       * Generate a register-indirect--register MOVSD. That is,
38421       * <PRE>
38422       * [dstBase] <<=  (quad)  srcReg
38423       * </PRE>
38424       *
38425       * @param dstBase the destination base register
38426       * @param srcReg the source register
38427       */
38428      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38429      public final void emitMOVSD_RegInd_Reg(GPR dstBase, XMM srcReg) {
38430        int miStart = mi;
38431        setMachineCodes(mi++, (byte) 0xF2);
38432        generateREXprefix(false, srcReg, null, dstBase);
38433        setMachineCodes(mi++, (byte) 0x0F);
38434        setMachineCodes(mi++, (byte) 0x11);
38435        emitRegIndirectRegOperands(dstBase, srcReg);
38436        if (lister != null) lister.RNR(miStart, "MOVSD", dstBase, srcReg);
38437      }
38438    
38439      /**
38440       * Generate a register-offset--register MOVSD. That is,
38441       * <PRE>
38442       * [dstReg<<dstScale + dstDisp] <<=  (quad)  srcReg
38443       * </PRE>
38444       *
38445       * @param dstIndex the destination index register
38446       * @param dstScale the destination shift amount
38447       * @param dstDisp the destination displacement
38448       * @param srcReg the source register
38449       */
38450      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
38451      public final void emitMOVSD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
38452        int miStart = mi;
38453        setMachineCodes(mi++, (byte) 0xF2);
38454        generateREXprefix(false, srcReg, dstIndex, null);
38455        setMachineCodes(mi++, (byte) 0x0F);
38456        setMachineCodes(mi++, (byte) 0x11);
38457        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
38458        if (lister != null) lister.RFDR(miStart, "MOVSD", dstIndex, dstScale, dstDisp, srcReg);
38459      }
38460    
38461      /**
38462       * Generate a absolute--register MOVSD. That is,
38463       * <PRE>
38464       * [dstDisp] <<=  (quad)  srcReg
38465       * </PRE>
38466       *
38467       * @param dstDisp the destination displacement
38468       * @param srcReg the source register
38469       */
38470      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
38471      public final void emitMOVSD_Abs_Reg(Address dstDisp, XMM srcReg) {
38472        int miStart = mi;
38473        setMachineCodes(mi++, (byte) 0xF2);
38474        generateREXprefix(false, srcReg, null, null);
38475        setMachineCodes(mi++, (byte) 0x0F);
38476        setMachineCodes(mi++, (byte) 0x11);
38477        emitAbsRegOperands(dstDisp, srcReg);
38478        if (lister != null) lister.RAR(miStart, "MOVSD", dstDisp, srcReg);
38479      }
38480    
38481      /**
38482       * Generate a register-index--register MOVSD. That is,
38483       * <PRE>
38484       * [dstBase + dstIndex<<dstScale + dstDisp] <<=  (quad)  srcReg
38485       * </PRE>
38486       *
38487       * @param dstBase the destination base register
38488       * @param dstIndex the destination index register
38489       * @param dstScale the destination shift amount
38490       * @param dstDisp the destination displacement
38491       * @param srcReg the source register
38492       */
38493      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
38494      public final void emitMOVSD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
38495        int miStart = mi;
38496        setMachineCodes(mi++, (byte) 0xF2);
38497        generateREXprefix(false, srcReg, dstIndex, dstBase);
38498        setMachineCodes(mi++, (byte) 0x0F);
38499        setMachineCodes(mi++, (byte) 0x11);
38500        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
38501        if (lister != null) lister.RXDR(miStart, "MOVSD", dstBase, dstIndex, dstScale, dstDisp, srcReg);
38502      }
38503    
38504      /**
38505       * Generate a register-displacement--register MOVSD. That is,
38506       * <PRE>
38507       * [dstBase + dstDisp] <<=  (quad)  srcReg
38508       * </PRE>
38509       *
38510       * @param dstBase the destination base register
38511       * @param dstDisp the destination displacement
38512       * @param srcReg the source register
38513       */
38514      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
38515      public final void emitMOVSD_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) {
38516        int miStart = mi;
38517        setMachineCodes(mi++, (byte) 0xF2);
38518        generateREXprefix(false, srcReg, null, dstBase);
38519        setMachineCodes(mi++, (byte) 0x0F);
38520        setMachineCodes(mi++, (byte) 0x11);
38521        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
38522        if (lister != null) lister.RDR(miStart, "MOVSD", dstBase, dstDisp, srcReg);
38523      }
38524    
38525    
38526      /**
38527       * Generate a register--register MOVLPD. That is,
38528       * <PRE>
38529       * dstReg <<=  (quad)  srcReg
38530       * </PRE>
38531       *
38532       * @param dstReg destination register
38533       * @param srcReg source register
38534       */
38535      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38536      public final void emitMOVLPD_Reg_Reg(XMM dstReg, XMM srcReg) {
38537        int miStart = mi;
38538        setMachineCodes(mi++, (byte) 0x66);
38539        generateREXprefix(false, dstReg, null, srcReg);
38540        setMachineCodes(mi++, (byte) 0x0F);
38541        setMachineCodes(mi++, (byte) 0x12);
38542        emitRegRegOperands(srcReg, dstReg);
38543        if (lister != null) lister.RR(miStart, "MOVLPD", dstReg, srcReg);
38544      }
38545    
38546      /**
38547       * Generate a register--register-displacement MOVLPD. That is,
38548       * <PRE>
38549       * dstReg <<=  (quad)  [srcBase + srcDisp]
38550       * </PRE>
38551       *
38552       * @param dstReg destination register
38553       * @param srcBase the source base register
38554       * @param srcDisp the source displacement
38555       */
38556      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38557      public final void emitMOVLPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
38558        int miStart = mi;
38559        setMachineCodes(mi++, (byte) 0x66);
38560        generateREXprefix(false, dstReg, null, srcBase);
38561        setMachineCodes(mi++, (byte) 0x0F);
38562        setMachineCodes(mi++, (byte) 0x12);
38563        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
38564        if (lister != null) lister.RRD(miStart, "MOVLPD", dstReg, srcBase, srcDisp);
38565      }
38566    
38567      /**
38568       * Generate a register--register-offset MOVLPD. That is,
38569       * <PRE>
38570       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
38571       * </PRE>
38572       *
38573       * @param dstReg destination register
38574       * @param srcIndex the source index register
38575       * @param srcScale the source scale
38576       * @param srcDisp the source displacement
38577       */
38578      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38579      public final void emitMOVLPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
38580        int miStart = mi;
38581        setMachineCodes(mi++, (byte) 0x66);
38582        generateREXprefix(false, dstReg, srcIndex, null);
38583        setMachineCodes(mi++, (byte) 0x0F);
38584        setMachineCodes(mi++, (byte) 0x12);
38585        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
38586        if (lister != null) lister.RRFD(miStart, "MOVLPD", dstReg, srcIndex, srcScale, srcDisp);
38587      }
38588    
38589      /**
38590       * Generate a register--absolute MOVLPD. That is,
38591       * <PRE>
38592       *  dstReg <<=  (quad)  [srcDisp]
38593       * </PRE>
38594       *
38595       * @param dstReg destination register
38596       * @param srcDisp the source displacement
38597       */
38598      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
38599      public final void emitMOVLPD_Reg_Abs(XMM dstReg, Address srcDisp) {
38600        int miStart = mi;
38601        setMachineCodes(mi++, (byte) 0x66);
38602        generateREXprefix(false, dstReg, null, null);
38603        setMachineCodes(mi++, (byte) 0x0F);
38604        setMachineCodes(mi++, (byte) 0x12);
38605        emitAbsRegOperands(srcDisp, dstReg);
38606        if (lister != null) lister.RRA(miStart, "MOVLPD", dstReg, srcDisp);
38607      }
38608    
38609      /**
38610       * Generate a register--register-index MOVLPD. That is,
38611       * <PRE>
38612       * dstReg <<=  (quad)  srcReg
38613       * </PRE>
38614       *
38615       * @param dstReg destination register
38616       * @param srcBase the source base register
38617       * @param srcIndex the source index register
38618       * @param srcScale the source scale
38619       * @param srcDisp the source displacement
38620       */
38621      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
38622      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
38623      public final void emitMOVLPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
38624        int miStart = mi;
38625        setMachineCodes(mi++, (byte) 0x66);
38626        generateREXprefix(false, dstReg, srcIndex, srcBase);
38627        setMachineCodes(mi++, (byte) 0x0F);
38628        setMachineCodes(mi++, (byte) 0x12);
38629        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
38630        if (lister != null) lister.RRXD(miStart, "MOVLPD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
38631      }
38632    
38633      /**
38634       * Generate a register--register-indirect MOVLPD. That is,
38635       * <PRE>
38636       * dstReg <<=  (quad)  [srcBase]
38637       * </PRE>
38638       *
38639       * @param dstReg destination register
38640       * @param srcBase the source base register
38641       */
38642      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38643      public final void emitMOVLPD_Reg_RegInd(XMM dstReg, GPR srcBase) {
38644        int miStart = mi;
38645        setMachineCodes(mi++, (byte) 0x66);
38646        generateREXprefix(false, dstReg, null, srcBase);
38647        setMachineCodes(mi++, (byte) 0x0F);
38648        setMachineCodes(mi++, (byte) 0x12);
38649        emitRegIndirectRegOperands(srcBase, dstReg);
38650        if (lister != null) lister.RRN(miStart, "MOVLPD", dstReg, srcBase);
38651      }
38652    
38653    
38654      /**
38655       * Generate a register-indirect--register MOVLPD. That is,
38656       * <PRE>
38657       * [dstBase] <<=  (quad)  srcReg
38658       * </PRE>
38659       *
38660       * @param dstBase the destination base register
38661       * @param srcReg the source register
38662       */
38663      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38664      public final void emitMOVLPD_RegInd_Reg(GPR dstBase, XMM srcReg) {
38665        int miStart = mi;
38666        setMachineCodes(mi++, (byte) 0x66);
38667        generateREXprefix(false, srcReg, null, dstBase);
38668        setMachineCodes(mi++, (byte) 0x0F);
38669        setMachineCodes(mi++, (byte) 0x13);
38670        emitRegIndirectRegOperands(dstBase, srcReg);
38671        if (lister != null) lister.RNR(miStart, "MOVLPD", dstBase, srcReg);
38672      }
38673    
38674      /**
38675       * Generate a register-offset--register MOVLPD. That is,
38676       * <PRE>
38677       * [dstReg<<dstScale + dstDisp] <<=  (quad)  srcReg
38678       * </PRE>
38679       *
38680       * @param dstIndex the destination index register
38681       * @param dstScale the destination shift amount
38682       * @param dstDisp the destination displacement
38683       * @param srcReg the source register
38684       */
38685      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,4})
38686      public final void emitMOVLPD_RegOff_Reg(GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
38687        int miStart = mi;
38688        setMachineCodes(mi++, (byte) 0x66);
38689        generateREXprefix(false, srcReg, dstIndex, null);
38690        setMachineCodes(mi++, (byte) 0x0F);
38691        setMachineCodes(mi++, (byte) 0x13);
38692        emitRegOffRegOperands(dstIndex, dstScale, dstDisp, srcReg);
38693        if (lister != null) lister.RFDR(miStart, "MOVLPD", dstIndex, dstScale, dstDisp, srcReg);
38694      }
38695    
38696      /**
38697       * Generate a absolute--register MOVLPD. That is,
38698       * <PRE>
38699       * [dstDisp] <<=  (quad)  srcReg
38700       * </PRE>
38701       *
38702       * @param dstDisp the destination displacement
38703       * @param srcReg the source register
38704       */
38705      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={2})
38706      public final void emitMOVLPD_Abs_Reg(Address dstDisp, XMM srcReg) {
38707        int miStart = mi;
38708        setMachineCodes(mi++, (byte) 0x66);
38709        generateREXprefix(false, srcReg, null, null);
38710        setMachineCodes(mi++, (byte) 0x0F);
38711        setMachineCodes(mi++, (byte) 0x13);
38712        emitAbsRegOperands(dstDisp, srcReg);
38713        if (lister != null) lister.RAR(miStart, "MOVLPD", dstDisp, srcReg);
38714      }
38715    
38716      /**
38717       * Generate a register-index--register MOVLPD. That is,
38718       * <PRE>
38719       * [dstBase + dstIndex<<dstScale + dstDisp] <<=  (quad)  srcReg
38720       * </PRE>
38721       *
38722       * @param dstBase the destination base register
38723       * @param dstIndex the destination index register
38724       * @param dstScale the destination shift amount
38725       * @param dstDisp the destination displacement
38726       * @param srcReg the source register
38727       */
38728      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,5})
38729      public final void emitMOVLPD_RegIdx_Reg(GPR dstBase, GPR dstIndex, short dstScale, Offset dstDisp, XMM srcReg) {
38730        int miStart = mi;
38731        setMachineCodes(mi++, (byte) 0x66);
38732        generateREXprefix(false, srcReg, dstIndex, dstBase);
38733        setMachineCodes(mi++, (byte) 0x0F);
38734        setMachineCodes(mi++, (byte) 0x13);
38735        emitSIBRegOperands(dstBase, dstIndex, dstScale, dstDisp, srcReg);
38736        if (lister != null) lister.RXDR(miStart, "MOVLPD", dstBase, dstIndex, dstScale, dstDisp, srcReg);
38737      }
38738    
38739      /**
38740       * Generate a register-displacement--register MOVLPD. That is,
38741       * <PRE>
38742       * [dstBase + dstDisp] <<=  (quad)  srcReg
38743       * </PRE>
38744       *
38745       * @param dstBase the destination base register
38746       * @param dstDisp the destination displacement
38747       * @param srcReg the source register
38748       */
38749      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,3})
38750      public final void emitMOVLPD_RegDisp_Reg(GPR dstBase, Offset dstDisp, XMM srcReg) {
38751        int miStart = mi;
38752        setMachineCodes(mi++, (byte) 0x66);
38753        generateREXprefix(false, srcReg, null, dstBase);
38754        setMachineCodes(mi++, (byte) 0x0F);
38755        setMachineCodes(mi++, (byte) 0x13);
38756        emitRegDispRegOperands(dstBase, dstDisp, srcReg);
38757        if (lister != null) lister.RDR(miStart, "MOVLPD", dstBase, dstDisp, srcReg);
38758      }
38759    
38760    
38761      /**
38762       * Generate a register--register SQRTSD. That is,
38763       * <PRE>
38764       * dstReg <<=  (quad)  srcReg
38765       * </PRE>
38766       *
38767       * @param dstReg destination register
38768       * @param srcReg source register
38769       */
38770      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38771      public final void emitSQRTSD_Reg_Reg(XMM dstReg, XMM srcReg) {
38772        int miStart = mi;
38773        setMachineCodes(mi++, (byte) 0xF2);
38774        generateREXprefix(false, dstReg, null, srcReg);
38775        setMachineCodes(mi++, (byte) 0x0F);
38776        setMachineCodes(mi++, (byte) 0x51);
38777        emitRegRegOperands(srcReg, dstReg);
38778        if (lister != null) lister.RR(miStart, "SQRTSD", dstReg, srcReg);
38779      }
38780    
38781      /**
38782       * Generate a register--register-displacement SQRTSD. That is,
38783       * <PRE>
38784       * dstReg <<=  (quad)  [srcBase + srcDisp]
38785       * </PRE>
38786       *
38787       * @param dstReg destination register
38788       * @param srcBase the source base register
38789       * @param srcDisp the source displacement
38790       */
38791      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38792      public final void emitSQRTSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
38793        int miStart = mi;
38794        setMachineCodes(mi++, (byte) 0xF2);
38795        generateREXprefix(false, dstReg, null, srcBase);
38796        setMachineCodes(mi++, (byte) 0x0F);
38797        setMachineCodes(mi++, (byte) 0x51);
38798        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
38799        if (lister != null) lister.RRD(miStart, "SQRTSD", dstReg, srcBase, srcDisp);
38800      }
38801    
38802      /**
38803       * Generate a register--register-offset SQRTSD. That is,
38804       * <PRE>
38805       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
38806       * </PRE>
38807       *
38808       * @param dstReg destination register
38809       * @param srcIndex the source index register
38810       * @param srcScale the source scale
38811       * @param srcDisp the source displacement
38812       */
38813      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38814      public final void emitSQRTSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
38815        int miStart = mi;
38816        setMachineCodes(mi++, (byte) 0xF2);
38817        generateREXprefix(false, dstReg, srcIndex, null);
38818        setMachineCodes(mi++, (byte) 0x0F);
38819        setMachineCodes(mi++, (byte) 0x51);
38820        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
38821        if (lister != null) lister.RRFD(miStart, "SQRTSD", dstReg, srcIndex, srcScale, srcDisp);
38822      }
38823    
38824      /**
38825       * Generate a register--absolute SQRTSD. That is,
38826       * <PRE>
38827       *  dstReg <<=  (quad)  [srcDisp]
38828       * </PRE>
38829       *
38830       * @param dstReg destination register
38831       * @param srcDisp the source displacement
38832       */
38833      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
38834      public final void emitSQRTSD_Reg_Abs(XMM dstReg, Address srcDisp) {
38835        int miStart = mi;
38836        setMachineCodes(mi++, (byte) 0xF2);
38837        generateREXprefix(false, dstReg, null, null);
38838        setMachineCodes(mi++, (byte) 0x0F);
38839        setMachineCodes(mi++, (byte) 0x51);
38840        emitAbsRegOperands(srcDisp, dstReg);
38841        if (lister != null) lister.RRA(miStart, "SQRTSD", dstReg, srcDisp);
38842      }
38843    
38844      /**
38845       * Generate a register--register-index SQRTSD. That is,
38846       * <PRE>
38847       * dstReg <<=  (quad)  srcReg
38848       * </PRE>
38849       *
38850       * @param dstReg destination register
38851       * @param srcBase the source base register
38852       * @param srcIndex the source index register
38853       * @param srcScale the source scale
38854       * @param srcDisp the source displacement
38855       */
38856      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
38857      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
38858      public final void emitSQRTSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
38859        int miStart = mi;
38860        setMachineCodes(mi++, (byte) 0xF2);
38861        generateREXprefix(false, dstReg, srcIndex, srcBase);
38862        setMachineCodes(mi++, (byte) 0x0F);
38863        setMachineCodes(mi++, (byte) 0x51);
38864        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
38865        if (lister != null) lister.RRXD(miStart, "SQRTSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
38866      }
38867    
38868      /**
38869       * Generate a register--register-indirect SQRTSD. That is,
38870       * <PRE>
38871       * dstReg <<=  (quad)  [srcBase]
38872       * </PRE>
38873       *
38874       * @param dstReg destination register
38875       * @param srcBase the source base register
38876       */
38877      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38878      public final void emitSQRTSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
38879        int miStart = mi;
38880        setMachineCodes(mi++, (byte) 0xF2);
38881        generateREXprefix(false, dstReg, null, srcBase);
38882        setMachineCodes(mi++, (byte) 0x0F);
38883        setMachineCodes(mi++, (byte) 0x51);
38884        emitRegIndirectRegOperands(srcBase, dstReg);
38885        if (lister != null) lister.RRN(miStart, "SQRTSD", dstReg, srcBase);
38886      }
38887    
38888    
38889      /**
38890       * Generate a register--register CVTSI2SD. That is,
38891       * <PRE>
38892       * dstReg <<=  (quad)  srcReg
38893       * </PRE>
38894       *
38895       * @param dstReg destination register
38896       * @param srcReg source register
38897       */
38898      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38899      public final void emitCVTSI2SD_Reg_Reg(XMM dstReg, GPR srcReg) {
38900        int miStart = mi;
38901        setMachineCodes(mi++, (byte) 0xF2);
38902        generateREXprefix(false, dstReg, null, srcReg);
38903        setMachineCodes(mi++, (byte) 0x0F);
38904        setMachineCodes(mi++, (byte) 0x2A);
38905        emitRegRegOperands(srcReg, dstReg);
38906        if (lister != null) lister.RR(miStart, "CVTSI2SD", dstReg, srcReg);
38907      }
38908    
38909      /**
38910       * Generate a register--register-displacement CVTSI2SD. That is,
38911       * <PRE>
38912       * dstReg <<=  (quad)  [srcBase + srcDisp]
38913       * </PRE>
38914       *
38915       * @param dstReg destination register
38916       * @param srcBase the source base register
38917       * @param srcDisp the source displacement
38918       */
38919      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38920      public final void emitCVTSI2SD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
38921        int miStart = mi;
38922        setMachineCodes(mi++, (byte) 0xF2);
38923        generateREXprefix(false, dstReg, null, srcBase);
38924        setMachineCodes(mi++, (byte) 0x0F);
38925        setMachineCodes(mi++, (byte) 0x2A);
38926        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
38927        if (lister != null) lister.RRD(miStart, "CVTSI2SD", dstReg, srcBase, srcDisp);
38928      }
38929    
38930      /**
38931       * Generate a register--register-offset CVTSI2SD. That is,
38932       * <PRE>
38933       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
38934       * </PRE>
38935       *
38936       * @param dstReg destination register
38937       * @param srcIndex the source index register
38938       * @param srcScale the source scale
38939       * @param srcDisp the source displacement
38940       */
38941      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
38942      public final void emitCVTSI2SD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
38943        int miStart = mi;
38944        setMachineCodes(mi++, (byte) 0xF2);
38945        generateREXprefix(false, dstReg, srcIndex, null);
38946        setMachineCodes(mi++, (byte) 0x0F);
38947        setMachineCodes(mi++, (byte) 0x2A);
38948        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
38949        if (lister != null) lister.RRFD(miStart, "CVTSI2SD", dstReg, srcIndex, srcScale, srcDisp);
38950      }
38951    
38952      /**
38953       * Generate a register--absolute CVTSI2SD. That is,
38954       * <PRE>
38955       *  dstReg <<=  (quad)  [srcDisp]
38956       * </PRE>
38957       *
38958       * @param dstReg destination register
38959       * @param srcDisp the source displacement
38960       */
38961      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
38962      public final void emitCVTSI2SD_Reg_Abs(XMM dstReg, Address srcDisp) {
38963        int miStart = mi;
38964        setMachineCodes(mi++, (byte) 0xF2);
38965        generateREXprefix(false, dstReg, null, null);
38966        setMachineCodes(mi++, (byte) 0x0F);
38967        setMachineCodes(mi++, (byte) 0x2A);
38968        emitAbsRegOperands(srcDisp, dstReg);
38969        if (lister != null) lister.RRA(miStart, "CVTSI2SD", dstReg, srcDisp);
38970      }
38971    
38972      /**
38973       * Generate a register--register-index CVTSI2SD. That is,
38974       * <PRE>
38975       * dstReg <<=  (quad)  srcReg
38976       * </PRE>
38977       *
38978       * @param dstReg destination register
38979       * @param srcBase the source base register
38980       * @param srcIndex the source index register
38981       * @param srcScale the source scale
38982       * @param srcDisp the source displacement
38983       */
38984      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
38985      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
38986      public final void emitCVTSI2SD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
38987        int miStart = mi;
38988        setMachineCodes(mi++, (byte) 0xF2);
38989        generateREXprefix(false, dstReg, srcIndex, srcBase);
38990        setMachineCodes(mi++, (byte) 0x0F);
38991        setMachineCodes(mi++, (byte) 0x2A);
38992        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
38993        if (lister != null) lister.RRXD(miStart, "CVTSI2SD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
38994      }
38995    
38996      /**
38997       * Generate a register--register-indirect CVTSI2SD. That is,
38998       * <PRE>
38999       * dstReg <<=  (quad)  [srcBase]
39000       * </PRE>
39001       *
39002       * @param dstReg destination register
39003       * @param srcBase the source base register
39004       */
39005      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39006      public final void emitCVTSI2SD_Reg_RegInd(XMM dstReg, GPR srcBase) {
39007        int miStart = mi;
39008        setMachineCodes(mi++, (byte) 0xF2);
39009        generateREXprefix(false, dstReg, null, srcBase);
39010        setMachineCodes(mi++, (byte) 0x0F);
39011        setMachineCodes(mi++, (byte) 0x2A);
39012        emitRegIndirectRegOperands(srcBase, dstReg);
39013        if (lister != null) lister.RRN(miStart, "CVTSI2SD", dstReg, srcBase);
39014      }
39015    
39016    
39017      /**
39018       * Generate a register--register CVTSD2SS. That is,
39019       * <PRE>
39020       * dstReg <<=  (quad)  srcReg
39021       * </PRE>
39022       *
39023       * @param dstReg destination register
39024       * @param srcReg source register
39025       */
39026      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39027      public final void emitCVTSD2SS_Reg_Reg(XMM dstReg, XMM srcReg) {
39028        int miStart = mi;
39029        setMachineCodes(mi++, (byte) 0xF2);
39030        generateREXprefix(false, dstReg, null, srcReg);
39031        setMachineCodes(mi++, (byte) 0x0F);
39032        setMachineCodes(mi++, (byte) 0x5A);
39033        emitRegRegOperands(srcReg, dstReg);
39034        if (lister != null) lister.RR(miStart, "CVTSD2SS", dstReg, srcReg);
39035      }
39036    
39037      /**
39038       * Generate a register--register-displacement CVTSD2SS. That is,
39039       * <PRE>
39040       * dstReg <<=  (quad)  [srcBase + srcDisp]
39041       * </PRE>
39042       *
39043       * @param dstReg destination register
39044       * @param srcBase the source base register
39045       * @param srcDisp the source displacement
39046       */
39047      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39048      public final void emitCVTSD2SS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
39049        int miStart = mi;
39050        setMachineCodes(mi++, (byte) 0xF2);
39051        generateREXprefix(false, dstReg, null, srcBase);
39052        setMachineCodes(mi++, (byte) 0x0F);
39053        setMachineCodes(mi++, (byte) 0x5A);
39054        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
39055        if (lister != null) lister.RRD(miStart, "CVTSD2SS", dstReg, srcBase, srcDisp);
39056      }
39057    
39058      /**
39059       * Generate a register--register-offset CVTSD2SS. That is,
39060       * <PRE>
39061       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
39062       * </PRE>
39063       *
39064       * @param dstReg destination register
39065       * @param srcIndex the source index register
39066       * @param srcScale the source scale
39067       * @param srcDisp the source displacement
39068       */
39069      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39070      public final void emitCVTSD2SS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
39071        int miStart = mi;
39072        setMachineCodes(mi++, (byte) 0xF2);
39073        generateREXprefix(false, dstReg, srcIndex, null);
39074        setMachineCodes(mi++, (byte) 0x0F);
39075        setMachineCodes(mi++, (byte) 0x5A);
39076        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
39077        if (lister != null) lister.RRFD(miStart, "CVTSD2SS", dstReg, srcIndex, srcScale, srcDisp);
39078      }
39079    
39080      /**
39081       * Generate a register--absolute CVTSD2SS. That is,
39082       * <PRE>
39083       *  dstReg <<=  (quad)  [srcDisp]
39084       * </PRE>
39085       *
39086       * @param dstReg destination register
39087       * @param srcDisp the source displacement
39088       */
39089      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
39090      public final void emitCVTSD2SS_Reg_Abs(XMM dstReg, Address srcDisp) {
39091        int miStart = mi;
39092        setMachineCodes(mi++, (byte) 0xF2);
39093        generateREXprefix(false, dstReg, null, null);
39094        setMachineCodes(mi++, (byte) 0x0F);
39095        setMachineCodes(mi++, (byte) 0x5A);
39096        emitAbsRegOperands(srcDisp, dstReg);
39097        if (lister != null) lister.RRA(miStart, "CVTSD2SS", dstReg, srcDisp);
39098      }
39099    
39100      /**
39101       * Generate a register--register-index CVTSD2SS. That is,
39102       * <PRE>
39103       * dstReg <<=  (quad)  srcReg
39104       * </PRE>
39105       *
39106       * @param dstReg destination register
39107       * @param srcBase the source base register
39108       * @param srcIndex the source index register
39109       * @param srcScale the source scale
39110       * @param srcDisp the source displacement
39111       */
39112      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
39113      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
39114      public final void emitCVTSD2SS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
39115        int miStart = mi;
39116        setMachineCodes(mi++, (byte) 0xF2);
39117        generateREXprefix(false, dstReg, srcIndex, srcBase);
39118        setMachineCodes(mi++, (byte) 0x0F);
39119        setMachineCodes(mi++, (byte) 0x5A);
39120        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
39121        if (lister != null) lister.RRXD(miStart, "CVTSD2SS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
39122      }
39123    
39124      /**
39125       * Generate a register--register-indirect CVTSD2SS. That is,
39126       * <PRE>
39127       * dstReg <<=  (quad)  [srcBase]
39128       * </PRE>
39129       *
39130       * @param dstReg destination register
39131       * @param srcBase the source base register
39132       */
39133      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39134      public final void emitCVTSD2SS_Reg_RegInd(XMM dstReg, GPR srcBase) {
39135        int miStart = mi;
39136        setMachineCodes(mi++, (byte) 0xF2);
39137        generateREXprefix(false, dstReg, null, srcBase);
39138        setMachineCodes(mi++, (byte) 0x0F);
39139        setMachineCodes(mi++, (byte) 0x5A);
39140        emitRegIndirectRegOperands(srcBase, dstReg);
39141        if (lister != null) lister.RRN(miStart, "CVTSD2SS", dstReg, srcBase);
39142      }
39143    
39144    
39145      /**
39146       * Generate a register--register CVTSD2SI. That is,
39147       * <PRE>
39148       * dstReg <<=  (quad)  srcReg
39149       * </PRE>
39150       *
39151       * @param dstReg destination register
39152       * @param srcReg source register
39153       */
39154      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39155      public final void emitCVTSD2SI_Reg_Reg(GPR dstReg, XMM srcReg) {
39156        int miStart = mi;
39157        setMachineCodes(mi++, (byte) 0xF2);
39158        generateREXprefix(false, dstReg, null, srcReg);
39159        setMachineCodes(mi++, (byte) 0x0F);
39160        setMachineCodes(mi++, (byte) 0x2D);
39161        emitRegRegOperands(srcReg, dstReg);
39162        if (lister != null) lister.RR(miStart, "CVTSD2SI", dstReg, srcReg);
39163      }
39164    
39165      /**
39166       * Generate a register--register-displacement CVTSD2SI. That is,
39167       * <PRE>
39168       * dstReg <<=  (quad)  [srcBase + srcDisp]
39169       * </PRE>
39170       *
39171       * @param dstReg destination register
39172       * @param srcBase the source base register
39173       * @param srcDisp the source displacement
39174       */
39175      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39176      public final void emitCVTSD2SI_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
39177        int miStart = mi;
39178        setMachineCodes(mi++, (byte) 0xF2);
39179        generateREXprefix(false, dstReg, null, srcBase);
39180        setMachineCodes(mi++, (byte) 0x0F);
39181        setMachineCodes(mi++, (byte) 0x2D);
39182        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
39183        if (lister != null) lister.RRD(miStart, "CVTSD2SI", dstReg, srcBase, srcDisp);
39184      }
39185    
39186      /**
39187       * Generate a register--register-offset CVTSD2SI. That is,
39188       * <PRE>
39189       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
39190       * </PRE>
39191       *
39192       * @param dstReg destination register
39193       * @param srcIndex the source index register
39194       * @param srcScale the source scale
39195       * @param srcDisp the source displacement
39196       */
39197      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39198      public final void emitCVTSD2SI_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
39199        int miStart = mi;
39200        setMachineCodes(mi++, (byte) 0xF2);
39201        generateREXprefix(false, dstReg, srcIndex, null);
39202        setMachineCodes(mi++, (byte) 0x0F);
39203        setMachineCodes(mi++, (byte) 0x2D);
39204        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
39205        if (lister != null) lister.RRFD(miStart, "CVTSD2SI", dstReg, srcIndex, srcScale, srcDisp);
39206      }
39207    
39208      /**
39209       * Generate a register--absolute CVTSD2SI. That is,
39210       * <PRE>
39211       *  dstReg <<=  (quad)  [srcDisp]
39212       * </PRE>
39213       *
39214       * @param dstReg destination register
39215       * @param srcDisp the source displacement
39216       */
39217      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
39218      public final void emitCVTSD2SI_Reg_Abs(GPR dstReg, Address srcDisp) {
39219        int miStart = mi;
39220        setMachineCodes(mi++, (byte) 0xF2);
39221        generateREXprefix(false, dstReg, null, null);
39222        setMachineCodes(mi++, (byte) 0x0F);
39223        setMachineCodes(mi++, (byte) 0x2D);
39224        emitAbsRegOperands(srcDisp, dstReg);
39225        if (lister != null) lister.RRA(miStart, "CVTSD2SI", dstReg, srcDisp);
39226      }
39227    
39228      /**
39229       * Generate a register--register-index CVTSD2SI. That is,
39230       * <PRE>
39231       * dstReg <<=  (quad)  srcReg
39232       * </PRE>
39233       *
39234       * @param dstReg destination register
39235       * @param srcBase the source base register
39236       * @param srcIndex the source index register
39237       * @param srcScale the source scale
39238       * @param srcDisp the source displacement
39239       */
39240      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
39241      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
39242      public final void emitCVTSD2SI_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
39243        int miStart = mi;
39244        setMachineCodes(mi++, (byte) 0xF2);
39245        generateREXprefix(false, dstReg, srcIndex, srcBase);
39246        setMachineCodes(mi++, (byte) 0x0F);
39247        setMachineCodes(mi++, (byte) 0x2D);
39248        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
39249        if (lister != null) lister.RRXD(miStart, "CVTSD2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp);
39250      }
39251    
39252      /**
39253       * Generate a register--register-indirect CVTSD2SI. That is,
39254       * <PRE>
39255       * dstReg <<=  (quad)  [srcBase]
39256       * </PRE>
39257       *
39258       * @param dstReg destination register
39259       * @param srcBase the source base register
39260       */
39261      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39262      public final void emitCVTSD2SI_Reg_RegInd(GPR dstReg, GPR srcBase) {
39263        int miStart = mi;
39264        setMachineCodes(mi++, (byte) 0xF2);
39265        generateREXprefix(false, dstReg, null, srcBase);
39266        setMachineCodes(mi++, (byte) 0x0F);
39267        setMachineCodes(mi++, (byte) 0x2D);
39268        emitRegIndirectRegOperands(srcBase, dstReg);
39269        if (lister != null) lister.RRN(miStart, "CVTSD2SI", dstReg, srcBase);
39270      }
39271    
39272    
39273      /**
39274       * Generate a register--register CVTTSD2SI. That is,
39275       * <PRE>
39276       * dstReg <<=  (quad)  srcReg
39277       * </PRE>
39278       *
39279       * @param dstReg destination register
39280       * @param srcReg source register
39281       */
39282      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39283      public final void emitCVTTSD2SI_Reg_Reg(GPR dstReg, XMM srcReg) {
39284        int miStart = mi;
39285        setMachineCodes(mi++, (byte) 0xF2);
39286        generateREXprefix(false, dstReg, null, srcReg);
39287        setMachineCodes(mi++, (byte) 0x0F);
39288        setMachineCodes(mi++, (byte) 0x2C);
39289        emitRegRegOperands(srcReg, dstReg);
39290        if (lister != null) lister.RR(miStart, "CVTTSD2SI", dstReg, srcReg);
39291      }
39292    
39293      /**
39294       * Generate a register--register-displacement CVTTSD2SI. That is,
39295       * <PRE>
39296       * dstReg <<=  (quad)  [srcBase + srcDisp]
39297       * </PRE>
39298       *
39299       * @param dstReg destination register
39300       * @param srcBase the source base register
39301       * @param srcDisp the source displacement
39302       */
39303      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39304      public final void emitCVTTSD2SI_Reg_RegDisp(GPR dstReg, GPR srcBase, Offset srcDisp) {
39305        int miStart = mi;
39306        setMachineCodes(mi++, (byte) 0xF2);
39307        generateREXprefix(false, dstReg, null, srcBase);
39308        setMachineCodes(mi++, (byte) 0x0F);
39309        setMachineCodes(mi++, (byte) 0x2C);
39310        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
39311        if (lister != null) lister.RRD(miStart, "CVTTSD2SI", dstReg, srcBase, srcDisp);
39312      }
39313    
39314      /**
39315       * Generate a register--register-offset CVTTSD2SI. That is,
39316       * <PRE>
39317       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
39318       * </PRE>
39319       *
39320       * @param dstReg destination register
39321       * @param srcIndex the source index register
39322       * @param srcScale the source scale
39323       * @param srcDisp the source displacement
39324       */
39325      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39326      public final void emitCVTTSD2SI_Reg_RegOff(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
39327        int miStart = mi;
39328        setMachineCodes(mi++, (byte) 0xF2);
39329        generateREXprefix(false, dstReg, srcIndex, null);
39330        setMachineCodes(mi++, (byte) 0x0F);
39331        setMachineCodes(mi++, (byte) 0x2C);
39332        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
39333        if (lister != null) lister.RRFD(miStart, "CVTTSD2SI", dstReg, srcIndex, srcScale, srcDisp);
39334      }
39335    
39336      /**
39337       * Generate a register--absolute CVTTSD2SI. That is,
39338       * <PRE>
39339       *  dstReg <<=  (quad)  [srcDisp]
39340       * </PRE>
39341       *
39342       * @param dstReg destination register
39343       * @param srcDisp the source displacement
39344       */
39345      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
39346      public final void emitCVTTSD2SI_Reg_Abs(GPR dstReg, Address srcDisp) {
39347        int miStart = mi;
39348        setMachineCodes(mi++, (byte) 0xF2);
39349        generateREXprefix(false, dstReg, null, null);
39350        setMachineCodes(mi++, (byte) 0x0F);
39351        setMachineCodes(mi++, (byte) 0x2C);
39352        emitAbsRegOperands(srcDisp, dstReg);
39353        if (lister != null) lister.RRA(miStart, "CVTTSD2SI", dstReg, srcDisp);
39354      }
39355    
39356      /**
39357       * Generate a register--register-index CVTTSD2SI. That is,
39358       * <PRE>
39359       * dstReg <<=  (quad)  srcReg
39360       * </PRE>
39361       *
39362       * @param dstReg destination register
39363       * @param srcBase the source base register
39364       * @param srcIndex the source index register
39365       * @param srcScale the source scale
39366       * @param srcDisp the source displacement
39367       */
39368      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
39369      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
39370      public final void emitCVTTSD2SI_Reg_RegIdx(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
39371        int miStart = mi;
39372        setMachineCodes(mi++, (byte) 0xF2);
39373        generateREXprefix(false, dstReg, srcIndex, srcBase);
39374        setMachineCodes(mi++, (byte) 0x0F);
39375        setMachineCodes(mi++, (byte) 0x2C);
39376        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
39377        if (lister != null) lister.RRXD(miStart, "CVTTSD2SI", dstReg, srcBase, srcIndex, srcScale, srcDisp);
39378      }
39379    
39380      /**
39381       * Generate a register--register-indirect CVTTSD2SI. That is,
39382       * <PRE>
39383       * dstReg <<=  (quad)  [srcBase]
39384       * </PRE>
39385       *
39386       * @param dstReg destination register
39387       * @param srcBase the source base register
39388       */
39389      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39390      public final void emitCVTTSD2SI_Reg_RegInd(GPR dstReg, GPR srcBase) {
39391        int miStart = mi;
39392        setMachineCodes(mi++, (byte) 0xF2);
39393        generateREXprefix(false, dstReg, null, srcBase);
39394        setMachineCodes(mi++, (byte) 0x0F);
39395        setMachineCodes(mi++, (byte) 0x2C);
39396        emitRegIndirectRegOperands(srcBase, dstReg);
39397        if (lister != null) lister.RRN(miStart, "CVTTSD2SI", dstReg, srcBase);
39398      }
39399    
39400    
39401      /**
39402       * Generate a register--register CVTSI2SDQ. That is,
39403       * <PRE>
39404       * dstReg <<=  (quad)  srcReg
39405       * </PRE>
39406       *
39407       * @param dstReg destination register
39408       * @param srcReg source register
39409       */
39410      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39411      public final void emitCVTSI2SDQ_Reg_Reg_Quad(XMM dstReg, GPR srcReg) {
39412        int miStart = mi;
39413        setMachineCodes(mi++, (byte) 0xF2);
39414        generateREXprefix(true, dstReg, null, srcReg);
39415        setMachineCodes(mi++, (byte) 0x0F);
39416        setMachineCodes(mi++, (byte) 0x2A);
39417        emitRegRegOperands(srcReg, dstReg);
39418        if (lister != null) lister.RR(miStart, "CVTSI2SDQ", dstReg, srcReg);
39419      }
39420    
39421      /**
39422       * Generate a register--register-displacement CVTSI2SDQ. That is,
39423       * <PRE>
39424       * dstReg <<=  (quad)  [srcBase + srcDisp]
39425       * </PRE>
39426       *
39427       * @param dstReg destination register
39428       * @param srcBase the source base register
39429       * @param srcDisp the source displacement
39430       */
39431      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39432      public final void emitCVTSI2SDQ_Reg_RegDisp_Quad(XMM dstReg, GPR srcBase, Offset srcDisp) {
39433        int miStart = mi;
39434        setMachineCodes(mi++, (byte) 0xF2);
39435        generateREXprefix(true, dstReg, null, srcBase);
39436        setMachineCodes(mi++, (byte) 0x0F);
39437        setMachineCodes(mi++, (byte) 0x2A);
39438        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
39439        if (lister != null) lister.RRD(miStart, "CVTSI2SDQ", dstReg, srcBase, srcDisp);
39440      }
39441    
39442      /**
39443       * Generate a register--register-offset CVTSI2SDQ. That is,
39444       * <PRE>
39445       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
39446       * </PRE>
39447       *
39448       * @param dstReg destination register
39449       * @param srcIndex the source index register
39450       * @param srcScale the source scale
39451       * @param srcDisp the source displacement
39452       */
39453      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39454      public final void emitCVTSI2SDQ_Reg_RegOff_Quad(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
39455        int miStart = mi;
39456        setMachineCodes(mi++, (byte) 0xF2);
39457        generateREXprefix(true, dstReg, srcIndex, null);
39458        setMachineCodes(mi++, (byte) 0x0F);
39459        setMachineCodes(mi++, (byte) 0x2A);
39460        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
39461        if (lister != null) lister.RRFD(miStart, "CVTSI2SDQ", dstReg, srcIndex, srcScale, srcDisp);
39462      }
39463    
39464      /**
39465       * Generate a register--absolute CVTSI2SDQ. That is,
39466       * <PRE>
39467       *  dstReg <<=  (quad)  [srcDisp]
39468       * </PRE>
39469       *
39470       * @param dstReg destination register
39471       * @param srcDisp the source displacement
39472       */
39473      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
39474      public final void emitCVTSI2SDQ_Reg_Abs_Quad(XMM dstReg, Address srcDisp) {
39475        int miStart = mi;
39476        setMachineCodes(mi++, (byte) 0xF2);
39477        generateREXprefix(true, dstReg, null, null);
39478        setMachineCodes(mi++, (byte) 0x0F);
39479        setMachineCodes(mi++, (byte) 0x2A);
39480        emitAbsRegOperands(srcDisp, dstReg);
39481        if (lister != null) lister.RRA(miStart, "CVTSI2SDQ", dstReg, srcDisp);
39482      }
39483    
39484      /**
39485       * Generate a register--register-index CVTSI2SDQ. That is,
39486       * <PRE>
39487       * dstReg <<=  (quad)  srcReg
39488       * </PRE>
39489       *
39490       * @param dstReg destination register
39491       * @param srcBase the source base register
39492       * @param srcIndex the source index register
39493       * @param srcScale the source scale
39494       * @param srcDisp the source displacement
39495       */
39496      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
39497      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
39498      public final void emitCVTSI2SDQ_Reg_RegIdx_Quad(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
39499        int miStart = mi;
39500        setMachineCodes(mi++, (byte) 0xF2);
39501        generateREXprefix(true, dstReg, srcIndex, srcBase);
39502        setMachineCodes(mi++, (byte) 0x0F);
39503        setMachineCodes(mi++, (byte) 0x2A);
39504        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
39505        if (lister != null) lister.RRXD(miStart, "CVTSI2SDQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
39506      }
39507    
39508      /**
39509       * Generate a register--register-indirect CVTSI2SDQ. That is,
39510       * <PRE>
39511       * dstReg <<=  (quad)  [srcBase]
39512       * </PRE>
39513       *
39514       * @param dstReg destination register
39515       * @param srcBase the source base register
39516       */
39517      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39518      public final void emitCVTSI2SDQ_Reg_RegInd_Quad(XMM dstReg, GPR srcBase) {
39519        int miStart = mi;
39520        setMachineCodes(mi++, (byte) 0xF2);
39521        generateREXprefix(true, dstReg, null, srcBase);
39522        setMachineCodes(mi++, (byte) 0x0F);
39523        setMachineCodes(mi++, (byte) 0x2A);
39524        emitRegIndirectRegOperands(srcBase, dstReg);
39525        if (lister != null) lister.RRN(miStart, "CVTSI2SDQ", dstReg, srcBase);
39526      }
39527    
39528    
39529      /**
39530       * Generate a register--register CVTSD2SIQ. That is,
39531       * <PRE>
39532       * dstReg <<=  (quad)  srcReg
39533       * </PRE>
39534       *
39535       * @param dstReg destination register
39536       * @param srcReg source register
39537       */
39538      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39539      public final void emitCVTSD2SIQ_Reg_Reg_Quad(GPR dstReg, XMM srcReg) {
39540        int miStart = mi;
39541        setMachineCodes(mi++, (byte) 0xF2);
39542        generateREXprefix(true, dstReg, null, srcReg);
39543        setMachineCodes(mi++, (byte) 0x0F);
39544        setMachineCodes(mi++, (byte) 0x2D);
39545        emitRegRegOperands(srcReg, dstReg);
39546        if (lister != null) lister.RR(miStart, "CVTSD2SIQ", dstReg, srcReg);
39547      }
39548    
39549      /**
39550       * Generate a register--register-displacement CVTSD2SIQ. That is,
39551       * <PRE>
39552       * dstReg <<=  (quad)  [srcBase + srcDisp]
39553       * </PRE>
39554       *
39555       * @param dstReg destination register
39556       * @param srcBase the source base register
39557       * @param srcDisp the source displacement
39558       */
39559      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39560      public final void emitCVTSD2SIQ_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
39561        int miStart = mi;
39562        setMachineCodes(mi++, (byte) 0xF2);
39563        generateREXprefix(true, dstReg, null, srcBase);
39564        setMachineCodes(mi++, (byte) 0x0F);
39565        setMachineCodes(mi++, (byte) 0x2D);
39566        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
39567        if (lister != null) lister.RRD(miStart, "CVTSD2SIQ", dstReg, srcBase, srcDisp);
39568      }
39569    
39570      /**
39571       * Generate a register--register-offset CVTSD2SIQ. That is,
39572       * <PRE>
39573       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
39574       * </PRE>
39575       *
39576       * @param dstReg destination register
39577       * @param srcIndex the source index register
39578       * @param srcScale the source scale
39579       * @param srcDisp the source displacement
39580       */
39581      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39582      public final void emitCVTSD2SIQ_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
39583        int miStart = mi;
39584        setMachineCodes(mi++, (byte) 0xF2);
39585        generateREXprefix(true, dstReg, srcIndex, null);
39586        setMachineCodes(mi++, (byte) 0x0F);
39587        setMachineCodes(mi++, (byte) 0x2D);
39588        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
39589        if (lister != null) lister.RRFD(miStart, "CVTSD2SIQ", dstReg, srcIndex, srcScale, srcDisp);
39590      }
39591    
39592      /**
39593       * Generate a register--absolute CVTSD2SIQ. That is,
39594       * <PRE>
39595       *  dstReg <<=  (quad)  [srcDisp]
39596       * </PRE>
39597       *
39598       * @param dstReg destination register
39599       * @param srcDisp the source displacement
39600       */
39601      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
39602      public final void emitCVTSD2SIQ_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
39603        int miStart = mi;
39604        setMachineCodes(mi++, (byte) 0xF2);
39605        generateREXprefix(true, dstReg, null, null);
39606        setMachineCodes(mi++, (byte) 0x0F);
39607        setMachineCodes(mi++, (byte) 0x2D);
39608        emitAbsRegOperands(srcDisp, dstReg);
39609        if (lister != null) lister.RRA(miStart, "CVTSD2SIQ", dstReg, srcDisp);
39610      }
39611    
39612      /**
39613       * Generate a register--register-index CVTSD2SIQ. That is,
39614       * <PRE>
39615       * dstReg <<=  (quad)  srcReg
39616       * </PRE>
39617       *
39618       * @param dstReg destination register
39619       * @param srcBase the source base register
39620       * @param srcIndex the source index register
39621       * @param srcScale the source scale
39622       * @param srcDisp the source displacement
39623       */
39624      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
39625      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
39626      public final void emitCVTSD2SIQ_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
39627        int miStart = mi;
39628        setMachineCodes(mi++, (byte) 0xF2);
39629        generateREXprefix(true, dstReg, srcIndex, srcBase);
39630        setMachineCodes(mi++, (byte) 0x0F);
39631        setMachineCodes(mi++, (byte) 0x2D);
39632        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
39633        if (lister != null) lister.RRXD(miStart, "CVTSD2SIQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
39634      }
39635    
39636      /**
39637       * Generate a register--register-indirect CVTSD2SIQ. That is,
39638       * <PRE>
39639       * dstReg <<=  (quad)  [srcBase]
39640       * </PRE>
39641       *
39642       * @param dstReg destination register
39643       * @param srcBase the source base register
39644       */
39645      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39646      public final void emitCVTSD2SIQ_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
39647        int miStart = mi;
39648        setMachineCodes(mi++, (byte) 0xF2);
39649        generateREXprefix(true, dstReg, null, srcBase);
39650        setMachineCodes(mi++, (byte) 0x0F);
39651        setMachineCodes(mi++, (byte) 0x2D);
39652        emitRegIndirectRegOperands(srcBase, dstReg);
39653        if (lister != null) lister.RRN(miStart, "CVTSD2SIQ", dstReg, srcBase);
39654      }
39655    
39656    
39657      /**
39658       * Generate a register--register CVTTSD2SIQ. That is,
39659       * <PRE>
39660       * dstReg <<=  (quad)  srcReg
39661       * </PRE>
39662       *
39663       * @param dstReg destination register
39664       * @param srcReg source register
39665       */
39666      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39667      public final void emitCVTTSD2SIQ_Reg_Reg_Quad(GPR dstReg, XMM srcReg) {
39668        int miStart = mi;
39669        setMachineCodes(mi++, (byte) 0xF2);
39670        generateREXprefix(true, dstReg, null, srcReg);
39671        setMachineCodes(mi++, (byte) 0x0F);
39672        setMachineCodes(mi++, (byte) 0x2C);
39673        emitRegRegOperands(srcReg, dstReg);
39674        if (lister != null) lister.RR(miStart, "CVTTSD2SIQ", dstReg, srcReg);
39675      }
39676    
39677      /**
39678       * Generate a register--register-displacement CVTTSD2SIQ. That is,
39679       * <PRE>
39680       * dstReg <<=  (quad)  [srcBase + srcDisp]
39681       * </PRE>
39682       *
39683       * @param dstReg destination register
39684       * @param srcBase the source base register
39685       * @param srcDisp the source displacement
39686       */
39687      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39688      public final void emitCVTTSD2SIQ_Reg_RegDisp_Quad(GPR dstReg, GPR srcBase, Offset srcDisp) {
39689        int miStart = mi;
39690        setMachineCodes(mi++, (byte) 0xF2);
39691        generateREXprefix(true, dstReg, null, srcBase);
39692        setMachineCodes(mi++, (byte) 0x0F);
39693        setMachineCodes(mi++, (byte) 0x2C);
39694        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
39695        if (lister != null) lister.RRD(miStart, "CVTTSD2SIQ", dstReg, srcBase, srcDisp);
39696      }
39697    
39698      /**
39699       * Generate a register--register-offset CVTTSD2SIQ. That is,
39700       * <PRE>
39701       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
39702       * </PRE>
39703       *
39704       * @param dstReg destination register
39705       * @param srcIndex the source index register
39706       * @param srcScale the source scale
39707       * @param srcDisp the source displacement
39708       */
39709      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39710      public final void emitCVTTSD2SIQ_Reg_RegOff_Quad(GPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
39711        int miStart = mi;
39712        setMachineCodes(mi++, (byte) 0xF2);
39713        generateREXprefix(true, dstReg, srcIndex, null);
39714        setMachineCodes(mi++, (byte) 0x0F);
39715        setMachineCodes(mi++, (byte) 0x2C);
39716        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
39717        if (lister != null) lister.RRFD(miStart, "CVTTSD2SIQ", dstReg, srcIndex, srcScale, srcDisp);
39718      }
39719    
39720      /**
39721       * Generate a register--absolute CVTTSD2SIQ. That is,
39722       * <PRE>
39723       *  dstReg <<=  (quad)  [srcDisp]
39724       * </PRE>
39725       *
39726       * @param dstReg destination register
39727       * @param srcDisp the source displacement
39728       */
39729      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
39730      public final void emitCVTTSD2SIQ_Reg_Abs_Quad(GPR dstReg, Address srcDisp) {
39731        int miStart = mi;
39732        setMachineCodes(mi++, (byte) 0xF2);
39733        generateREXprefix(true, dstReg, null, null);
39734        setMachineCodes(mi++, (byte) 0x0F);
39735        setMachineCodes(mi++, (byte) 0x2C);
39736        emitAbsRegOperands(srcDisp, dstReg);
39737        if (lister != null) lister.RRA(miStart, "CVTTSD2SIQ", dstReg, srcDisp);
39738      }
39739    
39740      /**
39741       * Generate a register--register-index CVTTSD2SIQ. That is,
39742       * <PRE>
39743       * dstReg <<=  (quad)  srcReg
39744       * </PRE>
39745       *
39746       * @param dstReg destination register
39747       * @param srcBase the source base register
39748       * @param srcIndex the source index register
39749       * @param srcScale the source scale
39750       * @param srcDisp the source displacement
39751       */
39752      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
39753      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
39754      public final void emitCVTTSD2SIQ_Reg_RegIdx_Quad(GPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
39755        int miStart = mi;
39756        setMachineCodes(mi++, (byte) 0xF2);
39757        generateREXprefix(true, dstReg, srcIndex, srcBase);
39758        setMachineCodes(mi++, (byte) 0x0F);
39759        setMachineCodes(mi++, (byte) 0x2C);
39760        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
39761        if (lister != null) lister.RRXD(miStart, "CVTTSD2SIQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
39762      }
39763    
39764      /**
39765       * Generate a register--register-indirect CVTTSD2SIQ. That is,
39766       * <PRE>
39767       * dstReg <<=  (quad)  [srcBase]
39768       * </PRE>
39769       *
39770       * @param dstReg destination register
39771       * @param srcBase the source base register
39772       */
39773      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39774      public final void emitCVTTSD2SIQ_Reg_RegInd_Quad(GPR dstReg, GPR srcBase) {
39775        int miStart = mi;
39776        setMachineCodes(mi++, (byte) 0xF2);
39777        generateREXprefix(true, dstReg, null, srcBase);
39778        setMachineCodes(mi++, (byte) 0x0F);
39779        setMachineCodes(mi++, (byte) 0x2C);
39780        emitRegIndirectRegOperands(srcBase, dstReg);
39781        if (lister != null) lister.RRN(miStart, "CVTTSD2SIQ", dstReg, srcBase);
39782      }
39783    
39784    
39785      /**
39786       * Generate a register--register UCOMISD. That is,
39787       * <PRE>
39788       * dstReg <<=  (quad)  srcReg
39789       * </PRE>
39790       *
39791       * @param dstReg destination register
39792       * @param srcReg source register
39793       */
39794      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39795      public final void emitUCOMISD_Reg_Reg(XMM dstReg, XMM srcReg) {
39796        int miStart = mi;
39797        setMachineCodes(mi++, (byte) 0x66);
39798        generateREXprefix(false, dstReg, null, srcReg);
39799        setMachineCodes(mi++, (byte) 0x0F);
39800        setMachineCodes(mi++, (byte) 0x2E);
39801        emitRegRegOperands(srcReg, dstReg);
39802        if (lister != null) lister.RR(miStart, "UCOMISD", dstReg, srcReg);
39803      }
39804    
39805      /**
39806       * Generate a register--register-displacement UCOMISD. That is,
39807       * <PRE>
39808       * dstReg <<=  (quad)  [srcBase + srcDisp]
39809       * </PRE>
39810       *
39811       * @param dstReg destination register
39812       * @param srcBase the source base register
39813       * @param srcDisp the source displacement
39814       */
39815      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39816      public final void emitUCOMISD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
39817        int miStart = mi;
39818        setMachineCodes(mi++, (byte) 0x66);
39819        generateREXprefix(false, dstReg, null, srcBase);
39820        setMachineCodes(mi++, (byte) 0x0F);
39821        setMachineCodes(mi++, (byte) 0x2E);
39822        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
39823        if (lister != null) lister.RRD(miStart, "UCOMISD", dstReg, srcBase, srcDisp);
39824      }
39825    
39826      /**
39827       * Generate a register--register-offset UCOMISD. That is,
39828       * <PRE>
39829       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
39830       * </PRE>
39831       *
39832       * @param dstReg destination register
39833       * @param srcIndex the source index register
39834       * @param srcScale the source scale
39835       * @param srcDisp the source displacement
39836       */
39837      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39838      public final void emitUCOMISD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
39839        int miStart = mi;
39840        setMachineCodes(mi++, (byte) 0x66);
39841        generateREXprefix(false, dstReg, srcIndex, null);
39842        setMachineCodes(mi++, (byte) 0x0F);
39843        setMachineCodes(mi++, (byte) 0x2E);
39844        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
39845        if (lister != null) lister.RRFD(miStart, "UCOMISD", dstReg, srcIndex, srcScale, srcDisp);
39846      }
39847    
39848      /**
39849       * Generate a register--absolute UCOMISD. That is,
39850       * <PRE>
39851       *  dstReg <<=  (quad)  [srcDisp]
39852       * </PRE>
39853       *
39854       * @param dstReg destination register
39855       * @param srcDisp the source displacement
39856       */
39857      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
39858      public final void emitUCOMISD_Reg_Abs(XMM dstReg, Address srcDisp) {
39859        int miStart = mi;
39860        setMachineCodes(mi++, (byte) 0x66);
39861        generateREXprefix(false, dstReg, null, null);
39862        setMachineCodes(mi++, (byte) 0x0F);
39863        setMachineCodes(mi++, (byte) 0x2E);
39864        emitAbsRegOperands(srcDisp, dstReg);
39865        if (lister != null) lister.RRA(miStart, "UCOMISD", dstReg, srcDisp);
39866      }
39867    
39868      /**
39869       * Generate a register--register-index UCOMISD. That is,
39870       * <PRE>
39871       * dstReg <<=  (quad)  srcReg
39872       * </PRE>
39873       *
39874       * @param dstReg destination register
39875       * @param srcBase the source base register
39876       * @param srcIndex the source index register
39877       * @param srcScale the source scale
39878       * @param srcDisp the source displacement
39879       */
39880      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
39881      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
39882      public final void emitUCOMISD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
39883        int miStart = mi;
39884        setMachineCodes(mi++, (byte) 0x66);
39885        generateREXprefix(false, dstReg, srcIndex, srcBase);
39886        setMachineCodes(mi++, (byte) 0x0F);
39887        setMachineCodes(mi++, (byte) 0x2E);
39888        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
39889        if (lister != null) lister.RRXD(miStart, "UCOMISD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
39890      }
39891    
39892      /**
39893       * Generate a register--register-indirect UCOMISD. That is,
39894       * <PRE>
39895       * dstReg <<=  (quad)  [srcBase]
39896       * </PRE>
39897       *
39898       * @param dstReg destination register
39899       * @param srcBase the source base register
39900       */
39901      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39902      public final void emitUCOMISD_Reg_RegInd(XMM dstReg, GPR srcBase) {
39903        int miStart = mi;
39904        setMachineCodes(mi++, (byte) 0x66);
39905        generateREXprefix(false, dstReg, null, srcBase);
39906        setMachineCodes(mi++, (byte) 0x0F);
39907        setMachineCodes(mi++, (byte) 0x2E);
39908        emitRegIndirectRegOperands(srcBase, dstReg);
39909        if (lister != null) lister.RRN(miStart, "UCOMISD", dstReg, srcBase);
39910      }
39911    
39912    
39913      /**
39914       * Generate a register--register CMPEQSD. That is,
39915       * <PRE>
39916       * dstReg <<=  (quad)  srcReg
39917       * </PRE>
39918       *
39919       * @param dstReg destination register
39920       * @param srcReg source register
39921       */
39922      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39923      public final void emitCMPEQSD_Reg_Reg(XMM dstReg, XMM srcReg) {
39924        int miStart = mi;
39925        setMachineCodes(mi++, (byte) 0xF2);
39926        generateREXprefix(false, dstReg, null, srcReg);
39927        setMachineCodes(mi++, (byte) 0x0F);
39928        setMachineCodes(mi++, (byte) 0xC2);
39929        emitRegRegOperands(srcReg, dstReg);
39930        setMachineCodes(mi++, (byte) 0);
39931        if (lister != null) lister.RR(miStart, "CMPEQSD", dstReg, srcReg);
39932      }
39933    
39934      /**
39935       * Generate a register--register-displacement CMPEQSD. That is,
39936       * <PRE>
39937       * dstReg <<=  (quad)  [srcBase + srcDisp]
39938       * </PRE>
39939       *
39940       * @param dstReg destination register
39941       * @param srcBase the source base register
39942       * @param srcDisp the source displacement
39943       */
39944      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39945      public final void emitCMPEQSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
39946        int miStart = mi;
39947        setMachineCodes(mi++, (byte) 0xF2);
39948        generateREXprefix(false, dstReg, null, srcBase);
39949        setMachineCodes(mi++, (byte) 0x0F);
39950        setMachineCodes(mi++, (byte) 0xC2);
39951        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
39952        setMachineCodes(mi++, (byte) 0);
39953        if (lister != null) lister.RRD(miStart, "CMPEQSD", dstReg, srcBase, srcDisp);
39954      }
39955    
39956      /**
39957       * Generate a register--register-offset CMPEQSD. That is,
39958       * <PRE>
39959       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
39960       * </PRE>
39961       *
39962       * @param dstReg destination register
39963       * @param srcIndex the source index register
39964       * @param srcScale the source scale
39965       * @param srcDisp the source displacement
39966       */
39967      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
39968      public final void emitCMPEQSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
39969        int miStart = mi;
39970        setMachineCodes(mi++, (byte) 0xF2);
39971        generateREXprefix(false, dstReg, srcIndex, null);
39972        setMachineCodes(mi++, (byte) 0x0F);
39973        setMachineCodes(mi++, (byte) 0xC2);
39974        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
39975        setMachineCodes(mi++, (byte) 0);
39976        if (lister != null) lister.RRFD(miStart, "CMPEQSD", dstReg, srcIndex, srcScale, srcDisp);
39977      }
39978    
39979      /**
39980       * Generate a register--absolute CMPEQSD. That is,
39981       * <PRE>
39982       *  dstReg <<=  (quad)  [srcDisp]
39983       * </PRE>
39984       *
39985       * @param dstReg destination register
39986       * @param srcDisp the source displacement
39987       */
39988      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
39989      public final void emitCMPEQSD_Reg_Abs(XMM dstReg, Address srcDisp) {
39990        int miStart = mi;
39991        setMachineCodes(mi++, (byte) 0xF2);
39992        generateREXprefix(false, dstReg, null, null);
39993        setMachineCodes(mi++, (byte) 0x0F);
39994        setMachineCodes(mi++, (byte) 0xC2);
39995        emitAbsRegOperands(srcDisp, dstReg);
39996        setMachineCodes(mi++, (byte) 0);
39997        if (lister != null) lister.RRA(miStart, "CMPEQSD", dstReg, srcDisp);
39998      }
39999    
40000      /**
40001       * Generate a register--register-index CMPEQSD. That is,
40002       * <PRE>
40003       * dstReg <<=  (quad)  srcReg
40004       * </PRE>
40005       *
40006       * @param dstReg destination register
40007       * @param srcBase the source base register
40008       * @param srcIndex the source index register
40009       * @param srcScale the source scale
40010       * @param srcDisp the source displacement
40011       */
40012      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
40013      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
40014      public final void emitCMPEQSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
40015        int miStart = mi;
40016        setMachineCodes(mi++, (byte) 0xF2);
40017        generateREXprefix(false, dstReg, srcIndex, srcBase);
40018        setMachineCodes(mi++, (byte) 0x0F);
40019        setMachineCodes(mi++, (byte) 0xC2);
40020        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
40021        setMachineCodes(mi++, (byte) 0);
40022        if (lister != null) lister.RRXD(miStart, "CMPEQSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
40023      }
40024    
40025      /**
40026       * Generate a register--register-indirect CMPEQSD. That is,
40027       * <PRE>
40028       * dstReg <<=  (quad)  [srcBase]
40029       * </PRE>
40030       *
40031       * @param dstReg destination register
40032       * @param srcBase the source base register
40033       */
40034      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40035      public final void emitCMPEQSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
40036        int miStart = mi;
40037        setMachineCodes(mi++, (byte) 0xF2);
40038        generateREXprefix(false, dstReg, null, srcBase);
40039        setMachineCodes(mi++, (byte) 0x0F);
40040        setMachineCodes(mi++, (byte) 0xC2);
40041        emitRegIndirectRegOperands(srcBase, dstReg);
40042        setMachineCodes(mi++, (byte) 0);
40043        if (lister != null) lister.RRN(miStart, "CMPEQSD", dstReg, srcBase);
40044      }
40045    
40046    
40047      /**
40048       * Generate a register--register CMPLTSD. That is,
40049       * <PRE>
40050       * dstReg <<=  (quad)  srcReg
40051       * </PRE>
40052       *
40053       * @param dstReg destination register
40054       * @param srcReg source register
40055       */
40056      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40057      public final void emitCMPLTSD_Reg_Reg(XMM dstReg, XMM srcReg) {
40058        int miStart = mi;
40059        setMachineCodes(mi++, (byte) 0xF2);
40060        generateREXprefix(false, dstReg, null, srcReg);
40061        setMachineCodes(mi++, (byte) 0x0F);
40062        setMachineCodes(mi++, (byte) 0xC2);
40063        emitRegRegOperands(srcReg, dstReg);
40064        setMachineCodes(mi++, (byte) 1);
40065        if (lister != null) lister.RR(miStart, "CMPLTSD", dstReg, srcReg);
40066      }
40067    
40068      /**
40069       * Generate a register--register-displacement CMPLTSD. That is,
40070       * <PRE>
40071       * dstReg <<=  (quad)  [srcBase + srcDisp]
40072       * </PRE>
40073       *
40074       * @param dstReg destination register
40075       * @param srcBase the source base register
40076       * @param srcDisp the source displacement
40077       */
40078      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40079      public final void emitCMPLTSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
40080        int miStart = mi;
40081        setMachineCodes(mi++, (byte) 0xF2);
40082        generateREXprefix(false, dstReg, null, srcBase);
40083        setMachineCodes(mi++, (byte) 0x0F);
40084        setMachineCodes(mi++, (byte) 0xC2);
40085        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
40086        setMachineCodes(mi++, (byte) 1);
40087        if (lister != null) lister.RRD(miStart, "CMPLTSD", dstReg, srcBase, srcDisp);
40088      }
40089    
40090      /**
40091       * Generate a register--register-offset CMPLTSD. That is,
40092       * <PRE>
40093       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
40094       * </PRE>
40095       *
40096       * @param dstReg destination register
40097       * @param srcIndex the source index register
40098       * @param srcScale the source scale
40099       * @param srcDisp the source displacement
40100       */
40101      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40102      public final void emitCMPLTSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
40103        int miStart = mi;
40104        setMachineCodes(mi++, (byte) 0xF2);
40105        generateREXprefix(false, dstReg, srcIndex, null);
40106        setMachineCodes(mi++, (byte) 0x0F);
40107        setMachineCodes(mi++, (byte) 0xC2);
40108        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
40109        setMachineCodes(mi++, (byte) 1);
40110        if (lister != null) lister.RRFD(miStart, "CMPLTSD", dstReg, srcIndex, srcScale, srcDisp);
40111      }
40112    
40113      /**
40114       * Generate a register--absolute CMPLTSD. That is,
40115       * <PRE>
40116       *  dstReg <<=  (quad)  [srcDisp]
40117       * </PRE>
40118       *
40119       * @param dstReg destination register
40120       * @param srcDisp the source displacement
40121       */
40122      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
40123      public final void emitCMPLTSD_Reg_Abs(XMM dstReg, Address srcDisp) {
40124        int miStart = mi;
40125        setMachineCodes(mi++, (byte) 0xF2);
40126        generateREXprefix(false, dstReg, null, null);
40127        setMachineCodes(mi++, (byte) 0x0F);
40128        setMachineCodes(mi++, (byte) 0xC2);
40129        emitAbsRegOperands(srcDisp, dstReg);
40130        setMachineCodes(mi++, (byte) 1);
40131        if (lister != null) lister.RRA(miStart, "CMPLTSD", dstReg, srcDisp);
40132      }
40133    
40134      /**
40135       * Generate a register--register-index CMPLTSD. That is,
40136       * <PRE>
40137       * dstReg <<=  (quad)  srcReg
40138       * </PRE>
40139       *
40140       * @param dstReg destination register
40141       * @param srcBase the source base register
40142       * @param srcIndex the source index register
40143       * @param srcScale the source scale
40144       * @param srcDisp the source displacement
40145       */
40146      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
40147      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
40148      public final void emitCMPLTSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
40149        int miStart = mi;
40150        setMachineCodes(mi++, (byte) 0xF2);
40151        generateREXprefix(false, dstReg, srcIndex, srcBase);
40152        setMachineCodes(mi++, (byte) 0x0F);
40153        setMachineCodes(mi++, (byte) 0xC2);
40154        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
40155        setMachineCodes(mi++, (byte) 1);
40156        if (lister != null) lister.RRXD(miStart, "CMPLTSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
40157      }
40158    
40159      /**
40160       * Generate a register--register-indirect CMPLTSD. That is,
40161       * <PRE>
40162       * dstReg <<=  (quad)  [srcBase]
40163       * </PRE>
40164       *
40165       * @param dstReg destination register
40166       * @param srcBase the source base register
40167       */
40168      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40169      public final void emitCMPLTSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
40170        int miStart = mi;
40171        setMachineCodes(mi++, (byte) 0xF2);
40172        generateREXprefix(false, dstReg, null, srcBase);
40173        setMachineCodes(mi++, (byte) 0x0F);
40174        setMachineCodes(mi++, (byte) 0xC2);
40175        emitRegIndirectRegOperands(srcBase, dstReg);
40176        setMachineCodes(mi++, (byte) 1);
40177        if (lister != null) lister.RRN(miStart, "CMPLTSD", dstReg, srcBase);
40178      }
40179    
40180    
40181      /**
40182       * Generate a register--register CMPLESD. That is,
40183       * <PRE>
40184       * dstReg <<=  (quad)  srcReg
40185       * </PRE>
40186       *
40187       * @param dstReg destination register
40188       * @param srcReg source register
40189       */
40190      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40191      public final void emitCMPLESD_Reg_Reg(XMM dstReg, XMM srcReg) {
40192        int miStart = mi;
40193        setMachineCodes(mi++, (byte) 0xF2);
40194        generateREXprefix(false, dstReg, null, srcReg);
40195        setMachineCodes(mi++, (byte) 0x0F);
40196        setMachineCodes(mi++, (byte) 0xC2);
40197        emitRegRegOperands(srcReg, dstReg);
40198        setMachineCodes(mi++, (byte) 2);
40199        if (lister != null) lister.RR(miStart, "CMPLESD", dstReg, srcReg);
40200      }
40201    
40202      /**
40203       * Generate a register--register-displacement CMPLESD. That is,
40204       * <PRE>
40205       * dstReg <<=  (quad)  [srcBase + srcDisp]
40206       * </PRE>
40207       *
40208       * @param dstReg destination register
40209       * @param srcBase the source base register
40210       * @param srcDisp the source displacement
40211       */
40212      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40213      public final void emitCMPLESD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
40214        int miStart = mi;
40215        setMachineCodes(mi++, (byte) 0xF2);
40216        generateREXprefix(false, dstReg, null, srcBase);
40217        setMachineCodes(mi++, (byte) 0x0F);
40218        setMachineCodes(mi++, (byte) 0xC2);
40219        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
40220        setMachineCodes(mi++, (byte) 2);
40221        if (lister != null) lister.RRD(miStart, "CMPLESD", dstReg, srcBase, srcDisp);
40222      }
40223    
40224      /**
40225       * Generate a register--register-offset CMPLESD. That is,
40226       * <PRE>
40227       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
40228       * </PRE>
40229       *
40230       * @param dstReg destination register
40231       * @param srcIndex the source index register
40232       * @param srcScale the source scale
40233       * @param srcDisp the source displacement
40234       */
40235      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40236      public final void emitCMPLESD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
40237        int miStart = mi;
40238        setMachineCodes(mi++, (byte) 0xF2);
40239        generateREXprefix(false, dstReg, srcIndex, null);
40240        setMachineCodes(mi++, (byte) 0x0F);
40241        setMachineCodes(mi++, (byte) 0xC2);
40242        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
40243        setMachineCodes(mi++, (byte) 2);
40244        if (lister != null) lister.RRFD(miStart, "CMPLESD", dstReg, srcIndex, srcScale, srcDisp);
40245      }
40246    
40247      /**
40248       * Generate a register--absolute CMPLESD. That is,
40249       * <PRE>
40250       *  dstReg <<=  (quad)  [srcDisp]
40251       * </PRE>
40252       *
40253       * @param dstReg destination register
40254       * @param srcDisp the source displacement
40255       */
40256      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
40257      public final void emitCMPLESD_Reg_Abs(XMM dstReg, Address srcDisp) {
40258        int miStart = mi;
40259        setMachineCodes(mi++, (byte) 0xF2);
40260        generateREXprefix(false, dstReg, null, null);
40261        setMachineCodes(mi++, (byte) 0x0F);
40262        setMachineCodes(mi++, (byte) 0xC2);
40263        emitAbsRegOperands(srcDisp, dstReg);
40264        setMachineCodes(mi++, (byte) 2);
40265        if (lister != null) lister.RRA(miStart, "CMPLESD", dstReg, srcDisp);
40266      }
40267    
40268      /**
40269       * Generate a register--register-index CMPLESD. That is,
40270       * <PRE>
40271       * dstReg <<=  (quad)  srcReg
40272       * </PRE>
40273       *
40274       * @param dstReg destination register
40275       * @param srcBase the source base register
40276       * @param srcIndex the source index register
40277       * @param srcScale the source scale
40278       * @param srcDisp the source displacement
40279       */
40280      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
40281      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
40282      public final void emitCMPLESD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
40283        int miStart = mi;
40284        setMachineCodes(mi++, (byte) 0xF2);
40285        generateREXprefix(false, dstReg, srcIndex, srcBase);
40286        setMachineCodes(mi++, (byte) 0x0F);
40287        setMachineCodes(mi++, (byte) 0xC2);
40288        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
40289        setMachineCodes(mi++, (byte) 2);
40290        if (lister != null) lister.RRXD(miStart, "CMPLESD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
40291      }
40292    
40293      /**
40294       * Generate a register--register-indirect CMPLESD. That is,
40295       * <PRE>
40296       * dstReg <<=  (quad)  [srcBase]
40297       * </PRE>
40298       *
40299       * @param dstReg destination register
40300       * @param srcBase the source base register
40301       */
40302      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40303      public final void emitCMPLESD_Reg_RegInd(XMM dstReg, GPR srcBase) {
40304        int miStart = mi;
40305        setMachineCodes(mi++, (byte) 0xF2);
40306        generateREXprefix(false, dstReg, null, srcBase);
40307        setMachineCodes(mi++, (byte) 0x0F);
40308        setMachineCodes(mi++, (byte) 0xC2);
40309        emitRegIndirectRegOperands(srcBase, dstReg);
40310        setMachineCodes(mi++, (byte) 2);
40311        if (lister != null) lister.RRN(miStart, "CMPLESD", dstReg, srcBase);
40312      }
40313    
40314    
40315      /**
40316       * Generate a register--register CMPUNORDSD. That is,
40317       * <PRE>
40318       * dstReg <<=  (quad)  srcReg
40319       * </PRE>
40320       *
40321       * @param dstReg destination register
40322       * @param srcReg source register
40323       */
40324      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40325      public final void emitCMPUNORDSD_Reg_Reg(XMM dstReg, XMM srcReg) {
40326        int miStart = mi;
40327        setMachineCodes(mi++, (byte) 0xF2);
40328        generateREXprefix(false, dstReg, null, srcReg);
40329        setMachineCodes(mi++, (byte) 0x0F);
40330        setMachineCodes(mi++, (byte) 0xC2);
40331        emitRegRegOperands(srcReg, dstReg);
40332        setMachineCodes(mi++, (byte) 3);
40333        if (lister != null) lister.RR(miStart, "CMPUNORDSD", dstReg, srcReg);
40334      }
40335    
40336      /**
40337       * Generate a register--register-displacement CMPUNORDSD. That is,
40338       * <PRE>
40339       * dstReg <<=  (quad)  [srcBase + srcDisp]
40340       * </PRE>
40341       *
40342       * @param dstReg destination register
40343       * @param srcBase the source base register
40344       * @param srcDisp the source displacement
40345       */
40346      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40347      public final void emitCMPUNORDSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
40348        int miStart = mi;
40349        setMachineCodes(mi++, (byte) 0xF2);
40350        generateREXprefix(false, dstReg, null, srcBase);
40351        setMachineCodes(mi++, (byte) 0x0F);
40352        setMachineCodes(mi++, (byte) 0xC2);
40353        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
40354        setMachineCodes(mi++, (byte) 3);
40355        if (lister != null) lister.RRD(miStart, "CMPUNORDSD", dstReg, srcBase, srcDisp);
40356      }
40357    
40358      /**
40359       * Generate a register--register-offset CMPUNORDSD. That is,
40360       * <PRE>
40361       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
40362       * </PRE>
40363       *
40364       * @param dstReg destination register
40365       * @param srcIndex the source index register
40366       * @param srcScale the source scale
40367       * @param srcDisp the source displacement
40368       */
40369      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40370      public final void emitCMPUNORDSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
40371        int miStart = mi;
40372        setMachineCodes(mi++, (byte) 0xF2);
40373        generateREXprefix(false, dstReg, srcIndex, null);
40374        setMachineCodes(mi++, (byte) 0x0F);
40375        setMachineCodes(mi++, (byte) 0xC2);
40376        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
40377        setMachineCodes(mi++, (byte) 3);
40378        if (lister != null) lister.RRFD(miStart, "CMPUNORDSD", dstReg, srcIndex, srcScale, srcDisp);
40379      }
40380    
40381      /**
40382       * Generate a register--absolute CMPUNORDSD. That is,
40383       * <PRE>
40384       *  dstReg <<=  (quad)  [srcDisp]
40385       * </PRE>
40386       *
40387       * @param dstReg destination register
40388       * @param srcDisp the source displacement
40389       */
40390      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
40391      public final void emitCMPUNORDSD_Reg_Abs(XMM dstReg, Address srcDisp) {
40392        int miStart = mi;
40393        setMachineCodes(mi++, (byte) 0xF2);
40394        generateREXprefix(false, dstReg, null, null);
40395        setMachineCodes(mi++, (byte) 0x0F);
40396        setMachineCodes(mi++, (byte) 0xC2);
40397        emitAbsRegOperands(srcDisp, dstReg);
40398        setMachineCodes(mi++, (byte) 3);
40399        if (lister != null) lister.RRA(miStart, "CMPUNORDSD", dstReg, srcDisp);
40400      }
40401    
40402      /**
40403       * Generate a register--register-index CMPUNORDSD. That is,
40404       * <PRE>
40405       * dstReg <<=  (quad)  srcReg
40406       * </PRE>
40407       *
40408       * @param dstReg destination register
40409       * @param srcBase the source base register
40410       * @param srcIndex the source index register
40411       * @param srcScale the source scale
40412       * @param srcDisp the source displacement
40413       */
40414      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
40415      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
40416      public final void emitCMPUNORDSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
40417        int miStart = mi;
40418        setMachineCodes(mi++, (byte) 0xF2);
40419        generateREXprefix(false, dstReg, srcIndex, srcBase);
40420        setMachineCodes(mi++, (byte) 0x0F);
40421        setMachineCodes(mi++, (byte) 0xC2);
40422        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
40423        setMachineCodes(mi++, (byte) 3);
40424        if (lister != null) lister.RRXD(miStart, "CMPUNORDSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
40425      }
40426    
40427      /**
40428       * Generate a register--register-indirect CMPUNORDSD. That is,
40429       * <PRE>
40430       * dstReg <<=  (quad)  [srcBase]
40431       * </PRE>
40432       *
40433       * @param dstReg destination register
40434       * @param srcBase the source base register
40435       */
40436      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40437      public final void emitCMPUNORDSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
40438        int miStart = mi;
40439        setMachineCodes(mi++, (byte) 0xF2);
40440        generateREXprefix(false, dstReg, null, srcBase);
40441        setMachineCodes(mi++, (byte) 0x0F);
40442        setMachineCodes(mi++, (byte) 0xC2);
40443        emitRegIndirectRegOperands(srcBase, dstReg);
40444        setMachineCodes(mi++, (byte) 3);
40445        if (lister != null) lister.RRN(miStart, "CMPUNORDSD", dstReg, srcBase);
40446      }
40447    
40448    
40449      /**
40450       * Generate a register--register CMPNESD. That is,
40451       * <PRE>
40452       * dstReg <<=  (quad)  srcReg
40453       * </PRE>
40454       *
40455       * @param dstReg destination register
40456       * @param srcReg source register
40457       */
40458      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40459      public final void emitCMPNESD_Reg_Reg(XMM dstReg, XMM srcReg) {
40460        int miStart = mi;
40461        setMachineCodes(mi++, (byte) 0xF2);
40462        generateREXprefix(false, dstReg, null, srcReg);
40463        setMachineCodes(mi++, (byte) 0x0F);
40464        setMachineCodes(mi++, (byte) 0xC2);
40465        emitRegRegOperands(srcReg, dstReg);
40466        setMachineCodes(mi++, (byte) 4);
40467        if (lister != null) lister.RR(miStart, "CMPNESD", dstReg, srcReg);
40468      }
40469    
40470      /**
40471       * Generate a register--register-displacement CMPNESD. That is,
40472       * <PRE>
40473       * dstReg <<=  (quad)  [srcBase + srcDisp]
40474       * </PRE>
40475       *
40476       * @param dstReg destination register
40477       * @param srcBase the source base register
40478       * @param srcDisp the source displacement
40479       */
40480      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40481      public final void emitCMPNESD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
40482        int miStart = mi;
40483        setMachineCodes(mi++, (byte) 0xF2);
40484        generateREXprefix(false, dstReg, null, srcBase);
40485        setMachineCodes(mi++, (byte) 0x0F);
40486        setMachineCodes(mi++, (byte) 0xC2);
40487        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
40488        setMachineCodes(mi++, (byte) 4);
40489        if (lister != null) lister.RRD(miStart, "CMPNESD", dstReg, srcBase, srcDisp);
40490      }
40491    
40492      /**
40493       * Generate a register--register-offset CMPNESD. That is,
40494       * <PRE>
40495       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
40496       * </PRE>
40497       *
40498       * @param dstReg destination register
40499       * @param srcIndex the source index register
40500       * @param srcScale the source scale
40501       * @param srcDisp the source displacement
40502       */
40503      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40504      public final void emitCMPNESD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
40505        int miStart = mi;
40506        setMachineCodes(mi++, (byte) 0xF2);
40507        generateREXprefix(false, dstReg, srcIndex, null);
40508        setMachineCodes(mi++, (byte) 0x0F);
40509        setMachineCodes(mi++, (byte) 0xC2);
40510        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
40511        setMachineCodes(mi++, (byte) 4);
40512        if (lister != null) lister.RRFD(miStart, "CMPNESD", dstReg, srcIndex, srcScale, srcDisp);
40513      }
40514    
40515      /**
40516       * Generate a register--absolute CMPNESD. That is,
40517       * <PRE>
40518       *  dstReg <<=  (quad)  [srcDisp]
40519       * </PRE>
40520       *
40521       * @param dstReg destination register
40522       * @param srcDisp the source displacement
40523       */
40524      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
40525      public final void emitCMPNESD_Reg_Abs(XMM dstReg, Address srcDisp) {
40526        int miStart = mi;
40527        setMachineCodes(mi++, (byte) 0xF2);
40528        generateREXprefix(false, dstReg, null, null);
40529        setMachineCodes(mi++, (byte) 0x0F);
40530        setMachineCodes(mi++, (byte) 0xC2);
40531        emitAbsRegOperands(srcDisp, dstReg);
40532        setMachineCodes(mi++, (byte) 4);
40533        if (lister != null) lister.RRA(miStart, "CMPNESD", dstReg, srcDisp);
40534      }
40535    
40536      /**
40537       * Generate a register--register-index CMPNESD. That is,
40538       * <PRE>
40539       * dstReg <<=  (quad)  srcReg
40540       * </PRE>
40541       *
40542       * @param dstReg destination register
40543       * @param srcBase the source base register
40544       * @param srcIndex the source index register
40545       * @param srcScale the source scale
40546       * @param srcDisp the source displacement
40547       */
40548      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
40549      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
40550      public final void emitCMPNESD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
40551        int miStart = mi;
40552        setMachineCodes(mi++, (byte) 0xF2);
40553        generateREXprefix(false, dstReg, srcIndex, srcBase);
40554        setMachineCodes(mi++, (byte) 0x0F);
40555        setMachineCodes(mi++, (byte) 0xC2);
40556        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
40557        setMachineCodes(mi++, (byte) 4);
40558        if (lister != null) lister.RRXD(miStart, "CMPNESD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
40559      }
40560    
40561      /**
40562       * Generate a register--register-indirect CMPNESD. That is,
40563       * <PRE>
40564       * dstReg <<=  (quad)  [srcBase]
40565       * </PRE>
40566       *
40567       * @param dstReg destination register
40568       * @param srcBase the source base register
40569       */
40570      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40571      public final void emitCMPNESD_Reg_RegInd(XMM dstReg, GPR srcBase) {
40572        int miStart = mi;
40573        setMachineCodes(mi++, (byte) 0xF2);
40574        generateREXprefix(false, dstReg, null, srcBase);
40575        setMachineCodes(mi++, (byte) 0x0F);
40576        setMachineCodes(mi++, (byte) 0xC2);
40577        emitRegIndirectRegOperands(srcBase, dstReg);
40578        setMachineCodes(mi++, (byte) 4);
40579        if (lister != null) lister.RRN(miStart, "CMPNESD", dstReg, srcBase);
40580      }
40581    
40582    
40583      /**
40584       * Generate a register--register CMPNLTSD. That is,
40585       * <PRE>
40586       * dstReg <<=  (quad)  srcReg
40587       * </PRE>
40588       *
40589       * @param dstReg destination register
40590       * @param srcReg source register
40591       */
40592      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40593      public final void emitCMPNLTSD_Reg_Reg(XMM dstReg, XMM srcReg) {
40594        int miStart = mi;
40595        setMachineCodes(mi++, (byte) 0xF2);
40596        generateREXprefix(false, dstReg, null, srcReg);
40597        setMachineCodes(mi++, (byte) 0x0F);
40598        setMachineCodes(mi++, (byte) 0xC2);
40599        emitRegRegOperands(srcReg, dstReg);
40600        setMachineCodes(mi++, (byte) 5);
40601        if (lister != null) lister.RR(miStart, "CMPNLTSD", dstReg, srcReg);
40602      }
40603    
40604      /**
40605       * Generate a register--register-displacement CMPNLTSD. That is,
40606       * <PRE>
40607       * dstReg <<=  (quad)  [srcBase + srcDisp]
40608       * </PRE>
40609       *
40610       * @param dstReg destination register
40611       * @param srcBase the source base register
40612       * @param srcDisp the source displacement
40613       */
40614      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40615      public final void emitCMPNLTSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
40616        int miStart = mi;
40617        setMachineCodes(mi++, (byte) 0xF2);
40618        generateREXprefix(false, dstReg, null, srcBase);
40619        setMachineCodes(mi++, (byte) 0x0F);
40620        setMachineCodes(mi++, (byte) 0xC2);
40621        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
40622        setMachineCodes(mi++, (byte) 5);
40623        if (lister != null) lister.RRD(miStart, "CMPNLTSD", dstReg, srcBase, srcDisp);
40624      }
40625    
40626      /**
40627       * Generate a register--register-offset CMPNLTSD. That is,
40628       * <PRE>
40629       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
40630       * </PRE>
40631       *
40632       * @param dstReg destination register
40633       * @param srcIndex the source index register
40634       * @param srcScale the source scale
40635       * @param srcDisp the source displacement
40636       */
40637      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40638      public final void emitCMPNLTSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
40639        int miStart = mi;
40640        setMachineCodes(mi++, (byte) 0xF2);
40641        generateREXprefix(false, dstReg, srcIndex, null);
40642        setMachineCodes(mi++, (byte) 0x0F);
40643        setMachineCodes(mi++, (byte) 0xC2);
40644        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
40645        setMachineCodes(mi++, (byte) 5);
40646        if (lister != null) lister.RRFD(miStart, "CMPNLTSD", dstReg, srcIndex, srcScale, srcDisp);
40647      }
40648    
40649      /**
40650       * Generate a register--absolute CMPNLTSD. That is,
40651       * <PRE>
40652       *  dstReg <<=  (quad)  [srcDisp]
40653       * </PRE>
40654       *
40655       * @param dstReg destination register
40656       * @param srcDisp the source displacement
40657       */
40658      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
40659      public final void emitCMPNLTSD_Reg_Abs(XMM dstReg, Address srcDisp) {
40660        int miStart = mi;
40661        setMachineCodes(mi++, (byte) 0xF2);
40662        generateREXprefix(false, dstReg, null, null);
40663        setMachineCodes(mi++, (byte) 0x0F);
40664        setMachineCodes(mi++, (byte) 0xC2);
40665        emitAbsRegOperands(srcDisp, dstReg);
40666        setMachineCodes(mi++, (byte) 5);
40667        if (lister != null) lister.RRA(miStart, "CMPNLTSD", dstReg, srcDisp);
40668      }
40669    
40670      /**
40671       * Generate a register--register-index CMPNLTSD. That is,
40672       * <PRE>
40673       * dstReg <<=  (quad)  srcReg
40674       * </PRE>
40675       *
40676       * @param dstReg destination register
40677       * @param srcBase the source base register
40678       * @param srcIndex the source index register
40679       * @param srcScale the source scale
40680       * @param srcDisp the source displacement
40681       */
40682      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
40683      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
40684      public final void emitCMPNLTSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
40685        int miStart = mi;
40686        setMachineCodes(mi++, (byte) 0xF2);
40687        generateREXprefix(false, dstReg, srcIndex, srcBase);
40688        setMachineCodes(mi++, (byte) 0x0F);
40689        setMachineCodes(mi++, (byte) 0xC2);
40690        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
40691        setMachineCodes(mi++, (byte) 5);
40692        if (lister != null) lister.RRXD(miStart, "CMPNLTSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
40693      }
40694    
40695      /**
40696       * Generate a register--register-indirect CMPNLTSD. That is,
40697       * <PRE>
40698       * dstReg <<=  (quad)  [srcBase]
40699       * </PRE>
40700       *
40701       * @param dstReg destination register
40702       * @param srcBase the source base register
40703       */
40704      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40705      public final void emitCMPNLTSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
40706        int miStart = mi;
40707        setMachineCodes(mi++, (byte) 0xF2);
40708        generateREXprefix(false, dstReg, null, srcBase);
40709        setMachineCodes(mi++, (byte) 0x0F);
40710        setMachineCodes(mi++, (byte) 0xC2);
40711        emitRegIndirectRegOperands(srcBase, dstReg);
40712        setMachineCodes(mi++, (byte) 5);
40713        if (lister != null) lister.RRN(miStart, "CMPNLTSD", dstReg, srcBase);
40714      }
40715    
40716    
40717      /**
40718       * Generate a register--register CMPNLESD. That is,
40719       * <PRE>
40720       * dstReg <<=  (quad)  srcReg
40721       * </PRE>
40722       *
40723       * @param dstReg destination register
40724       * @param srcReg source register
40725       */
40726      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40727      public final void emitCMPNLESD_Reg_Reg(XMM dstReg, XMM srcReg) {
40728        int miStart = mi;
40729        setMachineCodes(mi++, (byte) 0xF2);
40730        generateREXprefix(false, dstReg, null, srcReg);
40731        setMachineCodes(mi++, (byte) 0x0F);
40732        setMachineCodes(mi++, (byte) 0xC2);
40733        emitRegRegOperands(srcReg, dstReg);
40734        setMachineCodes(mi++, (byte) 6);
40735        if (lister != null) lister.RR(miStart, "CMPNLESD", dstReg, srcReg);
40736      }
40737    
40738      /**
40739       * Generate a register--register-displacement CMPNLESD. That is,
40740       * <PRE>
40741       * dstReg <<=  (quad)  [srcBase + srcDisp]
40742       * </PRE>
40743       *
40744       * @param dstReg destination register
40745       * @param srcBase the source base register
40746       * @param srcDisp the source displacement
40747       */
40748      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40749      public final void emitCMPNLESD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
40750        int miStart = mi;
40751        setMachineCodes(mi++, (byte) 0xF2);
40752        generateREXprefix(false, dstReg, null, srcBase);
40753        setMachineCodes(mi++, (byte) 0x0F);
40754        setMachineCodes(mi++, (byte) 0xC2);
40755        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
40756        setMachineCodes(mi++, (byte) 6);
40757        if (lister != null) lister.RRD(miStart, "CMPNLESD", dstReg, srcBase, srcDisp);
40758      }
40759    
40760      /**
40761       * Generate a register--register-offset CMPNLESD. That is,
40762       * <PRE>
40763       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
40764       * </PRE>
40765       *
40766       * @param dstReg destination register
40767       * @param srcIndex the source index register
40768       * @param srcScale the source scale
40769       * @param srcDisp the source displacement
40770       */
40771      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40772      public final void emitCMPNLESD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
40773        int miStart = mi;
40774        setMachineCodes(mi++, (byte) 0xF2);
40775        generateREXprefix(false, dstReg, srcIndex, null);
40776        setMachineCodes(mi++, (byte) 0x0F);
40777        setMachineCodes(mi++, (byte) 0xC2);
40778        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
40779        setMachineCodes(mi++, (byte) 6);
40780        if (lister != null) lister.RRFD(miStart, "CMPNLESD", dstReg, srcIndex, srcScale, srcDisp);
40781      }
40782    
40783      /**
40784       * Generate a register--absolute CMPNLESD. That is,
40785       * <PRE>
40786       *  dstReg <<=  (quad)  [srcDisp]
40787       * </PRE>
40788       *
40789       * @param dstReg destination register
40790       * @param srcDisp the source displacement
40791       */
40792      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
40793      public final void emitCMPNLESD_Reg_Abs(XMM dstReg, Address srcDisp) {
40794        int miStart = mi;
40795        setMachineCodes(mi++, (byte) 0xF2);
40796        generateREXprefix(false, dstReg, null, null);
40797        setMachineCodes(mi++, (byte) 0x0F);
40798        setMachineCodes(mi++, (byte) 0xC2);
40799        emitAbsRegOperands(srcDisp, dstReg);
40800        setMachineCodes(mi++, (byte) 6);
40801        if (lister != null) lister.RRA(miStart, "CMPNLESD", dstReg, srcDisp);
40802      }
40803    
40804      /**
40805       * Generate a register--register-index CMPNLESD. That is,
40806       * <PRE>
40807       * dstReg <<=  (quad)  srcReg
40808       * </PRE>
40809       *
40810       * @param dstReg destination register
40811       * @param srcBase the source base register
40812       * @param srcIndex the source index register
40813       * @param srcScale the source scale
40814       * @param srcDisp the source displacement
40815       */
40816      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
40817      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
40818      public final void emitCMPNLESD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
40819        int miStart = mi;
40820        setMachineCodes(mi++, (byte) 0xF2);
40821        generateREXprefix(false, dstReg, srcIndex, srcBase);
40822        setMachineCodes(mi++, (byte) 0x0F);
40823        setMachineCodes(mi++, (byte) 0xC2);
40824        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
40825        setMachineCodes(mi++, (byte) 6);
40826        if (lister != null) lister.RRXD(miStart, "CMPNLESD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
40827      }
40828    
40829      /**
40830       * Generate a register--register-indirect CMPNLESD. That is,
40831       * <PRE>
40832       * dstReg <<=  (quad)  [srcBase]
40833       * </PRE>
40834       *
40835       * @param dstReg destination register
40836       * @param srcBase the source base register
40837       */
40838      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40839      public final void emitCMPNLESD_Reg_RegInd(XMM dstReg, GPR srcBase) {
40840        int miStart = mi;
40841        setMachineCodes(mi++, (byte) 0xF2);
40842        generateREXprefix(false, dstReg, null, srcBase);
40843        setMachineCodes(mi++, (byte) 0x0F);
40844        setMachineCodes(mi++, (byte) 0xC2);
40845        emitRegIndirectRegOperands(srcBase, dstReg);
40846        setMachineCodes(mi++, (byte) 6);
40847        if (lister != null) lister.RRN(miStart, "CMPNLESD", dstReg, srcBase);
40848      }
40849    
40850    
40851      /**
40852       * Generate a register--register CMPORDSD. That is,
40853       * <PRE>
40854       * dstReg <<=  (quad)  srcReg
40855       * </PRE>
40856       *
40857       * @param dstReg destination register
40858       * @param srcReg source register
40859       */
40860      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40861      public final void emitCMPORDSD_Reg_Reg(XMM dstReg, XMM srcReg) {
40862        int miStart = mi;
40863        setMachineCodes(mi++, (byte) 0xF2);
40864        generateREXprefix(false, dstReg, null, srcReg);
40865        setMachineCodes(mi++, (byte) 0x0F);
40866        setMachineCodes(mi++, (byte) 0xC2);
40867        emitRegRegOperands(srcReg, dstReg);
40868        setMachineCodes(mi++, (byte) 7);
40869        if (lister != null) lister.RR(miStart, "CMPORDSD", dstReg, srcReg);
40870      }
40871    
40872      /**
40873       * Generate a register--register-displacement CMPORDSD. That is,
40874       * <PRE>
40875       * dstReg <<=  (quad)  [srcBase + srcDisp]
40876       * </PRE>
40877       *
40878       * @param dstReg destination register
40879       * @param srcBase the source base register
40880       * @param srcDisp the source displacement
40881       */
40882      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40883      public final void emitCMPORDSD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
40884        int miStart = mi;
40885        setMachineCodes(mi++, (byte) 0xF2);
40886        generateREXprefix(false, dstReg, null, srcBase);
40887        setMachineCodes(mi++, (byte) 0x0F);
40888        setMachineCodes(mi++, (byte) 0xC2);
40889        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
40890        setMachineCodes(mi++, (byte) 7);
40891        if (lister != null) lister.RRD(miStart, "CMPORDSD", dstReg, srcBase, srcDisp);
40892      }
40893    
40894      /**
40895       * Generate a register--register-offset CMPORDSD. That is,
40896       * <PRE>
40897       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
40898       * </PRE>
40899       *
40900       * @param dstReg destination register
40901       * @param srcIndex the source index register
40902       * @param srcScale the source scale
40903       * @param srcDisp the source displacement
40904       */
40905      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40906      public final void emitCMPORDSD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
40907        int miStart = mi;
40908        setMachineCodes(mi++, (byte) 0xF2);
40909        generateREXprefix(false, dstReg, srcIndex, null);
40910        setMachineCodes(mi++, (byte) 0x0F);
40911        setMachineCodes(mi++, (byte) 0xC2);
40912        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
40913        setMachineCodes(mi++, (byte) 7);
40914        if (lister != null) lister.RRFD(miStart, "CMPORDSD", dstReg, srcIndex, srcScale, srcDisp);
40915      }
40916    
40917      /**
40918       * Generate a register--absolute CMPORDSD. That is,
40919       * <PRE>
40920       *  dstReg <<=  (quad)  [srcDisp]
40921       * </PRE>
40922       *
40923       * @param dstReg destination register
40924       * @param srcDisp the source displacement
40925       */
40926      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
40927      public final void emitCMPORDSD_Reg_Abs(XMM dstReg, Address srcDisp) {
40928        int miStart = mi;
40929        setMachineCodes(mi++, (byte) 0xF2);
40930        generateREXprefix(false, dstReg, null, null);
40931        setMachineCodes(mi++, (byte) 0x0F);
40932        setMachineCodes(mi++, (byte) 0xC2);
40933        emitAbsRegOperands(srcDisp, dstReg);
40934        setMachineCodes(mi++, (byte) 7);
40935        if (lister != null) lister.RRA(miStart, "CMPORDSD", dstReg, srcDisp);
40936      }
40937    
40938      /**
40939       * Generate a register--register-index CMPORDSD. That is,
40940       * <PRE>
40941       * dstReg <<=  (quad)  srcReg
40942       * </PRE>
40943       *
40944       * @param dstReg destination register
40945       * @param srcBase the source base register
40946       * @param srcIndex the source index register
40947       * @param srcScale the source scale
40948       * @param srcDisp the source displacement
40949       */
40950      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
40951      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
40952      public final void emitCMPORDSD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
40953        int miStart = mi;
40954        setMachineCodes(mi++, (byte) 0xF2);
40955        generateREXprefix(false, dstReg, srcIndex, srcBase);
40956        setMachineCodes(mi++, (byte) 0x0F);
40957        setMachineCodes(mi++, (byte) 0xC2);
40958        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
40959        setMachineCodes(mi++, (byte) 7);
40960        if (lister != null) lister.RRXD(miStart, "CMPORDSD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
40961      }
40962    
40963      /**
40964       * Generate a register--register-indirect CMPORDSD. That is,
40965       * <PRE>
40966       * dstReg <<=  (quad)  [srcBase]
40967       * </PRE>
40968       *
40969       * @param dstReg destination register
40970       * @param srcBase the source base register
40971       */
40972      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40973      public final void emitCMPORDSD_Reg_RegInd(XMM dstReg, GPR srcBase) {
40974        int miStart = mi;
40975        setMachineCodes(mi++, (byte) 0xF2);
40976        generateREXprefix(false, dstReg, null, srcBase);
40977        setMachineCodes(mi++, (byte) 0x0F);
40978        setMachineCodes(mi++, (byte) 0xC2);
40979        emitRegIndirectRegOperands(srcBase, dstReg);
40980        setMachineCodes(mi++, (byte) 7);
40981        if (lister != null) lister.RRN(miStart, "CMPORDSD", dstReg, srcBase);
40982      }
40983    
40984    
40985      /**
40986       * Generate a register--register PSLLQ. That is,
40987       * <PRE>
40988       * dstReg <<=  (quad)  srcReg
40989       * </PRE>
40990       *
40991       * @param dstReg destination register
40992       * @param srcReg source register
40993       */
40994      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
40995      public final void emitPSLLQ_Reg_Reg(MM dstReg, MM srcReg) {
40996        int miStart = mi;
40997        generateREXprefix(false, dstReg, null, srcReg);
40998        setMachineCodes(mi++, (byte) 0x0F);
40999        setMachineCodes(mi++, (byte) 0xF3);
41000        emitRegRegOperands(srcReg, dstReg);
41001        if (lister != null) lister.RR(miStart, "PSLLQ", dstReg, srcReg);
41002      }
41003    
41004      /**
41005       * Generate a register--register-displacement PSLLQ. That is,
41006       * <PRE>
41007       * dstReg <<=  (quad)  [srcBase + srcDisp]
41008       * </PRE>
41009       *
41010       * @param dstReg destination register
41011       * @param srcBase the source base register
41012       * @param srcDisp the source displacement
41013       */
41014      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41015      public final void emitPSLLQ_Reg_RegDisp(MM dstReg, GPR srcBase, Offset srcDisp) {
41016        int miStart = mi;
41017        generateREXprefix(false, dstReg, null, srcBase);
41018        setMachineCodes(mi++, (byte) 0x0F);
41019        setMachineCodes(mi++, (byte) 0xF3);
41020        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
41021        if (lister != null) lister.RRD(miStart, "PSLLQ", dstReg, srcBase, srcDisp);
41022      }
41023    
41024      /**
41025       * Generate a register--register-offset PSLLQ. That is,
41026       * <PRE>
41027       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
41028       * </PRE>
41029       *
41030       * @param dstReg destination register
41031       * @param srcIndex the source index register
41032       * @param srcScale the source scale
41033       * @param srcDisp the source displacement
41034       */
41035      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41036      public final void emitPSLLQ_Reg_RegOff(MM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
41037        int miStart = mi;
41038        generateREXprefix(false, dstReg, srcIndex, null);
41039        setMachineCodes(mi++, (byte) 0x0F);
41040        setMachineCodes(mi++, (byte) 0xF3);
41041        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
41042        if (lister != null) lister.RRFD(miStart, "PSLLQ", dstReg, srcIndex, srcScale, srcDisp);
41043      }
41044    
41045      /**
41046       * Generate a register--absolute PSLLQ. That is,
41047       * <PRE>
41048       *  dstReg <<=  (quad)  [srcDisp]
41049       * </PRE>
41050       *
41051       * @param dstReg destination register
41052       * @param srcDisp the source displacement
41053       */
41054      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
41055      public final void emitPSLLQ_Reg_Abs(MM dstReg, Address srcDisp) {
41056        int miStart = mi;
41057        generateREXprefix(false, dstReg, null, null);
41058        setMachineCodes(mi++, (byte) 0x0F);
41059        setMachineCodes(mi++, (byte) 0xF3);
41060        emitAbsRegOperands(srcDisp, dstReg);
41061        if (lister != null) lister.RRA(miStart, "PSLLQ", dstReg, srcDisp);
41062      }
41063    
41064      /**
41065       * Generate a register--register-index PSLLQ. That is,
41066       * <PRE>
41067       * dstReg <<=  (quad)  srcReg
41068       * </PRE>
41069       *
41070       * @param dstReg destination register
41071       * @param srcBase the source base register
41072       * @param srcIndex the source index register
41073       * @param srcScale the source scale
41074       * @param srcDisp the source displacement
41075       */
41076      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
41077      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
41078      public final void emitPSLLQ_Reg_RegIdx(MM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
41079        int miStart = mi;
41080        generateREXprefix(false, dstReg, srcIndex, srcBase);
41081        setMachineCodes(mi++, (byte) 0x0F);
41082        setMachineCodes(mi++, (byte) 0xF3);
41083        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
41084        if (lister != null) lister.RRXD(miStart, "PSLLQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
41085      }
41086    
41087      /**
41088       * Generate a register--register-indirect PSLLQ. That is,
41089       * <PRE>
41090       * dstReg <<=  (quad)  [srcBase]
41091       * </PRE>
41092       *
41093       * @param dstReg destination register
41094       * @param srcBase the source base register
41095       */
41096      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41097      public final void emitPSLLQ_Reg_RegInd(MM dstReg, GPR srcBase) {
41098        int miStart = mi;
41099        generateREXprefix(false, dstReg, null, srcBase);
41100        setMachineCodes(mi++, (byte) 0x0F);
41101        setMachineCodes(mi++, (byte) 0xF3);
41102        emitRegIndirectRegOperands(srcBase, dstReg);
41103        if (lister != null) lister.RRN(miStart, "PSLLQ", dstReg, srcBase);
41104      }
41105    
41106    
41107      /**
41108       * Generate a register--register PSRLQ. That is,
41109       * <PRE>
41110       * dstReg <<=  (quad)  srcReg
41111       * </PRE>
41112       *
41113       * @param dstReg destination register
41114       * @param srcReg source register
41115       */
41116      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41117      public final void emitPSRLQ_Reg_Reg(MM dstReg, MM srcReg) {
41118        int miStart = mi;
41119        generateREXprefix(false, dstReg, null, srcReg);
41120        setMachineCodes(mi++, (byte) 0x0F);
41121        setMachineCodes(mi++, (byte) 0xD3);
41122        emitRegRegOperands(srcReg, dstReg);
41123        if (lister != null) lister.RR(miStart, "PSRLQ", dstReg, srcReg);
41124      }
41125    
41126      /**
41127       * Generate a register--register-displacement PSRLQ. That is,
41128       * <PRE>
41129       * dstReg <<=  (quad)  [srcBase + srcDisp]
41130       * </PRE>
41131       *
41132       * @param dstReg destination register
41133       * @param srcBase the source base register
41134       * @param srcDisp the source displacement
41135       */
41136      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41137      public final void emitPSRLQ_Reg_RegDisp(MM dstReg, GPR srcBase, Offset srcDisp) {
41138        int miStart = mi;
41139        generateREXprefix(false, dstReg, null, srcBase);
41140        setMachineCodes(mi++, (byte) 0x0F);
41141        setMachineCodes(mi++, (byte) 0xD3);
41142        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
41143        if (lister != null) lister.RRD(miStart, "PSRLQ", dstReg, srcBase, srcDisp);
41144      }
41145    
41146      /**
41147       * Generate a register--register-offset PSRLQ. That is,
41148       * <PRE>
41149       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
41150       * </PRE>
41151       *
41152       * @param dstReg destination register
41153       * @param srcIndex the source index register
41154       * @param srcScale the source scale
41155       * @param srcDisp the source displacement
41156       */
41157      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41158      public final void emitPSRLQ_Reg_RegOff(MM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
41159        int miStart = mi;
41160        generateREXprefix(false, dstReg, srcIndex, null);
41161        setMachineCodes(mi++, (byte) 0x0F);
41162        setMachineCodes(mi++, (byte) 0xD3);
41163        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
41164        if (lister != null) lister.RRFD(miStart, "PSRLQ", dstReg, srcIndex, srcScale, srcDisp);
41165      }
41166    
41167      /**
41168       * Generate a register--absolute PSRLQ. That is,
41169       * <PRE>
41170       *  dstReg <<=  (quad)  [srcDisp]
41171       * </PRE>
41172       *
41173       * @param dstReg destination register
41174       * @param srcDisp the source displacement
41175       */
41176      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
41177      public final void emitPSRLQ_Reg_Abs(MM dstReg, Address srcDisp) {
41178        int miStart = mi;
41179        generateREXprefix(false, dstReg, null, null);
41180        setMachineCodes(mi++, (byte) 0x0F);
41181        setMachineCodes(mi++, (byte) 0xD3);
41182        emitAbsRegOperands(srcDisp, dstReg);
41183        if (lister != null) lister.RRA(miStart, "PSRLQ", dstReg, srcDisp);
41184      }
41185    
41186      /**
41187       * Generate a register--register-index PSRLQ. That is,
41188       * <PRE>
41189       * dstReg <<=  (quad)  srcReg
41190       * </PRE>
41191       *
41192       * @param dstReg destination register
41193       * @param srcBase the source base register
41194       * @param srcIndex the source index register
41195       * @param srcScale the source scale
41196       * @param srcDisp the source displacement
41197       */
41198      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
41199      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
41200      public final void emitPSRLQ_Reg_RegIdx(MM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
41201        int miStart = mi;
41202        generateREXprefix(false, dstReg, srcIndex, srcBase);
41203        setMachineCodes(mi++, (byte) 0x0F);
41204        setMachineCodes(mi++, (byte) 0xD3);
41205        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
41206        if (lister != null) lister.RRXD(miStart, "PSRLQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
41207      }
41208    
41209      /**
41210       * Generate a register--register-indirect PSRLQ. That is,
41211       * <PRE>
41212       * dstReg <<=  (quad)  [srcBase]
41213       * </PRE>
41214       *
41215       * @param dstReg destination register
41216       * @param srcBase the source base register
41217       */
41218      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41219      public final void emitPSRLQ_Reg_RegInd(MM dstReg, GPR srcBase) {
41220        int miStart = mi;
41221        generateREXprefix(false, dstReg, null, srcBase);
41222        setMachineCodes(mi++, (byte) 0x0F);
41223        setMachineCodes(mi++, (byte) 0xD3);
41224        emitRegIndirectRegOperands(srcBase, dstReg);
41225        if (lister != null) lister.RRN(miStart, "PSRLQ", dstReg, srcBase);
41226      }
41227    
41228    
41229      /**
41230       * Generate a register--register PSLLQ. That is,
41231       * <PRE>
41232       * dstReg <<=  (quad)  srcReg
41233       * </PRE>
41234       *
41235       * @param dstReg destination register
41236       * @param srcReg source register
41237       */
41238      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41239      public final void emitPSLLQ_Reg_Reg(XMM dstReg, XMM srcReg) {
41240        int miStart = mi;
41241        setMachineCodes(mi++, (byte) 0x66);
41242        generateREXprefix(false, dstReg, null, srcReg);
41243        setMachineCodes(mi++, (byte) 0x0F);
41244        setMachineCodes(mi++, (byte) 0xF3);
41245        emitRegRegOperands(srcReg, dstReg);
41246        if (lister != null) lister.RR(miStart, "PSLLQ", dstReg, srcReg);
41247      }
41248    
41249      /**
41250       * Generate a register--register-displacement PSLLQ. That is,
41251       * <PRE>
41252       * dstReg <<=  (quad)  [srcBase + srcDisp]
41253       * </PRE>
41254       *
41255       * @param dstReg destination register
41256       * @param srcBase the source base register
41257       * @param srcDisp the source displacement
41258       */
41259      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41260      public final void emitPSLLQ_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
41261        int miStart = mi;
41262        setMachineCodes(mi++, (byte) 0x66);
41263        generateREXprefix(false, dstReg, null, srcBase);
41264        setMachineCodes(mi++, (byte) 0x0F);
41265        setMachineCodes(mi++, (byte) 0xF3);
41266        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
41267        if (lister != null) lister.RRD(miStart, "PSLLQ", dstReg, srcBase, srcDisp);
41268      }
41269    
41270      /**
41271       * Generate a register--register-offset PSLLQ. That is,
41272       * <PRE>
41273       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
41274       * </PRE>
41275       *
41276       * @param dstReg destination register
41277       * @param srcIndex the source index register
41278       * @param srcScale the source scale
41279       * @param srcDisp the source displacement
41280       */
41281      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41282      public final void emitPSLLQ_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
41283        int miStart = mi;
41284        setMachineCodes(mi++, (byte) 0x66);
41285        generateREXprefix(false, dstReg, srcIndex, null);
41286        setMachineCodes(mi++, (byte) 0x0F);
41287        setMachineCodes(mi++, (byte) 0xF3);
41288        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
41289        if (lister != null) lister.RRFD(miStart, "PSLLQ", dstReg, srcIndex, srcScale, srcDisp);
41290      }
41291    
41292      /**
41293       * Generate a register--absolute PSLLQ. That is,
41294       * <PRE>
41295       *  dstReg <<=  (quad)  [srcDisp]
41296       * </PRE>
41297       *
41298       * @param dstReg destination register
41299       * @param srcDisp the source displacement
41300       */
41301      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
41302      public final void emitPSLLQ_Reg_Abs(XMM dstReg, Address srcDisp) {
41303        int miStart = mi;
41304        setMachineCodes(mi++, (byte) 0x66);
41305        generateREXprefix(false, dstReg, null, null);
41306        setMachineCodes(mi++, (byte) 0x0F);
41307        setMachineCodes(mi++, (byte) 0xF3);
41308        emitAbsRegOperands(srcDisp, dstReg);
41309        if (lister != null) lister.RRA(miStart, "PSLLQ", dstReg, srcDisp);
41310      }
41311    
41312      /**
41313       * Generate a register--register-index PSLLQ. That is,
41314       * <PRE>
41315       * dstReg <<=  (quad)  srcReg
41316       * </PRE>
41317       *
41318       * @param dstReg destination register
41319       * @param srcBase the source base register
41320       * @param srcIndex the source index register
41321       * @param srcScale the source scale
41322       * @param srcDisp the source displacement
41323       */
41324      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
41325      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
41326      public final void emitPSLLQ_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
41327        int miStart = mi;
41328        setMachineCodes(mi++, (byte) 0x66);
41329        generateREXprefix(false, dstReg, srcIndex, srcBase);
41330        setMachineCodes(mi++, (byte) 0x0F);
41331        setMachineCodes(mi++, (byte) 0xF3);
41332        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
41333        if (lister != null) lister.RRXD(miStart, "PSLLQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
41334      }
41335    
41336      /**
41337       * Generate a register--register-indirect PSLLQ. That is,
41338       * <PRE>
41339       * dstReg <<=  (quad)  [srcBase]
41340       * </PRE>
41341       *
41342       * @param dstReg destination register
41343       * @param srcBase the source base register
41344       */
41345      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41346      public final void emitPSLLQ_Reg_RegInd(XMM dstReg, GPR srcBase) {
41347        int miStart = mi;
41348        setMachineCodes(mi++, (byte) 0x66);
41349        generateREXprefix(false, dstReg, null, srcBase);
41350        setMachineCodes(mi++, (byte) 0x0F);
41351        setMachineCodes(mi++, (byte) 0xF3);
41352        emitRegIndirectRegOperands(srcBase, dstReg);
41353        if (lister != null) lister.RRN(miStart, "PSLLQ", dstReg, srcBase);
41354      }
41355    
41356    
41357      /**
41358       * Generate a register--register PSRLQ. That is,
41359       * <PRE>
41360       * dstReg <<=  (quad)  srcReg
41361       * </PRE>
41362       *
41363       * @param dstReg destination register
41364       * @param srcReg source register
41365       */
41366      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41367      public final void emitPSRLQ_Reg_Reg(XMM dstReg, XMM srcReg) {
41368        int miStart = mi;
41369        setMachineCodes(mi++, (byte) 0x66);
41370        generateREXprefix(false, dstReg, null, srcReg);
41371        setMachineCodes(mi++, (byte) 0x0F);
41372        setMachineCodes(mi++, (byte) 0xD3);
41373        emitRegRegOperands(srcReg, dstReg);
41374        if (lister != null) lister.RR(miStart, "PSRLQ", dstReg, srcReg);
41375      }
41376    
41377      /**
41378       * Generate a register--register-displacement PSRLQ. That is,
41379       * <PRE>
41380       * dstReg <<=  (quad)  [srcBase + srcDisp]
41381       * </PRE>
41382       *
41383       * @param dstReg destination register
41384       * @param srcBase the source base register
41385       * @param srcDisp the source displacement
41386       */
41387      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41388      public final void emitPSRLQ_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
41389        int miStart = mi;
41390        setMachineCodes(mi++, (byte) 0x66);
41391        generateREXprefix(false, dstReg, null, srcBase);
41392        setMachineCodes(mi++, (byte) 0x0F);
41393        setMachineCodes(mi++, (byte) 0xD3);
41394        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
41395        if (lister != null) lister.RRD(miStart, "PSRLQ", dstReg, srcBase, srcDisp);
41396      }
41397    
41398      /**
41399       * Generate a register--register-offset PSRLQ. That is,
41400       * <PRE>
41401       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
41402       * </PRE>
41403       *
41404       * @param dstReg destination register
41405       * @param srcIndex the source index register
41406       * @param srcScale the source scale
41407       * @param srcDisp the source displacement
41408       */
41409      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41410      public final void emitPSRLQ_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
41411        int miStart = mi;
41412        setMachineCodes(mi++, (byte) 0x66);
41413        generateREXprefix(false, dstReg, srcIndex, null);
41414        setMachineCodes(mi++, (byte) 0x0F);
41415        setMachineCodes(mi++, (byte) 0xD3);
41416        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
41417        if (lister != null) lister.RRFD(miStart, "PSRLQ", dstReg, srcIndex, srcScale, srcDisp);
41418      }
41419    
41420      /**
41421       * Generate a register--absolute PSRLQ. That is,
41422       * <PRE>
41423       *  dstReg <<=  (quad)  [srcDisp]
41424       * </PRE>
41425       *
41426       * @param dstReg destination register
41427       * @param srcDisp the source displacement
41428       */
41429      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
41430      public final void emitPSRLQ_Reg_Abs(XMM dstReg, Address srcDisp) {
41431        int miStart = mi;
41432        setMachineCodes(mi++, (byte) 0x66);
41433        generateREXprefix(false, dstReg, null, null);
41434        setMachineCodes(mi++, (byte) 0x0F);
41435        setMachineCodes(mi++, (byte) 0xD3);
41436        emitAbsRegOperands(srcDisp, dstReg);
41437        if (lister != null) lister.RRA(miStart, "PSRLQ", dstReg, srcDisp);
41438      }
41439    
41440      /**
41441       * Generate a register--register-index PSRLQ. That is,
41442       * <PRE>
41443       * dstReg <<=  (quad)  srcReg
41444       * </PRE>
41445       *
41446       * @param dstReg destination register
41447       * @param srcBase the source base register
41448       * @param srcIndex the source index register
41449       * @param srcScale the source scale
41450       * @param srcDisp the source displacement
41451       */
41452      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
41453      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
41454      public final void emitPSRLQ_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
41455        int miStart = mi;
41456        setMachineCodes(mi++, (byte) 0x66);
41457        generateREXprefix(false, dstReg, srcIndex, srcBase);
41458        setMachineCodes(mi++, (byte) 0x0F);
41459        setMachineCodes(mi++, (byte) 0xD3);
41460        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
41461        if (lister != null) lister.RRXD(miStart, "PSRLQ", dstReg, srcBase, srcIndex, srcScale, srcDisp);
41462      }
41463    
41464      /**
41465       * Generate a register--register-indirect PSRLQ. That is,
41466       * <PRE>
41467       * dstReg <<=  (quad)  [srcBase]
41468       * </PRE>
41469       *
41470       * @param dstReg destination register
41471       * @param srcBase the source base register
41472       */
41473      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41474      public final void emitPSRLQ_Reg_RegInd(XMM dstReg, GPR srcBase) {
41475        int miStart = mi;
41476        setMachineCodes(mi++, (byte) 0x66);
41477        generateREXprefix(false, dstReg, null, srcBase);
41478        setMachineCodes(mi++, (byte) 0x0F);
41479        setMachineCodes(mi++, (byte) 0xD3);
41480        emitRegIndirectRegOperands(srcBase, dstReg);
41481        if (lister != null) lister.RRN(miStart, "PSRLQ", dstReg, srcBase);
41482      }
41483    
41484    
41485      /**
41486       * Generate a register--register ANDPS. That is,
41487       * <PRE>
41488       * dstReg <<=  (quad)  srcReg
41489       * </PRE>
41490       *
41491       * @param dstReg destination register
41492       * @param srcReg source register
41493       */
41494      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41495      public final void emitANDPS_Reg_Reg(XMM dstReg, XMM srcReg) {
41496        int miStart = mi;
41497        generateREXprefix(false, dstReg, null, srcReg);
41498        setMachineCodes(mi++, (byte) 0x0F);
41499        setMachineCodes(mi++, (byte) 0x54);
41500        emitRegRegOperands(srcReg, dstReg);
41501        if (lister != null) lister.RR(miStart, "ANDPS", dstReg, srcReg);
41502      }
41503    
41504      /**
41505       * Generate a register--register-displacement ANDPS. That is,
41506       * <PRE>
41507       * dstReg <<=  (quad)  [srcBase + srcDisp]
41508       * </PRE>
41509       *
41510       * @param dstReg destination register
41511       * @param srcBase the source base register
41512       * @param srcDisp the source displacement
41513       */
41514      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41515      public final void emitANDPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
41516        int miStart = mi;
41517        generateREXprefix(false, dstReg, null, srcBase);
41518        setMachineCodes(mi++, (byte) 0x0F);
41519        setMachineCodes(mi++, (byte) 0x54);
41520        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
41521        if (lister != null) lister.RRD(miStart, "ANDPS", dstReg, srcBase, srcDisp);
41522      }
41523    
41524      /**
41525       * Generate a register--register-offset ANDPS. That is,
41526       * <PRE>
41527       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
41528       * </PRE>
41529       *
41530       * @param dstReg destination register
41531       * @param srcIndex the source index register
41532       * @param srcScale the source scale
41533       * @param srcDisp the source displacement
41534       */
41535      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41536      public final void emitANDPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
41537        int miStart = mi;
41538        generateREXprefix(false, dstReg, srcIndex, null);
41539        setMachineCodes(mi++, (byte) 0x0F);
41540        setMachineCodes(mi++, (byte) 0x54);
41541        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
41542        if (lister != null) lister.RRFD(miStart, "ANDPS", dstReg, srcIndex, srcScale, srcDisp);
41543      }
41544    
41545      /**
41546       * Generate a register--absolute ANDPS. That is,
41547       * <PRE>
41548       *  dstReg <<=  (quad)  [srcDisp]
41549       * </PRE>
41550       *
41551       * @param dstReg destination register
41552       * @param srcDisp the source displacement
41553       */
41554      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
41555      public final void emitANDPS_Reg_Abs(XMM dstReg, Address srcDisp) {
41556        int miStart = mi;
41557        generateREXprefix(false, dstReg, null, null);
41558        setMachineCodes(mi++, (byte) 0x0F);
41559        setMachineCodes(mi++, (byte) 0x54);
41560        emitAbsRegOperands(srcDisp, dstReg);
41561        if (lister != null) lister.RRA(miStart, "ANDPS", dstReg, srcDisp);
41562      }
41563    
41564      /**
41565       * Generate a register--register-index ANDPS. That is,
41566       * <PRE>
41567       * dstReg <<=  (quad)  srcReg
41568       * </PRE>
41569       *
41570       * @param dstReg destination register
41571       * @param srcBase the source base register
41572       * @param srcIndex the source index register
41573       * @param srcScale the source scale
41574       * @param srcDisp the source displacement
41575       */
41576      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
41577      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
41578      public final void emitANDPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
41579        int miStart = mi;
41580        generateREXprefix(false, dstReg, srcIndex, srcBase);
41581        setMachineCodes(mi++, (byte) 0x0F);
41582        setMachineCodes(mi++, (byte) 0x54);
41583        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
41584        if (lister != null) lister.RRXD(miStart, "ANDPS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
41585      }
41586    
41587      /**
41588       * Generate a register--register-indirect ANDPS. That is,
41589       * <PRE>
41590       * dstReg <<=  (quad)  [srcBase]
41591       * </PRE>
41592       *
41593       * @param dstReg destination register
41594       * @param srcBase the source base register
41595       */
41596      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41597      public final void emitANDPS_Reg_RegInd(XMM dstReg, GPR srcBase) {
41598        int miStart = mi;
41599        generateREXprefix(false, dstReg, null, srcBase);
41600        setMachineCodes(mi++, (byte) 0x0F);
41601        setMachineCodes(mi++, (byte) 0x54);
41602        emitRegIndirectRegOperands(srcBase, dstReg);
41603        if (lister != null) lister.RRN(miStart, "ANDPS", dstReg, srcBase);
41604      }
41605    
41606    
41607      /**
41608       * Generate a register--register ANDPD. That is,
41609       * <PRE>
41610       * dstReg <<=  (quad)  srcReg
41611       * </PRE>
41612       *
41613       * @param dstReg destination register
41614       * @param srcReg source register
41615       */
41616      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41617      public final void emitANDPD_Reg_Reg(XMM dstReg, XMM srcReg) {
41618        int miStart = mi;
41619        setMachineCodes(mi++, (byte) 0x66);
41620        generateREXprefix(false, dstReg, null, srcReg);
41621        setMachineCodes(mi++, (byte) 0x0F);
41622        setMachineCodes(mi++, (byte) 0x54);
41623        emitRegRegOperands(srcReg, dstReg);
41624        if (lister != null) lister.RR(miStart, "ANDPD", dstReg, srcReg);
41625      }
41626    
41627      /**
41628       * Generate a register--register-displacement ANDPD. That is,
41629       * <PRE>
41630       * dstReg <<=  (quad)  [srcBase + srcDisp]
41631       * </PRE>
41632       *
41633       * @param dstReg destination register
41634       * @param srcBase the source base register
41635       * @param srcDisp the source displacement
41636       */
41637      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41638      public final void emitANDPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
41639        int miStart = mi;
41640        setMachineCodes(mi++, (byte) 0x66);
41641        generateREXprefix(false, dstReg, null, srcBase);
41642        setMachineCodes(mi++, (byte) 0x0F);
41643        setMachineCodes(mi++, (byte) 0x54);
41644        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
41645        if (lister != null) lister.RRD(miStart, "ANDPD", dstReg, srcBase, srcDisp);
41646      }
41647    
41648      /**
41649       * Generate a register--register-offset ANDPD. That is,
41650       * <PRE>
41651       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
41652       * </PRE>
41653       *
41654       * @param dstReg destination register
41655       * @param srcIndex the source index register
41656       * @param srcScale the source scale
41657       * @param srcDisp the source displacement
41658       */
41659      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41660      public final void emitANDPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
41661        int miStart = mi;
41662        setMachineCodes(mi++, (byte) 0x66);
41663        generateREXprefix(false, dstReg, srcIndex, null);
41664        setMachineCodes(mi++, (byte) 0x0F);
41665        setMachineCodes(mi++, (byte) 0x54);
41666        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
41667        if (lister != null) lister.RRFD(miStart, "ANDPD", dstReg, srcIndex, srcScale, srcDisp);
41668      }
41669    
41670      /**
41671       * Generate a register--absolute ANDPD. That is,
41672       * <PRE>
41673       *  dstReg <<=  (quad)  [srcDisp]
41674       * </PRE>
41675       *
41676       * @param dstReg destination register
41677       * @param srcDisp the source displacement
41678       */
41679      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
41680      public final void emitANDPD_Reg_Abs(XMM dstReg, Address srcDisp) {
41681        int miStart = mi;
41682        setMachineCodes(mi++, (byte) 0x66);
41683        generateREXprefix(false, dstReg, null, null);
41684        setMachineCodes(mi++, (byte) 0x0F);
41685        setMachineCodes(mi++, (byte) 0x54);
41686        emitAbsRegOperands(srcDisp, dstReg);
41687        if (lister != null) lister.RRA(miStart, "ANDPD", dstReg, srcDisp);
41688      }
41689    
41690      /**
41691       * Generate a register--register-index ANDPD. That is,
41692       * <PRE>
41693       * dstReg <<=  (quad)  srcReg
41694       * </PRE>
41695       *
41696       * @param dstReg destination register
41697       * @param srcBase the source base register
41698       * @param srcIndex the source index register
41699       * @param srcScale the source scale
41700       * @param srcDisp the source displacement
41701       */
41702      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
41703      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
41704      public final void emitANDPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
41705        int miStart = mi;
41706        setMachineCodes(mi++, (byte) 0x66);
41707        generateREXprefix(false, dstReg, srcIndex, srcBase);
41708        setMachineCodes(mi++, (byte) 0x0F);
41709        setMachineCodes(mi++, (byte) 0x54);
41710        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
41711        if (lister != null) lister.RRXD(miStart, "ANDPD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
41712      }
41713    
41714      /**
41715       * Generate a register--register-indirect ANDPD. That is,
41716       * <PRE>
41717       * dstReg <<=  (quad)  [srcBase]
41718       * </PRE>
41719       *
41720       * @param dstReg destination register
41721       * @param srcBase the source base register
41722       */
41723      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41724      public final void emitANDPD_Reg_RegInd(XMM dstReg, GPR srcBase) {
41725        int miStart = mi;
41726        setMachineCodes(mi++, (byte) 0x66);
41727        generateREXprefix(false, dstReg, null, srcBase);
41728        setMachineCodes(mi++, (byte) 0x0F);
41729        setMachineCodes(mi++, (byte) 0x54);
41730        emitRegIndirectRegOperands(srcBase, dstReg);
41731        if (lister != null) lister.RRN(miStart, "ANDPD", dstReg, srcBase);
41732      }
41733    
41734    
41735      /**
41736       * Generate a register--register ANDNPS. That is,
41737       * <PRE>
41738       * dstReg <<=  (quad)  srcReg
41739       * </PRE>
41740       *
41741       * @param dstReg destination register
41742       * @param srcReg source register
41743       */
41744      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41745      public final void emitANDNPS_Reg_Reg(XMM dstReg, XMM srcReg) {
41746        int miStart = mi;
41747        generateREXprefix(false, dstReg, null, srcReg);
41748        setMachineCodes(mi++, (byte) 0x0F);
41749        setMachineCodes(mi++, (byte) 0x55);
41750        emitRegRegOperands(srcReg, dstReg);
41751        if (lister != null) lister.RR(miStart, "ANDNPS", dstReg, srcReg);
41752      }
41753    
41754      /**
41755       * Generate a register--register-displacement ANDNPS. That is,
41756       * <PRE>
41757       * dstReg <<=  (quad)  [srcBase + srcDisp]
41758       * </PRE>
41759       *
41760       * @param dstReg destination register
41761       * @param srcBase the source base register
41762       * @param srcDisp the source displacement
41763       */
41764      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41765      public final void emitANDNPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
41766        int miStart = mi;
41767        generateREXprefix(false, dstReg, null, srcBase);
41768        setMachineCodes(mi++, (byte) 0x0F);
41769        setMachineCodes(mi++, (byte) 0x55);
41770        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
41771        if (lister != null) lister.RRD(miStart, "ANDNPS", dstReg, srcBase, srcDisp);
41772      }
41773    
41774      /**
41775       * Generate a register--register-offset ANDNPS. That is,
41776       * <PRE>
41777       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
41778       * </PRE>
41779       *
41780       * @param dstReg destination register
41781       * @param srcIndex the source index register
41782       * @param srcScale the source scale
41783       * @param srcDisp the source displacement
41784       */
41785      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41786      public final void emitANDNPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
41787        int miStart = mi;
41788        generateREXprefix(false, dstReg, srcIndex, null);
41789        setMachineCodes(mi++, (byte) 0x0F);
41790        setMachineCodes(mi++, (byte) 0x55);
41791        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
41792        if (lister != null) lister.RRFD(miStart, "ANDNPS", dstReg, srcIndex, srcScale, srcDisp);
41793      }
41794    
41795      /**
41796       * Generate a register--absolute ANDNPS. That is,
41797       * <PRE>
41798       *  dstReg <<=  (quad)  [srcDisp]
41799       * </PRE>
41800       *
41801       * @param dstReg destination register
41802       * @param srcDisp the source displacement
41803       */
41804      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
41805      public final void emitANDNPS_Reg_Abs(XMM dstReg, Address srcDisp) {
41806        int miStart = mi;
41807        generateREXprefix(false, dstReg, null, null);
41808        setMachineCodes(mi++, (byte) 0x0F);
41809        setMachineCodes(mi++, (byte) 0x55);
41810        emitAbsRegOperands(srcDisp, dstReg);
41811        if (lister != null) lister.RRA(miStart, "ANDNPS", dstReg, srcDisp);
41812      }
41813    
41814      /**
41815       * Generate a register--register-index ANDNPS. That is,
41816       * <PRE>
41817       * dstReg <<=  (quad)  srcReg
41818       * </PRE>
41819       *
41820       * @param dstReg destination register
41821       * @param srcBase the source base register
41822       * @param srcIndex the source index register
41823       * @param srcScale the source scale
41824       * @param srcDisp the source displacement
41825       */
41826      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
41827      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
41828      public final void emitANDNPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
41829        int miStart = mi;
41830        generateREXprefix(false, dstReg, srcIndex, srcBase);
41831        setMachineCodes(mi++, (byte) 0x0F);
41832        setMachineCodes(mi++, (byte) 0x55);
41833        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
41834        if (lister != null) lister.RRXD(miStart, "ANDNPS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
41835      }
41836    
41837      /**
41838       * Generate a register--register-indirect ANDNPS. That is,
41839       * <PRE>
41840       * dstReg <<=  (quad)  [srcBase]
41841       * </PRE>
41842       *
41843       * @param dstReg destination register
41844       * @param srcBase the source base register
41845       */
41846      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41847      public final void emitANDNPS_Reg_RegInd(XMM dstReg, GPR srcBase) {
41848        int miStart = mi;
41849        generateREXprefix(false, dstReg, null, srcBase);
41850        setMachineCodes(mi++, (byte) 0x0F);
41851        setMachineCodes(mi++, (byte) 0x55);
41852        emitRegIndirectRegOperands(srcBase, dstReg);
41853        if (lister != null) lister.RRN(miStart, "ANDNPS", dstReg, srcBase);
41854      }
41855    
41856    
41857      /**
41858       * Generate a register--register ANDNPD. That is,
41859       * <PRE>
41860       * dstReg <<=  (quad)  srcReg
41861       * </PRE>
41862       *
41863       * @param dstReg destination register
41864       * @param srcReg source register
41865       */
41866      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41867      public final void emitANDNPD_Reg_Reg(XMM dstReg, XMM srcReg) {
41868        int miStart = mi;
41869        setMachineCodes(mi++, (byte) 0x66);
41870        generateREXprefix(false, dstReg, null, srcReg);
41871        setMachineCodes(mi++, (byte) 0x0F);
41872        setMachineCodes(mi++, (byte) 0x55);
41873        emitRegRegOperands(srcReg, dstReg);
41874        if (lister != null) lister.RR(miStart, "ANDNPD", dstReg, srcReg);
41875      }
41876    
41877      /**
41878       * Generate a register--register-displacement ANDNPD. That is,
41879       * <PRE>
41880       * dstReg <<=  (quad)  [srcBase + srcDisp]
41881       * </PRE>
41882       *
41883       * @param dstReg destination register
41884       * @param srcBase the source base register
41885       * @param srcDisp the source displacement
41886       */
41887      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41888      public final void emitANDNPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
41889        int miStart = mi;
41890        setMachineCodes(mi++, (byte) 0x66);
41891        generateREXprefix(false, dstReg, null, srcBase);
41892        setMachineCodes(mi++, (byte) 0x0F);
41893        setMachineCodes(mi++, (byte) 0x55);
41894        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
41895        if (lister != null) lister.RRD(miStart, "ANDNPD", dstReg, srcBase, srcDisp);
41896      }
41897    
41898      /**
41899       * Generate a register--register-offset ANDNPD. That is,
41900       * <PRE>
41901       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
41902       * </PRE>
41903       *
41904       * @param dstReg destination register
41905       * @param srcIndex the source index register
41906       * @param srcScale the source scale
41907       * @param srcDisp the source displacement
41908       */
41909      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41910      public final void emitANDNPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
41911        int miStart = mi;
41912        setMachineCodes(mi++, (byte) 0x66);
41913        generateREXprefix(false, dstReg, srcIndex, null);
41914        setMachineCodes(mi++, (byte) 0x0F);
41915        setMachineCodes(mi++, (byte) 0x55);
41916        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
41917        if (lister != null) lister.RRFD(miStart, "ANDNPD", dstReg, srcIndex, srcScale, srcDisp);
41918      }
41919    
41920      /**
41921       * Generate a register--absolute ANDNPD. That is,
41922       * <PRE>
41923       *  dstReg <<=  (quad)  [srcDisp]
41924       * </PRE>
41925       *
41926       * @param dstReg destination register
41927       * @param srcDisp the source displacement
41928       */
41929      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
41930      public final void emitANDNPD_Reg_Abs(XMM dstReg, Address srcDisp) {
41931        int miStart = mi;
41932        setMachineCodes(mi++, (byte) 0x66);
41933        generateREXprefix(false, dstReg, null, null);
41934        setMachineCodes(mi++, (byte) 0x0F);
41935        setMachineCodes(mi++, (byte) 0x55);
41936        emitAbsRegOperands(srcDisp, dstReg);
41937        if (lister != null) lister.RRA(miStart, "ANDNPD", dstReg, srcDisp);
41938      }
41939    
41940      /**
41941       * Generate a register--register-index ANDNPD. That is,
41942       * <PRE>
41943       * dstReg <<=  (quad)  srcReg
41944       * </PRE>
41945       *
41946       * @param dstReg destination register
41947       * @param srcBase the source base register
41948       * @param srcIndex the source index register
41949       * @param srcScale the source scale
41950       * @param srcDisp the source displacement
41951       */
41952      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
41953      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
41954      public final void emitANDNPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
41955        int miStart = mi;
41956        setMachineCodes(mi++, (byte) 0x66);
41957        generateREXprefix(false, dstReg, srcIndex, srcBase);
41958        setMachineCodes(mi++, (byte) 0x0F);
41959        setMachineCodes(mi++, (byte) 0x55);
41960        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
41961        if (lister != null) lister.RRXD(miStart, "ANDNPD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
41962      }
41963    
41964      /**
41965       * Generate a register--register-indirect ANDNPD. That is,
41966       * <PRE>
41967       * dstReg <<=  (quad)  [srcBase]
41968       * </PRE>
41969       *
41970       * @param dstReg destination register
41971       * @param srcBase the source base register
41972       */
41973      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41974      public final void emitANDNPD_Reg_RegInd(XMM dstReg, GPR srcBase) {
41975        int miStart = mi;
41976        setMachineCodes(mi++, (byte) 0x66);
41977        generateREXprefix(false, dstReg, null, srcBase);
41978        setMachineCodes(mi++, (byte) 0x0F);
41979        setMachineCodes(mi++, (byte) 0x55);
41980        emitRegIndirectRegOperands(srcBase, dstReg);
41981        if (lister != null) lister.RRN(miStart, "ANDNPD", dstReg, srcBase);
41982      }
41983    
41984    
41985      /**
41986       * Generate a register--register ORPS. That is,
41987       * <PRE>
41988       * dstReg <<=  (quad)  srcReg
41989       * </PRE>
41990       *
41991       * @param dstReg destination register
41992       * @param srcReg source register
41993       */
41994      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
41995      public final void emitORPS_Reg_Reg(XMM dstReg, XMM srcReg) {
41996        int miStart = mi;
41997        generateREXprefix(false, dstReg, null, srcReg);
41998        setMachineCodes(mi++, (byte) 0x0F);
41999        setMachineCodes(mi++, (byte) 0x56);
42000        emitRegRegOperands(srcReg, dstReg);
42001        if (lister != null) lister.RR(miStart, "ORPS", dstReg, srcReg);
42002      }
42003    
42004      /**
42005       * Generate a register--register-displacement ORPS. That is,
42006       * <PRE>
42007       * dstReg <<=  (quad)  [srcBase + srcDisp]
42008       * </PRE>
42009       *
42010       * @param dstReg destination register
42011       * @param srcBase the source base register
42012       * @param srcDisp the source displacement
42013       */
42014      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42015      public final void emitORPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
42016        int miStart = mi;
42017        generateREXprefix(false, dstReg, null, srcBase);
42018        setMachineCodes(mi++, (byte) 0x0F);
42019        setMachineCodes(mi++, (byte) 0x56);
42020        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
42021        if (lister != null) lister.RRD(miStart, "ORPS", dstReg, srcBase, srcDisp);
42022      }
42023    
42024      /**
42025       * Generate a register--register-offset ORPS. That is,
42026       * <PRE>
42027       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
42028       * </PRE>
42029       *
42030       * @param dstReg destination register
42031       * @param srcIndex the source index register
42032       * @param srcScale the source scale
42033       * @param srcDisp the source displacement
42034       */
42035      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42036      public final void emitORPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
42037        int miStart = mi;
42038        generateREXprefix(false, dstReg, srcIndex, null);
42039        setMachineCodes(mi++, (byte) 0x0F);
42040        setMachineCodes(mi++, (byte) 0x56);
42041        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
42042        if (lister != null) lister.RRFD(miStart, "ORPS", dstReg, srcIndex, srcScale, srcDisp);
42043      }
42044    
42045      /**
42046       * Generate a register--absolute ORPS. That is,
42047       * <PRE>
42048       *  dstReg <<=  (quad)  [srcDisp]
42049       * </PRE>
42050       *
42051       * @param dstReg destination register
42052       * @param srcDisp the source displacement
42053       */
42054      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
42055      public final void emitORPS_Reg_Abs(XMM dstReg, Address srcDisp) {
42056        int miStart = mi;
42057        generateREXprefix(false, dstReg, null, null);
42058        setMachineCodes(mi++, (byte) 0x0F);
42059        setMachineCodes(mi++, (byte) 0x56);
42060        emitAbsRegOperands(srcDisp, dstReg);
42061        if (lister != null) lister.RRA(miStart, "ORPS", dstReg, srcDisp);
42062      }
42063    
42064      /**
42065       * Generate a register--register-index ORPS. That is,
42066       * <PRE>
42067       * dstReg <<=  (quad)  srcReg
42068       * </PRE>
42069       *
42070       * @param dstReg destination register
42071       * @param srcBase the source base register
42072       * @param srcIndex the source index register
42073       * @param srcScale the source scale
42074       * @param srcDisp the source displacement
42075       */
42076      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
42077      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
42078      public final void emitORPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
42079        int miStart = mi;
42080        generateREXprefix(false, dstReg, srcIndex, srcBase);
42081        setMachineCodes(mi++, (byte) 0x0F);
42082        setMachineCodes(mi++, (byte) 0x56);
42083        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
42084        if (lister != null) lister.RRXD(miStart, "ORPS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
42085      }
42086    
42087      /**
42088       * Generate a register--register-indirect ORPS. That is,
42089       * <PRE>
42090       * dstReg <<=  (quad)  [srcBase]
42091       * </PRE>
42092       *
42093       * @param dstReg destination register
42094       * @param srcBase the source base register
42095       */
42096      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42097      public final void emitORPS_Reg_RegInd(XMM dstReg, GPR srcBase) {
42098        int miStart = mi;
42099        generateREXprefix(false, dstReg, null, srcBase);
42100        setMachineCodes(mi++, (byte) 0x0F);
42101        setMachineCodes(mi++, (byte) 0x56);
42102        emitRegIndirectRegOperands(srcBase, dstReg);
42103        if (lister != null) lister.RRN(miStart, "ORPS", dstReg, srcBase);
42104      }
42105    
42106    
42107      /**
42108       * Generate a register--register ORPD. That is,
42109       * <PRE>
42110       * dstReg <<=  (quad)  srcReg
42111       * </PRE>
42112       *
42113       * @param dstReg destination register
42114       * @param srcReg source register
42115       */
42116      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42117      public final void emitORPD_Reg_Reg(XMM dstReg, XMM srcReg) {
42118        int miStart = mi;
42119        setMachineCodes(mi++, (byte) 0x66);
42120        generateREXprefix(false, dstReg, null, srcReg);
42121        setMachineCodes(mi++, (byte) 0x0F);
42122        setMachineCodes(mi++, (byte) 0x56);
42123        emitRegRegOperands(srcReg, dstReg);
42124        if (lister != null) lister.RR(miStart, "ORPD", dstReg, srcReg);
42125      }
42126    
42127      /**
42128       * Generate a register--register-displacement ORPD. That is,
42129       * <PRE>
42130       * dstReg <<=  (quad)  [srcBase + srcDisp]
42131       * </PRE>
42132       *
42133       * @param dstReg destination register
42134       * @param srcBase the source base register
42135       * @param srcDisp the source displacement
42136       */
42137      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42138      public final void emitORPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
42139        int miStart = mi;
42140        setMachineCodes(mi++, (byte) 0x66);
42141        generateREXprefix(false, dstReg, null, srcBase);
42142        setMachineCodes(mi++, (byte) 0x0F);
42143        setMachineCodes(mi++, (byte) 0x56);
42144        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
42145        if (lister != null) lister.RRD(miStart, "ORPD", dstReg, srcBase, srcDisp);
42146      }
42147    
42148      /**
42149       * Generate a register--register-offset ORPD. That is,
42150       * <PRE>
42151       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
42152       * </PRE>
42153       *
42154       * @param dstReg destination register
42155       * @param srcIndex the source index register
42156       * @param srcScale the source scale
42157       * @param srcDisp the source displacement
42158       */
42159      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42160      public final void emitORPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
42161        int miStart = mi;
42162        setMachineCodes(mi++, (byte) 0x66);
42163        generateREXprefix(false, dstReg, srcIndex, null);
42164        setMachineCodes(mi++, (byte) 0x0F);
42165        setMachineCodes(mi++, (byte) 0x56);
42166        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
42167        if (lister != null) lister.RRFD(miStart, "ORPD", dstReg, srcIndex, srcScale, srcDisp);
42168      }
42169    
42170      /**
42171       * Generate a register--absolute ORPD. That is,
42172       * <PRE>
42173       *  dstReg <<=  (quad)  [srcDisp]
42174       * </PRE>
42175       *
42176       * @param dstReg destination register
42177       * @param srcDisp the source displacement
42178       */
42179      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
42180      public final void emitORPD_Reg_Abs(XMM dstReg, Address srcDisp) {
42181        int miStart = mi;
42182        setMachineCodes(mi++, (byte) 0x66);
42183        generateREXprefix(false, dstReg, null, null);
42184        setMachineCodes(mi++, (byte) 0x0F);
42185        setMachineCodes(mi++, (byte) 0x56);
42186        emitAbsRegOperands(srcDisp, dstReg);
42187        if (lister != null) lister.RRA(miStart, "ORPD", dstReg, srcDisp);
42188      }
42189    
42190      /**
42191       * Generate a register--register-index ORPD. That is,
42192       * <PRE>
42193       * dstReg <<=  (quad)  srcReg
42194       * </PRE>
42195       *
42196       * @param dstReg destination register
42197       * @param srcBase the source base register
42198       * @param srcIndex the source index register
42199       * @param srcScale the source scale
42200       * @param srcDisp the source displacement
42201       */
42202      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
42203      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
42204      public final void emitORPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
42205        int miStart = mi;
42206        setMachineCodes(mi++, (byte) 0x66);
42207        generateREXprefix(false, dstReg, srcIndex, srcBase);
42208        setMachineCodes(mi++, (byte) 0x0F);
42209        setMachineCodes(mi++, (byte) 0x56);
42210        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
42211        if (lister != null) lister.RRXD(miStart, "ORPD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
42212      }
42213    
42214      /**
42215       * Generate a register--register-indirect ORPD. That is,
42216       * <PRE>
42217       * dstReg <<=  (quad)  [srcBase]
42218       * </PRE>
42219       *
42220       * @param dstReg destination register
42221       * @param srcBase the source base register
42222       */
42223      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42224      public final void emitORPD_Reg_RegInd(XMM dstReg, GPR srcBase) {
42225        int miStart = mi;
42226        setMachineCodes(mi++, (byte) 0x66);
42227        generateREXprefix(false, dstReg, null, srcBase);
42228        setMachineCodes(mi++, (byte) 0x0F);
42229        setMachineCodes(mi++, (byte) 0x56);
42230        emitRegIndirectRegOperands(srcBase, dstReg);
42231        if (lister != null) lister.RRN(miStart, "ORPD", dstReg, srcBase);
42232      }
42233    
42234    
42235      /**
42236       * Generate a register--register XORPS. That is,
42237       * <PRE>
42238       * dstReg <<=  (quad)  srcReg
42239       * </PRE>
42240       *
42241       * @param dstReg destination register
42242       * @param srcReg source register
42243       */
42244      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42245      public final void emitXORPS_Reg_Reg(XMM dstReg, XMM srcReg) {
42246        int miStart = mi;
42247        generateREXprefix(false, dstReg, null, srcReg);
42248        setMachineCodes(mi++, (byte) 0x0F);
42249        setMachineCodes(mi++, (byte) 0x57);
42250        emitRegRegOperands(srcReg, dstReg);
42251        if (lister != null) lister.RR(miStart, "XORPS", dstReg, srcReg);
42252      }
42253    
42254      /**
42255       * Generate a register--register-displacement XORPS. That is,
42256       * <PRE>
42257       * dstReg <<=  (quad)  [srcBase + srcDisp]
42258       * </PRE>
42259       *
42260       * @param dstReg destination register
42261       * @param srcBase the source base register
42262       * @param srcDisp the source displacement
42263       */
42264      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42265      public final void emitXORPS_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
42266        int miStart = mi;
42267        generateREXprefix(false, dstReg, null, srcBase);
42268        setMachineCodes(mi++, (byte) 0x0F);
42269        setMachineCodes(mi++, (byte) 0x57);
42270        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
42271        if (lister != null) lister.RRD(miStart, "XORPS", dstReg, srcBase, srcDisp);
42272      }
42273    
42274      /**
42275       * Generate a register--register-offset XORPS. That is,
42276       * <PRE>
42277       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
42278       * </PRE>
42279       *
42280       * @param dstReg destination register
42281       * @param srcIndex the source index register
42282       * @param srcScale the source scale
42283       * @param srcDisp the source displacement
42284       */
42285      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42286      public final void emitXORPS_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
42287        int miStart = mi;
42288        generateREXprefix(false, dstReg, srcIndex, null);
42289        setMachineCodes(mi++, (byte) 0x0F);
42290        setMachineCodes(mi++, (byte) 0x57);
42291        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
42292        if (lister != null) lister.RRFD(miStart, "XORPS", dstReg, srcIndex, srcScale, srcDisp);
42293      }
42294    
42295      /**
42296       * Generate a register--absolute XORPS. That is,
42297       * <PRE>
42298       *  dstReg <<=  (quad)  [srcDisp]
42299       * </PRE>
42300       *
42301       * @param dstReg destination register
42302       * @param srcDisp the source displacement
42303       */
42304      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
42305      public final void emitXORPS_Reg_Abs(XMM dstReg, Address srcDisp) {
42306        int miStart = mi;
42307        generateREXprefix(false, dstReg, null, null);
42308        setMachineCodes(mi++, (byte) 0x0F);
42309        setMachineCodes(mi++, (byte) 0x57);
42310        emitAbsRegOperands(srcDisp, dstReg);
42311        if (lister != null) lister.RRA(miStart, "XORPS", dstReg, srcDisp);
42312      }
42313    
42314      /**
42315       * Generate a register--register-index XORPS. That is,
42316       * <PRE>
42317       * dstReg <<=  (quad)  srcReg
42318       * </PRE>
42319       *
42320       * @param dstReg destination register
42321       * @param srcBase the source base register
42322       * @param srcIndex the source index register
42323       * @param srcScale the source scale
42324       * @param srcDisp the source displacement
42325       */
42326      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
42327      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
42328      public final void emitXORPS_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
42329        int miStart = mi;
42330        generateREXprefix(false, dstReg, srcIndex, srcBase);
42331        setMachineCodes(mi++, (byte) 0x0F);
42332        setMachineCodes(mi++, (byte) 0x57);
42333        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
42334        if (lister != null) lister.RRXD(miStart, "XORPS", dstReg, srcBase, srcIndex, srcScale, srcDisp);
42335      }
42336    
42337      /**
42338       * Generate a register--register-indirect XORPS. That is,
42339       * <PRE>
42340       * dstReg <<=  (quad)  [srcBase]
42341       * </PRE>
42342       *
42343       * @param dstReg destination register
42344       * @param srcBase the source base register
42345       */
42346      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42347      public final void emitXORPS_Reg_RegInd(XMM dstReg, GPR srcBase) {
42348        int miStart = mi;
42349        generateREXprefix(false, dstReg, null, srcBase);
42350        setMachineCodes(mi++, (byte) 0x0F);
42351        setMachineCodes(mi++, (byte) 0x57);
42352        emitRegIndirectRegOperands(srcBase, dstReg);
42353        if (lister != null) lister.RRN(miStart, "XORPS", dstReg, srcBase);
42354      }
42355    
42356    
42357      /**
42358       * Generate a register--register XORPD. That is,
42359       * <PRE>
42360       * dstReg <<=  (quad)  srcReg
42361       * </PRE>
42362       *
42363       * @param dstReg destination register
42364       * @param srcReg source register
42365       */
42366      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42367      public final void emitXORPD_Reg_Reg(XMM dstReg, XMM srcReg) {
42368        int miStart = mi;
42369        setMachineCodes(mi++, (byte) 0x66);
42370        generateREXprefix(false, dstReg, null, srcReg);
42371        setMachineCodes(mi++, (byte) 0x0F);
42372        setMachineCodes(mi++, (byte) 0x57);
42373        emitRegRegOperands(srcReg, dstReg);
42374        if (lister != null) lister.RR(miStart, "XORPD", dstReg, srcReg);
42375      }
42376    
42377      /**
42378       * Generate a register--register-displacement XORPD. That is,
42379       * <PRE>
42380       * dstReg <<=  (quad)  [srcBase + srcDisp]
42381       * </PRE>
42382       *
42383       * @param dstReg destination register
42384       * @param srcBase the source base register
42385       * @param srcDisp the source displacement
42386       */
42387      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42388      public final void emitXORPD_Reg_RegDisp(XMM dstReg, GPR srcBase, Offset srcDisp) {
42389        int miStart = mi;
42390        setMachineCodes(mi++, (byte) 0x66);
42391        generateREXprefix(false, dstReg, null, srcBase);
42392        setMachineCodes(mi++, (byte) 0x0F);
42393        setMachineCodes(mi++, (byte) 0x57);
42394        emitRegDispRegOperands(srcBase, srcDisp, dstReg);
42395        if (lister != null) lister.RRD(miStart, "XORPD", dstReg, srcBase, srcDisp);
42396      }
42397    
42398      /**
42399       * Generate a register--register-offset XORPD. That is,
42400       * <PRE>
42401       * dstReg <<=  (quad)  [srcIndex<<srcScale + srcDisp]
42402       * </PRE>
42403       *
42404       * @param dstReg destination register
42405       * @param srcIndex the source index register
42406       * @param srcScale the source scale
42407       * @param srcDisp the source displacement
42408       */
42409      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42410      public final void emitXORPD_Reg_RegOff(XMM dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
42411        int miStart = mi;
42412        setMachineCodes(mi++, (byte) 0x66);
42413        generateREXprefix(false, dstReg, srcIndex, null);
42414        setMachineCodes(mi++, (byte) 0x0F);
42415        setMachineCodes(mi++, (byte) 0x57);
42416        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, dstReg);
42417        if (lister != null) lister.RRFD(miStart, "XORPD", dstReg, srcIndex, srcScale, srcDisp);
42418      }
42419    
42420      /**
42421       * Generate a register--absolute XORPD. That is,
42422       * <PRE>
42423       *  dstReg <<=  (quad)  [srcDisp]
42424       * </PRE>
42425       *
42426       * @param dstReg destination register
42427       * @param srcDisp the source displacement
42428       */
42429      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
42430      public final void emitXORPD_Reg_Abs(XMM dstReg, Address srcDisp) {
42431        int miStart = mi;
42432        setMachineCodes(mi++, (byte) 0x66);
42433        generateREXprefix(false, dstReg, null, null);
42434        setMachineCodes(mi++, (byte) 0x0F);
42435        setMachineCodes(mi++, (byte) 0x57);
42436        emitAbsRegOperands(srcDisp, dstReg);
42437        if (lister != null) lister.RRA(miStart, "XORPD", dstReg, srcDisp);
42438      }
42439    
42440      /**
42441       * Generate a register--register-index XORPD. That is,
42442       * <PRE>
42443       * dstReg <<=  (quad)  srcReg
42444       * </PRE>
42445       *
42446       * @param dstReg destination register
42447       * @param srcBase the source base register
42448       * @param srcIndex the source index register
42449       * @param srcScale the source scale
42450       * @param srcDisp the source displacement
42451       */
42452      // dstReg <<=  (quad)  [srcBase + srcIndex<<scale + srcDisp]
42453      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
42454      public final void emitXORPD_Reg_RegIdx(XMM dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
42455        int miStart = mi;
42456        setMachineCodes(mi++, (byte) 0x66);
42457        generateREXprefix(false, dstReg, srcIndex, srcBase);
42458        setMachineCodes(mi++, (byte) 0x0F);
42459        setMachineCodes(mi++, (byte) 0x57);
42460        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, dstReg);
42461        if (lister != null) lister.RRXD(miStart, "XORPD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
42462      }
42463    
42464      /**
42465       * Generate a register--register-indirect XORPD. That is,
42466       * <PRE>
42467       * dstReg <<=  (quad)  [srcBase]
42468       * </PRE>
42469       *
42470       * @param dstReg destination register
42471       * @param srcBase the source base register
42472       */
42473      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42474      public final void emitXORPD_Reg_RegInd(XMM dstReg, GPR srcBase) {
42475        int miStart = mi;
42476        setMachineCodes(mi++, (byte) 0x66);
42477        generateREXprefix(false, dstReg, null, srcBase);
42478        setMachineCodes(mi++, (byte) 0x0F);
42479        setMachineCodes(mi++, (byte) 0x57);
42480        emitRegIndirectRegOperands(srcBase, dstReg);
42481        if (lister != null) lister.RRN(miStart, "XORPD", dstReg, srcBase);
42482      }
42483    
42484      /**
42485       * Perform + on FP0. That is,
42486       * <PRE>
42487       * dstReg += () [srcBase + srcDisp]
42488       * </PRE>
42489       *
42490       * @param dstReg destination register, must be FP0
42491       * @param srcBase source base register
42492       * @param srcDisp source displacement
42493       */
42494      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42495      public final void emitFADD_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
42496        int miStart = mi;
42497        // Must store result to top of stack
42498        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42499        setMachineCodes(mi++, (byte) 0xD8);
42500        // The register'' 0 is really part of the opcode
42501        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0));
42502        if (lister != null) lister.RRD(miStart, "FADD", dstReg, srcBase, srcDisp);
42503      }
42504    
42505      /**
42506       * Perform + on FP0. That is,
42507       * <PRE>
42508       * dstReg += () [srcBase]
42509       * </PRE>
42510       *
42511       * @param dstReg destination register, must be FP0
42512       * @param srcBase source base register
42513       */
42514      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42515      public final void emitFADD_Reg_RegInd(FPR dstReg, GPR srcBase) {
42516        int miStart = mi;
42517        // Must store result to top of stack
42518        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42519        setMachineCodes(mi++, (byte) 0xD8);
42520        // The register'' 0 is really part of the opcode
42521        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0));
42522        if (lister != null) lister.RRN(miStart, "FADD", dstReg, srcBase);
42523      }
42524    
42525      /**
42526       * Perform + on dstReg. That is,
42527       * <PRE>
42528       * dstReg += () [srcBase + srcIndex<<srcScale + srcDisp]
42529       * </PRE>
42530       *
42531       * @param dstReg destination register, must be FP0
42532       * @param srcBase source base register
42533       * @param srcIndex source index register
42534       * @param srcScale source scale
42535       * @param srcDisp source displacement
42536       */
42537      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
42538      public final void emitFADD_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
42539        int miStart = mi;
42540        // Must store result to top of stack
42541        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42542        setMachineCodes(mi++, (byte) 0xD8);
42543        // The register'' 0 is really part of the opcode
42544        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0));
42545        if (lister != null) lister.RRXD(miStart, "FADD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
42546      }
42547    
42548      /**
42549       * Perform + on FP0. That is,
42550       * <PRE>
42551       * dstReg += () [srcIndex<<srcScale + srcDisp]
42552       * </PRE>
42553       *
42554       * @param dstReg destination register, must be FP0
42555       * @param srcIndex source index register
42556       * @param srcScale source scale
42557       * @param srcDisp source displacement
42558       */
42559      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42560      public final void emitFADD_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
42561        int miStart = mi;
42562        // Must store result to top of stack
42563        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42564        setMachineCodes(mi++, (byte) 0xD8);
42565        // The register'' 0 is really part of the opcode
42566        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0));
42567        if (lister != null) lister.RRFD(miStart, "FADD", dstReg, srcIndex, srcScale, srcDisp);
42568      }
42569    
42570      /**
42571       * Perform + on FP0. That is,
42572       * <PRE>
42573       * dstReg += () [srcDisp]
42574       * </PRE>
42575       *
42576       * @param dstReg destination register, must be FP0
42577       * @param srcDisp source displacement
42578       */
42579      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
42580      public final void emitFADD_Reg_Abs(FPR dstReg, Address srcDisp) {
42581        int miStart = mi;
42582        // Must store result to top of stack
42583        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42584        setMachineCodes(mi++, (byte) 0xD8);
42585        // The register'' 0 is really part of the opcode
42586        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0));
42587        if (lister != null) lister.RRA(miStart, "FADD", dstReg, srcDisp);
42588      }
42589    
42590      /**
42591       * Perform + on FP0. That is,
42592       * <PRE>
42593       * dstReg += (quad) [srcBase + srcDisp]
42594       * </PRE>
42595       *
42596       * @param dstReg destination register, must be FP0
42597       * @param srcBase source base register
42598       * @param srcDisp source displacement
42599       */
42600      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42601      public final void emitFADD_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) {
42602        int miStart = mi;
42603        // Must store result to top of stack
42604        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42605        setMachineCodes(mi++, (byte) 0xDC);
42606        // The register'' 0 is really part of the opcode
42607        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0));
42608        if (lister != null) lister.RRD(miStart, "FADD", dstReg, srcBase, srcDisp);
42609      }
42610    
42611      /**
42612       * Perform + on FP0. That is,
42613       * <PRE>
42614       * dstReg += (quad) [srcBase]
42615       * </PRE>
42616       *
42617       * @param dstReg destination register, must be FP0
42618       * @param srcBase source base register
42619       */
42620      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42621      public final void emitFADD_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) {
42622        int miStart = mi;
42623        // Must store result to top of stack
42624        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42625        setMachineCodes(mi++, (byte) 0xDC);
42626        // The register'' 0 is really part of the opcode
42627        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0));
42628        if (lister != null) lister.RRN(miStart, "FADD", dstReg, srcBase);
42629      }
42630    
42631      /**
42632       * Perform + on dstReg. That is,
42633       * <PRE>
42634       * dstReg += (quad) [srcBase + srcIndex<<srcScale + srcDisp]
42635       * </PRE>
42636       *
42637       * @param dstReg destination register, must be FP0
42638       * @param srcBase source base register
42639       * @param srcIndex source index register
42640       * @param srcScale source scale
42641       * @param srcDisp source displacement
42642       */
42643      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
42644      public final void emitFADD_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
42645        int miStart = mi;
42646        // Must store result to top of stack
42647        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42648        setMachineCodes(mi++, (byte) 0xDC);
42649        // The register'' 0 is really part of the opcode
42650        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0));
42651        if (lister != null) lister.RRXD(miStart, "FADD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
42652      }
42653    
42654      /**
42655       * Perform + on FP0. That is,
42656       * <PRE>
42657       * dstReg += (quad) [srcIndex<<srcScale + srcDisp]
42658       * </PRE>
42659       *
42660       * @param dstReg destination register, must be FP0
42661       * @param srcIndex source index register
42662       * @param srcScale source scale
42663       * @param srcDisp source displacement
42664       */
42665      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42666      public final void emitFADD_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
42667        int miStart = mi;
42668        // Must store result to top of stack
42669        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42670        setMachineCodes(mi++, (byte) 0xDC);
42671        // The register'' 0 is really part of the opcode
42672        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0));
42673        if (lister != null) lister.RRFD(miStart, "FADD", dstReg, srcIndex, srcScale, srcDisp);
42674      }
42675    
42676      /**
42677       * Perform + on FP0. That is,
42678       * <PRE>
42679       * dstReg += (quad) [srcDisp]
42680       * </PRE>
42681       *
42682       * @param dstReg destination register, must be FP0
42683       * @param srcDisp source displacement
42684       */
42685      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
42686      public final void emitFADD_Reg_Abs_Quad(FPR dstReg, Address srcDisp) {
42687        int miStart = mi;
42688        // Must store result to top of stack
42689        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42690        setMachineCodes(mi++, (byte) 0xDC);
42691        // The register'' 0 is really part of the opcode
42692        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0));
42693        if (lister != null) lister.RRA(miStart, "FADD", dstReg, srcDisp);
42694      }
42695    
42696      /**
42697       * Perform + on FP0. That is,
42698       * <PRE>
42699       * dstReg += () [srcBase + srcDisp]
42700       * </PRE>
42701       *
42702       * @param dstReg destination register, must be FP0
42703       * @param srcBase source base register
42704       * @param srcDisp source displacement
42705       */
42706      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42707      public final void emitFIADD_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
42708        int miStart = mi;
42709        // Must store result to top of stack
42710        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42711        setMachineCodes(mi++, (byte) 0xDA);
42712        // The register'' 0 is really part of the opcode
42713        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0));
42714        if (lister != null) lister.RRD(miStart, "FIADD", dstReg, srcBase, srcDisp);
42715      }
42716    
42717      /**
42718       * Perform + on FP0. That is,
42719       * <PRE>
42720       * dstReg += () [srcBase]
42721       * </PRE>
42722       *
42723       * @param dstReg destination register, must be FP0
42724       * @param srcBase source base register
42725       */
42726      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42727      public final void emitFIADD_Reg_RegInd(FPR dstReg, GPR srcBase) {
42728        int miStart = mi;
42729        // Must store result to top of stack
42730        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42731        setMachineCodes(mi++, (byte) 0xDA);
42732        // The register'' 0 is really part of the opcode
42733        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0));
42734        if (lister != null) lister.RRN(miStart, "FIADD", dstReg, srcBase);
42735      }
42736    
42737      /**
42738       * Perform + on dstReg. That is,
42739       * <PRE>
42740       * dstReg += () [srcBase + srcIndex<<srcScale + srcDisp]
42741       * </PRE>
42742       *
42743       * @param dstReg destination register, must be FP0
42744       * @param srcBase source base register
42745       * @param srcIndex source index register
42746       * @param srcScale source scale
42747       * @param srcDisp source displacement
42748       */
42749      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
42750      public final void emitFIADD_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
42751        int miStart = mi;
42752        // Must store result to top of stack
42753        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42754        setMachineCodes(mi++, (byte) 0xDA);
42755        // The register'' 0 is really part of the opcode
42756        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0));
42757        if (lister != null) lister.RRXD(miStart, "FIADD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
42758      }
42759    
42760      /**
42761       * Perform + on FP0. That is,
42762       * <PRE>
42763       * dstReg += () [srcIndex<<srcScale + srcDisp]
42764       * </PRE>
42765       *
42766       * @param dstReg destination register, must be FP0
42767       * @param srcIndex source index register
42768       * @param srcScale source scale
42769       * @param srcDisp source displacement
42770       */
42771      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42772      public final void emitFIADD_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
42773        int miStart = mi;
42774        // Must store result to top of stack
42775        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42776        setMachineCodes(mi++, (byte) 0xDA);
42777        // The register'' 0 is really part of the opcode
42778        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0));
42779        if (lister != null) lister.RRFD(miStart, "FIADD", dstReg, srcIndex, srcScale, srcDisp);
42780      }
42781    
42782      /**
42783       * Perform + on FP0. That is,
42784       * <PRE>
42785       * dstReg += () [srcDisp]
42786       * </PRE>
42787       *
42788       * @param dstReg destination register, must be FP0
42789       * @param srcDisp source displacement
42790       */
42791      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
42792      public final void emitFIADD_Reg_Abs(FPR dstReg, Address srcDisp) {
42793        int miStart = mi;
42794        // Must store result to top of stack
42795        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42796        setMachineCodes(mi++, (byte) 0xDA);
42797        // The register'' 0 is really part of the opcode
42798        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0));
42799        if (lister != null) lister.RRA(miStart, "FIADD", dstReg, srcDisp);
42800      }
42801    
42802      /**
42803       * Perform + on FP0. That is,
42804       * <PRE>
42805       * dstReg += (word) [srcBase + srcDisp]
42806       * </PRE>
42807       *
42808       * @param dstReg destination register, must be FP0
42809       * @param srcBase source base register
42810       * @param srcDisp source displacement
42811       */
42812      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42813      public final void emitFIADD_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) {
42814        int miStart = mi;
42815        // Must store result to top of stack
42816        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42817        setMachineCodes(mi++, (byte) 0xDE);
42818        // The register'' 0 is really part of the opcode
42819        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(0));
42820        if (lister != null) lister.RRD(miStart, "FIADD", dstReg, srcBase, srcDisp);
42821      }
42822    
42823      /**
42824       * Perform + on FP0. That is,
42825       * <PRE>
42826       * dstReg += (word) [srcBase]
42827       * </PRE>
42828       *
42829       * @param dstReg destination register, must be FP0
42830       * @param srcBase source base register
42831       */
42832      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42833      public final void emitFIADD_Reg_RegInd_Word(FPR dstReg, GPR srcBase) {
42834        int miStart = mi;
42835        // Must store result to top of stack
42836        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42837        setMachineCodes(mi++, (byte) 0xDE);
42838        // The register'' 0 is really part of the opcode
42839        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(0));
42840        if (lister != null) lister.RRN(miStart, "FIADD", dstReg, srcBase);
42841      }
42842    
42843      /**
42844       * Perform + on dstReg. That is,
42845       * <PRE>
42846       * dstReg += (word) [srcBase + srcIndex<<srcScale + srcDisp]
42847       * </PRE>
42848       *
42849       * @param dstReg destination register, must be FP0
42850       * @param srcBase source base register
42851       * @param srcIndex source index register
42852       * @param srcScale source scale
42853       * @param srcDisp source displacement
42854       */
42855      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
42856      public final void emitFIADD_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
42857        int miStart = mi;
42858        // Must store result to top of stack
42859        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42860        setMachineCodes(mi++, (byte) 0xDE);
42861        // The register'' 0 is really part of the opcode
42862        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(0));
42863        if (lister != null) lister.RRXD(miStart, "FIADD", dstReg, srcBase, srcIndex, srcScale, srcDisp);
42864      }
42865    
42866      /**
42867       * Perform + on FP0. That is,
42868       * <PRE>
42869       * dstReg += (word) [srcIndex<<srcScale + srcDisp]
42870       * </PRE>
42871       *
42872       * @param dstReg destination register, must be FP0
42873       * @param srcIndex source index register
42874       * @param srcScale source scale
42875       * @param srcDisp source displacement
42876       */
42877      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42878      public final void emitFIADD_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
42879        int miStart = mi;
42880        // Must store result to top of stack
42881        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42882        setMachineCodes(mi++, (byte) 0xDE);
42883        // The register'' 0 is really part of the opcode
42884        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(0));
42885        if (lister != null) lister.RRFD(miStart, "FIADD", dstReg, srcIndex, srcScale, srcDisp);
42886      }
42887    
42888      /**
42889       * Perform + on FP0. That is,
42890       * <PRE>
42891       * dstReg += (word) [srcDisp]
42892       * </PRE>
42893       *
42894       * @param dstReg destination register, must be FP0
42895       * @param srcDisp source displacement
42896       */
42897      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
42898      public final void emitFIADD_Reg_Abs_Word(FPR dstReg, Address srcDisp) {
42899        int miStart = mi;
42900        // Must store result to top of stack
42901        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42902        setMachineCodes(mi++, (byte) 0xDE);
42903        // The register'' 0 is really part of the opcode
42904        emitAbsRegOperands(srcDisp, GPR.getForOpcode(0));
42905        if (lister != null) lister.RRA(miStart, "FIADD", dstReg, srcDisp);
42906      }
42907    
42908      /**
42909       * Perform + either to or from FP0. That is,
42910       * <PRE>
42911       * dstReg += srcReg
42912       * </PRE>
42913       *
42914       * @param dstReg destination register, this or srcReg must be FP0
42915       * @param srcReg source register, this or dstReg must be FP0
42916       */
42917      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42918      public final void emitFADD_Reg_Reg(FPR dstReg, FPR srcReg) {
42919        int miStart = mi;
42920        if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0);
42921        if (dstReg == FP0) {
42922          setMachineCodes(mi++, (byte) 0xD8);
42923          setMachineCodes(mi++, (byte) (0xC0 | srcReg.value()));
42924        } else if (srcReg == FP0) {
42925          setMachineCodes(mi++, (byte) 0xDC);
42926          setMachineCodes(mi++, (byte) (0xC0 | dstReg.value()));
42927        }
42928        if (lister != null) lister.RR(miStart, "FADD", dstReg, srcReg);
42929      }
42930    
42931      /**
42932       * Perform + then pop stack. That is,
42933       * <PRE>
42934       * srcReg += ST(0); pop stack
42935       * </PRE>
42936       *
42937       * @param dstReg destination register
42938       * @param srcReg source register
42939       */
42940      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42941      public final void emitFADDP_Reg_Reg(FPR dstReg, FPR srcReg) {
42942        int miStart = mi;
42943        if (VM.VerifyAssertions) VM._assert(srcReg == FP0);
42944        setMachineCodes(mi++, (byte) 0xDE);
42945        setMachineCodes(mi++, (byte) (0xC0 | dstReg.value()));
42946        if (lister != null) lister.R(miStart, "FADDP", dstReg);
42947      }
42948    
42949      /**
42950       * Perform / on FP0. That is,
42951       * <PRE>
42952       * dstReg /= () [srcBase + srcDisp]
42953       * </PRE>
42954       *
42955       * @param dstReg destination register, must be FP0
42956       * @param srcBase source base register
42957       * @param srcDisp source displacement
42958       */
42959      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42960      public final void emitFDIV_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
42961        int miStart = mi;
42962        // Must store result to top of stack
42963        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42964        setMachineCodes(mi++, (byte) 0xD8);
42965        // The register'' 6 is really part of the opcode
42966        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(6));
42967        if (lister != null) lister.RRD(miStart, "FDIV", dstReg, srcBase, srcDisp);
42968      }
42969    
42970      /**
42971       * Perform / on FP0. That is,
42972       * <PRE>
42973       * dstReg /= () [srcBase]
42974       * </PRE>
42975       *
42976       * @param dstReg destination register, must be FP0
42977       * @param srcBase source base register
42978       */
42979      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
42980      public final void emitFDIV_Reg_RegInd(FPR dstReg, GPR srcBase) {
42981        int miStart = mi;
42982        // Must store result to top of stack
42983        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
42984        setMachineCodes(mi++, (byte) 0xD8);
42985        // The register'' 6 is really part of the opcode
42986        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(6));
42987        if (lister != null) lister.RRN(miStart, "FDIV", dstReg, srcBase);
42988      }
42989    
42990      /**
42991       * Perform / on dstReg. That is,
42992       * <PRE>
42993       * dstReg /= () [srcBase + srcIndex<<srcScale + srcDisp]
42994       * </PRE>
42995       *
42996       * @param dstReg destination register, must be FP0
42997       * @param srcBase source base register
42998       * @param srcIndex source index register
42999       * @param srcScale source scale
43000       * @param srcDisp source displacement
43001       */
43002      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
43003      public final void emitFDIV_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
43004        int miStart = mi;
43005        // Must store result to top of stack
43006        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43007        setMachineCodes(mi++, (byte) 0xD8);
43008        // The register'' 6 is really part of the opcode
43009        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(6));
43010        if (lister != null) lister.RRXD(miStart, "FDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
43011      }
43012    
43013      /**
43014       * Perform / on FP0. That is,
43015       * <PRE>
43016       * dstReg /= () [srcIndex<<srcScale + srcDisp]
43017       * </PRE>
43018       *
43019       * @param dstReg destination register, must be FP0
43020       * @param srcIndex source index register
43021       * @param srcScale source scale
43022       * @param srcDisp source displacement
43023       */
43024      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43025      public final void emitFDIV_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
43026        int miStart = mi;
43027        // Must store result to top of stack
43028        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43029        setMachineCodes(mi++, (byte) 0xD8);
43030        // The register'' 6 is really part of the opcode
43031        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(6));
43032        if (lister != null) lister.RRFD(miStart, "FDIV", dstReg, srcIndex, srcScale, srcDisp);
43033      }
43034    
43035      /**
43036       * Perform / on FP0. That is,
43037       * <PRE>
43038       * dstReg /= () [srcDisp]
43039       * </PRE>
43040       *
43041       * @param dstReg destination register, must be FP0
43042       * @param srcDisp source displacement
43043       */
43044      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
43045      public final void emitFDIV_Reg_Abs(FPR dstReg, Address srcDisp) {
43046        int miStart = mi;
43047        // Must store result to top of stack
43048        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43049        setMachineCodes(mi++, (byte) 0xD8);
43050        // The register'' 6 is really part of the opcode
43051        emitAbsRegOperands(srcDisp, GPR.getForOpcode(6));
43052        if (lister != null) lister.RRA(miStart, "FDIV", dstReg, srcDisp);
43053      }
43054    
43055      /**
43056       * Perform / on FP0. That is,
43057       * <PRE>
43058       * dstReg /= (quad) [srcBase + srcDisp]
43059       * </PRE>
43060       *
43061       * @param dstReg destination register, must be FP0
43062       * @param srcBase source base register
43063       * @param srcDisp source displacement
43064       */
43065      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43066      public final void emitFDIV_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) {
43067        int miStart = mi;
43068        // Must store result to top of stack
43069        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43070        setMachineCodes(mi++, (byte) 0xDC);
43071        // The register'' 6 is really part of the opcode
43072        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(6));
43073        if (lister != null) lister.RRD(miStart, "FDIV", dstReg, srcBase, srcDisp);
43074      }
43075    
43076      /**
43077       * Perform / on FP0. That is,
43078       * <PRE>
43079       * dstReg /= (quad) [srcBase]
43080       * </PRE>
43081       *
43082       * @param dstReg destination register, must be FP0
43083       * @param srcBase source base register
43084       */
43085      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43086      public final void emitFDIV_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) {
43087        int miStart = mi;
43088        // Must store result to top of stack
43089        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43090        setMachineCodes(mi++, (byte) 0xDC);
43091        // The register'' 6 is really part of the opcode
43092        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(6));
43093        if (lister != null) lister.RRN(miStart, "FDIV", dstReg, srcBase);
43094      }
43095    
43096      /**
43097       * Perform / on dstReg. That is,
43098       * <PRE>
43099       * dstReg /= (quad) [srcBase + srcIndex<<srcScale + srcDisp]
43100       * </PRE>
43101       *
43102       * @param dstReg destination register, must be FP0
43103       * @param srcBase source base register
43104       * @param srcIndex source index register
43105       * @param srcScale source scale
43106       * @param srcDisp source displacement
43107       */
43108      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
43109      public final void emitFDIV_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
43110        int miStart = mi;
43111        // Must store result to top of stack
43112        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43113        setMachineCodes(mi++, (byte) 0xDC);
43114        // The register'' 6 is really part of the opcode
43115        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(6));
43116        if (lister != null) lister.RRXD(miStart, "FDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
43117      }
43118    
43119      /**
43120       * Perform / on FP0. That is,
43121       * <PRE>
43122       * dstReg /= (quad) [srcIndex<<srcScale + srcDisp]
43123       * </PRE>
43124       *
43125       * @param dstReg destination register, must be FP0
43126       * @param srcIndex source index register
43127       * @param srcScale source scale
43128       * @param srcDisp source displacement
43129       */
43130      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43131      public final void emitFDIV_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
43132        int miStart = mi;
43133        // Must store result to top of stack
43134        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43135        setMachineCodes(mi++, (byte) 0xDC);
43136        // The register'' 6 is really part of the opcode
43137        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(6));
43138        if (lister != null) lister.RRFD(miStart, "FDIV", dstReg, srcIndex, srcScale, srcDisp);
43139      }
43140    
43141      /**
43142       * Perform / on FP0. That is,
43143       * <PRE>
43144       * dstReg /= (quad) [srcDisp]
43145       * </PRE>
43146       *
43147       * @param dstReg destination register, must be FP0
43148       * @param srcDisp source displacement
43149       */
43150      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
43151      public final void emitFDIV_Reg_Abs_Quad(FPR dstReg, Address srcDisp) {
43152        int miStart = mi;
43153        // Must store result to top of stack
43154        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43155        setMachineCodes(mi++, (byte) 0xDC);
43156        // The register'' 6 is really part of the opcode
43157        emitAbsRegOperands(srcDisp, GPR.getForOpcode(6));
43158        if (lister != null) lister.RRA(miStart, "FDIV", dstReg, srcDisp);
43159      }
43160    
43161      /**
43162       * Perform / on FP0. That is,
43163       * <PRE>
43164       * dstReg /= () [srcBase + srcDisp]
43165       * </PRE>
43166       *
43167       * @param dstReg destination register, must be FP0
43168       * @param srcBase source base register
43169       * @param srcDisp source displacement
43170       */
43171      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43172      public final void emitFIDIV_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
43173        int miStart = mi;
43174        // Must store result to top of stack
43175        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43176        setMachineCodes(mi++, (byte) 0xDA);
43177        // The register'' 6 is really part of the opcode
43178        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(6));
43179        if (lister != null) lister.RRD(miStart, "FIDIV", dstReg, srcBase, srcDisp);
43180      }
43181    
43182      /**
43183       * Perform / on FP0. That is,
43184       * <PRE>
43185       * dstReg /= () [srcBase]
43186       * </PRE>
43187       *
43188       * @param dstReg destination register, must be FP0
43189       * @param srcBase source base register
43190       */
43191      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43192      public final void emitFIDIV_Reg_RegInd(FPR dstReg, GPR srcBase) {
43193        int miStart = mi;
43194        // Must store result to top of stack
43195        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43196        setMachineCodes(mi++, (byte) 0xDA);
43197        // The register'' 6 is really part of the opcode
43198        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(6));
43199        if (lister != null) lister.RRN(miStart, "FIDIV", dstReg, srcBase);
43200      }
43201    
43202      /**
43203       * Perform / on dstReg. That is,
43204       * <PRE>
43205       * dstReg /= () [srcBase + srcIndex<<srcScale + srcDisp]
43206       * </PRE>
43207       *
43208       * @param dstReg destination register, must be FP0
43209       * @param srcBase source base register
43210       * @param srcIndex source index register
43211       * @param srcScale source scale
43212       * @param srcDisp source displacement
43213       */
43214      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
43215      public final void emitFIDIV_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
43216        int miStart = mi;
43217        // Must store result to top of stack
43218        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43219        setMachineCodes(mi++, (byte) 0xDA);
43220        // The register'' 6 is really part of the opcode
43221        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(6));
43222        if (lister != null) lister.RRXD(miStart, "FIDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
43223      }
43224    
43225      /**
43226       * Perform / on FP0. That is,
43227       * <PRE>
43228       * dstReg /= () [srcIndex<<srcScale + srcDisp]
43229       * </PRE>
43230       *
43231       * @param dstReg destination register, must be FP0
43232       * @param srcIndex source index register
43233       * @param srcScale source scale
43234       * @param srcDisp source displacement
43235       */
43236      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43237      public final void emitFIDIV_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
43238        int miStart = mi;
43239        // Must store result to top of stack
43240        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43241        setMachineCodes(mi++, (byte) 0xDA);
43242        // The register'' 6 is really part of the opcode
43243        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(6));
43244        if (lister != null) lister.RRFD(miStart, "FIDIV", dstReg, srcIndex, srcScale, srcDisp);
43245      }
43246    
43247      /**
43248       * Perform / on FP0. That is,
43249       * <PRE>
43250       * dstReg /= () [srcDisp]
43251       * </PRE>
43252       *
43253       * @param dstReg destination register, must be FP0
43254       * @param srcDisp source displacement
43255       */
43256      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
43257      public final void emitFIDIV_Reg_Abs(FPR dstReg, Address srcDisp) {
43258        int miStart = mi;
43259        // Must store result to top of stack
43260        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43261        setMachineCodes(mi++, (byte) 0xDA);
43262        // The register'' 6 is really part of the opcode
43263        emitAbsRegOperands(srcDisp, GPR.getForOpcode(6));
43264        if (lister != null) lister.RRA(miStart, "FIDIV", dstReg, srcDisp);
43265      }
43266    
43267      /**
43268       * Perform / on FP0. That is,
43269       * <PRE>
43270       * dstReg /= (word) [srcBase + srcDisp]
43271       * </PRE>
43272       *
43273       * @param dstReg destination register, must be FP0
43274       * @param srcBase source base register
43275       * @param srcDisp source displacement
43276       */
43277      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43278      public final void emitFIDIV_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) {
43279        int miStart = mi;
43280        // Must store result to top of stack
43281        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43282        setMachineCodes(mi++, (byte) 0xDE);
43283        // The register'' 6 is really part of the opcode
43284        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(6));
43285        if (lister != null) lister.RRD(miStart, "FIDIV", dstReg, srcBase, srcDisp);
43286      }
43287    
43288      /**
43289       * Perform / on FP0. That is,
43290       * <PRE>
43291       * dstReg /= (word) [srcBase]
43292       * </PRE>
43293       *
43294       * @param dstReg destination register, must be FP0
43295       * @param srcBase source base register
43296       */
43297      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43298      public final void emitFIDIV_Reg_RegInd_Word(FPR dstReg, GPR srcBase) {
43299        int miStart = mi;
43300        // Must store result to top of stack
43301        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43302        setMachineCodes(mi++, (byte) 0xDE);
43303        // The register'' 6 is really part of the opcode
43304        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(6));
43305        if (lister != null) lister.RRN(miStart, "FIDIV", dstReg, srcBase);
43306      }
43307    
43308      /**
43309       * Perform / on dstReg. That is,
43310       * <PRE>
43311       * dstReg /= (word) [srcBase + srcIndex<<srcScale + srcDisp]
43312       * </PRE>
43313       *
43314       * @param dstReg destination register, must be FP0
43315       * @param srcBase source base register
43316       * @param srcIndex source index register
43317       * @param srcScale source scale
43318       * @param srcDisp source displacement
43319       */
43320      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
43321      public final void emitFIDIV_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
43322        int miStart = mi;
43323        // Must store result to top of stack
43324        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43325        setMachineCodes(mi++, (byte) 0xDE);
43326        // The register'' 6 is really part of the opcode
43327        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(6));
43328        if (lister != null) lister.RRXD(miStart, "FIDIV", dstReg, srcBase, srcIndex, srcScale, srcDisp);
43329      }
43330    
43331      /**
43332       * Perform / on FP0. That is,
43333       * <PRE>
43334       * dstReg /= (word) [srcIndex<<srcScale + srcDisp]
43335       * </PRE>
43336       *
43337       * @param dstReg destination register, must be FP0
43338       * @param srcIndex source index register
43339       * @param srcScale source scale
43340       * @param srcDisp source displacement
43341       */
43342      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43343      public final void emitFIDIV_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
43344        int miStart = mi;
43345        // Must store result to top of stack
43346        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43347        setMachineCodes(mi++, (byte) 0xDE);
43348        // The register'' 6 is really part of the opcode
43349        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(6));
43350        if (lister != null) lister.RRFD(miStart, "FIDIV", dstReg, srcIndex, srcScale, srcDisp);
43351      }
43352    
43353      /**
43354       * Perform / on FP0. That is,
43355       * <PRE>
43356       * dstReg /= (word) [srcDisp]
43357       * </PRE>
43358       *
43359       * @param dstReg destination register, must be FP0
43360       * @param srcDisp source displacement
43361       */
43362      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
43363      public final void emitFIDIV_Reg_Abs_Word(FPR dstReg, Address srcDisp) {
43364        int miStart = mi;
43365        // Must store result to top of stack
43366        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43367        setMachineCodes(mi++, (byte) 0xDE);
43368        // The register'' 6 is really part of the opcode
43369        emitAbsRegOperands(srcDisp, GPR.getForOpcode(6));
43370        if (lister != null) lister.RRA(miStart, "FIDIV", dstReg, srcDisp);
43371      }
43372    
43373      /**
43374       * Perform / either to or from FP0. That is,
43375       * <PRE>
43376       * dstReg /= srcReg
43377       * </PRE>
43378       *
43379       * @param dstReg destination register, this or srcReg must be FP0
43380       * @param srcReg source register, this or dstReg must be FP0
43381       */
43382      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43383      public final void emitFDIV_Reg_Reg(FPR dstReg, FPR srcReg) {
43384        int miStart = mi;
43385        if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0);
43386        if (dstReg == FP0) {
43387          setMachineCodes(mi++, (byte) 0xD8);
43388          setMachineCodes(mi++, (byte) (0xF0 | srcReg.value()));
43389        } else if (srcReg == FP0) {
43390          setMachineCodes(mi++, (byte) 0xDC);
43391          setMachineCodes(mi++, (byte) (0xF8 | dstReg.value()));
43392        }
43393        if (lister != null) lister.RR(miStart, "FDIV", dstReg, srcReg);
43394      }
43395    
43396      /**
43397       * Perform / then pop stack. That is,
43398       * <PRE>
43399       * srcReg /= ST(0); pop stack
43400       * </PRE>
43401       *
43402       * @param dstReg destination register
43403       * @param srcReg source register
43404       */
43405      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43406      public final void emitFDIVP_Reg_Reg(FPR dstReg, FPR srcReg) {
43407        int miStart = mi;
43408        if (VM.VerifyAssertions) VM._assert(srcReg == FP0);
43409        setMachineCodes(mi++, (byte) 0xDE);
43410        setMachineCodes(mi++, (byte) (0xF8 | dstReg.value()));
43411        if (lister != null) lister.R(miStart, "FDIVP", dstReg);
43412      }
43413    
43414      /**
43415       * Perform / on FP0. That is,
43416       * <PRE>
43417       * dstReg /= () [srcBase + srcDisp]
43418       * </PRE>
43419       *
43420       * @param dstReg destination register, must be FP0
43421       * @param srcBase source base register
43422       * @param srcDisp source displacement
43423       */
43424      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43425      public final void emitFDIVR_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
43426        int miStart = mi;
43427        // Must store result to top of stack
43428        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43429        setMachineCodes(mi++, (byte) 0xD8);
43430        // The register'' 7 is really part of the opcode
43431        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(7));
43432        if (lister != null) lister.RRD(miStart, "FDIVR", dstReg, srcBase, srcDisp);
43433      }
43434    
43435      /**
43436       * Perform / on FP0. That is,
43437       * <PRE>
43438       * dstReg /= () [srcBase]
43439       * </PRE>
43440       *
43441       * @param dstReg destination register, must be FP0
43442       * @param srcBase source base register
43443       */
43444      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43445      public final void emitFDIVR_Reg_RegInd(FPR dstReg, GPR srcBase) {
43446        int miStart = mi;
43447        // Must store result to top of stack
43448        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43449        setMachineCodes(mi++, (byte) 0xD8);
43450        // The register'' 7 is really part of the opcode
43451        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(7));
43452        if (lister != null) lister.RRN(miStart, "FDIVR", dstReg, srcBase);
43453      }
43454    
43455      /**
43456       * Perform / on dstReg. That is,
43457       * <PRE>
43458       * dstReg /= () [srcBase + srcIndex<<srcScale + srcDisp]
43459       * </PRE>
43460       *
43461       * @param dstReg destination register, must be FP0
43462       * @param srcBase source base register
43463       * @param srcIndex source index register
43464       * @param srcScale source scale
43465       * @param srcDisp source displacement
43466       */
43467      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
43468      public final void emitFDIVR_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
43469        int miStart = mi;
43470        // Must store result to top of stack
43471        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43472        setMachineCodes(mi++, (byte) 0xD8);
43473        // The register'' 7 is really part of the opcode
43474        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(7));
43475        if (lister != null) lister.RRXD(miStart, "FDIVR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
43476      }
43477    
43478      /**
43479       * Perform / on FP0. That is,
43480       * <PRE>
43481       * dstReg /= () [srcIndex<<srcScale + srcDisp]
43482       * </PRE>
43483       *
43484       * @param dstReg destination register, must be FP0
43485       * @param srcIndex source index register
43486       * @param srcScale source scale
43487       * @param srcDisp source displacement
43488       */
43489      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43490      public final void emitFDIVR_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
43491        int miStart = mi;
43492        // Must store result to top of stack
43493        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43494        setMachineCodes(mi++, (byte) 0xD8);
43495        // The register'' 7 is really part of the opcode
43496        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(7));
43497        if (lister != null) lister.RRFD(miStart, "FDIVR", dstReg, srcIndex, srcScale, srcDisp);
43498      }
43499    
43500      /**
43501       * Perform / on FP0. That is,
43502       * <PRE>
43503       * dstReg /= () [srcDisp]
43504       * </PRE>
43505       *
43506       * @param dstReg destination register, must be FP0
43507       * @param srcDisp source displacement
43508       */
43509      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
43510      public final void emitFDIVR_Reg_Abs(FPR dstReg, Address srcDisp) {
43511        int miStart = mi;
43512        // Must store result to top of stack
43513        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43514        setMachineCodes(mi++, (byte) 0xD8);
43515        // The register'' 7 is really part of the opcode
43516        emitAbsRegOperands(srcDisp, GPR.getForOpcode(7));
43517        if (lister != null) lister.RRA(miStart, "FDIVR", dstReg, srcDisp);
43518      }
43519    
43520      /**
43521       * Perform / on FP0. That is,
43522       * <PRE>
43523       * dstReg /= (quad) [srcBase + srcDisp]
43524       * </PRE>
43525       *
43526       * @param dstReg destination register, must be FP0
43527       * @param srcBase source base register
43528       * @param srcDisp source displacement
43529       */
43530      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43531      public final void emitFDIVR_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) {
43532        int miStart = mi;
43533        // Must store result to top of stack
43534        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43535        setMachineCodes(mi++, (byte) 0xDC);
43536        // The register'' 7 is really part of the opcode
43537        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(7));
43538        if (lister != null) lister.RRD(miStart, "FDIVR", dstReg, srcBase, srcDisp);
43539      }
43540    
43541      /**
43542       * Perform / on FP0. That is,
43543       * <PRE>
43544       * dstReg /= (quad) [srcBase]
43545       * </PRE>
43546       *
43547       * @param dstReg destination register, must be FP0
43548       * @param srcBase source base register
43549       */
43550      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43551      public final void emitFDIVR_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) {
43552        int miStart = mi;
43553        // Must store result to top of stack
43554        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43555        setMachineCodes(mi++, (byte) 0xDC);
43556        // The register'' 7 is really part of the opcode
43557        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(7));
43558        if (lister != null) lister.RRN(miStart, "FDIVR", dstReg, srcBase);
43559      }
43560    
43561      /**
43562       * Perform / on dstReg. That is,
43563       * <PRE>
43564       * dstReg /= (quad) [srcBase + srcIndex<<srcScale + srcDisp]
43565       * </PRE>
43566       *
43567       * @param dstReg destination register, must be FP0
43568       * @param srcBase source base register
43569       * @param srcIndex source index register
43570       * @param srcScale source scale
43571       * @param srcDisp source displacement
43572       */
43573      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
43574      public final void emitFDIVR_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
43575        int miStart = mi;
43576        // Must store result to top of stack
43577        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43578        setMachineCodes(mi++, (byte) 0xDC);
43579        // The register'' 7 is really part of the opcode
43580        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(7));
43581        if (lister != null) lister.RRXD(miStart, "FDIVR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
43582      }
43583    
43584      /**
43585       * Perform / on FP0. That is,
43586       * <PRE>
43587       * dstReg /= (quad) [srcIndex<<srcScale + srcDisp]
43588       * </PRE>
43589       *
43590       * @param dstReg destination register, must be FP0
43591       * @param srcIndex source index register
43592       * @param srcScale source scale
43593       * @param srcDisp source displacement
43594       */
43595      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43596      public final void emitFDIVR_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
43597        int miStart = mi;
43598        // Must store result to top of stack
43599        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43600        setMachineCodes(mi++, (byte) 0xDC);
43601        // The register'' 7 is really part of the opcode
43602        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(7));
43603        if (lister != null) lister.RRFD(miStart, "FDIVR", dstReg, srcIndex, srcScale, srcDisp);
43604      }
43605    
43606      /**
43607       * Perform / on FP0. That is,
43608       * <PRE>
43609       * dstReg /= (quad) [srcDisp]
43610       * </PRE>
43611       *
43612       * @param dstReg destination register, must be FP0
43613       * @param srcDisp source displacement
43614       */
43615      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
43616      public final void emitFDIVR_Reg_Abs_Quad(FPR dstReg, Address srcDisp) {
43617        int miStart = mi;
43618        // Must store result to top of stack
43619        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43620        setMachineCodes(mi++, (byte) 0xDC);
43621        // The register'' 7 is really part of the opcode
43622        emitAbsRegOperands(srcDisp, GPR.getForOpcode(7));
43623        if (lister != null) lister.RRA(miStart, "FDIVR", dstReg, srcDisp);
43624      }
43625    
43626      /**
43627       * Perform / on FP0. That is,
43628       * <PRE>
43629       * dstReg /= () [srcBase + srcDisp]
43630       * </PRE>
43631       *
43632       * @param dstReg destination register, must be FP0
43633       * @param srcBase source base register
43634       * @param srcDisp source displacement
43635       */
43636      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43637      public final void emitFIDIVR_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
43638        int miStart = mi;
43639        // Must store result to top of stack
43640        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43641        setMachineCodes(mi++, (byte) 0xDA);
43642        // The register'' 7 is really part of the opcode
43643        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(7));
43644        if (lister != null) lister.RRD(miStart, "FIDIVR", dstReg, srcBase, srcDisp);
43645      }
43646    
43647      /**
43648       * Perform / on FP0. That is,
43649       * <PRE>
43650       * dstReg /= () [srcBase]
43651       * </PRE>
43652       *
43653       * @param dstReg destination register, must be FP0
43654       * @param srcBase source base register
43655       */
43656      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43657      public final void emitFIDIVR_Reg_RegInd(FPR dstReg, GPR srcBase) {
43658        int miStart = mi;
43659        // Must store result to top of stack
43660        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43661        setMachineCodes(mi++, (byte) 0xDA);
43662        // The register'' 7 is really part of the opcode
43663        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(7));
43664        if (lister != null) lister.RRN(miStart, "FIDIVR", dstReg, srcBase);
43665      }
43666    
43667      /**
43668       * Perform / on dstReg. That is,
43669       * <PRE>
43670       * dstReg /= () [srcBase + srcIndex<<srcScale + srcDisp]
43671       * </PRE>
43672       *
43673       * @param dstReg destination register, must be FP0
43674       * @param srcBase source base register
43675       * @param srcIndex source index register
43676       * @param srcScale source scale
43677       * @param srcDisp source displacement
43678       */
43679      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
43680      public final void emitFIDIVR_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
43681        int miStart = mi;
43682        // Must store result to top of stack
43683        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43684        setMachineCodes(mi++, (byte) 0xDA);
43685        // The register'' 7 is really part of the opcode
43686        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(7));
43687        if (lister != null) lister.RRXD(miStart, "FIDIVR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
43688      }
43689    
43690      /**
43691       * Perform / on FP0. That is,
43692       * <PRE>
43693       * dstReg /= () [srcIndex<<srcScale + srcDisp]
43694       * </PRE>
43695       *
43696       * @param dstReg destination register, must be FP0
43697       * @param srcIndex source index register
43698       * @param srcScale source scale
43699       * @param srcDisp source displacement
43700       */
43701      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43702      public final void emitFIDIVR_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
43703        int miStart = mi;
43704        // Must store result to top of stack
43705        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43706        setMachineCodes(mi++, (byte) 0xDA);
43707        // The register'' 7 is really part of the opcode
43708        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(7));
43709        if (lister != null) lister.RRFD(miStart, "FIDIVR", dstReg, srcIndex, srcScale, srcDisp);
43710      }
43711    
43712      /**
43713       * Perform / on FP0. That is,
43714       * <PRE>
43715       * dstReg /= () [srcDisp]
43716       * </PRE>
43717       *
43718       * @param dstReg destination register, must be FP0
43719       * @param srcDisp source displacement
43720       */
43721      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
43722      public final void emitFIDIVR_Reg_Abs(FPR dstReg, Address srcDisp) {
43723        int miStart = mi;
43724        // Must store result to top of stack
43725        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43726        setMachineCodes(mi++, (byte) 0xDA);
43727        // The register'' 7 is really part of the opcode
43728        emitAbsRegOperands(srcDisp, GPR.getForOpcode(7));
43729        if (lister != null) lister.RRA(miStart, "FIDIVR", dstReg, srcDisp);
43730      }
43731    
43732      /**
43733       * Perform / on FP0. That is,
43734       * <PRE>
43735       * dstReg /= (word) [srcBase + srcDisp]
43736       * </PRE>
43737       *
43738       * @param dstReg destination register, must be FP0
43739       * @param srcBase source base register
43740       * @param srcDisp source displacement
43741       */
43742      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43743      public final void emitFIDIVR_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) {
43744        int miStart = mi;
43745        // Must store result to top of stack
43746        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43747        setMachineCodes(mi++, (byte) 0xDE);
43748        // The register'' 7 is really part of the opcode
43749        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(7));
43750        if (lister != null) lister.RRD(miStart, "FIDIVR", dstReg, srcBase, srcDisp);
43751      }
43752    
43753      /**
43754       * Perform / on FP0. That is,
43755       * <PRE>
43756       * dstReg /= (word) [srcBase]
43757       * </PRE>
43758       *
43759       * @param dstReg destination register, must be FP0
43760       * @param srcBase source base register
43761       */
43762      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43763      public final void emitFIDIVR_Reg_RegInd_Word(FPR dstReg, GPR srcBase) {
43764        int miStart = mi;
43765        // Must store result to top of stack
43766        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43767        setMachineCodes(mi++, (byte) 0xDE);
43768        // The register'' 7 is really part of the opcode
43769        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(7));
43770        if (lister != null) lister.RRN(miStart, "FIDIVR", dstReg, srcBase);
43771      }
43772    
43773      /**
43774       * Perform / on dstReg. That is,
43775       * <PRE>
43776       * dstReg /= (word) [srcBase + srcIndex<<srcScale + srcDisp]
43777       * </PRE>
43778       *
43779       * @param dstReg destination register, must be FP0
43780       * @param srcBase source base register
43781       * @param srcIndex source index register
43782       * @param srcScale source scale
43783       * @param srcDisp source displacement
43784       */
43785      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
43786      public final void emitFIDIVR_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
43787        int miStart = mi;
43788        // Must store result to top of stack
43789        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43790        setMachineCodes(mi++, (byte) 0xDE);
43791        // The register'' 7 is really part of the opcode
43792        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(7));
43793        if (lister != null) lister.RRXD(miStart, "FIDIVR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
43794      }
43795    
43796      /**
43797       * Perform / on FP0. That is,
43798       * <PRE>
43799       * dstReg /= (word) [srcIndex<<srcScale + srcDisp]
43800       * </PRE>
43801       *
43802       * @param dstReg destination register, must be FP0
43803       * @param srcIndex source index register
43804       * @param srcScale source scale
43805       * @param srcDisp source displacement
43806       */
43807      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43808      public final void emitFIDIVR_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
43809        int miStart = mi;
43810        // Must store result to top of stack
43811        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43812        setMachineCodes(mi++, (byte) 0xDE);
43813        // The register'' 7 is really part of the opcode
43814        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(7));
43815        if (lister != null) lister.RRFD(miStart, "FIDIVR", dstReg, srcIndex, srcScale, srcDisp);
43816      }
43817    
43818      /**
43819       * Perform / on FP0. That is,
43820       * <PRE>
43821       * dstReg /= (word) [srcDisp]
43822       * </PRE>
43823       *
43824       * @param dstReg destination register, must be FP0
43825       * @param srcDisp source displacement
43826       */
43827      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
43828      public final void emitFIDIVR_Reg_Abs_Word(FPR dstReg, Address srcDisp) {
43829        int miStart = mi;
43830        // Must store result to top of stack
43831        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43832        setMachineCodes(mi++, (byte) 0xDE);
43833        // The register'' 7 is really part of the opcode
43834        emitAbsRegOperands(srcDisp, GPR.getForOpcode(7));
43835        if (lister != null) lister.RRA(miStart, "FIDIVR", dstReg, srcDisp);
43836      }
43837    
43838      /**
43839       * Perform / either to or from FP0. That is,
43840       * <PRE>
43841       * dstReg /= srcReg
43842       * </PRE>
43843       *
43844       * @param dstReg destination register, this or srcReg must be FP0
43845       * @param srcReg source register, this or dstReg must be FP0
43846       */
43847      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43848      public final void emitFDIVR_Reg_Reg(FPR dstReg, FPR srcReg) {
43849        int miStart = mi;
43850        if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0);
43851        if (dstReg == FP0) {
43852          setMachineCodes(mi++, (byte) 0xD8);
43853          setMachineCodes(mi++, (byte) (0xF8 | srcReg.value()));
43854        } else if (srcReg == FP0) {
43855          setMachineCodes(mi++, (byte) 0xDC);
43856          setMachineCodes(mi++, (byte) (0xF0 | dstReg.value()));
43857        }
43858        if (lister != null) lister.RR(miStart, "FDIVR", dstReg, srcReg);
43859      }
43860    
43861      /**
43862       * Perform / then pop stack. That is,
43863       * <PRE>
43864       * srcReg /= ST(0); pop stack
43865       * </PRE>
43866       *
43867       * @param dstReg destination register
43868       * @param srcReg source register
43869       */
43870      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43871      public final void emitFDIVRP_Reg_Reg(FPR dstReg, FPR srcReg) {
43872        int miStart = mi;
43873        if (VM.VerifyAssertions) VM._assert(srcReg == FP0);
43874        setMachineCodes(mi++, (byte) 0xDE);
43875        setMachineCodes(mi++, (byte) (0xF0 | dstReg.value()));
43876        if (lister != null) lister.R(miStart, "FDIVRP", dstReg);
43877      }
43878    
43879      /**
43880       * Perform x on FP0. That is,
43881       * <PRE>
43882       * dstReg x= () [srcBase + srcDisp]
43883       * </PRE>
43884       *
43885       * @param dstReg destination register, must be FP0
43886       * @param srcBase source base register
43887       * @param srcDisp source displacement
43888       */
43889      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43890      public final void emitFMUL_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
43891        int miStart = mi;
43892        // Must store result to top of stack
43893        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43894        setMachineCodes(mi++, (byte) 0xD8);
43895        // The register'' 1 is really part of the opcode
43896        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(1));
43897        if (lister != null) lister.RRD(miStart, "FMUL", dstReg, srcBase, srcDisp);
43898      }
43899    
43900      /**
43901       * Perform x on FP0. That is,
43902       * <PRE>
43903       * dstReg x= () [srcBase]
43904       * </PRE>
43905       *
43906       * @param dstReg destination register, must be FP0
43907       * @param srcBase source base register
43908       */
43909      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43910      public final void emitFMUL_Reg_RegInd(FPR dstReg, GPR srcBase) {
43911        int miStart = mi;
43912        // Must store result to top of stack
43913        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43914        setMachineCodes(mi++, (byte) 0xD8);
43915        // The register'' 1 is really part of the opcode
43916        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(1));
43917        if (lister != null) lister.RRN(miStart, "FMUL", dstReg, srcBase);
43918      }
43919    
43920      /**
43921       * Perform x on dstReg. That is,
43922       * <PRE>
43923       * dstReg x= () [srcBase + srcIndex<<srcScale + srcDisp]
43924       * </PRE>
43925       *
43926       * @param dstReg destination register, must be FP0
43927       * @param srcBase source base register
43928       * @param srcIndex source index register
43929       * @param srcScale source scale
43930       * @param srcDisp source displacement
43931       */
43932      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
43933      public final void emitFMUL_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
43934        int miStart = mi;
43935        // Must store result to top of stack
43936        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43937        setMachineCodes(mi++, (byte) 0xD8);
43938        // The register'' 1 is really part of the opcode
43939        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(1));
43940        if (lister != null) lister.RRXD(miStart, "FMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp);
43941      }
43942    
43943      /**
43944       * Perform x on FP0. That is,
43945       * <PRE>
43946       * dstReg x= () [srcIndex<<srcScale + srcDisp]
43947       * </PRE>
43948       *
43949       * @param dstReg destination register, must be FP0
43950       * @param srcIndex source index register
43951       * @param srcScale source scale
43952       * @param srcDisp source displacement
43953       */
43954      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43955      public final void emitFMUL_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
43956        int miStart = mi;
43957        // Must store result to top of stack
43958        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43959        setMachineCodes(mi++, (byte) 0xD8);
43960        // The register'' 1 is really part of the opcode
43961        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(1));
43962        if (lister != null) lister.RRFD(miStart, "FMUL", dstReg, srcIndex, srcScale, srcDisp);
43963      }
43964    
43965      /**
43966       * Perform x on FP0. That is,
43967       * <PRE>
43968       * dstReg x= () [srcDisp]
43969       * </PRE>
43970       *
43971       * @param dstReg destination register, must be FP0
43972       * @param srcDisp source displacement
43973       */
43974      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
43975      public final void emitFMUL_Reg_Abs(FPR dstReg, Address srcDisp) {
43976        int miStart = mi;
43977        // Must store result to top of stack
43978        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
43979        setMachineCodes(mi++, (byte) 0xD8);
43980        // The register'' 1 is really part of the opcode
43981        emitAbsRegOperands(srcDisp, GPR.getForOpcode(1));
43982        if (lister != null) lister.RRA(miStart, "FMUL", dstReg, srcDisp);
43983      }
43984    
43985      /**
43986       * Perform x on FP0. That is,
43987       * <PRE>
43988       * dstReg x= (quad) [srcBase + srcDisp]
43989       * </PRE>
43990       *
43991       * @param dstReg destination register, must be FP0
43992       * @param srcBase source base register
43993       * @param srcDisp source displacement
43994       */
43995      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
43996      public final void emitFMUL_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) {
43997        int miStart = mi;
43998        // Must store result to top of stack
43999        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44000        setMachineCodes(mi++, (byte) 0xDC);
44001        // The register'' 1 is really part of the opcode
44002        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(1));
44003        if (lister != null) lister.RRD(miStart, "FMUL", dstReg, srcBase, srcDisp);
44004      }
44005    
44006      /**
44007       * Perform x on FP0. That is,
44008       * <PRE>
44009       * dstReg x= (quad) [srcBase]
44010       * </PRE>
44011       *
44012       * @param dstReg destination register, must be FP0
44013       * @param srcBase source base register
44014       */
44015      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44016      public final void emitFMUL_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) {
44017        int miStart = mi;
44018        // Must store result to top of stack
44019        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44020        setMachineCodes(mi++, (byte) 0xDC);
44021        // The register'' 1 is really part of the opcode
44022        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(1));
44023        if (lister != null) lister.RRN(miStart, "FMUL", dstReg, srcBase);
44024      }
44025    
44026      /**
44027       * Perform x on dstReg. That is,
44028       * <PRE>
44029       * dstReg x= (quad) [srcBase + srcIndex<<srcScale + srcDisp]
44030       * </PRE>
44031       *
44032       * @param dstReg destination register, must be FP0
44033       * @param srcBase source base register
44034       * @param srcIndex source index register
44035       * @param srcScale source scale
44036       * @param srcDisp source displacement
44037       */
44038      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
44039      public final void emitFMUL_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
44040        int miStart = mi;
44041        // Must store result to top of stack
44042        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44043        setMachineCodes(mi++, (byte) 0xDC);
44044        // The register'' 1 is really part of the opcode
44045        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(1));
44046        if (lister != null) lister.RRXD(miStart, "FMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp);
44047      }
44048    
44049      /**
44050       * Perform x on FP0. That is,
44051       * <PRE>
44052       * dstReg x= (quad) [srcIndex<<srcScale + srcDisp]
44053       * </PRE>
44054       *
44055       * @param dstReg destination register, must be FP0
44056       * @param srcIndex source index register
44057       * @param srcScale source scale
44058       * @param srcDisp source displacement
44059       */
44060      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44061      public final void emitFMUL_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
44062        int miStart = mi;
44063        // Must store result to top of stack
44064        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44065        setMachineCodes(mi++, (byte) 0xDC);
44066        // The register'' 1 is really part of the opcode
44067        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(1));
44068        if (lister != null) lister.RRFD(miStart, "FMUL", dstReg, srcIndex, srcScale, srcDisp);
44069      }
44070    
44071      /**
44072       * Perform x on FP0. That is,
44073       * <PRE>
44074       * dstReg x= (quad) [srcDisp]
44075       * </PRE>
44076       *
44077       * @param dstReg destination register, must be FP0
44078       * @param srcDisp source displacement
44079       */
44080      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
44081      public final void emitFMUL_Reg_Abs_Quad(FPR dstReg, Address srcDisp) {
44082        int miStart = mi;
44083        // Must store result to top of stack
44084        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44085        setMachineCodes(mi++, (byte) 0xDC);
44086        // The register'' 1 is really part of the opcode
44087        emitAbsRegOperands(srcDisp, GPR.getForOpcode(1));
44088        if (lister != null) lister.RRA(miStart, "FMUL", dstReg, srcDisp);
44089      }
44090    
44091      /**
44092       * Perform x on FP0. That is,
44093       * <PRE>
44094       * dstReg x= () [srcBase + srcDisp]
44095       * </PRE>
44096       *
44097       * @param dstReg destination register, must be FP0
44098       * @param srcBase source base register
44099       * @param srcDisp source displacement
44100       */
44101      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44102      public final void emitFIMUL_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
44103        int miStart = mi;
44104        // Must store result to top of stack
44105        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44106        setMachineCodes(mi++, (byte) 0xDA);
44107        // The register'' 1 is really part of the opcode
44108        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(1));
44109        if (lister != null) lister.RRD(miStart, "FIMUL", dstReg, srcBase, srcDisp);
44110      }
44111    
44112      /**
44113       * Perform x on FP0. That is,
44114       * <PRE>
44115       * dstReg x= () [srcBase]
44116       * </PRE>
44117       *
44118       * @param dstReg destination register, must be FP0
44119       * @param srcBase source base register
44120       */
44121      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44122      public final void emitFIMUL_Reg_RegInd(FPR dstReg, GPR srcBase) {
44123        int miStart = mi;
44124        // Must store result to top of stack
44125        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44126        setMachineCodes(mi++, (byte) 0xDA);
44127        // The register'' 1 is really part of the opcode
44128        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(1));
44129        if (lister != null) lister.RRN(miStart, "FIMUL", dstReg, srcBase);
44130      }
44131    
44132      /**
44133       * Perform x on dstReg. That is,
44134       * <PRE>
44135       * dstReg x= () [srcBase + srcIndex<<srcScale + srcDisp]
44136       * </PRE>
44137       *
44138       * @param dstReg destination register, must be FP0
44139       * @param srcBase source base register
44140       * @param srcIndex source index register
44141       * @param srcScale source scale
44142       * @param srcDisp source displacement
44143       */
44144      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
44145      public final void emitFIMUL_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
44146        int miStart = mi;
44147        // Must store result to top of stack
44148        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44149        setMachineCodes(mi++, (byte) 0xDA);
44150        // The register'' 1 is really part of the opcode
44151        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(1));
44152        if (lister != null) lister.RRXD(miStart, "FIMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp);
44153      }
44154    
44155      /**
44156       * Perform x on FP0. That is,
44157       * <PRE>
44158       * dstReg x= () [srcIndex<<srcScale + srcDisp]
44159       * </PRE>
44160       *
44161       * @param dstReg destination register, must be FP0
44162       * @param srcIndex source index register
44163       * @param srcScale source scale
44164       * @param srcDisp source displacement
44165       */
44166      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44167      public final void emitFIMUL_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
44168        int miStart = mi;
44169        // Must store result to top of stack
44170        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44171        setMachineCodes(mi++, (byte) 0xDA);
44172        // The register'' 1 is really part of the opcode
44173        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(1));
44174        if (lister != null) lister.RRFD(miStart, "FIMUL", dstReg, srcIndex, srcScale, srcDisp);
44175      }
44176    
44177      /**
44178       * Perform x on FP0. That is,
44179       * <PRE>
44180       * dstReg x= () [srcDisp]
44181       * </PRE>
44182       *
44183       * @param dstReg destination register, must be FP0
44184       * @param srcDisp source displacement
44185       */
44186      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
44187      public final void emitFIMUL_Reg_Abs(FPR dstReg, Address srcDisp) {
44188        int miStart = mi;
44189        // Must store result to top of stack
44190        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44191        setMachineCodes(mi++, (byte) 0xDA);
44192        // The register'' 1 is really part of the opcode
44193        emitAbsRegOperands(srcDisp, GPR.getForOpcode(1));
44194        if (lister != null) lister.RRA(miStart, "FIMUL", dstReg, srcDisp);
44195      }
44196    
44197      /**
44198       * Perform x on FP0. That is,
44199       * <PRE>
44200       * dstReg x= (word) [srcBase + srcDisp]
44201       * </PRE>
44202       *
44203       * @param dstReg destination register, must be FP0
44204       * @param srcBase source base register
44205       * @param srcDisp source displacement
44206       */
44207      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44208      public final void emitFIMUL_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) {
44209        int miStart = mi;
44210        // Must store result to top of stack
44211        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44212        setMachineCodes(mi++, (byte) 0xDE);
44213        // The register'' 1 is really part of the opcode
44214        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(1));
44215        if (lister != null) lister.RRD(miStart, "FIMUL", dstReg, srcBase, srcDisp);
44216      }
44217    
44218      /**
44219       * Perform x on FP0. That is,
44220       * <PRE>
44221       * dstReg x= (word) [srcBase]
44222       * </PRE>
44223       *
44224       * @param dstReg destination register, must be FP0
44225       * @param srcBase source base register
44226       */
44227      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44228      public final void emitFIMUL_Reg_RegInd_Word(FPR dstReg, GPR srcBase) {
44229        int miStart = mi;
44230        // Must store result to top of stack
44231        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44232        setMachineCodes(mi++, (byte) 0xDE);
44233        // The register'' 1 is really part of the opcode
44234        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(1));
44235        if (lister != null) lister.RRN(miStart, "FIMUL", dstReg, srcBase);
44236      }
44237    
44238      /**
44239       * Perform x on dstReg. That is,
44240       * <PRE>
44241       * dstReg x= (word) [srcBase + srcIndex<<srcScale + srcDisp]
44242       * </PRE>
44243       *
44244       * @param dstReg destination register, must be FP0
44245       * @param srcBase source base register
44246       * @param srcIndex source index register
44247       * @param srcScale source scale
44248       * @param srcDisp source displacement
44249       */
44250      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
44251      public final void emitFIMUL_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
44252        int miStart = mi;
44253        // Must store result to top of stack
44254        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44255        setMachineCodes(mi++, (byte) 0xDE);
44256        // The register'' 1 is really part of the opcode
44257        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(1));
44258        if (lister != null) lister.RRXD(miStart, "FIMUL", dstReg, srcBase, srcIndex, srcScale, srcDisp);
44259      }
44260    
44261      /**
44262       * Perform x on FP0. That is,
44263       * <PRE>
44264       * dstReg x= (word) [srcIndex<<srcScale + srcDisp]
44265       * </PRE>
44266       *
44267       * @param dstReg destination register, must be FP0
44268       * @param srcIndex source index register
44269       * @param srcScale source scale
44270       * @param srcDisp source displacement
44271       */
44272      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44273      public final void emitFIMUL_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
44274        int miStart = mi;
44275        // Must store result to top of stack
44276        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44277        setMachineCodes(mi++, (byte) 0xDE);
44278        // The register'' 1 is really part of the opcode
44279        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(1));
44280        if (lister != null) lister.RRFD(miStart, "FIMUL", dstReg, srcIndex, srcScale, srcDisp);
44281      }
44282    
44283      /**
44284       * Perform x on FP0. That is,
44285       * <PRE>
44286       * dstReg x= (word) [srcDisp]
44287       * </PRE>
44288       *
44289       * @param dstReg destination register, must be FP0
44290       * @param srcDisp source displacement
44291       */
44292      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
44293      public final void emitFIMUL_Reg_Abs_Word(FPR dstReg, Address srcDisp) {
44294        int miStart = mi;
44295        // Must store result to top of stack
44296        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44297        setMachineCodes(mi++, (byte) 0xDE);
44298        // The register'' 1 is really part of the opcode
44299        emitAbsRegOperands(srcDisp, GPR.getForOpcode(1));
44300        if (lister != null) lister.RRA(miStart, "FIMUL", dstReg, srcDisp);
44301      }
44302    
44303      /**
44304       * Perform x either to or from FP0. That is,
44305       * <PRE>
44306       * dstReg x= srcReg
44307       * </PRE>
44308       *
44309       * @param dstReg destination register, this or srcReg must be FP0
44310       * @param srcReg source register, this or dstReg must be FP0
44311       */
44312      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44313      public final void emitFMUL_Reg_Reg(FPR dstReg, FPR srcReg) {
44314        int miStart = mi;
44315        if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0);
44316        if (dstReg == FP0) {
44317          setMachineCodes(mi++, (byte) 0xD8);
44318          setMachineCodes(mi++, (byte) (0xC8 | srcReg.value()));
44319        } else if (srcReg == FP0) {
44320          setMachineCodes(mi++, (byte) 0xDC);
44321          setMachineCodes(mi++, (byte) (0xC8 | dstReg.value()));
44322        }
44323        if (lister != null) lister.RR(miStart, "FMUL", dstReg, srcReg);
44324      }
44325    
44326      /**
44327       * Perform x then pop stack. That is,
44328       * <PRE>
44329       * srcReg x= ST(0); pop stack
44330       * </PRE>
44331       *
44332       * @param dstReg destination register
44333       * @param srcReg source register
44334       */
44335      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44336      public final void emitFMULP_Reg_Reg(FPR dstReg, FPR srcReg) {
44337        int miStart = mi;
44338        if (VM.VerifyAssertions) VM._assert(srcReg == FP0);
44339        setMachineCodes(mi++, (byte) 0xDE);
44340        setMachineCodes(mi++, (byte) (0xC8 | dstReg.value()));
44341        if (lister != null) lister.R(miStart, "FMULP", dstReg);
44342      }
44343    
44344      /**
44345       * Perform - on FP0. That is,
44346       * <PRE>
44347       * dstReg -= () [srcBase + srcDisp]
44348       * </PRE>
44349       *
44350       * @param dstReg destination register, must be FP0
44351       * @param srcBase source base register
44352       * @param srcDisp source displacement
44353       */
44354      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44355      public final void emitFSUB_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
44356        int miStart = mi;
44357        // Must store result to top of stack
44358        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44359        setMachineCodes(mi++, (byte) 0xD8);
44360        // The register'' 4 is really part of the opcode
44361        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(4));
44362        if (lister != null) lister.RRD(miStart, "FSUB", dstReg, srcBase, srcDisp);
44363      }
44364    
44365      /**
44366       * Perform - on FP0. That is,
44367       * <PRE>
44368       * dstReg -= () [srcBase]
44369       * </PRE>
44370       *
44371       * @param dstReg destination register, must be FP0
44372       * @param srcBase source base register
44373       */
44374      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44375      public final void emitFSUB_Reg_RegInd(FPR dstReg, GPR srcBase) {
44376        int miStart = mi;
44377        // Must store result to top of stack
44378        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44379        setMachineCodes(mi++, (byte) 0xD8);
44380        // The register'' 4 is really part of the opcode
44381        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(4));
44382        if (lister != null) lister.RRN(miStart, "FSUB", dstReg, srcBase);
44383      }
44384    
44385      /**
44386       * Perform - on dstReg. That is,
44387       * <PRE>
44388       * dstReg -= () [srcBase + srcIndex<<srcScale + srcDisp]
44389       * </PRE>
44390       *
44391       * @param dstReg destination register, must be FP0
44392       * @param srcBase source base register
44393       * @param srcIndex source index register
44394       * @param srcScale source scale
44395       * @param srcDisp source displacement
44396       */
44397      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
44398      public final void emitFSUB_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
44399        int miStart = mi;
44400        // Must store result to top of stack
44401        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44402        setMachineCodes(mi++, (byte) 0xD8);
44403        // The register'' 4 is really part of the opcode
44404        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(4));
44405        if (lister != null) lister.RRXD(miStart, "FSUB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
44406      }
44407    
44408      /**
44409       * Perform - on FP0. That is,
44410       * <PRE>
44411       * dstReg -= () [srcIndex<<srcScale + srcDisp]
44412       * </PRE>
44413       *
44414       * @param dstReg destination register, must be FP0
44415       * @param srcIndex source index register
44416       * @param srcScale source scale
44417       * @param srcDisp source displacement
44418       */
44419      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44420      public final void emitFSUB_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
44421        int miStart = mi;
44422        // Must store result to top of stack
44423        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44424        setMachineCodes(mi++, (byte) 0xD8);
44425        // The register'' 4 is really part of the opcode
44426        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(4));
44427        if (lister != null) lister.RRFD(miStart, "FSUB", dstReg, srcIndex, srcScale, srcDisp);
44428      }
44429    
44430      /**
44431       * Perform - on FP0. That is,
44432       * <PRE>
44433       * dstReg -= () [srcDisp]
44434       * </PRE>
44435       *
44436       * @param dstReg destination register, must be FP0
44437       * @param srcDisp source displacement
44438       */
44439      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
44440      public final void emitFSUB_Reg_Abs(FPR dstReg, Address srcDisp) {
44441        int miStart = mi;
44442        // Must store result to top of stack
44443        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44444        setMachineCodes(mi++, (byte) 0xD8);
44445        // The register'' 4 is really part of the opcode
44446        emitAbsRegOperands(srcDisp, GPR.getForOpcode(4));
44447        if (lister != null) lister.RRA(miStart, "FSUB", dstReg, srcDisp);
44448      }
44449    
44450      /**
44451       * Perform - on FP0. That is,
44452       * <PRE>
44453       * dstReg -= (quad) [srcBase + srcDisp]
44454       * </PRE>
44455       *
44456       * @param dstReg destination register, must be FP0
44457       * @param srcBase source base register
44458       * @param srcDisp source displacement
44459       */
44460      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44461      public final void emitFSUB_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) {
44462        int miStart = mi;
44463        // Must store result to top of stack
44464        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44465        setMachineCodes(mi++, (byte) 0xDC);
44466        // The register'' 4 is really part of the opcode
44467        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(4));
44468        if (lister != null) lister.RRD(miStart, "FSUB", dstReg, srcBase, srcDisp);
44469      }
44470    
44471      /**
44472       * Perform - on FP0. That is,
44473       * <PRE>
44474       * dstReg -= (quad) [srcBase]
44475       * </PRE>
44476       *
44477       * @param dstReg destination register, must be FP0
44478       * @param srcBase source base register
44479       */
44480      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44481      public final void emitFSUB_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) {
44482        int miStart = mi;
44483        // Must store result to top of stack
44484        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44485        setMachineCodes(mi++, (byte) 0xDC);
44486        // The register'' 4 is really part of the opcode
44487        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(4));
44488        if (lister != null) lister.RRN(miStart, "FSUB", dstReg, srcBase);
44489      }
44490    
44491      /**
44492       * Perform - on dstReg. That is,
44493       * <PRE>
44494       * dstReg -= (quad) [srcBase + srcIndex<<srcScale + srcDisp]
44495       * </PRE>
44496       *
44497       * @param dstReg destination register, must be FP0
44498       * @param srcBase source base register
44499       * @param srcIndex source index register
44500       * @param srcScale source scale
44501       * @param srcDisp source displacement
44502       */
44503      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
44504      public final void emitFSUB_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
44505        int miStart = mi;
44506        // Must store result to top of stack
44507        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44508        setMachineCodes(mi++, (byte) 0xDC);
44509        // The register'' 4 is really part of the opcode
44510        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(4));
44511        if (lister != null) lister.RRXD(miStart, "FSUB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
44512      }
44513    
44514      /**
44515       * Perform - on FP0. That is,
44516       * <PRE>
44517       * dstReg -= (quad) [srcIndex<<srcScale + srcDisp]
44518       * </PRE>
44519       *
44520       * @param dstReg destination register, must be FP0
44521       * @param srcIndex source index register
44522       * @param srcScale source scale
44523       * @param srcDisp source displacement
44524       */
44525      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44526      public final void emitFSUB_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
44527        int miStart = mi;
44528        // Must store result to top of stack
44529        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44530        setMachineCodes(mi++, (byte) 0xDC);
44531        // The register'' 4 is really part of the opcode
44532        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(4));
44533        if (lister != null) lister.RRFD(miStart, "FSUB", dstReg, srcIndex, srcScale, srcDisp);
44534      }
44535    
44536      /**
44537       * Perform - on FP0. That is,
44538       * <PRE>
44539       * dstReg -= (quad) [srcDisp]
44540       * </PRE>
44541       *
44542       * @param dstReg destination register, must be FP0
44543       * @param srcDisp source displacement
44544       */
44545      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
44546      public final void emitFSUB_Reg_Abs_Quad(FPR dstReg, Address srcDisp) {
44547        int miStart = mi;
44548        // Must store result to top of stack
44549        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44550        setMachineCodes(mi++, (byte) 0xDC);
44551        // The register'' 4 is really part of the opcode
44552        emitAbsRegOperands(srcDisp, GPR.getForOpcode(4));
44553        if (lister != null) lister.RRA(miStart, "FSUB", dstReg, srcDisp);
44554      }
44555    
44556      /**
44557       * Perform - on FP0. That is,
44558       * <PRE>
44559       * dstReg -= () [srcBase + srcDisp]
44560       * </PRE>
44561       *
44562       * @param dstReg destination register, must be FP0
44563       * @param srcBase source base register
44564       * @param srcDisp source displacement
44565       */
44566      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44567      public final void emitFISUB_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
44568        int miStart = mi;
44569        // Must store result to top of stack
44570        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44571        setMachineCodes(mi++, (byte) 0xDA);
44572        // The register'' 4 is really part of the opcode
44573        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(4));
44574        if (lister != null) lister.RRD(miStart, "FISUB", dstReg, srcBase, srcDisp);
44575      }
44576    
44577      /**
44578       * Perform - on FP0. That is,
44579       * <PRE>
44580       * dstReg -= () [srcBase]
44581       * </PRE>
44582       *
44583       * @param dstReg destination register, must be FP0
44584       * @param srcBase source base register
44585       */
44586      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44587      public final void emitFISUB_Reg_RegInd(FPR dstReg, GPR srcBase) {
44588        int miStart = mi;
44589        // Must store result to top of stack
44590        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44591        setMachineCodes(mi++, (byte) 0xDA);
44592        // The register'' 4 is really part of the opcode
44593        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(4));
44594        if (lister != null) lister.RRN(miStart, "FISUB", dstReg, srcBase);
44595      }
44596    
44597      /**
44598       * Perform - on dstReg. That is,
44599       * <PRE>
44600       * dstReg -= () [srcBase + srcIndex<<srcScale + srcDisp]
44601       * </PRE>
44602       *
44603       * @param dstReg destination register, must be FP0
44604       * @param srcBase source base register
44605       * @param srcIndex source index register
44606       * @param srcScale source scale
44607       * @param srcDisp source displacement
44608       */
44609      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
44610      public final void emitFISUB_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
44611        int miStart = mi;
44612        // Must store result to top of stack
44613        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44614        setMachineCodes(mi++, (byte) 0xDA);
44615        // The register'' 4 is really part of the opcode
44616        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(4));
44617        if (lister != null) lister.RRXD(miStart, "FISUB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
44618      }
44619    
44620      /**
44621       * Perform - on FP0. That is,
44622       * <PRE>
44623       * dstReg -= () [srcIndex<<srcScale + srcDisp]
44624       * </PRE>
44625       *
44626       * @param dstReg destination register, must be FP0
44627       * @param srcIndex source index register
44628       * @param srcScale source scale
44629       * @param srcDisp source displacement
44630       */
44631      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44632      public final void emitFISUB_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
44633        int miStart = mi;
44634        // Must store result to top of stack
44635        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44636        setMachineCodes(mi++, (byte) 0xDA);
44637        // The register'' 4 is really part of the opcode
44638        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(4));
44639        if (lister != null) lister.RRFD(miStart, "FISUB", dstReg, srcIndex, srcScale, srcDisp);
44640      }
44641    
44642      /**
44643       * Perform - on FP0. That is,
44644       * <PRE>
44645       * dstReg -= () [srcDisp]
44646       * </PRE>
44647       *
44648       * @param dstReg destination register, must be FP0
44649       * @param srcDisp source displacement
44650       */
44651      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
44652      public final void emitFISUB_Reg_Abs(FPR dstReg, Address srcDisp) {
44653        int miStart = mi;
44654        // Must store result to top of stack
44655        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44656        setMachineCodes(mi++, (byte) 0xDA);
44657        // The register'' 4 is really part of the opcode
44658        emitAbsRegOperands(srcDisp, GPR.getForOpcode(4));
44659        if (lister != null) lister.RRA(miStart, "FISUB", dstReg, srcDisp);
44660      }
44661    
44662      /**
44663       * Perform - on FP0. That is,
44664       * <PRE>
44665       * dstReg -= (word) [srcBase + srcDisp]
44666       * </PRE>
44667       *
44668       * @param dstReg destination register, must be FP0
44669       * @param srcBase source base register
44670       * @param srcDisp source displacement
44671       */
44672      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44673      public final void emitFISUB_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) {
44674        int miStart = mi;
44675        // Must store result to top of stack
44676        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44677        setMachineCodes(mi++, (byte) 0xDE);
44678        // The register'' 4 is really part of the opcode
44679        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(4));
44680        if (lister != null) lister.RRD(miStart, "FISUB", dstReg, srcBase, srcDisp);
44681      }
44682    
44683      /**
44684       * Perform - on FP0. That is,
44685       * <PRE>
44686       * dstReg -= (word) [srcBase]
44687       * </PRE>
44688       *
44689       * @param dstReg destination register, must be FP0
44690       * @param srcBase source base register
44691       */
44692      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44693      public final void emitFISUB_Reg_RegInd_Word(FPR dstReg, GPR srcBase) {
44694        int miStart = mi;
44695        // Must store result to top of stack
44696        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44697        setMachineCodes(mi++, (byte) 0xDE);
44698        // The register'' 4 is really part of the opcode
44699        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(4));
44700        if (lister != null) lister.RRN(miStart, "FISUB", dstReg, srcBase);
44701      }
44702    
44703      /**
44704       * Perform - on dstReg. That is,
44705       * <PRE>
44706       * dstReg -= (word) [srcBase + srcIndex<<srcScale + srcDisp]
44707       * </PRE>
44708       *
44709       * @param dstReg destination register, must be FP0
44710       * @param srcBase source base register
44711       * @param srcIndex source index register
44712       * @param srcScale source scale
44713       * @param srcDisp source displacement
44714       */
44715      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
44716      public final void emitFISUB_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
44717        int miStart = mi;
44718        // Must store result to top of stack
44719        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44720        setMachineCodes(mi++, (byte) 0xDE);
44721        // The register'' 4 is really part of the opcode
44722        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(4));
44723        if (lister != null) lister.RRXD(miStart, "FISUB", dstReg, srcBase, srcIndex, srcScale, srcDisp);
44724      }
44725    
44726      /**
44727       * Perform - on FP0. That is,
44728       * <PRE>
44729       * dstReg -= (word) [srcIndex<<srcScale + srcDisp]
44730       * </PRE>
44731       *
44732       * @param dstReg destination register, must be FP0
44733       * @param srcIndex source index register
44734       * @param srcScale source scale
44735       * @param srcDisp source displacement
44736       */
44737      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44738      public final void emitFISUB_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
44739        int miStart = mi;
44740        // Must store result to top of stack
44741        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44742        setMachineCodes(mi++, (byte) 0xDE);
44743        // The register'' 4 is really part of the opcode
44744        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(4));
44745        if (lister != null) lister.RRFD(miStart, "FISUB", dstReg, srcIndex, srcScale, srcDisp);
44746      }
44747    
44748      /**
44749       * Perform - on FP0. That is,
44750       * <PRE>
44751       * dstReg -= (word) [srcDisp]
44752       * </PRE>
44753       *
44754       * @param dstReg destination register, must be FP0
44755       * @param srcDisp source displacement
44756       */
44757      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
44758      public final void emitFISUB_Reg_Abs_Word(FPR dstReg, Address srcDisp) {
44759        int miStart = mi;
44760        // Must store result to top of stack
44761        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44762        setMachineCodes(mi++, (byte) 0xDE);
44763        // The register'' 4 is really part of the opcode
44764        emitAbsRegOperands(srcDisp, GPR.getForOpcode(4));
44765        if (lister != null) lister.RRA(miStart, "FISUB", dstReg, srcDisp);
44766      }
44767    
44768      /**
44769       * Perform - either to or from FP0. That is,
44770       * <PRE>
44771       * dstReg -= srcReg
44772       * </PRE>
44773       *
44774       * @param dstReg destination register, this or srcReg must be FP0
44775       * @param srcReg source register, this or dstReg must be FP0
44776       */
44777      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44778      public final void emitFSUB_Reg_Reg(FPR dstReg, FPR srcReg) {
44779        int miStart = mi;
44780        if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0);
44781        if (dstReg == FP0) {
44782          setMachineCodes(mi++, (byte) 0xD8);
44783          setMachineCodes(mi++, (byte) (0xE0 | srcReg.value()));
44784        } else if (srcReg == FP0) {
44785          setMachineCodes(mi++, (byte) 0xDC);
44786          setMachineCodes(mi++, (byte) (0xE8 | dstReg.value()));
44787        }
44788        if (lister != null) lister.RR(miStart, "FSUB", dstReg, srcReg);
44789      }
44790    
44791      /**
44792       * Perform - then pop stack. That is,
44793       * <PRE>
44794       * srcReg -= ST(0); pop stack
44795       * </PRE>
44796       *
44797       * @param dstReg destination register
44798       * @param srcReg source register
44799       */
44800      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44801      public final void emitFSUBP_Reg_Reg(FPR dstReg, FPR srcReg) {
44802        int miStart = mi;
44803        if (VM.VerifyAssertions) VM._assert(srcReg == FP0);
44804        setMachineCodes(mi++, (byte) 0xDE);
44805        setMachineCodes(mi++, (byte) (0xE8 | dstReg.value()));
44806        if (lister != null) lister.R(miStart, "FSUBP", dstReg);
44807      }
44808    
44809      /**
44810       * Perform - on FP0. That is,
44811       * <PRE>
44812       * dstReg -= () [srcBase + srcDisp]
44813       * </PRE>
44814       *
44815       * @param dstReg destination register, must be FP0
44816       * @param srcBase source base register
44817       * @param srcDisp source displacement
44818       */
44819      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44820      public final void emitFSUBR_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
44821        int miStart = mi;
44822        // Must store result to top of stack
44823        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44824        setMachineCodes(mi++, (byte) 0xD8);
44825        // The register'' 5 is really part of the opcode
44826        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(5));
44827        if (lister != null) lister.RRD(miStart, "FSUBR", dstReg, srcBase, srcDisp);
44828      }
44829    
44830      /**
44831       * Perform - on FP0. That is,
44832       * <PRE>
44833       * dstReg -= () [srcBase]
44834       * </PRE>
44835       *
44836       * @param dstReg destination register, must be FP0
44837       * @param srcBase source base register
44838       */
44839      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44840      public final void emitFSUBR_Reg_RegInd(FPR dstReg, GPR srcBase) {
44841        int miStart = mi;
44842        // Must store result to top of stack
44843        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44844        setMachineCodes(mi++, (byte) 0xD8);
44845        // The register'' 5 is really part of the opcode
44846        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(5));
44847        if (lister != null) lister.RRN(miStart, "FSUBR", dstReg, srcBase);
44848      }
44849    
44850      /**
44851       * Perform - on dstReg. That is,
44852       * <PRE>
44853       * dstReg -= () [srcBase + srcIndex<<srcScale + srcDisp]
44854       * </PRE>
44855       *
44856       * @param dstReg destination register, must be FP0
44857       * @param srcBase source base register
44858       * @param srcIndex source index register
44859       * @param srcScale source scale
44860       * @param srcDisp source displacement
44861       */
44862      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
44863      public final void emitFSUBR_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
44864        int miStart = mi;
44865        // Must store result to top of stack
44866        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44867        setMachineCodes(mi++, (byte) 0xD8);
44868        // The register'' 5 is really part of the opcode
44869        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(5));
44870        if (lister != null) lister.RRXD(miStart, "FSUBR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
44871      }
44872    
44873      /**
44874       * Perform - on FP0. That is,
44875       * <PRE>
44876       * dstReg -= () [srcIndex<<srcScale + srcDisp]
44877       * </PRE>
44878       *
44879       * @param dstReg destination register, must be FP0
44880       * @param srcIndex source index register
44881       * @param srcScale source scale
44882       * @param srcDisp source displacement
44883       */
44884      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44885      public final void emitFSUBR_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
44886        int miStart = mi;
44887        // Must store result to top of stack
44888        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44889        setMachineCodes(mi++, (byte) 0xD8);
44890        // The register'' 5 is really part of the opcode
44891        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(5));
44892        if (lister != null) lister.RRFD(miStart, "FSUBR", dstReg, srcIndex, srcScale, srcDisp);
44893      }
44894    
44895      /**
44896       * Perform - on FP0. That is,
44897       * <PRE>
44898       * dstReg -= () [srcDisp]
44899       * </PRE>
44900       *
44901       * @param dstReg destination register, must be FP0
44902       * @param srcDisp source displacement
44903       */
44904      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
44905      public final void emitFSUBR_Reg_Abs(FPR dstReg, Address srcDisp) {
44906        int miStart = mi;
44907        // Must store result to top of stack
44908        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44909        setMachineCodes(mi++, (byte) 0xD8);
44910        // The register'' 5 is really part of the opcode
44911        emitAbsRegOperands(srcDisp, GPR.getForOpcode(5));
44912        if (lister != null) lister.RRA(miStart, "FSUBR", dstReg, srcDisp);
44913      }
44914    
44915      /**
44916       * Perform - on FP0. That is,
44917       * <PRE>
44918       * dstReg -= (quad) [srcBase + srcDisp]
44919       * </PRE>
44920       *
44921       * @param dstReg destination register, must be FP0
44922       * @param srcBase source base register
44923       * @param srcDisp source displacement
44924       */
44925      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44926      public final void emitFSUBR_Reg_RegDisp_Quad(FPR dstReg, GPR srcBase, Offset srcDisp) {
44927        int miStart = mi;
44928        // Must store result to top of stack
44929        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44930        setMachineCodes(mi++, (byte) 0xDC);
44931        // The register'' 5 is really part of the opcode
44932        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(5));
44933        if (lister != null) lister.RRD(miStart, "FSUBR", dstReg, srcBase, srcDisp);
44934      }
44935    
44936      /**
44937       * Perform - on FP0. That is,
44938       * <PRE>
44939       * dstReg -= (quad) [srcBase]
44940       * </PRE>
44941       *
44942       * @param dstReg destination register, must be FP0
44943       * @param srcBase source base register
44944       */
44945      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44946      public final void emitFSUBR_Reg_RegInd_Quad(FPR dstReg, GPR srcBase) {
44947        int miStart = mi;
44948        // Must store result to top of stack
44949        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44950        setMachineCodes(mi++, (byte) 0xDC);
44951        // The register'' 5 is really part of the opcode
44952        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(5));
44953        if (lister != null) lister.RRN(miStart, "FSUBR", dstReg, srcBase);
44954      }
44955    
44956      /**
44957       * Perform - on dstReg. That is,
44958       * <PRE>
44959       * dstReg -= (quad) [srcBase + srcIndex<<srcScale + srcDisp]
44960       * </PRE>
44961       *
44962       * @param dstReg destination register, must be FP0
44963       * @param srcBase source base register
44964       * @param srcIndex source index register
44965       * @param srcScale source scale
44966       * @param srcDisp source displacement
44967       */
44968      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
44969      public final void emitFSUBR_Reg_RegIdx_Quad(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
44970        int miStart = mi;
44971        // Must store result to top of stack
44972        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44973        setMachineCodes(mi++, (byte) 0xDC);
44974        // The register'' 5 is really part of the opcode
44975        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(5));
44976        if (lister != null) lister.RRXD(miStart, "FSUBR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
44977      }
44978    
44979      /**
44980       * Perform - on FP0. That is,
44981       * <PRE>
44982       * dstReg -= (quad) [srcIndex<<srcScale + srcDisp]
44983       * </PRE>
44984       *
44985       * @param dstReg destination register, must be FP0
44986       * @param srcIndex source index register
44987       * @param srcScale source scale
44988       * @param srcDisp source displacement
44989       */
44990      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
44991      public final void emitFSUBR_Reg_RegOff_Quad(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
44992        int miStart = mi;
44993        // Must store result to top of stack
44994        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
44995        setMachineCodes(mi++, (byte) 0xDC);
44996        // The register'' 5 is really part of the opcode
44997        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(5));
44998        if (lister != null) lister.RRFD(miStart, "FSUBR", dstReg, srcIndex, srcScale, srcDisp);
44999      }
45000    
45001      /**
45002       * Perform - on FP0. That is,
45003       * <PRE>
45004       * dstReg -= (quad) [srcDisp]
45005       * </PRE>
45006       *
45007       * @param dstReg destination register, must be FP0
45008       * @param srcDisp source displacement
45009       */
45010      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45011      public final void emitFSUBR_Reg_Abs_Quad(FPR dstReg, Address srcDisp) {
45012        int miStart = mi;
45013        // Must store result to top of stack
45014        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45015        setMachineCodes(mi++, (byte) 0xDC);
45016        // The register'' 5 is really part of the opcode
45017        emitAbsRegOperands(srcDisp, GPR.getForOpcode(5));
45018        if (lister != null) lister.RRA(miStart, "FSUBR", dstReg, srcDisp);
45019      }
45020    
45021      /**
45022       * Perform - on FP0. That is,
45023       * <PRE>
45024       * dstReg -= () [srcBase + srcDisp]
45025       * </PRE>
45026       *
45027       * @param dstReg destination register, must be FP0
45028       * @param srcBase source base register
45029       * @param srcDisp source displacement
45030       */
45031      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45032      public final void emitFISUBR_Reg_RegDisp(FPR dstReg, GPR srcBase, Offset srcDisp) {
45033        int miStart = mi;
45034        // Must store result to top of stack
45035        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45036        setMachineCodes(mi++, (byte) 0xDA);
45037        // The register'' 5 is really part of the opcode
45038        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(5));
45039        if (lister != null) lister.RRD(miStart, "FISUBR", dstReg, srcBase, srcDisp);
45040      }
45041    
45042      /**
45043       * Perform - on FP0. That is,
45044       * <PRE>
45045       * dstReg -= () [srcBase]
45046       * </PRE>
45047       *
45048       * @param dstReg destination register, must be FP0
45049       * @param srcBase source base register
45050       */
45051      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45052      public final void emitFISUBR_Reg_RegInd(FPR dstReg, GPR srcBase) {
45053        int miStart = mi;
45054        // Must store result to top of stack
45055        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45056        setMachineCodes(mi++, (byte) 0xDA);
45057        // The register'' 5 is really part of the opcode
45058        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(5));
45059        if (lister != null) lister.RRN(miStart, "FISUBR", dstReg, srcBase);
45060      }
45061    
45062      /**
45063       * Perform - on dstReg. That is,
45064       * <PRE>
45065       * dstReg -= () [srcBase + srcIndex<<srcScale + srcDisp]
45066       * </PRE>
45067       *
45068       * @param dstReg destination register, must be FP0
45069       * @param srcBase source base register
45070       * @param srcIndex source index register
45071       * @param srcScale source scale
45072       * @param srcDisp source displacement
45073       */
45074      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
45075      public final void emitFISUBR_Reg_RegIdx(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
45076        int miStart = mi;
45077        // Must store result to top of stack
45078        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45079        setMachineCodes(mi++, (byte) 0xDA);
45080        // The register'' 5 is really part of the opcode
45081        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(5));
45082        if (lister != null) lister.RRXD(miStart, "FISUBR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
45083      }
45084    
45085      /**
45086       * Perform - on FP0. That is,
45087       * <PRE>
45088       * dstReg -= () [srcIndex<<srcScale + srcDisp]
45089       * </PRE>
45090       *
45091       * @param dstReg destination register, must be FP0
45092       * @param srcIndex source index register
45093       * @param srcScale source scale
45094       * @param srcDisp source displacement
45095       */
45096      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45097      public final void emitFISUBR_Reg_RegOff(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
45098        int miStart = mi;
45099        // Must store result to top of stack
45100        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45101        setMachineCodes(mi++, (byte) 0xDA);
45102        // The register'' 5 is really part of the opcode
45103        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(5));
45104        if (lister != null) lister.RRFD(miStart, "FISUBR", dstReg, srcIndex, srcScale, srcDisp);
45105      }
45106    
45107      /**
45108       * Perform - on FP0. That is,
45109       * <PRE>
45110       * dstReg -= () [srcDisp]
45111       * </PRE>
45112       *
45113       * @param dstReg destination register, must be FP0
45114       * @param srcDisp source displacement
45115       */
45116      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45117      public final void emitFISUBR_Reg_Abs(FPR dstReg, Address srcDisp) {
45118        int miStart = mi;
45119        // Must store result to top of stack
45120        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45121        setMachineCodes(mi++, (byte) 0xDA);
45122        // The register'' 5 is really part of the opcode
45123        emitAbsRegOperands(srcDisp, GPR.getForOpcode(5));
45124        if (lister != null) lister.RRA(miStart, "FISUBR", dstReg, srcDisp);
45125      }
45126    
45127      /**
45128       * Perform - on FP0. That is,
45129       * <PRE>
45130       * dstReg -= (word) [srcBase + srcDisp]
45131       * </PRE>
45132       *
45133       * @param dstReg destination register, must be FP0
45134       * @param srcBase source base register
45135       * @param srcDisp source displacement
45136       */
45137      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45138      public final void emitFISUBR_Reg_RegDisp_Word(FPR dstReg, GPR srcBase, Offset srcDisp) {
45139        int miStart = mi;
45140        // Must store result to top of stack
45141        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45142        setMachineCodes(mi++, (byte) 0xDE);
45143        // The register'' 5 is really part of the opcode
45144        emitRegDispRegOperands(srcBase, srcDisp, GPR.getForOpcode(5));
45145        if (lister != null) lister.RRD(miStart, "FISUBR", dstReg, srcBase, srcDisp);
45146      }
45147    
45148      /**
45149       * Perform - on FP0. That is,
45150       * <PRE>
45151       * dstReg -= (word) [srcBase]
45152       * </PRE>
45153       *
45154       * @param dstReg destination register, must be FP0
45155       * @param srcBase source base register
45156       */
45157      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45158      public final void emitFISUBR_Reg_RegInd_Word(FPR dstReg, GPR srcBase) {
45159        int miStart = mi;
45160        // Must store result to top of stack
45161        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45162        setMachineCodes(mi++, (byte) 0xDE);
45163        // The register'' 5 is really part of the opcode
45164        emitRegIndirectRegOperands(srcBase, GPR.getForOpcode(5));
45165        if (lister != null) lister.RRN(miStart, "FISUBR", dstReg, srcBase);
45166      }
45167    
45168      /**
45169       * Perform - on dstReg. That is,
45170       * <PRE>
45171       * dstReg -= (word) [srcBase + srcIndex<<srcScale + srcDisp]
45172       * </PRE>
45173       *
45174       * @param dstReg destination register, must be FP0
45175       * @param srcBase source base register
45176       * @param srcIndex source index register
45177       * @param srcScale source scale
45178       * @param srcDisp source displacement
45179       */
45180      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2,3})
45181      public final void emitFISUBR_Reg_RegIdx_Word(FPR dstReg, GPR srcBase, GPR srcIndex, short srcScale, Offset srcDisp) {
45182        int miStart = mi;
45183        // Must store result to top of stack
45184        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45185        setMachineCodes(mi++, (byte) 0xDE);
45186        // The register'' 5 is really part of the opcode
45187        emitSIBRegOperands(srcBase, srcIndex, srcScale, srcDisp, GPR.getForOpcode(5));
45188        if (lister != null) lister.RRXD(miStart, "FISUBR", dstReg, srcBase, srcIndex, srcScale, srcDisp);
45189      }
45190    
45191      /**
45192       * Perform - on FP0. That is,
45193       * <PRE>
45194       * dstReg -= (word) [srcIndex<<srcScale + srcDisp]
45195       * </PRE>
45196       *
45197       * @param dstReg destination register, must be FP0
45198       * @param srcIndex source index register
45199       * @param srcScale source scale
45200       * @param srcDisp source displacement
45201       */
45202      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45203      public final void emitFISUBR_Reg_RegOff_Word(FPR dstReg, GPR srcIndex, short srcScale, Offset srcDisp) {
45204        int miStart = mi;
45205        // Must store result to top of stack
45206        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45207        setMachineCodes(mi++, (byte) 0xDE);
45208        // The register'' 5 is really part of the opcode
45209        emitRegOffRegOperands(srcIndex, srcScale, srcDisp, GPR.getForOpcode(5));
45210        if (lister != null) lister.RRFD(miStart, "FISUBR", dstReg, srcIndex, srcScale, srcDisp);
45211      }
45212    
45213      /**
45214       * Perform - on FP0. That is,
45215       * <PRE>
45216       * dstReg -= (word) [srcDisp]
45217       * </PRE>
45218       *
45219       * @param dstReg destination register, must be FP0
45220       * @param srcDisp source displacement
45221       */
45222      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45223      public final void emitFISUBR_Reg_Abs_Word(FPR dstReg, Address srcDisp) {
45224        int miStart = mi;
45225        // Must store result to top of stack
45226        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
45227        setMachineCodes(mi++, (byte) 0xDE);
45228        // The register'' 5 is really part of the opcode
45229        emitAbsRegOperands(srcDisp, GPR.getForOpcode(5));
45230        if (lister != null) lister.RRA(miStart, "FISUBR", dstReg, srcDisp);
45231      }
45232    
45233      /**
45234       * Perform - either to or from FP0. That is,
45235       * <PRE>
45236       * dstReg -= srcReg
45237       * </PRE>
45238       *
45239       * @param dstReg destination register, this or srcReg must be FP0
45240       * @param srcReg source register, this or dstReg must be FP0
45241       */
45242      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45243      public final void emitFSUBR_Reg_Reg(FPR dstReg, FPR srcReg) {
45244        int miStart = mi;
45245        if (VM.VerifyAssertions) VM._assert(srcReg == FP0 || dstReg == FP0);
45246        if (dstReg == FP0) {
45247          setMachineCodes(mi++, (byte) 0xD8);
45248          setMachineCodes(mi++, (byte) (0xE8 | srcReg.value()));
45249        } else if (srcReg == FP0) {
45250          setMachineCodes(mi++, (byte) 0xDC);
45251          setMachineCodes(mi++, (byte) (0xE0 | dstReg.value()));
45252        }
45253        if (lister != null) lister.RR(miStart, "FSUBR", dstReg, srcReg);
45254      }
45255    
45256      /**
45257       * Perform - then pop stack. That is,
45258       * <PRE>
45259       * srcReg -= ST(0); pop stack
45260       * </PRE>
45261       *
45262       * @param dstReg destination register
45263       * @param srcReg source register
45264       */
45265      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45266      public final void emitFSUBRP_Reg_Reg(FPR dstReg, FPR srcReg) {
45267        int miStart = mi;
45268        if (VM.VerifyAssertions) VM._assert(srcReg == FP0);
45269        setMachineCodes(mi++, (byte) 0xDE);
45270        setMachineCodes(mi++, (byte) (0xE0 | dstReg.value()));
45271        if (lister != null) lister.R(miStart, "FSUBRP", dstReg);
45272      }
45273    
45274      /** top of stack loaded from (double word) [reg + disp] */
45275      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45276      public final void emitFLD_Reg_RegDisp(FPR dummy, GPR reg, Offset disp) {
45277        int miStart = mi;
45278        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45279        setMachineCodes(mi++, (byte) 0xD9);
45280        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(0));
45281        if (lister != null) lister.RD(miStart, "FLD", reg, disp);
45282      }
45283    
45284      /** top of stack loaded from (double word) [reg] */
45285      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45286      public final void emitFLD_Reg_RegInd(FPR dummy, GPR reg) {
45287        int miStart = mi;
45288        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45289        setMachineCodes(mi++, (byte) 0xD9);
45290        emitRegIndirectRegOperands(reg, GPR.getForOpcode(0));
45291        if (lister != null) lister.RN(miStart, "FLD", reg);
45292      }
45293    
45294      /** top of stack loaded from (double word) [baseReg + idxReg<<scale + disp] */
45295      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45296      public final void emitFLD_Reg_RegIdx(FPR dummy, GPR baseReg, GPR idxReg, short scale, Offset disp) {
45297        int miStart = mi;
45298        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45299        setMachineCodes(mi++, (byte) 0xD9);
45300        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(0));
45301        if (lister != null) lister.RXD(miStart, "FLD", baseReg, idxReg, scale, disp);
45302      }
45303    
45304      /** top of stack loaded from (double word) [idxReg<<scale + disp] */
45305      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45306      public final void emitFLD_Reg_RegOff(FPR dummy, GPR idxReg, short scale, Offset disp) {
45307        int miStart = mi;
45308        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45309        setMachineCodes(mi++, (byte) 0xD9);
45310        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(0));
45311        if (lister != null) lister.RFD(miStart, "FLD", idxReg, scale, disp);
45312      }
45313    
45314      /** top of stack loaded from (double word) [disp] */
45315      public final void emitFLD_Reg_Abs(FPR dummy, Address disp) {
45316        int miStart = mi;
45317        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45318        setMachineCodes(mi++, (byte) 0xD9);
45319        emitAbsRegOperands(disp, GPR.getForOpcode(0));
45320        if (lister != null) lister.RA(miStart, "FLD", disp);
45321      }
45322    
45323      /** top of stack loaded from (quad) [reg + disp] */
45324      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45325      public final void emitFLD_Reg_RegDisp_Quad(FPR dummy, GPR reg, Offset disp) {
45326        int miStart = mi;
45327        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45328        setMachineCodes(mi++, (byte) 0xDD);
45329        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(0));
45330        if (lister != null) lister.RD(miStart, "FLD", reg, disp);
45331      }
45332    
45333      /** top of stack loaded from (quad) [reg] */
45334      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45335      public final void emitFLD_Reg_RegInd_Quad(FPR dummy, GPR reg) {
45336        int miStart = mi;
45337        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45338        setMachineCodes(mi++, (byte) 0xDD);
45339        emitRegIndirectRegOperands(reg, GPR.getForOpcode(0));
45340        if (lister != null) lister.RN(miStart, "FLD", reg);
45341      }
45342    
45343      /** top of stack loaded from (quad) [baseReg + idxReg<<scale + disp] */
45344      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45345      public final void emitFLD_Reg_RegIdx_Quad(FPR dummy, GPR baseReg, GPR idxReg, short scale, Offset disp) {
45346        int miStart = mi;
45347        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45348        setMachineCodes(mi++, (byte) 0xDD);
45349        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(0));
45350        if (lister != null) lister.RXD(miStart, "FLD", baseReg, idxReg, scale, disp);
45351      }
45352    
45353      /** top of stack loaded from (quad) [idxReg<<scale + disp] */
45354      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45355      public final void emitFLD_Reg_RegOff_Quad(FPR dummy, GPR idxReg, short scale, Offset disp) {
45356        int miStart = mi;
45357        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45358        setMachineCodes(mi++, (byte) 0xDD);
45359        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(0));
45360        if (lister != null) lister.RFD(miStart, "FLD", idxReg, scale, disp);
45361      }
45362    
45363      /** top of stack loaded from (quad) [disp] */
45364      public final void emitFLD_Reg_Abs_Quad(FPR dummy, Address disp) {
45365        int miStart = mi;
45366        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45367        setMachineCodes(mi++, (byte) 0xDD);
45368        emitAbsRegOperands(disp, GPR.getForOpcode(0));
45369        if (lister != null) lister.RA(miStart, "FLD", disp);
45370      }
45371    
45372      /** top of stack loaded from (word) [reg + disp] */
45373      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45374      public final void emitFILD_Reg_RegDisp_Word(FPR dummy, GPR reg, Offset disp) {
45375        int miStart = mi;
45376        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45377        setMachineCodes(mi++, (byte) 0xDF);
45378        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(0));
45379        if (lister != null) lister.RD(miStart, "FILD", reg, disp);
45380      }
45381    
45382      /** top of stack loaded from (word) [reg] */
45383      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45384      public final void emitFILD_Reg_RegInd_Word(FPR dummy, GPR reg) {
45385        int miStart = mi;
45386        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45387        setMachineCodes(mi++, (byte) 0xDF);
45388        emitRegIndirectRegOperands(reg, GPR.getForOpcode(0));
45389        if (lister != null) lister.RN(miStart, "FILD", reg);
45390      }
45391    
45392      /** top of stack loaded from (word) [baseReg + idxReg<<scale + disp] */
45393      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45394      public final void emitFILD_Reg_RegIdx_Word(FPR dummy, GPR baseReg, GPR idxReg, short scale, Offset disp) {
45395        int miStart = mi;
45396        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45397        setMachineCodes(mi++, (byte) 0xDF);
45398        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(0));
45399        if (lister != null) lister.RXD(miStart, "FILD", baseReg, idxReg, scale, disp);
45400      }
45401    
45402      /** top of stack loaded from (word) [idxReg<<scale + disp] */
45403      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45404      public final void emitFILD_Reg_RegOff_Word(FPR dummy, GPR idxReg, short scale, Offset disp) {
45405        int miStart = mi;
45406        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45407        setMachineCodes(mi++, (byte) 0xDF);
45408        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(0));
45409        if (lister != null) lister.RFD(miStart, "FILD", idxReg, scale, disp);
45410      }
45411    
45412      /** top of stack loaded from (word) [disp] */
45413      public final void emitFILD_Reg_Abs_Word(FPR dummy, Address disp) {
45414        int miStart = mi;
45415        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45416        setMachineCodes(mi++, (byte) 0xDF);
45417        emitAbsRegOperands(disp, GPR.getForOpcode(0));
45418        if (lister != null) lister.RA(miStart, "FILD", disp);
45419      }
45420    
45421      /** top of stack loaded from (double word) [reg + disp] */
45422      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45423      public final void emitFILD_Reg_RegDisp(FPR dummy, GPR reg, Offset disp) {
45424        int miStart = mi;
45425        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45426        setMachineCodes(mi++, (byte) 0xDB);
45427        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(0));
45428        if (lister != null) lister.RD(miStart, "FILD", reg, disp);
45429      }
45430    
45431      /** top of stack loaded from (double word) [reg] */
45432      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45433      public final void emitFILD_Reg_RegInd(FPR dummy, GPR reg) {
45434        int miStart = mi;
45435        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45436        setMachineCodes(mi++, (byte) 0xDB);
45437        emitRegIndirectRegOperands(reg, GPR.getForOpcode(0));
45438        if (lister != null) lister.RN(miStart, "FILD", reg);
45439      }
45440    
45441      /** top of stack loaded from (double word) [baseReg + idxReg<<scale + disp] */
45442      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45443      public final void emitFILD_Reg_RegIdx(FPR dummy, GPR baseReg, GPR idxReg, short scale, Offset disp) {
45444        int miStart = mi;
45445        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45446        setMachineCodes(mi++, (byte) 0xDB);
45447        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(0));
45448        if (lister != null) lister.RXD(miStart, "FILD", baseReg, idxReg, scale, disp);
45449      }
45450    
45451      /** top of stack loaded from (double word) [idxReg<<scale + disp] */
45452      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45453      public final void emitFILD_Reg_RegOff(FPR dummy, GPR idxReg, short scale, Offset disp) {
45454        int miStart = mi;
45455        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45456        setMachineCodes(mi++, (byte) 0xDB);
45457        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(0));
45458        if (lister != null) lister.RFD(miStart, "FILD", idxReg, scale, disp);
45459      }
45460    
45461      /** top of stack loaded from (double word) [disp] */
45462      public final void emitFILD_Reg_Abs(FPR dummy, Address disp) {
45463        int miStart = mi;
45464        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45465        setMachineCodes(mi++, (byte) 0xDB);
45466        emitAbsRegOperands(disp, GPR.getForOpcode(0));
45467        if (lister != null) lister.RA(miStart, "FILD", disp);
45468      }
45469    
45470      /** top of stack loaded from (quad) [reg + disp] */
45471      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45472      public final void emitFILD_Reg_RegDisp_Quad(FPR dummy, GPR reg, Offset disp) {
45473        int miStart = mi;
45474        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45475        setMachineCodes(mi++, (byte) 0xDF);
45476        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(5));
45477        if (lister != null) lister.RD(miStart, "FILD", reg, disp);
45478      }
45479    
45480      /** top of stack loaded from (quad) [reg] */
45481      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45482      public final void emitFILD_Reg_RegInd_Quad(FPR dummy, GPR reg) {
45483        int miStart = mi;
45484        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45485        setMachineCodes(mi++, (byte) 0xDF);
45486        emitRegIndirectRegOperands(reg, GPR.getForOpcode(5));
45487        if (lister != null) lister.RN(miStart, "FILD", reg);
45488      }
45489    
45490      /** top of stack loaded from (quad) [baseReg + idxReg<<scale + disp] */
45491      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45492      public final void emitFILD_Reg_RegIdx_Quad(FPR dummy, GPR baseReg, GPR idxReg, short scale, Offset disp) {
45493        int miStart = mi;
45494        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45495        setMachineCodes(mi++, (byte) 0xDF);
45496        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(5));
45497        if (lister != null) lister.RXD(miStart, "FILD", baseReg, idxReg, scale, disp);
45498      }
45499    
45500      /** top of stack loaded from (quad) [idxReg<<scale + disp] */
45501      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45502      public final void emitFILD_Reg_RegOff_Quad(FPR dummy, GPR idxReg, short scale, Offset disp) {
45503        int miStart = mi;
45504        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45505        setMachineCodes(mi++, (byte) 0xDF);
45506        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(5));
45507        if (lister != null) lister.RFD(miStart, "FILD", idxReg, scale, disp);
45508      }
45509    
45510      /** top of stack loaded from (quad) [disp] */
45511      public final void emitFILD_Reg_Abs_Quad(FPR dummy, Address disp) {
45512        int miStart = mi;
45513        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45514        setMachineCodes(mi++, (byte) 0xDF);
45515        emitAbsRegOperands(disp, GPR.getForOpcode(5));
45516        if (lister != null) lister.RA(miStart, "FILD", disp);
45517      }
45518    
45519      /** top of stack stored to (word) [reg + disp] */
45520      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45521      public final void emitFIST_RegDisp_Reg_Word(GPR reg, Offset disp, FPR dummy) {
45522        int miStart = mi;
45523        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45524        setMachineCodes(mi++, (byte) 0xDF);
45525        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(2));
45526        if (lister != null) lister.RD(miStart, "FIST", reg, disp);
45527      }
45528    
45529      /** top of stack stored to (word) [reg] */
45530      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45531      public final void emitFIST_RegInd_Reg_Word(GPR reg, FPR dummy) {
45532        int miStart = mi;
45533        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45534        setMachineCodes(mi++, (byte) 0xDF);
45535        emitRegIndirectRegOperands(reg, GPR.getForOpcode(2));
45536        if (lister != null) lister.RN(miStart, "FIST", reg);
45537      }
45538    
45539      /** top of stack stored to (word) [baseReg + idxReg<<scale + disp] */
45540      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45541      public final void emitFIST_RegIdx_Reg_Word(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) {
45542        int miStart = mi;
45543        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45544        setMachineCodes(mi++, (byte) 0xDF);
45545        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(2));
45546        if (lister != null) lister.RXD(miStart, "FIST", baseReg, idxReg, scale, disp);
45547      }
45548    
45549      /** top of stack stored to (word) [idxReg<<scale + disp] */
45550      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45551      public final void emitFIST_RegOff_Reg_Word(GPR idxReg, short scale, Offset disp, FPR dummy) {
45552        int miStart = mi;
45553        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45554        setMachineCodes(mi++, (byte) 0xDF);
45555        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(2));
45556        if (lister != null) lister.RFD(miStart, "FIST", idxReg, scale, disp);
45557      }
45558    
45559      /** top of stack stored to (word) [disp] */
45560      public final void emitFIST_Abs_Reg_Word(Address disp, FPR dummy) {
45561        int miStart = mi;
45562        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45563        setMachineCodes(mi++, (byte) 0xDF);
45564        emitAbsRegOperands(disp, GPR.getForOpcode(2));
45565        if (lister != null) lister.RA(miStart, "FIST", disp);
45566      }
45567    
45568      /** top of stack stored to (double word) [reg + disp] */
45569      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45570      public final void emitFIST_RegDisp_Reg(GPR reg, Offset disp, FPR dummy) {
45571        int miStart = mi;
45572        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45573        setMachineCodes(mi++, (byte) 0xDB);
45574        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(2));
45575        if (lister != null) lister.RD(miStart, "FIST", reg, disp);
45576      }
45577    
45578      /** top of stack stored to (double word) [reg] */
45579      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45580      public final void emitFIST_RegInd_Reg(GPR reg, FPR dummy) {
45581        int miStart = mi;
45582        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45583        setMachineCodes(mi++, (byte) 0xDB);
45584        emitRegIndirectRegOperands(reg, GPR.getForOpcode(2));
45585        if (lister != null) lister.RN(miStart, "FIST", reg);
45586      }
45587    
45588      /** top of stack stored to (double word) [baseReg + idxReg<<scale + disp] */
45589      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45590      public final void emitFIST_RegIdx_Reg(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) {
45591        int miStart = mi;
45592        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45593        setMachineCodes(mi++, (byte) 0xDB);
45594        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(2));
45595        if (lister != null) lister.RXD(miStart, "FIST", baseReg, idxReg, scale, disp);
45596      }
45597    
45598      /** top of stack stored to (double word) [idxReg<<scale + disp] */
45599      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45600      public final void emitFIST_RegOff_Reg(GPR idxReg, short scale, Offset disp, FPR dummy) {
45601        int miStart = mi;
45602        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45603        setMachineCodes(mi++, (byte) 0xDB);
45604        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(2));
45605        if (lister != null) lister.RFD(miStart, "FIST", idxReg, scale, disp);
45606      }
45607    
45608      /** top of stack stored to (double word) [disp] */
45609      public final void emitFIST_Abs_Reg(Address disp, FPR dummy) {
45610        int miStart = mi;
45611        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45612        setMachineCodes(mi++, (byte) 0xDB);
45613        emitAbsRegOperands(disp, GPR.getForOpcode(2));
45614        if (lister != null) lister.RA(miStart, "FIST", disp);
45615      }
45616    
45617      /** top of stack stored to (word) [reg + disp] */
45618      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45619      public final void emitFISTP_RegDisp_Reg_Word(GPR reg, Offset disp, FPR dummy) {
45620        int miStart = mi;
45621        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45622        setMachineCodes(mi++, (byte) 0xDF);
45623        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(3));
45624        if (lister != null) lister.RD(miStart, "FISTP", reg, disp);
45625      }
45626    
45627      /** top of stack stored to (word) [reg] */
45628      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45629      public final void emitFISTP_RegInd_Reg_Word(GPR reg, FPR dummy) {
45630        int miStart = mi;
45631        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45632        setMachineCodes(mi++, (byte) 0xDF);
45633        emitRegIndirectRegOperands(reg, GPR.getForOpcode(3));
45634        if (lister != null) lister.RN(miStart, "FISTP", reg);
45635      }
45636    
45637      /** top of stack stored to (word) [baseReg + idxReg<<scale + disp] */
45638      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45639      public final void emitFISTP_RegIdx_Reg_Word(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) {
45640        int miStart = mi;
45641        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45642        setMachineCodes(mi++, (byte) 0xDF);
45643        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(3));
45644        if (lister != null) lister.RXD(miStart, "FISTP", baseReg, idxReg, scale, disp);
45645      }
45646    
45647      /** top of stack stored to (word) [idxReg<<scale + disp] */
45648      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45649      public final void emitFISTP_RegOff_Reg_Word(GPR idxReg, short scale, Offset disp, FPR dummy) {
45650        int miStart = mi;
45651        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45652        setMachineCodes(mi++, (byte) 0xDF);
45653        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(3));
45654        if (lister != null) lister.RFD(miStart, "FISTP", idxReg, scale, disp);
45655      }
45656    
45657      /** top of stack stored to (word) [disp] */
45658      public final void emitFISTP_Abs_Reg_Word(Address disp, FPR dummy) {
45659        int miStart = mi;
45660        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45661        setMachineCodes(mi++, (byte) 0xDF);
45662        emitAbsRegOperands(disp, GPR.getForOpcode(3));
45663        if (lister != null) lister.RA(miStart, "FISTP", disp);
45664      }
45665    
45666      /** top of stack stored to (double word) [reg + disp] */
45667      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45668      public final void emitFISTP_RegDisp_Reg(GPR reg, Offset disp, FPR dummy) {
45669        int miStart = mi;
45670        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45671        setMachineCodes(mi++, (byte) 0xDB);
45672        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(3));
45673        if (lister != null) lister.RD(miStart, "FISTP", reg, disp);
45674      }
45675    
45676      /** top of stack stored to (double word) [reg] */
45677      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45678      public final void emitFISTP_RegInd_Reg(GPR reg, FPR dummy) {
45679        int miStart = mi;
45680        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45681        setMachineCodes(mi++, (byte) 0xDB);
45682        emitRegIndirectRegOperands(reg, GPR.getForOpcode(3));
45683        if (lister != null) lister.RN(miStart, "FISTP", reg);
45684      }
45685    
45686      /** top of stack stored to (double word) [baseReg + idxReg<<scale + disp] */
45687      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45688      public final void emitFISTP_RegIdx_Reg(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) {
45689        int miStart = mi;
45690        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45691        setMachineCodes(mi++, (byte) 0xDB);
45692        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(3));
45693        if (lister != null) lister.RXD(miStart, "FISTP", baseReg, idxReg, scale, disp);
45694      }
45695    
45696      /** top of stack stored to (double word) [idxReg<<scale + disp] */
45697      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45698      public final void emitFISTP_RegOff_Reg(GPR idxReg, short scale, Offset disp, FPR dummy) {
45699        int miStart = mi;
45700        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45701        setMachineCodes(mi++, (byte) 0xDB);
45702        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(3));
45703        if (lister != null) lister.RFD(miStart, "FISTP", idxReg, scale, disp);
45704      }
45705    
45706      /** top of stack stored to (double word) [disp] */
45707      public final void emitFISTP_Abs_Reg(Address disp, FPR dummy) {
45708        int miStart = mi;
45709        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45710        setMachineCodes(mi++, (byte) 0xDB);
45711        emitAbsRegOperands(disp, GPR.getForOpcode(3));
45712        if (lister != null) lister.RA(miStart, "FISTP", disp);
45713      }
45714    
45715      /** top of stack stored to (quad) [reg + disp] */
45716      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45717      public final void emitFISTP_RegDisp_Reg_Quad(GPR reg, Offset disp, FPR dummy) {
45718        int miStart = mi;
45719        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45720        setMachineCodes(mi++, (byte) 0xDF);
45721        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(7));
45722        if (lister != null) lister.RD(miStart, "FISTP", reg, disp);
45723      }
45724    
45725      /** top of stack stored to (quad) [reg] */
45726      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45727      public final void emitFISTP_RegInd_Reg_Quad(GPR reg, FPR dummy) {
45728        int miStart = mi;
45729        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45730        setMachineCodes(mi++, (byte) 0xDF);
45731        emitRegIndirectRegOperands(reg, GPR.getForOpcode(7));
45732        if (lister != null) lister.RN(miStart, "FISTP", reg);
45733      }
45734    
45735      /** top of stack stored to (quad) [baseReg + idxReg<<scale + disp] */
45736      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45737      public final void emitFISTP_RegIdx_Reg_Quad(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) {
45738        int miStart = mi;
45739        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45740        setMachineCodes(mi++, (byte) 0xDF);
45741        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(7));
45742        if (lister != null) lister.RXD(miStart, "FISTP", baseReg, idxReg, scale, disp);
45743      }
45744    
45745      /** top of stack stored to (quad) [idxReg<<scale + disp] */
45746      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45747      public final void emitFISTP_RegOff_Reg_Quad(GPR idxReg, short scale, Offset disp, FPR dummy) {
45748        int miStart = mi;
45749        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45750        setMachineCodes(mi++, (byte) 0xDF);
45751        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(7));
45752        if (lister != null) lister.RFD(miStart, "FISTP", idxReg, scale, disp);
45753      }
45754    
45755      /** top of stack stored to (quad) [disp] */
45756      public final void emitFISTP_Abs_Reg_Quad(Address disp, FPR dummy) {
45757        int miStart = mi;
45758        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45759        setMachineCodes(mi++, (byte) 0xDF);
45760        emitAbsRegOperands(disp, GPR.getForOpcode(7));
45761        if (lister != null) lister.RA(miStart, "FISTP", disp);
45762      }
45763    
45764      /** top of stack stored to (double word) [reg + disp] */
45765      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45766      public final void emitFST_RegDisp_Reg(GPR reg, Offset disp, FPR dummy) {
45767        int miStart = mi;
45768        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45769        setMachineCodes(mi++, (byte) 0xD9);
45770        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(2));
45771        if (lister != null) lister.RD(miStart, "FST", reg, disp);
45772      }
45773    
45774      /** top of stack stored to (double word) [reg] */
45775      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45776      public final void emitFST_RegInd_Reg(GPR reg, FPR dummy) {
45777        int miStart = mi;
45778        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45779        setMachineCodes(mi++, (byte) 0xD9);
45780        emitRegIndirectRegOperands(reg, GPR.getForOpcode(2));
45781        if (lister != null) lister.RN(miStart, "FST", reg);
45782      }
45783    
45784      /** top of stack stored to (double word) [baseReg + idxReg<<scale + disp] */
45785      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45786      public final void emitFST_RegIdx_Reg(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) {
45787        int miStart = mi;
45788        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45789        setMachineCodes(mi++, (byte) 0xD9);
45790        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(2));
45791        if (lister != null) lister.RXD(miStart, "FST", baseReg, idxReg, scale, disp);
45792      }
45793    
45794      /** top of stack stored to (double word) [idxReg<<scale + disp] */
45795      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45796      public final void emitFST_RegOff_Reg(GPR idxReg, short scale, Offset disp, FPR dummy) {
45797        int miStart = mi;
45798        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45799        setMachineCodes(mi++, (byte) 0xD9);
45800        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(2));
45801        if (lister != null) lister.RFD(miStart, "FST", idxReg, scale, disp);
45802      }
45803    
45804      /** top of stack stored to (double word) [disp] */
45805      public final void emitFST_Abs_Reg(Address disp, FPR dummy) {
45806        int miStart = mi;
45807        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45808        setMachineCodes(mi++, (byte) 0xD9);
45809        emitAbsRegOperands(disp, GPR.getForOpcode(2));
45810        if (lister != null) lister.RA(miStart, "FST", disp);
45811      }
45812    
45813      /** top of stack stored to (quad) [reg + disp] */
45814      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45815      public final void emitFST_RegDisp_Reg_Quad(GPR reg, Offset disp, FPR dummy) {
45816        int miStart = mi;
45817        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45818        setMachineCodes(mi++, (byte) 0xDD);
45819        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(2));
45820        if (lister != null) lister.RD(miStart, "FST", reg, disp);
45821      }
45822    
45823      /** top of stack stored to (quad) [reg] */
45824      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45825      public final void emitFST_RegInd_Reg_Quad(GPR reg, FPR dummy) {
45826        int miStart = mi;
45827        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45828        setMachineCodes(mi++, (byte) 0xDD);
45829        emitRegIndirectRegOperands(reg, GPR.getForOpcode(2));
45830        if (lister != null) lister.RN(miStart, "FST", reg);
45831      }
45832    
45833      /** top of stack stored to (quad) [baseReg + idxReg<<scale + disp] */
45834      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45835      public final void emitFST_RegIdx_Reg_Quad(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) {
45836        int miStart = mi;
45837        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45838        setMachineCodes(mi++, (byte) 0xDD);
45839        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(2));
45840        if (lister != null) lister.RXD(miStart, "FST", baseReg, idxReg, scale, disp);
45841      }
45842    
45843      /** top of stack stored to (quad) [idxReg<<scale + disp] */
45844      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45845      public final void emitFST_RegOff_Reg_Quad(GPR idxReg, short scale, Offset disp, FPR dummy) {
45846        int miStart = mi;
45847        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45848        setMachineCodes(mi++, (byte) 0xDD);
45849        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(2));
45850        if (lister != null) lister.RFD(miStart, "FST", idxReg, scale, disp);
45851      }
45852    
45853      /** top of stack stored to (quad) [disp] */
45854      public final void emitFST_Abs_Reg_Quad(Address disp, FPR dummy) {
45855        int miStart = mi;
45856        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45857        setMachineCodes(mi++, (byte) 0xDD);
45858        emitAbsRegOperands(disp, GPR.getForOpcode(2));
45859        if (lister != null) lister.RA(miStart, "FST", disp);
45860      }
45861    
45862      /** top of stack stored to (double word) [reg + disp] */
45863      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45864      public final void emitFSTP_RegDisp_Reg(GPR reg, Offset disp, FPR dummy) {
45865        int miStart = mi;
45866        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45867        setMachineCodes(mi++, (byte) 0xD9);
45868        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(3));
45869        if (lister != null) lister.RD(miStart, "FSTP", reg, disp);
45870      }
45871    
45872      /** top of stack stored to (double word) [reg] */
45873      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45874      public final void emitFSTP_RegInd_Reg(GPR reg, FPR dummy) {
45875        int miStart = mi;
45876        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45877        setMachineCodes(mi++, (byte) 0xD9);
45878        emitRegIndirectRegOperands(reg, GPR.getForOpcode(3));
45879        if (lister != null) lister.RN(miStart, "FSTP", reg);
45880      }
45881    
45882      /** top of stack stored to (double word) [baseReg + idxReg<<scale + disp] */
45883      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45884      public final void emitFSTP_RegIdx_Reg(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) {
45885        int miStart = mi;
45886        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45887        setMachineCodes(mi++, (byte) 0xD9);
45888        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(3));
45889        if (lister != null) lister.RXD(miStart, "FSTP", baseReg, idxReg, scale, disp);
45890      }
45891    
45892      /** top of stack stored to (double word) [idxReg<<scale + disp] */
45893      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45894      public final void emitFSTP_RegOff_Reg(GPR idxReg, short scale, Offset disp, FPR dummy) {
45895        int miStart = mi;
45896        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45897        setMachineCodes(mi++, (byte) 0xD9);
45898        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(3));
45899        if (lister != null) lister.RFD(miStart, "FSTP", idxReg, scale, disp);
45900      }
45901    
45902      /** top of stack stored to (double word) [disp] */
45903      public final void emitFSTP_Abs_Reg(Address disp, FPR dummy) {
45904        int miStart = mi;
45905        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45906        setMachineCodes(mi++, (byte) 0xD9);
45907        emitAbsRegOperands(disp, GPR.getForOpcode(3));
45908        if (lister != null) lister.RA(miStart, "FSTP", disp);
45909      }
45910    
45911      /** top of stack stored to (quad) [reg + disp] */
45912      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45913      public final void emitFSTP_RegDisp_Reg_Quad(GPR reg, Offset disp, FPR dummy) {
45914        int miStart = mi;
45915        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45916        setMachineCodes(mi++, (byte) 0xDD);
45917        emitRegDispRegOperands(reg, disp, GPR.getForOpcode(3));
45918        if (lister != null) lister.RD(miStart, "FSTP", reg, disp);
45919      }
45920    
45921      /** top of stack stored to (quad) [reg] */
45922      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45923      public final void emitFSTP_RegInd_Reg_Quad(GPR reg, FPR dummy) {
45924        int miStart = mi;
45925        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45926        setMachineCodes(mi++, (byte) 0xDD);
45927        emitRegIndirectRegOperands(reg, GPR.getForOpcode(3));
45928        if (lister != null) lister.RN(miStart, "FSTP", reg);
45929      }
45930    
45931      /** top of stack stored to (quad) [baseReg + idxReg<<scale + disp] */
45932      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45933      public final void emitFSTP_RegIdx_Reg_Quad(GPR baseReg, GPR idxReg, short scale, Offset disp, FPR dummy) {
45934        int miStart = mi;
45935        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45936        setMachineCodes(mi++, (byte) 0xDD);
45937        emitSIBRegOperands(baseReg, idxReg, scale, disp, GPR.getForOpcode(3));
45938        if (lister != null) lister.RXD(miStart, "FSTP", baseReg, idxReg, scale, disp);
45939      }
45940    
45941      /** top of stack stored to (quad) [idxReg<<scale + disp] */
45942      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
45943      public final void emitFSTP_RegOff_Reg_Quad(GPR idxReg, short scale, Offset disp, FPR dummy) {
45944        int miStart = mi;
45945        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45946        setMachineCodes(mi++, (byte) 0xDD);
45947        emitRegOffRegOperands(idxReg, scale, disp, GPR.getForOpcode(3));
45948        if (lister != null) lister.RFD(miStart, "FSTP", idxReg, scale, disp);
45949      }
45950    
45951      /** top of stack stored to (quad) [disp] */
45952      public final void emitFSTP_Abs_Reg_Quad(Address disp, FPR dummy) {
45953        int miStart = mi;
45954        if (VM.VerifyAssertions) VM._assert(dummy == FP0);
45955        setMachineCodes(mi++, (byte) 0xDD);
45956        emitAbsRegOperands(disp, GPR.getForOpcode(3));
45957        if (lister != null) lister.RA(miStart, "FSTP", disp);
45958      }
45959    
45960      /**
45961       * FCOMI floating point comparison
45962       *
45963       * @param reg1 register for comparison
45964       * @param reg2 register for comparison
45965       */
45966      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45967      public final void emitFCOMI_Reg_Reg (FPR reg1, FPR reg2) {
45968        int miStart = mi;
45969        if (VM.VerifyAssertions) VM._assert(reg1 == FP0);
45970        setMachineCodes(mi++, (byte) 0xDB);
45971        setMachineCodes(mi++, (byte)  (0xF0 | reg2.value()));
45972        if (lister != null) lister.RR(miStart, "FCOMI", reg1, reg2);
45973      }
45974    
45975      /**
45976       * FCOMIP floating point comparison
45977       *
45978       * @param reg1 register for comparison
45979       * @param reg2 register for comparison
45980       */
45981      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45982      public final void emitFCOMIP_Reg_Reg (FPR reg1, FPR reg2) {
45983        int miStart = mi;
45984        if (VM.VerifyAssertions) VM._assert(reg1 == FP0);
45985        setMachineCodes(mi++, (byte) 0xDF);
45986        setMachineCodes(mi++, (byte)  (0xF0 | reg2.value()));
45987        if (lister != null) lister.RR(miStart, "FCOMIP", reg1, reg2);
45988      }
45989    
45990      /**
45991       * FUCOMI floating point comparison
45992       *
45993       * @param reg1 register for comparison
45994       * @param reg2 register for comparison
45995       */
45996      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
45997      public final void emitFUCOMI_Reg_Reg (FPR reg1, FPR reg2) {
45998        int miStart = mi;
45999        if (VM.VerifyAssertions) VM._assert(reg1 == FP0);
46000        setMachineCodes(mi++, (byte) 0xDB);
46001        setMachineCodes(mi++, (byte)  (0xE8 | reg2.value()));
46002        if (lister != null) lister.RR(miStart, "FUCOMI", reg1, reg2);
46003      }
46004    
46005      /**
46006       * FUCOMIP floating point comparison
46007       *
46008       * @param reg1 register for comparison
46009       * @param reg2 register for comparison
46010       */
46011      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
46012      public final void emitFUCOMIP_Reg_Reg (FPR reg1, FPR reg2) {
46013        int miStart = mi;
46014        if (VM.VerifyAssertions) VM._assert(reg1 == FP0);
46015        setMachineCodes(mi++, (byte) 0xDF);
46016        setMachineCodes(mi++, (byte)  (0xE8 | reg2.value()));
46017        if (lister != null) lister.RR(miStart, "FUCOMIP", reg1, reg2);
46018      }
46019    
46020      /**
46021       * save FPU state ignoring pending exceptions - register displacement
46022       *
46023       * @param baseReg destination base register
46024       * @param disp destination displacement
46025       */
46026      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46027      public final void emitFNSAVE_RegDisp (GPR baseReg, Offset disp) {
46028        int miStart = mi;
46029        // no prefix byte
46030        setMachineCodes(mi++, (byte) 0xDD);
46031        emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(6));
46032        if (lister != null) lister.RD(miStart, "FNSAVE", baseReg, disp);
46033      }
46034    
46035      /**
46036       * save FPU state ignoring pending exceptions - register indirect
46037       *
46038       * @param baseReg destination base register
46039       */
46040      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46041      public final void emitFNSAVE_RegInd (GPR baseReg) {
46042        int miStart = mi;
46043        // no prefix byte
46044        setMachineCodes(mi++, (byte) 0xDD);
46045        emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(6));
46046        if (lister != null) lister.RN(miStart, "FNSAVE", baseReg);
46047      }
46048    
46049      /**
46050       * save FPU state ignoring pending exceptions - register index
46051       *
46052       * @param baseReg destination base register
46053       * @param indexReg destination index register
46054       * @param scale destination scale
46055       * @param disp destination displacement
46056       */
46057      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
46058      public final void emitFNSAVE_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) {
46059        int miStart = mi;
46060        // no prefix byte
46061        setMachineCodes(mi++, (byte) 0xDD);
46062        emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(6));
46063        if (lister != null) lister.RXD(miStart, "FNSAVE", baseReg, indexReg, scale, disp);
46064      }
46065    
46066      /**
46067       * save FPU state ignoring pending exceptions - register offset
46068       *
46069       * @param indexReg destination index register
46070       * @param scale destination scale
46071       * @param disp destination displacement
46072       */
46073      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46074      public final void emitFNSAVE_RegOff (GPR indexReg, short scale, Offset disp) {
46075        int miStart = mi;
46076        // no prefix byte
46077        setMachineCodes(mi++, (byte) 0xDD);
46078        emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(6));
46079        if (lister != null) lister.RFD(miStart, "FNSAVE", indexReg, scale, disp);
46080      }
46081    
46082      /**
46083       * save FPU state ignoring pending exceptions - absolute address
46084       *
46085       * @param disp address to store to
46086       */
46087      public final void emitFNSAVE_Abs (Address disp) {
46088        int miStart = mi;
46089        // no prefix byte
46090        setMachineCodes(mi++, (byte) 0xDD);
46091        emitAbsRegOperands(disp, GPR.getForOpcode(6));
46092        if (lister != null) lister.RA(miStart, "FNSAVE", disp);
46093      }
46094    
46095      /**
46096       * save FPU state respecting pending exceptions - register displacement
46097       *
46098       * @param baseReg destination base register
46099       * @param disp destination displacement
46100       */
46101      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46102      public final void emitFSAVE_RegDisp (GPR baseReg, Offset disp) {
46103        int miStart = mi;
46104        setMachineCodes(mi++, (byte) 0x9B);
46105        setMachineCodes(mi++, (byte) 0xDD);
46106        emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(6));
46107        if (lister != null) lister.RD(miStart, "FSAVE", baseReg, disp);
46108      }
46109    
46110      /**
46111       * save FPU state respecting pending exceptions - register indirect
46112       *
46113       * @param baseReg destination base register
46114       */
46115      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46116      public final void emitFSAVE_RegInd (GPR baseReg) {
46117        int miStart = mi;
46118        setMachineCodes(mi++, (byte) 0x9B);
46119        setMachineCodes(mi++, (byte) 0xDD);
46120        emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(6));
46121        if (lister != null) lister.RN(miStart, "FSAVE", baseReg);
46122      }
46123    
46124      /**
46125       * save FPU state respecting pending exceptions - register index
46126       *
46127       * @param baseReg destination base register
46128       * @param indexReg destination index register
46129       * @param scale destination scale
46130       * @param disp destination displacement
46131       */
46132      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
46133      public final void emitFSAVE_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) {
46134        int miStart = mi;
46135        setMachineCodes(mi++, (byte) 0x9B);
46136        setMachineCodes(mi++, (byte) 0xDD);
46137        emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(6));
46138        if (lister != null) lister.RXD(miStart, "FSAVE", baseReg, indexReg, scale, disp);
46139      }
46140    
46141      /**
46142       * save FPU state respecting pending exceptions - register offset
46143       *
46144       * @param indexReg destination index register
46145       * @param scale destination scale
46146       * @param disp destination displacement
46147       */
46148      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46149      public final void emitFSAVE_RegOff (GPR indexReg, short scale, Offset disp) {
46150        int miStart = mi;
46151        setMachineCodes(mi++, (byte) 0x9B);
46152        setMachineCodes(mi++, (byte) 0xDD);
46153        emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(6));
46154        if (lister != null) lister.RFD(miStart, "FSAVE", indexReg, scale, disp);
46155      }
46156    
46157      /**
46158       * save FPU state respecting pending exceptions - absolute address
46159       *
46160       * @param disp address to store to
46161       */
46162      public final void emitFSAVE_Abs (Address disp) {
46163        int miStart = mi;
46164        setMachineCodes(mi++, (byte) 0x9B);
46165        setMachineCodes(mi++, (byte) 0xDD);
46166        emitAbsRegOperands(disp, GPR.getForOpcode(6));
46167        if (lister != null) lister.RA(miStart, "FSAVE", disp);
46168      }
46169    
46170      /**
46171       * restore FPU state - register displacement
46172       *
46173       * @param baseReg destination base register
46174       * @param disp destination displacement
46175       */
46176      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46177      public final void emitFRSTOR_RegDisp (GPR baseReg, Offset disp) {
46178        int miStart = mi;
46179        // no prefix byte
46180        setMachineCodes(mi++, (byte) 0xDD);
46181        emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(4));
46182        if (lister != null) lister.RD(miStart, "FRSTOR", baseReg, disp);
46183      }
46184    
46185      /**
46186       * restore FPU state - register indirect
46187       *
46188       * @param baseReg destination base register
46189       */
46190      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46191      public final void emitFRSTOR_RegInd (GPR baseReg) {
46192        int miStart = mi;
46193        // no prefix byte
46194        setMachineCodes(mi++, (byte) 0xDD);
46195        emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(4));
46196        if (lister != null) lister.RN(miStart, "FRSTOR", baseReg);
46197      }
46198    
46199      /**
46200       * restore FPU state - register index
46201       *
46202       * @param baseReg destination base register
46203       * @param indexReg destination index register
46204       * @param scale destination scale
46205       * @param disp destination displacement
46206       */
46207      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
46208      public final void emitFRSTOR_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) {
46209        int miStart = mi;
46210        // no prefix byte
46211        setMachineCodes(mi++, (byte) 0xDD);
46212        emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(4));
46213        if (lister != null) lister.RXD(miStart, "FRSTOR", baseReg, indexReg, scale, disp);
46214      }
46215    
46216      /**
46217       * restore FPU state - register offset
46218       *
46219       * @param indexReg destination index register
46220       * @param scale destination scale
46221       * @param disp destination displacement
46222       */
46223      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46224      public final void emitFRSTOR_RegOff (GPR indexReg, short scale, Offset disp) {
46225        int miStart = mi;
46226        // no prefix byte
46227        setMachineCodes(mi++, (byte) 0xDD);
46228        emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(4));
46229        if (lister != null) lister.RFD(miStart, "FRSTOR", indexReg, scale, disp);
46230      }
46231    
46232      /**
46233       * restore FPU state - absolute address
46234       *
46235       * @param disp address to store to
46236       */
46237      public final void emitFRSTOR_Abs (Address disp) {
46238        int miStart = mi;
46239        // no prefix byte
46240        setMachineCodes(mi++, (byte) 0xDD);
46241        emitAbsRegOperands(disp, GPR.getForOpcode(4));
46242        if (lister != null) lister.RA(miStart, "FRSTOR", disp);
46243      }
46244    
46245      /**
46246       * load FPU control word - register displacement
46247       *
46248       * @param baseReg destination base register
46249       * @param disp destination displacement
46250       */
46251      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46252      public final void emitFLDCW_RegDisp (GPR baseReg, Offset disp) {
46253        int miStart = mi;
46254        // no prefix byte
46255        setMachineCodes(mi++, (byte) 0xD9);
46256        emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(5));
46257        if (lister != null) lister.RD(miStart, "FLDCW", baseReg, disp);
46258      }
46259    
46260      /**
46261       * load FPU control word - register indirect
46262       *
46263       * @param baseReg destination base register
46264       */
46265      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46266      public final void emitFLDCW_RegInd (GPR baseReg) {
46267        int miStart = mi;
46268        // no prefix byte
46269        setMachineCodes(mi++, (byte) 0xD9);
46270        emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(5));
46271        if (lister != null) lister.RN(miStart, "FLDCW", baseReg);
46272      }
46273    
46274      /**
46275       * load FPU control word - register index
46276       *
46277       * @param baseReg destination base register
46278       * @param indexReg destination index register
46279       * @param scale destination scale
46280       * @param disp destination displacement
46281       */
46282      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
46283      public final void emitFLDCW_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) {
46284        int miStart = mi;
46285        // no prefix byte
46286        setMachineCodes(mi++, (byte) 0xD9);
46287        emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(5));
46288        if (lister != null) lister.RXD(miStart, "FLDCW", baseReg, indexReg, scale, disp);
46289      }
46290    
46291      /**
46292       * load FPU control word - register offset
46293       *
46294       * @param indexReg destination index register
46295       * @param scale destination scale
46296       * @param disp destination displacement
46297       */
46298      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46299      public final void emitFLDCW_RegOff (GPR indexReg, short scale, Offset disp) {
46300        int miStart = mi;
46301        // no prefix byte
46302        setMachineCodes(mi++, (byte) 0xD9);
46303        emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(5));
46304        if (lister != null) lister.RFD(miStart, "FLDCW", indexReg, scale, disp);
46305      }
46306    
46307      /**
46308       * load FPU control word - absolute address
46309       *
46310       * @param disp address to store to
46311       */
46312      public final void emitFLDCW_Abs (Address disp) {
46313        int miStart = mi;
46314        // no prefix byte
46315        setMachineCodes(mi++, (byte) 0xD9);
46316        emitAbsRegOperands(disp, GPR.getForOpcode(5));
46317        if (lister != null) lister.RA(miStart, "FLDCW", disp);
46318      }
46319    
46320      /**
46321       * store FPU control word, checking for exceptions - register displacement
46322       *
46323       * @param baseReg destination base register
46324       * @param disp destination displacement
46325       */
46326      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46327      public final void emitFSTCW_RegDisp (GPR baseReg, Offset disp) {
46328        int miStart = mi;
46329        setMachineCodes(mi++, (byte) 0x9B);
46330        setMachineCodes(mi++, (byte) 0xD9);
46331        emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(7));
46332        if (lister != null) lister.RD(miStart, "FSTCW", baseReg, disp);
46333      }
46334    
46335      /**
46336       * store FPU control word, checking for exceptions - register indirect
46337       *
46338       * @param baseReg destination base register
46339       */
46340      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46341      public final void emitFSTCW_RegInd (GPR baseReg) {
46342        int miStart = mi;
46343        setMachineCodes(mi++, (byte) 0x9B);
46344        setMachineCodes(mi++, (byte) 0xD9);
46345        emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(7));
46346        if (lister != null) lister.RN(miStart, "FSTCW", baseReg);
46347      }
46348    
46349      /**
46350       * store FPU control word, checking for exceptions - register index
46351       *
46352       * @param baseReg destination base register
46353       * @param indexReg destination index register
46354       * @param scale destination scale
46355       * @param disp destination displacement
46356       */
46357      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
46358      public final void emitFSTCW_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) {
46359        int miStart = mi;
46360        setMachineCodes(mi++, (byte) 0x9B);
46361        setMachineCodes(mi++, (byte) 0xD9);
46362        emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(7));
46363        if (lister != null) lister.RXD(miStart, "FSTCW", baseReg, indexReg, scale, disp);
46364      }
46365    
46366      /**
46367       * store FPU control word, checking for exceptions - register offset
46368       *
46369       * @param indexReg destination index register
46370       * @param scale destination scale
46371       * @param disp destination displacement
46372       */
46373      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46374      public final void emitFSTCW_RegOff (GPR indexReg, short scale, Offset disp) {
46375        int miStart = mi;
46376        setMachineCodes(mi++, (byte) 0x9B);
46377        setMachineCodes(mi++, (byte) 0xD9);
46378        emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(7));
46379        if (lister != null) lister.RFD(miStart, "FSTCW", indexReg, scale, disp);
46380      }
46381    
46382      /**
46383       * store FPU control word, checking for exceptions - absolute address
46384       *
46385       * @param disp address to store to
46386       */
46387      public final void emitFSTCW_Abs (Address disp) {
46388        int miStart = mi;
46389        setMachineCodes(mi++, (byte) 0x9B);
46390        setMachineCodes(mi++, (byte) 0xD9);
46391        emitAbsRegOperands(disp, GPR.getForOpcode(7));
46392        if (lister != null) lister.RA(miStart, "FSTCW", disp);
46393      }
46394    
46395      /**
46396       * store FPU control word, ignoring exceptions - register displacement
46397       *
46398       * @param baseReg destination base register
46399       * @param disp destination displacement
46400       */
46401      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46402      public final void emitFNSTCW_RegDisp (GPR baseReg, Offset disp) {
46403        int miStart = mi;
46404        // no prefix byte
46405        setMachineCodes(mi++, (byte) 0xD9);
46406        emitRegDispRegOperands(baseReg, disp, GPR.getForOpcode(7));
46407        if (lister != null) lister.RD(miStart, "FNSTCW", baseReg, disp);
46408      }
46409    
46410      /**
46411       * store FPU control word, ignoring exceptions - register indirect
46412       *
46413       * @param baseReg destination base register
46414       */
46415      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46416      public final void emitFNSTCW_RegInd (GPR baseReg) {
46417        int miStart = mi;
46418        // no prefix byte
46419        setMachineCodes(mi++, (byte) 0xD9);
46420        emitRegIndirectRegOperands(baseReg, GPR.getForOpcode(7));
46421        if (lister != null) lister.RN(miStart, "FNSTCW", baseReg);
46422      }
46423    
46424      /**
46425       * store FPU control word, ignoring exceptions - register index
46426       *
46427       * @param baseReg destination base register
46428       * @param indexReg destination index register
46429       * @param scale destination scale
46430       * @param disp destination displacement
46431       */
46432      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1,2})
46433      public final void emitFNSTCW_RegIdx (GPR baseReg, GPR indexReg, short scale, Offset disp) {
46434        int miStart = mi;
46435        // no prefix byte
46436        setMachineCodes(mi++, (byte) 0xD9);
46437        emitSIBRegOperands(baseReg, indexReg, scale, disp, GPR.getForOpcode(7));
46438        if (lister != null) lister.RXD(miStart, "FNSTCW", baseReg, indexReg, scale, disp);
46439      }
46440    
46441      /**
46442       * store FPU control word, ignoring exceptions - register offset
46443       *
46444       * @param indexReg destination index register
46445       * @param scale destination scale
46446       * @param disp destination displacement
46447       */
46448      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46449      public final void emitFNSTCW_RegOff (GPR indexReg, short scale, Offset disp) {
46450        int miStart = mi;
46451        // no prefix byte
46452        setMachineCodes(mi++, (byte) 0xD9);
46453        emitRegOffRegOperands(indexReg, scale, disp, GPR.getForOpcode(7));
46454        if (lister != null) lister.RFD(miStart, "FNSTCW", indexReg, scale, disp);
46455      }
46456    
46457      /**
46458       * store FPU control word, ignoring exceptions - absolute address
46459       *
46460       * @param disp address to store to
46461       */
46462      public final void emitFNSTCW_Abs (Address disp) {
46463        int miStart = mi;
46464        // no prefix byte
46465        setMachineCodes(mi++, (byte) 0xD9);
46466        emitAbsRegOperands(disp, GPR.getForOpcode(7));
46467        if (lister != null) lister.RA(miStart, "FNSTCW", disp);
46468      }
46469    
46470      /**
46471       * load 1.0 into FP0
46472       *
46473       * @param dstReg must be FP0
46474       */
46475      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46476      public final void emitFLD1_Reg(FPR dstReg) {
46477        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
46478        int miStart = mi;
46479        setMachineCodes(mi++, (byte) 0xD9);
46480        setMachineCodes(mi++, (byte) 0xE8);
46481        if (lister != null) lister.R(miStart, "FLD1", dstReg);
46482      }
46483    
46484      /**
46485       * load log_2(10) into FP0
46486       *
46487       * @param dstReg must be FP0
46488       */
46489      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46490      public final void emitFLDL2T_Reg(FPR dstReg) {
46491        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
46492        int miStart = mi;
46493        setMachineCodes(mi++, (byte) 0xD9);
46494        setMachineCodes(mi++, (byte) 0xE9);
46495        if (lister != null) lister.R(miStart, "FLDL2T", dstReg);
46496      }
46497    
46498      /**
46499       * load log_2(e) into FP0
46500       *
46501       * @param dstReg must be FP0
46502       */
46503      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46504      public final void emitFLDL2E_Reg(FPR dstReg) {
46505        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
46506        int miStart = mi;
46507        setMachineCodes(mi++, (byte) 0xD9);
46508        setMachineCodes(mi++, (byte) 0xEA);
46509        if (lister != null) lister.R(miStart, "FLDL2E", dstReg);
46510      }
46511    
46512      /**
46513       * load pi into FP0
46514       *
46515       * @param dstReg must be FP0
46516       */
46517      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46518      public final void emitFLDPI_Reg(FPR dstReg) {
46519        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
46520        int miStart = mi;
46521        setMachineCodes(mi++, (byte) 0xD9);
46522        setMachineCodes(mi++, (byte) 0xEB);
46523        if (lister != null) lister.R(miStart, "FLDPI", dstReg);
46524      }
46525    
46526      /**
46527       * load log_10(2) into FP0
46528       *
46529       * @param dstReg must be FP0
46530       */
46531      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46532      public final void emitFLDLG2_Reg(FPR dstReg) {
46533        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
46534        int miStart = mi;
46535        setMachineCodes(mi++, (byte) 0xD9);
46536        setMachineCodes(mi++, (byte) 0xEC);
46537        if (lister != null) lister.R(miStart, "FLDLG2", dstReg);
46538      }
46539    
46540      /**
46541       * load log_e(2) into FP0
46542       *
46543       * @param dstReg must be FP0
46544       */
46545      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46546      public final void emitFLDLN2_Reg(FPR dstReg) {
46547        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
46548        int miStart = mi;
46549        setMachineCodes(mi++, (byte) 0xD9);
46550        setMachineCodes(mi++, (byte) 0xED);
46551        if (lister != null) lister.R(miStart, "FLDLN2", dstReg);
46552      }
46553    
46554      /**
46555       * load 0.0 into FP0
46556       *
46557       * @param dstReg must be FP0
46558       */
46559      @Inline(value=Inline.When.ArgumentsAreConstant, arguments={1})
46560      public final void emitFLDZ_Reg(FPR dstReg) {
46561        if (VM.VerifyAssertions) VM._assert(dstReg == FP0);
46562        int miStart = mi;
46563        setMachineCodes(mi++, (byte) 0xD9);
46564        setMachineCodes(mi++, (byte) 0xEE);
46565        if (lister != null) lister.R(miStart, "FLDZ", dstReg);
46566      }
46567    
46568    }