From b0e1c5f899ff2a06f1ae0ff8af8e668741183a3e Mon Sep 17 00:00:00 2001 From: Ahmad Sharif Date: Thu, 1 Nov 2012 13:01:14 -0700 Subject: [PATCH] ads2gas.pl: various enhancements to work with flash. TEST=Ran it on different asm files. Change-Id: Ief2a009366787954d0eb5c356c64acaef350cf84 --- build/make/ads2gas.pl | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/build/make/ads2gas.pl b/build/make/ads2gas.pl index c55ed0fe4..ba70242dc 100755 --- a/build/make/ads2gas.pl +++ b/build/make/ads2gas.pl @@ -26,12 +26,22 @@ print "\t.equ DO1STROUNDING, 0\n"; while () { + 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 @@ while () # 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 @@ while () if (s/RN\s+([Rr]\d+|lr)/.req $1/) { print; + print "$comment_sub$comment\n" if defined $comment; next; } @@ -114,6 +136,9 @@ while () 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 @@ while () # 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 @@ while () } # 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 @@ while () 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. -- 2.40.0