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

📄 pdefn386.h

📁 Open Watcom 的 C 编译器源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
              { rep,
                stosw,
                stosb, }
        };


/* di memcpy( di, si, cx ) zaps es,si,cx */
#define S_memcpy_ret    HW_D( HW_EDI )
#define S_memcpy_parms  P_DI_SI_CX
#define S_memcpy_saves   HW_NotD_2( HW_ESI, HW_ECX )
static byte_seq S_memcpy = {
                8,
              { push_es,
                push_di,
                push_ds,
                pop_es,
                rep,
                movsb,
                pop_di,
                pop_es }
        };
static byte_seq FS_memcpy = {
                4,
              { push_di,
                rep,
                movsb,
                pop_di, }
        };


/* di memcpy( di, si, cx ) zaps ax,es,si,cx */
#define C_memcpy_ret    HW_D( HW_EDI )
#define C_memcpy_parms  P_DI_SI_CX
#define C_memcpy_saves   HW_NotD_3( HW_EAX, HW_ESI, HW_ECX )
#define C_memcpy_bodysize 16
#define C_memcpy_body \
                push_di,\
                mov_ax_cx,\
                shr_cx_2,\
                rep,\
                movsd,\
                mov_cl_al,\
                and_cl,3,\
                rep,\
                movsb,\
                pop_di


static byte_seq C_memcpy = {
                C_memcpy_bodysize+6,
              { push_es,
                mov_ax_ds,
                mov_es_ax,
                C_memcpy_body,
                pop_es }
        };
static byte_seq FC_memcpy = {
                C_memcpy_bodysize,
              { C_memcpy_body }
        };


/* es:di memcpy( es:di, ds:si, cx ) zaps cx,si */
#define Z_memcpy_ret    HW_D_2( HW_ES, HW_EDI )
#define Z_memcpy_parms  P_ESDI_DSSI_CX
#define Z_memcpy_saves   HW_NotD_2( HW_ESI, HW_ECX )
static byte_seq Z_memcpy = {
                4,
              { push_di,
                rep,
                movsb,
                pop_di }
        };


/* es:di memcpy( es:di, ds:si, cx ) zaps cx,si */
#define BD_memcpy_ret   HW_D_2( HW_ES, HW_EDI )
#define BD_memcpy_parms P_ESDI_DSSI_CX
#define BD_memcpy_saves  C_memcpy_saves
static byte_seq BD_memcpy = {
                C_memcpy_bodysize,
              { C_memcpy_body }
        };

/* dx:eax memcpy( dx:edi, cx:esi, eax ) zaps ecx,esi,edi,eax */
#define DP_memcpy_ret   HW_D_2( HW_DX, HW_EAX )
#define DP_memcpy_parms P_DXEDI_CXESI_EAX
#define DP_memcpy_saves  HW_NotD_4( HW_ESI, HW_ECX, HW_EDI, HW_EAX )
static byte_seq DP_memcpy = {
                25,
              { push_ds,
                push_es,
                push_di,
                xchg_cx_ax,
                mov_ds_ax,
                mov_es_dx,
                mov_ax_cx,
                shr_cx_2,
                rep,
                movsd,
                mov_cl_al,
                and_cl,3,
                rep,
                movsb,
                pop_ax,
                pop_es,
                pop_ds }
        };

/****************************************************************/

/* ax memcmp( si, di, cx ) zaps ax,es,si,di,cx */
#define C_memcmp_ret    HW_D( HW_EAX )
#define C_memcmp_parms  P_SI_DI_CX
#define C_memcmp_saves   HW_NotD_4( HW_EAX, HW_ESI, HW_EDI, HW_ECX )
#define C_memcmp_bodysize 11
#define C_memcmp_body \
                xor_rr, ax_ax,\
                repz,\
                cmpsb,\
                je,  5,\
                sbb_rr, ax_ax,\
                sbb_ax_ffff

static byte_seq C_memcmp = {
                C_memcmp_bodysize+6,
              { push_es,
                mov_ax_ds,
                mov_es_ax,
                C_memcmp_body,
                pop_es }
        };
static byte_seq FC_memcmp = {
                C_memcmp_bodysize,
              { C_memcmp_body }
        };


/* cx memcmp( ds:si, es:di, cx ) zaps si,di,cx */
#define BD_memcmp_ret   HW_D( HW_ECX )
#define BD_memcmp_parms P_DSSI_ESDI_CX
#define BD_memcmp_saves  HW_NotD_3( HW_ESI, HW_EDI, HW_ECX )
static byte_seq BD_memcmp = {
                11,
              { or_cx_cx,
                repz,
                cmpsb,
                je,  5,
                sbb_rr, cx_cx,
                sbb_cx_ffff }   /* 3 bytes */
        };

/* ecx memcmp( dx:esi, cx:edi, eax ) zaps esi,edi,ecx,eax */
#define DP_memcmp_ret   HW_D( HW_ECX )
#define DP_memcmp_parms P_DXESI_CXEDI_EAX
#define DP_memcmp_saves  HW_NotD_4( HW_ESI, HW_EDI, HW_ECX, HW_EAX )
static byte_seq DP_memcmp = {
                20,
              { push_ds,
                push_es,
                xchg_cx_ax,
                mov_ds_dx,
                mov_es_ax,
                or_cx_cx,
                repz,
                cmpsb,
                je,  5,
                sbb_rr, cx_cx,
                sbb_cx_ffff,     /* 3 bytes */
                pop_es,
                pop_ds }
        };

/****************************************************************/


/* di memchr( di, al, cx ) zaps dx,es,di,cx */
#define C_memchr_ret    HW_D( HW_EDI )
#define C_memchr_parms  P_DI_AL_CX
#define C_memchr_saves   HW_NotD_3( HW_EDX, HW_EDI, HW_ECX )
static byte_seq C_memchr = {
                17,
              { push_es,
                jcxz, 11,
                mov_dx_ds,
                mov_es_dx,
                repnz,
                scasb,
                jne, 3,
                dec_di,
                hide2,
                mov_di_cx,
                pop_es }
        };
static byte_seq FC_memchr = {
                11,
              { jcxz, 7,
                repnz,
                scasb,
                jne, 3,
                dec_di,
                hide2,
                mov_di_cx, }
        };


/* cx:di memchr( es:di, al, cx ) zaps di,cx */
#define BD_memchr_ret   HW_D_2( HW_EDI, HW_CX )
#define BD_memchr_parms P_ESDI_AL_CX
#define BD_memchr_saves  HW_NotD_2( HW_EDI, HW_ECX )
static byte_seq BD_memchr = {
                13,
              { jcxz, 9,
                repnz,
                scasb,
                jne, 5,
                dec_di,
                mov_cx_es,
                hide2,
                mov_di_cx }
        };

/* cx:edi memchr( dx:edi, al, ecx ) zaps edi,ecx */
#define DP_memchr_ret   HW_D_2( HW_CX, HW_EDI )
#define DP_memchr_parms P_DXEDI_AL_ECX
#define DP_memchr_saves  HW_NotD_2( HW_EDI, HW_ECX )
static byte_seq DP_memchr = {
                17,
              { push_es,
                jcxz, 11,               /* 27-jul-90, was 10 */
                mov_es_dx,
                repnz,
                scasb,
                jne, 5,                 /* 27-jul-90, was 4 */
                dec_di,
                mov_cx_es,
                hide2,
                mov_di_cx,
                pop_es }
        };

/****************************************************************/


/* ax strcmp( si, di ) zaps ax,si,di */
#define S_strcmp_ret    HW_D( HW_EAX )
#define S_strcmp_parms  P_SI_DI
#define S_strcmp_saves   HW_NotD_3( HW_EAX, HW_ESI, HW_EDI )
static byte_seq S_strcmp = {
                16,
              { lodsb,
                mov_ah_atdi,
                sub_al_ah,
                jne, 5,
                inc_di,
                cmp_al_ah,
                jne, -12,
                size_prefix,
                sbb_ah_ah,
                cwde }
        };

/* ax strcmp( si, di ) zaps ax,es,si,di,cx */
#define C_strcmp_ret    HW_D( HW_EAX )
#define C_strcmp_parms  P_SI_DI
#define C_strcmp_saves   HW_NotD_4( HW_EAX, HW_ESI, HW_EDI, HW_ECX )
static byte_seq C_strcmp = {
                31,
              { push_es,
                mov_ax_ds,
                mov_es_ax,
                cmpsb,
                jne, 17,
                dec_di,
                dec_si,
                mov_cx_ffff,
                xor_rr, ax_ax,
                repnz,
                scasb,
                not_cx,
                sub_rr, di_cx,
                repz,
                cmpsb,
                je,  5,
                sbb_rr, ax_ax,
                sbb_ax_ffff,
                pop_es }
        };


/* ax strcmp( si, di ) zaps ax,si,di,cx */
#define F_strcmp_ret    HW_D( HW_EAX )
#define F_strcmp_parms  P_SI_DI
#define F_strcmp_saves   HW_NotD_4( HW_EAX, HW_ESI, HW_EDI, HW_ECX )
static byte_seq F_strcmp = {
                25,
              { cmpsb,
                jne, 17,
                dec_di,
                dec_si,
                mov_cx_ffff,
                xor_rr, ax_ax,
                repnz,
                scasb,
                not_cx,
                sub_rr, di_cx,
                repz,
                cmpsb,
                je,  5,
                sbb_rr, ax_ax,
                sbb_ax_ffff }
        };


/* ax strcmp( ds:si, es:di ) zaps ax,si,di */
#define Z_strcmp_ret    HW_D( HW_EAX )
#define Z_strcmp_parms  P_DSSI_ESDI
#define Z_strcmp_saves   HW_NotD_3( HW_EAX, HW_ESI, HW_EDI )
static byte_seq Z_strcmp = {
                17,
              { lodsb,
                mov_ah_atesdi,
                sub_al_ah,
                jne, 5,
                inc_di,
                cmp_al_ah,
                jne, -13,
                size_prefix,
                sbb_ah_ah,
                cwde }
        };


/* cx strcmp( ds:si, es:di ) zaps ax,si,di,cx */
#define BD_strcmp_ret   HW_D( HW_ECX )
#define BD_strcmp_parms P_DSSI_ESDI
#define BD_strcmp_saves  HW_NotD_4( HW_EAX, HW_ESI, HW_EDI, HW_ECX )
static byte_seq BD_strcmp = {
                25,
              { cmpsb,
                jne, 17,
                dec_di,
                dec_si,
                mov_cx_ffff,
                xor_rr, ax_ax,
                repnz,
                scasb,
                not_cx,
                sub_rr, di_cx,
                repz,
                cmpsb,
                je,  5,
                sbb_rr, cx_cx,
                sbb_cx_ffff }   /* 3 bytes */
        };

/* ecx strcmp( si:eax, cx:edi ) zaps eax,esi,edi,ecx */
#define DP_strcmp_ret   HW_D( HW_ECX )
#define DP_strcmp_parms P_SIEAX_CXEDI
#define DP_strcmp_saves  HW_NotD_4( HW_EAX, HW_ESI, HW_EDI, HW_ECX )
static byte_seq DP_strcmp = {
                34,
              { push_ds,
                push_es,
                xchg_si_ax,
                mov_ds_ax,
                mov_es_cx,
                cmpsb,
                jne, 17,
                dec_di,
                dec_si,
                xor_rr, ax_ax,
                mov_cx_ax,
                dec_cx,
                repnz,
                scasb,
                not_cx,
                sub_rr, di_cx,
                repz,
                cmpsb,
                je,  5,
                sbb_rr, cx_cx,
                sbb_cx_ffff,     /* 3 bytes */
                pop_es,
                pop_ds }
        };

/****************************************************************/


/* cx strlen( di ) zaps ax,es,cx,di */
#define C_strlen_ret    HW_D( HW_ECX )
#define C_strlen_parms  P_DI
#define C_strlen_saves   HW_NotD_3( HW_EAX, HW_ECX, HW_EDI )
#define C_strlen_bodysize 10
#define C_strlen_body \
                mov_cx_ffff,\
                xor_rr, ax_ax,\
                repnz,\
                scasb,\
                not_cx,\
                dec_cx 

static byte_seq C_strlen = {
                C_strlen_bodysize+6,
              { push_es,
                mov_ax_ds,
                mov_es_ax,
                C_strlen_body,
                pop_es }
        };
static byte_seq FC_strlen = {
                C_strlen_bodysize,
              { C_strlen_body }
        };


/* cx strlen( es:di ) zaps ax,cx,di */
#define BD_strlen_ret   HW_D( HW_ECX )
#define BD_strlen_parms P_ESDI
#define BD_strlen_saves  HW_NotD_3( HW_EAX, HW_ECX, HW_EDI )
static byte_seq BD_strlen = {
                10,
              { mov_cx_ffff,
                xor_rr, ax_ax,
                repnz,
                scasb,
                not_cx,
                dec_cx }
        };

/* ecx strlen( cx:edi ) zaps eax,ecx,edi */
#define DP_strlen_ret   HW_D( HW_ECX )
#define DP_strlen_parms P_CXEDI
#define DP_strlen_saves  HW_NotD_3( HW_EAX, HW_ECX, HW_EDI )
static byte_seq DP_strlen = {
                14,
              { push_es,
                mov_es_cx,
                xor_rr, ax_ax,
                mov_cx_ax,
                dec_cx,
                repnz,
                scasb,
                not_cx,
                dec_cx,
                pop_es }
        };

/****************************************************************/

#define C_abs_ret    HW_D( HW_EAX )
#define C_abs_parms  P_AX
#define C_abs_saves   HW_NotD_2( HW_EAX, HW_EDX )
static byte_seq C_abs = {
                5,
              { cwd,
                xor_rr, ax_dx,
                sub_rr, ax_dx }
        };


#define C_labs_ret    HW_D( HW_EAX )
#define C_labs_parms  P_AX
#define C_labs_saves   HW_NotD_2( HW_EAX, HW_EDX )
static byte_seq C_labs = {
                5,
              { cwd,
                xor_rr, ax_dx,
                sub_rr, ax_dx }
        };

#define C_inp_ret    HW_D( HW_EAX )
#define C_inp_parms  P_DX
#define C_inp_saves   HW_NotD( HW_EAX )
static byte_seq C_inp = {
                3,
              { sub_rr,ax_ax,
                in_al_dx }
        };


⌨️ 快捷键说明

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