/*
* $Id$
*
* Copyright (C) 2003-2015 JNode.org
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; If not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jnode.assembler.x86;
/**
* <description>
*
* @author epr
* @author Levente S\u00e1ntha (lsantha@users.sourceforge.net)
*/
public interface X86Constants {
/* Prefixes */
/**
* Operand size prefix
*/
public static final int OSIZE_PREFIX = 0x66;
/**
* Address size prefix
*/
public static final int ASIZE_PREFIX = 0x67;
/**
* FS prefix
*/
public static final int FS_PREFIX = 0x64;
/**
* Lock prefix
*/
public static final int LOCK_PREFIX = 0xF0;
/**
* rep prefix
*/
public static final int REP_PREFIX = 0xF3;
/**
* CRX prefix
*/
public static final int CRX_PREFIX = 0x0F;
/**
* high bit extension for SIB base
*/
public static final int REX_B_PREFIX = 0x41;
/**
* high bit extension for SIB index
*/
public static final int REX_X_PREFIX = 0x42;
/**
* high bit extension for ModR/M reg
*/
public static final int REX_R_PREFIX = 0x44;
/**
* 64-bit operand size
*/
public static final int REX_W_PREFIX = 0x48;
/* Jump opcodes (after 0x0f) */
public static final int JA = 0x87;
public static final int JAE = 0x83;
public static final int JB = 0x82;
public static final int JBE = 0x86;
public static final int JC = 0x82;
public static final int JE = 0x84;
public static final int JZ = 0x84;
public static final int JG = 0x8f;
public static final int JGE = 0x8d;
public static final int JL = 0x8c;
public static final int JLE = 0x8e;
public static final int JNA = 0x86;
public static final int JNAE = 0x82;
public static final int JNB = 0x83;
public static final int JNBE = 0x87;
public static final int JNC = 0x83;
public static final int JNE = 0x85;
public static final int JNG = 0x8e;
public static final int JNGE = 0x8c;
public static final int JNL = 0x8d;
public static final int JNLE = 0x8f;
public static final int JNO = 0x81;
public static final int JNP = 0x8b;
public static final int JNS = 0x89;
public static final int JNZ = 0x85;
public static final int JO = 0x80;
public static final int JP = 0x8a;
/* size, and other attributes, of the operand */
public static final int BITS8 = 0x00000001;
public static final int BITS16 = 0x00000002;
public static final int BITS32 = 0x00000004;
public static final int BITS64 = 0x00000008; /* FPU only, or 64-bit mode */
public static final int BITS80 = 0x00000010; /* FPU only */
public static final int BITS128 = 0x00000020; /* XMM only */
// Flags
public static final int F_CF = 0x00000001;
public static final int F_1 = 0x00000002;
public static final int F_PF = 0x00000004;
public static final int F_01 = 0x00000008;
public static final int F_AF = 0x00000010;
public static final int F_02 = 0x00000020;
public static final int F_ZF = 0x00000040;
public static final int F_SF = 0x00000080;
public static final int F_TF = 0x00000100;
public static final int F_IF = 0x00000200;
public static final int F_DF = 0x00000400;
public static final int F_OF = 0x00000800;
public static final int F_IOPL1 = 0x00001000;
public static final int F_IOPL2 = 0x00002000;
public static final int F_NT = 0x00004000; // Nested task
public static final int F_03 = 0x00008000;
public static final int F_RF = 0x00010000; // Resume flag
public static final int F_VM = 0x00020000; // Virtual 8086 mode
public static final int F_AC = 0x00040000; // Alignment check
public static final int F_VIF = 0x00080000; // Virtual interrupt flag
public static final int F_VIP = 0x00100000; // Virtual interrupt pending
public static final int F_ID = 0x00200000; // ID flag
public static final class Mode {
private final int operandSize;
/**
* Use 32-bit code
*/
public static final Mode CODE32 = new Mode(BITS32);
/**
* Use 64-bit code
*/
public static final Mode CODE64 = new Mode(BITS64);
private Mode(int operandSize) {
this.operandSize = operandSize;
}
public boolean is32() {
return (operandSize == BITS32);
}
public boolean is64() {
return (operandSize == BITS64);
}
/**
* Gets the size of this mode.
*
* @return BITS32 or BITS64
*/
public int getSize() {
return operandSize;
}
}
}