dsmSimntLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:15k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* dsmI86Lib.h - i80x86 disassembler header */
  2. /* Copyright 1984-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01h,30aug01,hdn  added SIMD, sysenter/exit support.
  7. 01g,06may98,fle  added P5 and P6 instructions and facilities
  8. 01f,14nov94,hdn  changed D->DISR, W->WFUL, S->SEXT, P->POP, A->AX, I->IMM.
  9.    +kdl  minor cleanup.
  10. 01e,29may94,hdn  removed I80486 conditional.
  11. 01d,31aug93,hdn  changed a type of pD, from char to UCHAR.
  12.  changed a type of 1st parameter, from char to UCHAR.
  13. 01c,07jun93,hdn  added support for c++
  14. 01b,26mar93,hdn  added new instructions for 486.
  15. 01a,23jun92,hdn  written. 
  16. */
  17. #ifndef __INCdsmI86Libh
  18. #define __INCdsmI86Libh
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. #include "vwModNum.h"
  23. /* dsmLib status codes */
  24. #define S_dsmLib_UNKNOWN_INSTRUCTION (M_dsmLib | 1)
  25. #define DSM_BUFSIZE16 16
  26. #define DSM_BUFSIZE32 32
  27. typedef struct
  28.     {
  29.     char *pOpc; /* Instruction Name */
  30.     int type; /* instruction type */
  31.     int flag; /* instruction flag */
  32.     UCHAR flag2; /* instruction flag2 */
  33.     UCHAR op0; /* opcode 0         */
  34.     UCHAR op1; /* opcode 1         */
  35.     UCHAR op2; /* opcode 2         */
  36.     UCHAR mask0; /* mask 0           */
  37.     UCHAR mask1; /* mask 1           */
  38.     UCHAR mask2; /* mask 2           */
  39.     } INST;
  40. typedef struct 
  41.     {
  42.     INST *pI; /* pointer to a structure INST */
  43.     char *pD; /* pointer to a binary data */
  44.     char a32; /* address size         0,1 */
  45.     char d32; /* data size            0,1 */
  46.     char lenO; /* opecode length       1,2 */
  47.     char lenD; /* displacement length  0,1,2,4 */
  48.     char lenI; /* immediate length     0,1,2,4 */
  49.     char modrm; /* MODRM                0,1 */
  50.     char sib; /* SIB                  0,1 */
  51.     char w; /* W                    0,1 */
  52.     char d; /* D                    0,1 */
  53.     char s; /* S                    0,1 */
  54.     char reg; /* register             3 bits, 8 bits */
  55.     char mod; /* value of MODRM byte bits 6,7 */
  56.     char rm; /* value of MODRM byte bits 0,1,2 */
  57.     char ss;
  58.     char index;
  59.     char base;
  60.     char mf;
  61.     char st;
  62.     char fd;
  63.     } FORMAT_X;
  64. typedef struct 
  65.     {
  66.     char *pD; /* opcode data pointer */
  67.     char *pOpc; /* instruction name pointer */
  68.     char *pOpr0; /* output string 0 */
  69.     char *pOpr1; /* output string 1 */
  70.     char *pOpr2; /* output string 2 */
  71.     int len; /* instruction length */
  72.     int addr; /* address operand */
  73.     char obuf [DSM_BUFSIZE16]; /* opecode buffer */
  74.     char rbuf [DSM_BUFSIZE16]; /* register buffer */
  75.     char mbuf [DSM_BUFSIZE32]; /* memory buffer */
  76.     char temp [DSM_BUFSIZE32]; /* temporary buffer */
  77.     char ibuf [DSM_BUFSIZE16]; /* immediate buffer */
  78.     char dbuf [DSM_BUFSIZE16]; /* displacement buffer */
  79.     } FORMAT_Y;
  80. /* bit definitions of flag */
  81. /* jhw: MSB of flag byte is not included in switch statement used
  82.  *       to format the output.
  83.  */
  84. /* MODRM must be defined if REG,MMXREG,XMMREG are defined */
  85. #define SF 0x10000000
  86. #define OP1 0x20000000
  87. #define OP2 0x40000000
  88. #define OP3 0x80000000
  89. #define WFUL    0x01000000      /* operand size bit */
  90. #define SEXT    0x02000000      /* sign extend flag */
  91. #define DISR    0x04000000      /* data direction info encoded in opcode */
  92. #define TTT     0x08000000      /* hack to look for rotate instructions */
  93. #define TTTN    0x00100000      /* opcode least significant byte 
  94.  * bits 0-4 = condition test field */
  95. #define MF      0x00200000      /* opcode bits 1-2 are = register size info */
  96. #define POP     0x00400000      /* cat a "P" to end of instruction name */
  97. #define IMM     0x00000001
  98. #define I8      0x00000002      /* imm8 byte exists */
  99. #define DIS     0x00000004      /* displacement info */
  100. #define D8      0x00000008      /* displacement info */
  101. #define D16     0x00000010      /* displacement info */
  102. #define AX      0x00000020      /* store into AX register */
  103. #define CL      0x00000040      /* cat "CL" to end of operands */
  104. #define REG     0x00000080      /* modrm bits 3-5 = register specifier */
  105. #define SREG2   0x00000100      /* modrm bits 3-4 = 2 bit segment register */
  106. #define SREG3   0x00000200      /* modrm bits 3-5 = 3 bit segment register */
  107. #define MODRM   0x00000400      /* modrm byte exists */
  108. #define EEE     0x00000800      /* modrm bits 3-5 = control/debug register */
  109. #define REGRM   0x00001000      /* modrm bits 0-2 = register specifier */
  110. #define PORT    0x00002000      /* use a port as an operand */
  111. #define OFFSEL  0x00004000      /* jump or call offset */
  112. #define D16L8   0x00008000      /* displacement info */
  113. #define FD      0x00010000      /* stack element is destination */
  114. #define ST      0x00020000      /* stack element is operand */
  115. #define MMXRM   0x00040000      /* modrm bits 0-2 = MMX register */
  116. #define MMXREG  0x00080000      /* modrm bits 3-5 = MMX register */
  117. #define GG      0x00800000      /* least sign opcode byte 
  118.  * bits 0-1 = MMX granularity       */
  119. /* bit definitions of flag2 */
  120. #define XMMRM           0x01    /* modrm bits 0-2 = XMM register */
  121. #define XMMREG          0x02    /* modrm bits 3-5 = XMM register */
  122. #define ESC 0xd8 /* for co-processor instructions */
  123. /* instruction types */
  124. #define itAaa   1
  125. #define itAad         2
  126. #define itAam         3
  127. #define itAas         4
  128. #define itAddItoA     5
  129. #define itAddItoRM    6
  130. #define itAddRMtoRM  7
  131. #define itAndItoA     8
  132. #define itAndItoRM    9
  133. #define itAndRMtoRM 10
  134. #define itArpl      11
  135. #define itAsize    12
  136. #define itBound    13
  137. #define itBsf        14
  138. #define itBsr        15
  139. #define itBtI         16
  140. #define itBtR         17
  141. #define itBtcI       18
  142. #define itBtcR       19
  143. #define itBtrI       20
  144. #define itBtrR       21
  145. #define itBtsI       22
  146. #define itBtsR       23
  147. #define itCall      24
  148. #define itCallRM    25
  149. #define itCallSeg   26
  150. #define itCallSegRM 27
  151. #define itCbw        28
  152. #define itCjmp    29
  153. #define itClc        30
  154. #define itCld        31
  155. #define itCli        32
  156. #define itClts      33
  157. #define itCmc        34
  158. #define itCmpIwiA    35
  159. #define itCmpIwiRM   36
  160. #define itCmpRMwiRM 37
  161. #define itCmps      38
  162. #define itCs          39
  163. #define itCset      40
  164. #define itCwd        41
  165. #define itDaa        42
  166. #define itDas        43
  167. #define itDecR       44
  168. #define itDecRM      45
  169. #define itDiv        46
  170. #define itDs          47
  171. #define itEnter    48
  172. #define itEs          49
  173. #define itFs          50
  174. #define itGs          51
  175. #define itHlt        52
  176. #define itIdiv      53
  177. #define itImulAwiRM 54
  178. #define itImulRMwiI 55
  179. #define itImulRwiRM 56
  180. #define itInF         57
  181. #define itInV         58
  182. #define itIncR       59
  183. #define itIncRM      60
  184. #define itIns        61
  185. #define itInt        62
  186. #define itInt3       63
  187. #define itInto      64
  188. #define itIret      65
  189. #define itJcxz      66
  190. #define itJmpD       67
  191. #define itJmpRM      68
  192. #define itJmpS       69
  193. #define itJmpSeg     70
  194. #define itJmpSegRM   71
  195. #define itLahf      72
  196. #define itLar        73
  197. #define itLds        74
  198. #define itLea        75
  199. #define itLeave    76
  200. #define itLes        77
  201. #define itLfs        78
  202. #define itLgdt      79
  203. #define itLgs        80
  204. #define itLidt      81
  205. #define itLldt      82
  206. #define itLmsw      83
  207. #define itLock      84
  208. #define itLods      85
  209. #define itLoop      86
  210. #define itLoopnz 87
  211. #define itLoopz    88
  212. #define itLsl        89
  213. #define itLss        90
  214. #define itLtr        91
  215. #define itMovAMtoMA  92
  216. #define itMovC       93
  217. #define itMovD       94
  218. #define itMovItoR    95
  219. #define itMovItoRM   96
  220. #define itMovRMtoMR   97
  221. #define itMovRMtoS   98
  222. #define itMovRtoRM   99
  223. #define itMovStoRM   100
  224. #define itMovT       101
  225. #define itMovs      102
  226. #define itMovsx    103
  227. #define itMovzx    104
  228. #define itMulAwiRM   105
  229. #define itNeg        106
  230. #define itNop        107
  231. #define itNot        108
  232. #define itOrItoA     109
  233. #define itOrItoRM    111
  234. #define itOrRMtoRM   113
  235. #define itOsize    115
  236. #define itOutF       116
  237. #define itOutV       117
  238. #define itOuts      118
  239. #define itPopR       119
  240. #define itPopRM      120
  241. #define itPopS       121
  242. #define itPopa      122
  243. #define itPopf      123
  244. #define itPushI     124
  245. #define itPushR     125
  246. #define itPushRM    126
  247. #define itPushS     127
  248. #define itPusha    128
  249. #define itPushf    129
  250. #define itRNcmps 130
  251. #define itRNscas 131
  252. #define itRcmps    132
  253. #define itRet        133
  254. #define itRetI       134
  255. #define itRetSeg     135
  256. #define itRetSegI    136
  257. #define itRins       137
  258. #define itRlods     138
  259. #define itRmovs     139
  260. #define itRolRMby1 140
  261. #define itRolRMbyCL 141
  262. #define itRolRMbyI 142
  263. #define itRouts     143
  264. #define itRscas    144
  265. #define itRstos     145
  266. #define itSahf      146
  267. #define itSbbIfrA    147
  268. #define itSbbIfrRM   148
  269. #define itSbbRMfrRM 149
  270. #define itScas      150
  271. #define itSgdt      151
  272. #define itShldRMbyCL 152
  273. #define itShldRMbyI 153
  274. #define itShrdRMbyCL 154
  275. #define itShrdRMbyI 155
  276. #define itSmsw      156
  277. #define itSs          157
  278. #define itStc        158
  279. #define itStd        159
  280. #define itSti        160
  281. #define itStos      161
  282. #define itStr       162
  283. #define itSubIfrA    164
  284. #define itSubIfrRM   165
  285. #define itSubRMfrRM 166
  286. #define itTestIanA  167
  287. #define itTestIanRM 168
  288. #define itTestRManR 169
  289. #define itWait      170
  290. #define itXchgA     171
  291. #define itXchgRM    172
  292. #define itXlat      173
  293. /* instructions for 387 */
  294. #define itF2xm1 174
  295. #define itFabs 175
  296. #define itFaddIRM 176
  297. #define itFaddST 177
  298. #define itFchs 178
  299. #define itFclex 179
  300. #define itFcomIRM 180
  301. #define itFcomST 181
  302. #define itFcompIRM 182
  303. #define itFcompST 183
  304. #define itFcompp 184
  305. #define itFcos 185
  306. #define itFdecstp 186
  307. #define itFdivIRM 187
  308. #define itFdivST 188
  309. #define itFfree 189
  310. #define itFincstp 190
  311. #define itFinit 191
  312. #define itFld1 192
  313. #define itFldBCDM 193
  314. #define itFldERM 194
  315. #define itFldIRM 195
  316. #define itFldL2E 196
  317. #define itFldL2T 197
  318. #define itFldLG2 198
  319. #define itFldLIM 199
  320. #define itFldLN2 200
  321. #define itFldPI 201
  322. #define itFldST 202
  323. #define itFldZ 203
  324. #define itFldcw 204
  325. #define itFldenv 205
  326. #define itFmulIRM 206
  327. #define itFmulST 207
  328. #define itFnop 208
  329. #define itFpatan 209
  330. #define itFprem 210
  331. #define itFprem1 211
  332. #define itFptan 212
  333. #define itFrndint 213
  334. #define itFrstor 214
  335. #define itFsave 215
  336. #define itFscale 216
  337. #define itFsin 217
  338. #define itFsincos 218
  339. #define itFsqrt 219
  340. #define itFstIRM 220
  341. #define itFstST 221
  342. #define itFstcw 222
  343. #define itFstenv 223
  344. #define itFstpBCDM 224
  345. #define itFstpERM 225
  346. #define itFstpIRM 226
  347. #define itFstpLIM 227
  348. #define itFstpST 228
  349. #define itFstsw 229
  350. #define itFstswA 230
  351. #define itFsubIRM 231
  352. #define itFsubST 232
  353. #define itFtst 233
  354. #define itFucom 234
  355. #define itFucomp 235
  356. #define itFucompp 236
  357. #define itFxam 237
  358. #define itFxch 238
  359. #define itFxtract 239
  360. #define itFyl2x 240
  361. #define itFyl2xp1 241
  362. #define itFcmovb 242
  363. #define itFcmove 243
  364. #define itFcmovbe 244
  365. #define itFcmovu 245
  366. #define itFcmovnb 246
  367. #define itFcmovne 247
  368. #define itFcmovnbe 248
  369. #define itFcmovnu 249
  370. #define itFcomi 250
  371. /* addendum */
  372. #define itSidt 300
  373. #define itSldt 301
  374. #define itVerr 302
  375. #define itVerw 303
  376. #define itXorItoRM 304
  377. #define itAdcItoRM 305
  378. #define itXorItoA 306
  379. #define itAdcItoA 307
  380. #define itXorRMtoRM 308
  381. #define itAdcRMtoRM 309
  382. #define itRep 310
  383. #define itRepNe 311
  384. /* 80486 instructions */
  385. #define itBswap 400
  386. #define itCmpxchg 401
  387. #define itXadd 402
  388. #define itInvd 403
  389. #define itWbinvd 404
  390. #define itInvlpg 405
  391. /* P5 instructions */
  392. #define itCmpxchg8b 500
  393. #define itCpuid 501
  394. #define itRdtsc 502
  395. #define itRdmsr 503
  396. #define itWrmsr 504
  397. #define itRsm 505
  398. /* P6 instructions */
  399. #define itCmovcc 600
  400. #define itRdpmc 601
  401. #define itUd2 602
  402. #define         itSysenter              603
  403. #define         itSysexit               604
  404. /* MMX instructions */
  405. #define itEmms 700
  406. #define itMovd 701
  407. #define itMovq 702
  408. #define itPackssdw 703
  409. #define itPacksswb 704
  410. #define itPackuswb 705
  411. #define itPadd 706
  412. #define itPadds 707
  413. #define itPaddus 708
  414. #define itPand 709
  415. #define itPandn 710
  416. #define itPcmpeq 711
  417. #define itPcmpgt 712
  418. #define itPmadd 713
  419. #define itPmulh 714
  420. #define itPmull 715
  421. #define itPor 716
  422. #define itPsll 717
  423. #define itPsra 718
  424. #define itPsrl 719
  425. #define itPsub 720
  426. #define itPsubs 721
  427. #define itPsubus 722
  428. #define itPunpckh 723
  429. #define itPunpckl 724
  430. #define itPxor 725
  431. /* SIMD definitions */
  432. #define itAddps 800
  433. #define itAddss 801
  434. #define itAndnps 802
  435. #define itAndps 803
  436. #define itCmpps 804
  437. #define itCmpss 805
  438. #define itComiss 806
  439. #define itCvtpi2ps 807
  440. #define itCvtps2pi 808
  441. #define itCvtsi2ss 809
  442. #define itCvtss2si 810
  443. #define itCvttps2pi 811
  444. #define itCvttss2si 812
  445. #define itDivps 813
  446. #define itDivss 814
  447. #define itFxrstor 815
  448. #define itFxsave 816
  449. #define itLdmxcsr 817
  450. #define itMaxps 818
  451. #define itMaxss 819
  452. #define itMinps 820
  453. #define itMinss 821
  454. #define itMovaps 822
  455. #define itMovhlps 823
  456. #define itMovhps 824
  457. #define itMovlhps 825
  458. #define itMovlps 826
  459. #define itMovmskps 827
  460. #define itMovss 828
  461. #define itMovups 829
  462. #define itMulps 830
  463. #define itMulss 831
  464. #define itOrps 832
  465. #define itRcpps 833
  466. #define itRcpss 834
  467. #define itRsqrtps 835
  468. #define itRsqrtss 836
  469. #define itShufps 837
  470. #define itSqrtps 838
  471. #define itSqrtss 839
  472. #define itStmxcsr 840
  473. #define itSubps 841
  474. #define itSubss 842
  475. #define itUcomiss 843
  476. #define itUnpckhps 844
  477. #define itUnpcklps 845
  478. #define itXorps 846
  479. #define itPavgb 847
  480. #define itPavgw 848
  481. #define itPextrw 849
  482. #define itPinsrw 850
  483. #define itPmaxsw 851
  484. #define itPmaxub 852
  485. #define itPminsw 853
  486. #define itPminub 854
  487. #define itPmovmskb 855
  488. #define itPmulhuw 856
  489. #define itPsadbw 857
  490. #define itPshufw 858
  491. #define itMaskmovq 859
  492. #define itMovntps 860
  493. #define itMovntq 861
  494. #define itPrefetcht0 862
  495. #define itPrefetcht1 863
  496. #define itPrefetcht2 864
  497. #define itPrefetchnta 865
  498. #define itSfence 866
  499. /* function declarations */
  500. #if defined (__STDC__) || defined (__cplusplus)
  501. IMPORT   int        dsmData (UCHAR *binInst, int address);
  502. IMPORT   int        dsmInst (UCHAR *binInst, int address, 
  503. VOIDFUNCPTR prtAddress);
  504. IMPORT   int        dsmNbytes (UCHAR *binInst);
  505. #else
  506. IMPORT   int        dsmData ();
  507. IMPORT   int        dsmInst ();
  508. IMPORT   int        dsmNbytes ();
  509. #endif /* __STDC__ */
  510. #ifdef __cplusplus
  511. }
  512. #endif
  513. #endif /* __INCdsmI86Libh */