This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/alloca.h

116 lines
3.2 KiB
C++

/*
* alloca.h Dynamic stack storage allocation
*
* =========================================================================
*
* Open Watcom Project
*
* Copyright (c) 2002-2010 Open Watcom Contributors. All Rights Reserved.
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
* This file is automatically generated. Do not edit directly.
*
* =========================================================================
*/
#ifndef _STRINGS_H_INCLUDED
#define _STRINGS_H_INCLUDED
#ifndef _ENABLE_AUTODEPEND
#pragma read_only_file;
#endif
#ifndef _COMDEF_H_INCLUDED
#include <_comdef.h>
#endif
#ifdef __cplusplus
#ifndef _STDSIZE_T_DEFINED
#define _STDSIZE_T_DEFINED
namespace std {
typedef unsigned size_t;
}
typedef std::size_t _w_size_t;
#endif
#ifndef _SIZE_T_DEFINED
#define _SIZE_T_DEFINED
#define _SIZE_T_DEFINED_
using std::size_t;
#endif
#else /* __cplusplus not defined */
#ifndef _SIZE_T_DEFINED
#define _SIZE_T_DEFINED
#define _SIZE_T_DEFINED_
typedef unsigned size_t;
typedef size_t _w_size_t;
#endif
#endif /* __cplusplus not defined */
#ifndef NULL
#ifdef __cplusplus
#if !defined(_M_I86) || defined(__SMALL__) || defined(__MEDIUM__)
#define NULL 0
#else
#define NULL 0L
#endif
#else
#define NULL ((void *)0)
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef alloca
_WCRTLINK extern void *alloca(_w_size_t __size);
_WCRTLINK extern void *_alloca(_w_size_t __size);
_WCRTLINK extern unsigned stackavail( void );
#ifdef _M_IX86
extern void *__doalloca(_w_size_t __size);
#pragma aux stackavail __modify __nomemory;
#define __ALLOCA_ALIGN( s ) (((s)+(sizeof(int)-1))&~(sizeof(int)-1))
#define __alloca( s ) __doalloca(__ALLOCA_ALIGN(s))
#ifdef __386__
extern void __GRO(_w_size_t __size);
#pragma aux __GRO "*" __parm __routine [];
#define alloca( s ) ((__ALLOCA_ALIGN(s)<stackavail())?(__GRO(__ALLOCA_ALIGN(s)),__alloca(s)):NULL)
#define _alloca( s ) ((__ALLOCA_ALIGN(s)<stackavail())?(__GRO(__ALLOCA_ALIGN(s)),__alloca(s)):NULL)
#else
#define alloca( s ) ((__ALLOCA_ALIGN(s)<stackavail())?__alloca(s):NULL)
#define _alloca( s ) ((__ALLOCA_ALIGN(s)<stackavail())?__alloca(s):NULL)
#endif
#if defined(__386__)
#pragma aux __doalloca = \
"sub esp,eax" \
__parm __nomemory [__eax] __value [__esp] __modify __exact __nomemory [__esp];
#elif defined(__SMALL__) || defined(__MEDIUM__) /* small data models */
#pragma aux __doalloca = \
"sub sp,ax" \
__parm __nomemory [__ax] __value [__sp] __modify __exact __nomemory [__sp];
#else /* large data models */
#pragma aux __doalloca = \
"sub sp,ax" \
"mov ax,sp" \
"mov dx,ss" \
__parm __nomemory [__ax] __value [__dx __ax] __modify __exact __nomemory [__dx __ax __sp];
#endif
#else
extern void *__builtin_alloca(_w_size_t __size);
#pragma intrinsic(__builtin_alloca);
#define __alloca( s ) (__builtin_alloca(s))
#define alloca( s ) ((s<stackavail())?__alloca(s):NULL)
#define _alloca( s ) ((s<stackavail())?__alloca(s):NULL)
#endif
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif