mirror of
https://github.com/ctm/syn68k.git
synced 2024-12-01 00:51:19 +00:00
37 lines
989 B
Perl
Executable File
37 lines
989 B
Perl
Executable File
#!/usr/bin/perl -ni
|
|
|
|
# This perl script strips out the extra cruft created as a side effect of
|
|
# splitting syn68k.c into many functions. This will make the resulting
|
|
# syn68k.o file smaller and also force the real branch targets to be
|
|
# aligned optimally.
|
|
|
|
# Delete the header for each function
|
|
if (/^\.globl _s68k_handle_opcode_0x/ .. /^[#\/]APP$/)
|
|
{
|
|
print if (/^[#\/]APP/ || /^L/);
|
|
}
|
|
|
|
# Delete the trailer for each function
|
|
elsif (/^_S68K_DONE_WITH/ .. /^\s*ret$/)
|
|
{
|
|
print if (!/\s*movl %ebp,%esp$/
|
|
&& !/\s*leal\s*(-?\d+)?\(%ebp\),%esp$/
|
|
&& !/\s*movl\s*(-?\d+)?\(%ebp\),%edi$/
|
|
&& !/\s*popl/
|
|
&& !/\s*ret$/
|
|
&& !/^_S68K_DONE_WITH/
|
|
&& !/s68k_handle_opcode/);
|
|
}
|
|
elsif (/^\s*lods/)
|
|
{
|
|
die "lods not allowed; we're punting cld's these days.";
|
|
}
|
|
# elsif (/^\s*call/ && !/s68k_handle_opcode/)
|
|
# { # no longer necessary since we punted lodsl
|
|
# print "$_\tcld\n";
|
|
# }
|
|
elsif (!/s68k_handle_opcode/)
|
|
{
|
|
print;
|
|
}
|