From 07a31354419025128b3594958d540fdf20df2f0f Mon Sep 17 00:00:00 2001 From: jrv Date: Fri, 8 Jan 1993 09:52:03 +0000 Subject: [PATCH] (perform_*): Move to i386/perform.h. Include i386/perform.h. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@3155 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/config/i386/386bsd.h | 79 ++--------------------------------------------- gcc/config/i386/mach.h | 74 ++------------------------------------------ gcc/config/i386/osfrose.h | 76 ++------------------------------------------- 3 files changed, 9 insertions(+), 220 deletions(-) diff --git a/gcc/config/i386/386bsd.h b/gcc/config/i386/386bsd.h index a67415f4cb3..7fd674d3765 100644 --- a/gcc/config/i386/386bsd.h +++ b/gcc/config/i386/386bsd.h @@ -5,6 +5,9 @@ #include "i386/gstabs.h" +/* Get perform_* macros to build libgcc.a. */ +#include "i386/perform.h" + #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dunix -Di386 -D____386BSD____ -D__386BSD__ -DBSD_NET2" @@ -57,82 +60,6 @@ #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" -/* Defines to be able to build libgcc.a with GCC. - These are the same as in i386mach.h. */ - -/* It might seem that these are not important, since gcc 2 will never - call libgcc for these functions. But programs might be linked with - code compiled by gcc 1, and then these will be used. */ - -/* The arg names used to be a and b, but `a' appears inside strings - and that confuses non-ANSI cpp. */ - -#define perform_udivsi3(arg0,arg1) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - dx = 0; \ - ax = arg0; \ - asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (arg1), "d" (dx)); \ - return ax; \ -} - -#define perform_divsi3(arg0,arg1) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - ax = arg0; \ - asm ("cltd\n\tidivl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (arg1)); \ - return ax; \ -} - -#define perform_umodsi3(arg0,arg1) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - dx = 0; \ - ax = arg0; \ - asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (arg1), "d" (dx)); \ - return dx; \ -} - -#define perform_modsi3(arg0,arg1) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - ax = arg0; \ - asm ("cltd\n\tidivl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (arg1)); \ - return dx; \ -} - - -#define perform_fixdfsi(arg0) \ -{ \ - auto unsigned short ostatus; \ - auto unsigned short nstatus; \ - auto int ret; \ - auto double tmp; \ - \ - &ostatus; /* guarantee these land in memory */ \ - &nstatus; \ - &ret; \ - &tmp; \ - \ - asm volatile ("fnstcw %0" : "=m" (ostatus)); \ - nstatus = ostatus | 0x0c00; \ - asm volatile ("fldcw %0" : /* no outputs */ : "m" (nstatus)); \ - tmp = arg0; \ - asm volatile ("fldl %0" : /* no outputs */ : "m" (tmp)); \ - asm volatile ("fistpl %0" : "=m" (ret)); \ - asm volatile ("fldcw %0" : /* no outputs */ : "m" (ostatus)); \ - \ - return ret; \ -} - /* The following macros are stolen from i386v4.h */ /* These have to be defined to get PIC code correct */ diff --git a/gcc/config/i386/mach.h b/gcc/config/i386/mach.h index 71a13312902..964f4518e1b 100644 --- a/gcc/config/i386/mach.h +++ b/gcc/config/i386/mach.h @@ -6,6 +6,9 @@ #include "i386/gstabs.h" +/* Get perform_* macros to build libgcc.a. */ +#include "i386/perform.h" + #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dunix -Di386 -DMACH" @@ -14,74 +17,3 @@ /* Make stddef.h agree with types.h. */ #define SIZE_TYPE "long int" - -/* Defines to be able to build libgcc.a with GCC. */ - -/* It might seem that these are not important, since gcc 2 will never - call libgcc for these functions. But programs might be linked with - code compiled by gcc 1, and then these will be used. */ - -#define perform_udivsi3(a,b) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - dx = 0; \ - ax = a; \ - asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (b), "d" (dx)); \ - return ax; \ -} - -#define perform_divsi3(a,b) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - ax = a; \ - asm ("cltd\n\tidivl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (b)); \ - return ax; \ -} - -#define perform_umodsi3(a,b) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - dx = 0; \ - ax = a; \ - asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (b), "d" (dx)); \ - return dx; \ -} - -#define perform_modsi3(a,b) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - ax = a; \ - asm ("cltd\n\tidivl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (b)); \ - return dx; \ -} - -#define perform_fixdfsi(a) \ -{ \ - auto unsigned short ostatus; \ - auto unsigned short nstatus; \ - auto int ret; \ - auto double tmp; \ - \ - &ostatus; /* guarantee these land in memory */ \ - &nstatus; \ - &ret; \ - &tmp; \ - \ - asm volatile ("fnstcw %0" : "=m" (ostatus)); \ - nstatus = ostatus | 0x0c00; \ - asm volatile ("fldcw %0" : /* no outputs */ : "m" (nstatus)); \ - tmp = a; \ - asm volatile ("fldl %0" : /* no outputs */ : "m" (tmp)); \ - asm volatile ("fistpl %0" : "=m" (ret)); \ - asm volatile ("fldcw %0" : /* no outputs */ : "m" (ostatus)); \ - \ - return ret; \ -} diff --git a/gcc/config/i386/osfrose.h b/gcc/config/i386/osfrose.h index 3af233c16b3..abd7d4057a8 100644 --- a/gcc/config/i386/osfrose.h +++ b/gcc/config/i386/osfrose.h @@ -24,6 +24,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "halfpic.h" #include "i386/gstabs.h" +/* Get perform_* macros to build libgcc.a. */ +#include "i386/perform.h" + #define OSF_OS #undef WORD_SWITCH_TAKES_ARG @@ -372,76 +375,3 @@ while (0) /* Generate calls to memcpy, etc., not bcopy, etc. */ #define TARGET_MEM_FUNCTIONS - - - -/* Defines to be able to build libgcc.a with GCC. */ - -/* It might seem that these are not important, since gcc 2 will never - call libgcc for these functions. But programs might be linked with - code compiled by gcc 1, and then these will be used. */ - -#define perform_udivsi3(a,b) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - dx = 0; \ - ax = a; \ - asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (b), "d" (dx)); \ - return ax; \ -} - -#define perform_divsi3(a,b) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - ax = a; \ - asm ("cltd\n\tidivl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (b)); \ - return ax; \ -} - -#define perform_umodsi3(a,b) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - dx = 0; \ - ax = a; \ - asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (b), "d" (dx)); \ - return dx; \ -} - -#define perform_modsi3(a,b) \ -{ \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - ax = a; \ - asm ("cltd\n\tidivl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (b)); \ - return dx; \ -} - -#define perform_fixdfsi(a) \ -{ \ - auto unsigned short ostatus; \ - auto unsigned short nstatus; \ - auto int ret; \ - auto double tmp; \ - \ - &ostatus; /* guarantee these land in memory */ \ - &nstatus; \ - &ret; \ - &tmp; \ - \ - asm volatile ("fnstcw %0" : "=m" (ostatus)); \ - nstatus = ostatus | 0x0c00; \ - asm volatile ("fldcw %0" : /* no outputs */ : "m" (nstatus)); \ - tmp = a; \ - asm volatile ("fldl %0" : /* no outputs */ : "m" (tmp)); \ - asm volatile ("fistpl %0" : "=m" (ret)); \ - asm volatile ("fldcw %0" : /* no outputs */ : "m" (ostatus)); \ - \ - return ret; \ -} -- 2.11.0