Commit b50118ca authored by Ulf Möller's avatar Ulf Möller
Browse files

save registers in the debug output code (return value is overwritten too)

parent a57ecb95
Loading
Loading
Loading
Loading
+23 −1
Original line number Diff line number Diff line
@@ -464,23 +464,29 @@ sub main'data_word
	push(@out,"\t.long $_[0]\n");
	}

# debug output functions: puts, putx, printf

sub main'puts
	{
	&pushvars();
	&main'push('$Lstring' . ++$constl);
	&main'call('puts');
	$stack-=4;
	&main'add("esp",4);
	&popvars();

	$const .= "Lstring$constl:\n\t.string \"@_[0]\"\n";
	}

sub main'putx
	{
	&pushvars();
	&main'push($_[0]);
	&main'push('$Lstring' . ++$constl);
	&main'call('printf');
	$stack-=8;
	&main'add("esp",8);
	&popvars();

	$const .= "Lstring$constl:\n\t.string \"\%X\"\n";
	}
@@ -488,6 +494,7 @@ sub main'putx
sub main'printf
	{
	$ostack = $stack;
	&pushvars();
	for ($i = @_ - 1; $i >= 0; $i--)
		{
		$constl++;
@@ -509,6 +516,21 @@ sub main'printf
			}
		}
	&main'call('printf');
	$stack=$ostack;
	$stack-=4*@_;
	&popvars();
	&main'add("esp",4*@_);
	}

sub pushvars
	{
	&main'push("edx");
	&main'push("ecx");
	&main'push("eax");
	}

sub popvars
	{
	&main'pop("eax");
	&main'pop("ecx");
	&main'pop("edx");
	}