diff options
| author | beck <> | 2002-05-15 02:29:21 +0000 |
|---|---|---|
| committer | beck <> | 2002-05-15 02:29:21 +0000 |
| commit | b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9 (patch) | |
| tree | fa27cf82a1250b64ed3bf5f4a18c7354d470bbcc /src/lib/libcrypto/perlasm/x86unix.pl | |
| parent | e471e1ea98d673597b182ea85f29e30c97cd08b5 (diff) | |
| download | openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.gz openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.bz2 openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.zip | |
OpenSSL 0.9.7 stable 2002 05 08 merge
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/perlasm/x86unix.pl | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/lib/libcrypto/perlasm/x86unix.pl b/src/lib/libcrypto/perlasm/x86unix.pl index 10a7af8bff..9ceabf0705 100644 --- a/src/lib/libcrypto/perlasm/x86unix.pl +++ b/src/lib/libcrypto/perlasm/x86unix.pl | |||
| @@ -3,6 +3,8 @@ | |||
| 3 | package x86unix; | 3 | package x86unix; |
| 4 | 4 | ||
| 5 | $label="L000"; | 5 | $label="L000"; |
| 6 | $const=""; | ||
| 7 | $constl=0; | ||
| 6 | 8 | ||
| 7 | $align=($main'aout)?"4":"16"; | 9 | $align=($main'aout)?"4":"16"; |
| 8 | $under=($main'aout)?"_":""; | 10 | $under=($main'aout)?"_":""; |
| @@ -162,6 +164,8 @@ sub main'dec { &out1("decl",@_); } | |||
| 162 | sub main'inc { &out1("incl",@_); } | 164 | sub main'inc { &out1("incl",@_); } |
| 163 | sub main'push { &out1("pushl",@_); $stack+=4; } | 165 | sub main'push { &out1("pushl",@_); $stack+=4; } |
| 164 | sub main'pop { &out1("popl",@_); $stack-=4; } | 166 | sub main'pop { &out1("popl",@_); $stack-=4; } |
| 167 | sub main'pushf { &out0("pushf"); $stack+=4; } | ||
| 168 | sub main'popf { &out0("popf"); $stack-=4; } | ||
| 165 | sub main'not { &out1("notl",@_); } | 169 | sub main'not { &out1("notl",@_); } |
| 166 | sub main'call { &out1("call",$under.$_[0]); } | 170 | sub main'call { &out1("call",$under.$_[0]); } |
| 167 | sub main'ret { &out0("ret"); } | 171 | sub main'ret { &out0("ret"); } |
| @@ -344,6 +348,7 @@ sub main'function_end | |||
| 344 | .${func}_end: | 348 | .${func}_end: |
| 345 | EOF | 349 | EOF |
| 346 | push(@out,$tmp); | 350 | push(@out,$tmp); |
| 351 | |||
| 347 | if ($main'cpp) | 352 | if ($main'cpp) |
| 348 | { push(@out,"\tSIZE($func,.${func}_end-$func)\n"); } | 353 | { push(@out,"\tSIZE($func,.${func}_end-$func)\n"); } |
| 349 | elsif ($main'gaswin) | 354 | elsif ($main'gaswin) |
| @@ -453,9 +458,87 @@ sub main'set_label | |||
| 453 | 458 | ||
| 454 | sub main'file_end | 459 | sub main'file_end |
| 455 | { | 460 | { |
| 461 | if ($const ne "") | ||
| 462 | { | ||
| 463 | push(@out,".section .rodata\n"); | ||
| 464 | push(@out,$const); | ||
| 465 | $const=""; | ||
| 466 | } | ||
| 456 | } | 467 | } |
| 457 | 468 | ||
| 458 | sub main'data_word | 469 | sub main'data_word |
| 459 | { | 470 | { |
| 460 | push(@out,"\t.long $_[0]\n"); | 471 | push(@out,"\t.long $_[0]\n"); |
| 461 | } | 472 | } |
| 473 | |||
| 474 | # debug output functions: puts, putx, printf | ||
| 475 | |||
| 476 | sub main'puts | ||
| 477 | { | ||
| 478 | &pushvars(); | ||
| 479 | &main'push('$Lstring' . ++$constl); | ||
| 480 | &main'call('puts'); | ||
| 481 | $stack-=4; | ||
| 482 | &main'add("esp",4); | ||
| 483 | &popvars(); | ||
| 484 | |||
| 485 | $const .= "Lstring$constl:\n\t.string \"@_[0]\"\n"; | ||
| 486 | } | ||
| 487 | |||
| 488 | sub main'putx | ||
| 489 | { | ||
| 490 | &pushvars(); | ||
| 491 | &main'push($_[0]); | ||
| 492 | &main'push('$Lstring' . ++$constl); | ||
| 493 | &main'call('printf'); | ||
| 494 | &main'add("esp",8); | ||
| 495 | $stack-=8; | ||
| 496 | &popvars(); | ||
| 497 | |||
| 498 | $const .= "Lstring$constl:\n\t.string \"\%X\"\n"; | ||
| 499 | } | ||
| 500 | |||
| 501 | sub main'printf | ||
| 502 | { | ||
| 503 | $ostack = $stack; | ||
| 504 | &pushvars(); | ||
| 505 | for ($i = @_ - 1; $i >= 0; $i--) | ||
| 506 | { | ||
| 507 | if ($i == 0) # change this to support %s format strings | ||
| 508 | { | ||
| 509 | &main'push('$Lstring' . ++$constl); | ||
| 510 | $const .= "Lstring$constl:\n\t.string \"@_[$i]\"\n"; | ||
| 511 | } | ||
| 512 | else | ||
| 513 | { | ||
| 514 | if ($_[$i] =~ /([0-9]*)\(%esp\)/) | ||
| 515 | { | ||
| 516 | &main'push(($1 + $stack - $ostack) . '(%esp)'); | ||
| 517 | } | ||
| 518 | else | ||
| 519 | { | ||
| 520 | &main'push($_[$i]); | ||
| 521 | } | ||
| 522 | } | ||
| 523 | } | ||
| 524 | &main'call('printf'); | ||
| 525 | $stack-=4*@_; | ||
| 526 | &main'add("esp",4*@_); | ||
| 527 | &popvars(); | ||
| 528 | } | ||
| 529 | |||
| 530 | sub pushvars | ||
| 531 | { | ||
| 532 | &main'pushf(); | ||
| 533 | &main'push("edx"); | ||
| 534 | &main'push("ecx"); | ||
| 535 | &main'push("eax"); | ||
| 536 | } | ||
| 537 | |||
| 538 | sub popvars | ||
| 539 | { | ||
| 540 | &main'pop("eax"); | ||
| 541 | &main'pop("ecx"); | ||
| 542 | &main'pop("edx"); | ||
| 543 | &main'popf(); | ||
| 544 | } | ||
