|
|
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_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.