📄 alphaops.h
字号:
#define AND_FUNC_STR "and"
#define BIC_FUNC_STR "bic"
#define BIS_FUNC_STR "bis"
#define EQV_FUNC_STR "eqv"
#define ORNOT_FUNC_STR "ornot"
#define XOR_FUNC_STR "xor"
#define CMOVEQ_FUNC_STR "cmoveq"
#define CMOVGE_FUNC_STR "cmovge"
#define CMOVGT_FUNC_STR "cmovgt"
#define CMOVLBC_FUNC_STR "cmovlbc"
#define CMOVLBS_FUNC_STR "cmovlbs"
#define CMOVLE_FUNC_STR "cmovle"
#define CMOVLT_FUNC_STR "cmovlt"
#define CMOVNE_FUNC_STR "cmovne"
//
// Shift and byte operate function codes (in Function, Opcode 12, BYTE_OP).
//
#define SLL_FUNC 0x39 // Shift Left Logical
#define SRL_FUNC 0x34 // Shift Right Logical
#define SRA_FUNC 0x3C // Shift Right Arithmetic
#define EXTBL_FUNC 0x06 // Extract Byte Low
#define EXTWL_FUNC 0x16 // Extract Word Low
#define EXTLL_FUNC 0x26 // Extract Longword Low
#define EXTQL_FUNC 0x36 // Extract Quadword Low
#define EXTWH_FUNC 0x5A // Extract Word High
#define EXTLH_FUNC 0x6A // Extract Longword High
#define EXTQH_FUNC 0x7A // Extract Quadword High
#define INSBL_FUNC 0x0B // Insert Byte Low
#define INSWL_FUNC 0x1B // Insert Word Low
#define INSLL_FUNC 0x2B // Insert Longword Low
#define INSQL_FUNC 0x3B // Quadword Low
#define INSWH_FUNC 0x57 // Insert Word High
#define INSLH_FUNC 0x67 // Insert Longword High
#define INSQH_FUNC 0x77 // Insert Quadword High
#define MSKBL_FUNC 0x02 // Mask Byte Low
#define MSKWL_FUNC 0x12 // Mask Word Low
#define MSKLL_FUNC 0x22 // Mask Longword Low
#define MSKQL_FUNC 0x32 // Mask Quadword Low
#define MSKWH_FUNC 0x52 // Mask Word High
#define MSKLH_FUNC 0x62 // Mask Longword High
#define MSKQH_FUNC 0x72 // Mask Quadword High
#define ZAP_FUNC 0x30 // Zero Bytes
#define ZAPNOT_FUNC 0x31 // Zero Bytes Not
#define SLL_FUNC_STR "sll"
#define SRL_FUNC_STR "srl"
#define SRA_FUNC_STR "sra"
#define EXTBL_FUNC_STR "extbl"
#define EXTWL_FUNC_STR "extwl"
#define EXTLL_FUNC_STR "extll"
#define EXTQL_FUNC_STR "extql"
#define EXTWH_FUNC_STR "extwh"
#define EXTLH_FUNC_STR "extlh"
#define EXTQH_FUNC_STR "extqh"
#define INSBL_FUNC_STR "insbl"
#define INSWL_FUNC_STR "inswl"
#define INSLL_FUNC_STR "insll"
#define INSQL_FUNC_STR "insql"
#define INSWH_FUNC_STR "inswh"
#define INSLH_FUNC_STR "inslh"
#define INSQH_FUNC_STR "insqh"
#define MSKBL_FUNC_STR "mskbl"
#define MSKWL_FUNC_STR "mskwl"
#define MSKLL_FUNC_STR "mskll"
#define MSKQL_FUNC_STR "mskql"
#define MSKWH_FUNC_STR "mskwh"
#define MSKLH_FUNC_STR "msklh"
#define MSKQH_FUNC_STR "mskqh"
#define ZAP_FUNC_STR "zap"
#define ZAPNOT_FUNC_STR "zapnot"
//
// Integer multiply operate function codes (in Function, Opcode 13, MUL_OP).
//
#define MULL_FUNC 0x00 // Multiply Longword
#define MULLV_FUNC 0x40 // Multiply Longword, Integer Overflow Enable
#define MULQ_FUNC 0x20 // Multiply Quadword
#define MULQV_FUNC 0x60 // Multiply Quadword, Integer Overflow Enable
#define UMULH_FUNC 0x30 // Unsinged Multiply Quadword High
#define MULL_FUNC_STR "mull"
#define MULLV_FUNC_STR "mull/v"
#define MULQ_FUNC_STR "mulq"
#define MULQV_FUNC_STR "mulq/v"
#define UMULH_FUNC_STR "umulh"
//
// Sign extend operate function codes (in Function, Opcode 1c, SEXT_OP).
//
#define SEXTB_FUNC 0
#define SEXTW_FUNC 1
#define SEXTB_FUNC_STR "sextb"
#define SEXTW_FUNC_STR "sextw"
//
// Type (7) Floating-point Operate Instruction Format.
// Type (8) Floating-point Convert Instruction Format.
//
// Type 6 and 7 are the same, except for type 7
// Fc == F31 (1s) and Fb is the source.
//
// 3 2 2 2 2 1 1
// 1 6 5 1 0 6 5 5 4 0
// +-----------+---------+---------+---------------------+---------+
// | opcode | Fa | Fb | function | Fc |
// +-----------+---------+---------+---------------------+---------+
//
typedef struct _Alpha_FpOp_Format {
ULONG Fc : 5;
ULONG Function : 11;
ULONG Fb : 5;
ULONG Fa : 5;
ULONG Opcode : 6;
} Alpha_FpOp_Format;
//
// Format independent function codes (in Function, Opcode 17)
//
#define CVTLQ_FUNC 0x010
#define CPYS_FUNC 0x020
#define CPYSN_FUNC 0x021
#define CPYSE_FUNC 0x022
#define MT_FPCR_FUNC 0x024
#define MF_FPCR_FUNC 0x025
#define FCMOVEQ_FUNC 0x02A
#define FCMOVNE_FUNC 0x02B
#define FCMOVLT_FUNC 0x02C
#define FCMOVGE_FUNC 0x02D
#define FCMOVLE_FUNC 0x02E
#define FCMOVGT_FUNC 0x02F
#define CVTQL_FUNC 0x030
#define CVTQLV_FUNC 0x130
#define CVTQLSV_FUNC 0x530
#define CVTLQ_FUNC_STR "cvtlq"
#define CPYS_FUNC_STR "cpys"
#define CPYSN_FUNC_STR "cpysn"
#define CPYSE_FUNC_STR "cpyse"
#define MT_FPCR_FUNC_STR "mt_fpcr"
#define MF_FPCR_FUNC_STR "mf_fpcr"
#define FCMOVEQ_FUNC_STR "fcmoveq"
#define FCMOVNE_FUNC_STR "fcmovne"
#define FCMOVLT_FUNC_STR "fcmovlt"
#define FCMOVGE_FUNC_STR "fcmovge"
#define FCMOVLE_FUNC_STR "fcmovle"
#define FCMOVGT_FUNC_STR "fcmovgt"
#define CVTQL_FUNC_STR "cvtql"
#define CVTQLV_FUNC_STR "cvtql/v"
#define CVTQLSV_FUNC_STR "cvtql/sv"
//
// IEEE function codes without flags (in Function, Opcode 16).
//
#define MSK_FP_OP 0x03F
#define ADDS_FUNC 0x000
#define SUBS_FUNC 0x001
#define MULS_FUNC 0x002
#define DIVS_FUNC 0x003
#define ADDT_FUNC 0x020
#define SUBT_FUNC 0x021
#define MULT_FUNC 0x022
#define DIVT_FUNC 0x023
#define CMPTUN_FUNC 0x024
#define CMPTEQ_FUNC 0x025
#define CMPTLT_FUNC 0x026
#define CMPTLE_FUNC 0x027
#define CVTTS_FUNC 0x02C
#define CVTTQ_FUNC 0x02F
#define CVTQS_FUNC 0x03C
#define CVTQT_FUNC 0x03E
#define ADDS_FUNC_STR "adds"
#define SUBS_FUNC_STR "subs"
#define MULS_FUNC_STR "muls"
#define DIVS_FUNC_STR "divs"
#define ADDT_FUNC_STR "addt"
#define SUBT_FUNC_STR "subt"
#define MULT_FUNC_STR "mult"
#define DIVT_FUNC_STR "divt"
#define CMPTUN_FUNC_STR "cmptun"
#define CMPTEQ_FUNC_STR "cmpteq"
#define CMPTLT_FUNC_STR "cmptlt"
#define CMPTLE_FUNC_STR "cmptle"
#define CVTTS_FUNC_STR "cvtts"
#define CVTTQ_FUNC_STR "cvttq"
#define CVTQS_FUNC_STR "cvtqs"
#define CVTQT_FUNC_STR "cvtqt"
//
// CVTST is a little different.
//
#define CVTST_FUNC 0x2AC
#define CVTST_S_FUNC 0x6AC
#define CVTST_FUNC_STR "cvtst"
#define CVTST_S_FUNC_STR "cvtst/s"
//
// VAX function codes without flags (in Function, Opcode 15).
//
#define ADDF_FUNC 0x000
#define CVTDG_FUNC 0x01E
#define ADDG_FUNC 0x020
#define CMPGEQ_FUNC 0x025
#define CMPGLT_FUNC 0x026
#define CMPGLE_FUNC 0x027
#define CVTGF_FUNC 0x02C
#define CVTGD_FUNC 0x02D
#define CVTQF_FUNC 0x03C
#define CVTQG_FUNC 0x03E
#define DIVF_FUNC 0x003
#define DIVG_FUNC 0x023
#define MULF_FUNC 0x002
#define MULG_FUNC 0x022
#define SUBF_FUNC 0x001
#define SUBG_FUNC 0x021
#define CVTGQ_FUNC 0x0AF
#define ADDF_FUNC_STR "addf"
#define CVTDG_FUNC_STR "cvtdg"
#define ADDG_FUNC_STR "addg"
#define CMPGEQ_FUNC_STR "cmpgeq"
#define CMPGLT_FUNC_STR "cmpglt"
#define CMPGLE_FUNC_STR "cmpgle"
#define CVTGF_FUNC_STR "cvtgf"
#define CVTGD_FUNC_STR "cvtgd"
#define CVTQF_FUNC_STR "cvtqf"
#define CVTQG_FUNC_STR "cvtqg"
#define DIVF_FUNC_STR "divf"
#define DIVG_FUNC_STR "divg"
#define MULF_FUNC_STR "mulf"
#define MULG_FUNC_STR "mulg"
#define SUBF_FUNC_STR "subf"
#define SUBG_FUNC_STR "subg"
#define CVTGQ_FUNC_STR "cvtgq"
//
// Define subfields within the 11 bit IEEE floating operate function field.
//
#define FP_FUNCTION_MASK 0x03F // Function code including format
//
// Define the 2 bit format field.
//
#define FP_FORMAT_MASK 0x030
#define FP_FORMAT_S 0x000 // Single (32 bit floating)
#define FP_FORMAT_X 0x010 // Extended (128 bit floating)
#define FP_FORMAT_T 0x020 // Double (64 bit floating)
#define FP_FORMAT_Q 0x030 // Quad (64 bit integer)
#define FP_FORMAT_SHIFT 4
//
// Define the 2 bit rounding mode field.
//
#define FP_ROUND_MASK 0x0C0
#define FP_ROUND_C 0x000 // Chopped
#define FP_ROUND_M 0x040 // Minus Infinity
#define FP_ROUND_N 0x080 // Nearest
#define FP_ROUND_D 0x0C0 // Dynamic
#define FP_ROUND_SHIFT 6
//
// Define the 3 bit trap enable field.
//
#define FP_TRAP_ENABLE_MASK 0x700
#define FP_TRAP_ENABLE_NONE 0x000
#define FP_TRAP_ENABLE_U 0x100 // Underflow
#define FP_TRAP_ENABLE_I 0x200 // Inexact
#define FP_TRAP_ENABLE_S 0x400 // Software Completion
#define FP_TRAP_ENABLE_SU 0x500
#define FP_TRAP_ENABLE_SUI 0x700
#define FP_TRAP_ENABLE_V 0x100 // Integer Overflow
#define FP_TRAP_ENABLE_SV 0x500
#define FP_TRAP_ENABLE_SVI 0x700
#define FP_TRAP_ENABLE_SHIFT 8
//
// VAX and IEEE function flags (or'd with VAX and IEEE function code)
//
#define MSK_FP_FLAGS 0x7C0
#define C_FLAGS 0x000
#define M_FLAGS 0x040
#define NONE_FLAGS 0x080
#define D_FLAGS 0x0C0
#define UC_FLAGS 0x100
#define VC_FLAGS 0x100
#define UM_FLAGS 0x140
#define VM_FLAGS 0x140
#define U_FLAGS 0x180
#define V_FLAGS 0x180
#define UD_FLAGS 0x1C0
#define VD_FLAGS 0x1C0
#define SC_FLAGS 0x400
#define S_FLAGS 0x480
#define SUC_FLAGS 0x500
#define SVC_FLAGS 0x500
#define SUM_FLAGS 0x540
#define SVM_FLAGS 0x540
#define SU_FLAGS 0x580
#define SV_FLAGS 0x580
#define SUD_FLAGS 0x5C0
#define SVD_FLAGS 0x5C0
#define SUIC_FLAGS 0x700
#define SVIC_FLAGS 0x700
#define SUIM_FLAGS 0x740
#define SVIM_FLAGS 0x740
#define SUI_FLAGS 0x780
#define SVI_FLAGS 0x780
#define SUID_FLAGS 0x7C0
#define SVID_FLAGS 0x7C0
#define C_FLAGS_STR "/c"
#define M_FLAGS_STR "/m"
#define NONE_FLAGS_STR ""
#define D_FLAGS_STR "/d"
#define UC_FLAGS_STR "/uc"
#define VC_FLAGS_STR "/vc"
#define UM_FLAGS_STR "/um"
#define VM_FLAGS_STR "/vm"
#define U_FLAGS_STR "/u"
#define V_FLAGS_STR "/v"
#define UD_FLAGS_STR "/ud"
#define VD_FLAGS_STR "/vd"
#define SC_FLAGS_STR "/sc"
#define S_FLAGS_STR "/s"
#define SUC_FLAGS_STR "/suc"
#define SVC_FLAGS_STR "/svc"
#define SUM_FLAGS_STR "/sum"
#define SVM_FLAGS_STR "/svm"
#define SU_FLAGS_STR "/su"
#define SV_FLAGS_STR "/sv"
#define SUD_FLAGS_STR "/sud"
#define SVD_FLAGS_STR "/svd"
#define SUIC_FLAGS_STR "/suic"
#define SVIC_FLAGS_STR "/svic"
#define SUIM_FLAGS_STR "/suim"
#define SVIM_FLAGS_STR "/svim"
#define SUI_FLAGS_STR "/sui"
#define SVI_FLAGS_STR "/svi"
#define SUID_FLAGS_STR "/suid"
#define SVID_FLAGS_STR "/svid"
//
// Type (9) PALcode Instruction Format.
//
// 3 2 2
// 1 6 5 0
// +-----------+---------------------------------------------------+
// | opcode | PALcode func |
// +-----------+---------------------------------------------------+
//
typedef struct _Alpha_PAL_Format {
ULONG Function : 26;
ULONG Opcode : 6;
} Alpha_PAL_Format;
//
// Call to PAL function codes (in Function, Opcode 0, CALLPAL_OP).
//
// N.B. - if new call pal functions are added, they must also be added
// in genalpha.c, genalpha.c will generate the include file for .s files
// that will define the call pal mnemonics for assembly language use
//
#define PRIV_PAL_FUNC 0x0
#define UNPRIV_PAL_FUNC 0x80
//
// Unprivileged call pal functions.
//
#define BPT_FUNC (UNPRIV_PAL_FUNC | 0x00)
#define CALLSYS_FUNC (UNPRIV_PAL_FUNC | 0x03)
#define IMB_FUNC (UNPRIV_PAL_FUNC | 0x06)
#define GENTRAP_FUNC (UNPRIV_PAL_FUNC | 0xAA)
#define RDTEB_FUNC (UNPRIV_PAL_FUNC | 0xAB)
#define KBPT_FUNC (UNPRIV_PAL_FUNC | 0xAC)
#define CALLKD_FUNC (UNPRIV_PAL_FUNC | 0xAD)
#define BPT_FUNC_STR "bpt"
#define CALLSYS_FUNC_STR "callsys"
#define IMB_FUNC_STR "imb"
#define RDTEB_FUNC_STR "rdteb"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -