mframe.foot
上传用户:shenzhenrh
上传日期:2013-05-12
资源大小:2904k
文件大小:2k
- inline static void*
- mframe_arg_addr(arglist_t argf, NSArgumentInfo *info)
- {
- int offset = info->offset;
- #if WORDS_BIGENDIAN
- if (info->size < sizeof (int))
- {
- offset += sizeof(int) - info->size;
- }
- #endif
- if (info->isReg)
- {
- return(argf->arg_regs + offset);
- }
- else
- {
- return(argf->arg_ptr + offset);
- }
- }
- inline static void
- mframe_get_arg(arglist_t argf, NSArgumentInfo *info, void* buffer)
- {
- #if MFRAME_STRUCT_BYREF || MFRAME_FLT_IN_FRAME_AS_DBL
- const char *typ = info->type;
- #endif
- #if MFRAME_STRUCT_BYREF
- /*
- * If structures are passed in the stack frame by reference - we need
- * to copy the actual structure, rather than it's pointer.
- */
- if (*typ == _C_STRUCT_B || *typ == _C_UNION_B || *typ == _C_ARY_B)
- {
- memcpy(buffer, *(void**)mframe_arg_addr(argf, info), info->size);
- }
- else
- #endif
- #if MFRAME_FLT_IN_FRAME_AS_DBL
- if (*typ == _C_FLT)
- {
- *(float*)buffer = (float)*(double*)mframe_arg_addr(argf, info);
- }
- else
- #endif
- memcpy(buffer, mframe_arg_addr(argf, info), info->size);
- }
- inline static void
- mframe_set_arg(arglist_t argf, NSArgumentInfo *info, void* buffer)
- {
- #if MFRAME_STRUCT_BYREF || MFRAME_FLT_IN_FRAME_AS_DBL
- const char *typ = info->type;
- #endif
- #if MFRAME_STRUCT_BYREF
- /*
- * If structures are passed in the stack frame by reference - we need
- * to copy a pointer onto the stack rather than the actual structure.
- */
- if (*typ == _C_STRUCT_B || *typ == _C_UNION_B || *typ == _C_ARY_B)
- {
- memcpy(mframe_arg_addr(argf, info), &buffer, sizeof(void*));
- }
- else
- #endif
- #if MFRAME_FLT_IN_FRAME_AS_DBL
- if (*typ == _C_FLT)
- {
- *(double*)mframe_arg_addr(argf, info) = *(float*)buffer;
- }
- else
- #endif
- memcpy(mframe_arg_addr(argf, info), buffer, info->size);
- }
- inline static void
- mframe_cpy_arg(arglist_t dst, arglist_t src, NSArgumentInfo *info)
- {
- #if MFRAME_STRUCT_BYREF
- const char *typ = info->type;
- /*
- * If structures are passed in the stack frame by reference - we need
- * to copy a pointer onto the stack rather than the actual structure.
- */
- if (*typ == _C_STRUCT_B || *typ == _C_UNION_B || *typ == _C_ARY_B)
- {
- memcpy(mframe_arg_addr(dst, info), mframe_arg_addr(src, info), sizeof(void*));
- }
- else
- #endif
- memcpy(mframe_arg_addr(dst, info), mframe_arg_addr(src, info), info->size);
- }
- #endif /* __mframe_h_GNUSTEP_BASE_INCLUDE */