mirror of git://gcc.gnu.org/git/gcc.git
In gcc/: PR 23067
In gcc/: PR 23067 * c-decl.c (start_struct): Don't create self-containing structures. * config/rs6000/rs6000.c (darwin_rs6000_special_round_type_align): New. * config/rs6000/rs6000-protos.h (darwin_rs6000_special_round_type_align): New. * config/rs6000/darwin.h (ADJUST_FIELD_ALIGN): Rewrite. (ROUND_TYPE_ALIGN): Use darwin_rs6000_special_round_type_align. In gcc/testsuite/: PR 23067 * gcc.target/powerpc/darwin-abi-3.c: Remove XFAIL. * gcc.target/powerpc/darwin-abi-6.c: Remove XFAIL. * gcc.target/powerpc/darwin-abi-7.c: Remove XFAIL. * gcc.target/powerpc/darwin-abi-8.c: Remove XFAIL. * gcc.target/powerpc/darwin-abi-9.c: Remove XFAIL. * gcc.target/powerpc/darwin-abi-10.c: Remove XFAIL. * gcc.target/powerpc/darwin-abi-11.c: Remove XFAIL. In libobjc/: * encoding.c (darwin_rs6000_special_round_type_align): New. In libffi/: * src/powerpc/ffi_darwin.c (darwin_adjust_aggregate_sizes): New. (ffi_prep_cif_machdep): Call darwin_adjust_aggregate_sizes for Darwin. * testsuite/libffi.call/nested_struct4.c: Remove Darwin XFAIL. * testsuite/libffi.call/nested_struct6.c: Remove Darwin XFAIL. From-SVN: r118365
This commit is contained in:
parent
0e7e09dc1e
commit
58182de357
|
@ -1,3 +1,15 @@
|
||||||
|
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
|
PR 23067
|
||||||
|
* c-decl.c (start_struct): Don't create self-containing
|
||||||
|
structures.
|
||||||
|
* config/rs6000/rs6000.c (darwin_rs6000_special_round_type_align):
|
||||||
|
New.
|
||||||
|
* config/rs6000/rs6000-protos.h
|
||||||
|
(darwin_rs6000_special_round_type_align): New.
|
||||||
|
* config/rs6000/darwin.h (ADJUST_FIELD_ALIGN): Rewrite.
|
||||||
|
(ROUND_TYPE_ALIGN): Use darwin_rs6000_special_round_type_align.
|
||||||
|
|
||||||
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
* toplev.c (compile_file): Call final_write_globals
|
* toplev.c (compile_file): Call final_write_globals
|
||||||
|
|
|
@ -374,26 +374,28 @@ do { \
|
||||||
/* Fix for emit_group_load (): force large constants to be pushed via regs. */
|
/* Fix for emit_group_load (): force large constants to be pushed via regs. */
|
||||||
#define ALWAYS_PUSH_CONSTS_USING_REGS_P 1
|
#define ALWAYS_PUSH_CONSTS_USING_REGS_P 1
|
||||||
|
|
||||||
/* This now supports a natural alignment mode */
|
/* Compute field alignment. This is similar to the version of the
|
||||||
/* Darwin word-aligns FP doubles but doubleword-aligns 64-bit ints. */
|
macro in the Apple version of GCC, except that version supports
|
||||||
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
'mac68k' alignment, and that version uses the computed alignment
|
||||||
(TARGET_ALIGN_NATURAL ? (COMPUTED) : \
|
always for the first field of a structure. The first-field
|
||||||
(TYPE_MODE (TREE_CODE (TREE_TYPE (FIELD)) == ARRAY_TYPE \
|
behaviour is dealt with by
|
||||||
? get_inner_array_type (FIELD) \
|
darwin_rs6000_special_round_type_align. */
|
||||||
: TREE_TYPE (FIELD)) == DFmode \
|
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
||||||
? MIN ((COMPUTED), 32) : (COMPUTED)))
|
(TARGET_ALIGN_NATURAL ? (COMPUTED) \
|
||||||
|
: (COMPUTED) == 128 ? 128 \
|
||||||
|
: MIN ((COMPUTED), 32))
|
||||||
|
|
||||||
/* Darwin increases natural record alignment to doubleword if the first
|
/* Darwin increases natural record alignment to doubleword if the first
|
||||||
field is an FP double while the FP fields remain word aligned. */
|
field is an FP double while the FP fields remain word aligned. */
|
||||||
#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \
|
#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \
|
||||||
((TREE_CODE (STRUCT) == RECORD_TYPE \
|
((TREE_CODE (STRUCT) == RECORD_TYPE \
|
||||||
|| TREE_CODE (STRUCT) == UNION_TYPE \
|
|| TREE_CODE (STRUCT) == UNION_TYPE \
|
||||||
|| TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \
|
|| TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \
|
||||||
&& TARGET_ALIGN_NATURAL == 0 \
|
&& TARGET_ALIGN_NATURAL == 0 \
|
||||||
? rs6000_special_round_type_align (STRUCT, COMPUTED, SPECIFIED) \
|
? darwin_rs6000_special_round_type_align (STRUCT, COMPUTED, SPECIFIED) \
|
||||||
: (TREE_CODE (STRUCT) == VECTOR_TYPE \
|
: (TREE_CODE (STRUCT) == VECTOR_TYPE \
|
||||||
&& ALTIVEC_VECTOR_MODE (TYPE_MODE (STRUCT))) \
|
&& ALTIVEC_VECTOR_MODE (TYPE_MODE (STRUCT))) \
|
||||||
? MAX (MAX ((COMPUTED), (SPECIFIED)), 128) \
|
? MAX (MAX ((COMPUTED), (SPECIFIED)), 128) \
|
||||||
: MAX ((COMPUTED), (SPECIFIED)))
|
: MAX ((COMPUTED), (SPECIFIED)))
|
||||||
|
|
||||||
/* Specify padding for the last element of a block move between
|
/* Specify padding for the last element of a block move between
|
||||||
|
|
|
@ -114,6 +114,8 @@ extern rtx rs6000_machopic_legitimize_pic_address (rtx, enum machine_mode,
|
||||||
#ifdef TREE_CODE
|
#ifdef TREE_CODE
|
||||||
extern unsigned int rs6000_special_round_type_align (tree, unsigned int,
|
extern unsigned int rs6000_special_round_type_align (tree, unsigned int,
|
||||||
unsigned int);
|
unsigned int);
|
||||||
|
extern unsigned int darwin_rs6000_special_round_type_align (tree, unsigned int,
|
||||||
|
unsigned int);
|
||||||
extern void function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
|
extern void function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
|
||||||
tree, int, int);
|
tree, int, int);
|
||||||
extern int function_arg_boundary (enum machine_mode, tree);
|
extern int function_arg_boundary (enum machine_mode, tree);
|
||||||
|
|
|
@ -2591,7 +2591,7 @@ invalid_e500_subreg (rtx op, enum machine_mode mode)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Darwin, AIX increases natural record alignment to doubleword if the first
|
/* AIX increases natural record alignment to doubleword if the first
|
||||||
field is an FP double while the FP fields remain word aligned. */
|
field is an FP double while the FP fields remain word aligned. */
|
||||||
|
|
||||||
unsigned int
|
unsigned int
|
||||||
|
@ -2618,6 +2618,37 @@ rs6000_special_round_type_align (tree type, unsigned int computed,
|
||||||
return align;
|
return align;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Darwin increases record alignment to the natural alignment of
|
||||||
|
the first field. */
|
||||||
|
|
||||||
|
unsigned int
|
||||||
|
darwin_rs6000_special_round_type_align (tree type, unsigned int computed,
|
||||||
|
unsigned int specified)
|
||||||
|
{
|
||||||
|
unsigned int align = MAX (computed, specified);
|
||||||
|
|
||||||
|
if (TYPE_PACKED (type))
|
||||||
|
return align;
|
||||||
|
|
||||||
|
/* Find the first field, looking down into aggregates. */
|
||||||
|
do {
|
||||||
|
tree field = TYPE_FIELDS (type);
|
||||||
|
/* Skip all non field decls */
|
||||||
|
while (field != NULL && TREE_CODE (field) != FIELD_DECL)
|
||||||
|
field = TREE_CHAIN (field);
|
||||||
|
if (! field)
|
||||||
|
break;
|
||||||
|
type = TREE_TYPE (field);
|
||||||
|
while (TREE_CODE (type) == ARRAY_TYPE)
|
||||||
|
type = TREE_TYPE (type);
|
||||||
|
} while (AGGREGATE_TYPE_P (type));
|
||||||
|
|
||||||
|
if (! AGGREGATE_TYPE_P (type) && type != error_mark_node)
|
||||||
|
align = MAX (align, TYPE_ALIGN (type));
|
||||||
|
|
||||||
|
return align;
|
||||||
|
}
|
||||||
|
|
||||||
/* Return 1 for an operand in small memory on V.4/eabi. */
|
/* Return 1 for an operand in small memory on V.4/eabi. */
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
|
PR 23067
|
||||||
|
* gcc.target/powerpc/darwin-abi-3.c: Remove XFAIL.
|
||||||
|
* gcc.target/powerpc/darwin-abi-6.c: Remove XFAIL.
|
||||||
|
* gcc.target/powerpc/darwin-abi-7.c: Remove XFAIL.
|
||||||
|
* gcc.target/powerpc/darwin-abi-8.c: Remove XFAIL.
|
||||||
|
* gcc.target/powerpc/darwin-abi-9.c: Remove XFAIL.
|
||||||
|
* gcc.target/powerpc/darwin-abi-10.c: Remove XFAIL.
|
||||||
|
* gcc.target/powerpc/darwin-abi-11.c: Remove XFAIL.
|
||||||
|
|
||||||
2006-10-31 Eric Christopher <echristo@apple.com>
|
2006-10-31 Eric Christopher <echristo@apple.com>
|
||||||
Falk Hueffner <falk@debian.org>
|
Falk Hueffner <falk@debian.org>
|
||||||
|
|
||||||
|
@ -6,7 +17,7 @@
|
||||||
* gcc.dg/builtin-bswap-3.c: New.
|
* gcc.dg/builtin-bswap-3.c: New.
|
||||||
* gcc.dg/builtin-bswap-4.c: New.
|
* gcc.dg/builtin-bswap-4.c: New.
|
||||||
* gcc.dg/builtin-bswap-5.c: New.
|
* gcc.dg/builtin-bswap-5.c: New.
|
||||||
* gcc.dg/i386/builtin-bswap-1.c: New.
|
* gcc.target/i386/builtin-bswap-1.c: New.
|
||||||
|
|
||||||
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
||||||
/* { dg-require-effective-target ilp32 } */
|
/* { dg-require-effective-target ilp32 } */
|
||||||
/* { dg-xfail-if "" { powerpc*-*-darwin* } } */
|
|
||||||
/* { dg-options "-Wno-long-long" } */
|
/* { dg-options "-Wno-long-long" } */
|
||||||
|
|
||||||
struct b
|
struct b
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
||||||
/* { dg-require-effective-target ilp32 } */
|
/* { dg-require-effective-target ilp32 } */
|
||||||
/* { dg-xfail-if "" { powerpc*-*-darwin* } } */
|
|
||||||
/* { dg-options "-Wno-long-long" } */
|
/* { dg-options "-Wno-long-long" } */
|
||||||
|
|
||||||
struct A
|
struct A
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
||||||
/* { dg-require-effective-target ilp32 } */
|
/* { dg-require-effective-target ilp32 } */
|
||||||
/* { dg-xfail-if "" { powerpc*-*-darwin* } } */
|
|
||||||
/* { dg-options "-Wno-long-long" } */
|
/* { dg-options "-Wno-long-long" } */
|
||||||
struct f
|
struct f
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
||||||
/* { dg-require-effective-target ilp32 } */
|
/* { dg-require-effective-target ilp32 } */
|
||||||
/* { dg-xfail-if "" { powerpc*-*-darwin* } } */
|
|
||||||
/* { dg-options "-Wno-long-long" } */
|
/* { dg-options "-Wno-long-long" } */
|
||||||
|
|
||||||
struct a
|
struct a
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
||||||
/* { dg-require-effective-target ilp32 } */
|
/* { dg-require-effective-target ilp32 } */
|
||||||
/* { dg-xfail-if "" { powerpc*-*-darwin* } } */
|
|
||||||
/* { dg-options "-Wno-long-long" } */
|
/* { dg-options "-Wno-long-long" } */
|
||||||
|
|
||||||
struct b
|
struct b
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
||||||
/* { dg-require-effective-target ilp32 } */
|
/* { dg-require-effective-target ilp32 } */
|
||||||
/* { dg-xfail-if "" { powerpc*-*-darwin* } } */
|
|
||||||
|
|
||||||
struct c
|
struct c
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
/* { dg-do compile { target powerpc*-*-darwin* } } */
|
||||||
/* { dg-require-effective-target ilp32 } */
|
/* { dg-require-effective-target ilp32 } */
|
||||||
/* { dg-xfail-if "" { powerpc*-*-darwin* } } */
|
|
||||||
/* { dg-options "-Wno-long-long" } */
|
/* { dg-options "-Wno-long-long" } */
|
||||||
|
|
||||||
struct b
|
struct b
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
2006-10-16 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
|
* src/powerpc/ffi_darwin.c (darwin_adjust_aggregate_sizes): New.
|
||||||
|
(ffi_prep_cif_machdep): Call darwin_adjust_aggregate_sizes for
|
||||||
|
Darwin.
|
||||||
|
* testsuite/libffi.call/nested_struct4.c: Remove Darwin XFAIL.
|
||||||
|
* testsuite/libffi.call/nested_struct6.c: Remove Darwin XFAIL.
|
||||||
|
|
||||||
2006-10-10 Paolo Bonzini <bonzini@gnu.org>
|
2006-10-10 Paolo Bonzini <bonzini@gnu.org>
|
||||||
Sandro Tolaini <tolaini@libero.it>
|
Sandro Tolaini <tolaini@libero.it>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
/* -----------------------------------------------------------------------
|
/* -----------------------------------------------------------------------
|
||||||
ffi.c - Copyright (c) 1998 Geoffrey Keating
|
ffi_darwin.c
|
||||||
|
|
||||||
PowerPC Foreign Function Interface
|
Copyright (C) 1998 Geoffrey Keating
|
||||||
|
Copyright (C) 2001 John Hornkvist
|
||||||
Darwin ABI support (c) 2001 John Hornkvist
|
Copyright (C) 2002, 2006 Free Software Foundation, Inc.
|
||||||
AIX ABI support (c) 2002 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
|
FFI support for Darwin and AIX.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
``Software''), to deal in the Software without restriction, including
|
``Software''), to deal in the Software without restriction, including
|
||||||
|
@ -225,6 +226,48 @@ void ffi_prep_args(extended_cif *ecif, unsigned *const stack)
|
||||||
//FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);
|
//FFI_ASSERT(flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Adjust the size of S to be correct for Darwin.
|
||||||
|
On Darwin, the first field of a structure has natural alignment. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
darwin_adjust_aggregate_sizes (ffi_type *s)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (s->type != FFI_TYPE_STRUCT)
|
||||||
|
return;
|
||||||
|
|
||||||
|
s->size = 0;
|
||||||
|
for (i = 0; s->elements[i] != NULL; i++)
|
||||||
|
{
|
||||||
|
ffi_type *p;
|
||||||
|
int align;
|
||||||
|
|
||||||
|
p = s->elements[i];
|
||||||
|
darwin_adjust_aggregate_sizes (p);
|
||||||
|
if (i == 0
|
||||||
|
&& (p->type == FFI_TYPE_UINT64
|
||||||
|
|| p->type == FFI_TYPE_SINT64
|
||||||
|
|| p->type == FFI_TYPE_DOUBLE
|
||||||
|
|| p->alignment == 8))
|
||||||
|
align = 8;
|
||||||
|
else if (p->alignment == 16 || p->alignment < 4)
|
||||||
|
align = p->alignment;
|
||||||
|
else
|
||||||
|
align = 4;
|
||||||
|
s->size = ALIGN(s->size, align) + p->size;
|
||||||
|
}
|
||||||
|
|
||||||
|
s->size = ALIGN(s->size, s->alignment);
|
||||||
|
|
||||||
|
if (s->elements[0]->type == FFI_TYPE_UINT64
|
||||||
|
|| s->elements[0]->type == FFI_TYPE_SINT64
|
||||||
|
|| s->elements[0]->type == FFI_TYPE_DOUBLE
|
||||||
|
|| s->elements[0]->alignment == 8)
|
||||||
|
s->alignment = s->alignment > 8 ? s->alignment : 8;
|
||||||
|
/* Do not add additional tail padding. */
|
||||||
|
}
|
||||||
|
|
||||||
/* Perform machine dependent cif processing. */
|
/* Perform machine dependent cif processing. */
|
||||||
ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
|
ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
|
||||||
{
|
{
|
||||||
|
@ -237,8 +280,16 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
|
||||||
unsigned size_al = 0;
|
unsigned size_al = 0;
|
||||||
|
|
||||||
/* All the machine-independent calculation of cif->bytes will be wrong.
|
/* All the machine-independent calculation of cif->bytes will be wrong.
|
||||||
|
All the calculation of structure sizes will also be wrong.
|
||||||
Redo the calculation for DARWIN. */
|
Redo the calculation for DARWIN. */
|
||||||
|
|
||||||
|
if (cif->abi == FFI_DARWIN)
|
||||||
|
{
|
||||||
|
darwin_adjust_aggregate_sizes (cif->rtype);
|
||||||
|
for (i = 0; i < cif->nargs; i++)
|
||||||
|
darwin_adjust_aggregate_sizes (cif->arg_types[i]);
|
||||||
|
}
|
||||||
|
|
||||||
/* Space for the frame pointer, callee's LR, CR, etc, and for
|
/* Space for the frame pointer, callee's LR, CR, etc, and for
|
||||||
the asm's temp regs. */
|
the asm's temp regs. */
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
PR: PR 25630.
|
PR: PR 25630.
|
||||||
Originator: <andreast@gcc.gnu.org> 20051010 */
|
Originator: <andreast@gcc.gnu.org> 20051010 */
|
||||||
|
|
||||||
/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* powerpc*-*-darwin* } } */
|
/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
|
||||||
#include "ffitest.h"
|
#include "ffitest.h"
|
||||||
|
|
||||||
typedef struct A {
|
typedef struct A {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
PR: PR 25630.
|
PR: PR 25630.
|
||||||
Originator: <andreast@gcc.gnu.org> 20051010 */
|
Originator: <andreast@gcc.gnu.org> 20051010 */
|
||||||
|
|
||||||
/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* powerpc*-*-darwin* } } */
|
/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
|
||||||
#include "ffitest.h"
|
#include "ffitest.h"
|
||||||
|
|
||||||
typedef struct A {
|
typedef struct A {
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
|
* encoding.c (darwin_rs6000_special_round_type_align): New.
|
||||||
|
|
||||||
2006-10-14 Geoffrey Keating <geoffk@apple.com>
|
2006-10-14 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
* Makefile.in: Use multi_basedir instead of toplevel_srcdir.
|
* Makefile.in: Use multi_basedir instead of toplevel_srcdir.
|
||||||
|
|
|
@ -120,6 +120,10 @@ static int __attribute__ ((__unused__)) not_target_flags = 0;
|
||||||
: TREE_TYPE (_fields)) == DFmode) \
|
: TREE_TYPE (_fields)) == DFmode) \
|
||||||
? MAX (MAX (COMPUTED, SPECIFIED), 64) \
|
? MAX (MAX (COMPUTED, SPECIFIED), 64) \
|
||||||
: MAX (COMPUTED, SPECIFIED));})
|
: MAX (COMPUTED, SPECIFIED));})
|
||||||
|
/* FIXME: The word 'fixme' is insufficient to explain the wrong-ness
|
||||||
|
of this next macro definition. */
|
||||||
|
#define darwin_rs6000_special_round_type_align(S,C,S2) \
|
||||||
|
rs6000_special_round_type_align(S,C,S2)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
return the size of an object specified by type
|
return the size of an object specified by type
|
||||||
|
|
Loading…
Reference in New Issue