Annotation of mstools/h/alpha/alphaops.h, revision 1.1

1.1     ! root        1: /*++
        !             2: 
        !             3: Copyright (c) 1992  Digital Equipment Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:     alphaops.h
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     Alpha AXP instruction and floating constant definitions.
        !            12: 
        !            13: Author:
        !            14: 
        !            15:     Steve Jenness (jenness) 1-Apr-1992
        !            16:     Thomas Van Baak (tvb) 28-May-1992
        !            17: 
        !            18: Revision History:
        !            19: 
        !            20: --*/
        !            21: 
        !            22: #ifndef _ALPHAOPS_
        !            23: #define _ALPHAOPS_
        !            24: 
        !            25: //
        !            26: // Instruction types.
        !            27: //      The Alpha architecture does not number the instruction types,
        !            28: //      this numbering is for software decoding only.
        !            29: //
        !            30: 
        !            31: #define ALPHA_UNKNOWN           0       // Reserved or illegal
        !            32: #define ALPHA_MEMORY            1       // Memory (load/store)
        !            33: #define ALPHA_FP_MEMORY         2       // Floating point Memory
        !            34: #define ALPHA_MEMSPC            3       // Memory special
        !            35: #define ALPHA_JUMP              4       // Jump (memory formation)
        !            36: #define ALPHA_BRANCH            5       // Branch
        !            37: #define ALPHA_FP_BRANCH         6       // Floating Point Branch
        !            38: #define ALPHA_OPERATE           7       // Register-register operate
        !            39: #define ALPHA_LITERAL           8       // Literal-register operate
        !            40: #define ALPHA_FP_OPERATE        9       // Floating point operate
        !            41: #define ALPHA_FP_CONVERT        10      // Floating point convert
        !            42: #define ALPHA_CALLPAL           11      // Call to PAL
        !            43: #define ALPHA_EV4_PR            12      // EV4 MTPR/MFPR PAL mode instructions
        !            44: #define ALPHA_EV4_MEM           13      // EV4 special memory PAL mode access
        !            45: #define ALPHA_EV4_REI           14      // EV4 PAL mode switch
        !            46: 
        !            47: //
        !            48: // Instruction Opcodes.
        !            49: //
        !            50: 
        !            51: #define CALLPAL_OP      0x00    // ALPHA_CALLPAL
        !            52: #define _01_OP          0x01    // - reserved opcode
        !            53: #define _02_OP          0x02    // - reserved opcode
        !            54: #define _03_OP          0x03    // - reserved opcode
        !            55: #define _04_OP          0x04    // - reserved opcode
        !            56: #define _05_OP          0x05    // - reserved opcode
        !            57: #define _06_OP          0x06    // - reserved opcode
        !            58: #define _07_OP          0x07    // - reserved opcode
        !            59: #define LDA_OP          0x08    // ALPHA_MEMORY
        !            60: #define LDAH_OP         0x09    // ALPHA_MEMORY
        !            61: #define _0A_OP          0x0A    // - reserved opcode
        !            62: #define LDQ_U_OP        0x0B    // ALPHA_MEMORY
        !            63: #define _0C_OP          0x0C    // - reserved opcode
        !            64: #define _0D_OP          0x0D    // - reserved opcode
        !            65: #define _0E_OP          0x0E    // - reserved opcode
        !            66: #define STQ_U_OP        0x0F    // ALPHA_MEMORY
        !            67: #define ARITH_OP        0x10    // ALPHA_OPERATE or ALPHA_LITERAL
        !            68: #define BIT_OP          0x11    // ALPHA_OPERATE or ALPHA_LITERAL
        !            69: #define BYTE_OP         0x12    // ALPHA_OPERATE or ALPHA_LITERAL
        !            70: #define MUL_OP          0x13    // ALPHA_OPERATE or ALPHA_LITERAL
        !            71: #define _14_OP          0x14    // - reserved opcode
        !            72: #define VAXFP_OP        0x15    // ALPHA_FP_OPERATE
        !            73: #define IEEEFP_OP       0x16    // ALPHA_FP_OPERATE
        !            74: #define FPOP_OP         0x17    // ALPHA_FP_OPERATE
        !            75: #define MEMSPC_OP       0x18    // ALPHA_MEMORY
        !            76: #define PAL19_OP        0x19    // - reserved for PAL mode
        !            77: //#define MFPR_OP         0x19    // ALPHA_MFPR
        !            78: #define JMP_OP          0x1A    // ALPHA_JUMP
        !            79: #define PAL1B_OP        0x1B    // - reserved for PAL mode
        !            80: #define _1C_OP          0x1C    // - reserved opcode
        !            81: #define PAL1D_OP        0x1D    // - reserved for PAL mode
        !            82: //#define MTPR_OP         0x1D    // ALPHA_MTPR
        !            83: #define PAL1E_OP        0x1E    // - reserved for PAL mode
        !            84: #define PAL1F_OP        0x1F    // - reserved for PAL mode
        !            85: #define LDF_OP          0x20    // ALPHA_MEMORY
        !            86: #define LDG_OP          0x21    // ALPHA_MEMORY
        !            87: #define LDS_OP          0x22    // ALPHA_MEMORY
        !            88: #define LDT_OP          0x23    // ALPHA_MEMORY
        !            89: #define STF_OP          0x24    // ALPHA_MEMORY
        !            90: #define STG_OP          0x25    // ALPHA_MEMORY
        !            91: #define STS_OP          0x26    // ALPHA_MEMORY
        !            92: #define STT_OP          0x27    // ALPHA_MEMORY
        !            93: #define LDL_OP          0x28    // ALPHA_MEMORY
        !            94: #define LDQ_OP          0x29    // ALPHA_MEMORY
        !            95: #define LDL_L_OP        0x2A    // ALPHA_MEMORY
        !            96: #define LDQ_L_OP        0x2B    // ALPHA_MEMORY
        !            97: #define STL_OP          0x2C    // ALPHA_MEMORY
        !            98: #define STQ_OP          0x2D    // ALPHA_MEMORY
        !            99: #define STL_C_OP        0x2E    // ALPHA_MEMORY
        !           100: #define STQ_C_OP        0x2F    // ALPHA_MEMORY
        !           101: #define BR_OP           0x30    // ALPHA_BRANCH
        !           102: #define FBEQ_OP         0x31    // ALPHA_BRANCH
        !           103: #define FBLT_OP         0x32    // ALPHA_BRANCH
        !           104: #define FBLE_OP         0x33    // ALPHA_BRANCH
        !           105: #define BSR_OP          0x34    // ALPHA_BRANCH
        !           106: #define FBNE_OP         0x35    // ALPHA_BRANCH
        !           107: #define FBGE_OP         0x36    // ALPHA_BRANCH
        !           108: #define FBGT_OP         0x37    // ALPHA_BRANCH
        !           109: #define BLBC_OP         0x38    // ALPHA_BRANCH
        !           110: #define BEQ_OP          0x39    // ALPHA_BRANCH
        !           111: #define BLT_OP          0x3A    // ALPHA_BRANCH
        !           112: #define BLE_OP          0x3B    // ALPHA_BRANCH
        !           113: #define BLBS_OP         0x3C    // ALPHA_BRANCH
        !           114: #define BNE_OP          0x3D    // ALPHA_BRANCH
        !           115: #define BGE_OP          0x3E    // ALPHA_BRANCH
        !           116: #define BGT_OP          0x3F    // ALPHA_BRANCH
        !           117: 
        !           118: #define LDA_OP_STR      "lda"
        !           119: #define LDAH_OP_STR     "ldah"
        !           120: #define LDQ_U_OP_STR    "ldq_u"
        !           121: #define STQ_U_OP_STR    "stq_u"
        !           122: #define LDF_OP_STR      "ldf"
        !           123: #define LDG_OP_STR      "ldg"
        !           124: #define LDS_OP_STR      "lds"
        !           125: #define LDT_OP_STR      "ldt"
        !           126: #define STF_OP_STR      "stf"
        !           127: #define STG_OP_STR      "stg"
        !           128: #define STS_OP_STR      "sts"
        !           129: #define STT_OP_STR      "stt"
        !           130: #define LDL_OP_STR      "ldl"
        !           131: #define LDQ_OP_STR      "ldq"
        !           132: #define LDL_L_OP_STR    "ldl_l"
        !           133: #define LDQ_L_OP_STR    "ldq_l"
        !           134: #define STL_OP_STR      "stl"
        !           135: #define STQ_OP_STR      "stq"
        !           136: #define STL_C_OP_STR    "stl_c"
        !           137: #define STQ_C_OP_STR    "stq_c"
        !           138: #define BR_OP_STR       "br"
        !           139: #define FBEQ_OP_STR     "fbeq"
        !           140: #define FBLT_OP_STR     "fblt"
        !           141: #define FBLE_OP_STR     "fble"
        !           142: #define BSR_OP_STR      "bsr"
        !           143: #define FBNE_OP_STR     "fbne"
        !           144: #define FBGE_OP_STR     "fbge"
        !           145: #define FBGT_OP_STR     "fbgt"
        !           146: #define BLBC_OP_STR     "blbc"
        !           147: #define BEQ_OP_STR      "beq"
        !           148: #define BLT_OP_STR      "blt"
        !           149: #define BLE_OP_STR      "ble"
        !           150: #define BLBS_OP_STR     "blbs"
        !           151: #define BNE_OP_STR      "bne"
        !           152: #define BGE_OP_STR      "bge"
        !           153: #define BGT_OP_STR      "bgt"
        !           154: 
        !           155: //
        !           156: // Type (1) Memory Instruction Format.
        !           157: // Type (2) Memory Special Instruction Format.
        !           158: //
        !           159: //  3         2 2       2 2       1 1
        !           160: //  1         6 5       1 0       6 5                             0
        !           161: // +-----------+---------+---------+-------------------------------+
        !           162: // |   opcode  |   Ra    |   Rb    |          Memory_disp          |
        !           163: // +-----------+---------+---------+-------------------------------+
        !           164: //
        !           165: //      LDAx    Ra.wq,disp.ab(Rb.ab)            x = (,H)
        !           166: //      LDx     Ra.wq,disp.ab(Rb.ab)            x = (L,Q,F,G,S,T)
        !           167: //      LDQ_U   Ra.wq,disp.ab(Rb.ab)
        !           168: //      LDx_L   Ra.wq,disp.ab(Rb.ab)            x = (L,Q)
        !           169: //      STx_C   Ra.mq,disp.ab(Rb.ab)            x = (L,Q)
        !           170: //      STx     Ra.rq,disp.ab(Rb.ab)            x = (L,Q,F,G,S,T)
        !           171: //      STQ_U   Ra.rq,disp.ab(Rb.ab)
        !           172: //
        !           173: 
        !           174: typedef struct _Alpha_Memory_Format {
        !           175:         LONG MemDisp : 16;
        !           176:         ULONG Rb : 5;
        !           177:         ULONG Ra : 5;
        !           178:         ULONG Opcode : 6;
        !           179: } Alpha_Memory_Format;
        !           180: 
        !           181: //
        !           182: // Special Memory instruction function codes (in Memdisp).
        !           183: //
        !           184: 
        !           185: #define TRAPB_FUNC        0x0000
        !           186: #define EXCB_FUNC         0x0400
        !           187: #define MB_FUNC           0x4000
        !           188: #define WMB_FUNC          0x4400
        !           189: #define MB2_FUNC          0x4800
        !           190: #define MB3_FUNC          0x4C00
        !           191: #define FETCH_FUNC        0x8000
        !           192: #define FETCH_M_FUNC      0xA000
        !           193: #define RPCC_FUNC         0xC000
        !           194: #define RC_FUNC           0xE000
        !           195: #define RS_FUNC           0xF000
        !           196: 
        !           197: #define TRAPB_FUNC_STR     "trapb"
        !           198: #define EXCB_FUNC_STR      "excb"
        !           199: #define MB_FUNC_STR        "mb"
        !           200: #define MB1_FUNC_STR       "wmb"
        !           201: #define MB2_FUNC_STR       "mb2"
        !           202: #define MB3_FUNC_STR       "mb3"
        !           203: #define FETCH_FUNC_STR     "fetch"
        !           204: #define FETCH_M_FUNC_STR   "fetch_m"
        !           205: #define RPCC_FUNC_STR      "rpcc"
        !           206: #define RC_FUNC_STR        "rc"
        !           207: #define RS_FUNC_STR        "rs"
        !           208: 
        !           209: //
        !           210: // Type (3) Memory Format Jump Instructions.
        !           211: //
        !           212: //  3         2 2       2 2       1 1 1 1
        !           213: //  1         6 5       1 0       6 5 4 3                         0
        !           214: // +-----------+---------+---------+---+---------------------------+
        !           215: // |   opcode  |   Ra    |   Rb    |Fnc|            Hint           |
        !           216: // +-----------+---------+---------+---+---------------------------+
        !           217: //
        !           218: //      xxx     Ra.wq,(Rb.ab),hint      xxx = (JMP, JSR, RET, JSR_COROUTINE)
        !           219: //
        !           220: 
        !           221: typedef struct _Alpha_Jump_Format {
        !           222:         LONG Hint : 14;
        !           223:         ULONG Function : 2;
        !           224:         ULONG Rb : 5;
        !           225:         ULONG Ra : 5;
        !           226:         ULONG Opcode : 6;
        !           227: } Alpha_Jump_Format;
        !           228: 
        !           229: //
        !           230: // Jump function codes (in Function, opcode 1A, JMP_OP).
        !           231: //
        !           232: 
        !           233: #define JMP_FUNC        0x0     // Jump
        !           234: #define JSR_FUNC        0x1     // Jump to Subroutine
        !           235: #define RET_FUNC        0x2     // Return from Subroutine
        !           236: #define JSR_CO_FUNC     0x3     // Jump to Subroutine Return
        !           237: 
        !           238: #define JMP_FUNC_STR      "jmp"
        !           239: #define JSR_FUNC_STR      "jsr"
        !           240: #define RET_FUNC_STR      "ret"
        !           241: #define JSR_CO_FUNC_STR   "jsr_cortn"
        !           242: 
        !           243: //
        !           244: // The exception handling compatible return instruction has a hint value
        !           245: // of 0001. Define a macro that identifies these return instructions.
        !           246: // The Rb register field is masked out since it is normally, but not
        !           247: // required to be, RA_REG.
        !           248: //
        !           249: 
        !           250: #define IS_RETURN_0001_INSTRUCTION(Instruction) \
        !           251:     (((Instruction) & 0xFFE0FFFF) == 0x6BE08001)
        !           252: 
        !           253: //
        !           254: // Type (4) Branch Instruction Format.
        !           255: //
        !           256: //  3         2 2       2 2
        !           257: //  1         6 5       1 0                                       0
        !           258: // +-----------+---------+-----------------------------------------+
        !           259: // |   opcode  |   Ra    |             Branch_disp                 |
        !           260: // +-----------+---------+-----------------------------------------+
        !           261: //
        !           262: //      Bxx     Ra.rq,disp.al           x = (EQ,NE,LT,LE,GT,GE,LBC,LBS)
        !           263: //      BxR     Ra.wq,disp.al           x = (,S)
        !           264: //      FBxx    Ra.rq,disp.al           x = (EQ,NE,LT,LE,GT,GE)
        !           265: //
        !           266: 
        !           267: typedef struct _Alpha_Branch_Format {
        !           268:         LONG BranchDisp : 21;
        !           269:         ULONG Ra : 5;
        !           270:         ULONG Opcode : 6;
        !           271: } Alpha_Branch_Format;
        !           272: 
        !           273: //
        !           274: // Type (5) Operate Register Instruction Format.
        !           275: // Type (6) Operate Literal Instruction Format.
        !           276: //               bop = Rb.rq or #b.ib
        !           277: //
        !           278: //  3         2 2       2 2       1 1   1 1 1
        !           279: //  1         6 5       1 0       6 5   3 2 1           5 4       0
        !           280: // +-----------+---------+---------+-----+-+-------------+---------+
        !           281: // |   opcode  |   Ra    |   Rb    | SBZ |0|  function   |   Rc    |
        !           282: // +-----------+---------+---------+-----+-+-------------+---------+
        !           283: //  3         2 2       2 2             1 1 1
        !           284: //  1         6 5       1 0             3 2 1           5 4       0
        !           285: // +-----------+---------+---------------+-+-------------+---------+
        !           286: // |   opcode  |   Ra    |      LIT      |1|  function   |   Rc    |
        !           287: // +-----------+---------+---------------+-+-------------+---------+
        !           288: //
        !           289: //
        !           290: //      ADDx    Ra.rq,bop,Rc.wq /V      x = (Q,L)
        !           291: //      SxADDy  Ra.rq,bop,Rc.wq         x = (4,8), y = (Q, L)
        !           292: //      CMPx    Ra.rq,bop,Rc.wq         x = (EQ,LT,LE,ULT,ULE)
        !           293: //      MULx    Ra.rq,bop,Rc.wq /V      x = (Q,L)
        !           294: //      UMULH   Ra.rq,bop,Rc.wq
        !           295: //      SUBx    Ra.rq,bop,Rc.wq /V      x = (Q,L)
        !           296: //      SxSUBy  Ra.rq,bop,Rc.wq         x = (4,8), y = (Q, L)
        !           297: //      xxx     Ra.rq,bop,Rc.wq         xxx = (AND,BIS,XOR,BIC,ORNOT,EQV)
        !           298: //      CMOVxx  Ra.rq,bop,Rc.wq         xx = (EQ,NE,LT,LE,GT,GE,LBC,LBS)
        !           299: //      SxL     Ra.rq,bop,Rc.wq         x = (L,R)
        !           300: //      SRA     Ra.rq,bop,Rc.wq
        !           301: //      CMPBGE  Ra.rq,bop,Rc.wq
        !           302: //      EXTxx   Ra.rq,bop,Rc.wq         xx = (BL,WL,WH,LL,LH,WL,QH)
        !           303: //      INSxx   Ra.rq,bop,Rc.wq         xx = (BL,WL,WH,LL,LH,WL,QH)
        !           304: //      MSKxx   Ra.rq,bop,Rc.wq         xx = (BL,WL,WH,LL,LH,WL,QH)
        !           305: //      ZAPx    Ra.rq,bop,Rc.wq         x = (,NOT)
        !           306: //
        !           307: 
        !           308: typedef struct _Alpha_OpReg_Format {
        !           309:         ULONG Rc : 5;
        !           310:         ULONG Function : 7;
        !           311:         ULONG RbvType : 1;              // 0 for register format
        !           312:         ULONG SBZ : 3;
        !           313:         ULONG Rb : 5;
        !           314:         ULONG Ra : 5;
        !           315:         ULONG Opcode : 6;
        !           316: } Alpha_OpReg_Format;
        !           317: 
        !           318: typedef struct _Alpha_OpLit_Format {
        !           319:         ULONG Rc : 5;
        !           320:         ULONG Function : 7;
        !           321:         ULONG RbvType : 1;              // 1 for literal format
        !           322:         ULONG Literal : 8;
        !           323:         ULONG Ra : 5;
        !           324:         ULONG Opcode : 6;
        !           325: } Alpha_OpLit_Format;
        !           326: 
        !           327: #define RBV_REGISTER_FORMAT 0
        !           328: #define RBV_LITERAL_FORMAT 1
        !           329: 
        !           330: //
        !           331: // Arithmetic operate function codes (in Function, Opcode 10, ARITH_OP).
        !           332: //
        !           333: 
        !           334: #define ADDL_FUNC       0x00    // Add Longword
        !           335: #define ADDLV_FUNC      0x40    // Add Longword, Integer Overflow Enable
        !           336: #define S4ADDL_FUNC     0x02    // Scaled Add Longword by 4
        !           337: #define S8ADDL_FUNC     0x12    // Scaled Add Longword by 8
        !           338: 
        !           339: #define ADDQ_FUNC       0x20    // Add Quadword
        !           340: #define ADDQV_FUNC      0x60    // Add Quadword, Integer Overflow Enable
        !           341: #define S4ADDQ_FUNC     0x22    // Scaled Add Quadword by 4
        !           342: #define S8ADDQ_FUNC     0x32    // Scaled Add Quadword by 8
        !           343: 
        !           344: #define SUBL_FUNC       0x09    // Subtract Longword
        !           345: #define SUBLV_FUNC      0x49    // Subtract Longword, Integer Overflow Enable
        !           346: #define S4SUBL_FUNC     0x0B    // Scaled Subtract Longword by 4
        !           347: #define S8SUBL_FUNC     0x1B    // Scaled Subtract Longword by 8
        !           348: 
        !           349: #define SUBQ_FUNC       0x29    // Subtract Quadword
        !           350: #define SUBQV_FUNC      0x69    // Subtract Quadword, Integer Overflow Enable
        !           351: #define S4SUBQ_FUNC     0x2B    // Scaled Subtract Quadword by 4
        !           352: #define S8SUBQ_FUNC     0x3B    // Scaled Subtract Quadword by 8
        !           353: 
        !           354: #define CMPEQ_FUNC      0x2D    // Compare Signed Quadword Equal
        !           355: #define CMPLT_FUNC      0x4D    // Compare Signed Quadword Less Than
        !           356: #define CMPLE_FUNC      0x6D    // Compare Signed Quadword Less Than or Equal
        !           357: #define CMPULT_FUNC     0x1D    // Compare Unsigned Quadword Less Than
        !           358: #define CMPULE_FUNC     0x3D    // Compare Unsigned Quadword Less Than or Equal
        !           359: #define CMPBGE_FUNC     0x0F    // Compare 8 Unsigned Bytes Greater Than or Equal
        !           360: 
        !           361: #define ADDL_FUNC_STR     "addl"
        !           362: #define ADDLV_FUNC_STR    "addl/v"
        !           363: #define S4ADDL_FUNC_STR   "s4addl"
        !           364: #define S8ADDL_FUNC_STR   "s8addl"
        !           365: 
        !           366: #define ADDQ_FUNC_STR     "addq"
        !           367: #define ADDQV_FUNC_STR    "addq/v"
        !           368: #define S4ADDQ_FUNC_STR   "s4addq"
        !           369: #define S8ADDQ_FUNC_STR   "s8addq"
        !           370: 
        !           371: #define SUBL_FUNC_STR     "subl"
        !           372: #define SUBLV_FUNC_STR    "subl/v"
        !           373: #define S4SUBL_FUNC_STR   "s4subl"
        !           374: #define S8SUBL_FUNC_STR   "s8subl"
        !           375: 
        !           376: #define SUBQ_FUNC_STR     "subq"
        !           377: #define SUBQV_FUNC_STR    "subq/v"
        !           378: #define S4SUBQ_FUNC_STR   "s4subq"
        !           379: #define S8SUBQ_FUNC_STR   "s8subq"
        !           380: 
        !           381: #define CMPEQ_FUNC_STR    "cmpeq"
        !           382: #define CMPLT_FUNC_STR    "cmplt"
        !           383: #define CMPLE_FUNC_STR    "cmple"
        !           384: #define CMPULT_FUNC_STR   "cmpult"
        !           385: #define CMPULE_FUNC_STR   "cmpule"
        !           386: #define CMPBGE_FUNC_STR   "cmpbge"
        !           387: 
        !           388: //
        !           389: // Bit and conditional operate function codes (in Function, Opcode 11, BIT_OP).
        !           390: //
        !           391: 
        !           392: #define AND_FUNC        0x00    // Logical Product
        !           393: #define BIC_FUNC        0x08    // Logical Product with Complement
        !           394: #define BIS_FUNC        0x20    // Logical Sum (OR)
        !           395: #define EQV_FUNC        0x48    // Logical Equivalence (XORNOT)
        !           396: #define ORNOT_FUNC      0x28    // Logical Sum with Complement
        !           397: #define XOR_FUNC        0x40    // Logical Difference
        !           398: 
        !           399: #define CMOVEQ_FUNC     0x24    // CMOVE if Register Equal to Zero
        !           400: #define CMOVGE_FUNC     0x46    // CMOVE if Register Greater Than or Equal to Zero
        !           401: #define CMOVGT_FUNC     0x66    // CMOVE if Register Greater Than Zero
        !           402: #define CMOVLBC_FUNC    0x16    // CMOVE if Register Low Bit Clear
        !           403: #define CMOVLBS_FUNC    0x14    // CMOVE if Register Low Bit Set
        !           404: #define CMOVLE_FUNC     0x64    // CMOVE if Register Less Than or Equal to Zero
        !           405: #define CMOVLT_FUNC     0x44    // CMOVE if Register Less Than Zero
        !           406: #define CMOVNE_FUNC     0x26    // CMOVE if Register Not Equal to Zero
        !           407: 
        !           408: #define AND_FUNC_STR       "and"
        !           409: #define BIC_FUNC_STR       "bic"
        !           410: #define BIS_FUNC_STR       "bis"
        !           411: #define EQV_FUNC_STR       "eqv"
        !           412: #define ORNOT_FUNC_STR     "ornot"
        !           413: #define XOR_FUNC_STR       "xor"
        !           414: 
        !           415: #define CMOVEQ_FUNC_STR    "cmoveq"
        !           416: #define CMOVGE_FUNC_STR    "cmovge"
        !           417: #define CMOVGT_FUNC_STR    "cmovgt"
        !           418: #define CMOVLBC_FUNC_STR   "cmovlbc"
        !           419: #define CMOVLBS_FUNC_STR   "cmovlbs"
        !           420: #define CMOVLE_FUNC_STR    "cmovle"
        !           421: #define CMOVLT_FUNC_STR    "cmovlt"
        !           422: #define CMOVNE_FUNC_STR    "cmovne"
        !           423: 
        !           424: //
        !           425: // Shift and byte operate function codes (in Function, Opcode 12, BYTE_OP).
        !           426: //
        !           427: 
        !           428: #define SLL_FUNC        0x39    // Shift Left Logical
        !           429: #define SRL_FUNC        0x34    // Shift Right Logical
        !           430: #define SRA_FUNC        0x3C    // Shift Right Arithmetic
        !           431: 
        !           432: #define EXTBL_FUNC      0x06    // Extract Byte Low
        !           433: #define EXTWL_FUNC      0x16    // Extract Word Low
        !           434: #define EXTLL_FUNC      0x26    // Extract Longword Low
        !           435: #define EXTQL_FUNC      0x36    // Extract Quadword Low
        !           436: #define EXTWH_FUNC      0x5A    // Extract Word High
        !           437: #define EXTLH_FUNC      0x6A    // Extract Longword High
        !           438: #define EXTQH_FUNC      0x7A    // Extract Quadword High
        !           439: 
        !           440: #define INSBL_FUNC      0x0B    // Insert Byte Low
        !           441: #define INSWL_FUNC      0x1B    // Insert Word Low
        !           442: #define INSLL_FUNC      0x2B    // Insert Longword Low
        !           443: #define INSQL_FUNC      0x3B    // Quadword Low
        !           444: #define INSWH_FUNC      0x57    // Insert Word High
        !           445: #define INSLH_FUNC      0x67    // Insert Longword High
        !           446: #define INSQH_FUNC      0x77    // Insert Quadword High
        !           447: 
        !           448: #define MSKBL_FUNC      0x02    // Mask Byte Low
        !           449: #define MSKWL_FUNC      0x12    // Mask Word Low
        !           450: #define MSKLL_FUNC      0x22    // Mask Longword Low
        !           451: #define MSKQL_FUNC      0x32    // Mask Quadword Low
        !           452: #define MSKWH_FUNC      0x52    // Mask Word High
        !           453: #define MSKLH_FUNC      0x62    // Mask Longword High
        !           454: #define MSKQH_FUNC      0x72    // Mask Quadword High
        !           455: 
        !           456: #define ZAP_FUNC        0x30    // Zero Bytes
        !           457: #define ZAPNOT_FUNC     0x31    // Zero Bytes Not
        !           458: 
        !           459: #define SLL_FUNC_STR    "sll"
        !           460: #define SRL_FUNC_STR    "srl"
        !           461: #define SRA_FUNC_STR    "sra"
        !           462: 
        !           463: #define EXTBL_FUNC_STR  "extbl"
        !           464: #define EXTWL_FUNC_STR  "extwl"
        !           465: #define EXTLL_FUNC_STR  "extll"
        !           466: #define EXTQL_FUNC_STR  "extql"
        !           467: #define EXTWH_FUNC_STR  "extwh"
        !           468: #define EXTLH_FUNC_STR  "extlh"
        !           469: #define EXTQH_FUNC_STR  "extqh"
        !           470: 
        !           471: #define INSBL_FUNC_STR  "insbl"
        !           472: #define INSWL_FUNC_STR  "inswl"
        !           473: #define INSLL_FUNC_STR  "insll"
        !           474: #define INSQL_FUNC_STR  "insql"
        !           475: #define INSWH_FUNC_STR  "inswh"
        !           476: #define INSLH_FUNC_STR  "inslh"
        !           477: #define INSQH_FUNC_STR  "insqh"
        !           478: 
        !           479: #define MSKBL_FUNC_STR  "mskbl"
        !           480: #define MSKWL_FUNC_STR  "mskwl"
        !           481: #define MSKLL_FUNC_STR  "mskll"
        !           482: #define MSKQL_FUNC_STR  "mskql"
        !           483: #define MSKWH_FUNC_STR  "mskwh"
        !           484: #define MSKLH_FUNC_STR  "msklh"
        !           485: #define MSKQH_FUNC_STR  "mskqh"
        !           486: 
        !           487: #define ZAP_FUNC_STR    "zap"
        !           488: #define ZAPNOT_FUNC_STR "zapnot"
        !           489: 
        !           490: //
        !           491: // Integer multiply operate function codes (in Function, Opcode 13, MUL_OP).
        !           492: //
        !           493: 
        !           494: #define MULL_FUNC       0x00    // Multiply Longword
        !           495: #define MULLV_FUNC      0x40    // Multiply Longword, Integer Overflow Enable
        !           496: #define MULQ_FUNC       0x20    // Multiply Quadword
        !           497: #define MULQV_FUNC      0x60    // Multiply Quadword, Integer Overflow Enable
        !           498: #define UMULH_FUNC      0x30    // Unsinged Multiply Quadword High
        !           499: 
        !           500: #define MULL_FUNC_STR   "mull"
        !           501: #define MULLV_FUNC_STR  "mull/v"
        !           502: #define MULQ_FUNC_STR   "mulq"
        !           503: #define MULQV_FUNC_STR  "mulq/v"
        !           504: #define UMULH_FUNC_STR  "umulh"
        !           505: 
        !           506: //
        !           507: // Type (7) Floating-point Operate Instruction Format.
        !           508: // Type (8) Floating-point Convert Instruction Format.
        !           509: //
        !           510: // Type 6 and 7 are the same, except for type 7
        !           511: //      Fc == F31 (1s) and Fb is the source.
        !           512: //
        !           513: //  3         2 2       2 2       1 1
        !           514: //  1         6 5       1 0       6 5                   5 4       0
        !           515: // +-----------+---------+---------+---------------------+---------+
        !           516: // |   opcode  |   Fa    |   Fb    |      function       |   Fc    |
        !           517: // +-----------+---------+---------+---------------------+---------+
        !           518: //
        !           519: 
        !           520: typedef struct _Alpha_FpOp_Format {
        !           521:         ULONG Fc : 5;
        !           522:         ULONG Function : 11;
        !           523:         ULONG Fb : 5;
        !           524:         ULONG Fa : 5;
        !           525:         ULONG Opcode : 6;
        !           526: } Alpha_FpOp_Format;
        !           527: 
        !           528: //
        !           529: // Format independent function codes (in Function, Opcode 17)
        !           530: //
        !           531: 
        !           532: #define CVTLQ_FUNC      0x010
        !           533: #define CPYS_FUNC       0x020
        !           534: #define CPYSN_FUNC      0x021
        !           535: #define CPYSE_FUNC      0x022
        !           536: #define MT_FPCR_FUNC    0x024
        !           537: #define MF_FPCR_FUNC    0x025
        !           538: #define FCMOVEQ_FUNC    0x02A
        !           539: #define FCMOVNE_FUNC    0x02B
        !           540: #define FCMOVLT_FUNC    0x02C
        !           541: #define FCMOVGE_FUNC    0x02D
        !           542: #define FCMOVLE_FUNC    0x02E
        !           543: #define FCMOVGT_FUNC    0x02F
        !           544: #define CVTQL_FUNC      0x030
        !           545: #define CVTQLV_FUNC     0x130
        !           546: #define CVTQLSV_FUNC    0x530
        !           547: 
        !           548: #define CVTLQ_FUNC_STR      "cvtlq"
        !           549: #define CPYS_FUNC_STR       "cpys"
        !           550: #define CPYSN_FUNC_STR      "cpysn"
        !           551: #define CPYSE_FUNC_STR      "cpyse"
        !           552: #define MT_FPCR_FUNC_STR    "mt_fpcr"
        !           553: #define MF_FPCR_FUNC_STR    "mf_fpcr"
        !           554: #define FCMOVEQ_FUNC_STR    "fcmoveq"
        !           555: #define FCMOVNE_FUNC_STR    "fcmovne"
        !           556: #define FCMOVLT_FUNC_STR    "fcmovlt"
        !           557: #define FCMOVGE_FUNC_STR    "fcmovge"
        !           558: #define FCMOVLE_FUNC_STR    "fcmovle"
        !           559: #define FCMOVGT_FUNC_STR    "fcmovgt"
        !           560: #define CVTQL_FUNC_STR      "cvtql"
        !           561: #define CVTQLV_FUNC_STR     "cvtql/v"
        !           562: #define CVTQLSV_FUNC_STR    "cvtql/sv"
        !           563: 
        !           564: //
        !           565: // IEEE function codes without flags (in Function, Opcode 16).
        !           566: //
        !           567: 
        !           568: #define MSK_FP_OP       0x03F
        !           569: 
        !           570: #define ADDS_FUNC       0x000
        !           571: #define SUBS_FUNC       0x001
        !           572: #define MULS_FUNC       0x002
        !           573: #define DIVS_FUNC       0x003
        !           574: #define ADDT_FUNC       0x020
        !           575: #define SUBT_FUNC       0x021
        !           576: #define MULT_FUNC       0x022
        !           577: #define DIVT_FUNC       0x023
        !           578: #define CMPTUN_FUNC     0x024
        !           579: #define CMPTEQ_FUNC     0x025
        !           580: #define CMPTLT_FUNC     0x026
        !           581: #define CMPTLE_FUNC     0x027
        !           582: #define CVTTS_FUNC      0x02C
        !           583: #define CVTTQ_FUNC      0x02F
        !           584: #define CVTQS_FUNC      0x03C
        !           585: #define CVTQT_FUNC      0x03E
        !           586: 
        !           587: #define ADDS_FUNC_STR       "adds"
        !           588: #define SUBS_FUNC_STR       "subs"
        !           589: #define MULS_FUNC_STR       "muls"
        !           590: #define DIVS_FUNC_STR       "divs"
        !           591: #define ADDT_FUNC_STR       "addt"
        !           592: #define SUBT_FUNC_STR       "subt"
        !           593: #define MULT_FUNC_STR       "mult"
        !           594: #define DIVT_FUNC_STR       "divt"
        !           595: #define CMPTUN_FUNC_STR     "cmptun"
        !           596: #define CMPTEQ_FUNC_STR     "cmpteq"
        !           597: #define CMPTLT_FUNC_STR     "cmptlt"
        !           598: #define CMPTLE_FUNC_STR     "cmptle"
        !           599: #define CVTTS_FUNC_STR      "cvtts"
        !           600: #define CVTTQ_FUNC_STR      "cvttq"
        !           601: #define CVTQS_FUNC_STR      "cvtqs"
        !           602: #define CVTQT_FUNC_STR      "cvtqt"
        !           603: 
        !           604: //
        !           605: // CVTST is a little different.
        !           606: //
        !           607: 
        !           608: #define CVTST_FUNC      0x2AC
        !           609: #define CVTST_S_FUNC    0x6AC
        !           610: 
        !           611: #define CVTST_FUNC_STR      "cvtst"
        !           612: #define CVTST_S_FUNC_STR    "cvtst/s"
        !           613: 
        !           614: //
        !           615: // VAX function codes without flags (in Function, Opcode 15).
        !           616: //
        !           617: 
        !           618: #define ADDF_FUNC       0x000
        !           619: #define CVTDG_FUNC      0x01E
        !           620: #define ADDG_FUNC       0x020
        !           621: #define CMPGEQ_FUNC     0x025
        !           622: #define CMPGLT_FUNC     0x026
        !           623: #define CMPGLE_FUNC     0x027
        !           624: #define CVTGF_FUNC      0x02C
        !           625: #define CVTGD_FUNC      0x02D
        !           626: #define CVTQF_FUNC      0x03C
        !           627: #define CVTQG_FUNC      0x03E
        !           628: #define DIVF_FUNC       0x003
        !           629: #define DIVG_FUNC       0x023
        !           630: #define MULF_FUNC       0x002
        !           631: #define MULG_FUNC       0x022
        !           632: #define SUBF_FUNC       0x001
        !           633: #define SUBG_FUNC       0x021
        !           634: #define CVTGQ_FUNC      0x03F
        !           635: 
        !           636: #define ADDF_FUNC_STR       "addf"
        !           637: #define CVTDG_FUNC_STR      "cvtdg"
        !           638: #define ADDG_FUNC_STR       "addg"
        !           639: #define CMPGEQ_FUNC_STR     "cmpgeq"
        !           640: #define CMPGLT_FUNC_STR     "cmpglt"
        !           641: #define CMPGLE_FUNC_STR     "cmpgle"
        !           642: #define CVTGF_FUNC_STR      "cvtgf"
        !           643: #define CVTGD_FUNC_STR      "cvtgd"
        !           644: #define CVTQF_FUNC_STR      "cvtqf"
        !           645: #define CVTQG_FUNC_STR      "cvtqg"
        !           646: #define DIVF_FUNC_STR       "divf"
        !           647: #define DIVG_FUNC_STR       "divg"
        !           648: #define MULF_FUNC_STR       "mulf"
        !           649: #define MULG_FUNC_STR       "mulg"
        !           650: #define SUBF_FUNC_STR       "subf"
        !           651: #define SUBG_FUNC_STR       "subg"
        !           652: #define CVTGQ_FUNC_STR      "cvtgq"
        !           653: 
        !           654: //
        !           655: // Define subfields within the 11 bit IEEE floating operate function field.
        !           656: //
        !           657: 
        !           658: #define FP_FUNCTION_MASK      0x03F     // Function code including format
        !           659: 
        !           660: //
        !           661: // Define the 2 bit format field.
        !           662: //
        !           663: 
        !           664: #define FP_FORMAT_MASK        0x030
        !           665: #define FP_FORMAT_S           0x000     // Single (32 bit floating)
        !           666: #define FP_FORMAT_X           0x010     // Extended (128 bit floating)
        !           667: #define FP_FORMAT_T           0x020     // Double (64 bit floating)
        !           668: #define FP_FORMAT_Q           0x030     // Quad (64 bit integer)
        !           669: #define FP_FORMAT_SHIFT       4
        !           670: 
        !           671: //
        !           672: // Define the 2 bit rounding mode field.
        !           673: //
        !           674: 
        !           675: #define FP_ROUND_MASK         0x0C0
        !           676: #define FP_ROUND_C            0x000     // Chopped
        !           677: #define FP_ROUND_M            0x040     // Minus Infinity
        !           678: #define FP_ROUND_N            0x080     // Nearest
        !           679: #define FP_ROUND_D            0x0C0     // Dynamic
        !           680: #define FP_ROUND_SHIFT        6
        !           681: 
        !           682: //
        !           683: // Define the 3 bit trap enable field.
        !           684: //
        !           685: 
        !           686: #define FP_TRAP_ENABLE_MASK   0x700
        !           687: #define FP_TRAP_ENABLE_NONE   0x000
        !           688: #define FP_TRAP_ENABLE_U      0x100     // Underflow
        !           689: #define FP_TRAP_ENABLE_I      0x200     // Inexact
        !           690: 
        !           691: #define FP_TRAP_ENABLE_S      0x400     // Software Completion
        !           692: #define FP_TRAP_ENABLE_SU     0x500
        !           693: #define FP_TRAP_ENABLE_SUI    0x700
        !           694: 
        !           695: #define FP_TRAP_ENABLE_V      0x100     // Integer Overflow
        !           696: #define FP_TRAP_ENABLE_SV     0x500
        !           697: #define FP_TRAP_ENABLE_SVI    0x700
        !           698: 
        !           699: #define FP_TRAP_ENABLE_SHIFT  8
        !           700: 
        !           701: //
        !           702: // VAX and IEEE function flags (or'd with VAX and IEEE function code)
        !           703: //
        !           704: 
        !           705: #define MSK_FP_FLAGS    0x7C0
        !           706: 
        !           707: #define C_FLAGS         0x000
        !           708: #define M_FLAGS         0x040
        !           709: #define NONE_FLAGS      0x080
        !           710: #define D_FLAGS         0x0C0
        !           711: #define UC_FLAGS        0x100
        !           712: #define VC_FLAGS        0x100
        !           713: #define UM_FLAGS        0x140
        !           714: #define VM_FLAGS        0x140
        !           715: #define U_FLAGS         0x180
        !           716: #define V_FLAGS         0x180
        !           717: #define UD_FLAGS        0x1C0
        !           718: #define VD_FLAGS        0x1C0
        !           719: #define SC_FLAGS        0x400
        !           720: #define S_FLAGS         0x480
        !           721: #define SUC_FLAGS       0x500
        !           722: #define SVC_FLAGS       0x500
        !           723: #define SUM_FLAGS       0x540
        !           724: #define SVM_FLAGS       0x540
        !           725: #define SU_FLAGS        0x580
        !           726: #define SV_FLAGS        0x580
        !           727: #define SUD_FLAGS       0x5C0
        !           728: #define SVD_FLAGS       0x5C0
        !           729: #define SUIC_FLAGS      0x700
        !           730: #define SVIC_FLAGS      0x700
        !           731: #define SUIM_FLAGS      0x740
        !           732: #define SVIM_FLAGS      0x740
        !           733: #define SUI_FLAGS       0x780
        !           734: #define SVI_FLAGS       0x780
        !           735: #define SUID_FLAGS      0x7C0
        !           736: #define SVID_FLAGS      0x7C0
        !           737: 
        !           738: #define C_FLAGS_STR       "/c"
        !           739: #define M_FLAGS_STR       "/m"
        !           740: #define NONE_FLAGS_STR    ""
        !           741: #define D_FLAGS_STR       "/d"
        !           742: #define UC_FLAGS_STR      "/uc"
        !           743: #define VC_FLAGS_STR      "/vc"
        !           744: #define UM_FLAGS_STR      "/um"
        !           745: #define VM_FLAGS_STR      "/vm"
        !           746: #define U_FLAGS_STR       "/u"
        !           747: #define V_FLAGS_STR       "/v"
        !           748: #define UD_FLAGS_STR      "/ud"
        !           749: #define VD_FLAGS_STR      "/vd"
        !           750: #define SC_FLAGS_STR      "/sc"
        !           751: #define S_FLAGS_STR       "/s"
        !           752: #define SUC_FLAGS_STR     "/suc"
        !           753: #define SVC_FLAGS_STR     "/svc"
        !           754: #define SUM_FLAGS_STR     "/sum"
        !           755: #define SVM_FLAGS_STR     "/svm"
        !           756: #define SU_FLAGS_STR      "/su"
        !           757: #define SV_FLAGS_STR      "/sv"
        !           758: #define SUD_FLAGS_STR     "/sud"
        !           759: #define SVD_FLAGS_STR     "/svd"
        !           760: #define SUIC_FLAGS_STR    "/suic"
        !           761: #define SVIC_FLAGS_STR    "/svic"
        !           762: #define SUIM_FLAGS_STR    "/suim"
        !           763: #define SVIM_FLAGS_STR    "/svim"
        !           764: #define SUI_FLAGS_STR     "/sui"
        !           765: #define SVI_FLAGS_STR     "/svi"
        !           766: #define SUID_FLAGS_STR    "/suid"
        !           767: #define SVID_FLAGS_STR    "/svid"
        !           768: 
        !           769: //
        !           770: // Type (9) PALcode Instruction Format.
        !           771: //
        !           772: //  3         2 2
        !           773: //  1         6 5                                                 0
        !           774: // +-----------+---------------------------------------------------+
        !           775: // |   opcode  |                  PALcode func                     |
        !           776: // +-----------+---------------------------------------------------+
        !           777: //
        !           778: 
        !           779: typedef struct _Alpha_PAL_Format {
        !           780:         ULONG Function : 26;
        !           781:         ULONG Opcode : 6;
        !           782: } Alpha_PAL_Format;
        !           783: 
        !           784: //
        !           785: // Call to PAL function codes (in Function, Opcode 0, CALLPAL_OP).
        !           786: //
        !           787: // N.B. - if new call pal functions are added, they must also be added
        !           788: // in genalpha.c, genalpha.c will generate the include file for .s files
        !           789: // that will define the call pal mnemonics for assembly language use
        !           790: //
        !           791: 
        !           792: #define PRIV_PAL_FUNC 0x0
        !           793: #define UNPRIV_PAL_FUNC 0x80
        !           794: 
        !           795: 
        !           796: //
        !           797: // Unprivileged call pal functions.
        !           798: //
        !           799: 
        !           800: #define BPT_FUNC       (UNPRIV_PAL_FUNC | 0x00)
        !           801: #define CALLSYS_FUNC   (UNPRIV_PAL_FUNC | 0x03)
        !           802: #define IMB_FUNC       (UNPRIV_PAL_FUNC | 0x06)
        !           803: #define GENTRAP_FUNC   (UNPRIV_PAL_FUNC | 0xAA)
        !           804: #define RDTEB_FUNC     (UNPRIV_PAL_FUNC | 0xAB)
        !           805: #define KBPT_FUNC      (UNPRIV_PAL_FUNC | 0xAC)
        !           806: #define CALLKD_FUNC    (UNPRIV_PAL_FUNC | 0xAD)
        !           807: 
        !           808: #define BPT_FUNC_STR       "bpt"
        !           809: #define CALLSYS_FUNC_STR   "callsys"
        !           810: #define IMB_FUNC_STR       "imb"
        !           811: #define RDTEB_FUNC_STR     "rdteb"
        !           812: #define GENTRAP_FUNC_STR   "gentrap"
        !           813: #define KBPT_FUNC_STR      "kbpt"
        !           814: #define CALLKD_FUNC_STR    "callkd"
        !           815: 
        !           816: //
        !           817: // Priveleged call pal functions.
        !           818: //
        !           819: 
        !           820: #define HALT_FUNC       (PRIV_PAL_FUNC | 0x00)
        !           821: #define RESTART_FUNC    (PRIV_PAL_FUNC | 0x01)
        !           822: #define DRAINA_FUNC     (PRIV_PAL_FUNC | 0x02)
        !           823: #define INITPAL_FUNC    (PRIV_PAL_FUNC | 0x04)
        !           824: #define WRENTRY_FUNC    (PRIV_PAL_FUNC | 0x05)
        !           825: #define SWPIRQL_FUNC    (PRIV_PAL_FUNC | 0x06)
        !           826: #define RDIRQL_FUNC     (PRIV_PAL_FUNC | 0x07)
        !           827: #define DI_FUNC         (PRIV_PAL_FUNC | 0X08)
        !           828: #define EI_FUNC         (PRIV_PAL_FUNC | 0x09)
        !           829: #define SWPPAL_FUNC     (PRIV_PAL_FUNC | 0x0A)
        !           830: #define SSIR_FUNC       (PRIV_PAL_FUNC | 0x0C)
        !           831: #define CSIR_FUNC       (PRIV_PAL_FUNC | 0x0D)
        !           832: #define RFE_FUNC        (PRIV_PAL_FUNC | 0x0E)
        !           833: #define RETSYS_FUNC     (PRIV_PAL_FUNC | 0x0F)
        !           834: #define SWPCTX_FUNC     (PRIV_PAL_FUNC | 0x10)
        !           835: #define SWPPROCESS_FUNC (PRIV_PAL_FUNC | 0x11)
        !           836: #define RDMCES_FUNC     (PRIV_PAL_FUNC | 0x12)
        !           837: #define WRMCES_FUNC     (PRIV_PAL_FUNC | 0x13)
        !           838: #define TBIA_FUNC       (PRIV_PAL_FUNC | 0x14)
        !           839: #define TBIS_FUNC       (PRIV_PAL_FUNC | 0x15)
        !           840: #define DTBIS_FUNC      (PRIV_PAL_FUNC | 0x16)
        !           841: #define RDKSP_FUNC      (PRIV_PAL_FUNC | 0x18)
        !           842: #define SWPKSP_FUNC     (PRIV_PAL_FUNC | 0x19)
        !           843: #define RDPSR_FUNC      (PRIV_PAL_FUNC | 0x1A)
        !           844: #define RDPCR_FUNC      (PRIV_PAL_FUNC | 0x1C)
        !           845: #define RDTHREAD_FUNC   (PRIV_PAL_FUNC | 0x1E)
        !           846: #define RDCOUNTERS_FUNC (PRIV_PAL_FUNC | 0x30)
        !           847: #define RDSTATE_FUNC    (PRIV_PAL_FUNC | 0x31)
        !           848: #define WRPERFMON_FUNC  (PRIV_PAL_FUNC | 0x32)
        !           849: 
        !           850: #define HALT_FUNC_STR       "halt"
        !           851: #define RESTART_FUNC_STR    "restart"
        !           852: #define DRAINA_FUNC_STR     "draina"
        !           853: #define INITPAL_FUNC_STR    "initpal"
        !           854: #define WRENTRY_FUNC_STR    "wrentry"
        !           855: #define SWPIRQL_FUNC_STR    "swpirql"
        !           856: #define RDIRQL_FUNC_STR     "rdirql"
        !           857: #define DI_FUNC_STR         "di"
        !           858: #define EI_FUNC_STR         "ei"
        !           859: #define SWPPAL_FUNC_STR     "swppal"
        !           860: #define SSIR_FUNC_STR       "ssir"
        !           861: #define CSIR_FUNC_STR       "csir"
        !           862: #define RFE_FUNC_STR        "rfe"
        !           863: #define RETSYS_FUNC_STR     "retsys"
        !           864: #define SWPCTX_FUNC_STR     "swpctx"
        !           865: #define SWPPROCESS_FUNC_STR "swpprocess"
        !           866: #define RDMCES_FUNC_STR     "rdmces"
        !           867: #define WRMCES_FUNC_STR     "wrmces"
        !           868: #define TBIA_FUNC_STR       "tbia"
        !           869: #define TBIS_FUNC_STR       "tbis"
        !           870: #define DTBIS_FUNC_STR      "dtbis"
        !           871: #define RDKSP_FUNC_STR      "rdksp"
        !           872: #define SWPKSP_FUNC_STR     "swpksp"
        !           873: #define RDPSR_FUNC_STR      "rdpsr"
        !           874: #define RDPCR_FUNC_STR      "rdpcr"
        !           875: #define RDTHREAD_FUNC_STR   "rdthread"
        !           876: #define RDCOUNTERS_FUNC_STR "rdcounters"
        !           877: #define RDSTATE_FUNC_STR    "rdstate"
        !           878: #define WRPERFMON_FUNC_STR "wrperfmon"
        !           879: 
        !           880: //
        !           881: // 21064 (ev4) - specific call pal functions.
        !           882: //
        !           883: 
        !           884: #define INITPCR_FUNC    (PRIV_PAL_FUNC | 0x38)
        !           885: 
        !           886: #define INITPCR_FUNC_STR   "initpcr"
        !           887: 
        !           888: //
        !           889: // Type (10) EV4 MTPR/MFPR PAL mode instructions.
        !           890: //
        !           891: //  3         2 2       2 2       1 1
        !           892: //  1         6 5       1 0       6 5             8 7 6 5 4       0
        !           893: // +-----------+---------+---------+---------------+-+-+-+---------+
        !           894: // |   opcode  |   Ra    |   Rb    |      IGN      |P|A|I|  Index  |
        !           895: // +-----------+---------+---------+---------------+-+-+-+---------+
        !           896: //
        !           897: 
        !           898: typedef struct _Alpha_EV4_PR_Format {
        !           899:         ULONG Index : 5;
        !           900:         ULONG Ibox : 1;
        !           901:         ULONG Abox : 1;
        !           902:         ULONG PalTemp : 1;
        !           903:         ULONG IGN : 8;
        !           904:         ULONG Rb : 5;
        !           905:         ULONG Ra : 5;
        !           906:         ULONG Opcode : 6;
        !           907: } Alpha_EV4_PR_Format;
        !           908: 
        !           909: #define MTPR_OP       0x1D
        !           910: #define MFPR_OP       0x19
        !           911: 
        !           912: #define MTPR_OP_STR   "mt"
        !           913: #define MFPR_OP_STR   "mf"
        !           914: 
        !           915: //
        !           916: // Type (11) EV4 special memory PAL mode access.
        !           917: //
        !           918: //  3         2 2       2 2       1 1 1 1 1 1
        !           919: //  1         6 5       1 0       6 5 4 3 2 1                     0
        !           920: // +-----------+---------+---------+-+-+-+-+-----------------------+
        !           921: // |   opcode  |   Ra    |   Rb    |P|A|R|Q|         Disp          |
        !           922: // +-----------+---------+---------+-+-+-+-+-----------------------+
        !           923: //
        !           924: 
        !           925: typedef struct _Alpha_EV4_MEM_Format {
        !           926:         ULONG Disp : 12;
        !           927:         ULONG QuadWord : 1;
        !           928:         ULONG RWcheck : 1;
        !           929:         ULONG Alt : 1;
        !           930:         ULONG Physical : 1;
        !           931:         ULONG Rb : 5;
        !           932:         ULONG Ra : 5;
        !           933:         ULONG Opcode : 6;
        !           934: } Alpha_EV4_MEM_Format;
        !           935: 
        !           936: #define HWLD_OP      0x1B
        !           937: #define HWST_OP      0x1F
        !           938: 
        !           939: #define HWLD_OP_STR  "hwld"
        !           940: #define HWST_OP_STR  "hwst"
        !           941: 
        !           942: // Type (12) EV4 PAL mode switch.
        !           943: //
        !           944: //  3         2 2       2 2       1 1 1 1
        !           945: //  1         6 5       1 0       6 5 4 3                         0
        !           946: // +-----------+---------+---------+-+-+---------------------------+
        !           947: // |   opcode  |   Ra    |   Rb    |1|0|          IGN              |
        !           948: // +-----------+---------+---------+-+-+---------------------------+
        !           949: 
        !           950: typedef struct _Alpha_EV4_REI_Format {
        !           951:         ULONG IGN : 14;
        !           952:         ULONG zero : 1;
        !           953:         ULONG one : 1;
        !           954:         ULONG Rb : 5;
        !           955:         ULONG Ra : 5;
        !           956:         ULONG Opcode : 6;
        !           957: } Alpha_EV4_REI_Format;
        !           958: 
        !           959: #define REI_OP    0x1E
        !           960: 
        !           961: #define REI_OP_STR  "rei"
        !           962: 
        !           963: //
        !           964: //
        !           965: //
        !           966: typedef union _Alpha_Instruction {
        !           967:         ULONG Long;
        !           968:         UCHAR Byte[4];
        !           969: 
        !           970:         Alpha_Memory_Format Memory;
        !           971:         Alpha_Jump_Format Jump;
        !           972:         Alpha_Branch_Format Branch;
        !           973:         Alpha_OpReg_Format OpReg;
        !           974:         Alpha_OpLit_Format OpLit;
        !           975:         Alpha_FpOp_Format FpOp;
        !           976:         Alpha_PAL_Format Pal;
        !           977:         Alpha_EV4_PR_Format EV4_PR;
        !           978:         Alpha_EV4_MEM_Format EV4_MEM;
        !           979:         Alpha_EV4_REI_Format EV4_REI;
        !           980: } ALPHA_INSTRUCTION, *PALPHA_INSTRUCTION;
        !           981: 
        !           982: //
        !           983: // Define standard integer register assignments.
        !           984: //
        !           985: 
        !           986: #define V0_REG      0       // v0 - return value register
        !           987: 
        !           988: #define T0_REG      1       // t0 - temporary register
        !           989: #define T1_REG      2       // t1 - temporary register
        !           990: #define T2_REG      3       // t2 - temporary register
        !           991: #define T3_REG      4       // t3 - temporary register
        !           992: #define T4_REG      5       // t4 - temporary register
        !           993: #define T5_REG      6       // t5 - temporary register
        !           994: #define T6_REG      7       // t6 - temporary register
        !           995: #define T7_REG      8       // t7 - temporary register
        !           996: 
        !           997: #define S0_REG      9       // s0 - saved register
        !           998: #define S1_REG      10      // s1 - saved register
        !           999: #define S2_REG      11      // s2 - saved register
        !          1000: #define S3_REG      12      // s3 - saved register
        !          1001: #define S4_REG      13      // s4 - saved register
        !          1002: #define S5_REG      14      // s5 - saved register
        !          1003: 
        !          1004: #define S6_REG      15      // s6 - saved register, aka fp
        !          1005: #define FP_REG      15      // fp - frame pointer register
        !          1006: 
        !          1007: #define A0_REG      16      // a0 - argument register
        !          1008: #define A1_REG      17      // a1 - argument register
        !          1009: #define A2_REG      18      // a2 - argument register
        !          1010: #define A3_REG      19      // a3 - argument register
        !          1011: #define A4_REG      20      // a4 - argument register
        !          1012: #define A5_REG      21      // a5 - argument register
        !          1013: 
        !          1014: #define T8_REG      22      // t8 - temporary register
        !          1015: #define T9_REG      23      // t9 - temporary register
        !          1016: #define T10_REG     24      // t10 - temporary register
        !          1017: #define T11_REG     25      // t11 - temporary register
        !          1018: 
        !          1019: #define RA_REG      26      // ra - return address register
        !          1020: #define T12_REG     27      // t12 - temporary register
        !          1021: #define AT_REG      28      // at - assembler temporary register
        !          1022: #define GP_REG      29      // gp - global pointer register
        !          1023: #define SP_REG      30      // sp - stack pointer register
        !          1024: #define ZERO_REG    31      // zero - zero register
        !          1025: 
        !          1026: //
        !          1027: // Define standard floating point register assignments.
        !          1028: //
        !          1029: 
        !          1030: #define F0_REG      0       // floating return value register (real)
        !          1031: #define F1_REG      1       // floating return value register (imaginary)
        !          1032: #define F16_REG     16      // floating argument register
        !          1033: #define FZERO_REG   31      // floating zero register
        !          1034: 
        !          1035: //
        !          1036: //  Define standard integer register strings
        !          1037: //
        !          1038: 
        !          1039: #define V0_REG_STR      "v0"     // - return value register
        !          1040: 
        !          1041: #define T0_REG_STR      "t0"     // - temporary register
        !          1042: #define T1_REG_STR      "t1"     // - temporary register
        !          1043: #define T2_REG_STR      "t2"     // - temporary register
        !          1044: #define T3_REG_STR      "t3"     // - temporary register
        !          1045: #define T4_REG_STR      "t4"     // - temporary register
        !          1046: #define T5_REG_STR      "t5"     // - temporary register
        !          1047: #define T6_REG_STR      "t6"     // - temporary register
        !          1048: #define T7_REG_STR      "t7"     // - temporary register
        !          1049: 
        !          1050: #define S0_REG_STR      "s0"     // - saved register
        !          1051: #define S1_REG_STR      "s1"     // - saved register
        !          1052: #define S2_REG_STR      "s2"     // - saved register
        !          1053: #define S3_REG_STR      "s3"     // - saved register
        !          1054: #define S4_REG_STR      "s4"     // - saved register
        !          1055: #define S5_REG_STR      "s5"     // - saved register
        !          1056: 
        !          1057: #define S6_REG_STR      "s6"     // - saved register, aka fp
        !          1058: #define FP_REG_STR      "fp"     // - frame pointer register
        !          1059: 
        !          1060: #define A0_REG_STR      "a0"     // - argument register
        !          1061: #define A1_REG_STR      "a1"     // - argument register
        !          1062: #define A2_REG_STR      "a2"     // - argument register
        !          1063: #define A3_REG_STR      "a3"     // - argument register
        !          1064: #define A4_REG_STR      "a4"     // - argument register
        !          1065: #define A5_REG_STR      "a5"     // - argument register
        !          1066: 
        !          1067: #define T8_REG_STR      "t8"     // - temporary register
        !          1068: #define T9_REG_STR      "t9"     // - temporary register
        !          1069: #define T10_REG_STR     "t10"    // - temporary register
        !          1070: #define T11_REG_STR     "t11"    // - temporary register
        !          1071: 
        !          1072: #define RA_REG_STR      "ra"     // - return address register
        !          1073: #define T12_REG_STR     "t12"    // - temporary register
        !          1074: #define AT_REG_STR      "at"     // - assembler temporary register
        !          1075: #define GP_REG_STR      "gp"     // - global pointer register
        !          1076: #define SP_REG_STR      "sp"     // - stack pointer register
        !          1077: #define ZERO_REG_STR    "zero"   // - zero register
        !          1078: 
        !          1079: //
        !          1080: // Define maximum and minimum single and double exponent values.
        !          1081: //
        !          1082: 
        !          1083: #define DOUBLE_MAXIMUM_EXPONENT 2047
        !          1084: #define DOUBLE_MINIMUM_EXPONENT 0
        !          1085: 
        !          1086: #define SINGLE_MAXIMUM_EXPONENT 255
        !          1087: #define SINGLE_MINIMUM_EXPONENT 0
        !          1088: 
        !          1089: //
        !          1090: // Define single and double exponent bias values.
        !          1091: //
        !          1092: 
        !          1093: #define SINGLE_EXPONENT_BIAS 127
        !          1094: #define DOUBLE_EXPONENT_BIAS 1023
        !          1095: 
        !          1096: //
        !          1097: // Define the largest single and double values.
        !          1098: //
        !          1099: 
        !          1100: #define SINGLE_MAXIMUM_VALUE 0x7f7fffff
        !          1101: 
        !          1102: #define DOUBLE_MAXIMUM_VALUE_HIGH 0x7fefffff
        !          1103: #define DOUBLE_MAXIMUM_VALUE_LOW 0xffffffff
        !          1104: 
        !          1105: //
        !          1106: // Define single and double quiet and signaling Nan values
        !          1107: // (these are identical to X86 formats; Mips is different).
        !          1108: //
        !          1109: 
        !          1110: #define SINGLE_QUIET_NAN_PREFIX 0x7fc00000
        !          1111: #define SINGLE_SIGNAL_NAN_PREFIX 0x7f800000
        !          1112: #define SINGLE_QUIET_NAN_VALUE 0xffc00000
        !          1113: 
        !          1114: #define DOUBLE_QUIET_NAN_PREFIX_HIGH 0x7ff80000
        !          1115: #define DOUBLE_SIGNAL_NAN_PREFIX_HIGH 0x7ff00000
        !          1116: #define DOUBLE_QUIET_NAN_VALUE_HIGH 0xfff80000
        !          1117: #define DOUBLE_QUIET_NAN_VALUE_LOW 0x0
        !          1118: 
        !          1119: //
        !          1120: // Define positive single and double infinity values.
        !          1121: //
        !          1122: 
        !          1123: #define SINGLE_INFINITY_VALUE 0x7f800000
        !          1124: 
        !          1125: #define DOUBLE_INFINITY_VALUE_HIGH 0x7ff00000
        !          1126: #define DOUBLE_INFINITY_VALUE_LOW 0x0
        !          1127: 
        !          1128: //
        !          1129: // Quadword versions of the above.
        !          1130: //
        !          1131: 
        !          1132: #define DOUBLE_MAXIMUM_VALUE        ((ULONGLONG)0x7fefffffffffffff)
        !          1133: #define DOUBLE_INFINITY_VALUE       ((ULONGLONG)0x7ff0000000000000)
        !          1134: #define DOUBLE_QUIET_NAN_VALUE      ((ULONGLONG)0xfff8000000000000)
        !          1135: 
        !          1136: //
        !          1137: // Define result values for IEEE floating point comparison operations.
        !          1138: // True is 2.0 and False is 0.0.
        !          1139: //
        !          1140: 
        !          1141: #define FP_COMPARE_TRUE             ((ULONGLONG)0x4000000000000000)
        !          1142: #define FP_COMPARE_FALSE            ((ULONGLONG)0x0000000000000000)
        !          1143: 
        !          1144: //
        !          1145: // Define Alpha AXP rounding modes.
        !          1146: //
        !          1147: 
        !          1148: #define ROUND_TO_ZERO 0                 // round toward zero
        !          1149: #define ROUND_TO_MINUS_INFINITY 1       // round toward minus infinity
        !          1150: #define ROUND_TO_NEAREST 2              // round to nearest representable value
        !          1151: #define ROUND_TO_PLUS_INFINITY 3        // round toward plus infinity
        !          1152: 
        !          1153: #endif // _ALPHAOPS_

unix.superglobalmegacorp.com

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