e32tools/armasm2as.pl
author mikek
Tue, 02 Nov 2010 14:32:27 +0000
changeset 33 667e3f7728f7
parent 21 cdfb74fd77ed
permissions -rw-r--r--
1) Make prep_env.pl apply a patch to epoc32/sbs_config/s60_sbs_config.xml to replace the ARM kernel-side runtime ksrt4_0.lib with the GCCE one ksrt_gcce.lib 2) Fix romnibus.pl so it won't do case-tampering on the epocroot prefix of source paths in oby/iby files.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
     1
# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
     2
# All rights reserved.
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
     3
# This component and the accompanying materials are made available
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
     4
# under the terms of "Eclipse Public License v1.0"
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
     5
# which accompanies this distribution, and is available
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
     6
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
     7
#
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
     8
# Initial Contributors:
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
     9
# Nokia Corporation - initial contribution.
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    10
#
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    11
# Contributors:
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    12
# Mike Kinghan, mikek@symbian.org, for Symbian Foundation
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    13
#
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    14
# Description:
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    15
# e32toolp\e32util\armasm2as.pl
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    16
# Convert an ARMASM assembler source or include file to AS format
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    17
# Syntax:
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    18
# perl armasm2as.pl <input> <output>
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    19
# 
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    20
#
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    21
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    22
if (scalar(@ARGV)!=2) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    23
	die "perl armasm2as.pl <input> <output>\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    24
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    25
my ($infile, $outfile) = @ARGV;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    26
open IN, $infile or die "Can't open $infile for input\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    27
my $gccfile;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    28
my @input;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    29
while (<IN>) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    30
	push @input, $_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    31
	next if defined($gccfile);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    32
	next if (/^\s*$/);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    33
	if (/^\s*\@/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    34
		$gccfile = 1;	# If first non-blank line starts with @, assume already in GCC format
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    35
	} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    36
		$gccfile = 0;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    37
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    38
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    39
close IN;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    40
my @output;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    41
my $outref = \@output;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    42
if ($gccfile) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    43
	$outref = \@input;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    44
} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    45
	process(\@input, \@output);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    46
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    47
open OUT, ">$outfile" or die "Can't open $outfile for write\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    48
print OUT @$outref;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    49
close OUT;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    50
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    51
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    52
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    53
sub process($$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    54
	my $level=0;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    55
	my @block;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    56
	my ($inref, $outref) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    57
	foreach $line (@$inref) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    58
		$line=~s/\s*$//;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    59
		my $comment;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    60
		if ($line =~ /\;(.*)$/o) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    61
			$comment = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    62
			$line =~ s/\;(.*)$//o;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    63
			if ($line =~ /^\s*$/o and $level==0) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    64
				push @$outref, "$line\@$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    65
				next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    66
			}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    67
			$comment = "\t\@$comment";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    68
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    69
		if ($line =~ /^\s+PRESERVE8/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    70
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    71
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    72
		if ($level == 1) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    73
			if ($line =~ /^\s+MEND/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    74
				process_macro(\@block, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    75
				$level = 0;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    76
			} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    77
				push @block, $line;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    78
			}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    79
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    80
		} elsif ($level == 0) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    81
			if ($line =~ /^\s+MACRO\s*$/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    82
				@block = ();
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    83
				$level = 1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    84
				next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    85
			}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    86
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    87
		if ($line =~ /^\s+GBLL\s+(\S+)/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    88
			push @$outref, "\t.set\t$1, 0$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    89
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    90
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    91
		if ($line =~ /^\s+GBLA\s+(\S+)/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    92
			push @$outref, "\t.set\t$1, 0$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    93
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    94
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    95
		if ($line =~ /^\s+INCLUDE\s+(\S+)/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    96
			my $arg = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    97
			if ($arg =~ /(\w+)\.inc/io) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    98
				$arg = $1.'.ginc';
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
    99
			}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   100
			push @$outref, "\t.include\t\"$arg\"$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   101
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   102
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   103
		if ($line =~ /^\s+IMPORT\s+(\S+)/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   104
			push @$outref, "\t.extern\t$1$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   105
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   106
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   107
		if ($line =~ /^\s+EXPORT\s+(\S+)/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   108
			push @$outref, "\t.global\t$1$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   109
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   110
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   111
		if ($line =~ /^\s+ELSE/i or $line =~ /^\s+\|/i ) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   112
			push @$outref, "\t.else$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   113
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   114
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   115
		if ($line =~ /^\s+ENDIF/i or $line =~ /^\s+\]/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   116
			push @$outref, "\t.endif$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   117
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   118
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   119
		if ($line =~ /^\s+LTORG/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   120
			push @$outref, "\t.ltorg$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   121
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   122
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   123
		if ($line =~ /^\s+END$/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   124
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   125
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   126
		if ($line =~ /^\s+\!\s*(\d+)\,\s*(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   127
			my $msg = $2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   128
			push @$outref, "\t.print $msg\n\t.err$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   129
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   130
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   131
		if ($line =~ /^\s+INIT_LOGICAL_SYMBOL\s+(\w+)(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   132
			process_init_logical_symbol($1, $2, $outref, $comment);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   133
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   134
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   135
		if ($line =~ /^\s+INIT_NUMERIC_SYMBOL\s+(\w+)\s*\,\s*(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   136
			process_init_numeric_symbol($1, $2, $outref, $comment);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   137
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   138
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   139
		if ($line =~ /^\s+AREA\s+(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   140
			process_area($1, $outref, $comment);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   141
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   142
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   143
		if ($line =~ /^\s+\%\s+(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   144
			my $expr = process_numeric_expr($1, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   145
			push @$outref, "\t.space $expr$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   146
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   147
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   148
		if ($line =~ /^\s+ALIGN\s*(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   149
			process_align($1, $outref, $comment);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   150
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   151
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   152
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   153
		# Strip label if there is one
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   154
		my $label;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   155
		if ($line =~ /^(\S+)\s*(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   156
			$label = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   157
			$line = $2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   158
		} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   159
			$line =~ s/^\s*//;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   160
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   161
		if ($line =~ /^SETL\s+(\S+)/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   162
			my $val = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   163
			my $expr = process_logical_expr($val, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   164
			push @$outref, "\t.set\t$label,$expr$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   165
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   166
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   167
		if ($line =~ /^SETA\s+(.*?)$/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   168
			my $val = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   169
			my $expr = process_numeric_expr($val, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   170
			push @$outref, "\t.set\t$label,$expr$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   171
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   172
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   173
		if ($line =~ /^(EQU|\*)\s+(.*?)$/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   174
			my $val = $2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   175
			my $expr = process_numeric_expr($val, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   176
			push @$outref, "\t.equ\t$label,$expr$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   177
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   178
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   179
		if ($line =~ /^(if|\[)\s+(.*?)$/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   180
			my $cond = $2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   181
			if ($cond =~ /^\s*(\:LNOT\:)?\s*\:DEF\:\s*(.*?)$/i) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   182
				my $n = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   183
				my $sym = $2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   184
				if ($sym =~ /^(\w|\\|\:)+$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   185
					if (uc($n) eq ':LNOT:') {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   186
						push @$outref, "\t.ifndef\t$sym$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   187
					} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   188
						push @$outref, "\t.ifdef\t$sym$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   189
					}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   190
					next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   191
				}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   192
			}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   193
			my $expr = process_logical_expr($cond, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   194
			push @$outref, "\t.if $expr$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   195
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   196
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   197
		if ($line =~ /^(\=|DCB)\s*(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   198
			process_dcb($label, $2, $outref, $comment);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   199
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   200
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   201
		if ($line =~ /^DCW\s*(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   202
			process_dcw($label, $1, $outref, $comment);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   203
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   204
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   205
		if ($line =~ /^DCD\s*(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   206
			process_dcd($label, $1, $outref, $comment);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   207
			next;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   208
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   209
		if ($line =~ /^ROUT\s*$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   210
			$line = '';
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   211
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   212
		if ($line =~ /^(\w+)\s+\%(\w+)\s*$/o) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   213
			# ARMASM local label reference
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   214
			my $inst = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   215
			my $llab = $2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   216
			if ($llab =~ /F\w?(\d+)/o) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   217
				$line = "$inst $1f";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   218
			} elsif ($llab =~ /B\w?(\d+)/o) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   219
				$line = "$inst $1b";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   220
			} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   221
				die "Can't determine local label direction\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   222
			}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   223
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   224
		if ($line =~ /^(\w+)\s+(\w+)\s*\,\s*\%(\w+)\s*$/o) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   225
			# ARMASM local label reference
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   226
			my $inst = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   227
			my $op1 = $2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   228
			my $llab = $3;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   229
			if ($llab =~ /F\w?(\d+)/o) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   230
				$line = "$inst $op1\, $1f";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   231
			} elsif ($llab =~ /B\w?(\d+)/o) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   232
				$line = "$inst $op1\, $1b";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   233
			} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   234
				die "Can't determine local label direction\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   235
			}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   236
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   237
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   238
		$line = process_numeric_expr($line, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   239
		if (defined($label)) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   240
			push @$outref, "$label\:\t$line$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   241
		} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   242
			push @$outref, "\t$line$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   243
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   244
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   245
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   246
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   247
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   248
sub process_macro($$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   249
	my ($inref, $outref) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   250
	my $line;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   251
	while(1) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   252
		$line = shift @$inref;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   253
		last if ($line !~ /^\s*$/);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   254
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   255
	unless ($line =~ /^\s+(\w+)\s*(.*?)$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   256
		die "Bad macro - no name\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   257
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   258
	my $macro_name = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   259
	if ($macro_name eq 'INIT_LOGICAL_SYMBOL' or $macro_name eq 'INIT_NUMERIC_SYMBOL') {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   260
		return;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   261
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   262
	$line = $2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   263
	my @args = split ( '\s*,\s*', $line );
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   264
	foreach (@args) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   265
		die "Bad macro argument name\n" unless (/^\$\w+$/);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   266
		s/^\$//;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   267
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   268
	my $ev = '';
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   269
	foreach $arg (@args) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   270
		$ev.="s/\\\$$arg(\\W\|\$)/\\\\$arg\$1/go;";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   271
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   272
	foreach (@$inref) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   273
		eval $ev;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   274
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   275
	push @$outref, "\t.macro $macro_name ".join(',',@args)."\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   276
	process($inref, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   277
	push @$outref, "\t.endm\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   278
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   279
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   280
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   281
sub process_logical_expr($$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   282
	my ($val, $outref) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   283
	$val = process_numeric_expr($val, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   284
	$val =~ s/\<\=/________LE________/g;	# protect <= and >= during expansion of =
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   285
	$val =~ s/\>\=/________GE________/g;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   286
	$val =~ s/\=/\=\=/g;					# equality operator is = on ARMASM, == on AS
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   287
	$val =~ s/________LE________/\<\=/g;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   288
	$val =~ s/________GE________/\>\=/g;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   289
	$val =~ s/\{TRUE\}/(1)/g;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   290
	$val =~ s/\{FALSE\}/(0)/g;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   291
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   292
	my @lops = split( /(\s*\:LAND\:\s*|\s*\:LOR\:\s*|\s*\:LNOT\:\s*|\s*\:DEF\:\s*|\s*\(\s*|\s*\)\s*)/, $val );
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   293
	my @lops2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   294
	foreach (@lops) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   295
		s/\s*\:LAND\:\s*/\:LAND\:/go;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   296
		s/\s*\:LOR\:\s*/\:LOR\:/go;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   297
		s/\s*\:LNOT\:\s*/\:LNOT\:/go;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   298
		s/\s*\:DEF\:\s*/\:DEF\:/go;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   299
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   300
	my @lops2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   301
	while (scalar (@lops)) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   302
		my $x = shift @lops;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   303
		if ($x eq ':DEF:') {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   304
			my $sym = shift @lops;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   305
			$sym =~ s/^\s*//;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   306
			$sym =~ s/\s*$//;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   307
			if ($sym =~ /^(\w|\$|\\)+$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   308
				push @$outref, "\t.ifdef $sym\n\t.set __defined__$sym, 1\n\t.else\n\t.set __defined__$sym, 0\n\t.endif\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   309
				push @lops2, " __defined__$sym ";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   310
			} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   311
				die "Bad :DEF: operand $sym\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   312
			}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   313
		} elsif ($x eq ':LAND:') {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   314
			push @lops2, ' && ';
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   315
		} elsif ($x eq ':LOR:') {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   316
			push @lops2, ' || ';
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   317
		} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   318
			push @lops2, $x;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   319
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   320
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   321
	my @lops3;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   322
	while (scalar (@lops2)) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   323
		my $x = shift @lops2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   324
		if ($x eq ':LNOT:') {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   325
			my $operand;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   326
			while (1) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   327
				$operand = shift @lops2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   328
				last if ($operand !~ /^\s*$/);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   329
			}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   330
			push @lops3, "(0==($operand))";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   331
		} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   332
			push @lops3, $x;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   333
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   334
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   335
	return join('',@lops3);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   336
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   337
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   338
sub process_numeric_expr($$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   339
	my ($val, $outref) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   340
	$val =~ s/\&/0x/g;			# ARMASM accepts hex numbers starting with & or 0x, AS only accepts 0x
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   341
	$val =~ s/(\W|^)2_([0|1]+)(\W|$)/$1 0b$2$3/g;	# Binary numbers start with 2_ on ARMASM, 0b on AS
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   342
	$val =~ s/\:AND\:/\&/g;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   343
	$val =~ s/\:OR\:/\|/g;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   344
	$val =~ s/\:SHL\:/\<\</g;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   345
	$val =~ s/\:SHR\:/\>\>/g;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   346
	return $val;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   347
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   348
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   349
sub process_init_logical_symbol($$$$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   350
	my ($name, $rest, $outref, $comment) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   351
	my $counter;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   352
	if ($rest =~ /^\s*\,\s*(\w+)\s*$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   353
		$counter = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   354
	} elsif ($rest !~ /^\s*$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   355
		die "Bad INIT_LOGICAL_SYMBOL\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   356
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   357
	push @$outref, "\t.ifndef $name$comment\n\t.set $name, 0\n\t.else\n\t.set $name, 1\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   358
	if ($counter) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   359
		push @$outref, "\t.set $counter, $counter \+ 1\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   360
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   361
	push @$outref, "\t.endif\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   362
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   363
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   364
sub process_init_numeric_symbol($$$$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   365
	my ($name, $value, $outref, $comment) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   366
	my $expr = process_numeric_expr($value, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   367
	push @$outref, "\t.ifndef $name$comment\n\t.set $name, $expr\n\t.endif\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   368
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   369
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   370
sub process_area($$$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   371
	my ($line, $outref, $comment) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   372
	my @args = split(',',$line);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   373
	my $align = 0;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   374
	foreach (@args) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   375
		if (/^\s*ALIGN\s*\=\s*(\d+)\s*$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   376
			$align = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   377
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   378
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   379
	push @$outref, "\t.text$comment\n\t.p2align $align\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   380
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   381
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   382
sub process_align($$$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   383
	my ($line, $outref, $comment) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   384
	if ($line =~ /^\s*$/o) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   385
		push @$outref, "\t.align$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   386
	} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   387
		push @$outref, "\t.balign $line$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   388
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   389
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   390
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   391
sub process_dcb($$$$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   392
	my ($label, $args, $outref, $comment) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   393
	if (defined($label)) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   394
		push @$outref, "$label\:";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   395
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   396
	while ($args !~ /^\s*$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   397
		my $arg;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   398
		$args =~ s/^\s*//;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   399
		if ($args =~ /^\"/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   400
			$args =~ s/\\\"/________ESCAPED_QUOTE________/go;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   401
			$args =~ /\"(.*?)\"\s*(.*?)$/o or die "Unterminated string literal\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   402
			$arg = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   403
			$args = $2;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   404
			$arg =~ s/________ESCAPED_QUOTE________/\\\"/go;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   405
			push @$outref, "\t.ascii \"$arg\"$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   406
			undef $comment;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   407
			last if ($args !~ /\s*\,(.*?)$/o);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   408
			$args = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   409
		} else {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   410
			$args =~ /(.*?)\s*(\,|$)(.*?)$/o;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   411
			$arg = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   412
			$args = $3;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   413
			my $expr = process_numeric_expr($arg, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   414
			push @$outref, "\t.byte $expr$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   415
			undef $comment;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   416
		}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   417
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   418
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   419
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   420
sub process_dcw($$$$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   421
	my ($label, $args, $outref, $comment) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   422
	if (defined($label)) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   423
		push @$outref, "$label\:";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   424
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   425
	while ($args !~ /^\s*$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   426
		my $arg;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   427
		$args =~ s/^\s*//;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   428
		$args =~ /(.*?)\s*(\,|$)(.*?)$/o;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   429
		$arg = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   430
		$args = $3;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   431
		my $expr = process_numeric_expr($arg, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   432
		push @$outref, "\t.hword $expr$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   433
		undef $comment;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   434
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   435
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   436
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   437
sub process_dcd($$$$) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   438
	my ($label, $args, $outref, $comment) = @_;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   439
	if (defined($label)) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   440
		push @$outref, "$label\:";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   441
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   442
	while ($args !~ /^\s*$/) {
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   443
		my $arg;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   444
		$args =~ s/^\s*//;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   445
		$args =~ /(.*?)\s*(\,|$)(.*?)$/o;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   446
		$arg = $1;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   447
		$args = $3;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   448
		my $expr = process_numeric_expr($arg, $outref);
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   449
		push @$outref, "\t.word $expr$comment\n";
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   450
		undef $comment;
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   451
	}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   452
}
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   453
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   454
cdfb74fd77ed Fix for Bug 1405 - GCCE: Raptor passing unknown option -mapcs to the assembler.
mikek
parents:
diff changeset
   455