Annotation of mstools/samples/sdktools/image/drwatson/alpha/optable.h, revision 1.1.1.1

1.1       root        1: 
                      2: /*++
                      3: 
                      4: Copyright (c) 1993  Digital Equipment Corporation
                      5: 
                      6: Module Name:
                      7: 
                      8:     optable.h
                      9: 
                     10: Abstract:
                     11: 
                     12:     Definitions for -
                     13:     Table of operations, their names and charactersitics
                     14:     Used by ntsd, windbg and acc's dissassembler
                     15: 
                     16: Author:
                     17: 
                     18:     Miche Baker-Harvey (mbh) 10-Jan-1993
                     19: 
                     20: Revision History:
                     21: 
                     22: --*/
                     23: 
                     24: #ifndef _OPTABLE_
                     25: #define _OPTABLE_
                     26: 
                     27: //
                     28: // Each entry in the opTable is either for a
                     29: // +  function - one option on a particular opcode
                     30: // +  terminal opcode - an opcode without a function field
                     31: //      the above two can both appear directly in disassembly
                     32: //
                     33: // +  non terminal opcode - an opcode with a function field:
                     34: //      these entries do not represent values which can be
                     35: //      executed directly:  they require a function entry.
                     36: //
                     37: // + invalid opcode - this is an opcode reserved to digital
                     38: //
                     39: 
                     40: typedef enum ENTRY_TYPE {
                     41: 
                     42:    INVALID_ETYPE,
                     43:    NON_TERMINAL_ETYPE,
                     44:    TERMINAL_ETYPE,
                     45:    FUNCTION_ETYPE,
                     46:    NOT_AN_ETYPE
                     47: 
                     48: } ENTRY_TYPE;
                     49: 
                     50: 
                     51: #define NO_FUNC   (ULONG)-1
                     52: 
                     53: typedef ULONG (* PFOPPARSE)();
                     54: 
                     55: typedef struct _OPTBLENTRY {
                     56: 
                     57:     union {
                     58: 
                     59:         struct {
                     60: 
                     61:             PUCHAR     _pszName;                // Name of the instruction
                     62:             PFOPPARSE  _parsFunc;               // Function to parse operands
                     63: 
                     64:         } s0;                  // functions and terminal opcodes
                     65: 
                     66:         struct {
                     67: 
                     68:             struct _OPTBLENTRY * _funcTable;    // Describes funcs for opcode
                     69:             ULONG            _funcTableSize;    // Number of possible funcs
                     70: 
                     71:         } s1;                  // non-terminal opcodes
                     72: 
                     73:     } u;
                     74: 
                     75:     //
                     76:     // These fields describe the instruction
                     77:     //
                     78: 
                     79:     ULONG opCode;       // Top 6 bits of a 32-bit alpha instr
                     80:     ULONG funcCode;     // Function; meaning is opcode dependent
                     81:     ULONG iType;        // type of the instr: branch, fp, mem...
                     82:                         // values are ALPHA_* in alphaops.h
                     83: 
                     84:     ENTRY_TYPE eType;   // type of this entry in the opTable
                     85: 
                     86: } OPTBLENTRY, * POPTBLENTRY;
                     87: 
                     88: //
                     89: // MBH - hack workaround:
                     90: // I tried to do this with nameless functions and structures;
                     91: // it works just fine on ALPHA, but dies on 386, so use this
                     92: // ugly hack instead.
                     93: // The name "pszAlphaName" is used instead of the more obvious
                     94: // "pszName" because other structures contain pszName.
                     95: //
                     96: #define pszAlphaName  u.s0._pszName
                     97: #define parsFunc      u.s0._parsFunc
                     98: #define funcTable     u.s1._funcTable
                     99: #define funcTableSize u.s1._funcTableSize
                    100: 
                    101: POPTBLENTRY findNonTerminalEntry(ULONG);
                    102: POPTBLENTRY findStringEntry(PUCHAR);
                    103: POPTBLENTRY findOpCodeEntry(ULONG);
                    104: char * findFuncName(POPTBLENTRY, ULONG);
                    105: char * findFlagName(ULONG, ULONG);
                    106: void printTable();
                    107: void opTableInit();
                    108: 
                    109: //
                    110: // This structure is used for the floating point flag names.
                    111: //
                    112: 
                    113: #define FPFLAGS_NOT_AN_ENTRY 0xffffffff
                    114: 
                    115: typedef struct _FPFLAGS {
                    116: 
                    117:     ULONG flags;        // the flags on the opcode
                    118:     PUCHAR flagname;    // the string mnemonic for the flags
                    119: 
                    120: } FPFLAGS, * PFPFLAGS;
                    121: 
                    122: 
                    123: #endif   // _OPTABLE_

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.