Annotation of mstools/samples/sdktools/image/drwatson/alpha/optable.h, revision 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.