+ }
+ break;
+
+ case dump_node_mode_txt:
+ /* mode isn't relevant in the backend */
+ break;
+
+ case dump_node_nodeattr_txt:
+ /* TODO: dump shift modifiers */
+ break;
+
+ case dump_node_info_txt:
+ arch_dump_reqs_and_registers(F, n);
+
+ if (has_load_store_attr(n)) {
+ const arm_load_store_attr_t *attr
+ = get_arm_load_store_attr_const(n);
+ ir_fprintf(F, "load_store_mode = %+F\n", attr->load_store_mode);
+ ir_fprintf(F, "entity = %+F\n", attr->entity);
+ fprintf(F, "offset = %ld\n", attr->offset);
+ fprintf(F, "is_frame_entity = %s\n",
+ attr->is_frame_entity ? "yes" : "no");
+ fprintf(F, "entity_sign = %s\n",
+ attr->entity_sign ? "yes" : "no");
+ }
+ if (has_shifter_operand(n)) {
+ const arm_shifter_operand_t *attr
+ = get_arm_shifter_operand_attr_const(n);
+ switch (attr->shift_modifier) {
+ case ARM_SHF_REG:
+ break;
+ case ARM_SHF_IMM:
+ fprintf(F, "modifier = imm %d ror %d\n",
+ attr->immediate_value, attr->shift_immediate);
+ break;
+ case ARM_SHF_ASR_IMM:
+ fprintf(F, "modifier = V >>s %d\n", attr->shift_immediate);
+ break;
+ case ARM_SHF_ASR_REG:
+ fprintf(F, "modifier = V >>s R\n");
+ break;
+ case ARM_SHF_LSL_IMM:
+ fprintf(F, "modifier = V << %d\n", attr->shift_immediate);
+ break;
+ case ARM_SHF_LSL_REG:
+ fprintf(F, "modifier = V << R\n");
+ break;
+ case ARM_SHF_LSR_IMM:
+ fprintf(F, "modifier = V >> %d\n", attr->shift_immediate);
+ break;
+ case ARM_SHF_LSR_REG:
+ fprintf(F, "modifier = V >> R\n");
+ break;
+ case ARM_SHF_ROR_IMM:
+ fprintf(F, "modifier = V ROR %d\n", attr->shift_immediate);
+ break;
+ case ARM_SHF_ROR_REG:
+ fprintf(F, "modifier = V ROR R\n");
+ break;
+ case ARM_SHF_RRX:
+ fprintf(F, "modifier = RRX\n");
+ break;
+ default:
+ case ARM_SHF_INVALID:
+ fprintf(F, "modifier = INVALID SHIFT MODIFIER\n");
+ break;