- projs[get_Proj_proj(proj)] = proj;
- }
- assert(default_block != NULL);
-
- /*
- CMP %1S, n_projs - 1
- BHI default
- */
-
- be_emit_cstring(env->emit, "\tcmp ");
- arm_emit_source_register(env, irn, 0);
- be_emit_irprintf(env->emit, ", #%u", n_projs - 1);
- be_emit_finish_line_gas(env->emit, irn);
-
- be_emit_cstring(env->emit, "\tbhi ");
- arm_emit_block_label(env, default_block);
- be_emit_finish_line_gas(env->emit, NULL);
-
- /*
- LDR %r12, .TABLE_X_START
- ADD %r12, %r12, [%1S, LSL #2]
- LDR %r15, %r12
- */
-
- be_emit_irprintf(env->emit, "\tldr %%r12, TABLE_%d_START", block_nr);
- be_emit_finish_line_gas(env->emit, NULL);
-
- be_emit_irprintf(env->emit, "\tadd %%r12, %%r12, ");
- arm_emit_source_register(env, irn, 0);
- be_emit_cstring(env->emit, ", LSL #2");
- be_emit_finish_line_gas(env->emit, NULL);
-
- be_emit_cstring(env->emit, "\tldr %r15, [%r12, #0]");
- be_emit_finish_line_gas(env->emit, NULL);
-
- be_emit_irprintf(env->emit, "TABLE_%d_START:\n\t.word\tTABLE_%d", block_nr, block_nr);
- be_emit_finish_line_gas(env->emit, NULL);
- be_emit_irprintf(env->emit, "\t.align 2");
- be_emit_finish_line_gas(env->emit, NULL);
- be_emit_irprintf(env->emit, "TABLE_%d:", block_nr);
- be_emit_finish_line_gas(env->emit, NULL);
-
- for (i = 0; i < n_projs; ++i) {
- ir_node *block;
- proj = projs[i];
- if ( proj ) {
- block = get_irn_link(proj);
- } else {
- block = get_irn_link(projs[get_arm_SwitchJmp_default_proj_num(irn)]);
- }
- be_emit_cstring(env->emit, "\t.word\t");
- arm_emit_block_label(env, block);
- be_emit_finish_line_gas(env->emit, NULL);
- }
- be_emit_irprintf(env->emit, "\t.align 2\n");
- be_emit_finish_line_gas(env->emit, NULL);
- xfree(projs);