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
8f7699e7
Commit
8f7699e7
authored
Mar 17, 2011
by
Matthias Braun
Browse files
rename Store_align/Load_align to XXX_unaligned and correctly put it into the spec file
parent
7142e46b
Changes
15
Show whitespace changes
Inline
Side-by-side
include/libfirm/firm_types.h
View file @
8f7699e7
...
@@ -286,6 +286,22 @@ typedef enum ir_value_classify_sign {
...
@@ -286,6 +286,22 @@ typedef enum ir_value_classify_sign {
no signed zero exists or < 0 else */
no signed zero exists or < 0 else */
}
ir_value_classify_sign
;
}
ir_value_classify_sign
;
/**
* This enumeration flags the volatility of entities and Loads/Stores.
*/
typedef
enum
{
volatility_non_volatile
,
/**< The entity is not volatile. Default. */
volatility_is_volatile
/**< The entity is volatile. */
}
ir_volatility
;
/**
* This enumeration flags the align of Loads/Stores.
*/
typedef
enum
{
align_is_aligned
=
0
,
/**< The entity is aligned. Default */
align_non_aligned
,
/**< The entity is not aligned. */
}
ir_align
;
#include "end.h"
#include "end.h"
#endif
#endif
include/libfirm/irnode.h
View file @
8f7699e7
...
@@ -547,16 +547,6 @@ FIRM_API void set_memop_mem(ir_node *node, ir_node *mem);
...
@@ -547,16 +547,6 @@ FIRM_API void set_memop_mem(ir_node *node, ir_node *mem);
FIRM_API
ir_node
*
get_memop_ptr
(
const
ir_node
*
node
);
FIRM_API
ir_node
*
get_memop_ptr
(
const
ir_node
*
node
);
FIRM_API
void
set_memop_ptr
(
ir_node
*
node
,
ir_node
*
ptr
);
FIRM_API
void
set_memop_ptr
(
ir_node
*
node
,
ir_node
*
ptr
);
FIRM_API
ir_volatility
get_Load_volatility
(
const
ir_node
*
node
);
FIRM_API
void
set_Load_volatility
(
ir_node
*
node
,
ir_volatility
volatility
);
FIRM_API
ir_align
get_Load_align
(
const
ir_node
*
node
);
FIRM_API
void
set_Load_align
(
ir_node
*
node
,
ir_align
align
);
FIRM_API
ir_volatility
get_Store_volatility
(
const
ir_node
*
node
);
FIRM_API
void
set_Store_volatility
(
ir_node
*
node
,
ir_volatility
volatility
);
FIRM_API
ir_align
get_Store_align
(
const
ir_node
*
node
);
FIRM_API
void
set_Store_align
(
ir_node
*
node
,
ir_align
align
);
FIRM_API
ir_node
**
get_Sync_preds_arr
(
ir_node
*
node
);
FIRM_API
ir_node
**
get_Sync_preds_arr
(
ir_node
*
node
);
FIRM_API
int
get_Sync_n_preds
(
const
ir_node
*
node
);
FIRM_API
int
get_Sync_n_preds
(
const
ir_node
*
node
);
FIRM_API
ir_node
*
get_Sync_pred
(
const
ir_node
*
node
,
int
pos
);
FIRM_API
ir_node
*
get_Sync_pred
(
const
ir_node
*
node
,
int
pos
);
...
...
include/libfirm/typerep.h
View file @
8f7699e7
...
@@ -278,15 +278,6 @@ FIRM_API void set_entity_linkage(ir_entity *entity, ir_linkage linkage);
...
@@ -278,15 +278,6 @@ FIRM_API void set_entity_linkage(ir_entity *entity, ir_linkage linkage);
FIRM_API
void
add_entity_linkage
(
ir_entity
*
entity
,
ir_linkage
linkage
);
FIRM_API
void
add_entity_linkage
(
ir_entity
*
entity
,
ir_linkage
linkage
);
FIRM_API
void
remove_entity_linkage
(
ir_entity
*
entity
,
ir_linkage
linkage
);
FIRM_API
void
remove_entity_linkage
(
ir_entity
*
entity
,
ir_linkage
linkage
);
/**
* This enumeration flags the volatility of entities and Loads/Stores.
* @deprecated
*/
typedef
enum
{
volatility_non_volatile
,
/**< The entity is not volatile. Default. */
volatility_is_volatile
/**< The entity is volatile. */
}
ir_volatility
;
/**
/**
* Returns the volatility of an entity.
* Returns the volatility of an entity.
* @deprecated
* @deprecated
...
@@ -312,15 +303,6 @@ FIRM_API unsigned get_entity_alignment(const ir_entity *entity);
...
@@ -312,15 +303,6 @@ FIRM_API unsigned get_entity_alignment(const ir_entity *entity);
FIRM_API
void
set_entity_alignment
(
ir_entity
*
entity
,
unsigned
alignment
);
FIRM_API
void
set_entity_alignment
(
ir_entity
*
entity
,
unsigned
alignment
);
/**
* This enumeration flags the align of Loads/Stores.
* @deprecated
*/
typedef
enum
{
align_non_aligned
,
/**< The entity is not aligned. */
align_is_aligned
/**< The entity is aligned. Default */
}
ir_align
;
/**
/**
* Returns indication whether entity is aligned in memory.
* Returns indication whether entity is aligned in memory.
* @deprecated
* @deprecated
...
...
ir/be/arm/arm_transform.c
View file @
8f7699e7
...
@@ -913,6 +913,9 @@ static ir_node *gen_Load(ir_node *node)
...
@@ -913,6 +913,9 @@ static ir_node *gen_Load(ir_node *node)
dbg_info
*
dbgi
=
get_irn_dbg_info
(
node
);
dbg_info
*
dbgi
=
get_irn_dbg_info
(
node
);
ir_node
*
new_load
=
NULL
;
ir_node
*
new_load
=
NULL
;
if
(
get_Load_unaligned
(
node
)
==
align_non_aligned
)
panic
(
"arm: unaligned Loads not supported yet"
);
if
(
mode_is_float
(
mode
))
{
if
(
mode_is_float
(
mode
))
{
if
(
USE_FPA
(
isa
))
{
if
(
USE_FPA
(
isa
))
{
new_load
=
new_bd_arm_Ldf
(
dbgi
,
block
,
new_ptr
,
new_mem
,
mode
,
new_load
=
new_bd_arm_Ldf
(
dbgi
,
block
,
new_ptr
,
new_mem
,
mode
,
...
@@ -953,6 +956,9 @@ static ir_node *gen_Store(ir_node *node)
...
@@ -953,6 +956,9 @@ static ir_node *gen_Store(ir_node *node)
dbg_info
*
dbgi
=
get_irn_dbg_info
(
node
);
dbg_info
*
dbgi
=
get_irn_dbg_info
(
node
);
ir_node
*
new_store
=
NULL
;
ir_node
*
new_store
=
NULL
;
if
(
get_Store_unaligned
(
node
)
==
align_non_aligned
)
panic
(
"arm: unaligned Stores not supported yet"
);
if
(
mode_is_float
(
mode
))
{
if
(
mode_is_float
(
mode
))
{
if
(
USE_FPA
(
isa
))
{
if
(
USE_FPA
(
isa
))
{
new_store
=
new_bd_arm_Stf
(
dbgi
,
block
,
new_ptr
,
new_val
,
new_store
=
new_bd_arm_Stf
(
dbgi
,
block
,
new_ptr
,
new_val
,
...
...
ir/be/sparc/sparc_transform.c
View file @
8f7699e7
...
@@ -520,6 +520,10 @@ static ir_node *gen_Load(ir_node *node)
...
@@ -520,6 +520,10 @@ static ir_node *gen_Load(ir_node *node)
ir_node
*
new_load
=
NULL
;
ir_node
*
new_load
=
NULL
;
address_t
address
;
address_t
address
;
if
(
get_Load_unaligned
(
node
)
==
align_non_aligned
)
{
panic
(
"sparc: transformation of unaligned Loads not implemented yet"
);
}
if
(
mode_is_float
(
mode
))
{
if
(
mode_is_float
(
mode
))
{
match_address
(
ptr
,
&
address
,
false
);
match_address
(
ptr
,
&
address
,
false
);
new_load
=
create_ldf
(
dbgi
,
block
,
address
.
ptr
,
new_mem
,
mode
,
new_load
=
create_ldf
(
dbgi
,
block
,
address
.
ptr
,
new_mem
,
mode
,
...
@@ -560,6 +564,10 @@ static ir_node *gen_Store(ir_node *node)
...
@@ -560,6 +564,10 @@ static ir_node *gen_Store(ir_node *node)
ir_node
*
new_store
=
NULL
;
ir_node
*
new_store
=
NULL
;
address_t
address
;
address_t
address
;
if
(
get_Store_unaligned
(
node
)
==
align_non_aligned
)
{
panic
(
"sparc: transformation of unaligned Stores not implemented yet"
);
}
if
(
mode_is_float
(
mode
))
{
if
(
mode_is_float
(
mode
))
{
/* TODO: variants with reg+reg address mode */
/* TODO: variants with reg+reg address mode */
match_address
(
ptr
,
&
address
,
false
);
match_address
(
ptr
,
&
address
,
false
);
...
...
ir/ir/irdump.c
View file @
8f7699e7
...
@@ -691,12 +691,12 @@ void dump_node_opcode(FILE *F, ir_node *n)
...
@@ -691,12 +691,12 @@ void dump_node_opcode(FILE *F, ir_node *n)
}
break
;
}
break
;
case
iro_Load
:
case
iro_Load
:
if
(
get_Load_align
(
n
)
==
align_non_aligned
)
if
(
get_Load_
un
align
ed
(
n
)
==
align_non_aligned
)
fprintf
(
F
,
"ua"
);
fprintf
(
F
,
"ua"
);
fprintf
(
F
,
"%s[%s]"
,
get_irn_opname
(
n
),
get_mode_name_ex
(
get_Load_mode
(
n
),
NULL
));
fprintf
(
F
,
"%s[%s]"
,
get_irn_opname
(
n
),
get_mode_name_ex
(
get_Load_mode
(
n
),
NULL
));
break
;
break
;
case
iro_Store
:
case
iro_Store
:
if
(
get_Store_align
(
n
)
==
align_non_aligned
)
if
(
get_Store_
un
align
ed
(
n
)
==
align_non_aligned
)
fprintf
(
F
,
"ua"
);
fprintf
(
F
,
"ua"
);
fprintf
(
F
,
"%s"
,
get_irn_opname
(
n
));
fprintf
(
F
,
"%s"
,
get_irn_opname
(
n
));
break
;
break
;
...
...
ir/ir/irdumptxt.c
View file @
8f7699e7
...
@@ -252,11 +252,11 @@ void dump_irnode_to_file(FILE *F, ir_node *n)
...
@@ -252,11 +252,11 @@ void dump_irnode_to_file(FILE *F, ir_node *n)
case
iro_Load
:
case
iro_Load
:
fprintf
(
F
,
" mode of loaded value: %s
\n
"
,
get_mode_name_ex
(
get_Load_mode
(
n
),
NULL
));
fprintf
(
F
,
" mode of loaded value: %s
\n
"
,
get_mode_name_ex
(
get_Load_mode
(
n
),
NULL
));
fprintf
(
F
,
" volatility: %s
\n
"
,
get_volatility_name
(
get_Load_volatility
(
n
)));
fprintf
(
F
,
" volatility: %s
\n
"
,
get_volatility_name
(
get_Load_volatility
(
n
)));
fprintf
(
F
,
" align: %s
\n
"
,
get_align_name
(
get_Load_align
(
n
)));
fprintf
(
F
,
" align: %s
\n
"
,
get_align_name
(
get_Load_
un
align
ed
(
n
)));
break
;
break
;
case
iro_Store
:
case
iro_Store
:
fprintf
(
F
,
" volatility: %s
\n
"
,
get_volatility_name
(
get_Store_volatility
(
n
)));
fprintf
(
F
,
" volatility: %s
\n
"
,
get_volatility_name
(
get_Store_volatility
(
n
)));
fprintf
(
F
,
" align: %s
\n
"
,
get_align_name
(
get_Store_align
(
n
)));
fprintf
(
F
,
" align: %s
\n
"
,
get_align_name
(
get_Store_
un
align
ed
(
n
)));
break
;
break
;
case
iro_Confirm
:
case
iro_Confirm
:
fprintf
(
F
,
" compare operation: %s
\n
"
,
get_relation_string
(
get_Confirm_relation
(
n
)));
fprintf
(
F
,
" compare operation: %s
\n
"
,
get_relation_string
(
get_Confirm_relation
(
n
)));
...
...
ir/ir/irio.c
View file @
8f7699e7
...
@@ -396,17 +396,8 @@ static void write_tarval(io_env_t *env, ir_tarval *tv)
...
@@ -396,17 +396,8 @@ static void write_tarval(io_env_t *env, ir_tarval *tv)
fputc
(
' '
,
env
->
file
);
fputc
(
' '
,
env
->
file
);
}
}
static
void
write_align
(
io_env_t
*
env
,
ir_
node
*
ir
n
)
static
void
write_align
(
io_env_t
*
env
,
ir_
align
alig
n
)
{
{
ir_align
align
;
if
(
is_Load
(
irn
))
align
=
get_Load_align
(
irn
);
else
if
(
is_Store
(
irn
))
align
=
get_Store_align
(
irn
);
else
panic
(
"Invalid optype for write_align"
);
fputs
(
get_align_name
(
align
),
env
->
file
);
fputs
(
get_align_name
(
align
),
env
->
file
);
fputc
(
' '
,
env
->
file
);
fputc
(
' '
,
env
->
file
);
}
}
...
@@ -472,17 +463,8 @@ static void write_pin_state(io_env_t *env, ir_node *irn)
...
@@ -472,17 +463,8 @@ static void write_pin_state(io_env_t *env, ir_node *irn)
fputc
(
' '
,
env
->
file
);
fputc
(
' '
,
env
->
file
);
}
}
static
void
write_volatility
(
io_env_t
*
env
,
ir_
node
*
irn
)
static
void
write_volatility
(
io_env_t
*
env
,
ir_
volatility
vol
)
{
{
ir_volatility
vol
;
if
(
is_Load
(
irn
))
vol
=
get_Load_volatility
(
irn
);
else
if
(
is_Store
(
irn
))
vol
=
get_Store_volatility
(
irn
);
else
panic
(
"Invalid optype for write_volatility"
);
fputs
(
get_volatility_name
(
vol
),
env
->
file
);
fputs
(
get_volatility_name
(
vol
),
env
->
file
);
fputc
(
' '
,
env
->
file
);
fputc
(
' '
,
env
->
file
);
}
}
...
...
ir/ir/irnode.c
View file @
8f7699e7
...
@@ -1261,55 +1261,6 @@ void set_memop_ptr(ir_node *node, ir_node *ptr)
...
@@ -1261,55 +1261,6 @@ void set_memop_ptr(ir_node *node, ir_node *ptr)
set_irn_n
(
node
,
1
,
ptr
);
set_irn_n
(
node
,
1
,
ptr
);
}
}
ir_volatility
get_Load_volatility
(
const
ir_node
*
node
)
{
assert
(
is_Load
(
node
));
return
(
ir_volatility
)
node
->
attr
.
load
.
volatility
;
}
void
set_Load_volatility
(
ir_node
*
node
,
ir_volatility
volatility
)
{
assert
(
is_Load
(
node
));
node
->
attr
.
load
.
volatility
=
volatility
;
}
ir_align
get_Load_align
(
const
ir_node
*
node
)
{
assert
(
is_Load
(
node
));
return
(
ir_align
)
node
->
attr
.
load
.
aligned
;
}
void
set_Load_align
(
ir_node
*
node
,
ir_align
align
)
{
assert
(
is_Load
(
node
));
node
->
attr
.
load
.
aligned
=
align
;
}
ir_volatility
get_Store_volatility
(
const
ir_node
*
node
)
{
assert
(
is_Store
(
node
));
return
(
ir_volatility
)
node
->
attr
.
store
.
volatility
;
}
void
set_Store_volatility
(
ir_node
*
node
,
ir_volatility
volatility
)
{
assert
(
is_Store
(
node
));
node
->
attr
.
store
.
volatility
=
volatility
;
}
ir_align
get_Store_align
(
const
ir_node
*
node
)
{
assert
(
is_Store
(
node
));
return
(
ir_align
)
node
->
attr
.
store
.
aligned
;
}
void
set_Store_align
(
ir_node
*
node
,
ir_align
align
)
{
assert
(
is_Store
(
node
));
node
->
attr
.
store
.
aligned
=
align
;
}
ir_node
**
get_Sync_preds_arr
(
ir_node
*
node
)
ir_node
**
get_Sync_preds_arr
(
ir_node
*
node
)
{
{
...
...
ir/ir/iropt.c
View file @
8f7699e7
...
@@ -5929,7 +5929,7 @@ static int node_cmp_attr_Load(const ir_node *a, const ir_node *b)
...
@@ -5929,7 +5929,7 @@ static int node_cmp_attr_Load(const ir_node *a, const ir_node *b)
/* NEVER do CSE on volatile Loads */
/* NEVER do CSE on volatile Loads */
return
1
;
return
1
;
/* do not CSE Loads with different alignment. Be conservative. */
/* do not CSE Loads with different alignment. Be conservative. */
if
(
get_Load_align
(
a
)
!=
get_Load_align
(
b
))
if
(
get_Load_
un
align
ed
(
a
)
!=
get_Load_
un
align
ed
(
b
))
return
1
;
return
1
;
return
get_Load_mode
(
a
)
!=
get_Load_mode
(
b
);
return
get_Load_mode
(
a
)
!=
get_Load_mode
(
b
);
...
@@ -5939,7 +5939,7 @@ static int node_cmp_attr_Load(const ir_node *a, const ir_node *b)
...
@@ -5939,7 +5939,7 @@ static int node_cmp_attr_Load(const ir_node *a, const ir_node *b)
static
int
node_cmp_attr_Store
(
const
ir_node
*
a
,
const
ir_node
*
b
)
static
int
node_cmp_attr_Store
(
const
ir_node
*
a
,
const
ir_node
*
b
)
{
{
/* do not CSE Stores with different alignment. Be conservative. */
/* do not CSE Stores with different alignment. Be conservative. */
if
(
get_Store_align
(
a
)
!=
get_Store_align
(
b
))
if
(
get_Store_
un
align
ed
(
a
)
!=
get_Store_
un
align
ed
(
b
))
return
1
;
return
1
;
/* NEVER do CSE on volatile Stores */
/* NEVER do CSE on volatile Stores */
...
...
ir/ir/irtypes.h
View file @
8f7699e7
...
@@ -243,7 +243,7 @@ typedef struct cast_attr {
...
@@ -243,7 +243,7 @@ typedef struct cast_attr {
typedef
struct
load_attr
{
typedef
struct
load_attr
{
except_attr
exc
;
/**< The exception attribute. MUST be the first one. */
except_attr
exc
;
/**< The exception attribute. MUST be the first one. */
unsigned
volatility
:
1
;
/**< The volatility of this Load operation. */
unsigned
volatility
:
1
;
/**< The volatility of this Load operation. */
unsigned
aligned
:
1
;
/**< The align attribute of this Load operation. */
unsigned
un
aligned
:
1
;
/**< The align attribute of this Load operation. */
ir_mode
*
mode
;
/**< The mode of this Load operation. */
ir_mode
*
mode
;
/**< The mode of this Load operation. */
}
load_attr
;
}
load_attr
;
...
@@ -251,7 +251,7 @@ typedef struct load_attr {
...
@@ -251,7 +251,7 @@ typedef struct load_attr {
typedef
struct
store_attr
{
typedef
struct
store_attr
{
except_attr
exc
;
/**< the exception attribute. MUST be the first one. */
except_attr
exc
;
/**< the exception attribute. MUST be the first one. */
unsigned
volatility
:
1
;
/**< The volatility of this Store operation. */
unsigned
volatility
:
1
;
/**< The volatility of this Store operation. */
unsigned
aligned
:
1
;
/**< The align attribute of this Store operation. */
unsigned
un
aligned
:
1
;
/**< The align attribute of this Store operation. */
}
store_attr
;
}
store_attr
;
typedef
struct
phi_attr
{
typedef
struct
phi_attr
{
...
...
ir/lower/lower_hl.c
View file @
8f7699e7
...
@@ -496,24 +496,6 @@ static void lower_bitfields_stores(ir_node *store)
...
@@ -496,24 +496,6 @@ static void lower_bitfields_stores(ir_node *store)
set_Store_ptr
(
store
,
ptr
);
set_Store_ptr
(
store
,
ptr
);
}
/* lower_bitfields_stores */
}
/* lower_bitfields_stores */
/**
* Lowers unaligned Loads.
*/
static
void
lower_unaligned_Load
(
ir_node
*
load
)
{
(
void
)
load
;
/* NYI */
}
/**
* Lowers unaligned Stores
*/
static
void
lower_unaligned_Store
(
ir_node
*
store
)
{
(
void
)
store
;
/* NYI */
}
/**
/**
* lowers IR-nodes, called from walker
* lowers IR-nodes, called from walker
*/
*/
...
@@ -527,14 +509,6 @@ static void lower_irnode(ir_node *irn, void *env)
...
@@ -527,14 +509,6 @@ static void lower_irnode(ir_node *irn, void *env)
case
iro_SymConst
:
case
iro_SymConst
:
lower_symconst
(
irn
);
lower_symconst
(
irn
);
break
;
break
;
case
iro_Load
:
if
(
env
!=
NULL
&&
get_Load_align
(
irn
)
==
align_non_aligned
)
lower_unaligned_Load
(
irn
);
break
;
case
iro_Store
:
if
(
env
!=
NULL
&&
get_Store_align
(
irn
)
==
align_non_aligned
)
lower_unaligned_Store
(
irn
);
break
;
case
iro_Cast
:
case
iro_Cast
:
exchange
(
irn
,
get_Cast_op
(
irn
));
exchange
(
irn
,
get_Cast_op
(
irn
));
break
;
break
;
...
...
scripts/gen_ir.py
View file @
8f7699e7
...
@@ -252,7 +252,6 @@ def preprocess_node(node):
...
@@ -252,7 +252,6 @@ def preprocess_node(node):
if
"init"
in
attr
:
if
"init"
in
attr
:
continue
continue
arguments
.
append
(
attr
)
arguments
.
append
(
attr
)
#arguments.append(prepare_attr(attr))
# dynamic pin state means more constructor arguments
# dynamic pin state means more constructor arguments
if
is_dynamic_pinned
(
node
):
if
is_dynamic_pinned
(
node
):
...
...
scripts/gen_ir_io.py
View file @
8f7699e7
...
@@ -53,26 +53,25 @@ def get_io_type(type, attrname, node):
...
@@ -53,26 +53,25 @@ def get_io_type(type, attrname, node):
exportcmd
=
"write_mode(env, %(val)s);"
exportcmd
=
"write_mode(env, %(val)s);"
elif
type
==
"ir_entity*"
:
elif
type
==
"ir_entity*"
:
importcmd
=
"ir_entity *%s = read_entity(env);"
%
attrname
importcmd
=
"ir_entity *%s = read_entity(env);"
%
attrname
exportcmd
=
""
"write_entity_ref(env, %(val)s);"
""
exportcmd
=
"write_entity_ref(env, %(val)s);"
elif
type
==
"ir_type*"
:
elif
type
==
"ir_type*"
:
importcmd
=
"ir_type *%s = read_type(env);"
%
attrname
importcmd
=
"ir_type *%s = read_type(env);"
%
attrname
exportcmd
=
""
"write_type_ref(env, %(val)s);"
""
exportcmd
=
"write_type_ref(env, %(val)s);"
elif
type
==
"long"
and
node
.
name
==
"Proj"
:
elif
type
==
"long"
and
node
.
name
==
"Proj"
:
importcmd
=
"long %s = read_long(env);"
%
attrname
importcmd
=
"long %s = read_long(env);"
%
attrname
exportcmd
=
""
"write_long(env, %(val)s);"
""
exportcmd
=
"write_long(env, %(val)s);"
elif
type
==
"ir_relation"
or
type
==
"ir_where_alloc"
:
elif
type
==
"ir_relation"
or
type
==
"ir_where_alloc"
:
importcmd
=
"%s %s = (%s) read_long(env);"
%
(
type
,
attrname
,
type
)
importcmd
=
"%s %s = (%s) read_long(env);"
%
(
type
,
attrname
,
type
)
exportcmd
=
"""write_long(env, (long) %(val)s);"""
exportcmd
=
"write_long(env, (long) %(val)s);"
elif
type
==
"ir_cons_flags"
and
node
.
name
==
"Store"
:
elif
type
==
"ir_align"
:
importcmd
=
"ir_align %s = read_align(env);"
%
attrname
exportcmd
=
"write_align(env, %(val)s);"
elif
type
==
"ir_volatility"
:
importcmd
=
"ir_volatility %s = read_volatility(env);"
%
attrname
exportcmd
=
"write_volatility(env, %(val)s);"
elif
type
==
"ir_cons_flags"
:
importcmd
=
"ir_cons_flags %s = get_cons_flags(env);"
%
attrname
importcmd
=
"ir_cons_flags %s = get_cons_flags(env);"
%
attrname
exportcmd
=
"""write_pin_state(env, irn);
exportcmd
=
""
# can't really export cons_flags
write_volatility(env, irn);
write_align(env, irn);"""
elif
type
==
"ir_cons_flags"
and
node
.
name
==
"Load"
:
importcmd
=
"ir_cons_flags %s = get_cons_flags(env);"
%
attrname
exportcmd
=
"""write_pin_state(env, irn);
write_volatility(env, irn);
write_align(env, irn);"""
elif
type
==
"op_pin_state"
:
elif
type
==
"op_pin_state"
:
importcmd
=
"op_pin_state %s = read_pin_state(env);"
%
attrname
importcmd
=
"op_pin_state %s = read_pin_state(env);"
%
attrname
exportcmd
=
"write_pin_state(env, irn);"
exportcmd
=
"write_pin_state(env, irn);"
...
@@ -87,13 +86,13 @@ def get_io_type(type, attrname, node):
...
@@ -87,13 +86,13 @@ def get_io_type(type, attrname, node):
exportcmd
=
"write_cond_jmp_predicate(env, irn);"
exportcmd
=
"write_cond_jmp_predicate(env, irn);"
elif
type
==
"int"
:
elif
type
==
"int"
:
importcmd
=
"int %s = read_int(env);"
%
attrname
importcmd
=
"int %s = read_int(env);"
%
attrname
exportcmd
=
""
"write_int(env, %(val)s);"
""
exportcmd
=
"write_int(env, %(val)s);"
elif
type
==
"unsigned"
:
elif
type
==
"unsigned"
:
importcmd
=
"unsigned %s = read_unsigned(env);"
%
attrname
importcmd
=
"unsigned %s = read_unsigned(env);"
%
attrname
exportcmd
=
""
"write_unsigned(env, %(val)s);"
""
exportcmd
=
"write_unsigned(env, %(val)s);"
elif
type
==
"long"
:
elif
type
==
"long"
:
importcmd
=
"long %s = read_long(env);"
%
attrname
importcmd
=
"long %s = read_long(env);"
%
attrname
exportcmd
=
""
"write_long(env, %(val)s);"
""
exportcmd
=
"write_long(env, %(val)s);"
else
:
else
:
warning
(
"cannot generate import/export for node %s: unsupported attribute type: %s"
%
(
node
.
name
,
type
))
warning
(
"cannot generate import/export for node %s: unsupported attribute type: %s"
%
(
node
.
name
,
type
))
importcmd
=
"""// BAD: %s %s
importcmd
=
"""// BAD: %s %s
...
...
scripts/ir_spec.py
View file @
8f7699e7
...
@@ -587,9 +587,20 @@ class Load(Op):
...
@@ -587,9 +587,20 @@ class Load(Op):
dict
(
dict
(
type
=
"ir_mode*"
,
type
=
"ir_mode*"
,
name
=
"mode"
,
name
=
"mode"
,
java_name
=
"load_mode"
,
comment
=
"mode of the value to be loaded"
,
comment
=
"mode of the value to be loaded"
,
),
),
dict
(
type
=
"ir_volatility"
,
name
=
"volatility"
,
comment
=
"volatile loads are a visible side-effect and may not be optimized"
,
init
=
"flags & cons_volatile ? volatility_is_volatile : volatility_non_volatile"
,
),
dict
(
type
=
"ir_align"
,
name
=
"unaligned"
,
comment
=
"pointers to unaligned loads don't need to respect the load-mode/type alignments"
,
init
=
"flags & cons_unaligned ? align_non_aligned : align_is_aligned"
,
),
]
]
attr_struct
=
"load_attr"
attr_struct
=
"load_attr"
constructor_args
=
[
constructor_args
=
[
...
@@ -600,10 +611,6 @@ class Load(Op):
...
@@ -600,10 +611,6 @@ class Load(Op):
),
),
]
]
pinned_init
=
"flags & cons_floats ? op_pin_state_floats : op_pin_state_pinned"
pinned_init
=
"flags & cons_floats ? op_pin_state_floats : op_pin_state_pinned"
init
=
'''
res->attr.load.volatility = flags & cons_volatile ? volatility_is_volatile : volatility_non_volatile;
res->attr.load.aligned = flags & cons_unaligned ? align_non_aligned : align_is_aligned;
'''
class
Minus
(
Unop
):
class
Minus
(
Unop
):
"""returns the difference between its operands"""
"""returns the difference between its operands"""
...
@@ -830,6 +837,20 @@ class Store(Op):
...
@@ -830,6 +837,20 @@ class Store(Op):
pinned
=
"exception"
pinned
=
"exception"
attr_struct
=
"store_attr"
attr_struct
=
"store_attr"
pinned_init
=
"flags & cons_floats ? op_pin_state_floats : op_pin_state_pinned"
pinned_init
=
"flags & cons_floats ? op_pin_state_floats : op_pin_state_pinned"
attrs
=
[
dict
(
type
=
"ir_volatility"
,
name
=
"volatility"
,
comment
=
"volatile stores are a visible side-effect and may not be optimized"
,
init
=
"flags & cons_volatile ? volatility_is_volatile : volatility_non_volatile"
,
),
dict
(
type
=
"ir_align"
,
name
=
"unaligned"
,
comment
=
"pointers to unaligned stores don't need to respect the load-mode/type alignments"
,
init
=
"flags & cons_unaligned ? align_non_aligned : align_is_aligned"
,
),
]
constructor_args
=
[
constructor_args
=
[
dict
(
dict
(
type
=
"ir_cons_flags"
,
type
=
"ir_cons_flags"
,
...
@@ -837,10 +858,6 @@ class Store(Op):
...
@@ -837,10 +858,6 @@ class Store(Op):
comment
=
"specifies alignment, volatility and pin state"
,
comment
=
"specifies alignment, volatility and pin state"
,
),
),
]
]
init
=
'''
res->attr.store.volatility = flags & cons_volatile ? volatility_is_volatile : volatility_non_volatile;
res->attr.store.aligned = flags & cons_unaligned ? align_non_aligned : align_is_aligned;
'''
class
Sub
(
Binop
):
class
Sub
(
Binop
):
"""returns the difference of its operands"""
"""returns the difference of its operands"""
...
...
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