Annotation of GNUtools/cc/libgcc1.c, revision 1.1

1.1     ! root        1: /* Subroutines needed by GCC output code on some machines.  */
        !             2: /* Compile this file with the Unix C compiler!  */
        !             3: /* Copyright (C) 1987, 1988, 1992 Free Software Foundation, Inc.
        !             4: 
        !             5: This file is free software; you can redistribute it and/or modify it
        !             6: under the terms of the GNU General Public License as published by the
        !             7: Free Software Foundation; either version 2, or (at your option) any
        !             8: later version.
        !             9: 
        !            10: In addition to the permissions in the GNU General Public License, the
        !            11: Free Software Foundation gives you unlimited permission to link the
        !            12: compiled version of this file with other programs, and to distribute
        !            13: those programs without any restriction coming from the use of this
        !            14: file.  (The General Public License restrictions do apply in other
        !            15: respects; for example, they cover modification of the file, and
        !            16: distribution when not linked into another program.)
        !            17: 
        !            18: This file is distributed in the hope that it will be useful, but
        !            19: WITHOUT ANY WARRANTY; without even the implied warranty of
        !            20: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            21: General Public License for more details.
        !            22: 
        !            23: You should have received a copy of the GNU General Public License
        !            24: along with this program; see the file COPYING.  If not, write to
        !            25: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
        !            26: 
        !            27: /* As a special exception, if you link this library with files
        !            28:    compiled with GCC to produce an executable, this does not cause
        !            29:    the resulting executable to be covered by the GNU General Public License.
        !            30:    This exception does not however invalidate any other reasons why
        !            31:    the executable file might be covered by the GNU General Public License.  */
        !            32: 
        !            33: #include "config.h"
        !            34: #ifdef SHLIB
        !            35: #include <libsys/shlib.h>
        !            36: #endif
        !            37: 
        !            38: /* Don't use `fancy_abort' here even if config.h says to use it.  */
        !            39: #ifdef abort
        !            40: #undef abort
        !            41: #endif
        !            42: 
        !            43: /* On some machines, cc is really GCC.  For these machines, we can't
        !            44:    expect these functions to be properly compiled unless GCC open codes
        !            45:    the operation (which is precisely when the function won't be used).
        !            46:    So allow tm.h to specify ways of accomplishing the operations
        !            47:    by defining the macros perform_*.
        !            48: 
        !            49:    On a machine where cc is some other compiler, there is usually no
        !            50:    reason to define perform_*.  The other compiler normally has other ways
        !            51:    of implementing all of these operations.
        !            52: 
        !            53:    In some cases a certain machine may come with GCC installed as cc
        !            54:    or may have some other compiler.  Then it may make sense for tm.h
        !            55:    to define perform_* only if __GNUC__ is defined.  */
        !            56: 
        !            57: #ifndef perform_mulsi3
        !            58: #define perform_mulsi3(a, b) return a * b
        !            59: #endif
        !            60: 
        !            61: #ifndef perform_divsi3
        !            62: #define perform_divsi3(a, b) return a / b
        !            63: #endif
        !            64: 
        !            65: #ifndef perform_udivsi3
        !            66: #define perform_udivsi3(a, b) return a / b
        !            67: #endif
        !            68: 
        !            69: #ifndef perform_modsi3
        !            70: #define perform_modsi3(a, b) return a % b
        !            71: #endif
        !            72: 
        !            73: #ifndef perform_umodsi3
        !            74: #define perform_umodsi3(a, b) return a % b
        !            75: #endif
        !            76: 
        !            77: #ifndef perform_lshrsi3
        !            78: #define perform_lshrsi3(a, b) return a >> b
        !            79: #endif
        !            80: 
        !            81: #ifndef perform_lshlsi3
        !            82: #define perform_lshlsi3(a, b) return a << b
        !            83: #endif
        !            84: 
        !            85: #ifndef perform_ashrsi3
        !            86: #define perform_ashrsi3(a, b) return a >> b
        !            87: #endif
        !            88: 
        !            89: #ifndef perform_ashlsi3
        !            90: #define perform_ashlsi3(a, b) return a << b
        !            91: #endif
        !            92: 
        !            93: #ifndef perform_adddf3
        !            94: #define perform_adddf3(a, b) return a + b
        !            95: #endif
        !            96: 
        !            97: #ifndef perform_subdf3
        !            98: #define perform_subdf3(a, b) return a - b
        !            99: #endif
        !           100: 
        !           101: #ifndef perform_muldf3
        !           102: #define perform_muldf3(a, b) return a * b
        !           103: #endif
        !           104: 
        !           105: #ifndef perform_divdf3
        !           106: #define perform_divdf3(a, b) return a / b
        !           107: #endif
        !           108: 
        !           109: #ifndef perform_addsf3
        !           110: #define perform_addsf3(a, b) return INTIFY (a + b)
        !           111: #endif
        !           112: 
        !           113: #ifndef perform_subsf3
        !           114: #define perform_subsf3(a, b) return INTIFY (a - b)
        !           115: #endif
        !           116: 
        !           117: #ifndef perform_mulsf3
        !           118: #define perform_mulsf3(a, b) return INTIFY (a * b)
        !           119: #endif
        !           120: 
        !           121: #ifndef perform_divsf3
        !           122: #define perform_divsf3(a, b) return INTIFY (a / b)
        !           123: #endif
        !           124: 
        !           125: #ifndef perform_negdf2
        !           126: #define perform_negdf2(a) return -a
        !           127: #endif
        !           128: 
        !           129: #ifndef perform_negsf2
        !           130: #define perform_negsf2(a) return INTIFY (-a)
        !           131: #endif
        !           132: 
        !           133: #ifndef perform_fixdfsi
        !           134: #define perform_fixdfsi(a) return (nongcc_SI_type) a;
        !           135: #endif
        !           136: 
        !           137: #ifndef perform_fixsfsi
        !           138: #define perform_fixsfsi(a) return (nongcc_SI_type) a
        !           139: #endif
        !           140: 
        !           141: #ifndef perform_floatsidf
        !           142: #define perform_floatsidf(a) return (double) a
        !           143: #endif
        !           144: 
        !           145: #ifndef perform_floatsisf
        !           146: #define perform_floatsisf(a)  return INTIFY ((float) a)
        !           147: #endif
        !           148: 
        !           149: #ifndef perform_extendsfdf2
        !           150: #define perform_extendsfdf2(a)  return a
        !           151: #endif
        !           152: 
        !           153: #ifndef perform_truncdfsf2
        !           154: #define perform_truncdfsf2(a)  return INTIFY (a)
        !           155: #endif
        !           156: 
        !           157: /* Note that eqdf2 returns a value for "true" that is == 0,
        !           158:    nedf2 returns a value for "true" that is != 0,
        !           159:    gtdf2 returns a value for "true" that is > 0,
        !           160:    and so on.  */
        !           161: 
        !           162: #ifndef perform_eqdf2
        !           163: #define perform_eqdf2(a, b) return !(a == b)
        !           164: #endif
        !           165: 
        !           166: #ifndef perform_nedf2
        !           167: #define perform_nedf2(a, b) return a != b
        !           168: #endif
        !           169: 
        !           170: #ifndef perform_gtdf2
        !           171: #define perform_gtdf2(a, b) return a > b
        !           172: #endif
        !           173: 
        !           174: #ifndef perform_gedf2
        !           175: #define perform_gedf2(a, b) return (a >= b) - 1
        !           176: #endif
        !           177: 
        !           178: #ifndef perform_ltdf2
        !           179: #define perform_ltdf2(a, b) return -(a < b)
        !           180: #endif
        !           181: 
        !           182: #ifndef perform_ledf2
        !           183: #define perform_ledf2(a, b) return 1 - (a <= b)
        !           184: #endif
        !           185: 
        !           186: #ifndef perform_eqsf2
        !           187: #define perform_eqsf2(a, b) return !(a == b)
        !           188: #endif
        !           189: 
        !           190: #ifndef perform_nesf2
        !           191: #define perform_nesf2(a, b) return a != b
        !           192: #endif
        !           193: 
        !           194: #ifndef perform_gtsf2
        !           195: #define perform_gtsf2(a, b) return a > b
        !           196: #endif
        !           197: 
        !           198: #ifndef perform_gesf2
        !           199: #define perform_gesf2(a, b) return (a >= b) - 1
        !           200: #endif
        !           201: 
        !           202: #ifndef perform_ltsf2
        !           203: #define perform_ltsf2(a, b) return -(a < b)
        !           204: #endif
        !           205: 
        !           206: #ifndef perform_lesf2
        !           207: #define perform_lesf2(a, b) return 1 - (a <= b);
        !           208: #endif
        !           209: 
        !           210: /* Define the C data type to use for an SImode value.  */
        !           211: 
        !           212: #ifndef nongcc_SI_type
        !           213: #define nongcc_SI_type long int
        !           214: #endif
        !           215: 
        !           216: /* Define the C data type to use for a value of word size */
        !           217: #ifndef nongcc_word_type
        !           218: #define nongcc_word_type nongcc_SI_type
        !           219: #endif
        !           220: 
        !           221: /* Define the type to be used for returning an SF mode value
        !           222:    and the method for turning a float into that type.
        !           223:    These definitions work for machines where an SF value is
        !           224:    returned in the same register as an int.  */
        !           225: 
        !           226: #ifndef FLOAT_VALUE_TYPE  
        !           227: #define FLOAT_VALUE_TYPE int
        !           228: #endif
        !           229: 
        !           230: #ifndef INTIFY
        !           231: #define INTIFY(FLOATVAL)  (intify.f = (FLOATVAL), intify.i)
        !           232: #endif
        !           233: 
        !           234: #ifndef FLOATIFY
        !           235: #define FLOATIFY(INTVAL)  ((INTVAL).f)
        !           236: #endif
        !           237: 
        !           238: #ifndef FLOAT_ARG_TYPE
        !           239: #define FLOAT_ARG_TYPE union flt_or_int
        !           240: #endif
        !           241: 
        !           242: union flt_or_value { FLOAT_VALUE_TYPE i; float f; };
        !           243: 
        !           244: union flt_or_int { int i; float f; };
        !           245: 
        !           246: 
        !           247: #ifdef L_mulsi3
        !           248: nongcc_SI_type
        !           249: __mulsi3 (a, b)
        !           250:      nongcc_SI_type a, b;
        !           251: {
        !           252:   perform_mulsi3 (a, b);
        !           253: }
        !           254: #endif
        !           255: 
        !           256: #ifdef L_udivsi3
        !           257: nongcc_SI_type
        !           258: __udivsi3 (a, b)
        !           259:      unsigned nongcc_SI_type a, b;
        !           260: {
        !           261:   perform_udivsi3 (a, b);
        !           262: }
        !           263: #endif
        !           264: 
        !           265: #ifdef L_divsi3
        !           266: nongcc_SI_type
        !           267: __divsi3 (a, b)
        !           268:      nongcc_SI_type a, b;
        !           269: {
        !           270:   perform_divsi3 (a, b);
        !           271: }
        !           272: #endif
        !           273: 
        !           274: #ifdef L_umodsi3
        !           275: nongcc_SI_type
        !           276: __umodsi3 (a, b)
        !           277:      unsigned nongcc_SI_type a, b;
        !           278: {
        !           279:   perform_umodsi3 (a, b);
        !           280: }
        !           281: #endif
        !           282: 
        !           283: #ifdef L_modsi3
        !           284: nongcc_SI_type
        !           285: __modsi3 (a, b)
        !           286:      nongcc_SI_type a, b;
        !           287: {
        !           288:   perform_modsi3 (a, b);
        !           289: }
        !           290: #endif
        !           291: 
        !           292: #ifdef L_lshrsi3
        !           293: nongcc_SI_type
        !           294: __lshrsi3 (a, b)
        !           295:      unsigned nongcc_SI_type a, b;
        !           296: {
        !           297:   perform_lshrsi3 (a, b);
        !           298: }
        !           299: #endif
        !           300: 
        !           301: #ifdef L_lshlsi3
        !           302: nongcc_SI_type
        !           303: __lshlsi3 (a, b)
        !           304:      unsigned nongcc_SI_type a, b;
        !           305: {
        !           306:   perform_lshlsi3 (a, b);
        !           307: }
        !           308: #endif
        !           309: 
        !           310: #ifdef L_ashrsi3
        !           311: nongcc_SI_type
        !           312: __ashrsi3 (a, b)
        !           313:      nongcc_SI_type a, b;
        !           314: {
        !           315:   perform_ashrsi3 (a, b);
        !           316: }
        !           317: #endif
        !           318: 
        !           319: #ifdef L_ashlsi3
        !           320: nongcc_SI_type
        !           321: __ashlsi3 (a, b)
        !           322:      nongcc_SI_type a, b;
        !           323: {
        !           324:   perform_ashlsi3 (a, b);
        !           325: }
        !           326: #endif
        !           327: 
        !           328: #ifdef L_divdf3
        !           329: double
        !           330: __divdf3 (a, b)
        !           331:      double a, b;
        !           332: {
        !           333:   perform_divdf3 (a, b);
        !           334: }
        !           335: #endif
        !           336: 
        !           337: #ifdef L_muldf3
        !           338: double
        !           339: __muldf3 (a, b)
        !           340:      double a, b;
        !           341: {
        !           342:   perform_muldf3 (a, b);
        !           343: }
        !           344: #endif
        !           345: 
        !           346: #ifdef L_negdf2
        !           347: double
        !           348: __negdf2 (a)
        !           349:      double a;
        !           350: {
        !           351:   perform_negdf2 (a);
        !           352: }
        !           353: #endif
        !           354: 
        !           355: #ifdef L_adddf3
        !           356: double
        !           357: __adddf3 (a, b)
        !           358:      double a, b;
        !           359: {
        !           360:   perform_adddf3 (a, b);
        !           361: }
        !           362: #endif
        !           363: 
        !           364: #ifdef L_subdf3
        !           365: double
        !           366: __subdf3 (a, b)
        !           367:      double a, b;
        !           368: {
        !           369:   perform_subdf3 (a, b);
        !           370: }
        !           371: #endif
        !           372: 
        !           373: /* Note that eqdf2 returns a value for "true" that is == 0,
        !           374:    nedf2 returns a value for "true" that is != 0,
        !           375:    gtdf2 returns a value for "true" that is > 0,
        !           376:    and so on.  */
        !           377: 
        !           378: #ifdef L_eqdf2
        !           379: nongcc_word_type
        !           380: __eqdf2 (a, b)
        !           381:      double a, b;
        !           382: {
        !           383:   /* Value == 0 iff a == b.  */
        !           384:   perform_eqdf2 (a, b);
        !           385: }
        !           386: #endif
        !           387: 
        !           388: #ifdef L_nedf2
        !           389: nongcc_word_type
        !           390: __nedf2 (a, b)
        !           391:      double a, b;
        !           392: {
        !           393:   /* Value != 0 iff a != b.  */
        !           394:   perform_nedf2 (a, b);
        !           395: }
        !           396: #endif
        !           397: 
        !           398: #ifdef L_gtdf2
        !           399: nongcc_word_type
        !           400: __gtdf2 (a, b)
        !           401:      double a, b;
        !           402: {
        !           403:   /* Value > 0 iff a > b.  */
        !           404:   perform_gtdf2 (a, b);
        !           405: }
        !           406: #endif
        !           407: 
        !           408: #ifdef L_gedf2
        !           409: nongcc_word_type
        !           410: __gedf2 (a, b)
        !           411:      double a, b;
        !           412: {
        !           413:   /* Value >= 0 iff a >= b.  */
        !           414:   perform_gedf2 (a, b);
        !           415: }
        !           416: #endif
        !           417: 
        !           418: #ifdef L_ltdf2
        !           419: nongcc_word_type
        !           420: __ltdf2 (a, b)
        !           421:      double a, b;
        !           422: {
        !           423:   /* Value < 0 iff a < b.  */
        !           424:   perform_ltdf2 (a, b);
        !           425: }
        !           426: #endif
        !           427: 
        !           428: #ifdef L_ledf2
        !           429: nongcc_word_type
        !           430: __ledf2 (a, b)
        !           431:      double a, b;
        !           432: {
        !           433:   /* Value <= 0 iff a <= b.  */
        !           434:   perform_ledf2 (a, b);
        !           435: }
        !           436: #endif
        !           437: 
        !           438: #ifdef L_fixdfsi
        !           439: nongcc_SI_type
        !           440: __fixdfsi (a)
        !           441:      double a;
        !           442: {
        !           443:   perform_fixdfsi (a);
        !           444: }
        !           445: #endif
        !           446: 
        !           447: #ifdef L_fixsfsi
        !           448: nongcc_SI_type
        !           449: __fixsfsi (a)
        !           450:      FLOAT_ARG_TYPE a;
        !           451: {
        !           452:   union flt_or_value intify;
        !           453:   perform_fixsfsi (FLOATIFY (a));
        !           454: }
        !           455: #endif
        !           456: 
        !           457: #ifdef L_floatsidf
        !           458: double
        !           459: __floatsidf (a)
        !           460:      nongcc_SI_type a;
        !           461: {
        !           462:   perform_floatsidf (a);
        !           463: }
        !           464: #endif
        !           465: 
        !           466: #ifdef L_floatsisf
        !           467: FLOAT_VALUE_TYPE
        !           468: __floatsisf (a)
        !           469:      nongcc_SI_type a;
        !           470: {
        !           471:   union flt_or_value intify;
        !           472:   perform_floatsisf (a);
        !           473: }
        !           474: #endif
        !           475: 
        !           476: #ifdef L_addsf3
        !           477: FLOAT_VALUE_TYPE
        !           478: __addsf3 (a, b)
        !           479:      FLOAT_ARG_TYPE a, b;
        !           480: {
        !           481:   union flt_or_value intify;
        !           482:   perform_addsf3 (FLOATIFY (a), FLOATIFY (b));
        !           483: }
        !           484: #endif
        !           485: 
        !           486: #ifdef L_negsf2
        !           487: FLOAT_VALUE_TYPE
        !           488: __negsf2 (a)
        !           489:      FLOAT_ARG_TYPE a;
        !           490: {
        !           491:   union flt_or_value intify;
        !           492:   perform_negsf2 (FLOATIFY (a));
        !           493: }
        !           494: #endif
        !           495: 
        !           496: #ifdef L_subsf3
        !           497: FLOAT_VALUE_TYPE
        !           498: __subsf3 (a, b)
        !           499:      FLOAT_ARG_TYPE a, b;
        !           500: {
        !           501:   union flt_or_value intify;
        !           502:   perform_subsf3 (FLOATIFY (a), FLOATIFY (b));
        !           503: }
        !           504: #endif
        !           505: 
        !           506: #ifdef L_eqsf2
        !           507: nongcc_word_type
        !           508: __eqsf2 (a, b)
        !           509:      FLOAT_ARG_TYPE a, b;
        !           510: {
        !           511:   union flt_or_int intify;
        !           512:   /* Value == 0 iff a == b.  */
        !           513:   perform_eqsf2 (FLOATIFY (a), FLOATIFY (b));
        !           514: }
        !           515: #endif
        !           516: 
        !           517: #ifdef L_nesf2
        !           518: nongcc_word_type
        !           519: __nesf2 (a, b)
        !           520:      FLOAT_ARG_TYPE a, b;
        !           521: {
        !           522:   union flt_or_int intify;
        !           523:   /* Value != 0 iff a != b.  */
        !           524:   perform_nesf2 (FLOATIFY (a), FLOATIFY (b));
        !           525: }
        !           526: #endif
        !           527: 
        !           528: #ifdef L_gtsf2
        !           529: nongcc_word_type
        !           530: __gtsf2 (a, b)
        !           531:      FLOAT_ARG_TYPE a, b;
        !           532: {
        !           533:   union flt_or_int intify;
        !           534:   /* Value > 0 iff a > b.  */
        !           535:   perform_gtsf2 (FLOATIFY (a), FLOATIFY (b));
        !           536: }
        !           537: #endif
        !           538: 
        !           539: #ifdef L_gesf2
        !           540: nongcc_word_type
        !           541: __gesf2 (a, b)
        !           542:      FLOAT_ARG_TYPE a, b;
        !           543: {
        !           544:   union flt_or_int intify;
        !           545:   /* Value >= 0 iff a >= b.  */
        !           546:   perform_gesf2 (FLOATIFY (a), FLOATIFY (b));
        !           547: }
        !           548: #endif
        !           549: 
        !           550: #ifdef L_ltsf2
        !           551: nongcc_word_type
        !           552: __ltsf2 (a, b)
        !           553:      FLOAT_ARG_TYPE a, b;
        !           554: {
        !           555:   union flt_or_int intify;
        !           556:   /* Value < 0 iff a < b.  */
        !           557:   perform_ltsf2 (FLOATIFY (a), FLOATIFY (b));
        !           558: }
        !           559: #endif
        !           560: 
        !           561: #ifdef L_lesf2
        !           562: nongcc_word_type
        !           563: __lesf2 (a, b)
        !           564:      FLOAT_ARG_TYPE a, b;
        !           565: {
        !           566:   union flt_or_int intify;
        !           567:   /* Value <= 0 iff a <= b.  */
        !           568:   perform_lesf2 (FLOATIFY (a), FLOATIFY (b));
        !           569: }
        !           570: #endif
        !           571: 
        !           572: #ifdef L_mulsf3
        !           573: FLOAT_VALUE_TYPE
        !           574: __mulsf3 (a, b)
        !           575:      FLOAT_ARG_TYPE a, b;
        !           576: {
        !           577:   union flt_or_value intify;
        !           578:   perform_mulsf3 (FLOATIFY (a), FLOATIFY (b));
        !           579: }
        !           580: #endif
        !           581: 
        !           582: #ifdef L_divsf3
        !           583: FLOAT_VALUE_TYPE
        !           584: __divsf3 (a, b)
        !           585:      FLOAT_ARG_TYPE a, b;
        !           586: {
        !           587:   union flt_or_value intify;
        !           588:   perform_divsf3 (FLOATIFY (a), FLOATIFY (b));
        !           589: }
        !           590: #endif
        !           591: 
        !           592: #ifdef L_truncdfsf2
        !           593: FLOAT_VALUE_TYPE
        !           594: __truncdfsf2 (a)
        !           595:      double a;
        !           596: {
        !           597:   union flt_or_value intify;
        !           598:   perform_truncdfsf2 (a);
        !           599: }
        !           600: #endif
        !           601: 
        !           602: #ifdef L_extendsfdf2
        !           603: double
        !           604: __extendsfdf2 (a)
        !           605:      FLOAT_ARG_TYPE a;
        !           606: {
        !           607:   union flt_or_value intify;
        !           608:   perform_extendsfdf2 (FLOATIFY (a));
        !           609: }
        !           610: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.