118 lines
3.6 KiB
C
118 lines
3.6 KiB
C
/* Copyright (c) 2006 by H. Robbers.
|
||
*
|
||
* This file is part of AHCC.
|
||
*
|
||
* AHCC is free software; you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation; either version 2 of the License, or
|
||
* (at your option) any later version.
|
||
*
|
||
* AHCC is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with AHCC; if not, write to the Free Software
|
||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
*/
|
||
|
||
/* This file is invoked by AHCC before any byte is compiled.
|
||
Its purpose is a flexible way of handling all kinds of AHCC
|
||
specific, mostly non standard, stuff.
|
||
The file is read automatically without the need for a #include
|
||
*/
|
||
|
||
/* Aint & Auint are defined such that you will always get 2-byte
|
||
ints independent of __INT4__ setting.
|
||
It is mainly intended for use with AHCCLIB header files.
|
||
AHCCLIB is a 16-bit int library, but you can have a 32-bit
|
||
int application.
|
||
*/
|
||
|
||
#ifndef AHCC_RUN_H
|
||
#define AHCC_RUN_H
|
||
|
||
#if __ABC__ || __AHCC__
|
||
|
||
#define operator __OP__
|
||
#define cast __UC__
|
||
|
||
#if __INT4__
|
||
typedef short Aint;
|
||
typedef unsigned short Auint;
|
||
#else
|
||
typedef int Aint;
|
||
typedef unsigned int Auint;
|
||
|
||
#endif
|
||
|
||
#if __COLDFIRE__
|
||
typedef long CFi;
|
||
typedef unsigned long CFui;
|
||
#else
|
||
typedef int CFi;
|
||
typedef unsigned int CFui;
|
||
#endif
|
||
|
||
#if (__68020__ || __COLDFIRE__)
|
||
#if __LONGLONG__
|
||
/* long long stuff; routines in ahcclib\ll.s */
|
||
|
||
#define ll long long
|
||
|
||
ll operator + (ll, ll) _lladd; /* */
|
||
ll operator - (ll, ll) _llsub; /* */
|
||
ll operator * (ll, ll) _llmul; /* */
|
||
ll operator / (ll, ll) _lldiv; /* */
|
||
ll operator % (ll, ll) _llmod;
|
||
ll operator & (ll, ll) _lland; /* */
|
||
ll operator | (ll, ll) _llor; /* */
|
||
ll operator ^ (ll, ll) _lleor; /* */
|
||
ll operator << (ll, ll) _llshl;
|
||
ll operator >> (ll, ll) _llshr;
|
||
|
||
_Bool operator == (ll, ll) _lleq; /* */
|
||
_Bool operator != (ll, ll) _llne; /* */
|
||
_Bool operator < (ll, ll) _lllt; /* */
|
||
_Bool operator > (ll, ll) _llgt; /* */
|
||
_Bool operator >= (ll, ll) _llge; /* */
|
||
_Bool operator <= (ll, ll) _llle; /* */
|
||
|
||
ll operator - (ll) _llneg;
|
||
|
||
ll cast (char) _b2ll; /* */
|
||
ll cast (unsigned char) _ub2ll; /* */
|
||
ll cast (short) _s2ll; /* */
|
||
ll cast (unsigned short) _us2ll; /* */
|
||
ll cast (long) _l2ll; /* */
|
||
ll cast (unsigned long) _ul2ll; /* */
|
||
|
||
ll cast (float) _f2ll;
|
||
float cast (ll) _ll2f;
|
||
ll cast (double) _d2ll;
|
||
double cast(ll) _ll2d;
|
||
|
||
#undef ll
|
||
#endif
|
||
#else
|
||
/* #message long multiply, mod and divide handled by software */
|
||
#define __HAVE_SW_LONG_MUL_DIV__ 1
|
||
/* The operands are casted before the existence of these operator
|
||
overloads are examined, so the below will suffice. */
|
||
unsigned long operator / (unsigned long, unsigned long) _uldiv;
|
||
long operator / ( long, long) _ldiv;
|
||
unsigned long operator * (unsigned long, unsigned long) _ulmul;
|
||
long operator * ( long, long) _lmul;
|
||
unsigned long operator % (unsigned long, unsigned long) _ulmod;
|
||
long operator % ( long, long) _lmod;
|
||
#endif
|
||
|
||
#undef operator
|
||
#undef cast
|
||
#endif
|
||
|
||
typedef void VpV(void);
|
||
|
||
#endif
|