-/*
- * Size of each operand type which should be allocated in an irn.
- * Keep this list up to date with the arch_operand_type_t enum.
- */
-static const size_t operand_sizes[] = {
-#define ARCH_OPERAND_TYPE(name,size_in_irn) size_in_irn,
-#include "bearch_operand_types.def"
-#undef ARCH_OPERAND_TYPE
- 0
-};
-
-/**
- * Determine the amount of bytes which has to be extra allocated when a
- * new ir node is made from a insn format.
- * This size depends on the operands specified in the insn format.
- * @param fmt The instruction format.
- * @return The number of bytes which the operands of an instruction
- * will need in an ir node.
- */
-static INLINE int arch_get_operands_size(const arch_insn_format_t *fmt)
-{
- int i, res = 0;
-
- for(i = 0; i < fmt->n_in + fmt->n_out; ++i) {
- arch_operand_type_t type = fmt->operands[i].type;
-
- assert(type > arch_operand_type_invalid && type < arch_operand_type_last);
- res += operand_sizes[type];
+extern void arch_perform_memory_operand(const arch_env_t *env, ir_node *irn, ir_node *reload, unsigned int i) {
+ const arch_irn_ops_t *ops = get_irn_ops(env, irn);
+ if(ops->impl->perform_memory_operand) {
+ ops->impl->perform_memory_operand(ops, irn, reload, i);
+ } else {
+ return;