#if (defined(__IBMC__) || defined(__IBMCPP__))
#pragma info( none )
#ifndef __CHKHDR__
   #pragma info( none )
#endif
#pragma info( restore )
#endif

#ifndef __builtin_h
   #define __builtin_h

   #ifdef __cplusplus
      extern "C" {
   #endif

   #ifndef  _LNK_CONV
      #ifdef _M_I386
         #define _LNK_CONV   _Optlink
      #else
         #define _LNK_CONV
      #endif
   #endif

   /********************************************************************/
   /*  <builtin.h> header file                                         */
   /*                                                                  */
   /*  IBM VisualAge C++ for OS/2, Version 3.00                        */
   /*  (C) Copyright IBM Corp. 1991, 1995.                             */
   /*  - Licensed Material - Program-Property of IBM                   */
   /*  - All rights reserved                                           */
   /*                                                                  */
   /********************************************************************/

   #if defined(__EXTENDED__)

      #ifndef __size_t
         #define __size_t
         typedef unsigned int size_t;
      #endif

    #ifdef __THW_PPC__
      unsigned long  _getTIBvalue( const unsigned int );
      int   __lxchg(volatile int *__locklocation, int __value);

      #if !defined(_alloca) && (defined(__IBMC__) || defined(__IBMCPP__))
         void * _Builtin __alloca( size_t );
         #define _alloca( x ) __alloca( (x) )
         #define alloca( x ) __alloca( (x) )
      #endif
       #ifdef __cplusplus
          extern "builtin" void __bcopy(char*, char*, int);
          extern "builtin" void __bzero(char*, int);
          extern "builtin" void __copysign(double, double);
          extern "builtin" void __imul_dbl(long, long, long*);
          extern "builtin" void __umul_dbl(unsigned long, unsigned long, unsigned long*);
          extern "builtin" void __iospace_eieio();
          extern "builtin" void __iospace_sync();
          extern "builtin" unsigned short __load2r(unsigned short*);
          extern "builtin" int __load4r(unsigned int*);
          extern "builtin" unsigned short __store2r(unsigned short*);
          extern "builtin" int __store4r(unsigned int*);
          extern "builtin" double __readflm();
          extern "builtin" double __setflm(double);
          extern "builtin" double __setrnd(int);
       #endif
    #else
      void           _Builtin __interrupt( const unsigned int );
      unsigned long  _Builtin __getTIBvalue( const unsigned int );

      #define _interrupt( x )   __interrupt( x )
      #define _getTIBvalue( x ) __getTIBvalue( x )

      double _Builtin __fsin ( double );
      double _Builtin __fcos ( double );
      double _Builtin __fptan ( double );
      double _Builtin __fpatan ( double );
      double _Builtin __facos ( double );
      double _Builtin __fasin ( double );
      double _Builtin __fsincos ( double, double * );
      double _Builtin __fsqrt ( double );
      double _Builtin __fcossin ( double, double * );
      double _Builtin __f2xm1 ( double );
      double _Builtin __fyl2x ( double, double );
      double _Builtin __fyl2xp1 ( double, double );

      #define _fsin( x )         __fsin( (x) )
      #define _fcos( x )         __fcos( (x) )
      #define _fptan( x )        __fptan( (x) )
      #define _fpatan( x )       __fpatan( (x) )
      #define _facos( x )        __facos( (x) )
      #define _fasin( x )        __fasin( (x) )
      #define _fsincos( x, y )   __fsincos( (x), (y) )
      #define _fsqrt( x )        __fsqrt( (x) )
      #define _fcossin( x, y )   __fcossin( (x), (y) )
      #define _f2xm1( x )        __f2xm1( (x) )
      #define _fyl2x( x, y )     __fyl2x( (x), (y) )
      #define _fyl2xp1( x, y )   __fyl2xp1( (x), (y) )

      void           _Builtin __enable( void );
      void           _Builtin __disable( void );
      int            _Builtin __inpb( const unsigned int );
      unsigned short _Builtin __inpw( const unsigned int );
      unsigned long  _Builtin __inpd( const unsigned int );
      int            _Builtin __outpb( const unsigned int, const int );
      unsigned short _Builtin __outpw( const unsigned int, const unsigned short );
      unsigned long  _Builtin __outpd( const unsigned int, const unsigned long );
      unsigned int   _Builtin __clear87( void );
      unsigned int   _Builtin __control87( unsigned int, unsigned int );
      unsigned int   _Builtin __status87( void );

      #ifndef _alloca
         void * _Builtin __alloca( size_t );
         #pragma info( none )
         #define _alloca( x ) __alloca( (x) )
         #define alloca( x ) __alloca( (x) )
         #pragma info( restore )
      #endif

      unsigned char _Builtin __parmdwords( void );

      #define _enable( )              __enable( )
      #define _disable( )             __disable( )
      #define _inp( x )               __inpb( x )
      #define _inpw( x )              __inpw( x )
      #define _inpd( x )              __inpd( x )
      #define _outp( x, y )           __outpb( (x), (y) )
      #define _outpw( x, y )          __outpw( (x), (y) )
      #define _outpd( x, y )          __outpd( (x), (y) )
      #define _clear87( )             __clear87( )
      #define _control87( x, y )      __control87( (x), (y) )
      #define _status87( )            __status87( )

      unsigned long  _Builtin  __lrotl(unsigned long, int);
      unsigned long  _Builtin  __lrotr(unsigned long, int);
      unsigned short _Builtin  __srotl(unsigned short, int);
      unsigned short _Builtin  __srotr(unsigned short, int);
      unsigned char  _Builtin  __crotl(unsigned char, int);
      unsigned char  _Builtin  __crotr(unsigned char, int);

      #define  _rotl( x, y )   __lrotl( (x), (y) )
      #define  _rotr( x, y )   __lrotr( (x), (y) )
      #define  _lrotl( x, y )  __lrotl( (x), (y) )
      #define  _lrotr( x, y )  __lrotr( (x), (y) )
      #define  _srotl( x, y )  __srotl( (x), (y) )
      #define  _srotr( x, y )  __srotr( (x), (y) )
      #define  _crotl( x, y )  __crotl( (x), (y) )
      #define  _crotr( x, y )  __crotr( (x), (y) )

      int   _Builtin __lxchg(volatile int *__locklocation, int __value);
      short _Builtin __sxchg(volatile short *__locklocation, short __value);
      char  _Builtin __cxchg(volatile char *__locklocation, char __value);
    #endif

   #endif

   #ifdef __cplusplus
      }
   #endif

#endif

#if (defined(__IBMC__) || defined(__IBMCPP__))
#pragma info( none )
#ifndef __CHKHDR__
   #pragma info( restore )
#endif
#pragma info( restore )
#endif
