|
|
1.1 ! root 1: /* Subroutines needed by GCC output code on some machines. */ ! 2: /* Compile this file with the Unix C compiler! */ ! 3: ! 4: #include "config.h" ! 5: ! 6: union double_di { double d; int i[2]; }; ! 7: union flt_or_int { int i; float f; }; ! 8: ! 9: #ifdef WORDS_BIG_ENDIAN ! 10: #define HIGH 0 ! 11: #define LOW 1 ! 12: #else ! 13: #define HIGH 1 ! 14: #define LOW 0 ! 15: #endif ! 16: ! 17: #ifdef Lva_end ! 18: /* This is here in case the user says #undef va_end, which ANSI C permits. */ ! 19: void ! 20: va_end (ap) ! 21: char **ap; ! 22: { ! 23: } ! 24: #endif ! 25: ! 26: #ifdef L_eprintf ! 27: #include <stdio.h> ! 28: /* This is used by the `assert' macro. */ ! 29: void ! 30: _eprintf (string, line) ! 31: char *string; ! 32: int line; ! 33: { ! 34: fprintf (stderr, string, line); ! 35: } ! 36: #endif ! 37: ! 38: #ifdef L_umulsi3 ! 39: _umulsi3 (a, b) ! 40: unsigned a, b; ! 41: { ! 42: return a * b; ! 43: } ! 44: #endif ! 45: ! 46: #ifdef L_mulsi3 ! 47: _mulsi3 (a, b) ! 48: int a, b; ! 49: { ! 50: return a * b; ! 51: } ! 52: #endif ! 53: ! 54: #ifdef L_udivsi3 ! 55: _udivsi3 (a, b) ! 56: unsigned a, b; ! 57: { ! 58: return a / b; ! 59: } ! 60: #endif ! 61: ! 62: #ifdef L_divsi3 ! 63: _divsi3 (a, b) ! 64: int a, b; ! 65: { ! 66: return a / b; ! 67: } ! 68: #endif ! 69: ! 70: #ifdef L_umodsi3 ! 71: _umodsi3 (a, b) ! 72: unsigned a, b; ! 73: { ! 74: return a % b; ! 75: } ! 76: #endif ! 77: ! 78: #ifdef L_modsi3 ! 79: _modsi3 (a, b) ! 80: int a, b; ! 81: { ! 82: return a % b; ! 83: } ! 84: #endif ! 85: ! 86: #ifdef L_lshrsi3 ! 87: _lshrsi3 (a, b) ! 88: unsigned a, b; ! 89: { ! 90: return a >> b; ! 91: } ! 92: #endif ! 93: ! 94: #ifdef L_lshlsi3 ! 95: _lshlsi3 (a, b) ! 96: unsigned a, b; ! 97: { ! 98: return a << b; ! 99: } ! 100: #endif ! 101: ! 102: #ifdef L_ashrsi3 ! 103: _ashrsi3 (a, b) ! 104: int a, b; ! 105: { ! 106: return a >> b; ! 107: } ! 108: #endif ! 109: ! 110: #ifdef L_ashlsi3 ! 111: _ashlsi3 (a, b) ! 112: int a, b; ! 113: { ! 114: return a << b; ! 115: } ! 116: #endif ! 117: ! 118: #ifdef L_divdf3 ! 119: double ! 120: _divdf3 (a, b) ! 121: double a, b; ! 122: { ! 123: return a / b; ! 124: } ! 125: #endif ! 126: ! 127: #ifdef L_muldf3 ! 128: double ! 129: _muldf3 (a, b) ! 130: double a, b; ! 131: { ! 132: return a * b; ! 133: } ! 134: #endif ! 135: ! 136: #ifdef L_negdf2 ! 137: double ! 138: _negdf2 (a) ! 139: double a; ! 140: { ! 141: return -a; ! 142: } ! 143: #endif ! 144: ! 145: #ifdef L_adddf3 ! 146: double ! 147: _adddf3 (a, b) ! 148: double a, b; ! 149: { ! 150: return a + b; ! 151: } ! 152: #endif ! 153: ! 154: #ifdef L_subdf3 ! 155: double ! 156: _subdf3 (a, b) ! 157: double a, b; ! 158: { ! 159: return a - b; ! 160: } ! 161: #endif ! 162: ! 163: #ifdef L_cmpdf2 ! 164: int ! 165: _cmpdf2 (a, b) ! 166: double a, b; ! 167: { ! 168: if (a > b) ! 169: return 1; ! 170: else if (a < b) ! 171: return -1; ! 172: return 0; ! 173: } ! 174: #endif ! 175: ! 176: #ifdef L_fixunsdfsi ! 177: _fixunsdfsi (a) ! 178: double a; ! 179: { ! 180: return (unsigned int) a; ! 181: } ! 182: #endif ! 183: ! 184: #ifdef L_fixunsdfdi ! 185: double ! 186: _fixunsdfdi (a) ! 187: double a; ! 188: { ! 189: union double_di u; ! 190: u.i[LOW] = (unsigned int) a; ! 191: u.i[HIGH] = 0; ! 192: return u.d; ! 193: } ! 194: #endif ! 195: ! 196: #ifdef L_fixdfsi ! 197: _fixdfsi (a) ! 198: double a; ! 199: { ! 200: return (int) a; ! 201: } ! 202: #endif ! 203: ! 204: #ifdef L_fixdfdi ! 205: double ! 206: _fixdfdi (a) ! 207: double a; ! 208: { ! 209: union double_di u; ! 210: u.i[LOW] = (int) a; ! 211: u.i[HIGH] = (int) a < 0 ? -1 : 0; ! 212: return u.d; ! 213: } ! 214: #endif ! 215: ! 216: #ifdef L_floatsidf ! 217: double ! 218: _floatsidf (a) ! 219: int a; ! 220: { ! 221: return (double) a; ! 222: } ! 223: #endif ! 224: ! 225: #ifdef L_floatdidf ! 226: double ! 227: _floatdidf (u) ! 228: union double_di u; ! 229: { ! 230: register double hi ! 231: = ((double) u.i[HIGH]) * (double) 0x10000 * (double) 0x10000; ! 232: register double low = (unsigned int) u.i[LOW]; ! 233: return hi + low; ! 234: } ! 235: #endif ! 236: ! 237: #define INTIFY(FLOATVAL) (intify.f = (FLOATVAL), intify.i) ! 238: ! 239: #ifdef L_addsf3 ! 240: int ! 241: _addsf3 (a, b) ! 242: union flt_or_int a, b; ! 243: { ! 244: union flt_or_int intify; ! 245: return INTIFY (a.f + b.f); ! 246: } ! 247: #endif ! 248: ! 249: #ifdef L_negsf2 ! 250: int ! 251: _negsf2 (a) ! 252: union flt_or_int a; ! 253: { ! 254: union flt_or_int intify; ! 255: return INTIFY (-a.f); ! 256: } ! 257: #endif ! 258: ! 259: #ifdef L_subsf3 ! 260: int ! 261: _subsf3 (a, b) ! 262: union flt_or_int a, b; ! 263: { ! 264: union flt_or_int intify; ! 265: return INTIFY (a.f - b.f); ! 266: } ! 267: #endif ! 268: ! 269: #ifdef L_cmpsf2 ! 270: int ! 271: _cmpsf2 (a, b) ! 272: union flt_or_int a, b; ! 273: { ! 274: union flt_or_int intify; ! 275: if (a.f > b.f) ! 276: return 1; ! 277: else if (a.f < b.f) ! 278: return -1; ! 279: return 0; ! 280: } ! 281: #endif ! 282: ! 283: #ifdef L_mulsf3 ! 284: int ! 285: _mulsf3 (a, b) ! 286: union flt_or_int a, b; ! 287: { ! 288: union flt_or_int intify; ! 289: return INTIFY (a.f * b.f); ! 290: } ! 291: #endif ! 292: ! 293: #ifdef L_divsf3 ! 294: int ! 295: _divsf3 (a, b) ! 296: union flt_or_int a, b; ! 297: { ! 298: union flt_or_int intify; ! 299: return INTIFY (a.f / b.f); ! 300: } ! 301: #endif ! 302: ! 303: #ifdef L_truncdfsf2 ! 304: int ! 305: _truncdfsf2 (a) ! 306: double a; ! 307: { ! 308: union flt_or_int intify; ! 309: return INTIFY (a); ! 310: } ! 311: #endif ! 312: ! 313: #ifdef L_extendsfdf2 ! 314: double ! 315: _extendsfdf2 (a) ! 316: union flt_or_int a; ! 317: { ! 318: union flt_or_int intify; ! 319: return a.f; ! 320: } ! 321: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.