[v2,2/4] bpf: consolidate register format specifier handling [NFC]

Message ID 20260331204212.3992270-3-vineet.gupta@linux.dev
State New
Headers
Series bpf gas updates |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm success Build passed
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 success Build passed
linaro-tcwg-bot/tcwg_binutils_check--master-aarch64 success Test passed
linaro-tcwg-bot/tcwg_binutils_check--master-arm success Test passed

Commit Message

Vineet Gupta March 31, 2026, 8:42 p.m. UTC
  NFC. Combine the separate if blocks for %dr/%dw and %sr/%sw into
single blocks each, using the tag character to drive
parse_bpf_register().

Signed-off-by: Vineet Gupta <vineet.gupta@linux.dev>
---
 gas/config/tc-bpf.c | 50 ++++++++-------------------------------------
 opcodes/bpf-dis.c   | 16 ++++-----------
 2 files changed, 12 insertions(+), 54 deletions(-)
  

Comments

Jose E. Marchesi April 2, 2026, 11:48 a.m. UTC | #1
OK.

> NFC. Combine the separate if blocks for %dr/%dw and %sr/%sw into
> single blocks each, using the tag character to drive
> parse_bpf_register().
>
> Signed-off-by: Vineet Gupta <vineet.gupta@linux.dev>
> ---
>  gas/config/tc-bpf.c | 50 ++++++++-------------------------------------
>  opcodes/bpf-dis.c   | 16 ++++-----------
>  2 files changed, 12 insertions(+), 54 deletions(-)
>
> diff --git a/gas/config/tc-bpf.c b/gas/config/tc-bpf.c
> index 57c2b869cbab..ecb6c5a70535 100644
> --- a/gas/config/tc-bpf.c
> +++ b/gas/config/tc-bpf.c
> @@ -1524,10 +1524,12 @@ md_assemble (char *str ATTRIBUTE_UNUSED)
>                      s += 1;
>                    p += 2;
>                  }
> -              else if (strncmp (p, "%dr", 3) == 0)
> +              else if (strncmp (p, "%dr", 3) == 0
> +                       || strncmp (p, "%dw", 3) == 0)
>                  {
> +                  char rw = *(p + 2);
>                    uint8_t regno;
> -                  char *news = parse_bpf_register (s, 'r', &regno);
> +                  char *news = parse_bpf_register (s, rw, &regno);
>  
>                    if (news == NULL || (insn.has_dst && regno != insn.dst))
>                      {
> @@ -1543,48 +1545,12 @@ md_assemble (char *str ATTRIBUTE_UNUSED)
>                    insn.has_dst = 1;
>                    p += 3;
>                  }
> -              else if (strncmp (p, "%sr", 3) == 0)
> +              else if (strncmp (p, "%sr", 3) == 0
> +                       || strncmp (p, "%sw", 3) == 0)
>                  {
> +                  char rw = *(p + 2);
>                    uint8_t regno;
> -                  char *news = parse_bpf_register (s, 'r', &regno);
> -
> -                  if (news == NULL || (insn.has_src && regno != insn.src))
> -                    {
> -                      if (news != NULL)
> -                        PARSE_ERROR ("expected register r%d, got r%d",
> -                                     insn.dst, regno);
> -                      else
> -                        PARSE_ERROR ("expected register name, got '%s'", s);
> -                      break;
> -                    }
> -                  s = news;
> -                  insn.src = regno;
> -                  insn.has_src = 1;
> -                  p += 3;
> -                }
> -              else if (strncmp (p, "%dw", 3) == 0)
> -                {
> -                  uint8_t regno;
> -                  char *news = parse_bpf_register (s, 'w', &regno);
> -
> -                  if (news == NULL || (insn.has_dst && regno != insn.dst))
> -                    {
> -                      if (news != NULL)
> -                        PARSE_ERROR ("expected register r%d, got r%d",
> -                                     insn.dst, regno);
> -                      else
> -                        PARSE_ERROR ("expected register name, got '%s'", s);
> -                      break;
> -                    }
> -                  s = news;
> -                  insn.dst = regno;
> -                  insn.has_dst = 1;
> -                  p += 3;
> -                }
> -              else if (strncmp (p, "%sw", 3) == 0)
> -                {
> -                  uint8_t regno;
> -                  char *news = parse_bpf_register (s, 'w', &regno);
> +                  char *news = parse_bpf_register (s, rw, &regno);
>  
>                    if (news == NULL || (insn.has_src && regno != insn.src))
>                      {
> diff --git a/opcodes/bpf-dis.c b/opcodes/bpf-dis.c
> index 7b89a7994ee6..de8d417dcd38 100644
> --- a/opcodes/bpf-dis.c
> +++ b/opcodes/bpf-dis.c
> @@ -214,22 +214,14 @@ print_insn_bpf (bfd_vma pc, disassemble_info *info)
>                    (*info->fprintf_styled_func) (info->stream, dis_style_text, " ");
>                    p += 2;
>                  }
> -              else if (strncmp (p, "%dr", 3) == 0)
> +              else if (strncmp (p, "%dr", 3) == 0
> +                       || strncmp (p, "%dw", 3) == 0)
>                  {
>                    print_register (info, p, bpf_extract_dst (word, endian));
>                    p += 3;
>                  }
> -              else if (strncmp (p, "%sr", 3) == 0)
> -                {
> -                  print_register (info, p, bpf_extract_src (word, endian));
> -                  p += 3;
> -                }
> -              else if (strncmp (p, "%dw", 3) == 0)
> -                {
> -                  print_register (info, p, bpf_extract_dst (word, endian));
> -                  p += 3;
> -                }
> -              else if (strncmp (p, "%sw", 3) == 0)
> +              else if (strncmp (p, "%sr", 3) == 0
> +                       || strncmp (p, "%sw", 3) == 0)
>                  {
>                    print_register (info, p, bpf_extract_src (word, endian));
>                    p += 3;
  

Patch

diff --git a/gas/config/tc-bpf.c b/gas/config/tc-bpf.c
index 57c2b869cbab..ecb6c5a70535 100644
--- a/gas/config/tc-bpf.c
+++ b/gas/config/tc-bpf.c
@@ -1524,10 +1524,12 @@  md_assemble (char *str ATTRIBUTE_UNUSED)
                     s += 1;
                   p += 2;
                 }
-              else if (strncmp (p, "%dr", 3) == 0)
+              else if (strncmp (p, "%dr", 3) == 0
+                       || strncmp (p, "%dw", 3) == 0)
                 {
+                  char rw = *(p + 2);
                   uint8_t regno;
-                  char *news = parse_bpf_register (s, 'r', &regno);
+                  char *news = parse_bpf_register (s, rw, &regno);
 
                   if (news == NULL || (insn.has_dst && regno != insn.dst))
                     {
@@ -1543,48 +1545,12 @@  md_assemble (char *str ATTRIBUTE_UNUSED)
                   insn.has_dst = 1;
                   p += 3;
                 }
-              else if (strncmp (p, "%sr", 3) == 0)
+              else if (strncmp (p, "%sr", 3) == 0
+                       || strncmp (p, "%sw", 3) == 0)
                 {
+                  char rw = *(p + 2);
                   uint8_t regno;
-                  char *news = parse_bpf_register (s, 'r', &regno);
-
-                  if (news == NULL || (insn.has_src && regno != insn.src))
-                    {
-                      if (news != NULL)
-                        PARSE_ERROR ("expected register r%d, got r%d",
-                                     insn.dst, regno);
-                      else
-                        PARSE_ERROR ("expected register name, got '%s'", s);
-                      break;
-                    }
-                  s = news;
-                  insn.src = regno;
-                  insn.has_src = 1;
-                  p += 3;
-                }
-              else if (strncmp (p, "%dw", 3) == 0)
-                {
-                  uint8_t regno;
-                  char *news = parse_bpf_register (s, 'w', &regno);
-
-                  if (news == NULL || (insn.has_dst && regno != insn.dst))
-                    {
-                      if (news != NULL)
-                        PARSE_ERROR ("expected register r%d, got r%d",
-                                     insn.dst, regno);
-                      else
-                        PARSE_ERROR ("expected register name, got '%s'", s);
-                      break;
-                    }
-                  s = news;
-                  insn.dst = regno;
-                  insn.has_dst = 1;
-                  p += 3;
-                }
-              else if (strncmp (p, "%sw", 3) == 0)
-                {
-                  uint8_t regno;
-                  char *news = parse_bpf_register (s, 'w', &regno);
+                  char *news = parse_bpf_register (s, rw, &regno);
 
                   if (news == NULL || (insn.has_src && regno != insn.src))
                     {
diff --git a/opcodes/bpf-dis.c b/opcodes/bpf-dis.c
index 7b89a7994ee6..de8d417dcd38 100644
--- a/opcodes/bpf-dis.c
+++ b/opcodes/bpf-dis.c
@@ -214,22 +214,14 @@  print_insn_bpf (bfd_vma pc, disassemble_info *info)
                   (*info->fprintf_styled_func) (info->stream, dis_style_text, " ");
                   p += 2;
                 }
-              else if (strncmp (p, "%dr", 3) == 0)
+              else if (strncmp (p, "%dr", 3) == 0
+                       || strncmp (p, "%dw", 3) == 0)
                 {
                   print_register (info, p, bpf_extract_dst (word, endian));
                   p += 3;
                 }
-              else if (strncmp (p, "%sr", 3) == 0)
-                {
-                  print_register (info, p, bpf_extract_src (word, endian));
-                  p += 3;
-                }
-              else if (strncmp (p, "%dw", 3) == 0)
-                {
-                  print_register (info, p, bpf_extract_dst (word, endian));
-                  p += 3;
-                }
-              else if (strncmp (p, "%sw", 3) == 0)
+              else if (strncmp (p, "%sr", 3) == 0
+                       || strncmp (p, "%sw", 3) == 0)
                 {
                   print_register (info, p, bpf_extract_src (word, endian));
                   p += 3;