Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
0f3f5dcf
Commit
0f3f5dcf
authored
Aug 02, 2007
by
Michael Beck
Browse files
added support for unaligned entities
[r15439]
parent
132dc691
Changes
4
Hide whitespace changes
Inline
Side-by-side
include/libfirm/typerep.h
View file @
0f3f5dcf
...
@@ -315,6 +315,12 @@ typedef enum {
...
@@ -315,6 +315,12 @@ typedef enum {
align_is_aligned
/**< The entity is aligned. Default */
align_is_aligned
/**< The entity is aligned. Default */
}
ir_align
;
}
ir_align
;
/** Returns the alignment of an entity. */
ir_align
get_entity_align
(
const
ir_entity
*
ent
);
/** Sets the alignment of an entity. */
void
set_entity_align
(
ir_entity
*
ent
,
ir_align
a
);
/** Return the name of the alignment. */
/** Return the name of the alignment. */
const
char
*
get_align_name
(
ir_align
a
);
const
char
*
get_align_name
(
ir_align
a
);
...
...
ir/ir/irdumptxt.c
View file @
0f3f5dcf
...
@@ -667,6 +667,7 @@ void dump_entity_to_file_prefix(FILE *F, ir_entity *ent, char *prefix, unsigned
...
@@ -667,6 +667,7 @@ void dump_entity_to_file_prefix(FILE *F, ir_entity *ent, char *prefix, unsigned
if
(
verbosity
&
dump_verbosity_entattrs
)
{
if
(
verbosity
&
dump_verbosity_entattrs
)
{
fprintf
(
F
,
"%s volatility: %s"
,
prefix
,
get_volatility_name
(
get_entity_volatility
(
ent
)));
fprintf
(
F
,
"%s volatility: %s"
,
prefix
,
get_volatility_name
(
get_entity_volatility
(
ent
)));
fprintf
(
F
,
"
\n
%s alignment: %s"
,
prefix
,
get_align_name
(
get_entity_align
(
ent
)));
fprintf
(
F
,
"
\n
%s peculiarity: %s"
,
prefix
,
get_peculiarity_name
(
get_entity_peculiarity
(
ent
)));
fprintf
(
F
,
"
\n
%s peculiarity: %s"
,
prefix
,
get_peculiarity_name
(
get_entity_peculiarity
(
ent
)));
fprintf
(
F
,
"
\n
%s ld_name: %s"
,
prefix
,
ent
->
ld_name
?
get_entity_ld_name
(
ent
)
:
"no yet set"
);
fprintf
(
F
,
"
\n
%s ld_name: %s"
,
prefix
,
ent
->
ld_name
?
get_entity_ld_name
(
ent
)
:
"no yet set"
);
fprintf
(
F
,
"
\n
%s offset: %d bytes, %d rem bits"
,
prefix
,
get_entity_offset
(
ent
),
get_entity_offset_bits_remainder
(
ent
));
fprintf
(
F
,
"
\n
%s offset: %d bytes, %d rem bits"
,
prefix
,
get_entity_offset
(
ent
),
get_entity_offset_bits_remainder
(
ent
));
...
...
ir/tr/entity.c
View file @
0f3f5dcf
...
@@ -143,6 +143,7 @@ new_rd_entity(dbg_info *db, ir_type *owner, ident *name, ir_type *type)
...
@@ -143,6 +143,7 @@ new_rd_entity(dbg_info *db, ir_type *owner, ident *name, ir_type *type)
res
->
allocation
=
allocation_automatic
;
res
->
allocation
=
allocation_automatic
;
res
->
visibility
=
visibility_local
;
res
->
visibility
=
visibility_local
;
res
->
volatility
=
volatility_non_volatile
;
res
->
volatility
=
volatility_non_volatile
;
res
->
align
=
align_is_aligned
;
res
->
stickyness
=
stickyness_unsticky
;
res
->
stickyness
=
stickyness_unsticky
;
res
->
peculiarity
=
peculiarity_existent
;
res
->
peculiarity
=
peculiarity_existent
;
res
->
address_taken
=
ir_address_taken_unknown
;
res
->
address_taken
=
ir_address_taken_unknown
;
...
@@ -493,6 +494,16 @@ const char *get_volatility_name(ir_volatility var)
...
@@ -493,6 +494,16 @@ const char *get_volatility_name(ir_volatility var)
#undef X
#undef X
}
/* get_volatility_name */
}
/* get_volatility_name */
ir_align
(
get_entity_align
)(
const
ir_entity
*
ent
)
{
return
_get_entity_align
(
ent
);
}
/* get_entity_align */
void
(
set_entity_align
)(
ir_entity
*
ent
,
ir_align
a
)
{
_set_entity_align
(
ent
,
a
);
}
/* set_entity_align */
/* Return the name of the alignment. */
/* Return the name of the alignment. */
const
char
*
get_align_name
(
ir_align
a
)
const
char
*
get_align_name
(
ir_align
a
)
{
{
...
@@ -500,7 +511,7 @@ const char *get_align_name(ir_align a)
...
@@ -500,7 +511,7 @@ const char *get_align_name(ir_align a)
switch
(
a
)
{
switch
(
a
)
{
X
(
align_non_aligned
);
X
(
align_non_aligned
);
X
(
align_is_aligned
);
X
(
align_is_aligned
);
default:
return
"BAD VALUE"
;
default:
return
"BAD VALUE"
;
}
}
#undef X
#undef X
}
/* get_align_name */
}
/* get_align_name */
...
...
ir/tr/entity_t.h
View file @
0f3f5dcf
...
@@ -100,14 +100,15 @@ struct ir_entity {
...
@@ -100,14 +100,15 @@ struct ir_entity {
ir_type
*
type
;
/**< The type of this entity, e.g., a method type, a
ir_type
*
type
;
/**< The type of this entity, e.g., a method type, a
basic type of the language or a class itself. */
basic type of the language or a class itself. */
ir_type
*
owner
;
/**< The compound type (e.g. class type) this entity belongs to. */
ir_type
*
owner
;
/**< The compound type (e.g. class type) this entity belongs to. */
ir_allocation
allocation
:
3
;
/**< Distinguishes static and dynamically allocated
unsigned
allocation
:
3
;
/**< Distinguishes static and dynamically allocated
entities and some further cases. */
entities and some further cases. */
ir_visibility
visibility
:
3
;
/**< Specifies visibility to external program fragments. */
unsigned
visibility
:
3
;
/**< Specifies visibility to external program fragments. */
ir_variability
variability
:
3
;
/**< Specifies variability of entities content. */
unsigned
variability
:
3
;
/**< Specifies variability of entities content. */
ir_volatility
volatility
:
2
;
/**< Specifies volatility of entities content. */
unsigned
volatility
:
1
;
/**< Specifies volatility of entities content. */
ir_stickyness
stickyness
:
2
;
/**< Specifies whether this entity is sticky. */
unsigned
align
:
1
;
/**< Specifies alignment of entities content. */
ir_peculiarity
peculiarity
:
3
;
/**< The peculiarity of this entity. */
unsigned
stickyness
:
2
;
/**< Specifies whether this entity is sticky. */
ir_address_taken_state
address_taken
:
3
;
/**< A flag that can be set to mark address taken entities. */
unsigned
peculiarity
:
3
;
/**< The peculiarity of this entity. */
unsigned
address_taken
:
3
;
/**< A flag that can be set to mark address taken entities. */
unsigned
final
:
1
;
/**< If set, this entity cannot be overridden. */
unsigned
final
:
1
;
/**< If set, this entity cannot be overridden. */
unsigned
compiler_gen
:
1
;
/**< If set, this entity was compiler generated. */
unsigned
compiler_gen
:
1
;
/**< If set, this entity was compiler generated. */
unsigned
backend_marked
:
1
;
/**< If set, this entity was marked by the backend for emission. */
unsigned
backend_marked
:
1
;
/**< If set, this entity was marked by the backend for emission. */
...
@@ -247,6 +248,18 @@ _set_entity_volatility(ir_entity *ent, ir_volatility vol) {
...
@@ -247,6 +248,18 @@ _set_entity_volatility(ir_entity *ent, ir_volatility vol) {
ent
->
volatility
=
vol
;
ent
->
volatility
=
vol
;
}
}
static
INLINE
ir_align
_get_entity_align
(
const
ir_entity
*
ent
)
{
assert
(
ent
&&
ent
->
kind
==
k_entity
);
return
ent
->
align
;
}
static
INLINE
void
_set_entity_align
(
ir_entity
*
ent
,
ir_align
a
)
{
assert
(
ent
&&
ent
->
kind
==
k_entity
);
ent
->
align
=
a
;
}
static
INLINE
ir_peculiarity
static
INLINE
ir_peculiarity
_get_entity_peculiarity
(
const
ir_entity
*
ent
)
{
_get_entity_peculiarity
(
const
ir_entity
*
ent
)
{
assert
(
ent
&&
ent
->
kind
==
k_entity
);
assert
(
ent
&&
ent
->
kind
==
k_entity
);
...
@@ -439,6 +452,8 @@ _set_entity_dbg_info(ir_entity *ent, dbg_info *db) {
...
@@ -439,6 +452,8 @@ _set_entity_dbg_info(ir_entity *ent, dbg_info *db) {
#define get_entity_variability(ent) _get_entity_variability(ent)
#define get_entity_variability(ent) _get_entity_variability(ent)
#define get_entity_volatility(ent) _get_entity_volatility(ent)
#define get_entity_volatility(ent) _get_entity_volatility(ent)
#define set_entity_volatility(ent, vol) _set_entity_volatility(ent, vol)
#define set_entity_volatility(ent, vol) _set_entity_volatility(ent, vol)
#define get_entity_align(ent) _get_entity_align(ent)
#define set_entity_align(ent, a) _set_entity_align(ent, a)
#define get_entity_peculiarity(ent) _get_entity_peculiarity(ent)
#define get_entity_peculiarity(ent) _get_entity_peculiarity(ent)
#define set_entity_peculiarity(ent, pec) _set_entity_peculiarity(ent, pec)
#define set_entity_peculiarity(ent, pec) _set_entity_peculiarity(ent, pec)
#define get_entity_stickyness(ent) _get_entity_stickyness(ent)
#define get_entity_stickyness(ent) _get_entity_stickyness(ent)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment