|
|
1.1 ! root 1: /* Definitions for AT&T assembler syntax for the Intel 80386. ! 2: Copyright (C) 1993 Free Software Foundation, Inc. ! 3: ! 4: This file is part of GNU CC. ! 5: ! 6: GNU CC is free software; you can redistribute it and/or modify ! 7: it under the terms of the GNU General Public License as published by ! 8: the Free Software Foundation; either version 2, or (at your option) ! 9: any later version. ! 10: ! 11: GNU CC is distributed in the hope that it will be useful, ! 12: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: GNU General Public License for more details. ! 15: ! 16: You should have received a copy of the GNU General Public License ! 17: along with GNU CC; see the file COPYING. If not, write to ! 18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 19: ! 20: /* Defines to be able to build libgcc.a with GCC. */ ! 21: ! 22: /* It might seem that these are not important, since gcc 2 will never ! 23: call libgcc for these functions. But programs might be linked with ! 24: code compiled by gcc 1, and then these will be used. */ ! 25: ! 26: /* The arg names used to be a and b, but `a' appears inside strings ! 27: and that confuses non-ANSI cpp. */ ! 28: ! 29: #define perform_udivsi3(arg0,arg1) \ ! 30: { \ ! 31: register int dx asm("dx"); \ ! 32: register int ax asm("ax"); \ ! 33: \ ! 34: dx = 0; \ ! 35: ax = arg0; \ ! 36: asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (arg1), "d" (dx)); \ ! 37: return ax; \ ! 38: } ! 39: ! 40: #define perform_divsi3(arg0,arg1) \ ! 41: { \ ! 42: register int dx asm("dx"); \ ! 43: register int ax asm("ax"); \ ! 44: register int cx asm("cx"); \ ! 45: \ ! 46: ax = arg0; \ ! 47: cx = arg1; \ ! 48: asm ("cltd\n\tidivl %3" : "=a" (ax), "=&d" (dx) : "a" (ax), "c" (cx)); \ ! 49: return ax; \ ! 50: } ! 51: ! 52: #define perform_umodsi3(arg0,arg1) \ ! 53: { \ ! 54: register int dx asm("dx"); \ ! 55: register int ax asm("ax"); \ ! 56: \ ! 57: dx = 0; \ ! 58: ax = arg0; \ ! 59: asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (arg1), "d" (dx)); \ ! 60: return dx; \ ! 61: } ! 62: ! 63: #define perform_modsi3(arg0,arg1) \ ! 64: { \ ! 65: register int dx asm("dx"); \ ! 66: register int ax asm("ax"); \ ! 67: register int cx asm("cx"); \ ! 68: \ ! 69: ax = arg0; \ ! 70: cx = arg1; \ ! 71: asm ("cltd\n\tidivl %3" : "=a" (ax), "=&d" (dx) : "a" (ax), "c" (cx)); \ ! 72: return dx; \ ! 73: } ! 74: ! 75: #define perform_fixdfsi(arg0) \ ! 76: { \ ! 77: auto unsigned short ostatus; \ ! 78: auto unsigned short nstatus; \ ! 79: auto int ret; \ ! 80: auto double tmp; \ ! 81: \ ! 82: &ostatus; /* guarantee these land in memory */ \ ! 83: &nstatus; \ ! 84: &ret; \ ! 85: &tmp; \ ! 86: \ ! 87: asm volatile ("fnstcw %0" : "=m" (ostatus)); \ ! 88: nstatus = ostatus | 0x0c00; \ ! 89: asm volatile ("fldcw %0" : /* no outputs */ : "m" (nstatus)); \ ! 90: tmp = arg0; \ ! 91: asm volatile ("fldl %0" : /* no outputs */ : "m" (tmp)); \ ! 92: asm volatile ("fistpl %0" : "=m" (ret)); \ ! 93: asm volatile ("fldcw %0" : /* no outputs */ : "m" (ostatus)); \ ! 94: \ ! 95: return ret; \ ! 96: } ! 97:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.