📄 avcall.h.in
字号:
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 + -