This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] New option for automatically generating IT blocks


Hi,
	I'm writing again to say that I'm still working on this, and will provide a new patch soon.

The patch I provided was OK, but the new one replaces the -mauto-it option with one more generic (-mimplicit-it=[mode]), where validations are extended to ARM mode.

I'm sorry to ask for review and then undo so many times, I'm just working actively on this on a backlog of issues; reviewing and eventually committing the patch will be a good time point once the command line interface of this feature is stabilized (i.e. next patch).

Daniel.

Daniel Gutson wrote:
Hi Richard,
in this new version of the patch, the IT FSM data is stored in the section, so changing sections in the middle of IT blocks generates the right code.


You might want to look at the test cases (arm-it-auto-*).

Please commit this for me if it's OK, since I don't have write access, or let me know any other concern.

Thanks,
    Daniel.

    gas/
    * config/tc-arm.c (do_automatic_it): New variable.
    (it_instruction_type): New enum.
    (arm_it): New field.
    (it_state): New enum.
    (now_it): New macro.
    (now_it_compatible): New function.
    (conditional_insn): New function.
    (set_it_insn_type): New macro.
    (set_it_insn_type_last): New macro.
    (do_t_add_sub): Call automatic IT machinery functions.
    (do_t_arit3): Likewise.
    (do_t_arit3c): Likewise.
    (do_t_blx): Likewise.
    (do_t_branch): Likewise.
    (do_t_bkpt): Likewise.
    (do_t_branch23): Likewise.
    (do_t_bx): Likewise.
    (do_t_bxj): Likewise.
    (do_t_cps): Likewise.
    (do_t_cpsi): Likewise.
    (do_t_cbz): Likewise.
    (do_t_it): Likewise.
    (encode_thumb2_ldmstm): Likewise.
    (do_t_ldst): Likewise.
    (do_t_mov_cmp): Likewise.
    (do_t_mvn_tst): Likewise.
    (do_t_mul): Likewise.
    (do_t_neg): Likewise.
    (do_t_setend): Likewise.
    (do_t_shift): Likewise.
    (do_t_tb): Likewise.
    (output_it_inst): New function.
    (new_automatic_it_block): New function.
    (close_automatic_it_block): New function.
    (now_it_add_mask): New function.
    (it_fsm_pre_encode): New function.
    (handle_it_state): New function.
    (it_fsm_post_encode): New function.
    (force_automatic_it_block_close): New function.
    (in_it_block): New function.
    (md_assemble): Call automatic IT block machinery functions.
    (arm_frob_label): Likewise.
    (arm_opts): New element.
    * config/tc-arm.h (it_state): New enum.
    (current_it): New struct.
    (arm_segment_info_type): New member added.
    * doc/c-arm.texi: New option -mauto-it.

    gas/testsuite/
    * gas/arm/arm-it-auto.d: New test.
    * gas/arm/arm-it-auto.s: New file.
    * gas/arm/arm-it-auto-2.d: New test case.
    * gas/arm/arm-it-auto-2.s: New file.
    * gas/arm/arm-it-auto-3.d: New test case.
    * gas/arm/arm-it-auto-3.s: New file.
    * gas/arm/thumb2_it_auto.d: New test.
    * gas/arm/thumb2_it_bad.l: Error message updated.
    * gas/arm/thumb2_it_bad_auto.d: New test.
    * gas/arm/thumb2_it.d: Comment added.
    * gas/arm/thumb2_it_bad.d: Comment added.


Richard Earnshaw wrote:
On Fri, 2009-05-08 at 16:29 -0300, Daniel Gutson wrote:
Hi,
  apologies again, this is the current version of the patch.

As I mentioned in the original post, with this patch the assembler allows use of conditional Thumb-2 instructions without requiring explicit IT instructions.

The patch adds the -mauto-it command-line option to enable this automatic generation of IT instructions. When not specified, the original behavior takes place.

I tested this by running the gas testsuite, plus the test cases I added.
Please commit it for me if accepted, since I don't have write access.


Looks generally ok, but I've a couple of questions about dark corners that I can't spot immediate answers to when reading the code.

What happens if the user writes

    .text
    cmp    r0, #0
    addeq    r1, #2
    .data
    .word    33
    .text
    addne    r1, #3

Do we get one or two IT instructions?  If the user puts an explicit ITE
instruction in the sequence does this get verified against both parts.

What happens if we replace the .data section with a different code
section?  What if that also includes an IT block?

R.






Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]