Module: gas-preprocessor
Branch: master
Commit: 8f4d04edfb89b349d21cab618eaf1622c0637e29

Author:    Martin Storsjo <[email protected]>
Committer: Martin Storsjo <[email protected]>
Date:      Mon Oct 16 15:59:39 2017 +0300

Convert ldr/str/ldrb/strb etc into ldurb, when the offset is negative

Gas and clang convert these automatically into the right form,
although it doesn't hurt to update source to use the correct form
from the start (although it might require conditionals in cases where
the actual offset is unclear).

---

 gas-preprocessor.pl | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/gas-preprocessor.pl b/gas-preprocessor.pl
index f616de3..7644682 100755
--- a/gas-preprocessor.pl
+++ b/gas-preprocessor.pl
@@ -1024,6 +1024,19 @@ sub handle_serialized_line {
             # variant/combination of prfum tested so far, but it can be
             # left out without any
             $line =~ s/prfum.*\]//;
+
+            # Convert "ldrb w0, [x0, #-1]" into "ldurb w0, [x0, #-1]".
+            # Don't do this for forms with writeback though.
+            if ($line =~ 
/(ld|st)(r[bh]?)\s+(\w+)\s*,\s*\[\s*(\w+)\s*,\s*#([^\]]+)\s*\][^!]/) {
+              my $instr = $1;
+              my $suffix = $2;
+              my $target = $3;
+              my $base = $4;
+              my $offset = eval_expr($5);
+              if ($offset < 0) {
+                $line =~ s/$instr$suffix/${instr}u$suffix/;
+              }
+            }
         }
         # armasm is unable to parse &0x - add spacing
         $line =~ s/&0x/& 0x/g;

_______________________________________________
libav-commits mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-commits

Reply via email to