Fix attempt to inline recursive functions.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3700 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
3f4afa145e
commit
265531154a
23
thunk.c
23
thunk.c
@ -31,6 +31,8 @@
|
|||||||
/* XXX: make it dynamic */
|
/* XXX: make it dynamic */
|
||||||
StructEntry struct_entries[MAX_STRUCTS];
|
StructEntry struct_entries[MAX_STRUCTS];
|
||||||
|
|
||||||
|
static const argtype *thunk_type_next_ptr(const argtype *type_ptr);
|
||||||
|
|
||||||
static inline const argtype *thunk_type_next(const argtype *type_ptr)
|
static inline const argtype *thunk_type_next(const argtype *type_ptr)
|
||||||
{
|
{
|
||||||
int type;
|
int type;
|
||||||
@ -47,9 +49,9 @@ static inline const argtype *thunk_type_next(const argtype *type_ptr)
|
|||||||
case TYPE_PTRVOID:
|
case TYPE_PTRVOID:
|
||||||
return type_ptr;
|
return type_ptr;
|
||||||
case TYPE_PTR:
|
case TYPE_PTR:
|
||||||
return thunk_type_next(type_ptr);
|
return thunk_type_next_ptr(type_ptr);
|
||||||
case TYPE_ARRAY:
|
case TYPE_ARRAY:
|
||||||
return thunk_type_next(type_ptr + 1);
|
return thunk_type_next_ptr(type_ptr + 1);
|
||||||
case TYPE_STRUCT:
|
case TYPE_STRUCT:
|
||||||
return type_ptr + 1;
|
return type_ptr + 1;
|
||||||
default:
|
default:
|
||||||
@ -57,6 +59,11 @@ static inline const argtype *thunk_type_next(const argtype *type_ptr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const argtype *thunk_type_next_ptr(const argtype *type_ptr)
|
||||||
|
{
|
||||||
|
return thunk_type_next(type_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
void thunk_register_struct(int id, const char *name, const argtype *types)
|
void thunk_register_struct(int id, const char *name, const argtype *types)
|
||||||
{
|
{
|
||||||
const argtype *type_ptr;
|
const argtype *type_ptr;
|
||||||
@ -267,3 +274,15 @@ unsigned int host_to_target_bitmask(unsigned int alpha_mask,
|
|||||||
}
|
}
|
||||||
return(x86_mask);
|
return(x86_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NO_THUNK_TYPE_SIZE
|
||||||
|
int thunk_type_size_array(const argtype *type_ptr, int is_host)
|
||||||
|
{
|
||||||
|
return thunk_type_size(type_ptr, is_host);
|
||||||
|
}
|
||||||
|
|
||||||
|
int thunk_type_align_array(const argtype *type_ptr, int is_host)
|
||||||
|
{
|
||||||
|
return thunk_type_align(type_ptr, is_host);
|
||||||
|
}
|
||||||
|
#endif /* ndef NO_THUNK_TYPE_SIZE */
|
||||||
|
7
thunk.h
7
thunk.h
@ -75,6 +75,9 @@ const argtype *thunk_convert(void *dst, const void *src,
|
|||||||
|
|
||||||
extern StructEntry struct_entries[];
|
extern StructEntry struct_entries[];
|
||||||
|
|
||||||
|
int thunk_type_size_array(const argtype *type_ptr, int is_host);
|
||||||
|
int thunk_type_align_array(const argtype *type_ptr, int is_host);
|
||||||
|
|
||||||
static inline int thunk_type_size(const argtype *type_ptr, int is_host)
|
static inline int thunk_type_size(const argtype *type_ptr, int is_host)
|
||||||
{
|
{
|
||||||
int type, size;
|
int type, size;
|
||||||
@ -103,7 +106,7 @@ static inline int thunk_type_size(const argtype *type_ptr, int is_host)
|
|||||||
break;
|
break;
|
||||||
case TYPE_ARRAY:
|
case TYPE_ARRAY:
|
||||||
size = type_ptr[1];
|
size = type_ptr[1];
|
||||||
return size * thunk_type_size(type_ptr + 2, is_host);
|
return size * thunk_type_size_array(type_ptr + 2, is_host);
|
||||||
case TYPE_STRUCT:
|
case TYPE_STRUCT:
|
||||||
se = struct_entries + type_ptr[1];
|
se = struct_entries + type_ptr[1];
|
||||||
return se->size[is_host];
|
return se->size[is_host];
|
||||||
@ -139,7 +142,7 @@ static inline int thunk_type_align(const argtype *type_ptr, int is_host)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TYPE_ARRAY:
|
case TYPE_ARRAY:
|
||||||
return thunk_type_align(type_ptr + 2, is_host);
|
return thunk_type_align_array(type_ptr + 2, is_host);
|
||||||
case TYPE_STRUCT:
|
case TYPE_STRUCT:
|
||||||
se = struct_entries + type_ptr[1];
|
se = struct_entries + type_ptr[1];
|
||||||
return se->align[is_host];
|
return se->align[is_host];
|
||||||
|
Loading…
Reference in New Issue
Block a user