~ubuntu-branches/ubuntu/trusty/gnustep-base/trusty

« back to all changes in this revision

Viewing changes to Source/mframe/i386/openbsd

Tags: upstream-1.20.0
ImportĀ upstreamĀ versionĀ 1.20.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* See ../README for copyright */
2
 
 
3
 
#define MFRAME_STACK_STRUCT     0
4
 
#define MFRAME_STRUCT_BYREF     0
5
 
#define MFRAME_SMALL_STRUCT     0
6
 
#define MFRAME_ARGS_SIZE        8
7
 
#define MFRAME_RESULT_SIZE      116
8
 
 
9
 
#define MFRAME_GET_STRUCT_ADDR(ARGS, TYPES) \
10
 
((*(TYPES)==_C_STRUCT_B || *(TYPES)==_C_UNION_B || *(TYPES)==_C_ARY_B) ? \
11
 
      *(void**)((ARGS)->arg_regs + sizeof(void*)) : (void*)0)
12
 
 
13
 
#define MFRAME_SET_STRUCT_ADDR(ARGS, TYPES, ADDR) \
14
 
({if (*(TYPES)==_C_STRUCT_B || *(TYPES)==_C_UNION_B || *(TYPES)==_C_ARY_B) \
15
 
      *(void**)((ARGS)->arg_regs + sizeof(void*)) = (ADDR);})
16
 
 
17
 
#define MFRAME_ARGS int
18
 
 
19
 
#define MFRAME_INIT_ARGS(CUM, RTYPE)    \
20
 
((CUM) = (*(RTYPE)==_C_STRUCT_B || *(RTYPE)==_C_UNION_B || \
21
 
    *(RTYPE)==_C_ARY_B) ? sizeof(void*) : 0)
22
 
 
23
 
#define MFRAME_ARG_ENCODING(CUM, TYPE, STACK, DEST) \
24
 
({  \
25
 
  const char* type = (TYPE); \
26
 
  int align = objc_alignof_type(type); \
27
 
  int size = objc_sizeof_type(type); \
28
 
\
29
 
  (CUM) = ROUND((CUM), align); \
30
 
  (TYPE) = objc_skip_typespec(type); \
31
 
  sprintf((DEST), "%.*s%d", (TYPE)-type, type, (CUM)); \
32
 
  if (*(TYPE) == '+') (TYPE)++; \
33
 
  while (isdigit(*(TYPE))) \
34
 
    { \
35
 
      (TYPE)++; \
36
 
    } \
37
 
  (DEST)=&(DEST)[strlen(DEST)]; \
38
 
  if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)&&size>2) \
39
 
    { \
40
 
      (STACK) = (CUM) + ROUND(size, align); \
41
 
    } \
42
 
  else \
43
 
    { \
44
 
      (STACK) = (CUM) + size; \
45
 
    } \
46
 
  (CUM) += ROUND(size, sizeof(void*)); \
47
 
})
48