ads2gas.pl: various enhancements to work with flash.

TEST=Ran it on different asm files.

Change-Id: Ief2a009366787954d0eb5c356c64acaef350cf84
diff --git a/build/make/ads2gas.pl b/build/make/ads2gas.pl
index c55ed0f..ba70242 100755
--- a/build/make/ads2gas.pl
+++ b/build/make/ads2gas.pl
@@ -26,12 +26,22 @@
 
 while (<STDIN>)
 {
+    undef $comment;
+    undef $line;
+    $comment_char = ";";
+    $comment_sub = "@";
+
+    # Handle comments.
+    if (/$comment_char/)
+    {
+      $comment = "";
+      ($line, $comment) = /(.*?)$comment_char(.*)/;
+      $_ = $line;
+    }
+
     # Load and store alignment
     s/@/,:/g;
 
-    # Comment character
-    s/;/@/g;
-
     # Hexadecimal constants prefaced by 0x
     s/#&/#0x/g;
 
@@ -62,6 +72,17 @@
     # Convert LTORG to .ltorg
     s/LTORG/.ltorg/g;
 
+    # Convert endfunc to nothing.
+    s/endfunc//ig;
+
+    # Convert FUNCTION to nothing.
+    s/FUNCTION//g;
+    s/function//g;
+
+    s/ENTRY//g;
+    s/MSARMASM/0/g;
+    s/^\s+end\s+$//g;
+
     # Convert IF :DEF:to .if
     # gcc doesn't have the ability to do a conditional
     # if defined variable that is set by IF :DEF: on
@@ -106,6 +127,7 @@
     if (s/RN\s+([Rr]\d+|lr)/.req $1/)
     {
         print;
+        print "$comment_sub$comment\n" if defined $comment;
         next;
     }
 
@@ -114,6 +136,9 @@
     s/EXPORT\s+\|([\$\w]*)\|/.global $1 \n\t.type $1, function/;
     s/IMPORT\s+\|([\$\w]*)\|/.global $1/;
 
+    s/EXPORT\s+([\$\w]*)/.global $1/;
+    s/export\s+([\$\w]*)/.global $1/;
+
     # No vertical bars required; make additional symbol with prepended
     # underscore
     s/^\|(\$?\w+)\|/_$1\n\t$1:/g;
@@ -129,6 +154,10 @@
     # ARM code
     s/\sARM/.arm/g;
 
+    # NEON code
+    s/(vld1.\d+\s+)(q\d+)/$1\{$2\}/g;
+    s/(vtbl.\d+\s+[^,]+),([^,]+)/$1,\{$2\}/g;
+
     # eabi_attributes numerical equivalents can be found in the
     # "ARM IHI 0045C" document.
 
@@ -157,7 +186,7 @@
     }
 
     # EQU directive
-    s/(.*)EQU(.*)/.equ $1, $2/;
+    s/(\S+\s+)EQU(\s+\S+)/.equ $1, $2/;
 
     # Begin macro definition
     if (/MACRO/) {
@@ -172,6 +201,7 @@
     s/MEND/.endm/;              # No need to tell it where to stop assembling
     next if /^\s*END\s*$/;
     print;
+    print "$comment_sub$comment\n" if defined $comment;
 }
 
 # Mark that this object doesn't need an executable stack.