aboutsummaryrefslogtreecommitdiffstats
path: root/ortho/gcc
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2014-01-15 06:12:10 +0100
committerTristan Gingold <tgingold@free.fr>2014-01-15 06:12:10 +0100
commitd68bc3f41ad8a750eda9c50878c6728a84ad3097 (patch)
tree9284690b0797e3ffed8839611d4b8e53ee1d5894 /ortho/gcc
parent9b22b46458f2c80d87ffd957aa7df78cb98ee710 (diff)
downloadghdl-d68bc3f41ad8a750eda9c50878c6728a84ad3097.tar.gz
ghdl-d68bc3f41ad8a750eda9c50878c6728a84ad3097.tar.bz2
ghdl-d68bc3f41ad8a750eda9c50878c6728a84ad3097.zip
Add Alignof constant to get the alignment of a type.
Diffstat (limited to 'ortho/gcc')
-rw-r--r--ortho/gcc/ortho-lang.c6
-rw-r--r--ortho/gcc/ortho_gcc.ads5
2 files changed, 11 insertions, 0 deletions
diff --git a/ortho/gcc/ortho-lang.c b/ortho/gcc/ortho-lang.c
index 370bdd633..900ca17ae 100644
--- a/ortho/gcc/ortho-lang.c
+++ b/ortho/gcc/ortho-lang.c
@@ -1431,6 +1431,12 @@ new_sizeof (tree atype, tree rtype)
return fold (build1 (NOP_EXPR, rtype, size));
}
+tree
+new_alignof (tree atype, tree rtype)
+{
+ return build_int_cstu (rtype, TYPE_ALIGN_UNIT (atype));
+}
+
/* Convert the array expression EXP to a pointer. */
static tree array_to_pointer_conversion (tree exp);
diff --git a/ortho/gcc/ortho_gcc.ads b/ortho/gcc/ortho_gcc.ads
index 9b5356863..31005ae6c 100644
--- a/ortho/gcc/ortho_gcc.ads
+++ b/ortho/gcc/ortho_gcc.ads
@@ -233,6 +233,10 @@ package Ortho_Gcc is
-- ATYPE cannot be an unconstrained array type.
function New_Sizeof (Atype : O_Tnode; Rtype : O_Tnode) return O_Cnode;
+ -- Returns the alignment in bytes for ATYPE. The result is a literal of
+ -- unsgined type RTYPE.
+ function New_Alignof (Atype : O_Tnode; Rtype : O_Tnode) return O_Cnode;
+
-- Returns the offset of FIELD in its record. The result is a literal
-- of unsigned type RTYPE.
function New_Offsetof (Field : O_Fnode; Rtype : O_Tnode) return O_Cnode;
@@ -598,6 +602,7 @@ private
pragma Import (C, New_Access_Element);
pragma Import (C, New_Sizeof);
+ pragma Import (C, New_Alignof);
pragma Import (C, New_Offsetof);
pragma Import (C, New_Address);