The branch main has been updated by christos:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=980746e5cb264a70ad3dcbbf38ba919ad3436aa1

commit 980746e5cb264a70ad3dcbbf38ba919ad3436aa1
Author:     Christos Margiolis <chris...@freebsd.org>
AuthorDate: 2023-06-03 17:04:33 +0000
Commit:     Christos Margiolis <chris...@freebsd.org>
CommitDate: 2023-06-03 17:04:33 +0000

    fbt: simplify arm64 function-prologue parsing
    
    Reviewed by:    markj
    Approved by:    markj (mentor)
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D40364
---
 sys/cddl/dev/fbt/aarch64/fbt_isa.c | 42 +++++++++++++++-----------------------
 1 file changed, 16 insertions(+), 26 deletions(-)

diff --git a/sys/cddl/dev/fbt/aarch64/fbt_isa.c 
b/sys/cddl/dev/fbt/aarch64/fbt_isa.c
index cc4ea42715c8..4b32d42ca0b4 100644
--- a/sys/cddl/dev/fbt/aarch64/fbt_isa.c
+++ b/sys/cddl/dev/fbt/aarch64/fbt_isa.c
@@ -130,35 +130,25 @@ fbt_provide_module_function(linker_file_t lf, int symindx,
         */
        if (*instr == NOP_INSTR)
                found = true;
-       if (!found) {
-               for (; instr < limit; instr++) {
+       for (; !found && instr < limit; instr++) {
+               /*
+                * Functions start with "stp xt1, xt2, [xn, <const>]!" or
+                * "sub sp, sp, <const>".
+                *
+                * Sometimes the compiler will have a sub instruction that is
+                * not of the above type so don't stop if we see one.
+                */
+               if ((*instr & LDP_STP_MASK) == STP_64) {
                        /*
-                        * Some functions start with
-                        * "stp xt1, xt2, [xn, <const>]!"
+                        * Assume any other store of this type means we are
+                        * past the function prologue.
                         */
-                       if ((*instr & LDP_STP_MASK) == STP_64) {
-                               /*
-                                * Assume any other store of this type means we
-                                * are past the function prolog.
-                                */
-                               if (((*instr >> ADDR_SHIFT) & ADDR_MASK) == 31)
-                                       found = true;
-                               break;
-                       }
-
-                       /*
-                        * Some functions start with a "sub sp, sp, <const>"
-                        * Sometimes the compiler will have a sub instruction
-                        * that is not of the above type so don't stop if we
-                        * see one.
-                        */
-                       if ((*instr & SUB_MASK) == SUB_INSTR &&
-                           ((*instr >> SUB_RD_SHIFT) & SUB_R_MASK) == 31 &&
-                           ((*instr >> SUB_RN_SHIFT) & SUB_R_MASK) == 31) {
+                       if (((*instr >> ADDR_SHIFT) & ADDR_MASK) == 31)
                                found = true;
-                               break;
-                       }
-               }
+               } else if ((*instr & SUB_MASK) == SUB_INSTR &&
+                   ((*instr >> SUB_RD_SHIFT) & SUB_R_MASK) == 31 &&
+                   ((*instr >> SUB_RN_SHIFT) & SUB_R_MASK) == 31)
+                       found = true;
        }
 
        if (!found)

Reply via email to