Oh. I think I can have some answers in less than a month. That is just what I have allocated for investigation. But it will take a week or so to get something working well enough to compare with the inline tweaking approach.
Plus write now I am enjoying the change of pace.
Cool, let's see how it goes. Feed it the decode routine from nrv2b.c and see how it likes that. gcc is a long ways from doing this in registers without a major re-write, which is probably about as much work as your implementation in assy. Very clever assy code, BTW.
Also I think the .S files don't have to be kept if we use a trivial post processing program like below.
-Steve
#!/usr/bin/perl # # program to process a .s file generated by gcc # to eliminate gcc gingerbread so the file # can be used for linuxbios. # Also check for register spillage and use of the # stack since this code is intended to run without # ram. # # GPL for the linuxbios project # # by. Steve M. Gehlbach (steve @ kesa . com) #
$ret = 0;
while (<STDIN>) {
#
# save everything and go over it
# once to check for errors
#
$line = $_;
# get everthing up to comment
# we don't want to bail out on items
# in comments.
$_ = (split(/\#/))[0];
next unless ($_);
#
# now check for things that indicate that
# the stack is being used, which means that gcc
# failed to fully inline code
# with no stack pushes
&Abort if /\(\%esp\)/;
if (/\(\%ebp\)/) {
&Abort unless /\%esp/;
}
&Abort if /\scall\s/;
&Abort if /\.Lfe2\:/;
/pushl/ && ($line = '#'.$line);
/pop/ && ($line = '#'.$line);
/leave/ && ($line = '#'.$line);
/\%esp/ && ($line = '#'.$line);
/ret/ && do
{
# only one return should be there
&Abort if ($ret);
# convert the last return to a jump in case
# ret is in middle of code; rel jump okay?
$line =~ s/ret/jmp \.Lfe1/;
$ret++;
};
# save the processed line
push @lines,$line;
}
#
# okay so print it out
#
while ($_ = shift @lines) {
print $_;
}
exit (0);
#
# error print it with gas pseudo-ops
# and bail
#
sub Abort {
chomp $line;
print ".print \"$line <<< ERROR*** gcc uses stack or failed to inline code!\"\n";
print ".err\n";
exit (1);
}
_______________________________________________ Linuxbios mailing list [EMAIL PROTECTED] http://www.clustermatic.org/mailman/listinfo/linuxbios

