⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avcall.h

📁 c++写的一个脚本解释器
💻 H
📖 第 1 页 / 共 4 页
字号:
	   0))#define av_double(LIST,VAL)						\  ((LIST).aptr >= __av_eptr(LIST)					\   ? -1 : (*(double*)(LIST).aptr = (double)(VAL),			\	   ((LIST).faptr < &(LIST).fargs[8] && (*(LIST).faptr = *(double*)(LIST).aptr, (LIST).faptr++)), \	   (LIST).aptr++,						\	   0))#endif#if defined(__x86_64__)/* Up to 8 leading float or double args can be passed in float registers. */#define __av_float(LIST,VAL)						\  ((LIST).faptr < &(LIST).fargs[8]					\   ? (*(LIST).faptr = 0.0, *(float*)(LIST).faptr = (float)(VAL),	\      (LIST).faptr++,							\      0)								\   : ((LIST).aptr >= __av_eptr(LIST)					\      ? -1 : ((*(float*)(LIST).aptr = (float)(VAL)),			\	      (LIST).aptr++,						\	      0)))#define av_double(LIST,VAL)						\  ((LIST).faptr < &(LIST).fargs[8]					\   ? (*(LIST).faptr = (double)(VAL),					\      (LIST).faptr++,							\      0)								\   : ((LIST).aptr >= __av_eptr(LIST)					\      ? -1 : ((*(double*)(LIST).aptr = (double)(VAL)),			\	      (LIST).aptr++,						\	      0)))#endif/* * structure argument types */#define av_struct(LIST,TYPE,VAL)					\  __av_struct(LIST,TYPE,sizeof(TYPE),__AV_alignof(TYPE),__av_struct_assign,VAL)#define __av_struct_assign(TYPE,TYPE_SIZE,TYPE_ALIGN,PLACE,VAL)		\  *(TYPE*)(PLACE) = (VAL)/* _av_struct() is like av_struct(), except that you pass the type's size and alignment * and the value's address instead of the type and the value themselves. */#define _av_struct(LIST,TYPE_SIZE,TYPE_ALIGN,VAL_ADDR)			\  __av_struct(LIST,unknown,TYPE_SIZE,TYPE_ALIGN,__av_struct_copy,VAL_ADDR)#define __av_struct_copy(TYPE,TYPE_SIZE,TYPE_ALIGN,PLACE,VAL_ADDR)	\  __structcpy(PLACE,VAL_ADDR,TYPE_SIZE,TYPE_ALIGN)/* Structure argument alignment. */#if defined(__i386__) && defined(_MSC_VER)/* In MSVC, doubles inside structures have alignment 8, i.e. * __AV_alignof(double) = 8, but doubles (and also structures containing * doubles) are passed on the stack with alignment 4. Looks really weird. */#define __av_struct_alignment(TYPE_ALIGN)  \  ((TYPE_ALIGN) <= 4 ? (TYPE_ALIGN) : 4)#else#define __av_struct_alignment(TYPE_ALIGN)  \  (TYPE_ALIGN)#endif#if defined(__i386__) || defined(__mips__) || defined(__mipsn32__) || defined(__mips64__) || defined(__alpha__) || (defined(__rs6000__) && (defined(_AIX) || (defined(__MACH__) && defined(__APPLE__)))) || defined(__m88k__) || defined(__ia64__) || defined(__s390__)/* Structures are passed as fully aligned structures on the arg stack. * We align the aptr, store the structure, then fill to word alignment. * Single-small-integer structures are NOT promoted to integers and have * different alignment. *//* little endian -> small structures < 1 word are adjusted to the left */#if defined(__i386__) || defined(__alpha__) || defined(__x86_64__)#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)		\  (((LIST).aptr =							\    (__avword*)(((__avword)(LIST).aptr+(TYPE_SIZE)+__av_struct_alignment(TYPE_ALIGN)-1) & -(long)__av_struct_alignment(TYPE_ALIGN)))\   > __av_eptr(LIST)							\   ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	   (LIST).aptr = (__avword*)(((__avword)(LIST).aptr+sizeof(__avword)-1) & -(long)sizeof(__avword)),\	   0))#endif#if defined(__ia64__)/* Types larger than a word have 2-word alignment. */#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)		\  ((LIST).aptr = (__avword*)(((__avword)(LIST).aptr+(TYPE_SIZE)+__av_struct_alignment(TYPE_ALIGN)-1) & -(long)__av_struct_alignment(TYPE_ALIGN)), \   ((TYPE_SIZE) > sizeof(__avword) && (((LIST).aptr - &(LIST).args[0]) & 1) ? ++(LIST).aptr : 0), \   ((LIST).aptr > __av_eptr(LIST)					\    ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	    (LIST).aptr = (__avword*)(((__avword)(LIST).aptr+sizeof(__avword)-1) & -(long)sizeof(__avword)),\	    0)))#endif/* small structures < 1 word are adjusted depending on compiler */#if defined(__mips__) && !defined(__mipsn32__)#define __av_struct_leftadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL) \  (((LIST).aptr =							\    (__avword*)(((__avword)(LIST).aptr+(TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN)))\   > __av_eptr(LIST)							\   ? -1 : (++(LIST).anum,						\	   ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	   (LIST).aptr = (__avword*)(((__avword)(LIST).aptr+sizeof(__avword)-1) & -(long)sizeof(__avword)),\	   0))#define __av_struct_rightadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL) \  (((LIST).aptr =							\    (__avword*)(((((__avword)(LIST).aptr+(TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN))\		 +sizeof(__avword)-1) & -(long)sizeof(__avword)))	\   > __av_eptr(LIST)							\   ? -1 : (++(LIST).anum,						\	   ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	   0))#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)		\  ((LIST).flags & __AV_SGICC_STRUCT_ARGS				\   ? /* SGI MIPS cc passes small structures left-adjusted, although big-endian! */\     __av_struct_leftadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL) \   : /* SGI MIPS gcc passes small structures within the first four words left-	  \      * adjusted, for compatibility with cc. But structures in memory are passed  \      * right-adjusted!! See gcc-2.6.3/config/mips/mips.c:function_arg().	  \      */									  \     ((LIST).aptr < &(LIST).args[4]						\      ? __av_struct_leftadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)	\      : __av_struct_rightadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)))#endif#if defined(__mipsn32__) || defined(__mips64__)/* When a structure is passed (partially) in registers, it is passed in the * integer registers, except that doubles within the structure are passed in * the floating point registers. Instead of distinguishing these cases, we * always pass the structure in both the integer and the floating point * registers. */#define __av_struct_leftadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL) \  (((LIST).aptr =							\    (__avword*)(((__avword)(LIST).aptr+(TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN)))\   > __av_eptr(LIST)							\   ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	   (LIST).aptr = (__avword*)(((__avword)(LIST).aptr+sizeof(__avword)-1) & -(long)sizeof(__avword)),\	   ((LIST).anum < 8 && ((LIST).darg_mask |= (-1 << (LIST).anum))), \	   (LIST).anum += (((((TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN)) + sizeof(__avword)-1) & -(long)sizeof(__avword))/sizeof(__avword),\	   (LIST).darg_mask &= (1 << ((LIST).anum < 8 ? (LIST).anum : 8)) - 1, \	   0))#define __av_struct_rightadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL) \  (((LIST).aptr =							\    (__avword*)(((((__avword)(LIST).aptr+(TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN))\		 +sizeof(__avword)-1) & -(long)sizeof(__avword)))	\   > __av_eptr(LIST)							\   ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	   ((LIST).anum < 8 && ((LIST).darg_mask |= (-1 << (LIST).anum))), \	   (LIST).anum += (((((TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN)) + sizeof(__avword)-1) & -(long)sizeof(__avword))/sizeof(__avword),\	   (LIST).darg_mask &= (1 << ((LIST).anum < 8 ? (LIST).anum : 8)) - 1, \	   0))#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)		\  ((LIST).flags & __AV_SGICC_STRUCT_ARGS				\   ? /* SGI MIPS cc passes small structures left-adjusted, although big-endian! */\     __av_struct_leftadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL) \   : /* SGI MIPS gcc passes small structures right-adjusted. */		\     __av_struct_rightadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL))#endif#if defined(__rs6000__)#define __av_struct_leftadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)\  (((LIST).aptr =							\    (__avword*)(((__avword)(LIST).aptr+(TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN)))\   > __av_eptr(LIST)							\   ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	   (LIST).aptr = (__avword*)(((__avword)(LIST).aptr+sizeof(__avword)-1) & -(long)sizeof(__avword)),\	   0))#define __av_struct_rightadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)\  (((LIST).aptr =							\    (__avword*)(((((__avword)(LIST).aptr+(TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN))\		 +sizeof(__avword)-1) & -(long)sizeof(__avword)))	\   > __av_eptr(LIST)							\   ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	   0))#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)		\  ((LIST).flags & __AV_AIXCC_STRUCT_ARGS				\   ? /* AIX cc and xlc pass small structures left-adjusted, although big-endian! */\     __av_struct_leftadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL) \   : /* gcc passes small structures right-adjusted. */			\     __av_struct_rightadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL))#endif#if defined(__s390__)#define __av_struct_rightadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)\  (((LIST).aptr =							\    (__avword*)(((((__avword)(LIST).aptr+(TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN))\		 +sizeof(__avword)-1) & -(long)sizeof(__avword)))	\   > __av_eptr(LIST)							\   ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	   0))#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)		\((TYPE_SIZE) != 1 && (TYPE_SIZE) != 2 && (TYPE_SIZE) != 4 && (TYPE_SIZE) != 8 \ ? (++(LIST).aptr							\    > ((LIST).eptr = (__avword*)((long)(LIST).eptr - (((TYPE_SIZE)+7)&-8)))\    ? -1 :								\    (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)(LIST).eptr,VAL),		\     (LIST).aptr[-1] = (__avword)(LIST).eptr,				\     0))								\ : (((TYPE_SIZE) == 8 && (LIST).aptr - (LIST).args - (LIST).fargwords == 4 ? ++(LIST).aptr,0 : 0), \    __av_struct_rightadjusted(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)))#endif/* big endian -> small structures < 1 word are adjusted to the right */#if defined(__m88k__)#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)		\  (((LIST).aptr =							\    (__avword*)(((((__avword)(LIST).aptr+(TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN))\		 +sizeof(__avword)-1) & -(long)sizeof(__avword)))	\   > __av_eptr(LIST)							\   ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	   0))#endif#endif#if defined(__m68k__) || defined(__arm__) || defined(__convex__)/* Structures are passed as embedded copies on the arg stack. */#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)		\  (((LIST).aptr = (__avword*)(((long)(LIST).aptr+(TYPE_SIZE)+sizeof(__avword)-1) & -(long)sizeof(__avword))) \    > __av_eptr(LIST)							\    ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	    0))#endif#if (defined(__sparc__) && !defined(__sparc64__)) || (defined(__rs6000__) && !(defined(_AIX) || (defined(__MACH__) && defined(__APPLE__))))/* Structures are passed as pointers to caller-made local copies. We * grab space for the copies from the end of the argument list space * and always use maximal (double) alignment. */#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)		\   (++(LIST).aptr							\    > ((LIST).eptr = (__avword*)((long)(LIST).eptr - (((TYPE_SIZE)+7)&-8)))\    ? -1 :								\    (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)(LIST).eptr,VAL),		\     (LIST).aptr[-1] = (__avword)(LIST).eptr,				\     0))#endif#if defined(__sparc64__)/* Structures <= 16 bytes are passed as embedded copies on the arg stack, * left-adjusted (although big-endian!). * When a structure is passed (partially) in registers, it is passed in the * integer registers, except that floats and doubles within the structure * are passed in the floating point registers. Instead of distinguishing * these cases, we always pass the structure in both the integer and the * floating point registers. * Big structures are passed as pointers to caller-made local copies. * FIXME: Shouldn't (LIST).anum be incremented in sync with (LIST).aptr ? */#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)		\  ((TYPE_SIZE) > 16							\   ? (++(LIST).aptr							\      > ((LIST).eptr = (__avword*)((long)(LIST).eptr - (((TYPE_SIZE)+7)&-8)))\      ? -1 :								\      (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)(LIST).eptr,VAL),	\       (LIST).aptr[-1] = (__avword)(LIST).eptr,				\       0))								\   : (((LIST).aptr =							\       (__avword*)(((__avword)(LIST).aptr+(TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN)))\      > __av_eptr(LIST)							\      ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr-(TYPE_SIZE)),VAL),\	      (LIST).aptr = (__avword*)(((__avword)(LIST).aptr+sizeof(__avword)-1) & -(long)sizeof(__avword)),\	      ((LIST).anum < 16						\		&& ((LIST).farg_mask |= (-1 << (LIST).anum),		\		    (LIST).darg_mask |= (-1 << (LIST).anum))),		\	      (LIST).anum += (((((TYPE_SIZE)+(TYPE_ALIGN)-1) & -(long)(TYPE_ALIGN)) + sizeof(__avword)-1) & -(long)sizeof(__avword))/sizeof(__avword),\	      (LIST).farg_mask &= (1 << ((LIST).anum < 16 ? (LIST).anum : 16)) - 1, \	      (LIST).darg_mask &= (1 << ((LIST).anum < 16 ? (LIST).anum : 16)) - 1, \	      0)))#endif#if defined(__hppa__)/* Structures <= 8 bytes are passed as embedded copies on the arg stack. * Big structures are passed as pointers to caller-made local copies. */#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)			\  ((TYPE_SIZE) > 8								\   ? (--(LIST).aptr								\      < ((LIST).eptr = (__avword*)((long)(LIST).eptr + (((TYPE_SIZE) + 7) & -8))) \      ? -1									\      : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((long)(LIST).eptr - (((TYPE_SIZE) + 7) & -8)), VAL), \	 *(LIST).aptr = (__avword)((long)(LIST).eptr - (((TYPE_SIZE) + 7) & -8)), \	 0))									\   : ((TYPE_SIZE) > 4								\      ? (((LIST).aptr = (__avword*)((((long)(LIST).aptr & -8) - (long)(TYPE_SIZE)) & -8)) \	  < &(LIST).args[0]							\	  ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)(LIST).aptr,VAL), 0))	\      : /* FIXME: gcc-2.6.3 passes structures <= 4 bytes in memory left-adjusted! ?? */\        (((LIST).aptr = (__avword*)(((long)(LIST).aptr & -4) - (long)(TYPE_SIZE))) \	  < &(LIST).args[0]							\	  ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)(LIST).aptr,VAL),	\		  (LIST).aptr = (__avword*)((long)(LIST).aptr & -4),		\		  0))))#endif#if defined(__x86_64__)/* Structures <= 16 bytes can be passed in integer or floating-point registers   if there is enough room for the whole number of words needed by the structure   in the corresponding iargs/fargs block. We can't distinguish the two cases   and support only passing in integer registers. Other structures are passed   on the arg stack. */#define __av_struct(LIST,TYPE,TYPE_SIZE,TYPE_ALIGN,ASSIGN,VAL)			\  ((LIST).iaptr + ((TYPE_SIZE) + sizeof(__avword)-1) / sizeof(__avword) <= &(LIST).iargs[6] \   ? (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)(LIST).iaptr,VAL),		\      (LIST).iaptr += ((TYPE_SIZE) + sizeof(__avword)-1) / sizeof(__avword),	\      0)									\   : ((LIST).aptr = (__avword*)((__avword)(LIST).aptr + (((TYPE_SIZE)+__av_struct_alignment(TYPE_ALIGN)-1) & -(long)__av_struct_alignment(TYPE_ALIGN))), \      ((LIST).aptr > __av_eptr(LIST)						\       ? -1 : (ASSIGN(TYPE,TYPE_SIZE,TYPE_ALIGN,(void*)((__avword)(LIST).aptr - (((TYPE_SIZE)+__av_struct_alignment(TYPE_ALIGN)-1) & -(long)__av_struct_alignment(TYPE_ALIGN))),VAL),\	       0))))#endif/* * calling the function */#define av_call(LIST) __builtin_avcall(&(LIST))/* Determine whether a struct type is word-splittable, i.e. whether each of * its components fit into a register. * The entire computation is done at compile time. */#define av_word_splittable_1(slot1)  \  (__av_offset1(slot1)/sizeof(__avword) == (__av_offset1(slot1)+sizeof(slot1)-1)/sizeof(__avword))#define av_word_splittable_2(slot1,slot2)  \  ((__av_offset1(slot1)/sizeof(__avword) == (__av_offset1(slot1)+sizeof(slot1)-1)/sizeof(__avword)) \   && (__av_offset2(slot1,slot2)/sizeof(__avword) == (__av_offset2(slot1,slot2)+sizeof(slot2)-1)/sizeof(__avword)) \  )#define av_word_splittable_3(slot1,slot2,slot3)  \  ((__av_offset1(slot1)/sizeof(__avword) == (__av_offset1(slot1)+sizeof(slot1)-1)/sizeof(__avword)) \   && (__av_offset2(slot1,slot2)/sizeof(__avword) == (__av_offset2(slot1,slot2)+sizeof(slot2)-1)/sizeof(__avword)) \   && (__av_offset3(slot1,slot2,slot3)/sizeof(__avword) == (__av_offset3(slot1,slot2,slot3)+sizeof(slot3)-1)/sizeof(__avword)) \  )#define av_word_splittable_4(slot1,slot2,slot3,slot4)  \  ((__av_offset1(slot1)/sizeof(__avword) == (__av_offset1(slot1)+sizeof(slot1)-1)/sizeof(__avword)) \   && (__av_offset2(slot1,slot2)/sizeof(__avword) == (__av_offset2(slot1,slot2)+sizeof(slot2)-1)/sizeof(__avword)) \   && (__av_offset3(slot1,slot2,slot3)/sizeof(__avword) == (__av_offset3(slot1,slot2,slot3)+sizeof(slot3)-1)/sizeof(__avword)) \   && (__av_offset4(slot1,slot2,slot3,slot4)/sizeof(__avword) == (__av_offset4(slot1,slot2,slot3,slot4)+sizeof(slot4)-1)/sizeof(__avword)) \  )#define __av_offset1(slot1)  \  0#define __av_offset2(slot1,slot2)  \  ((__av_offset1(slot1)+sizeof(slot1)+__AV_alignof(slot2)-1) & -(long)__AV_alignof(slot2))#define __av_offset3(slot1,slot2,slot3)  \  ((__av_offset2(slot1,slot2)+sizeof(slot2)+__AV_alignof(slot3)-1) & -(long)__AV_alignof(slot3))#define __av_offset4(slot1,slot2,slot3,slot4)  \  ((__av_offset3(slot1,slot2,slot3)+sizeof(slot3)+__AV_alignof(slot4)-1) & -(long)__AV_alignof(slot4))/* * Miscellaneous declarations. */#if defined(__STDC__) || defined(__GNUC__) || defined(__cplusplus)extern int __builtin_avcall (av_alist* l);extern void __structcpy (void* dest, void* src, unsigned long size, unsigned long alignment);#elseextern int __builtin_avcall ();extern void __structcpy ();#endif#endif /*_avcall_h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -