projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ea93457
)
create register slots in attributes on irg obstack
author
Christian Würdig
<chriswue@ipd.info.uni-karlsruhe.de>
Fri, 24 Mar 2006 15:06:56 +0000
(15:06 +0000)
committer
Christian Würdig
<chriswue@ipd.info.uni-karlsruhe.de>
Fri, 24 Mar 2006 15:06:56 +0000
(15:06 +0000)
fixed some bugs
ir/be/ia32/bearch_ia32.c
patch
|
blob
|
history
ir/be/ia32/ia32_new_nodes.c
patch
|
blob
|
history
ir/be/ia32/ia32_new_nodes.h
patch
|
blob
|
history
ir/be/ia32/ia32_transform.c
patch
|
blob
|
history
diff --git
a/ir/be/ia32/bearch_ia32.c
b/ir/be/ia32/bearch_ia32.c
index
f310a6e
..
9b7a552
100644
(file)
--- a/
ir/be/ia32/bearch_ia32.c
+++ b/
ir/be/ia32/bearch_ia32.c
@@
-775,6
+775,7
@@
static void *ia32_init(void) {
ia32_register_init(isa);
ia32_create_opcodes();
ia32_register_init(isa);
ia32_create_opcodes();
+ ia32_register_copy_attr_func();
isa->regs_16bit = pmap_create();
isa->regs_8bit = pmap_create();
isa->regs_16bit = pmap_create();
isa->regs_8bit = pmap_create();
diff --git
a/ir/be/ia32/ia32_new_nodes.c
b/ir/be/ia32/ia32_new_nodes.c
index
5e8c802
..
438d5bc
100644
(file)
--- a/
ir/be/ia32/ia32_new_nodes.c
+++ b/
ir/be/ia32/ia32_new_nodes.c
@@
-33,7
+33,6
@@
#include "ia32_nodes_attr.h"
#include "ia32_new_nodes.h"
#include "gen_ia32_regalloc_if.h"
#include "ia32_nodes_attr.h"
#include "ia32_new_nodes.h"
#include "gen_ia32_regalloc_if.h"
-#include "gen_ia32_new_nodes.h"
#ifdef obstack_chunk_alloc
# undef obstack_chunk_alloc
#ifdef obstack_chunk_alloc
# undef obstack_chunk_alloc
@@
-1060,7
+1059,8
@@
void alloc_ia32_reg_slots(ir_node *node, int num) {
ia32_attr_t *attr = get_ia32_attr(node);
if (num) {
ia32_attr_t *attr = get_ia32_attr(node);
if (num) {
- attr->slots = xcalloc(num, sizeof(attr->slots[0]));
+ attr->slots = NEW_ARR_D(arch_register_t *, get_irg_obstack(get_irn_irg(node)), num);
+ memset(attr->slots, 0, sizeof(attr->slots[0]) * num);
}
else {
attr->slots = NULL;
}
else {
attr->slots = NULL;
@@
-1117,6
+1117,9
@@
static void ia32_copy_attr(const ir_node *old_node, ir_node *new_node) {
memcpy((void *)attr_new->slots, (void *)attr_old->slots, sizeof(attr_new->slots[0]) * n_res);
}
memcpy((void *)attr_new->slots, (void *)attr_old->slots, sizeof(attr_new->slots[0]) * n_res);
}
+/**
+ * Registers the ia32_copy_attr function for all ia32 opcodes.
+ */
void ia32_register_copy_attr_func(void) {
unsigned i, f = get_ia32_opcode_first(), l = get_ia32_opcode_last();
void ia32_register_copy_attr_func(void) {
unsigned i, f = get_ia32_opcode_first(), l = get_ia32_opcode_last();
diff --git
a/ir/be/ia32/ia32_new_nodes.h
b/ir/be/ia32/ia32_new_nodes.h
index
3e6e805
..
9948d95
100644
(file)
--- a/
ir/be/ia32/ia32_new_nodes.h
+++ b/
ir/be/ia32/ia32_new_nodes.h
@@
-371,6
+371,11
@@
void alloc_ia32_reg_slots(ir_node *node, int num);
void init_ia32_attributes(ir_node *node, arch_irn_flags_t flags, const ia32_register_req_t **in_reqs, \
const ia32_register_req_t **out_reqs, int n_res);
void init_ia32_attributes(ir_node *node, arch_irn_flags_t flags, const ia32_register_req_t **in_reqs, \
const ia32_register_req_t **out_reqs, int n_res);
+/**
+ * Registers the ia32_copy_attr function for all ia32 opcodes.
+ */
+void ia32_register_copy_attr_func(void);
+
/* Include the generated headers */
#include "gen_ia32_new_nodes.h"
/* Include the generated headers */
#include "gen_ia32_new_nodes.h"
diff --git
a/ir/be/ia32/ia32_transform.c
b/ir/be/ia32/ia32_transform.c
index
e4fc552
..
17e7855
100644
(file)
--- a/
ir/be/ia32/ia32_transform.c
+++ b/
ir/be/ia32/ia32_transform.c
@@
-1463,6
+1463,7
@@
static ir_node *gen_Conv(ia32_transform_env_t *env, ir_node *op) {
ir_graph *irg = env->irg;
ir_mode *src_mode = get_irn_mode(op);
ir_mode *tgt_mode = env->mode;
ir_graph *irg = env->irg;
ir_mode *src_mode = get_irn_mode(op);
ir_mode *tgt_mode = env->mode;
+ int src_bits = get_mode_size_bits(src_mode);
int tgt_bits = get_mode_size_bits(tgt_mode);
ir_node *block = env->block;
ir_node *new_op = NULL;
int tgt_bits = get_mode_size_bits(tgt_mode);
ir_node *block = env->block;
ir_node *new_op = NULL;
@@
-1495,7
+1496,7
@@
static ir_node *gen_Conv(ia32_transform_env_t *env, ir_node *op) {
proj = new_rd_Proj(dbg, irg, block, new_op, mode_Is, 0);
proj = new_rd_Proj(dbg, irg, block, new_op, mode_Is, 0);
- if (tgt_bits == 8) {
+ if (tgt_bits == 8
|| src_bits == 8
) {
new_op = new_rd_ia32_Conv_I2I8Bit(dbg, irg, block, noreg, noreg, proj, nomem, mode_T);
}
else {
new_op = new_rd_ia32_Conv_I2I8Bit(dbg, irg, block, noreg, noreg, proj, nomem, mode_T);
}
else {
@@
-1519,7
+1520,7
@@
static ir_node *gen_Conv(ia32_transform_env_t *env, ir_node *op) {
}
else {
DB((mod, LEVEL_1, "create Conv(int, int) ...", src_mode, tgt_mode));
}
else {
DB((mod, LEVEL_1, "create Conv(int, int) ...", src_mode, tgt_mode));
- if (tgt_bits == 8) {
+ if (tgt_bits == 8
|| src_bits == 8
) {
new_op = new_rd_ia32_Conv_I2I8Bit(dbg, irg, block, noreg, noreg, op, nomem, mode_T);
}
else {
new_op = new_rd_ia32_Conv_I2I8Bit(dbg, irg, block, noreg, noreg, op, nomem, mode_T);
}
else {