|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T g
Length: 7496 (0x1d48)
Types: TextFile
Names: »gnulib.c«
└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
└─⟦d53cfc7b2⟧ »./gcc-1.35.tar.Z«
└─⟦90f628c1d⟧
└─⟦this⟧ »gcc-1.35/gnulib.c«
/* Subroutines needed by GCC output code on some machines. */
/* Compile this file with the Unix C compiler! */
#include "config.h"
/* Define the C data type to use for an SImode value. */
#ifndef SItype
#define SItype long int
#endif
/* Define the type to be used for returning an SF mode value
and the method for turning a float into that type.
These definitions work for machines where an SF value is
returned in the same register as an int. */
#ifndef SFVALUE
#define SFVALUE int
#endif
#ifndef INTIFY
#define INTIFY(FLOATVAL) (intify.f = (FLOATVAL), intify.i)
#endif
union double_di { double d; int i[2]; };
union flt_or_int { int i; float f; };
union longlong { int i[2]; unsigned int ui[2]; };
#ifdef WORDS_BIG_ENDIAN
#define HIGH 0
#define LOW 1
#else
#define HIGH 1
#define LOW 0
#endif
#ifdef L_eprintf
#include <stdio.h>
/* This is used by the `assert' macro. */
void
__eprintf (string, line, filename)
char *string;
int line;
char *filename;
{
fprintf (stderr, string, line, filename);
}
#endif
#ifdef L_umulsi3
SItype
__umulsi3 (a, b)
unsigned SItype a, b;
{
return a * b;
}
#endif
#ifdef L_mulsi3
SItype
__mulsi3 (a, b)
SItype a, b;
{
return a * b;
}
#endif
#ifdef L_udivsi3
SItype
__udivsi3 (a, b)
unsigned SItype a, b;
{
return a / b;
}
#endif
#ifdef L_divsi3
SItype
__divsi3 (a, b)
SItype a, b;
{
return a / b;
}
#endif
#ifdef L_umodsi3
SItype
__umodsi3 (a, b)
unsigned SItype a, b;
{
return a % b;
}
#endif
#ifdef L_modsi3
SItype
__modsi3 (a, b)
SItype a, b;
{
return a % b;
}
#endif
#ifdef L_lshrsi3
SItype
__lshrsi3 (a, b)
unsigned SItype a, b;
{
return a >> b;
}
#endif
#ifdef L_lshlsi3
SItype
__lshlsi3 (a, b)
unsigned SItype a, b;
{
return a << b;
}
#endif
#ifdef L_ashrsi3
SItype
__ashrsi3 (a, b)
SItype a, b;
{
return a >> b;
}
#endif
#ifdef L_ashlsi3
SItype
__ashlsi3 (a, b)
SItype a, b;
{
return a << b;
}
#endif
#ifdef L_cmpdi2
SItype
__cmpdi2 (a, b)
union longlong a, b;
{
if (a.i[HIGH] < b.i[HIGH])
return 0;
else if (a.i[HIGH] > b.i[HIGH])
return 2;
if (a.ui[LOW] < b.ui[LOW])
return 0;
else if (a.ui[LOW] > b.ui[LOW])
return 2;
return 1;
}
#endif
#ifdef L_ucmpdi2
SItype
__ucmpdi2 (a, b)
union longlong a, b;
{
if (a.ui[HIGH] < b.ui[HIGH])
return 0;
else if (a.ui[HIGH] > b.ui[HIGH])
return 2;
if (a.ui[LOW] < b.ui[LOW])
return 0;
else if (a.ui[LOW] > b.ui[LOW])
return 2;
return 1;
}
#endif
\f
#ifdef L_divdf3
double
__divdf3 (a, b)
double a, b;
{
return a / b;
}
#endif
#ifdef L_muldf3
double
__muldf3 (a, b)
double a, b;
{
return a * b;
}
#endif
#ifdef L_negdf2
double
__negdf2 (a)
double a;
{
return -a;
}
#endif
#ifdef L_adddf3
double
__adddf3 (a, b)
double a, b;
{
return a + b;
}
#endif
#ifdef L_subdf3
double
__subdf3 (a, b)
double a, b;
{
return a - b;
}
#endif
#ifdef L_cmpdf2
SItype
__cmpdf2 (a, b)
double a, b;
{
if (a > b)
return 1;
else if (a < b)
return -1;
return 0;
}
#endif
\f
#ifdef L_fixunsdfsi
SItype
__fixunsdfsi (a)
double a;
{
return (unsigned SItype) a;
}
#endif
#ifdef L_fixunsdfdi
double
__fixunsdfdi (a)
double a;
{
union double_di u;
u.i[LOW] = (unsigned int) a;
u.i[HIGH] = 0;
return u.d;
}
#endif
#ifdef L_fixdfsi
SItype
__fixdfsi (a)
double a;
{
return (SItype) a;
}
#endif
#ifdef L_fixdfdi
double
__fixdfdi (a)
double a;
{
union double_di u;
u.i[LOW] = (int) a;
u.i[HIGH] = (int) a < 0 ? -1 : 0;
return u.d;
}
#endif
#ifdef L_floatsidf
double
__floatsidf (a)
SItype a;
{
return (double) a;
}
#endif
#ifdef L_floatdidf
double
__floatdidf (u)
union double_di u;
{
register double hi
= ((double) u.i[HIGH]) * (double) 0x10000 * (double) 0x10000;
register double low = (unsigned int) u.i[LOW];
return hi + low;
}
#endif
\f
#ifdef L_addsf3
SFVALUE
__addsf3 (a, b)
union flt_or_int a, b;
{
union flt_or_int intify;
return INTIFY (a.f + b.f);
}
#endif
#ifdef L_negsf2
SFVALUE
__negsf2 (a)
union flt_or_int a;
{
union flt_or_int intify;
return INTIFY (-a.f);
}
#endif
#ifdef L_subsf3
SFVALUE
__subsf3 (a, b)
union flt_or_int a, b;
{
union flt_or_int intify;
return INTIFY (a.f - b.f);
}
#endif
#ifdef L_cmpsf2
SItype
__cmpsf2 (a, b)
union flt_or_int a, b;
{
if (a.f > b.f)
return 1;
else if (a.f < b.f)
return -1;
return 0;
}
#endif
#ifdef L_mulsf3
SFVALUE
__mulsf3 (a, b)
union flt_or_int a, b;
{
union flt_or_int intify;
return INTIFY (a.f * b.f);
}
#endif
#ifdef L_divsf3
SFVALUE
__divsf3 (a, b)
union flt_or_int a, b;
{
union flt_or_int intify;
return INTIFY (a.f / b.f);
}
#endif
#ifdef L_truncdfsf2
SFVALUE
__truncdfsf2 (a)
double a;
{
union flt_or_int intify;
return INTIFY (a);
}
#endif
#ifdef L_extendsfdf2
double
__extendsfdf2 (a)
union flt_or_int a;
{
union flt_or_int intify;
return a.f;
}
#endif
#ifdef L_varargs
#ifdef sparc
asm (".global ___builtin_saveregs");
asm ("___builtin_saveregs:");
asm ("st %i0,[%fp+68]");
asm ("st %i1,[%fp+72]");
asm ("st %i2,[%fp+76]");
asm ("st %i3,[%fp+80]");
asm ("st %i4,[%fp+84]");
asm ("retl");
asm ("st %i5,[%fp+88]");
#else
__builtin_saveregs ()
{
abort ();
}
#endif
#endif
#ifdef L_bb_init_func
#if defined (sun) && defined (m68k)
struct bb
{
int initialized;
char *filename;
int *counts;
int ncounts;
int zero_word;
int *addresses;
};
__bb_init_function (blocks)
struct bb *blocks;
{
extern int __tcov_init;
if (! ___tcov_init)
___tcov_init_func ();
___bb_link (blocks->filename, blocks->counts, blocks->nblocks);
}
#endif
#endif
/* frills for C++ */
#ifdef L_builtin_new
typedef void (*vfp)();
extern vfp __new_handler;
char *
__builtin_new (sz)
long sz;
{
char *p;
p = (char *)malloc (sz);
if (p == 0)
(*__new_handler) ();
return p;
}
#endif
#ifdef L_builtin_New
typedef void (*vfp)();
static void
default_new_handler ();
vfp __new_handler = default_new_handler;
char *
__builtin_vec_new (p, maxindex, size, ctor)
char *p;
int maxindex, size;
void (*ctor)();
{
int i, nelts = maxindex + 1;
char *rval;
if (p == 0)
p = (char *)__builtin_new (nelts * size);
rval = p;
for (i = 0; i < nelts; i++)
{
ctor (p);
p += size;
}
return rval;
}
vfp
__set_new_handler (handler)
vfp handler;
{
vfp prev_handler;
prev_handler = __new_handler;
if (handler == 0) handler = default_new_handler;
__new_handler = handler;
return prev_handler;
}
vfp
set_new_handler (handler)
vfp handler;
{
return __set_new_handler (handler);
}
static void
default_new_handler ()
{
/* don't use fprintf (stderr, ...) because it may need to call malloc. */
write (2, "default_new_handler: out of memory... aaaiiiiiieeeeeeeeeeeeee!\n", 65);
/* don't call exit () because that may call global destructors which
may cause a loop. */
_exit (-1);
}
#endif
#ifdef L_builtin_del
typedef void (*vfp)();
void
__builtin_delete (ptr)
char *ptr;
{
if (ptr)
free (ptr);
}
void
__builtin_vec_delete (ptr, maxindex, size, dtor, auto_delete_vec, auto_delete)
char *ptr;
int maxindex, size;
void (*dtor)();
int auto_delete;
{
int i, nelts = maxindex + 1;
char *p = ptr;
ptr += nelts * size;
for (i = 0; i < nelts; i++)
{
ptr -= size;
dtor (ptr, auto_delete);
}
if (auto_delete_vec)
free (p);
}
#endif