bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gas/30690] bpf: relax short jumps to V4 long jumps


From: cvs-commit at gcc dot gnu.org
Subject: [Bug gas/30690] bpf: relax short jumps to V4 long jumps
Date: Fri, 28 Jul 2023 16:24:10 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=30690

--- Comment #1 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot 
gnu.org> ---
The master branch has been updated by Jose E. Marchesi
<jemarch@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=249d4715e41061b6bd2d26df20ae274e6478f972

commit 249d4715e41061b6bd2d26df20ae274e6478f972
Author: Jose E. Marchesi <jose.marchesi@oracle.com>
Date:   Thu Jul 27 18:17:35 2023 +0200

    bpf: gas: support relaxation of V4 jump instructions

    The BPF jump-always instruction (JA), like all other jump instructions
    in the ISA, get a signed 16-bit displacement target argument denoted
    in number of 64-bit words minus one.  This can sometimes be overflown.

    The BPF V4 ISA thus introduced support for a jump-always
    instruction (JAL) that gets a signed 32-bit displacement instead.

    This patch makes the BPF assembler to perform the following
    relaxations when the disp16 field gets overflown, unless the option
    -mno-relax is specified:

      JA disp16  -> JAL disp32
      Jxx disp16 -> Jxx +1; JA +1; JAL disp32

    Documentation and tests added.
    Tested in bpf-unknown-none.

    gas/ChangeLog:

    2023-07-28  Jose E. Marchesi  <jose.marchesi@oracle.com>

            PR gas/30690
            * config/tc-bpf.c (struct bpf_insn): Add fields is_relaxable and
            relaxed_exp.
            (enum options): Add OPTION_NO_RELAX.
            (md_longopts): Likewise for -mno-relax.
            (do_relax): New global.
            (md_parse_option): Handle OPTION_NO_RELAX.
            (RELAX_BRANCH_ENCODE): Define.
            (RELAX_BRANCH_P): Likewise.
            (RELAX_BRANCH_LENGTH): Likewise.
            (RELAX_BRANCH_CONST): Likewise.
            (RELAX_BRANCH_UNCOND): Likewise.
            (relaxed_branch_length): New function.
            (md_estimate_size_before_relax): Likewise.
            (read_insn_word): Likewise.
            (encode_int16): Likewise.
            (encode_int32): Likewise.
            (write_insn_bytes): Likewise.
            (md_convert_frag): Likewise.
            (encode_insn): Likewise.
            (install_insn_fixups): Likewise.
            (add_fixed_insn): Likewise.
            (add_relaxed_insn): Likewise.
            (md_assemble): Move instruction encoding logic to the above
            new functions.
            * testsuite/gas/bpf/jump-relax-ja.d: New test.
            * testsuite/gas/bpf/jump-relax-ja-be.d: Likewise.
            * testsuite/gas/bpf/jump-relax-ja.s: And corresponding source.
            * testsuite/gas/bpf/jump-relax-jump.d: New test.
            * testsuite/gas/bpf/jump-relax-jump-be.d: Likewise.
            * testsuite/gas/bpf/jump-relax-jump.s: And corresponding source.
            * testsuite/gas/bpf/bpf.exp: Run new tests.
            * doc/c-bpf.texi (BPF Options): Document -mno-relax.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]