⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdefn386.h

📁 Open Watcom 的 C 编译器源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
#define C_inpw_ret    HW_D( HW_EAX )
#define C_inpw_parms  P_DX
#define C_inpw_saves   HW_NotD( HW_EAX )
static byte_seq C_inpw = {
                4,
              { sub_rr,ax_ax,
                size_prefix,
                in_ax_dx }
        };


#define C_inpd_ret    HW_D( HW_EAX )
#define C_inpd_parms  P_DX
#define C_inpd_saves   HW_NotD( HW_EAX )
static byte_seq C_inpd = {
                1,
              { in_ax_dx }
        };


#define C_outp_ret    HW_D( HW_EAX )
#define C_outp_parms  P_DX_AL
#define C_outp_saves   HW_NotD( HW_EMPTY )
static byte_seq C_outp = {
                1,
              { out_dx_al }
        };


#define C_outpw_ret    HW_D( HW_EAX )
#define C_outpw_parms  P_DX_AX
#define C_outpw_saves   HW_NotD( HW_EMPTY )
static byte_seq C_outpw = {
                2,
              { size_prefix,
                out_dx_ax }
        };


#define C_outpd_ret    HW_D( HW_EAX )
#define C_outpd_parms  P_DX_AX
#define C_outpd_saves   HW_NotD( HW_EMPTY )
static byte_seq C_outpd = {
                1,
              { out_dx_ax }
        };


#define C_movedata_ret    HW_D( HW_EMPTY )
#define C_movedata_parms  P_AX_SI_DX_DI_CX
#define C_movedata_saves   HW_NotD_4( HW_EAX, HW_ECX, HW_ESI, HW_EDI )
static byte_seq C_movedata = {
                22,
              { push_ds,
                push_es,
                mov_ds_ax,
                mov_es_dx,
                mov_ax_cx,
                shr_cx_2,
                rep,
                movsd,
                mov_cl_al,
                and_cl,3,
                rep,
                movsb,
                pop_es,
                pop_ds }
        };

#define C_enable_ret    HW_D( HW_EMPTY )
#define C_enable_parms  P_AX
#define C_enable_saves   HW_NotD( HW_EMPTY )
static byte_seq C_enable = {
                2,
              { sti,
                cld }
        };

#define C_disable_ret    HW_D( HW_EMPTY )
#define C_disable_parms  P_AX
#define C_disable_saves   HW_NotD( HW_EMPTY )
static byte_seq C_disable = {
                1,
              { cli } 
        };

#define C_rotl_ret    HW_D( HW_EAX )
#define C_rotl_parms  P_AX_CX
#define C_rotl_saves   HW_NotD( HW_EAX )
static byte_seq C_rotl = {
                2,
              { 0xd3,0xc0 }     /* rol ax,cl */
        };

#define C_rotr_ret    HW_D( HW_EAX )
#define C_rotr_parms  P_AX_CX
#define C_rotr_saves   HW_NotD( HW_EAX )
static byte_seq C_rotr = {
                2,
              { 0xd3,0xc8 }     /* ror ax,cl */
        };

#define C_8087_fabs_ret    HW_D( HW_FLTS )
#define C_8087_fabs_parms  P_8087
#define C_8087_fabs_saves   HW_NotD( HW_EMPTY )
static byte_seq _8087_fabs = {
                2,
              { fabs }
        };

#define C_fabs_ret    HW_D_2( HW_EDX, HW_EAX )
#define C_fabs_parms  P_EDXEAX
#define C_fabs_saves   HW_NotD( HW_EDX )
static byte_seq C_fabs = {
                4,
              { shl_edx_1,
                shr_edx_1 }
        };


#define C_min_ret       HW_D( HW_EAX )
#define C_min_parms     P_AX_DX
#define C_min_saves      HW_NotD_2( HW_ECX, HW_EAX )
static byte_seq C_min = {
                8,
              { sub_ax_dx,
                sbb_cx_cx,
                and_ax_cx,
                add_ax_dx }
        };

#define C_max_ret       HW_D( HW_EAX )
#define C_max_parms     P_AX_DX
#define C_max_saves      HW_NotD_2( HW_ECX, HW_EAX )
static byte_seq C_max = {
                9,
              { sub_ax_dx,
                cmc,
                sbb_cx_cx,
                and_ax_cx,
                add_ax_dx }
        };



static hw_reg_set P_AX_CX[]        = {
    HW_D( HW_EAX ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY ) };

static hw_reg_set P_DI_SI[]        = {
    HW_D( HW_EDI ),
    HW_D( HW_ESI ),
    HW_D( HW_EMPTY ) };

static hw_reg_set P_DI_SI_CX[]     = {
    HW_D( HW_EDI ),
    HW_D( HW_ESI ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_SI_DI_CX[]     = {
    HW_D( HW_ESI ),
    HW_D( HW_EDI ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DI_AX_CX[]     = {
    HW_D( HW_EDI ),
    HW_D( HW_AX ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_EDI_EAX_ECX[]     = {
    HW_D( HW_EDI ),
    HW_D( HW_EAX ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DI_AL_CX[]     = {
    HW_D( HW_EDI ),
    HW_D( HW_AL ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_ESDI_DSSI[]    = {
    HW_D_2( HW_ES, HW_EDI ),
    HW_D_2( HW_DS, HW_ESI ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DXEDI_CXESI_EAX[]= {
    HW_D_2( HW_DX, HW_EDI ),
    HW_D_2( HW_CX, HW_ESI ),
    HW_D( HW_EAX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DXESI_CXEDI_EAX[]= {
    HW_D_2( HW_DX, HW_ESI ),
    HW_D_2( HW_CX, HW_EDI ),
    HW_D( HW_EAX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DXEAX_CXEBX[]  = {
    HW_D_2( HW_DX, HW_EAX ),
    HW_D_2( HW_CX, HW_EBX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_ESDI_DSSI_CX[] = {
    HW_D_2( HW_ES, HW_EDI ),
    HW_D_2( HW_DS, HW_ESI ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_ESDI_AL_CX[]   = {
    HW_D_2( HW_ES, HW_EDI ),
    HW_D( HW_AL ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DXEDI_AL_ECX[] = {
    HW_D_2( HW_DX, HW_EDI ),
    HW_D( HW_AL ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_ESDI_AX_CX[]   = {
    HW_D_2( HW_ES, HW_EDI ),
    HW_D( HW_AX ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_ESEDI_EAX_ECX[]   = {
    HW_D_2( HW_ES, HW_EDI ),
    HW_D( HW_EAX ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DXEDI_AX_CX[] = {
    HW_D_2( HW_DX, HW_EDI ),
    HW_D( HW_AX ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DXEDI_EAX_ECX[] = {
    HW_D_2( HW_DX, HW_EDI ),
    HW_D( HW_EAX ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_SI_DI[]        = {
    HW_D( HW_ESI ),
    HW_D( HW_EDI ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DSSI_ESDI[]    = {
    HW_D_2( HW_DS, HW_ESI ),
    HW_D_2( HW_ES, HW_EDI ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_SIEAX_CXEDI[]  = {
    HW_D_2( HW_SI, HW_EAX ),
    HW_D_2( HW_CX, HW_EDI ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DSSI_ESDI_CX[] = {
    HW_D_2( HW_DS, HW_ESI ),
    HW_D_2( HW_ES, HW_EDI ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DSSI_CL[]      = {
    HW_D_2( HW_DS, HW_ESI ),
    HW_D( HW_CL ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_SI_DL[]        = {
    HW_D( HW_ESI ),
    HW_D( HW_DL ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DI[]           = {
    HW_D( HW_EDI ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_ESDI[]         = {
    HW_D_2( HW_ES, HW_EDI ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_CXEDI[]        = {
    HW_D_2( HW_CX, HW_EDI ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_AX[]           = {
    HW_D( HW_EAX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DX[]           = {
    HW_D( HW_EDX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DX_AL[]        = {
    HW_D( HW_EDX ),
    HW_D( HW_AL ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_DX_AX[]        = {
    HW_D( HW_EDX ),
    HW_D( HW_EAX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_AX_DX[]        = {
    HW_D( HW_EAX ),
    HW_D( HW_EDX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_AX_SI_DX_DI_CX[]= {
    HW_D( HW_EAX ),
    HW_D( HW_ESI ),
    HW_D( HW_EDX ),
    HW_D( HW_EDI ),
    HW_D( HW_ECX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_EDXEAX[]       = {
    HW_D_2( HW_EDX, HW_EAX ),
    HW_D( HW_EMPTY )
};

static hw_reg_set P_8087[]         = {
    HW_D( HW_FLTS ),
    HW_D( HW_EMPTY )
};


byte_seq *FlatAlternates[] = {
        &S_memset,   &FS_memset,
        &C_memset,   &FC_memset,
        &S_memcpy,   &FS_memcpy,
        &C_memcpy,   &FC_memcpy,
        &C_memcmp,   &FC_memcmp,
        &C_memchr,   &FC_memchr,
        &C_strlen,   &FC_strlen,
        &C_strcat,   &FC_strcat,
        NULL,       NULL
};

/* these must also work in FLAT model */
struct  inline_funcs SInline_Functions[] = {
    { "strcpy", &S_strcpy, S_strcpy_parms, S_strcpy_ret, S_strcpy_saves },
    { "strcmp", &S_strcmp, S_strcmp_parms, S_strcmp_ret, S_strcmp_saves },
    { "strcat", &S_strcat, S_strcat_parms, S_strcat_ret, S_strcat_saves },
    { "strchr", &S_strchr, S_strchr_parms, S_strchr_ret, S_strchr_saves },
    { "memset", &S_memset, S_memset_parms, S_memset_ret, S_memset_saves },
    { "memcpy", &S_memcpy, S_memcpy_parms, S_memcpy_ret, S_memcpy_saves },
    { NULL }
};

/* these must also work in FLAT model */
struct  inline_funcs Inline_Functions[] = {
    { "strlen", &C_strlen, C_strlen_parms, C_strlen_ret, C_strlen_saves },
    { "strcpy", &C_strcpy, C_strcpy_parms, C_strcpy_ret, C_strcpy_saves },
    { "strcmp", &C_strcmp, C_strcmp_parms, C_strcmp_ret, C_strcmp_saves },
    { "strcat", &C_strcat, C_strcat_parms, C_strcat_ret, C_strcat_saves },
    { "strchr", &C_strchr, C_strchr_parms, C_strchr_ret, C_strchr_saves },
    { "memcpy", &C_memcpy, C_memcpy_parms, C_memcpy_ret, C_memcpy_saves },
    { "memcmp", &C_memcmp, C_memcmp_parms, C_memcmp_ret, C_memcmp_saves },
    { "memset", &C_memset, C_memset_parms, C_memset_ret, C_memset_saves },
    { "memchr", &C_memchr, C_memchr_parms, C_memchr_ret, C_memchr_saves },
    { ".stosd", &C_stosd,  C_stosd_parms,  C_stosd_ret,  C_stosd_saves  },
    { ".stosw", &C_stosw,  C_stosw_parms,  C_stosw_ret,  C_stosw_saves  },
    { ".stoswb",&C_stoswb, C_stoswb_parms, C_stoswb_ret, C_stoswb_saves },
    { NULL }
};

struct  inline_funcs SBigData_Functions[] = {
    { "strcpy", &Z_strcpy, Z_strcpy_parms, Z_strcpy_ret, Z_strcpy_saves },
    { "strcmp", &Z_strcmp, Z_strcmp_parms, Z_strcmp_ret, Z_strcmp_saves },
    { "strcat", &Z_strcat, Z_strcat_parms, Z_strcat_ret, Z_strcat_saves },
    { "memset", &Z_memset, Z_memset_parms, Z_memset_ret, Z_memset_saves },
    { "memcpy", &Z_memcpy, Z_memcpy_parms, Z_memcpy_ret, Z_memcpy_saves },
    { NULL }
};

struct  inline_funcs Flat_Functions[] = {
    { "strcmp", &F_strcmp, F_strcmp_parms, F_strcmp_ret, F_strcmp_saves },
    { ".stosd", &F_stosd,  F_stosd_parms,  F_stosd_ret,  F_stosd_saves  },
    { ".stosw", &F_stosw,  F_stosw_parms,  F_stosw_ret,  F_stosw_saves  },
    { ".stoswb",&F_stoswb, F_stoswb_parms, F_stoswb_ret, F_stoswb_saves },
    { NULL }
};

struct  inline_funcs BigData_Functions[] = {
    { "strlen", &BD_strlen, BD_strlen_parms, BD_strlen_ret, BD_strlen_saves },
    { "strcpy", &BD_strcpy, BD_strcpy_parms, BD_strcpy_ret, BD_strcpy_saves },
    { "strcmp", &BD_strcmp, BD_strcmp_parms, BD_strcmp_ret, BD_strcmp_saves },
    { "strcat", &BD_strcat, BD_strcat_parms, BD_strcat_ret, BD_strcat_saves },
    { "strchr", &BD_strchr, BD_strchr_parms, BD_strchr_ret, BD_strchr_saves },
    { "memcpy", &BD_memcpy, BD_memcpy_parms, BD_memcpy_ret, BD_memcpy_saves },
    { "memcmp", &BD_memcmp, BD_memcmp_parms, BD_memcmp_ret, BD_memcmp_saves },
    { "memset", &BD_memset, BD_memset_parms, BD_memset_ret, BD_memset_saves },
    { "memchr", &BD_memchr, BD_memchr_parms, BD_memchr_ret, BD_memchr_saves },
    { ".stosd", &BD_stosd,  BD_stosd_parms,  BD_stosd_ret,  BD_stosd_saves  },
    { ".stosw", &BD_stosw,  BD_stosw_parms,  BD_stosw_ret,  BD_stosw_saves  },
    { ".stoswb",&BD_stoswb, BD_stoswb_parms, BD_stoswb_ret, BD_stoswb_saves },
    { NULL }
 };

/* these must also work in FLAT model */
struct  inline_funcs _8087_Functions[] = {
 { "fabs",  &_8087_fabs, C_8087_fabs_parms, C_8087_fabs_ret, C_8087_fabs_saves  },
 { NULL }
 };


/* memory model independent functions */

/* these must also work in FLAT model except _fmem & _fstr functions */
struct  inline_funcs Common_Functions[] = {
  { "abs",     &C_abs,    C_abs_parms,     C_abs_ret,     C_abs_saves      },
  { "labs",    &C_labs,   C_labs_parms,    C_labs_ret,    C_labs_saves     },
  { "fabs",    &C_fabs,   C_fabs_parms,    C_fabs_ret,    C_fabs_saves     },
  { "inp",     &C_inp,    C_inp_parms,     C_inp_ret,     C_inp_saves      },
  { "inpw",    &C_inpw,   C_inpw_parms,    C_inpw_ret,    C_inpw_saves     },
  { "inpd",    &C_inpd,   C_inpd_parms,    C_inpd_ret,    C_inpd_saves     },
  { "outp",    &C_outp,   C_outp_parms,    C_outp_ret,    C_outp_saves     },
  { "outpw",   &C_outpw,  C_outpw_parms,   C_outpw_ret,   C_outpw_saves    },
  { "outpd",   &C_outpd,  C_outpd_parms,   C_outpd_ret,   C_outpd_saves    },
  { "movedata",&C_movedata,C_movedata_parms,C_movedata_ret,C_movedata_saves },
  { "_enable", &C_enable, C_enable_parms,  C_enable_ret,  C_enable_saves   },
  { "_disable",&C_disable,C_disable_parms, C_disable_ret, C_disable_saves  },
  { "_rotl",   &C_rotl,   C_rotl_parms,    C_rotl_ret,    C_rotl_saves     },
  { "_rotr",   &C_rotr,   C_rotr_parms,    C_rotr_ret,    C_rotr_saves     },
  { "_lrotl",  &C_rotl,   C_rotl_parms,    C_rotl_ret,    C_rotl_saves     },
  { "_lrotr",  &C_rotr,   C_rotr_parms,    C_rotr_ret,    C_rotr_saves     },
  { "div",     &C_div,    C_div_parms,     C_div_ret,     C_div_saves      },
  { "ldiv",    &C_div,    C_div_parms,     C_div_ret,     C_div_saves      },
  { "_fmemcpy",&DP_memcpy,DP_memcpy_parms, DP_memcpy_ret, DP_memcpy_saves  },
  { "_fmemcmp",&DP_memcmp,DP_memcmp_parms, DP_memcmp_ret, DP_memcmp_saves  },
  { "_fmemset",&DP_memset,DP_memset_parms, DP_memset_ret, DP_memset_saves  },
  { "_fmemchr",&DP_memchr,DP_memchr_parms, DP_memchr_ret, DP_memchr_saves  },
  { "_fstrcpy",&DP_strcpy,DP_strcpy_parms, DP_strcpy_ret, DP_strcpy_saves  },
  { "_fstrcat",&DP_strcat,DP_strcat_parms, DP_strcat_ret, DP_strcat_saves  },
  { "_fstrcmp",&DP_strcmp,DP_strcmp_parms, DP_strcmp_ret, DP_strcmp_saves  },
  { "_fstrlen",&DP_strlen,DP_strlen_parms, DP_strlen_ret, DP_strlen_saves  },
  { ".min",    &C_min,    C_min_parms,     C_min_ret,     C_min_saves      },
  { ".max",    &C_max,    C_max_parms,     C_max_ret,     C_max_saves      },
  { NULL }
 };

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -