ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
abc_global.h File Reference
#include <time.h>
#include <stdarg.h>
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include "abc_namespaces.h"
Include dependency graph for abc_global.h:

Go to the source code of this file.

Macros

#define ABC_USE_BRIDGE
 INCLUDES ///.
 
#define ABC_DLLIMPORT
 
#define ABC_DLL   ABC_DLLIMPORT
 
#define ___unused
 
#define ABC_CONST(number)
 PARAMETERS ///.
 
#define ABC_INFINITY   (1000000000)
 MACRO DEFINITIONS ///.
 
#define ABC_INT_MAX   (2147483647)
 
#define ABC_SWAP(Type, a, b)
 
#define ABC_PRT(a, t)
 
#define ABC_PRTr(a, t)
 
#define ABC_PRTn(a, t)
 
#define ABC_PRTP(a, t, T)
 
#define ABC_PRM(a, f)
 
#define ABC_PRMr(a, f)
 
#define ABC_PRMn(a, f)
 
#define ABC_PRMP(a, f, F)
 
#define ABC_ALLOC(type, num)
 
#define ABC_CALLOC(type, num)
 
#define ABC_FALLOC(type, num)
 
#define ABC_FREE(obj)
 
#define ABC_REALLOC(type, obj, num)
 
#define APPLE_MACH   0
 
#define APPLE_MACH   0
 
#define BRIDGE_NETLIST   106
 
#define BRIDGE_ABS_NETLIST   107
 

Typedefs

typedef ABC_UINT64_T word
 
typedef ABC_INT64_T iword
 
typedef ABC_INT64_T abctime
 

Enumerations

enum  Abc_VerbLevel {
  ABC_PROMPT = -2 , ABC_ERROR = -1 , ABC_WARNING = 0 , ABC_STANDARD = 1 ,
  ABC_VERBOSE = 2
}
 

Functions

int Gia_ManToBridgeText (FILE *pFile, int Size, unsigned char *pBuffer)
 
int Gia_ManToBridgeAbsNetlist (FILE *pFile, void *p, int pkg_type)
 
char * vnsprintf (const char *format, va_list args)
 
char * nsprintf (const char *format,...)
 
void Abc_MergeSort (int *pInput, int nSize)
 
int * Abc_MergeSortCost (int *pCosts, int nSize)
 
void Abc_MergeSortCost2 (int *pInput, int nSize, int *pCost)
 
void Abc_MergeSortCost2Reverse (int *pInput, int nSize, int *pCost)
 
void Abc_QuickSort1 (word *pData, int nSize, int fDecrease)
 
void Abc_QuickSort2 (word *pData, int nSize, int fDecrease)
 
void Abc_QuickSort3 (word *pData, int nSize, int fDecrease)
 
void Abc_QuickSortCostData (int *pCosts, int nSize, int fDecrease, word *pData, int *pResult)
 
int * Abc_QuickSortCost (int *pCosts, int nSize, int fDecrease)
 
unsigned Abc_Random (int fReset)
 
word Abc_RandomW (int fReset)
 
void Util_ProcessThreads (int(*pUserFunc)(void *), void *vData, int nProcs, int TimeOut, int fVerbose)
 DECLARATIONS ///.
 

Macro Definition Documentation

◆ ___unused

#define ___unused

Definition at line 64 of file abc_global.h.

◆ ABC_ALLOC

#define ABC_ALLOC ( type,
num )
Value:
((type *) malloc(sizeof(type) * (size_t)(num)))
type
CUBE COVER and CUBE typedefs ///.
Definition exor.h:90
char * malloc()

Definition at line 264 of file abc_global.h.

◆ ABC_CALLOC

#define ABC_CALLOC ( type,
num )
Value:
((type *) calloc((size_t)(num), sizeof(type)))
char * calloc()

Definition at line 265 of file abc_global.h.

◆ ABC_CONST

#define ABC_CONST ( number)
Value:
number

PARAMETERS ///.

BASIC TYPES /// Pointer difference type; replacement for ptrdiff_t. This is a signed integral type that is the same size as a pointer. NOTE: This type may be different sizes on different platforms. Unsigned integral type that can contain a pointer. This is an unsigned integral type that is the same size as a pointer. NOTE: This type may be different sizes on different platforms. Signed integral type that can contain a pointer. This is a signed integral type that is the same size as a pointer. NOTE: This type may be different sizes on different platforms. 64-bit signed integral type. 64-bit unsigned integral type.

Definition at line 240 of file abc_global.h.

◆ ABC_DLL

#define ABC_DLL   ABC_DLLIMPORT

Definition at line 57 of file abc_global.h.

◆ ABC_DLLIMPORT

#define ABC_DLLIMPORT

Definition at line 53 of file abc_global.h.

◆ ABC_FALLOC

#define ABC_FALLOC ( type,
num )
Value:
((type *) memset(malloc(sizeof(type) * (size_t)(num)), 0xff, sizeof(type) * (size_t)(num)))
char * memset()

Definition at line 266 of file abc_global.h.

◆ ABC_FREE

#define ABC_FREE ( obj)
Value:
((obj) ? (free((char *) (obj)), (obj) = 0) : 0)
VOID_HACK free()

Definition at line 267 of file abc_global.h.

◆ ABC_INFINITY

#define ABC_INFINITY   (1000000000)

MACRO DEFINITIONS ///.

Definition at line 250 of file abc_global.h.

◆ ABC_INT_MAX

#define ABC_INT_MAX   (2147483647)

Definition at line 251 of file abc_global.h.

◆ ABC_PRM

#define ABC_PRM ( a,
f )
Value:
(Abc_Print(1, "%s =", (a)), Abc_Print(1, "%10.3f MB\n", 1.0*((double)(f))/(1<<20)))

Definition at line 259 of file abc_global.h.

◆ ABC_PRMn

#define ABC_PRMn ( a,
f )
Value:
(Abc_Print(1, "%s =", (a)), Abc_Print(1, "%10.3f MB ", 1.0*((double)(f))/(1<<20)))

Definition at line 261 of file abc_global.h.

◆ ABC_PRMP

#define ABC_PRMP ( a,
f,
F )
Value:
(Abc_Print(1, "%s =", (a)), Abc_Print(1, "%10.3f MB (%6.2f %%)\n", (1.0*((double)(f))/(1<<20)), (((double)(F))? 100.0*((double)(f))/((double)(F)) : 0.0) ) )

Definition at line 262 of file abc_global.h.

◆ ABC_PRMr

#define ABC_PRMr ( a,
f )
Value:
(Abc_Print(1, "%s =", (a)), Abc_Print(1, "%10.3f MB\r", 1.0*((double)(f))/(1<<20)))

Definition at line 260 of file abc_global.h.

◆ ABC_PRT

#define ABC_PRT ( a,
t )
Value:
(Abc_Print(1, "%s =", (a)), Abc_Print(1, "%9.2f sec\n", 1.0*((double)(t))/((double)CLOCKS_PER_SEC)))

Definition at line 255 of file abc_global.h.

◆ ABC_PRTn

#define ABC_PRTn ( a,
t )
Value:
(Abc_Print(1, "%s =", (a)), Abc_Print(1, "%9.2f sec ", 1.0*((double)(t))/((double)CLOCKS_PER_SEC)))

Definition at line 257 of file abc_global.h.

◆ ABC_PRTP

#define ABC_PRTP ( a,
t,
T )
Value:
(Abc_Print(1, "%s =", (a)), Abc_Print(1, "%9.2f sec (%6.2f %%)\n", 1.0*((double)(t))/((double)CLOCKS_PER_SEC), ((double)(T))? 100.0*((double)(t))/((double)(T)) : 0.0))

Definition at line 258 of file abc_global.h.

◆ ABC_PRTr

#define ABC_PRTr ( a,
t )
Value:
(Abc_Print(1, "%s =", (a)), Abc_Print(1, "%9.2f sec\r", 1.0*((double)(t))/((double)CLOCKS_PER_SEC)))

Definition at line 256 of file abc_global.h.

◆ ABC_REALLOC

#define ABC_REALLOC ( type,
obj,
num )
Value:
((obj) ? ((type *) realloc((char *)(obj), sizeof(type) * (size_t)(num))) : \
((type *) malloc(sizeof(type) * (size_t)(num))))
char * realloc()

Definition at line 268 of file abc_global.h.

268#define ABC_REALLOC(type, obj, num) \
269 ((obj) ? ((type *) realloc((char *)(obj), sizeof(type) * (size_t)(num))) : \
270 ((type *) malloc(sizeof(type) * (size_t)(num))))

◆ ABC_SWAP

#define ABC_SWAP ( Type,
a,
b )
Value:
{ Type t = a; a = b; b = t; }

Definition at line 253 of file abc_global.h.

◆ ABC_USE_BRIDGE

#define ABC_USE_BRIDGE

INCLUDES ///.

CFile****************************************************************

FileName [abc_global.h]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Global declarations.]

Synopsis [Global declarations.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - Jan 30, 2009.]

Revision [

Id
abc_global.h,v 1.00 2009/01/30 00:00:00 alanmi Exp

]

Definition at line 29 of file abc_global.h.

◆ APPLE_MACH [1/2]

#define APPLE_MACH   0

◆ APPLE_MACH [2/2]

#define APPLE_MACH   0

◆ BRIDGE_ABS_NETLIST

#define BRIDGE_ABS_NETLIST   107

Definition at line 387 of file abc_global.h.

◆ BRIDGE_NETLIST

#define BRIDGE_NETLIST   106

Definition at line 386 of file abc_global.h.

Typedef Documentation

◆ abctime

typedef ABC_INT64_T abctime

Definition at line 332 of file abc_global.h.

◆ iword

typedef ABC_INT64_T iword

Definition at line 244 of file abc_global.h.

◆ word

typedef ABC_UINT64_T word

Definition at line 243 of file abc_global.h.

Enumeration Type Documentation

◆ Abc_VerbLevel

Enumerator
ABC_PROMPT 
ABC_ERROR 
ABC_WARNING 
ABC_STANDARD 
ABC_VERBOSE 

Definition at line 373 of file abc_global.h.

374{
375 ABC_PROMPT = -2,
376 ABC_ERROR = -1,
377 ABC_WARNING = 0,
378 ABC_STANDARD = 1,
379 ABC_VERBOSE = 2
380};
@ ABC_ERROR
Definition abc_global.h:376
@ ABC_VERBOSE
Definition abc_global.h:379
@ ABC_STANDARD
Definition abc_global.h:378
@ ABC_PROMPT
Definition abc_global.h:375
@ ABC_WARNING
Definition abc_global.h:377

Function Documentation

◆ Abc_MergeSort()

void Abc_MergeSort ( int * pInput,
int nSize )
extern

Function*************************************************************

Synopsis [Returns the sorted array of integers.]

Description [This procedure is about 10% faster than qsort().]

SideEffects []

SeeAlso []

Definition at line 129 of file utilSort.c.

130{
131 int * pOutput;
132 if ( nSize < 2 )
133 return;
134 pOutput = (int *) malloc( sizeof(int) * nSize );
135 Abc_Sort_rec( pInput, pInput + nSize, pOutput );
136 free( pOutput );
137}
void Abc_Sort_rec(int *pInBeg, int *pInEnd, int *pOutBeg)
Definition utilSort.c:80
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Abc_MergeSortCost()

int * Abc_MergeSortCost ( int * pCosts,
int nSize )
extern

Function*************************************************************

Synopsis [Sorting procedure.]

Description [Returns permutation for the non-decreasing order of costs.]

SideEffects []

SeeAlso []

Definition at line 442 of file utilSort.c.

443{
444 int i, * pResult, * pInput, * pOutput;
445 pResult = (int *) calloc( sizeof(int), nSize );
446 if ( nSize < 2 )
447 return pResult;
448 pInput = (int *) malloc( sizeof(int) * 2 * nSize );
449 pOutput = (int *) malloc( sizeof(int) * 2 * nSize );
450 for ( i = 0; i < nSize; i++ )
451 pInput[2*i] = i, pInput[2*i+1] = pCosts[i];
452 Abc_MergeSortCost_rec( pInput, pInput + 2*nSize, pOutput );
453 for ( i = 0; i < nSize; i++ )
454 pResult[i] = pInput[2*i];
455 free( pOutput );
456 free( pInput );
457 return pResult;
458}
void Abc_MergeSortCost_rec(int *pInBeg, int *pInEnd, int *pOutBeg)
Definition utilSort.c:387
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Abc_MergeSortCost2()

void Abc_MergeSortCost2 ( int * pInput,
int nSize,
int * pCost )
extern

Function*************************************************************

Synopsis [Returns the sorted array of integers.]

Description [This procedure is about 10% faster than qsort().]

SideEffects []

SeeAlso []

Definition at line 231 of file utilSort.c.

232{
233 int * pOutput;
234 if ( nSize < 2 )
235 return;
236 pOutput = (int *) malloc( sizeof(int) * nSize );
237 Abc_SortCost2_rec( pInput, pInput + nSize, pOutput, pCost );
238 free( pOutput );
239}
void Abc_SortCost2_rec(int *pInBeg, int *pInEnd, int *pOutBeg, int *pCost)
Definition utilSort.c:182
Here is the call graph for this function:

◆ Abc_MergeSortCost2Reverse()

void Abc_MergeSortCost2Reverse ( int * pInput,
int nSize,
int * pCost )
extern

Function*************************************************************

Synopsis [Returns the sorted array of integers.]

Description [This procedure is about 10% faster than qsort().]

SideEffects []

SeeAlso []

Definition at line 333 of file utilSort.c.

334{
335 int * pOutput;
336 if ( nSize < 2 )
337 return;
338 pOutput = (int *) malloc( sizeof(int) * nSize );
339 Abc_SortCost2Reverse_rec( pInput, pInput + nSize, pOutput, pCost );
340 free( pOutput );
341}
void Abc_SortCost2Reverse_rec(int *pInBeg, int *pInEnd, int *pOutBeg, int *pCost)
Definition utilSort.c:284
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Abc_QuickSort1()

void Abc_QuickSort1 ( word * pData,
int nSize,
int fDecrease )
extern

Definition at line 681 of file utilSort.c.

682{
683 int i, fVerify = 0;
684 if ( fDecrease )
685 {
686 qsort( (void *)pData, (size_t)nSize, sizeof(word), (int (*)(const void *, const void *))Abc_QuickSort1CompareDec );
687 if ( fVerify )
688 for ( i = 1; i < nSize; i++ )
689 assert( (unsigned)pData[i-1] >= (unsigned)pData[i] );
690 }
691 else
692 {
693 qsort( (void *)pData, (size_t)nSize, sizeof(word), (int (*)(const void *, const void *))Abc_QuickSort1CompareInc );
694 if ( fVerify )
695 for ( i = 1; i < nSize; i++ )
696 assert( (unsigned)pData[i-1] <= (unsigned)pData[i] );
697 }
698}
unsigned __int64 word
DECLARATIONS ///.
Definition kitPerm.c:36
int Abc_QuickSort1CompareDec(word *p1, word *p2)
Definition utilSort.c:673
int Abc_QuickSort1CompareInc(word *p1, word *p2)
Definition utilSort.c:665
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Abc_QuickSort2()

void Abc_QuickSort2 ( word * pData,
int nSize,
int fDecrease )
extern

Definition at line 866 of file utilSort.c.

867{
868 int i, fVerify = 0;
869 if ( fDecrease )
870 {
871 Abc_QuickSort2Dec_rec( pData, 0, nSize - 1 );
872 if ( fVerify )
873 for ( i = 1; i < nSize; i++ )
874 assert( (unsigned)pData[i-1] >= (unsigned)pData[i] );
875 }
876 else
877 {
878 Abc_QuickSort2Inc_rec( pData, 0, nSize - 1 );
879 if ( fVerify )
880 for ( i = 1; i < nSize; i++ )
881 assert( (unsigned)pData[i-1] <= (unsigned)pData[i] );
882 }
883}
void Abc_QuickSort2Dec_rec(word *pData, int l, int r)
Definition utilSort.c:768
void Abc_QuickSort2Inc_rec(word *pData, int l, int r)
Definition utilSort.c:742
Here is the call graph for this function:

◆ Abc_QuickSort3()

void Abc_QuickSort3 ( word * pData,
int nSize,
int fDecrease )
extern

Definition at line 884 of file utilSort.c.

885{
886 int i, fVerify = 1;
887 if ( fDecrease )
888 {
889 Abc_QuickSort2Dec_rec( pData, 0, nSize - 1 );
890 if ( fVerify )
891 for ( i = 1; i < nSize; i++ )
892 assert( (unsigned)pData[i-1] >= (unsigned)pData[i] );
893 }
894 else
895 {
896 Abc_QuickSort2Inc_rec( pData, 0, nSize - 1 );
897 if ( fVerify )
898 for ( i = 1; i < nSize; i++ )
899 assert( (unsigned)pData[i-1] <= (unsigned)pData[i] );
900 }
901}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Abc_QuickSortCost()

int * Abc_QuickSortCost ( int * pCosts,
int nSize,
int fDecrease )
extern

Definition at line 923 of file utilSort.c.

924{
925 word * pData = ABC_ALLOC( word, nSize );
926 int * pResult = ABC_ALLOC( int, nSize );
927 Abc_QuickSortCostData( pCosts, nSize, fDecrease, pData, pResult );
928 ABC_FREE( pData );
929 return pResult;
930}
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
#define ABC_FREE(obj)
Definition abc_global.h:267
void Abc_QuickSortCostData(int *pCosts, int nSize, int fDecrease, word *pData, int *pResult)
Definition utilSort.c:914
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Abc_QuickSortCostData()

void Abc_QuickSortCostData ( int * pCosts,
int nSize,
int fDecrease,
word * pData,
int * pResult )
extern

Function*************************************************************

Synopsis [Wrapper around QuickSort to sort entries based on cost.]

Description []

SideEffects []

SeeAlso []

Definition at line 914 of file utilSort.c.

915{
916 int i;
917 for ( i = 0; i < nSize; i++ )
918 pData[i] = ((word)i << 32) | pCosts[i];
919 Abc_QuickSort3( pData, nSize, fDecrease );
920 for ( i = 0; i < nSize; i++ )
921 pResult[i] = (int)(pData[i] >> 32);
922}
void Abc_QuickSort3(word *pData, int nSize, int fDecrease)
Definition utilSort.c:884
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Abc_Random()

unsigned Abc_Random ( int fReset)
extern

Definition at line 1004 of file utilSort.c.

1005{
1006#ifdef _MSC_VER
1007 static unsigned int m_z = NUMBER1;
1008 static unsigned int m_w = NUMBER2;
1009#else
1010 static __thread unsigned int m_z = NUMBER1;
1011 static __thread unsigned int m_w = NUMBER2;
1012#endif
1013 if ( fReset )
1014 {
1015 m_z = NUMBER1;
1016 m_w = NUMBER2;
1017 }
1018 m_z = 36969 * (m_z & 65535) + (m_z >> 16);
1019 m_w = 18000 * (m_w & 65535) + (m_w >> 16);
1020 return (m_z << 16) + m_w;
1021}
#define NUMBER2
Definition aigUtil.c:1157
#define NUMBER1
Definition aigUtil.c:1156

◆ Abc_RandomW()

word Abc_RandomW ( int fReset)
extern

Definition at line 1022 of file utilSort.c.

1023{
1024 return ((word)Abc_Random(fReset) << 32) | ((word)Abc_Random(fReset) << 0);
1025}
unsigned Abc_Random(int fReset)
Definition utilSort.c:1004
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManToBridgeAbsNetlist()

int Gia_ManToBridgeAbsNetlist ( FILE * pFile,
void * p,
int pkg_type )
extern

Definition at line 192 of file utilBridge.c.

193{
194 Vec_Str_t * vBuffer;
195 vBuffer = Gia_ManToBridgeVec( (Gia_Man_t *)p );
196 Gia_CreateHeader( pFile, pkg_type, Vec_StrSize(vBuffer), (unsigned char *)Vec_StrArray(vBuffer) );
197 Vec_StrFree( vBuffer );
198 return 1;
199}
struct Vec_Str_t_ Vec_Str_t
Definition bblif.c:46
Cube * p
Definition exorList.c:222
struct Gia_Man_t_ Gia_Man_t
Definition gia.h:96
void Gia_CreateHeader(FILE *pFile, int Type, int Size, unsigned char *pBuffer)
Definition utilBridge.c:130
Vec_Str_t * Gia_ManToBridgeVec(Gia_Man_t *p)
FUNCTION DEFINITIONS ///.
Definition utilBridge.c:69
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Gia_ManToBridgeText()

int Gia_ManToBridgeText ( FILE * pFile,
int Size,
unsigned char * pBuffer )
extern

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 171 of file utilBridge.c.

172{
173 Gia_CreateHeader( pFile, BRIDGE_TEXT_MESSAGE, Size, pBuffer );
174 return 1;
175}
#define BRIDGE_TEXT_MESSAGE
DECLARATIONS ///.
Definition utilBridge.c:40
Here is the call graph for this function:

◆ nsprintf()

char * nsprintf ( const char * format,
... )
extern

Definition at line 233 of file utilFile.c.

234{
235 char* ret;
236 va_list args;
237 va_start(args, format);
238 ret = vnsprintf(format, args);
239 va_end(args);
240 return ret;
241}
char * vnsprintf(const char *format, va_list args)
Definition utilFile.c:196
Here is the call graph for this function:

◆ Util_ProcessThreads()

void Util_ProcessThreads ( int(* pUserFunc )(void *),
void * vData,
int nProcs,
int TimeOut,
int fVerbose )
extern

DECLARATIONS ///.

CFile****************************************************************

FileName [utilPth.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Generic interface to pthreads.]

Synopsis [Generic interface to pthreads.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - August 3, 2024.]

Revision [

Id
utilPth.c,v 1.00 2024/08/03 00:00:00 alanmi Exp

] FUNCTION DEFINITIONS /// Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 70 of file utilPth.c.

71{
72 void * pData; int i;
73 Vec_PtrForEachEntry( void *, (Vec_Ptr_t *)vData, pData, i )
74 pUserFunc( pData );
75}
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Definition vecPtr.h:55
Here is the caller graph for this function:

◆ vnsprintf()

char * vnsprintf ( const char * format,
va_list args )
extern

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso [] Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 196 of file utilFile.c.

197{
198 unsigned n;
199 char* ret;
200 va_list args_copy;
201
202 static FILE* dummy_file = NULL;
203 if (!dummy_file)
204 {
205#if !defined(_MSC_VER) && !defined(__MINGW32)
206 dummy_file = fopen("/dev/null", "wb");
207#else
208 dummy_file = fopen("NUL", "wb");
209#endif
210 }
211
212#if defined(__va_copy)
213 __va_copy(args_copy, args);
214#else
215 #if defined(va_copy)
216 va_copy(args_copy, args);
217 #else
218 args_copy = args;
219 #endif
220#endif
221 n = vfprintf(dummy_file, format, args);
222 ret = ABC_ALLOC( char, n + 1 );
223 ret[n] = (char)255;
224 args = args_copy;
225 vsprintf(ret, format, args);
226#if !defined(__va_copy) && defined(va_copy)
227 va_end(args_copy);
228#endif
229 assert(ret[n] == 0);
230 return ret;
231}
Here is the caller graph for this function: