* @file
* @brief declarations for ARM node attributes
* @author Oliver Richter, Tobias Gneist, Michael Beck
- * @version $Id$
*/
#ifndef FIRM_BE_ARM_ARM_NODES_ATTR_H
#define FIRM_BE_ARM_ARM_NODES_ATTR_H
#include "firm_types.h"
#include "irnode_t.h"
-#include "../bearch.h"
+#include "bearch.h"
/**
* Possible ARM "shifter operand" addressing mode types.
*/
-typedef enum _arm_shift_modifier {
+typedef enum arm_shift_modifier_t {
ARM_SHF_INVALID, /**< invalid shift */
ARM_SHF_REG, /**< simple register operand */
ARM_SHF_IMM, /**< immediate operand with implicit ROR */
ARM_SHF_ROR_IMM, /**< rotate right */
ARM_SHF_ROR_REG, /**< rotate right */
ARM_SHF_RRX, /**< rotate right through carry bits */
-} arm_shift_modifier;
-
-/** fpa immediate bit */
-#define ARM_FPA_IMM (1 << 3) /**< fpa floating point immediate */
-
-#define ARM_GET_FPA_IMM(attr) ((attr)->instr_fl & ARM_FPA_IMM)
-#define ARM_SET_FPA_IMM(attr) ((attr)->instr_fl |= ARM_FPA_IMM)
-#define ARM_CLR_FPA_IMM(attr) ((attr)->instr_fl &= ~ARM_FPA_IMM)
+} arm_shift_modifier_t;
/** Encoding for fpa immediates */
enum fpa_immediates {
};
/** Generic ARM node attributes. */
-typedef struct _arm_attr_t {
- except_attr exc; /**< the exception attribute. MUST be the first one. */
-
- const arch_register_req_t **in_req; /**< register requirements for arguments */
-
- ir_mode *op_mode; /**< operation mode if different from node's mode (used for fpa nodes) */
- unsigned instr_fl; /**< deprecated (was sometimes used for shift modifiers) */
- bool is_load_store : 1;
+typedef struct arm_attr_t {
+ except_attr exc; /**< the exception attribute. MUST be the first one. */
+ bool is_load_store : 1; /**< if set, this is a load or store instruction */
} arm_attr_t;
/**
* "data processing operands" also called "shifter operand" addressing modes
*/
typedef struct arm_shifter_operand_t {
- arm_attr_t base;
- arm_shift_modifier shift_modifier;
- unsigned char immediate_value;
- unsigned char shift_immediate;
+ arm_attr_t base;
+ arm_shift_modifier_t shift_modifier;
+ unsigned char immediate_value;
+ unsigned char shift_immediate;
} arm_shifter_operand_t;
typedef struct arm_cmp_attr_t {
} arm_load_store_attr_t;
/** Attributes for a SymConst */
-typedef struct _arm_SymConst_attr_t {
+typedef struct arm_SymConst_attr_t {
arm_attr_t base;
ir_entity *entity;
int fp_offset;
} arm_SymConst_attr_t;
/** Attributes for a CondJmp */
-typedef struct _arm_CondJmp_attr_t {
+typedef struct arm_CondJmp_attr_t {
arm_attr_t base;
- int proj_num;
+ ir_relation relation;
} arm_CondJmp_attr_t;
/** Attributes for a SwitchJmp */
-typedef struct _arm_SwitchJmp_attr_t {
- arm_attr_t base;
- int n_projs;
- long default_proj_num;
+typedef struct arm_SwitchJmp_attr_t {
+ arm_attr_t base;
+ const ir_switch_table *table;
} arm_SwitchJmp_attr_t;
/** CopyB attributes */
-typedef struct {
+typedef struct arm_CopyB_attr_t {
arm_attr_t base;
unsigned size;
} arm_CopyB_attr_t;
-/** Attributes for a fpaConst */
-typedef struct _arm_fpaConst_attr_t {
+/** Attributes for a fConst */
+typedef struct arm_fConst_attr_t {
arm_attr_t base;
- tarval *tv; /**< the tarval representing the FP const */
-} arm_fpaConst_attr_t;
+ ir_tarval *tv; /**< the tarval representing the FP const */
+} arm_fConst_attr_t;
-/**
- * Return the fpa immediate from the encoding.
- */
-const char *arm_get_fpa_imm_name(long imm_value);
+/** attributes for floatingpoint arithmetic operations */
+typedef struct arm_farith_attr_t {
+ arm_attr_t base;
+ ir_mode *mode; /* operation mode */
+} arm_farith_attr_t;
#define CAST_ARM_ATTR(type,ptr) ((type *)(ptr))
#define CONST_CAST_ARM_ATTR(type,ptr) ((const type *)(ptr))