189 lines
6.2 KiB
Plaintext
189 lines
6.2 KiB
Plaintext
|
#!/bin/sh
|
||
|
|
||
|
#
|
||
|
# Copyright (c) 1994 Charles Hannum. All rights reserved.
|
||
|
#
|
||
|
# Redistribution and use in source and binary forms, with or without
|
||
|
# modification, are permitted provided that the following conditions
|
||
|
# are met:
|
||
|
# 1. Redistributions of source code must retain the above copyright
|
||
|
# notice, this list of conditions and the following disclaimer.
|
||
|
# 2. Redistributions in binary form must reproduce the above copyright
|
||
|
# notice, this list of conditions and the following disclaimer in the
|
||
|
# documentation and/or other materials provided with the distribution.
|
||
|
# 3. All advertising materials mentioning features or use of this software
|
||
|
# must display the following acknowledgement:
|
||
|
# This product includes software developed by Charles Hannum.
|
||
|
# 4. The name of the author may not be used to endorse or promote products
|
||
|
# derived from this software without specific prior written permission.
|
||
|
#
|
||
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||
|
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||
|
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||
|
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||
|
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
#
|
||
|
# $Id: asm2gas,v 1.1 1994/07/05 17:57:04 mycroft Exp $
|
||
|
#
|
||
|
|
||
|
# This ugly script converts assembler code from Motorola's format to a
|
||
|
# form that gas (MIT syntax) can digest.
|
||
|
|
||
|
cat $1 | sed -e '
|
||
|
/[ ]IDNT[ ]/{s/^/|/;p;d;}
|
||
|
/^\*/{p;d;}
|
||
|
s/;/|/
|
||
|
/[ ]equ[ ]/{
|
||
|
s/\([A-Za-z_][A-Za-z0-9_]*\)[ ]*equ[ ]*/\1,/
|
||
|
s/[ ][ ]*\(.*\)$/ |\1/
|
||
|
s/ ||/ |/
|
||
|
s/^/ .set /
|
||
|
p;d
|
||
|
}
|
||
|
s/^\([A-Za-z_][A-Za-z0-9_]*\)[ ][ ]*/\1: /
|
||
|
s/^\([A-Za-z_][A-Za-z0-9_]*\)$/\1:/
|
||
|
/^[A-Za-z_][A-Za-z0-9_]*:/{
|
||
|
h
|
||
|
s/:.*$/:/
|
||
|
p
|
||
|
g
|
||
|
s/^.*:[ ]*/ /
|
||
|
/^ $/d
|
||
|
}
|
||
|
/^[ ][ ]*[.a-zA-Z][.a-zA-Z0-9]*/{
|
||
|
h
|
||
|
s/[ ]*[.a-zA-Z][.a-zA-Z0-9]*[ ]*//
|
||
|
s/[ ][ ]*\(.*\)$/ |\1/
|
||
|
s/ ||/ |/
|
||
|
x
|
||
|
s/^[ ]*\([.a-zA-Z][.a-zA-Z0-9]*\)/\1/
|
||
|
s/[ ][ ]*.*$/ /
|
||
|
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
||
|
s/^/ /
|
||
|
G
|
||
|
s/\n//
|
||
|
}
|
||
|
' | sed -e '
|
||
|
s/^\*/|/
|
||
|
s/\$/0x/g
|
||
|
s/#:/#0x/g
|
||
|
s/ dc\.l/ .long/
|
||
|
s/ dc\.w/ .short/
|
||
|
s/ dc\.b/ .byte/
|
||
|
' | sed -e '
|
||
|
s/\([^_a-zA-Z0-9]\)A\([0-7]\)\([^_a-zA-Z0-9:.]\)/\1a\2\3/g
|
||
|
s/\([^_a-zA-Z0-9]\)A\([0-7]\)\([^_a-zA-Z0-9:.]\)/\1a\2\3/g
|
||
|
s/\([^_a-zA-Z0-9]\)A\([0-7]\)$/\1a\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)D\([0-7]\)\([^_a-zA-Z0-9]\)/\1d\2\3/g
|
||
|
s/\([^_a-zA-Z0-9]\)D\([0-7]\)\([^_a-zA-Z0-9]\)/\1d\2\3/g
|
||
|
s/\([^_a-zA-Z0-9]\)D\([0-7]\)$/\1d\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)FP\([0-7]\)\([^_a-zA-Z0-9]\)/\1fp\2\3/g
|
||
|
s/\([^_a-zA-Z0-9]\)FP\([0-7]\)\([^_a-zA-Z0-9]\)/\1fp\2\3/g
|
||
|
s/\([^_a-zA-Z0-9]\)FP\([0-7]\)$/\1fp\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)FPCR\([^_a-zA-Z0-9]\)/\1fpcr\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)FPCR\([^_a-zA-Z0-9]\)/\1fpcr\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)FPCR$/\1fpcr/g
|
||
|
s/\([^_a-zA-Z0-9]\)FPSR\([^_a-zA-Z0-9]\)/\1fpsr\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)FPSR\([^_a-zA-Z0-9]\)/\1fpsr\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)FPSR$/\1fpsr/g
|
||
|
s/\([^_a-zA-Z0-9]\)FPIAR\([^_a-zA-Z0-9]\)/\1fpi\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)FPIAR\([^_a-zA-Z0-9]\)/\1fpi\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)FPIAR$/\1fpi/g
|
||
|
s/\([^_a-zA-Z0-9]\)fpiar\([^_a-zA-Z0-9]\)/\1fpi\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)fpiar\([^_a-zA-Z0-9]\)/\1fpi\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)fpiar$/\1fpi/g
|
||
|
s/\([^_a-zA-Z0-9]\)a7\([^_a-zA-Z0-9:.]\)/\1sp\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)a7\([^_a-zA-Z0-9:.]\)/\1sp\2/g
|
||
|
s/\([^_a-zA-Z0-9]\)a7$/\1sp/g
|
||
|
' | sed -e '
|
||
|
s/-(\(a.\))/\1@-/g
|
||
|
s/(\(a.\))+/\1@+/g
|
||
|
s/\([-+A-Za-z0-9_]*\)(\(a.\))/\2@(\1)/g
|
||
|
s/\([-+A-Za-z0-9_]*\)(\(a.\),\([ad].[^)]*\))/\2@(\1,\3)/g
|
||
|
|
||
|
s/-(sp)/sp@-/g
|
||
|
s/(sp)+/sp@+/g
|
||
|
s/\([-+A-Za-z0-9_]*\)(sp)/sp@(\1)/g
|
||
|
s/\([-+A-Za-z0-9_]*\)(sp,\([ad].[^)]*\))/sp@(\1,\2)/g
|
||
|
|
||
|
s/-(pc)/pc@-/g
|
||
|
s/(pc)+/pc@+/g
|
||
|
s/\([-+A-Za-z0-9_]*\)(pc)/pc@(\1)/g
|
||
|
s/\([-+A-Za-z0-9_]*\)(pc,\([ad].[^)]*\))/pc@(\1,\2)/g
|
||
|
|
||
|
s/\.\([bBwWlL])\)/:\1/g
|
||
|
s/\.\([bBwWlL]\)\*\([0-9][0-9]*)\)/:\1:\2/g
|
||
|
s/\*\([0-9][0-9]*\))/:l:\1)/g
|
||
|
s/{\([0-9][0-9]*\):\([0-9][0-9]*\)}/{#\1:#\2}/g
|
||
|
s/{\(d[0-7]\):\([0-9][0-9]*\)}/{\1:#\2}/g
|
||
|
|
||
|
s/@()/@/g;s/@(0)/@/g
|
||
|
s/(,/(/g;s/:)/)/g
|
||
|
|
||
|
s/^ section 7/ .text/
|
||
|
s/^ section 8/ .text/
|
||
|
s/^ section 15/ .data/
|
||
|
/^ include/{s/include[ ]/.include "/;s/\.h[ ]*$/.defs"/;p;d;}
|
||
|
s/^ xref/| xref/
|
||
|
s/^ end/| end/
|
||
|
s/^ xdef/ .global/
|
||
|
|
||
|
s/^ lea\.l / lea /
|
||
|
s/^ swap\.w / swap /
|
||
|
s/^ adda\.l / addal /
|
||
|
s/^ suba\.l / subal /
|
||
|
s/^ movea\.l / moveal /
|
||
|
s/^ btst\.[bl] / btst /
|
||
|
s/^ bclr\.[bl] / bclr /
|
||
|
s/^ bset\.[bl] / bset /
|
||
|
s/^ bchg\.[bl] / bchg /
|
||
|
s/^ clr\.\([lbw]\) / clr\1 /
|
||
|
s/^ tst\.\([lbw]\) / tst\1 /
|
||
|
s/^ neg\.\([lbw]\) / neg\1 /
|
||
|
s/^ or\(i*\)\.\([lbw]\) / or\1\2 /
|
||
|
s/^ eor\(i*\)\.\([lbw]\) / eor\1\2 /
|
||
|
s/^ and\(i*\)\.\([lbw]\) / and\1\2 /
|
||
|
s/^ mul\([su]\)\.\([lw]\) / mul\1\2 /
|
||
|
s/^ div\([sul]*\)\.\([lw]\) / div\1\2 /
|
||
|
s/^ cmp\([i2]*\)\.\([lbw]\) / cmp\1\2 /
|
||
|
s/^ ro\([xlr]*\)\.\([lbw]\) / ro\1\2 /
|
||
|
s/^ \([al]\)s\([lr]\)\.\([lbw]\) / \1s\2\3 /
|
||
|
s/^ add\([xiq]*\)\.\([lbw]\) / add\1\2 /
|
||
|
s/^ sub\([xiq]*\)\.\([lbw]\) / sub\1\2 /
|
||
|
s/^ move\([scmq]*\)\.\([lbw]\) / move\1\2 /
|
||
|
s/^ fabs\.\([sdx]\) / fabs\1 /
|
||
|
s/^ fneg\.\([sdx]\) / fneg\1 /
|
||
|
s/^ ftst\.\([sdx]\) / ftst\1 /
|
||
|
s/^ fmul\.\([sdx]\) / fmul\1 /
|
||
|
s/^ fdiv\.\([sdx]\) / fdiv\1 /
|
||
|
s/^ fsqrt\.\([sdx]\) / fsqrt\1 /
|
||
|
s/^ fadd\.\([sdxbwl]\) / fadd\1 /
|
||
|
s/^ fsub\.\([sdxbwl]\) / fsub\1 /
|
||
|
s/^ fcmp\.\([sdxbwl]\) / fcmp\1 /
|
||
|
s/^ fmove\([mx]*\)\.\([sdxbwl]\) / fmove\1\2 /
|
||
|
|
||
|
# fix an odd instruction
|
||
|
s/^ bhs\.w / bcc /
|
||
|
|
||
|
# set and branch instructions; questionable
|
||
|
s/^ s\([a-z][a-z]*\)\.b / s\1 /
|
||
|
s/^ db\([a-z][a-z]*\)\.w / db\1 /
|
||
|
s/^ b\([a-eg-z][a-z]*\)\.b / b\1s /
|
||
|
s/^ b\([a-eg-z][a-z]*\)\.w / b\1 /
|
||
|
s/^ b\([a-eg-z][a-z]*\)\.l / b\1l /
|
||
|
s/^ fb\([a-eg-z][a-z]*\)\.w / fb\1 /
|
||
|
s/^ fb\([a-eg-z][a-z]*\)\.l / fb\1l /
|
||
|
|
||
|
# make up for a gas bug
|
||
|
/^ fmovemx /{
|
||
|
s/ fp\([0-7]\),/ fp\1-fp\1,/
|
||
|
s/,fp\([0-7]\) /,fp\1-fp\1 /
|
||
|
s/,fp\([0-7]\)$/,fp\1-fp\1/
|
||
|
}
|
||
|
'
|