From: Jan-Benedict G. <jb...@us...> - 2004-06-27 12:48:42
|
Update of /cvsroot/linux-vax/toolchain/experimental_toolchain In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19434 Modified Files: vax-linux-gcc.patch vax-linux-libc.patch Log Message: - gcc-patch: Modify RTX cost handling as sugguested via GCC's bugzilla. - glibc-patch: add syscall macros for current glibc. Index: vax-linux-libc.patch =================================================================== RCS file: /cvsroot/linux-vax/toolchain/experimental_toolchain/vax-linux-libc.patch,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- vax-linux-libc.patch 27 May 2004 14:40:28 -0000 1.1 +++ vax-linux-libc.patch 27 Jun 2004 12:48:33 -0000 1.2 @@ -7489,3 +7489,138 @@ @@ -0,0 +1,2 @@ +/* An instruction which should crash any program is a breakpoint. */ +#define ABORT_INSTRUCTION asm ("bugw $0") +--- _new_t/source/glibc-HEAD/sysdeps/unix/sysv/linux/vax/sysdep.h 2004-06-27 11:48:38.000000000 +0200 ++++ _t/source/glibc-HEAD/sysdeps/unix/sysv/linux/vax/sysdep.h 2004-06-26 19:08:58.000000000 +0200 +@@ -70,30 +70,29 @@ + + #define LOAD_ARGS_0 + +-#define LOAD_ARGS_1 \ +- pushl 0x4(%ap) ; \ +- LOAD_ARGS_0 +- +-#define LOAD_ARGS_2 \ +- pushl 0x8(%ap) ; \ +- LOAD_ARGS_1 +- +-#define LOAD_ARGS_3 \ +- pushl 0xc(%ap) ; \ +- LOAD_ARGS_2 +- +-#define LOAD_ARGS_4 \ +- pushl 0x10(%ap) ; \ +- LOAD_ARGS_3 +- +- +-#define LOAD_ARGS_5 \ +- pushl 0x14(%ap) ; \ +- LOAD_ARGS_4 +- +-#define LOAD_ARGS_6 \ +- pushl 0x18(%ap) ; \ +- LOAD_ARGS_5 ++#define LOAD_ARGS_1 \ ++ pushl 0x4(%ap); \ ++ LOAD_ARGS_0 ++ ++#define LOAD_ARGS_2 \ ++ pushl 0x8(%ap); \ ++ LOAD_ARGS_1 ++ ++#define LOAD_ARGS_3 \ ++ pushl 0xc(%ap); \ ++ LOAD_ARGS_2 ++ ++#define LOAD_ARGS_4 \ ++ pushl 0x10(%ap); \ ++ LOAD_ARGS_3 ++ ++#define LOAD_ARGS_5 \ ++ pushl 0x14(%ap); \ ++ LOAD_ARGS_4 ++ ++#define LOAD_ARGS_6 \ ++ pushl 0x18(%ap); \ ++ LOAD_ARGS_5 + + + #define DO_CALL(args, syscall_name) \ +@@ -129,34 +128,51 @@ + LOAD_ARGS_5(arg1, arg2, arg3, arg4, arg5) + + +-#define DOARGS_0 "pushl $0\n\t" +-#define DOARGS_1 "pushl $1\n\t" +-#define DOARGS_2 "pushl $2\n\t" +-#define DOARGS_3 "pushl $3\n\t" +-#define DOARGS_4 "pushl $4\n\t" +-#define DOARGS_5 "pushl $5\n\t" +-#define DOARGS_6 "pushl $6\n\t" ++#define DOARGS_0 " pushl $0 \n" ++#define DOARGS_1 " pushl $1 \n" ++#define DOARGS_2 " pushl $2 \n" ++#define DOARGS_3 " pushl $3 \n" ++#define DOARGS_4 " pushl $4 \n" ++#define DOARGS_5 " pushl $5 \n" ++#define DOARGS_6 " pushl $6 \n" ++ ++ ++#undef INTERNAL_SYSCALL_DECL ++#define INTERNAL_SYSCALL_DECL(err) long int err ++ ++/* INTERNAL_SYSCALL() is used to basically issue a system call. ++ * If anybody cares about the result, she should use INLINE_SYSCALL(), ++ * which additionally does error/errno checking/setting */ ++#undef INTERNAL_SYSCALL ++#define INTERNAL_SYSCALL(name, err, nr, args...) \ ++({ \ ++ unsigned long resultvar; \ ++ register long _sc_0 __asm__("r0") = __NR_##name; \ ++ LOAD_ARGS_##nr(args); \ ++ asm volatile ( \ ++ DOARGS_##nr \ ++ " movl %%sp,%%ap \n" \ ++ " chmk %0 \n" \ ++ : "=r"(_sc_0) \ ++ : "0"(_sc_0) \ ++ : "memory"); \ ++ resultvar = _sc_0; \ ++ resultvar; \ ++}) + ++ ++/* INLINE_SYSCALL() is used to issue a syscall _and_ to update errno ++ * if that's needed. */ + #undef INLINE_SYSCALL +-#define INLINE_SYSCALL(name, nr, args...) \ +- ( { \ +- unsigned long resultvar; \ +- register long _sc_0 __asm__("r0"); \ +- _sc_0 = __NR_##name; \ +- LOAD_ARGS_##nr(args); \ +- \ +- asm volatile ( DOARGS_##nr \ +- "movl %%sp,%%ap\n\t" \ +- "chmk %0\n\t" \ +- : "=r" (_sc_0) \ +- : "0" (_sc_0) : "memory" ); \ +- resultvar = _sc_0; \ +- if (resultvar>= 0xfffff001) \ +- { \ +- __set_errno(-resultvar); \ +- resultvar=0xffffffff; \ +- } \ +- (int) resultvar; }) +- ++#define INLINE_SYSCALL(name, nr, args...) \ ++({ \ ++ INTERNAL_SYSCALL_DECL (sc_ret); \ ++ sc_ret = INTERNAL_SYSCALL (name, , nr, args); \ ++ if (sc_ret > (unsigned long) (-125)) { \ ++ __set_errno (-sc_ret); \ ++ sc_ret = -1L; \ ++ } \ ++ (int) sc_ret; \ ++}) + + #endif Index: vax-linux-gcc.patch =================================================================== RCS file: /cvsroot/linux-vax/toolchain/experimental_toolchain/vax-linux-gcc.patch,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- vax-linux-gcc.patch 27 May 2004 15:27:24 -0000 1.2 +++ vax-linux-gcc.patch 27 Jun 2004 12:48:33 -0000 1.3 @@ -282,3 +282,23 @@ case IOR: case XOR: c = 3; +--- gcc-HEAD/gcc/config/vax/vax.c~calculation2 2004-06-26 17:02:20.000000000 +0200 ++++ gcc-HEAD/gcc/config/vax/vax.c 2004-06-26 17:12:57.000000000 +0200 +@@ -648,15 +648,14 @@ + fmt = "e"; /* all constant rotate counts are short */ + break; + case PLUS: ++ case MINUS: ++ c = (mode == DFmode) ? 13 : 8; /* 6/8 on VAX 9000, 16/15 on VAX 2 */ + /* Check for small negative integer operand: subl2 can be used with + a short positive constant instead. */ + if (GET_CODE (XEXP (x, 1)) == CONST_INT) + if ((unsigned)(INTVAL (XEXP (x, 1)) + 63) < 127) + fmt = "e"; + break; +- case MINUS: +- c = (mode == DFmode) ? 13 : 8; /* 6/8 on VAX 9000, 16/15 on VAX 2 */ +- break; + case IOR: + case XOR: + c = 3; |