-/**
- * Check if the given register is caller save, ie. must be save by the caller.
- */
-static inline bool arch_register_is_caller_save(
- const arch_env_t *arch_env,
- const arch_register_t *reg)
-{
- if (arch_env->impl->register_saved_by)
- return arch_env->impl->register_saved_by(reg, /*callee=*/0);
- return false;
-}
-
-/**
- * Iterate over all values defined by an instruction.
- * Only looks at values in a certain register class where the requirements
- * are not marked as ignore.
- * Executes @p code for each definition.
- */
-#define be_foreach_definition_(node, cls, value, code) \
- do { \
- if (get_irn_mode(node) == mode_T) { \
- const ir_edge_t *edge_; \
- foreach_out_edge(node, edge_) { \
- const arch_register_req_t *req_; \
- value = get_edge_src_irn(edge_); \
- req_ = arch_get_register_req_out(value); \
- if (req_->cls != cls) \
- continue; \
- code \
- } \
- } else { \
- const arch_register_req_t *req_ = arch_get_register_req_out(node); \
- value = node; \
- if (req_->cls == cls) { \
- code \
- } \
- } \
- } while (0)
-
-#define be_foreach_definition(node, cls, value, code) \
- be_foreach_definition_(node, cls, value, \
- if (req_->type & arch_register_req_type_ignore) \
- continue; \
- code \
- )