From 8ea4701226d599f639e911200942071916c8868d Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Tue, 6 Apr 2004 16:29:27 +0000 Subject: [PATCH] Preserve bx and cx for WATCOMC in asmsupt.asm as well. Saves another 200 bytes. git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@840 6ac86273-5f31-0410-b378-82cca8765d1b --- kernel/asmsupt.asm | 19 +++++++++++++------ kernel/init-mod.h | 20 ++++++++++---------- kernel/proto.h | 34 +++++++++++++++++----------------- 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/kernel/asmsupt.asm b/kernel/asmsupt.asm index d13aac9..77d304b 100644 --- a/kernel/asmsupt.asm +++ b/kernel/asmsupt.asm @@ -106,6 +106,8 @@ pascal_setup: push bp ; Standard C entry mov bp,sp %ifdef WATCOM + push bx + push cx push es %endif push si @@ -240,19 +242,24 @@ MEMSET: ;***** pascal_return: - pop ds + lds di, [bp] ; return address in es, saved bp in di + mov bh, 0 + add bp, bx ; point bp to "as if there were 0 args" + mov [bp+2], ds ; put return address at first arg + mov [bp], di ; saved bp below that one + + pop ds pop di pop si %ifdef WATCOM pop es + pop cx + pop bx %endif + mov sp,bp pop bp + ret - pop cx - sub bh,bh - add sp,bx - jmp cx - ;***************************************************************** ; fstrcpy (void FAR*dest, void FAR *src); diff --git a/kernel/init-mod.h b/kernel/init-mod.h index c1c1eb3..b9b769d 100644 --- a/kernel/init-mod.h +++ b/kernel/init-mod.h @@ -62,16 +62,16 @@ size_t ASMPASCAL fstrlen(const char FAR *s); #ifdef __WATCOMC__ /* dx and es not used or clobbered for all asmsupt.asm functions except (f)memchr/(f)strchr (which preserve es) */ -#pragma aux (pascal) pascal_abc modify exact [ax bx cx] -#pragma aux (pascal_abc) init_memset -#pragma aux (pascal_abc) init_fmemset -#pragma aux (pascal_abc) init_memcpy -#pragma aux (pascal_abc) init_fmemcpy -#pragma aux (pascal_abc) init_memcmp modify nomemory -#pragma aux (pascal_abc) init_fmemcmp modify nomemory -#pragma aux (pascal_abc) init_strcpy -#pragma aux (pascal_abc) init_strlen modify nomemory -#pragma aux (pascal_abc) init_fstrlen modify nomemory +#pragma aux (pascal) pascal_ax modify exact [ax] +#pragma aux (pascal_ax) init_memset +#pragma aux (pascal_ax) init_fmemset +#pragma aux (pascal_ax) init_memcpy +#pragma aux (pascal_ax) init_fmemcpy +#pragma aux (pascal_ax) init_memcmp modify nomemory +#pragma aux (pascal_ax) init_fmemcmp modify nomemory +#pragma aux (pascal_ax) init_strcpy +#pragma aux (pascal_ax) init_strlen modify nomemory +#pragma aux (pascal_ax) init_fstrlen modify nomemory #endif #undef LINESIZE diff --git a/kernel/proto.h b/kernel/proto.h index a60f737..44472e1 100644 --- a/kernel/proto.h +++ b/kernel/proto.h @@ -314,23 +314,23 @@ int /*ASMCFUNC*/ ASMPASCAL memcmp(const void *m1, const void *m2, size_t n); int /*ASMCFUNC*/ ASMPASCAL fmemcmp(const void FAR *m1, const void FAR *m2, size_t n); #ifdef __WATCOMC__ -/* dx and es not used or clobbered for all asmsupt.asm functions except - (f)memchr/(f)strchr (which preserve es) */ -#pragma aux (pascal) pascal_abc modify exact [ax bx cx] -#pragma aux (pascal_abc) fmemcpy -#pragma aux (pascal_abc) memcpy -#pragma aux (pascal_abc) fmemset -#pragma aux (pascal_abc) memset -#pragma aux (pascal_abc) fmemcmp modify nomemory -#pragma aux (pascal_abc) memcmp modify nomemory -#pragma aux (pascal_abc) fstrcpy -#pragma aux (pascal_abc) strcpy -#pragma aux (pascal_abc) fstrlen modify nomemory -#pragma aux (pascal_abc) strlen modify nomemory -#pragma aux (pascal) memchr modify exact [ax bx cx dx] -#pragma aux (pascal) fmemchr modify exact [ax bx cx dx] -#pragma aux (pascal) strchr modify exact [ax bx cx dx] -#pragma aux (pascal) fstrchr modify exact [ax bx cx dx] +/* bx, cx, dx and es not used or clobbered for all asmsupt.asm functions except + (f)memchr/(f)strchr (which clobber dx) */ +#pragma aux (pascal) pascal_ax modify exact [ax] +#pragma aux (pascal_ax) fmemcpy +#pragma aux (pascal_ax) memcpy +#pragma aux (pascal_ax) fmemset +#pragma aux (pascal_ax) memset +#pragma aux (pascal_ax) fmemcmp modify nomemory +#pragma aux (pascal_ax) memcmp modify nomemory +#pragma aux (pascal_ax) fstrcpy +#pragma aux (pascal_ax) strcpy +#pragma aux (pascal_ax) fstrlen modify nomemory +#pragma aux (pascal_ax) strlen modify nomemory +#pragma aux (pascal) memchr modify exact [ax dx] nomemory +#pragma aux (pascal) fmemchr modify exact [ax dx] nomemory +#pragma aux (pascal) strchr modify exact [ax dx] nomemory +#pragma aux (pascal) fstrchr modify exact [ax dx] nomemory #endif /* sysclk.c */