insns.h
上传用户:yuppie_zhu
上传日期:2007-01-08
资源大小:535k
文件大小:4k
源码类别:

编译器/解释器

开发平台:

C/C++

  1. /* insns.h   header file for insns.c
  2.  * $Id: insns.h,v 2.1 1999/05/20 06:52:05 hpa Exp $
  3.  *
  4.  * The Netwide Assembler is copyright (C) 1996 Simon Tatham and
  5.  * Julian Hall. All rights reserved. The software is
  6.  * redistributable under the licence given in the file "Licence"
  7.  * distributed in the NASM archive.
  8.  */
  9. #ifndef NASM_INSNS_H
  10. #define NASM_INSNS_H
  11. struct itemplate {
  12.     int opcode;        /* the token, passed from "parser.c" */
  13.     int operands;        /* number of operands */
  14.     long opd[3];        /* bit flags for operand types */
  15.     char *code;        /* the code it assembles to */
  16.     unsigned long flags;        /* some flags */
  17. };
  18. /*
  19.  * Instruction template flags. These specify which processor
  20.  * targets the instruction is eligible for, whether it is
  21.  * privileged or undocumented, and also specify extra error
  22.  * checking on the matching of the instruction.
  23.  *
  24.  * IF_SM stands for Size Match: any operand whose size is not
  25.  * explicitly specified by the template is `really' intended to be
  26.  * the same size as the first size-specified operand.
  27.  * Non-specification is tolerated in the input instruction, but
  28.  * _wrong_ specification is not.
  29.  *
  30.  * IF_SM2 invokes Size Match on only the first _two_ operands, for
  31.  * three-operand instructions such as SHLD: it implies that the
  32.  * first two operands must match in size, but that the third is
  33.  * required to be _unspecified_.
  34.  *
  35.  * IF_SB invokes Size Byte: operands with unspecified size in the
  36.  * template are really bytes, and so no non-byte specification in
  37.  * the input instruction will be tolerated. IF_SW similarly invokes
  38.  * Size Word, and IF_SD invokes Size Doubleword.
  39.  *
  40.  * (The default state if neither IF_SM nor IF_SM2 is specified is
  41.  * that any operand with unspecified size in the template is
  42.  * required to have unspecified size in the instruction too...)
  43.  */
  44. #define IF_SM     0x00000001UL        /* size match */
  45. #define IF_SM2    0x00000002UL        /* size match first two operands */
  46. #define IF_SB     0x00000004UL        /* unsized operands can't be non-byte */
  47. #define IF_SW     0x00000008UL        /* unsized operands can't be non-word */
  48. #define IF_SD     0x00000010UL        /* unsized operands can't be nondword */
  49. #define IF_AR0   0x00000020UL        /* SB, SW, SD applies to argument 0 */
  50. #define IF_AR1   0x00000040UL        /* SB, SW, SD applies to argument 1 */
  51. #define IF_AR2   0x00000060UL        /* SB, SW, SD applies to argument 2 */
  52. #define IF_ARMASK 0x00000060UL         /* mask for unsized argument spec */
  53. #define IF_PRIV   0x00000100UL        /* it's a privileged instruction */
  54. #define IF_SMM    0x00000200UL        /* it's only valid in SMM */
  55. #define IF_PROT   0x00000400UL         /* it's protected mode only */
  56. #define IF_UNDOC  0x00001000UL        /* it's an undocumented instruction */
  57. #define IF_FPU    0x00002000UL        /* it's an FPU instruction */
  58. #define IF_MMX    0x00004000UL        /* it's an MMX instruction */
  59. #define IF_3DNOW  0x00008000UL        /* it's a 3DNow! instruction */
  60. #define IF_SSE    0x00010000UL        /* it's a SSE (KNI, MMX2) instruction */
  61. #define IF_PMASK  0xFF000000UL        /* the mask for processor types */
  62. #define IF_PFMASK 0xF001FF00UL        /* the mask for disassembly "prefer" */
  63. #define IF_8086   0x00000000UL        /* 8086 instruction */
  64. #define IF_186    0x01000000UL        /* 186+ instruction */
  65. #define IF_286    0x02000000UL        /* 286+ instruction */
  66. #define IF_386    0x03000000UL        /* 386+ instruction */
  67. #define IF_486    0x04000000UL        /* 486+ instruction */
  68. #define IF_PENT   0x05000000UL        /* Pentium instruction */
  69. #define IF_P6     0x06000000UL        /* P6 instruction */
  70. #define IF_KATMAI 0x07000000UL         /* Katmai instructions */
  71. #define IF_CYRIX  0x10000000UL        /* Cyrix-specific instruction */
  72. #define IF_AMD    0x20000000UL        /* AMD-specific instruction */
  73. #endif