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

more of the same: add printf() for perlasm.

parent 428a55a0
Loading
Loading
Loading
Loading
+39 −11
Original line number Diff line number Diff line
@@ -466,9 +466,9 @@ sub main'data_word

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

	$const .= "Lstring$constl:\n\t.string \"@_[0]\"\n";
@@ -476,11 +476,39 @@ sub main'puts

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

	$const .= "Lstring$constl:\n\t.string \"\%X\"\n";
	}

sub main'printf
	{
	$ostack = $stack;
	for ($i = @_ - 1; $i >= 0; $i--)
		{
		$constl++;
		if ($i == 0) # change this to support %s format strings
			{
			&main'push('$Lstring' . $constl);
			$const .= "Lstring$constl:\n\t.string \"@_[$i]\"\n";
			}
		else
			{
			if ($_[$i] =~ /([0-9]*)\(%esp\)/)
				{
				&main'push(($1 + $stack - $ostack) . '(%esp)');
				}
			else
				{
				&main'push($_[$i]);
				}
			}
		}
	&main'call('printf');
	$stack=$ostack;
	&main'add("esp",4*@_);
	}