From 691de77e1607bb2e860338389466a0f9b7b90b16 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20W=C3=BCrdig?= Date: Tue, 21 Feb 2006 10:58:19 +0000 Subject: [PATCH] new attributes added fixed include --- ir/be/ia32/ia32_new_nodes.c | 18 +++++++++++++++++- ir/be/ia32/ia32_new_nodes.h | 10 ++++++++++ ir/be/ia32/ia32_nodes_attr.h | 16 ++++++++++++++-- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/ir/be/ia32/ia32_new_nodes.c b/ir/be/ia32/ia32_new_nodes.c index 1182017a6..a0f2769aa 100644 --- a/ir/be/ia32/ia32_new_nodes.c +++ b/ir/be/ia32/ia32_new_nodes.c @@ -12,7 +12,7 @@ #ifdef _WIN32 #include #else -#include +#include #endif #include @@ -405,6 +405,22 @@ void set_ia32_am_support(ir_node *node, ia32_am_type_t am_tp) { attr->am_support = am_tp; } +/** + * Gets the addrmode flavour of an ia32 node + */ +ia32_am_flavour_t get_ia32_am_support(const ir_node *node) { + ia32_attr_t *attr = get_ia32_attr(node); + return attr->am_flavour; +} + +/** + * Sets the addrmode flavour of an ia32 node + */ +void set_ia32_am_flavour(ir_node *node, ia32_am_flavour_t am_flavour) { + ia32_attr_t *attr = get_ia32_attr(node); + attr->am_support = am_flavour; +} + /** * Joins all offsets to one string with adds. */ diff --git a/ir/be/ia32/ia32_new_nodes.h b/ir/be/ia32/ia32_new_nodes.h index c0b4b26c5..e8886c239 100644 --- a/ir/be/ia32/ia32_new_nodes.h +++ b/ir/be/ia32/ia32_new_nodes.h @@ -47,6 +47,16 @@ void set_ia32_op_type(ir_node *node, ia32_op_type_t tp); */ ia32_am_type_t get_ia32_am_support(const ir_node *node); +/** + * Gets the addrmode flavour of an ia32 node + */ +ia32_am_flavour_t get_ia32_am_support(const ir_node *node); + +/** + * Sets the addrmode flavour of an ia32 node + */ +void set_ia32_am_flavour(ir_node *node, ia32_am_flavour_t am_flavour); + /** * Sets the supported addrmode of an ia32 node */ diff --git a/ir/be/ia32/ia32_nodes_attr.h b/ir/be/ia32/ia32_nodes_attr.h index 9c7e7e72d..96c9e9798 100644 --- a/ir/be/ia32/ia32_nodes_attr.h +++ b/ir/be/ia32/ia32_nodes_attr.h @@ -16,14 +16,26 @@ typedef enum { ia32_am_Full = 3 /**<< full addmode support */ } ia32_am_type_t; +/** + * Different AM types: + * O - Offset is set + * B - Base is set + * I - Index is set + * S - Scale is set + */ +typedef enum { + ia32_am_N = 0, ia32_am_O, ia32_am_B, ia32_am_I, ia32_am_IS, ia32_am_OB, ia32_am_OI, ia32_am_OIS, ia32_am_OBIS +} ia32_am_flavour_t; + typedef struct _ia32_register_req_t { const arch_register_req_t req; int pos; /**<< in case of "should be same/different" we need to remember the pos to get the irn */ } ia32_register_req_t; typedef struct _ia32_attr_t { - ia32_op_type_t tp; /**<< ia32 node type */ - ia32_am_type_t am_support; /**<< indicates addrmode type supported by this node */ + ia32_op_type_t tp; /**<< ia32 node type */ + ia32_am_type_t am_support; /**<< indicates addrmode type supported by this node */ + ia32_am_flavour_t am_flavour; /**<< the concrete addrmode characteristics */ struct obstack *am_offs; /**<< offsets for AddrMode */ int am_scale; /**<< addrmode scale for index register */ -- 2.20.1