/** * Copyright 2013, Landz and its contributors. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jnr.x86asm; public enum InstructionGroup { I_EMIT, I_ALU, I_BSWAP, I_BT, I_CALL, I_CRC32, I_ENTER, I_IMUL, I_INC_DEC, I_J, I_JMP, I_LEA, I_M, I_MOV, I_MOV_PTR, I_MOVSX_MOVZX, I_MOVSXD, I_PUSH, // I_PUSH is implemented before I_POP I_POP, I_R_RM, I_RM_B, I_RM, I_RM_R, I_RET, I_ROT, I_SHLD_SHRD, I_TEST, I_XCHG, // Group for x87 FP instructions in format mem or st(i), st(i) (fadd, fsub, fdiv, ...) I_X87_FPU, // Group for x87 FP instructions in format st(i), st(i) I_X87_STI, // Group for fld/fst/fstp instruction, internally uses I_X87_MEM group. I_X87_MEM_STI, // Group for x87 FP instructions that uses Word, DWord, QWord or TWord memory pointer. I_X87_MEM, // Group for x87 FSTSW/FNSTSW instructions I_X87_FSTSW, // Group for movbe instruction I_MOVBE, // Group for MMX/SSE instructions in format (X)MM|Reg|Mem <- (X)MM|Reg|Mem, // 0x66 prefix must be set manually in opcodes. // - Primary opcode is used for instructions in (X)MM <- (X)MM/Mem format, // - Secondary opcode is used for instructions in (X)MM/Mem <- (X)MM format. I_MMU_MOV, // Group for movd and movq instructions. I_MMU_MOVD, I_MMU_MOVQ, // Group for pextrd, pextrq and pextrw instructions (it's special instruction // not similar to others) I_MMU_PEXTR, // Group for prefetch instruction I_MMU_PREFETCH, // Group for MMX/SSE instructions in format (X)MM|Reg <- (X)MM|Reg|Mem|Imm, // 0x66 prefix is added for MMX instructions that used by SSE2 registers. // - Primary opcode is used for instructions in (X)MM|Reg <- (X)MM|Reg|Mem format, // - Secondary opcode is iused for instructions in (X)MM|Reg <- Imm format. I_MMU_RMI, I_MMU_RM_IMM8, // Group for 3dNow instructions I_MMU_RM_3DNOW; }