summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2014-04-30 13:40:02 +0000
committerjsing <>2014-04-30 13:40:02 +0000
commitb8e088b53dabff9eeb33721c6fa4e60831bf9797 (patch)
tree75932b21b0fece851ece3d9ad0c80de6a9ff65e2 /src
parent11a8133c7b915dcd4af9f7cf1c70b1179eeddf14 (diff)
downloadopenbsd-b8e088b53dabff9eeb33721c6fa4e60831bf9797.tar.gz
openbsd-b8e088b53dabff9eeb33721c6fa4e60831bf9797.tar.bz2
openbsd-b8e088b53dabff9eeb33721c6fa4e60831bf9797.zip
First pass at removing win64 support from the assembly generating Perl
scripts. We certainly do not need an identical copy of the win64 exception handler in each script (surely one copy would be sufficient). ok miod@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/bn/asm/modexp512-x86_64.pl109
-rwxr-xr-xsrc/lib/libcrypto/bn/asm/x86_64-mont.pl177
-rw-r--r--src/lib/libcrypto/camellia/asm/cmll-x86_64.pl216
-rwxr-xr-xsrc/lib/libcrypto/md5/asm/md5-x86_64.pl106
-rw-r--r--src/lib/libcrypto/rc4/asm/rc4-md5-x86_64.pl107
-rwxr-xr-xsrc/lib/libcrypto/rc4/asm/rc4-x86_64.pl134
-rwxr-xr-xsrc/lib/libcrypto/sha/asm/sha512-x86_64.pl109
-rw-r--r--src/lib/libcrypto/whrlpool/asm/wp-x86_64.pl109
-rw-r--r--src/lib/libssl/src/crypto/bn/asm/modexp512-x86_64.pl109
-rwxr-xr-xsrc/lib/libssl/src/crypto/bn/asm/x86_64-mont.pl177
-rw-r--r--src/lib/libssl/src/crypto/camellia/asm/cmll-x86_64.pl216
-rwxr-xr-xsrc/lib/libssl/src/crypto/md5/asm/md5-x86_64.pl106
-rw-r--r--src/lib/libssl/src/crypto/rc4/asm/rc4-md5-x86_64.pl107
-rwxr-xr-xsrc/lib/libssl/src/crypto/rc4/asm/rc4-x86_64.pl134
-rwxr-xr-xsrc/lib/libssl/src/crypto/sha/asm/sha512-x86_64.pl109
-rw-r--r--src/lib/libssl/src/crypto/whrlpool/asm/wp-x86_64.pl109
16 files changed, 2 insertions, 2132 deletions
diff --git a/src/lib/libcrypto/bn/asm/modexp512-x86_64.pl b/src/lib/libcrypto/bn/asm/modexp512-x86_64.pl
index bfd6e97541..4317282835 100644
--- a/src/lib/libcrypto/bn/asm/modexp512-x86_64.pl
+++ b/src/lib/libcrypto/bn/asm/modexp512-x86_64.pl
@@ -61,8 +61,6 @@ $flavour = shift;
61$output = shift; 61$output = shift;
62if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 62if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
63 63
64my $win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
65
66$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 64$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
67( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 65( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
68( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 66( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -1374,113 +1372,6 @@ end_main_loop_a3b:
1374.size mod_exp_512, . - mod_exp_512 1372.size mod_exp_512, . - mod_exp_512
1375___ 1373___
1376 1374
1377if ($win64) {
1378# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
1379# CONTEXT *context,DISPATCHER_CONTEXT *disp)
1380my $rec="%rcx";
1381my $frame="%rdx";
1382my $context="%r8";
1383my $disp="%r9";
1384
1385$code.=<<___;
1386.extern __imp_RtlVirtualUnwind
1387.type mod_exp_512_se_handler,\@abi-omnipotent
1388.align 16
1389mod_exp_512_se_handler:
1390 push %rsi
1391 push %rdi
1392 push %rbx
1393 push %rbp
1394 push %r12
1395 push %r13
1396 push %r14
1397 push %r15
1398 pushfq
1399 sub \$64,%rsp
1400
1401 mov 120($context),%rax # pull context->Rax
1402 mov 248($context),%rbx # pull context->Rip
1403
1404 lea .Lbody(%rip),%r10
1405 cmp %r10,%rbx # context->Rip<prologue label
1406 jb .Lin_prologue
1407
1408 mov 152($context),%rax # pull context->Rsp
1409
1410 lea .Lepilogue(%rip),%r10
1411 cmp %r10,%rbx # context->Rip>=epilogue label
1412 jae .Lin_prologue
1413
1414 mov $rsp_offset(%rax),%rax # pull saved Rsp
1415
1416 mov 32(%rax),%rbx
1417 mov 40(%rax),%rbp
1418 mov 24(%rax),%r12
1419 mov 16(%rax),%r13
1420 mov 8(%rax),%r14
1421 mov 0(%rax),%r15
1422 lea 48(%rax),%rax
1423 mov %rbx,144($context) # restore context->Rbx
1424 mov %rbp,160($context) # restore context->Rbp
1425 mov %r12,216($context) # restore context->R12
1426 mov %r13,224($context) # restore context->R13
1427 mov %r14,232($context) # restore context->R14
1428 mov %r15,240($context) # restore context->R15
1429
1430.Lin_prologue:
1431 mov 8(%rax),%rdi
1432 mov 16(%rax),%rsi
1433 mov %rax,152($context) # restore context->Rsp
1434 mov %rsi,168($context) # restore context->Rsi
1435 mov %rdi,176($context) # restore context->Rdi
1436
1437 mov 40($disp),%rdi # disp->ContextRecord
1438 mov $context,%rsi # context
1439 mov \$154,%ecx # sizeof(CONTEXT)
1440 .long 0xa548f3fc # cld; rep movsq
1441
1442 mov $disp,%rsi
1443 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
1444 mov 8(%rsi),%rdx # arg2, disp->ImageBase
1445 mov 0(%rsi),%r8 # arg3, disp->ControlPc
1446 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
1447 mov 40(%rsi),%r10 # disp->ContextRecord
1448 lea 56(%rsi),%r11 # &disp->HandlerData
1449 lea 24(%rsi),%r12 # &disp->EstablisherFrame
1450 mov %r10,32(%rsp) # arg5
1451 mov %r11,40(%rsp) # arg6
1452 mov %r12,48(%rsp) # arg7
1453 mov %rcx,56(%rsp) # arg8, (NULL)
1454 call *__imp_RtlVirtualUnwind(%rip)
1455
1456 mov \$1,%eax # ExceptionContinueSearch
1457 add \$64,%rsp
1458 popfq
1459 pop %r15
1460 pop %r14
1461 pop %r13
1462 pop %r12
1463 pop %rbp
1464 pop %rbx
1465 pop %rdi
1466 pop %rsi
1467 ret
1468.size mod_exp_512_se_handler,.-mod_exp_512_se_handler
1469
1470.section .pdata
1471.align 4
1472 .rva .LSEH_begin_mod_exp_512
1473 .rva .LSEH_end_mod_exp_512
1474 .rva .LSEH_info_mod_exp_512
1475
1476.section .xdata
1477.align 8
1478.LSEH_info_mod_exp_512:
1479 .byte 9,0,0,0
1480 .rva mod_exp_512_se_handler
1481___
1482}
1483
1484sub reg_part { 1375sub reg_part {
1485my ($reg,$conv)=@_; 1376my ($reg,$conv)=@_;
1486 if ($reg =~ /%r[0-9]+/) { $reg .= $conv; } 1377 if ($reg =~ /%r[0-9]+/) { $reg .= $conv; }
diff --git a/src/lib/libcrypto/bn/asm/x86_64-mont.pl b/src/lib/libcrypto/bn/asm/x86_64-mont.pl
index 17fb94c84c..90c717f115 100755
--- a/src/lib/libcrypto/bn/asm/x86_64-mont.pl
+++ b/src/lib/libcrypto/bn/asm/x86_64-mont.pl
@@ -33,8 +33,6 @@ $flavour = shift;
33$output = shift; 33$output = shift;
34if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 34if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
35 35
36$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
37
38$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 36$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
39( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 37( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
40( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 38( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -1502,180 +1500,5 @@ $code.=<<___;
1502.align 16 1500.align 16
1503___ 1501___
1504 1502
1505# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
1506# CONTEXT *context,DISPATCHER_CONTEXT *disp)
1507if ($win64) {
1508$rec="%rcx";
1509$frame="%rdx";
1510$context="%r8";
1511$disp="%r9";
1512
1513$code.=<<___;
1514.extern __imp_RtlVirtualUnwind
1515.type mul_handler,\@abi-omnipotent
1516.align 16
1517mul_handler:
1518 push %rsi
1519 push %rdi
1520 push %rbx
1521 push %rbp
1522 push %r12
1523 push %r13
1524 push %r14
1525 push %r15
1526 pushfq
1527 sub \$64,%rsp
1528
1529 mov 120($context),%rax # pull context->Rax
1530 mov 248($context),%rbx # pull context->Rip
1531
1532 mov 8($disp),%rsi # disp->ImageBase
1533 mov 56($disp),%r11 # disp->HandlerData
1534
1535 mov 0(%r11),%r10d # HandlerData[0]
1536 lea (%rsi,%r10),%r10 # end of prologue label
1537 cmp %r10,%rbx # context->Rip<end of prologue label
1538 jb .Lcommon_seh_tail
1539
1540 mov 152($context),%rax # pull context->Rsp
1541
1542 mov 4(%r11),%r10d # HandlerData[1]
1543 lea (%rsi,%r10),%r10 # epilogue label
1544 cmp %r10,%rbx # context->Rip>=epilogue label
1545 jae .Lcommon_seh_tail
1546
1547 mov 192($context),%r10 # pull $num
1548 mov 8(%rax,%r10,8),%rax # pull saved stack pointer
1549 lea 48(%rax),%rax
1550
1551 mov -8(%rax),%rbx
1552 mov -16(%rax),%rbp
1553 mov -24(%rax),%r12
1554 mov -32(%rax),%r13
1555 mov -40(%rax),%r14
1556 mov -48(%rax),%r15
1557 mov %rbx,144($context) # restore context->Rbx
1558 mov %rbp,160($context) # restore context->Rbp
1559 mov %r12,216($context) # restore context->R12
1560 mov %r13,224($context) # restore context->R13
1561 mov %r14,232($context) # restore context->R14
1562 mov %r15,240($context) # restore context->R15
1563
1564 jmp .Lcommon_seh_tail
1565.size mul_handler,.-mul_handler
1566
1567.type sqr_handler,\@abi-omnipotent
1568.align 16
1569sqr_handler:
1570 push %rsi
1571 push %rdi
1572 push %rbx
1573 push %rbp
1574 push %r12
1575 push %r13
1576 push %r14
1577 push %r15
1578 pushfq
1579 sub \$64,%rsp
1580
1581 mov 120($context),%rax # pull context->Rax
1582 mov 248($context),%rbx # pull context->Rip
1583
1584 lea .Lsqr4x_body(%rip),%r10
1585 cmp %r10,%rbx # context->Rip<.Lsqr_body
1586 jb .Lcommon_seh_tail
1587
1588 mov 152($context),%rax # pull context->Rsp
1589
1590 lea .Lsqr4x_epilogue(%rip),%r10
1591 cmp %r10,%rbx # context->Rip>=.Lsqr_epilogue
1592 jae .Lcommon_seh_tail
1593
1594 mov 56(%rax),%rax # pull saved stack pointer
1595 lea 48(%rax),%rax
1596
1597 mov -8(%rax),%rbx
1598 mov -16(%rax),%rbp
1599 mov -24(%rax),%r12
1600 mov -32(%rax),%r13
1601 mov -40(%rax),%r14
1602 mov -48(%rax),%r15
1603 mov %rbx,144($context) # restore context->Rbx
1604 mov %rbp,160($context) # restore context->Rbp
1605 mov %r12,216($context) # restore context->R12
1606 mov %r13,224($context) # restore context->R13
1607 mov %r14,232($context) # restore context->R14
1608 mov %r15,240($context) # restore context->R15
1609
1610.Lcommon_seh_tail:
1611 mov 8(%rax),%rdi
1612 mov 16(%rax),%rsi
1613 mov %rax,152($context) # restore context->Rsp
1614 mov %rsi,168($context) # restore context->Rsi
1615 mov %rdi,176($context) # restore context->Rdi
1616
1617 mov 40($disp),%rdi # disp->ContextRecord
1618 mov $context,%rsi # context
1619 mov \$154,%ecx # sizeof(CONTEXT)
1620 .long 0xa548f3fc # cld; rep movsq
1621
1622 mov $disp,%rsi
1623 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
1624 mov 8(%rsi),%rdx # arg2, disp->ImageBase
1625 mov 0(%rsi),%r8 # arg3, disp->ControlPc
1626 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
1627 mov 40(%rsi),%r10 # disp->ContextRecord
1628 lea 56(%rsi),%r11 # &disp->HandlerData
1629 lea 24(%rsi),%r12 # &disp->EstablisherFrame
1630 mov %r10,32(%rsp) # arg5
1631 mov %r11,40(%rsp) # arg6
1632 mov %r12,48(%rsp) # arg7
1633 mov %rcx,56(%rsp) # arg8, (NULL)
1634 call *__imp_RtlVirtualUnwind(%rip)
1635
1636 mov \$1,%eax # ExceptionContinueSearch
1637 add \$64,%rsp
1638 popfq
1639 pop %r15
1640 pop %r14
1641 pop %r13
1642 pop %r12
1643 pop %rbp
1644 pop %rbx
1645 pop %rdi
1646 pop %rsi
1647 ret
1648.size sqr_handler,.-sqr_handler
1649
1650.section .pdata
1651.align 4
1652 .rva .LSEH_begin_bn_mul_mont
1653 .rva .LSEH_end_bn_mul_mont
1654 .rva .LSEH_info_bn_mul_mont
1655
1656 .rva .LSEH_begin_bn_mul4x_mont
1657 .rva .LSEH_end_bn_mul4x_mont
1658 .rva .LSEH_info_bn_mul4x_mont
1659
1660 .rva .LSEH_begin_bn_sqr4x_mont
1661 .rva .LSEH_end_bn_sqr4x_mont
1662 .rva .LSEH_info_bn_sqr4x_mont
1663
1664.section .xdata
1665.align 8
1666.LSEH_info_bn_mul_mont:
1667 .byte 9,0,0,0
1668 .rva mul_handler
1669 .rva .Lmul_body,.Lmul_epilogue # HandlerData[]
1670.LSEH_info_bn_mul4x_mont:
1671 .byte 9,0,0,0
1672 .rva mul_handler
1673 .rva .Lmul4x_body,.Lmul4x_epilogue # HandlerData[]
1674.LSEH_info_bn_sqr4x_mont:
1675 .byte 9,0,0,0
1676 .rva sqr_handler
1677___
1678}
1679
1680print $code; 1503print $code;
1681close STDOUT; 1504close STDOUT;
diff --git a/src/lib/libcrypto/camellia/asm/cmll-x86_64.pl b/src/lib/libcrypto/camellia/asm/cmll-x86_64.pl
index 9f4b82fa48..a171c654b2 100644
--- a/src/lib/libcrypto/camellia/asm/cmll-x86_64.pl
+++ b/src/lib/libcrypto/camellia/asm/cmll-x86_64.pl
@@ -33,8 +33,6 @@ $flavour = shift;
33$output = shift; 33$output = shift;
34if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 34if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
35 35
36$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
37
38$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 36$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
39( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 37( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
40( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 38( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -57,7 +55,7 @@ $inp="%r12";
57$out="%r13"; 55$out="%r13";
58$key="%r14"; 56$key="%r14";
59$keyend="%r15"; 57$keyend="%r15";
60$arg0d=$win64?"%ecx":"%edi"; 58$arg0d="%edi";
61 59
62# const unsigned int Camellia_SBOX[4][256]; 60# const unsigned int Camellia_SBOX[4][256];
63# Well, sort of... Camellia_SBOX[0][] is interleaved with [1][], 61# Well, sort of... Camellia_SBOX[0][] is interleaved with [1][],
@@ -864,218 +862,6 @@ Camellia_cbc_encrypt:
864___ 862___
865} 863}
866 864
867# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
868# CONTEXT *context,DISPATCHER_CONTEXT *disp)
869if ($win64) {
870$rec="%rcx";
871$frame="%rdx";
872$context="%r8";
873$disp="%r9";
874
875$code.=<<___;
876.extern __imp_RtlVirtualUnwind
877.type common_se_handler,\@abi-omnipotent
878.align 16
879common_se_handler:
880 push %rsi
881 push %rdi
882 push %rbx
883 push %rbp
884 push %r12
885 push %r13
886 push %r14
887 push %r15
888 pushfq
889 lea -64(%rsp),%rsp
890
891 mov 120($context),%rax # pull context->Rax
892 mov 248($context),%rbx # pull context->Rip
893
894 mov 8($disp),%rsi # disp->ImageBase
895 mov 56($disp),%r11 # disp->HandlerData
896
897 mov 0(%r11),%r10d # HandlerData[0]
898 lea (%rsi,%r10),%r10 # prologue label
899 cmp %r10,%rbx # context->Rip<prologue label
900 jb .Lin_prologue
901
902 mov 152($context),%rax # pull context->Rsp
903
904 mov 4(%r11),%r10d # HandlerData[1]
905 lea (%rsi,%r10),%r10 # epilogue label
906 cmp %r10,%rbx # context->Rip>=epilogue label
907 jae .Lin_prologue
908
909 lea 40(%rax),%rax
910 mov -8(%rax),%rbx
911 mov -16(%rax),%rbp
912 mov -24(%rax),%r13
913 mov -32(%rax),%r14
914 mov -40(%rax),%r15
915 mov %rbx,144($context) # restore context->Rbx
916 mov %rbp,160($context) # restore context->Rbp
917 mov %r13,224($context) # restore context->R13
918 mov %r14,232($context) # restore context->R14
919 mov %r15,240($context) # restore context->R15
920
921.Lin_prologue:
922 mov 8(%rax),%rdi
923 mov 16(%rax),%rsi
924 mov %rax,152($context) # restore context->Rsp
925 mov %rsi,168($context) # restore context->Rsi
926 mov %rdi,176($context) # restore context->Rdi
927
928 jmp .Lcommon_seh_exit
929.size common_se_handler,.-common_se_handler
930
931.type cbc_se_handler,\@abi-omnipotent
932.align 16
933cbc_se_handler:
934 push %rsi
935 push %rdi
936 push %rbx
937 push %rbp
938 push %r12
939 push %r13
940 push %r14
941 push %r15
942 pushfq
943 lea -64(%rsp),%rsp
944
945 mov 120($context),%rax # pull context->Rax
946 mov 248($context),%rbx # pull context->Rip
947
948 lea .Lcbc_prologue(%rip),%r10
949 cmp %r10,%rbx # context->Rip<.Lcbc_prologue
950 jb .Lin_cbc_prologue
951
952 lea .Lcbc_body(%rip),%r10
953 cmp %r10,%rbx # context->Rip<.Lcbc_body
954 jb .Lin_cbc_frame_setup
955
956 mov 152($context),%rax # pull context->Rsp
957
958 lea .Lcbc_abort(%rip),%r10
959 cmp %r10,%rbx # context->Rip>=.Lcbc_abort
960 jae .Lin_cbc_prologue
961
962 # handle pushf/popf in Camellia_cbc_encrypt
963 lea .Lcbc_enc_pushf(%rip),%r10
964 cmp %r10,%rbx # context->Rip<=.Lcbc_enc_pushf
965 jbe .Lin_cbc_no_flag
966 lea 8(%rax),%rax
967 lea .Lcbc_enc_popf(%rip),%r10
968 cmp %r10,%rbx # context->Rip<.Lcbc_enc_popf
969 jb .Lin_cbc_no_flag
970 lea -8(%rax),%rax
971 lea .Lcbc_dec_pushf(%rip),%r10
972 cmp %r10,%rbx # context->Rip<=.Lcbc_dec_pushf
973 jbe .Lin_cbc_no_flag
974 lea 8(%rax),%rax
975 lea .Lcbc_dec_popf(%rip),%r10
976 cmp %r10,%rbx # context->Rip<.Lcbc_dec_popf
977 jb .Lin_cbc_no_flag
978 lea -8(%rax),%rax
979
980.Lin_cbc_no_flag:
981 mov 48(%rax),%rax # $_rsp
982 lea 48(%rax),%rax
983
984.Lin_cbc_frame_setup:
985 mov -8(%rax),%rbx
986 mov -16(%rax),%rbp
987 mov -24(%rax),%r12
988 mov -32(%rax),%r13
989 mov -40(%rax),%r14
990 mov -48(%rax),%r15
991 mov %rbx,144($context) # restore context->Rbx
992 mov %rbp,160($context) # restore context->Rbp
993 mov %r12,216($context) # restore context->R12
994 mov %r13,224($context) # restore context->R13
995 mov %r14,232($context) # restore context->R14
996 mov %r15,240($context) # restore context->R15
997
998.Lin_cbc_prologue:
999 mov 8(%rax),%rdi
1000 mov 16(%rax),%rsi
1001 mov %rax,152($context) # restore context->Rsp
1002 mov %rsi,168($context) # restore context->Rsi
1003 mov %rdi,176($context) # restore context->Rdi
1004
1005.align 4
1006.Lcommon_seh_exit:
1007
1008 mov 40($disp),%rdi # disp->ContextRecord
1009 mov $context,%rsi # context
1010 mov \$`1232/8`,%ecx # sizeof(CONTEXT)
1011 .long 0xa548f3fc # cld; rep movsq
1012
1013 mov $disp,%rsi
1014 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
1015 mov 8(%rsi),%rdx # arg2, disp->ImageBase
1016 mov 0(%rsi),%r8 # arg3, disp->ControlPc
1017 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
1018 mov 40(%rsi),%r10 # disp->ContextRecord
1019 lea 56(%rsi),%r11 # &disp->HandlerData
1020 lea 24(%rsi),%r12 # &disp->EstablisherFrame
1021 mov %r10,32(%rsp) # arg5
1022 mov %r11,40(%rsp) # arg6
1023 mov %r12,48(%rsp) # arg7
1024 mov %rcx,56(%rsp) # arg8, (NULL)
1025 call *__imp_RtlVirtualUnwind(%rip)
1026
1027 mov \$1,%eax # ExceptionContinueSearch
1028 lea 64(%rsp),%rsp
1029 popfq
1030 pop %r15
1031 pop %r14
1032 pop %r13
1033 pop %r12
1034 pop %rbp
1035 pop %rbx
1036 pop %rdi
1037 pop %rsi
1038 ret
1039.size cbc_se_handler,.-cbc_se_handler
1040
1041.section .pdata
1042.align 4
1043 .rva .LSEH_begin_Camellia_EncryptBlock_Rounds
1044 .rva .LSEH_end_Camellia_EncryptBlock_Rounds
1045 .rva .LSEH_info_Camellia_EncryptBlock_Rounds
1046
1047 .rva .LSEH_begin_Camellia_DecryptBlock_Rounds
1048 .rva .LSEH_end_Camellia_DecryptBlock_Rounds
1049 .rva .LSEH_info_Camellia_DecryptBlock_Rounds
1050
1051 .rva .LSEH_begin_Camellia_Ekeygen
1052 .rva .LSEH_end_Camellia_Ekeygen
1053 .rva .LSEH_info_Camellia_Ekeygen
1054
1055 .rva .LSEH_begin_Camellia_cbc_encrypt
1056 .rva .LSEH_end_Camellia_cbc_encrypt
1057 .rva .LSEH_info_Camellia_cbc_encrypt
1058
1059.section .xdata
1060.align 8
1061.LSEH_info_Camellia_EncryptBlock_Rounds:
1062 .byte 9,0,0,0
1063 .rva common_se_handler
1064 .rva .Lenc_prologue,.Lenc_epilogue # HandlerData[]
1065.LSEH_info_Camellia_DecryptBlock_Rounds:
1066 .byte 9,0,0,0
1067 .rva common_se_handler
1068 .rva .Ldec_prologue,.Ldec_epilogue # HandlerData[]
1069.LSEH_info_Camellia_Ekeygen:
1070 .byte 9,0,0,0
1071 .rva common_se_handler
1072 .rva .Lkey_prologue,.Lkey_epilogue # HandlerData[]
1073.LSEH_info_Camellia_cbc_encrypt:
1074 .byte 9,0,0,0
1075 .rva cbc_se_handler
1076___
1077}
1078
1079$code =~ s/\`([^\`]*)\`/eval $1/gem; 865$code =~ s/\`([^\`]*)\`/eval $1/gem;
1080print $code; 866print $code;
1081close STDOUT; 867close STDOUT;
diff --git a/src/lib/libcrypto/md5/asm/md5-x86_64.pl b/src/lib/libcrypto/md5/asm/md5-x86_64.pl
index f11224d172..c902a1b532 100755
--- a/src/lib/libcrypto/md5/asm/md5-x86_64.pl
+++ b/src/lib/libcrypto/md5/asm/md5-x86_64.pl
@@ -112,8 +112,6 @@ my $flavour = shift;
112my $output = shift; 112my $output = shift;
113if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 113if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
114 114
115my $win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
116
117$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate; 115$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate;
118( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 116( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
119( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 117( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -261,110 +259,6 @@ $code .= <<EOF;
261.size md5_block_asm_data_order,.-md5_block_asm_data_order 259.size md5_block_asm_data_order,.-md5_block_asm_data_order
262EOF 260EOF
263 261
264# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
265# CONTEXT *context,DISPATCHER_CONTEXT *disp)
266if ($win64) {
267my $rec="%rcx";
268my $frame="%rdx";
269my $context="%r8";
270my $disp="%r9";
271
272$code.=<<___;
273.extern __imp_RtlVirtualUnwind
274.type se_handler,\@abi-omnipotent
275.align 16
276se_handler:
277 push %rsi
278 push %rdi
279 push %rbx
280 push %rbp
281 push %r12
282 push %r13
283 push %r14
284 push %r15
285 pushfq
286 sub \$64,%rsp
287
288 mov 120($context),%rax # pull context->Rax
289 mov 248($context),%rbx # pull context->Rip
290
291 lea .Lprologue(%rip),%r10
292 cmp %r10,%rbx # context->Rip<.Lprologue
293 jb .Lin_prologue
294
295 mov 152($context),%rax # pull context->Rsp
296
297 lea .Lepilogue(%rip),%r10
298 cmp %r10,%rbx # context->Rip>=.Lepilogue
299 jae .Lin_prologue
300
301 lea 40(%rax),%rax
302
303 mov -8(%rax),%rbp
304 mov -16(%rax),%rbx
305 mov -24(%rax),%r12
306 mov -32(%rax),%r14
307 mov -40(%rax),%r15
308 mov %rbx,144($context) # restore context->Rbx
309 mov %rbp,160($context) # restore context->Rbp
310 mov %r12,216($context) # restore context->R12
311 mov %r14,232($context) # restore context->R14
312 mov %r15,240($context) # restore context->R15
313
314.Lin_prologue:
315 mov 8(%rax),%rdi
316 mov 16(%rax),%rsi
317 mov %rax,152($context) # restore context->Rsp
318 mov %rsi,168($context) # restore context->Rsi
319 mov %rdi,176($context) # restore context->Rdi
320
321 mov 40($disp),%rdi # disp->ContextRecord
322 mov $context,%rsi # context
323 mov \$154,%ecx # sizeof(CONTEXT)
324 .long 0xa548f3fc # cld; rep movsq
325
326 mov $disp,%rsi
327 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
328 mov 8(%rsi),%rdx # arg2, disp->ImageBase
329 mov 0(%rsi),%r8 # arg3, disp->ControlPc
330 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
331 mov 40(%rsi),%r10 # disp->ContextRecord
332 lea 56(%rsi),%r11 # &disp->HandlerData
333 lea 24(%rsi),%r12 # &disp->EstablisherFrame
334 mov %r10,32(%rsp) # arg5
335 mov %r11,40(%rsp) # arg6
336 mov %r12,48(%rsp) # arg7
337 mov %rcx,56(%rsp) # arg8, (NULL)
338 call *__imp_RtlVirtualUnwind(%rip)
339
340 mov \$1,%eax # ExceptionContinueSearch
341 add \$64,%rsp
342 popfq
343 pop %r15
344 pop %r14
345 pop %r13
346 pop %r12
347 pop %rbp
348 pop %rbx
349 pop %rdi
350 pop %rsi
351 ret
352.size se_handler,.-se_handler
353
354.section .pdata
355.align 4
356 .rva .LSEH_begin_md5_block_asm_data_order
357 .rva .LSEH_end_md5_block_asm_data_order
358 .rva .LSEH_info_md5_block_asm_data_order
359
360.section .xdata
361.align 8
362.LSEH_info_md5_block_asm_data_order:
363 .byte 9,0,0,0
364 .rva se_handler
365___
366}
367
368print $code; 262print $code;
369 263
370close STDOUT; 264close STDOUT;
diff --git a/src/lib/libcrypto/rc4/asm/rc4-md5-x86_64.pl b/src/lib/libcrypto/rc4/asm/rc4-md5-x86_64.pl
index 272fa91e1a..501d9e936b 100644
--- a/src/lib/libcrypto/rc4/asm/rc4-md5-x86_64.pl
+++ b/src/lib/libcrypto/rc4/asm/rc4-md5-x86_64.pl
@@ -44,8 +44,6 @@ my $flavour = shift;
44my $output = shift; 44my $output = shift;
45if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 45if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
46 46
47my $win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
48
49$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate; 47$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate;
50( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 48( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
51( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 49( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -505,111 +503,6 @@ RC4_options:
505.size RC4_options,.-RC4_options 503.size RC4_options,.-RC4_options
506___ 504___
507} 505}
508# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
509# CONTEXT *context,DISPATCHER_CONTEXT *disp)
510if ($win64) {
511my $rec="%rcx";
512my $frame="%rdx";
513my $context="%r8";
514my $disp="%r9";
515
516$code.=<<___;
517.extern __imp_RtlVirtualUnwind
518.type se_handler,\@abi-omnipotent
519.align 16
520se_handler:
521 push %rsi
522 push %rdi
523 push %rbx
524 push %rbp
525 push %r12
526 push %r13
527 push %r14
528 push %r15
529 pushfq
530 sub \$64,%rsp
531
532 mov 120($context),%rax # pull context->Rax
533 mov 248($context),%rbx # pull context->Rip
534
535 lea .Lbody(%rip),%r10
536 cmp %r10,%rbx # context->Rip<.Lbody
537 jb .Lin_prologue
538
539 mov 152($context),%rax # pull context->Rsp
540
541 lea .Lepilogue(%rip),%r10
542 cmp %r10,%rbx # context->Rip>=.Lepilogue
543 jae .Lin_prologue
544
545 mov 40(%rax),%r15
546 mov 48(%rax),%r14
547 mov 56(%rax),%r13
548 mov 64(%rax),%r12
549 mov 72(%rax),%rbp
550 mov 80(%rax),%rbx
551 lea 88(%rax),%rax
552
553 mov %rbx,144($context) # restore context->Rbx
554 mov %rbp,160($context) # restore context->Rbp
555 mov %r12,216($context) # restore context->R12
556 mov %r13,224($context) # restore context->R12
557 mov %r14,232($context) # restore context->R14
558 mov %r15,240($context) # restore context->R15
559
560.Lin_prologue:
561 mov 8(%rax),%rdi
562 mov 16(%rax),%rsi
563 mov %rax,152($context) # restore context->Rsp
564 mov %rsi,168($context) # restore context->Rsi
565 mov %rdi,176($context) # restore context->Rdi
566
567 mov 40($disp),%rdi # disp->ContextRecord
568 mov $context,%rsi # context
569 mov \$154,%ecx # sizeof(CONTEXT)
570 .long 0xa548f3fc # cld; rep movsq
571
572 mov $disp,%rsi
573 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
574 mov 8(%rsi),%rdx # arg2, disp->ImageBase
575 mov 0(%rsi),%r8 # arg3, disp->ControlPc
576 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
577 mov 40(%rsi),%r10 # disp->ContextRecord
578 lea 56(%rsi),%r11 # &disp->HandlerData
579 lea 24(%rsi),%r12 # &disp->EstablisherFrame
580 mov %r10,32(%rsp) # arg5
581 mov %r11,40(%rsp) # arg6
582 mov %r12,48(%rsp) # arg7
583 mov %rcx,56(%rsp) # arg8, (NULL)
584 call *__imp_RtlVirtualUnwind(%rip)
585
586 mov \$1,%eax # ExceptionContinueSearch
587 add \$64,%rsp
588 popfq
589 pop %r15
590 pop %r14
591 pop %r13
592 pop %r12
593 pop %rbp
594 pop %rbx
595 pop %rdi
596 pop %rsi
597 ret
598.size se_handler,.-se_handler
599
600.section .pdata
601.align 4
602 .rva .LSEH_begin_$func
603 .rva .LSEH_end_$func
604 .rva .LSEH_info_$func
605
606.section .xdata
607.align 8
608.LSEH_info_$func:
609 .byte 9,0,0,0
610 .rva se_handler
611___
612}
613 506
614sub reg_part { 507sub reg_part {
615my ($reg,$conv)=@_; 508my ($reg,$conv)=@_;
diff --git a/src/lib/libcrypto/rc4/asm/rc4-x86_64.pl b/src/lib/libcrypto/rc4/asm/rc4-x86_64.pl
index 75750dbf33..2bed1e279f 100755
--- a/src/lib/libcrypto/rc4/asm/rc4-x86_64.pl
+++ b/src/lib/libcrypto/rc4/asm/rc4-x86_64.pl
@@ -105,8 +105,6 @@ $flavour = shift;
105$output = shift; 105$output = shift;
106if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 106if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
107 107
108$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
109
110$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 108$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
111( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 109( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
112( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 110( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -528,138 +526,6 @@ RC4_options:
528.size RC4_options,.-RC4_options 526.size RC4_options,.-RC4_options
529___ 527___
530 528
531# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
532# CONTEXT *context,DISPATCHER_CONTEXT *disp)
533if ($win64) {
534$rec="%rcx";
535$frame="%rdx";
536$context="%r8";
537$disp="%r9";
538
539$code.=<<___;
540.extern __imp_RtlVirtualUnwind
541.type stream_se_handler,\@abi-omnipotent
542.align 16
543stream_se_handler:
544 push %rsi
545 push %rdi
546 push %rbx
547 push %rbp
548 push %r12
549 push %r13
550 push %r14
551 push %r15
552 pushfq
553 sub \$64,%rsp
554
555 mov 120($context),%rax # pull context->Rax
556 mov 248($context),%rbx # pull context->Rip
557
558 lea .Lprologue(%rip),%r10
559 cmp %r10,%rbx # context->Rip<prologue label
560 jb .Lin_prologue
561
562 mov 152($context),%rax # pull context->Rsp
563
564 lea .Lepilogue(%rip),%r10
565 cmp %r10,%rbx # context->Rip>=epilogue label
566 jae .Lin_prologue
567
568 lea 24(%rax),%rax
569
570 mov -8(%rax),%rbx
571 mov -16(%rax),%r12
572 mov -24(%rax),%r13
573 mov %rbx,144($context) # restore context->Rbx
574 mov %r12,216($context) # restore context->R12
575 mov %r13,224($context) # restore context->R13
576
577.Lin_prologue:
578 mov 8(%rax),%rdi
579 mov 16(%rax),%rsi
580 mov %rax,152($context) # restore context->Rsp
581 mov %rsi,168($context) # restore context->Rsi
582 mov %rdi,176($context) # restore context->Rdi
583
584 jmp .Lcommon_seh_exit
585.size stream_se_handler,.-stream_se_handler
586
587.type key_se_handler,\@abi-omnipotent
588.align 16
589key_se_handler:
590 push %rsi
591 push %rdi
592 push %rbx
593 push %rbp
594 push %r12
595 push %r13
596 push %r14
597 push %r15
598 pushfq
599 sub \$64,%rsp
600
601 mov 152($context),%rax # pull context->Rsp
602 mov 8(%rax),%rdi
603 mov 16(%rax),%rsi
604 mov %rsi,168($context) # restore context->Rsi
605 mov %rdi,176($context) # restore context->Rdi
606
607.Lcommon_seh_exit:
608
609 mov 40($disp),%rdi # disp->ContextRecord
610 mov $context,%rsi # context
611 mov \$154,%ecx # sizeof(CONTEXT)
612 .long 0xa548f3fc # cld; rep movsq
613
614 mov $disp,%rsi
615 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
616 mov 8(%rsi),%rdx # arg2, disp->ImageBase
617 mov 0(%rsi),%r8 # arg3, disp->ControlPc
618 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
619 mov 40(%rsi),%r10 # disp->ContextRecord
620 lea 56(%rsi),%r11 # &disp->HandlerData
621 lea 24(%rsi),%r12 # &disp->EstablisherFrame
622 mov %r10,32(%rsp) # arg5
623 mov %r11,40(%rsp) # arg6
624 mov %r12,48(%rsp) # arg7
625 mov %rcx,56(%rsp) # arg8, (NULL)
626 call *__imp_RtlVirtualUnwind(%rip)
627
628 mov \$1,%eax # ExceptionContinueSearch
629 add \$64,%rsp
630 popfq
631 pop %r15
632 pop %r14
633 pop %r13
634 pop %r12
635 pop %rbp
636 pop %rbx
637 pop %rdi
638 pop %rsi
639 ret
640.size key_se_handler,.-key_se_handler
641
642.section .pdata
643.align 4
644 .rva .LSEH_begin_RC4
645 .rva .LSEH_end_RC4
646 .rva .LSEH_info_RC4
647
648 .rva .LSEH_begin_private_RC4_set_key
649 .rva .LSEH_end_private_RC4_set_key
650 .rva .LSEH_info_private_RC4_set_key
651
652.section .xdata
653.align 8
654.LSEH_info_RC4:
655 .byte 9,0,0,0
656 .rva stream_se_handler
657.LSEH_info_private_RC4_set_key:
658 .byte 9,0,0,0
659 .rva key_se_handler
660___
661}
662
663sub reg_part { 529sub reg_part {
664my ($reg,$conv)=@_; 530my ($reg,$conv)=@_;
665 if ($reg =~ /%r[0-9]+/) { $reg .= $conv; } 531 if ($reg =~ /%r[0-9]+/) { $reg .= $conv; }
diff --git a/src/lib/libcrypto/sha/asm/sha512-x86_64.pl b/src/lib/libcrypto/sha/asm/sha512-x86_64.pl
index 8d51678557..feb0f9e776 100755
--- a/src/lib/libcrypto/sha/asm/sha512-x86_64.pl
+++ b/src/lib/libcrypto/sha/asm/sha512-x86_64.pl
@@ -44,8 +44,6 @@ $flavour = shift;
44$output = shift; 44$output = shift;
45if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 45if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
46 46
47$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
48
49$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 47$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
50( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 48( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
51( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 49( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -339,113 +337,6 @@ $TABLE:
339___ 337___
340} 338}
341 339
342# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
343# CONTEXT *context,DISPATCHER_CONTEXT *disp)
344if ($win64) {
345$rec="%rcx";
346$frame="%rdx";
347$context="%r8";
348$disp="%r9";
349
350$code.=<<___;
351.extern __imp_RtlVirtualUnwind
352.type se_handler,\@abi-omnipotent
353.align 16
354se_handler:
355 push %rsi
356 push %rdi
357 push %rbx
358 push %rbp
359 push %r12
360 push %r13
361 push %r14
362 push %r15
363 pushfq
364 sub \$64,%rsp
365
366 mov 120($context),%rax # pull context->Rax
367 mov 248($context),%rbx # pull context->Rip
368
369 lea .Lprologue(%rip),%r10
370 cmp %r10,%rbx # context->Rip<.Lprologue
371 jb .Lin_prologue
372
373 mov 152($context),%rax # pull context->Rsp
374
375 lea .Lepilogue(%rip),%r10
376 cmp %r10,%rbx # context->Rip>=.Lepilogue
377 jae .Lin_prologue
378
379 mov 16*$SZ+3*8(%rax),%rax # pull $_rsp
380 lea 48(%rax),%rax
381
382 mov -8(%rax),%rbx
383 mov -16(%rax),%rbp
384 mov -24(%rax),%r12
385 mov -32(%rax),%r13
386 mov -40(%rax),%r14
387 mov -48(%rax),%r15
388 mov %rbx,144($context) # restore context->Rbx
389 mov %rbp,160($context) # restore context->Rbp
390 mov %r12,216($context) # restore context->R12
391 mov %r13,224($context) # restore context->R13
392 mov %r14,232($context) # restore context->R14
393 mov %r15,240($context) # restore context->R15
394
395.Lin_prologue:
396 mov 8(%rax),%rdi
397 mov 16(%rax),%rsi
398 mov %rax,152($context) # restore context->Rsp
399 mov %rsi,168($context) # restore context->Rsi
400 mov %rdi,176($context) # restore context->Rdi
401
402 mov 40($disp),%rdi # disp->ContextRecord
403 mov $context,%rsi # context
404 mov \$154,%ecx # sizeof(CONTEXT)
405 .long 0xa548f3fc # cld; rep movsq
406
407 mov $disp,%rsi
408 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
409 mov 8(%rsi),%rdx # arg2, disp->ImageBase
410 mov 0(%rsi),%r8 # arg3, disp->ControlPc
411 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
412 mov 40(%rsi),%r10 # disp->ContextRecord
413 lea 56(%rsi),%r11 # &disp->HandlerData
414 lea 24(%rsi),%r12 # &disp->EstablisherFrame
415 mov %r10,32(%rsp) # arg5
416 mov %r11,40(%rsp) # arg6
417 mov %r12,48(%rsp) # arg7
418 mov %rcx,56(%rsp) # arg8, (NULL)
419 call *__imp_RtlVirtualUnwind(%rip)
420
421 mov \$1,%eax # ExceptionContinueSearch
422 add \$64,%rsp
423 popfq
424 pop %r15
425 pop %r14
426 pop %r13
427 pop %r12
428 pop %rbp
429 pop %rbx
430 pop %rdi
431 pop %rsi
432 ret
433.size se_handler,.-se_handler
434
435.section .pdata
436.align 4
437 .rva .LSEH_begin_$func
438 .rva .LSEH_end_$func
439 .rva .LSEH_info_$func
440
441.section .xdata
442.align 8
443.LSEH_info_$func:
444 .byte 9,0,0,0
445 .rva se_handler
446___
447}
448
449$code =~ s/\`([^\`]*)\`/eval $1/gem; 340$code =~ s/\`([^\`]*)\`/eval $1/gem;
450print $code; 341print $code;
451close STDOUT; 342close STDOUT;
diff --git a/src/lib/libcrypto/whrlpool/asm/wp-x86_64.pl b/src/lib/libcrypto/whrlpool/asm/wp-x86_64.pl
index 24b2ff60c3..afadd5d2f1 100644
--- a/src/lib/libcrypto/whrlpool/asm/wp-x86_64.pl
+++ b/src/lib/libcrypto/whrlpool/asm/wp-x86_64.pl
@@ -34,8 +34,6 @@ $flavour = shift;
34$output = shift; 34$output = shift;
35if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 35if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
36 36
37$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
38
39$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate; 37$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate;
40( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 38( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
41( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 39( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -478,113 +476,6 @@ ___
478 &L(0xfb,0xee,0x7c,0x66,0xdd,0x17,0x47,0x9e); 476 &L(0xfb,0xee,0x7c,0x66,0xdd,0x17,0x47,0x9e);
479 &L(0xca,0x2d,0xbf,0x07,0xad,0x5a,0x83,0x33); 477 &L(0xca,0x2d,0xbf,0x07,0xad,0x5a,0x83,0x33);
480 478
481# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
482# CONTEXT *context,DISPATCHER_CONTEXT *disp)
483if ($win64) {
484$rec="%rcx";
485$frame="%rdx";
486$context="%r8";
487$disp="%r9";
488
489$code.=<<___;
490.extern __imp_RtlVirtualUnwind
491.type se_handler,\@abi-omnipotent
492.align 16
493se_handler:
494 push %rsi
495 push %rdi
496 push %rbx
497 push %rbp
498 push %r12
499 push %r13
500 push %r14
501 push %r15
502 pushfq
503 sub \$64,%rsp
504
505 mov 120($context),%rax # pull context->Rax
506 mov 248($context),%rbx # pull context->Rip
507
508 lea .Lprologue(%rip),%r10
509 cmp %r10,%rbx # context->Rip<.Lprologue
510 jb .Lin_prologue
511
512 mov 152($context),%rax # pull context->Rsp
513
514 lea .Lepilogue(%rip),%r10
515 cmp %r10,%rbx # context->Rip>=.Lepilogue
516 jae .Lin_prologue
517
518 mov 128+32(%rax),%rax # pull saved stack pointer
519 lea 48(%rax),%rax
520
521 mov -8(%rax),%rbx
522 mov -16(%rax),%rbp
523 mov -24(%rax),%r12
524 mov -32(%rax),%r13
525 mov -40(%rax),%r14
526 mov -48(%rax),%r15
527 mov %rbx,144($context) # restore context->Rbx
528 mov %rbp,160($context) # restore context->Rbp
529 mov %r12,216($context) # restore context->R12
530 mov %r13,224($context) # restore context->R13
531 mov %r14,232($context) # restore context->R14
532 mov %r15,240($context) # restore context->R15
533
534.Lin_prologue:
535 mov 8(%rax),%rdi
536 mov 16(%rax),%rsi
537 mov %rax,152($context) # restore context->Rsp
538 mov %rsi,168($context) # restore context->Rsi
539 mov %rdi,176($context) # restore context->Rdi
540
541 mov 40($disp),%rdi # disp->ContextRecord
542 mov $context,%rsi # context
543 mov \$154,%ecx # sizeof(CONTEXT)
544 .long 0xa548f3fc # cld; rep movsq
545
546 mov $disp,%rsi
547 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
548 mov 8(%rsi),%rdx # arg2, disp->ImageBase
549 mov 0(%rsi),%r8 # arg3, disp->ControlPc
550 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
551 mov 40(%rsi),%r10 # disp->ContextRecord
552 lea 56(%rsi),%r11 # &disp->HandlerData
553 lea 24(%rsi),%r12 # &disp->EstablisherFrame
554 mov %r10,32(%rsp) # arg5
555 mov %r11,40(%rsp) # arg6
556 mov %r12,48(%rsp) # arg7
557 mov %rcx,56(%rsp) # arg8, (NULL)
558 call *__imp_RtlVirtualUnwind(%rip)
559
560 mov \$1,%eax # ExceptionContinueSearch
561 add \$64,%rsp
562 popfq
563 pop %r15
564 pop %r14
565 pop %r13
566 pop %r12
567 pop %rbp
568 pop %rbx
569 pop %rdi
570 pop %rsi
571 ret
572.size se_handler,.-se_handler
573
574.section .pdata
575.align 4
576 .rva .LSEH_begin_$func
577 .rva .LSEH_end_$func
578 .rva .LSEH_info_$func
579
580.section .xdata
581.align 8
582.LSEH_info_$func:
583 .byte 9,0,0,0
584 .rva se_handler
585___
586}
587
588$code =~ s/\`([^\`]*)\`/eval $1/gem; 479$code =~ s/\`([^\`]*)\`/eval $1/gem;
589print $code; 480print $code;
590close STDOUT; 481close STDOUT;
diff --git a/src/lib/libssl/src/crypto/bn/asm/modexp512-x86_64.pl b/src/lib/libssl/src/crypto/bn/asm/modexp512-x86_64.pl
index bfd6e97541..4317282835 100644
--- a/src/lib/libssl/src/crypto/bn/asm/modexp512-x86_64.pl
+++ b/src/lib/libssl/src/crypto/bn/asm/modexp512-x86_64.pl
@@ -61,8 +61,6 @@ $flavour = shift;
61$output = shift; 61$output = shift;
62if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 62if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
63 63
64my $win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
65
66$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 64$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
67( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 65( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
68( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 66( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -1374,113 +1372,6 @@ end_main_loop_a3b:
1374.size mod_exp_512, . - mod_exp_512 1372.size mod_exp_512, . - mod_exp_512
1375___ 1373___
1376 1374
1377if ($win64) {
1378# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
1379# CONTEXT *context,DISPATCHER_CONTEXT *disp)
1380my $rec="%rcx";
1381my $frame="%rdx";
1382my $context="%r8";
1383my $disp="%r9";
1384
1385$code.=<<___;
1386.extern __imp_RtlVirtualUnwind
1387.type mod_exp_512_se_handler,\@abi-omnipotent
1388.align 16
1389mod_exp_512_se_handler:
1390 push %rsi
1391 push %rdi
1392 push %rbx
1393 push %rbp
1394 push %r12
1395 push %r13
1396 push %r14
1397 push %r15
1398 pushfq
1399 sub \$64,%rsp
1400
1401 mov 120($context),%rax # pull context->Rax
1402 mov 248($context),%rbx # pull context->Rip
1403
1404 lea .Lbody(%rip),%r10
1405 cmp %r10,%rbx # context->Rip<prologue label
1406 jb .Lin_prologue
1407
1408 mov 152($context),%rax # pull context->Rsp
1409
1410 lea .Lepilogue(%rip),%r10
1411 cmp %r10,%rbx # context->Rip>=epilogue label
1412 jae .Lin_prologue
1413
1414 mov $rsp_offset(%rax),%rax # pull saved Rsp
1415
1416 mov 32(%rax),%rbx
1417 mov 40(%rax),%rbp
1418 mov 24(%rax),%r12
1419 mov 16(%rax),%r13
1420 mov 8(%rax),%r14
1421 mov 0(%rax),%r15
1422 lea 48(%rax),%rax
1423 mov %rbx,144($context) # restore context->Rbx
1424 mov %rbp,160($context) # restore context->Rbp
1425 mov %r12,216($context) # restore context->R12
1426 mov %r13,224($context) # restore context->R13
1427 mov %r14,232($context) # restore context->R14
1428 mov %r15,240($context) # restore context->R15
1429
1430.Lin_prologue:
1431 mov 8(%rax),%rdi
1432 mov 16(%rax),%rsi
1433 mov %rax,152($context) # restore context->Rsp
1434 mov %rsi,168($context) # restore context->Rsi
1435 mov %rdi,176($context) # restore context->Rdi
1436
1437 mov 40($disp),%rdi # disp->ContextRecord
1438 mov $context,%rsi # context
1439 mov \$154,%ecx # sizeof(CONTEXT)
1440 .long 0xa548f3fc # cld; rep movsq
1441
1442 mov $disp,%rsi
1443 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
1444 mov 8(%rsi),%rdx # arg2, disp->ImageBase
1445 mov 0(%rsi),%r8 # arg3, disp->ControlPc
1446 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
1447 mov 40(%rsi),%r10 # disp->ContextRecord
1448 lea 56(%rsi),%r11 # &disp->HandlerData
1449 lea 24(%rsi),%r12 # &disp->EstablisherFrame
1450 mov %r10,32(%rsp) # arg5
1451 mov %r11,40(%rsp) # arg6
1452 mov %r12,48(%rsp) # arg7
1453 mov %rcx,56(%rsp) # arg8, (NULL)
1454 call *__imp_RtlVirtualUnwind(%rip)
1455
1456 mov \$1,%eax # ExceptionContinueSearch
1457 add \$64,%rsp
1458 popfq
1459 pop %r15
1460 pop %r14
1461 pop %r13
1462 pop %r12
1463 pop %rbp
1464 pop %rbx
1465 pop %rdi
1466 pop %rsi
1467 ret
1468.size mod_exp_512_se_handler,.-mod_exp_512_se_handler
1469
1470.section .pdata
1471.align 4
1472 .rva .LSEH_begin_mod_exp_512
1473 .rva .LSEH_end_mod_exp_512
1474 .rva .LSEH_info_mod_exp_512
1475
1476.section .xdata
1477.align 8
1478.LSEH_info_mod_exp_512:
1479 .byte 9,0,0,0
1480 .rva mod_exp_512_se_handler
1481___
1482}
1483
1484sub reg_part { 1375sub reg_part {
1485my ($reg,$conv)=@_; 1376my ($reg,$conv)=@_;
1486 if ($reg =~ /%r[0-9]+/) { $reg .= $conv; } 1377 if ($reg =~ /%r[0-9]+/) { $reg .= $conv; }
diff --git a/src/lib/libssl/src/crypto/bn/asm/x86_64-mont.pl b/src/lib/libssl/src/crypto/bn/asm/x86_64-mont.pl
index 17fb94c84c..90c717f115 100755
--- a/src/lib/libssl/src/crypto/bn/asm/x86_64-mont.pl
+++ b/src/lib/libssl/src/crypto/bn/asm/x86_64-mont.pl
@@ -33,8 +33,6 @@ $flavour = shift;
33$output = shift; 33$output = shift;
34if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 34if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
35 35
36$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
37
38$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 36$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
39( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 37( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
40( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 38( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -1502,180 +1500,5 @@ $code.=<<___;
1502.align 16 1500.align 16
1503___ 1501___
1504 1502
1505# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
1506# CONTEXT *context,DISPATCHER_CONTEXT *disp)
1507if ($win64) {
1508$rec="%rcx";
1509$frame="%rdx";
1510$context="%r8";
1511$disp="%r9";
1512
1513$code.=<<___;
1514.extern __imp_RtlVirtualUnwind
1515.type mul_handler,\@abi-omnipotent
1516.align 16
1517mul_handler:
1518 push %rsi
1519 push %rdi
1520 push %rbx
1521 push %rbp
1522 push %r12
1523 push %r13
1524 push %r14
1525 push %r15
1526 pushfq
1527 sub \$64,%rsp
1528
1529 mov 120($context),%rax # pull context->Rax
1530 mov 248($context),%rbx # pull context->Rip
1531
1532 mov 8($disp),%rsi # disp->ImageBase
1533 mov 56($disp),%r11 # disp->HandlerData
1534
1535 mov 0(%r11),%r10d # HandlerData[0]
1536 lea (%rsi,%r10),%r10 # end of prologue label
1537 cmp %r10,%rbx # context->Rip<end of prologue label
1538 jb .Lcommon_seh_tail
1539
1540 mov 152($context),%rax # pull context->Rsp
1541
1542 mov 4(%r11),%r10d # HandlerData[1]
1543 lea (%rsi,%r10),%r10 # epilogue label
1544 cmp %r10,%rbx # context->Rip>=epilogue label
1545 jae .Lcommon_seh_tail
1546
1547 mov 192($context),%r10 # pull $num
1548 mov 8(%rax,%r10,8),%rax # pull saved stack pointer
1549 lea 48(%rax),%rax
1550
1551 mov -8(%rax),%rbx
1552 mov -16(%rax),%rbp
1553 mov -24(%rax),%r12
1554 mov -32(%rax),%r13
1555 mov -40(%rax),%r14
1556 mov -48(%rax),%r15
1557 mov %rbx,144($context) # restore context->Rbx
1558 mov %rbp,160($context) # restore context->Rbp
1559 mov %r12,216($context) # restore context->R12
1560 mov %r13,224($context) # restore context->R13
1561 mov %r14,232($context) # restore context->R14
1562 mov %r15,240($context) # restore context->R15
1563
1564 jmp .Lcommon_seh_tail
1565.size mul_handler,.-mul_handler
1566
1567.type sqr_handler,\@abi-omnipotent
1568.align 16
1569sqr_handler:
1570 push %rsi
1571 push %rdi
1572 push %rbx
1573 push %rbp
1574 push %r12
1575 push %r13
1576 push %r14
1577 push %r15
1578 pushfq
1579 sub \$64,%rsp
1580
1581 mov 120($context),%rax # pull context->Rax
1582 mov 248($context),%rbx # pull context->Rip
1583
1584 lea .Lsqr4x_body(%rip),%r10
1585 cmp %r10,%rbx # context->Rip<.Lsqr_body
1586 jb .Lcommon_seh_tail
1587
1588 mov 152($context),%rax # pull context->Rsp
1589
1590 lea .Lsqr4x_epilogue(%rip),%r10
1591 cmp %r10,%rbx # context->Rip>=.Lsqr_epilogue
1592 jae .Lcommon_seh_tail
1593
1594 mov 56(%rax),%rax # pull saved stack pointer
1595 lea 48(%rax),%rax
1596
1597 mov -8(%rax),%rbx
1598 mov -16(%rax),%rbp
1599 mov -24(%rax),%r12
1600 mov -32(%rax),%r13
1601 mov -40(%rax),%r14
1602 mov -48(%rax),%r15
1603 mov %rbx,144($context) # restore context->Rbx
1604 mov %rbp,160($context) # restore context->Rbp
1605 mov %r12,216($context) # restore context->R12
1606 mov %r13,224($context) # restore context->R13
1607 mov %r14,232($context) # restore context->R14
1608 mov %r15,240($context) # restore context->R15
1609
1610.Lcommon_seh_tail:
1611 mov 8(%rax),%rdi
1612 mov 16(%rax),%rsi
1613 mov %rax,152($context) # restore context->Rsp
1614 mov %rsi,168($context) # restore context->Rsi
1615 mov %rdi,176($context) # restore context->Rdi
1616
1617 mov 40($disp),%rdi # disp->ContextRecord
1618 mov $context,%rsi # context
1619 mov \$154,%ecx # sizeof(CONTEXT)
1620 .long 0xa548f3fc # cld; rep movsq
1621
1622 mov $disp,%rsi
1623 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
1624 mov 8(%rsi),%rdx # arg2, disp->ImageBase
1625 mov 0(%rsi),%r8 # arg3, disp->ControlPc
1626 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
1627 mov 40(%rsi),%r10 # disp->ContextRecord
1628 lea 56(%rsi),%r11 # &disp->HandlerData
1629 lea 24(%rsi),%r12 # &disp->EstablisherFrame
1630 mov %r10,32(%rsp) # arg5
1631 mov %r11,40(%rsp) # arg6
1632 mov %r12,48(%rsp) # arg7
1633 mov %rcx,56(%rsp) # arg8, (NULL)
1634 call *__imp_RtlVirtualUnwind(%rip)
1635
1636 mov \$1,%eax # ExceptionContinueSearch
1637 add \$64,%rsp
1638 popfq
1639 pop %r15
1640 pop %r14
1641 pop %r13
1642 pop %r12
1643 pop %rbp
1644 pop %rbx
1645 pop %rdi
1646 pop %rsi
1647 ret
1648.size sqr_handler,.-sqr_handler
1649
1650.section .pdata
1651.align 4
1652 .rva .LSEH_begin_bn_mul_mont
1653 .rva .LSEH_end_bn_mul_mont
1654 .rva .LSEH_info_bn_mul_mont
1655
1656 .rva .LSEH_begin_bn_mul4x_mont
1657 .rva .LSEH_end_bn_mul4x_mont
1658 .rva .LSEH_info_bn_mul4x_mont
1659
1660 .rva .LSEH_begin_bn_sqr4x_mont
1661 .rva .LSEH_end_bn_sqr4x_mont
1662 .rva .LSEH_info_bn_sqr4x_mont
1663
1664.section .xdata
1665.align 8
1666.LSEH_info_bn_mul_mont:
1667 .byte 9,0,0,0
1668 .rva mul_handler
1669 .rva .Lmul_body,.Lmul_epilogue # HandlerData[]
1670.LSEH_info_bn_mul4x_mont:
1671 .byte 9,0,0,0
1672 .rva mul_handler
1673 .rva .Lmul4x_body,.Lmul4x_epilogue # HandlerData[]
1674.LSEH_info_bn_sqr4x_mont:
1675 .byte 9,0,0,0
1676 .rva sqr_handler
1677___
1678}
1679
1680print $code; 1503print $code;
1681close STDOUT; 1504close STDOUT;
diff --git a/src/lib/libssl/src/crypto/camellia/asm/cmll-x86_64.pl b/src/lib/libssl/src/crypto/camellia/asm/cmll-x86_64.pl
index 9f4b82fa48..a171c654b2 100644
--- a/src/lib/libssl/src/crypto/camellia/asm/cmll-x86_64.pl
+++ b/src/lib/libssl/src/crypto/camellia/asm/cmll-x86_64.pl
@@ -33,8 +33,6 @@ $flavour = shift;
33$output = shift; 33$output = shift;
34if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 34if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
35 35
36$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
37
38$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 36$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
39( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 37( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
40( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 38( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -57,7 +55,7 @@ $inp="%r12";
57$out="%r13"; 55$out="%r13";
58$key="%r14"; 56$key="%r14";
59$keyend="%r15"; 57$keyend="%r15";
60$arg0d=$win64?"%ecx":"%edi"; 58$arg0d="%edi";
61 59
62# const unsigned int Camellia_SBOX[4][256]; 60# const unsigned int Camellia_SBOX[4][256];
63# Well, sort of... Camellia_SBOX[0][] is interleaved with [1][], 61# Well, sort of... Camellia_SBOX[0][] is interleaved with [1][],
@@ -864,218 +862,6 @@ Camellia_cbc_encrypt:
864___ 862___
865} 863}
866 864
867# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
868# CONTEXT *context,DISPATCHER_CONTEXT *disp)
869if ($win64) {
870$rec="%rcx";
871$frame="%rdx";
872$context="%r8";
873$disp="%r9";
874
875$code.=<<___;
876.extern __imp_RtlVirtualUnwind
877.type common_se_handler,\@abi-omnipotent
878.align 16
879common_se_handler:
880 push %rsi
881 push %rdi
882 push %rbx
883 push %rbp
884 push %r12
885 push %r13
886 push %r14
887 push %r15
888 pushfq
889 lea -64(%rsp),%rsp
890
891 mov 120($context),%rax # pull context->Rax
892 mov 248($context),%rbx # pull context->Rip
893
894 mov 8($disp),%rsi # disp->ImageBase
895 mov 56($disp),%r11 # disp->HandlerData
896
897 mov 0(%r11),%r10d # HandlerData[0]
898 lea (%rsi,%r10),%r10 # prologue label
899 cmp %r10,%rbx # context->Rip<prologue label
900 jb .Lin_prologue
901
902 mov 152($context),%rax # pull context->Rsp
903
904 mov 4(%r11),%r10d # HandlerData[1]
905 lea (%rsi,%r10),%r10 # epilogue label
906 cmp %r10,%rbx # context->Rip>=epilogue label
907 jae .Lin_prologue
908
909 lea 40(%rax),%rax
910 mov -8(%rax),%rbx
911 mov -16(%rax),%rbp
912 mov -24(%rax),%r13
913 mov -32(%rax),%r14
914 mov -40(%rax),%r15
915 mov %rbx,144($context) # restore context->Rbx
916 mov %rbp,160($context) # restore context->Rbp
917 mov %r13,224($context) # restore context->R13
918 mov %r14,232($context) # restore context->R14
919 mov %r15,240($context) # restore context->R15
920
921.Lin_prologue:
922 mov 8(%rax),%rdi
923 mov 16(%rax),%rsi
924 mov %rax,152($context) # restore context->Rsp
925 mov %rsi,168($context) # restore context->Rsi
926 mov %rdi,176($context) # restore context->Rdi
927
928 jmp .Lcommon_seh_exit
929.size common_se_handler,.-common_se_handler
930
931.type cbc_se_handler,\@abi-omnipotent
932.align 16
933cbc_se_handler:
934 push %rsi
935 push %rdi
936 push %rbx
937 push %rbp
938 push %r12
939 push %r13
940 push %r14
941 push %r15
942 pushfq
943 lea -64(%rsp),%rsp
944
945 mov 120($context),%rax # pull context->Rax
946 mov 248($context),%rbx # pull context->Rip
947
948 lea .Lcbc_prologue(%rip),%r10
949 cmp %r10,%rbx # context->Rip<.Lcbc_prologue
950 jb .Lin_cbc_prologue
951
952 lea .Lcbc_body(%rip),%r10
953 cmp %r10,%rbx # context->Rip<.Lcbc_body
954 jb .Lin_cbc_frame_setup
955
956 mov 152($context),%rax # pull context->Rsp
957
958 lea .Lcbc_abort(%rip),%r10
959 cmp %r10,%rbx # context->Rip>=.Lcbc_abort
960 jae .Lin_cbc_prologue
961
962 # handle pushf/popf in Camellia_cbc_encrypt
963 lea .Lcbc_enc_pushf(%rip),%r10
964 cmp %r10,%rbx # context->Rip<=.Lcbc_enc_pushf
965 jbe .Lin_cbc_no_flag
966 lea 8(%rax),%rax
967 lea .Lcbc_enc_popf(%rip),%r10
968 cmp %r10,%rbx # context->Rip<.Lcbc_enc_popf
969 jb .Lin_cbc_no_flag
970 lea -8(%rax),%rax
971 lea .Lcbc_dec_pushf(%rip),%r10
972 cmp %r10,%rbx # context->Rip<=.Lcbc_dec_pushf
973 jbe .Lin_cbc_no_flag
974 lea 8(%rax),%rax
975 lea .Lcbc_dec_popf(%rip),%r10
976 cmp %r10,%rbx # context->Rip<.Lcbc_dec_popf
977 jb .Lin_cbc_no_flag
978 lea -8(%rax),%rax
979
980.Lin_cbc_no_flag:
981 mov 48(%rax),%rax # $_rsp
982 lea 48(%rax),%rax
983
984.Lin_cbc_frame_setup:
985 mov -8(%rax),%rbx
986 mov -16(%rax),%rbp
987 mov -24(%rax),%r12
988 mov -32(%rax),%r13
989 mov -40(%rax),%r14
990 mov -48(%rax),%r15
991 mov %rbx,144($context) # restore context->Rbx
992 mov %rbp,160($context) # restore context->Rbp
993 mov %r12,216($context) # restore context->R12
994 mov %r13,224($context) # restore context->R13
995 mov %r14,232($context) # restore context->R14
996 mov %r15,240($context) # restore context->R15
997
998.Lin_cbc_prologue:
999 mov 8(%rax),%rdi
1000 mov 16(%rax),%rsi
1001 mov %rax,152($context) # restore context->Rsp
1002 mov %rsi,168($context) # restore context->Rsi
1003 mov %rdi,176($context) # restore context->Rdi
1004
1005.align 4
1006.Lcommon_seh_exit:
1007
1008 mov 40($disp),%rdi # disp->ContextRecord
1009 mov $context,%rsi # context
1010 mov \$`1232/8`,%ecx # sizeof(CONTEXT)
1011 .long 0xa548f3fc # cld; rep movsq
1012
1013 mov $disp,%rsi
1014 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
1015 mov 8(%rsi),%rdx # arg2, disp->ImageBase
1016 mov 0(%rsi),%r8 # arg3, disp->ControlPc
1017 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
1018 mov 40(%rsi),%r10 # disp->ContextRecord
1019 lea 56(%rsi),%r11 # &disp->HandlerData
1020 lea 24(%rsi),%r12 # &disp->EstablisherFrame
1021 mov %r10,32(%rsp) # arg5
1022 mov %r11,40(%rsp) # arg6
1023 mov %r12,48(%rsp) # arg7
1024 mov %rcx,56(%rsp) # arg8, (NULL)
1025 call *__imp_RtlVirtualUnwind(%rip)
1026
1027 mov \$1,%eax # ExceptionContinueSearch
1028 lea 64(%rsp),%rsp
1029 popfq
1030 pop %r15
1031 pop %r14
1032 pop %r13
1033 pop %r12
1034 pop %rbp
1035 pop %rbx
1036 pop %rdi
1037 pop %rsi
1038 ret
1039.size cbc_se_handler,.-cbc_se_handler
1040
1041.section .pdata
1042.align 4
1043 .rva .LSEH_begin_Camellia_EncryptBlock_Rounds
1044 .rva .LSEH_end_Camellia_EncryptBlock_Rounds
1045 .rva .LSEH_info_Camellia_EncryptBlock_Rounds
1046
1047 .rva .LSEH_begin_Camellia_DecryptBlock_Rounds
1048 .rva .LSEH_end_Camellia_DecryptBlock_Rounds
1049 .rva .LSEH_info_Camellia_DecryptBlock_Rounds
1050
1051 .rva .LSEH_begin_Camellia_Ekeygen
1052 .rva .LSEH_end_Camellia_Ekeygen
1053 .rva .LSEH_info_Camellia_Ekeygen
1054
1055 .rva .LSEH_begin_Camellia_cbc_encrypt
1056 .rva .LSEH_end_Camellia_cbc_encrypt
1057 .rva .LSEH_info_Camellia_cbc_encrypt
1058
1059.section .xdata
1060.align 8
1061.LSEH_info_Camellia_EncryptBlock_Rounds:
1062 .byte 9,0,0,0
1063 .rva common_se_handler
1064 .rva .Lenc_prologue,.Lenc_epilogue # HandlerData[]
1065.LSEH_info_Camellia_DecryptBlock_Rounds:
1066 .byte 9,0,0,0
1067 .rva common_se_handler
1068 .rva .Ldec_prologue,.Ldec_epilogue # HandlerData[]
1069.LSEH_info_Camellia_Ekeygen:
1070 .byte 9,0,0,0
1071 .rva common_se_handler
1072 .rva .Lkey_prologue,.Lkey_epilogue # HandlerData[]
1073.LSEH_info_Camellia_cbc_encrypt:
1074 .byte 9,0,0,0
1075 .rva cbc_se_handler
1076___
1077}
1078
1079$code =~ s/\`([^\`]*)\`/eval $1/gem; 865$code =~ s/\`([^\`]*)\`/eval $1/gem;
1080print $code; 866print $code;
1081close STDOUT; 867close STDOUT;
diff --git a/src/lib/libssl/src/crypto/md5/asm/md5-x86_64.pl b/src/lib/libssl/src/crypto/md5/asm/md5-x86_64.pl
index f11224d172..c902a1b532 100755
--- a/src/lib/libssl/src/crypto/md5/asm/md5-x86_64.pl
+++ b/src/lib/libssl/src/crypto/md5/asm/md5-x86_64.pl
@@ -112,8 +112,6 @@ my $flavour = shift;
112my $output = shift; 112my $output = shift;
113if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 113if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
114 114
115my $win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
116
117$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate; 115$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate;
118( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 116( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
119( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 117( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -261,110 +259,6 @@ $code .= <<EOF;
261.size md5_block_asm_data_order,.-md5_block_asm_data_order 259.size md5_block_asm_data_order,.-md5_block_asm_data_order
262EOF 260EOF
263 261
264# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
265# CONTEXT *context,DISPATCHER_CONTEXT *disp)
266if ($win64) {
267my $rec="%rcx";
268my $frame="%rdx";
269my $context="%r8";
270my $disp="%r9";
271
272$code.=<<___;
273.extern __imp_RtlVirtualUnwind
274.type se_handler,\@abi-omnipotent
275.align 16
276se_handler:
277 push %rsi
278 push %rdi
279 push %rbx
280 push %rbp
281 push %r12
282 push %r13
283 push %r14
284 push %r15
285 pushfq
286 sub \$64,%rsp
287
288 mov 120($context),%rax # pull context->Rax
289 mov 248($context),%rbx # pull context->Rip
290
291 lea .Lprologue(%rip),%r10
292 cmp %r10,%rbx # context->Rip<.Lprologue
293 jb .Lin_prologue
294
295 mov 152($context),%rax # pull context->Rsp
296
297 lea .Lepilogue(%rip),%r10
298 cmp %r10,%rbx # context->Rip>=.Lepilogue
299 jae .Lin_prologue
300
301 lea 40(%rax),%rax
302
303 mov -8(%rax),%rbp
304 mov -16(%rax),%rbx
305 mov -24(%rax),%r12
306 mov -32(%rax),%r14
307 mov -40(%rax),%r15
308 mov %rbx,144($context) # restore context->Rbx
309 mov %rbp,160($context) # restore context->Rbp
310 mov %r12,216($context) # restore context->R12
311 mov %r14,232($context) # restore context->R14
312 mov %r15,240($context) # restore context->R15
313
314.Lin_prologue:
315 mov 8(%rax),%rdi
316 mov 16(%rax),%rsi
317 mov %rax,152($context) # restore context->Rsp
318 mov %rsi,168($context) # restore context->Rsi
319 mov %rdi,176($context) # restore context->Rdi
320
321 mov 40($disp),%rdi # disp->ContextRecord
322 mov $context,%rsi # context
323 mov \$154,%ecx # sizeof(CONTEXT)
324 .long 0xa548f3fc # cld; rep movsq
325
326 mov $disp,%rsi
327 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
328 mov 8(%rsi),%rdx # arg2, disp->ImageBase
329 mov 0(%rsi),%r8 # arg3, disp->ControlPc
330 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
331 mov 40(%rsi),%r10 # disp->ContextRecord
332 lea 56(%rsi),%r11 # &disp->HandlerData
333 lea 24(%rsi),%r12 # &disp->EstablisherFrame
334 mov %r10,32(%rsp) # arg5
335 mov %r11,40(%rsp) # arg6
336 mov %r12,48(%rsp) # arg7
337 mov %rcx,56(%rsp) # arg8, (NULL)
338 call *__imp_RtlVirtualUnwind(%rip)
339
340 mov \$1,%eax # ExceptionContinueSearch
341 add \$64,%rsp
342 popfq
343 pop %r15
344 pop %r14
345 pop %r13
346 pop %r12
347 pop %rbp
348 pop %rbx
349 pop %rdi
350 pop %rsi
351 ret
352.size se_handler,.-se_handler
353
354.section .pdata
355.align 4
356 .rva .LSEH_begin_md5_block_asm_data_order
357 .rva .LSEH_end_md5_block_asm_data_order
358 .rva .LSEH_info_md5_block_asm_data_order
359
360.section .xdata
361.align 8
362.LSEH_info_md5_block_asm_data_order:
363 .byte 9,0,0,0
364 .rva se_handler
365___
366}
367
368print $code; 262print $code;
369 263
370close STDOUT; 264close STDOUT;
diff --git a/src/lib/libssl/src/crypto/rc4/asm/rc4-md5-x86_64.pl b/src/lib/libssl/src/crypto/rc4/asm/rc4-md5-x86_64.pl
index 272fa91e1a..501d9e936b 100644
--- a/src/lib/libssl/src/crypto/rc4/asm/rc4-md5-x86_64.pl
+++ b/src/lib/libssl/src/crypto/rc4/asm/rc4-md5-x86_64.pl
@@ -44,8 +44,6 @@ my $flavour = shift;
44my $output = shift; 44my $output = shift;
45if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 45if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
46 46
47my $win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
48
49$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate; 47$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate;
50( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 48( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
51( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 49( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -505,111 +503,6 @@ RC4_options:
505.size RC4_options,.-RC4_options 503.size RC4_options,.-RC4_options
506___ 504___
507} 505}
508# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
509# CONTEXT *context,DISPATCHER_CONTEXT *disp)
510if ($win64) {
511my $rec="%rcx";
512my $frame="%rdx";
513my $context="%r8";
514my $disp="%r9";
515
516$code.=<<___;
517.extern __imp_RtlVirtualUnwind
518.type se_handler,\@abi-omnipotent
519.align 16
520se_handler:
521 push %rsi
522 push %rdi
523 push %rbx
524 push %rbp
525 push %r12
526 push %r13
527 push %r14
528 push %r15
529 pushfq
530 sub \$64,%rsp
531
532 mov 120($context),%rax # pull context->Rax
533 mov 248($context),%rbx # pull context->Rip
534
535 lea .Lbody(%rip),%r10
536 cmp %r10,%rbx # context->Rip<.Lbody
537 jb .Lin_prologue
538
539 mov 152($context),%rax # pull context->Rsp
540
541 lea .Lepilogue(%rip),%r10
542 cmp %r10,%rbx # context->Rip>=.Lepilogue
543 jae .Lin_prologue
544
545 mov 40(%rax),%r15
546 mov 48(%rax),%r14
547 mov 56(%rax),%r13
548 mov 64(%rax),%r12
549 mov 72(%rax),%rbp
550 mov 80(%rax),%rbx
551 lea 88(%rax),%rax
552
553 mov %rbx,144($context) # restore context->Rbx
554 mov %rbp,160($context) # restore context->Rbp
555 mov %r12,216($context) # restore context->R12
556 mov %r13,224($context) # restore context->R12
557 mov %r14,232($context) # restore context->R14
558 mov %r15,240($context) # restore context->R15
559
560.Lin_prologue:
561 mov 8(%rax),%rdi
562 mov 16(%rax),%rsi
563 mov %rax,152($context) # restore context->Rsp
564 mov %rsi,168($context) # restore context->Rsi
565 mov %rdi,176($context) # restore context->Rdi
566
567 mov 40($disp),%rdi # disp->ContextRecord
568 mov $context,%rsi # context
569 mov \$154,%ecx # sizeof(CONTEXT)
570 .long 0xa548f3fc # cld; rep movsq
571
572 mov $disp,%rsi
573 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
574 mov 8(%rsi),%rdx # arg2, disp->ImageBase
575 mov 0(%rsi),%r8 # arg3, disp->ControlPc
576 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
577 mov 40(%rsi),%r10 # disp->ContextRecord
578 lea 56(%rsi),%r11 # &disp->HandlerData
579 lea 24(%rsi),%r12 # &disp->EstablisherFrame
580 mov %r10,32(%rsp) # arg5
581 mov %r11,40(%rsp) # arg6
582 mov %r12,48(%rsp) # arg7
583 mov %rcx,56(%rsp) # arg8, (NULL)
584 call *__imp_RtlVirtualUnwind(%rip)
585
586 mov \$1,%eax # ExceptionContinueSearch
587 add \$64,%rsp
588 popfq
589 pop %r15
590 pop %r14
591 pop %r13
592 pop %r12
593 pop %rbp
594 pop %rbx
595 pop %rdi
596 pop %rsi
597 ret
598.size se_handler,.-se_handler
599
600.section .pdata
601.align 4
602 .rva .LSEH_begin_$func
603 .rva .LSEH_end_$func
604 .rva .LSEH_info_$func
605
606.section .xdata
607.align 8
608.LSEH_info_$func:
609 .byte 9,0,0,0
610 .rva se_handler
611___
612}
613 506
614sub reg_part { 507sub reg_part {
615my ($reg,$conv)=@_; 508my ($reg,$conv)=@_;
diff --git a/src/lib/libssl/src/crypto/rc4/asm/rc4-x86_64.pl b/src/lib/libssl/src/crypto/rc4/asm/rc4-x86_64.pl
index 75750dbf33..2bed1e279f 100755
--- a/src/lib/libssl/src/crypto/rc4/asm/rc4-x86_64.pl
+++ b/src/lib/libssl/src/crypto/rc4/asm/rc4-x86_64.pl
@@ -105,8 +105,6 @@ $flavour = shift;
105$output = shift; 105$output = shift;
106if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 106if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
107 107
108$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
109
110$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 108$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
111( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 109( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
112( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 110( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -528,138 +526,6 @@ RC4_options:
528.size RC4_options,.-RC4_options 526.size RC4_options,.-RC4_options
529___ 527___
530 528
531# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
532# CONTEXT *context,DISPATCHER_CONTEXT *disp)
533if ($win64) {
534$rec="%rcx";
535$frame="%rdx";
536$context="%r8";
537$disp="%r9";
538
539$code.=<<___;
540.extern __imp_RtlVirtualUnwind
541.type stream_se_handler,\@abi-omnipotent
542.align 16
543stream_se_handler:
544 push %rsi
545 push %rdi
546 push %rbx
547 push %rbp
548 push %r12
549 push %r13
550 push %r14
551 push %r15
552 pushfq
553 sub \$64,%rsp
554
555 mov 120($context),%rax # pull context->Rax
556 mov 248($context),%rbx # pull context->Rip
557
558 lea .Lprologue(%rip),%r10
559 cmp %r10,%rbx # context->Rip<prologue label
560 jb .Lin_prologue
561
562 mov 152($context),%rax # pull context->Rsp
563
564 lea .Lepilogue(%rip),%r10
565 cmp %r10,%rbx # context->Rip>=epilogue label
566 jae .Lin_prologue
567
568 lea 24(%rax),%rax
569
570 mov -8(%rax),%rbx
571 mov -16(%rax),%r12
572 mov -24(%rax),%r13
573 mov %rbx,144($context) # restore context->Rbx
574 mov %r12,216($context) # restore context->R12
575 mov %r13,224($context) # restore context->R13
576
577.Lin_prologue:
578 mov 8(%rax),%rdi
579 mov 16(%rax),%rsi
580 mov %rax,152($context) # restore context->Rsp
581 mov %rsi,168($context) # restore context->Rsi
582 mov %rdi,176($context) # restore context->Rdi
583
584 jmp .Lcommon_seh_exit
585.size stream_se_handler,.-stream_se_handler
586
587.type key_se_handler,\@abi-omnipotent
588.align 16
589key_se_handler:
590 push %rsi
591 push %rdi
592 push %rbx
593 push %rbp
594 push %r12
595 push %r13
596 push %r14
597 push %r15
598 pushfq
599 sub \$64,%rsp
600
601 mov 152($context),%rax # pull context->Rsp
602 mov 8(%rax),%rdi
603 mov 16(%rax),%rsi
604 mov %rsi,168($context) # restore context->Rsi
605 mov %rdi,176($context) # restore context->Rdi
606
607.Lcommon_seh_exit:
608
609 mov 40($disp),%rdi # disp->ContextRecord
610 mov $context,%rsi # context
611 mov \$154,%ecx # sizeof(CONTEXT)
612 .long 0xa548f3fc # cld; rep movsq
613
614 mov $disp,%rsi
615 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
616 mov 8(%rsi),%rdx # arg2, disp->ImageBase
617 mov 0(%rsi),%r8 # arg3, disp->ControlPc
618 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
619 mov 40(%rsi),%r10 # disp->ContextRecord
620 lea 56(%rsi),%r11 # &disp->HandlerData
621 lea 24(%rsi),%r12 # &disp->EstablisherFrame
622 mov %r10,32(%rsp) # arg5
623 mov %r11,40(%rsp) # arg6
624 mov %r12,48(%rsp) # arg7
625 mov %rcx,56(%rsp) # arg8, (NULL)
626 call *__imp_RtlVirtualUnwind(%rip)
627
628 mov \$1,%eax # ExceptionContinueSearch
629 add \$64,%rsp
630 popfq
631 pop %r15
632 pop %r14
633 pop %r13
634 pop %r12
635 pop %rbp
636 pop %rbx
637 pop %rdi
638 pop %rsi
639 ret
640.size key_se_handler,.-key_se_handler
641
642.section .pdata
643.align 4
644 .rva .LSEH_begin_RC4
645 .rva .LSEH_end_RC4
646 .rva .LSEH_info_RC4
647
648 .rva .LSEH_begin_private_RC4_set_key
649 .rva .LSEH_end_private_RC4_set_key
650 .rva .LSEH_info_private_RC4_set_key
651
652.section .xdata
653.align 8
654.LSEH_info_RC4:
655 .byte 9,0,0,0
656 .rva stream_se_handler
657.LSEH_info_private_RC4_set_key:
658 .byte 9,0,0,0
659 .rva key_se_handler
660___
661}
662
663sub reg_part { 529sub reg_part {
664my ($reg,$conv)=@_; 530my ($reg,$conv)=@_;
665 if ($reg =~ /%r[0-9]+/) { $reg .= $conv; } 531 if ($reg =~ /%r[0-9]+/) { $reg .= $conv; }
diff --git a/src/lib/libssl/src/crypto/sha/asm/sha512-x86_64.pl b/src/lib/libssl/src/crypto/sha/asm/sha512-x86_64.pl
index 8d51678557..feb0f9e776 100755
--- a/src/lib/libssl/src/crypto/sha/asm/sha512-x86_64.pl
+++ b/src/lib/libssl/src/crypto/sha/asm/sha512-x86_64.pl
@@ -44,8 +44,6 @@ $flavour = shift;
44$output = shift; 44$output = shift;
45if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 45if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
46 46
47$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
48
49$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 47$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
50( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 48( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
51( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 49( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -339,113 +337,6 @@ $TABLE:
339___ 337___
340} 338}
341 339
342# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
343# CONTEXT *context,DISPATCHER_CONTEXT *disp)
344if ($win64) {
345$rec="%rcx";
346$frame="%rdx";
347$context="%r8";
348$disp="%r9";
349
350$code.=<<___;
351.extern __imp_RtlVirtualUnwind
352.type se_handler,\@abi-omnipotent
353.align 16
354se_handler:
355 push %rsi
356 push %rdi
357 push %rbx
358 push %rbp
359 push %r12
360 push %r13
361 push %r14
362 push %r15
363 pushfq
364 sub \$64,%rsp
365
366 mov 120($context),%rax # pull context->Rax
367 mov 248($context),%rbx # pull context->Rip
368
369 lea .Lprologue(%rip),%r10
370 cmp %r10,%rbx # context->Rip<.Lprologue
371 jb .Lin_prologue
372
373 mov 152($context),%rax # pull context->Rsp
374
375 lea .Lepilogue(%rip),%r10
376 cmp %r10,%rbx # context->Rip>=.Lepilogue
377 jae .Lin_prologue
378
379 mov 16*$SZ+3*8(%rax),%rax # pull $_rsp
380 lea 48(%rax),%rax
381
382 mov -8(%rax),%rbx
383 mov -16(%rax),%rbp
384 mov -24(%rax),%r12
385 mov -32(%rax),%r13
386 mov -40(%rax),%r14
387 mov -48(%rax),%r15
388 mov %rbx,144($context) # restore context->Rbx
389 mov %rbp,160($context) # restore context->Rbp
390 mov %r12,216($context) # restore context->R12
391 mov %r13,224($context) # restore context->R13
392 mov %r14,232($context) # restore context->R14
393 mov %r15,240($context) # restore context->R15
394
395.Lin_prologue:
396 mov 8(%rax),%rdi
397 mov 16(%rax),%rsi
398 mov %rax,152($context) # restore context->Rsp
399 mov %rsi,168($context) # restore context->Rsi
400 mov %rdi,176($context) # restore context->Rdi
401
402 mov 40($disp),%rdi # disp->ContextRecord
403 mov $context,%rsi # context
404 mov \$154,%ecx # sizeof(CONTEXT)
405 .long 0xa548f3fc # cld; rep movsq
406
407 mov $disp,%rsi
408 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
409 mov 8(%rsi),%rdx # arg2, disp->ImageBase
410 mov 0(%rsi),%r8 # arg3, disp->ControlPc
411 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
412 mov 40(%rsi),%r10 # disp->ContextRecord
413 lea 56(%rsi),%r11 # &disp->HandlerData
414 lea 24(%rsi),%r12 # &disp->EstablisherFrame
415 mov %r10,32(%rsp) # arg5
416 mov %r11,40(%rsp) # arg6
417 mov %r12,48(%rsp) # arg7
418 mov %rcx,56(%rsp) # arg8, (NULL)
419 call *__imp_RtlVirtualUnwind(%rip)
420
421 mov \$1,%eax # ExceptionContinueSearch
422 add \$64,%rsp
423 popfq
424 pop %r15
425 pop %r14
426 pop %r13
427 pop %r12
428 pop %rbp
429 pop %rbx
430 pop %rdi
431 pop %rsi
432 ret
433.size se_handler,.-se_handler
434
435.section .pdata
436.align 4
437 .rva .LSEH_begin_$func
438 .rva .LSEH_end_$func
439 .rva .LSEH_info_$func
440
441.section .xdata
442.align 8
443.LSEH_info_$func:
444 .byte 9,0,0,0
445 .rva se_handler
446___
447}
448
449$code =~ s/\`([^\`]*)\`/eval $1/gem; 340$code =~ s/\`([^\`]*)\`/eval $1/gem;
450print $code; 341print $code;
451close STDOUT; 342close STDOUT;
diff --git a/src/lib/libssl/src/crypto/whrlpool/asm/wp-x86_64.pl b/src/lib/libssl/src/crypto/whrlpool/asm/wp-x86_64.pl
index 24b2ff60c3..afadd5d2f1 100644
--- a/src/lib/libssl/src/crypto/whrlpool/asm/wp-x86_64.pl
+++ b/src/lib/libssl/src/crypto/whrlpool/asm/wp-x86_64.pl
@@ -34,8 +34,6 @@ $flavour = shift;
34$output = shift; 34$output = shift;
35if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 35if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
36 36
37$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
38
39$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate; 37$0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate;
40( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 38( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
41( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 39( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
@@ -478,113 +476,6 @@ ___
478 &L(0xfb,0xee,0x7c,0x66,0xdd,0x17,0x47,0x9e); 476 &L(0xfb,0xee,0x7c,0x66,0xdd,0x17,0x47,0x9e);
479 &L(0xca,0x2d,0xbf,0x07,0xad,0x5a,0x83,0x33); 477 &L(0xca,0x2d,0xbf,0x07,0xad,0x5a,0x83,0x33);
480 478
481# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
482# CONTEXT *context,DISPATCHER_CONTEXT *disp)
483if ($win64) {
484$rec="%rcx";
485$frame="%rdx";
486$context="%r8";
487$disp="%r9";
488
489$code.=<<___;
490.extern __imp_RtlVirtualUnwind
491.type se_handler,\@abi-omnipotent
492.align 16
493se_handler:
494 push %rsi
495 push %rdi
496 push %rbx
497 push %rbp
498 push %r12
499 push %r13
500 push %r14
501 push %r15
502 pushfq
503 sub \$64,%rsp
504
505 mov 120($context),%rax # pull context->Rax
506 mov 248($context),%rbx # pull context->Rip
507
508 lea .Lprologue(%rip),%r10
509 cmp %r10,%rbx # context->Rip<.Lprologue
510 jb .Lin_prologue
511
512 mov 152($context),%rax # pull context->Rsp
513
514 lea .Lepilogue(%rip),%r10
515 cmp %r10,%rbx # context->Rip>=.Lepilogue
516 jae .Lin_prologue
517
518 mov 128+32(%rax),%rax # pull saved stack pointer
519 lea 48(%rax),%rax
520
521 mov -8(%rax),%rbx
522 mov -16(%rax),%rbp
523 mov -24(%rax),%r12
524 mov -32(%rax),%r13
525 mov -40(%rax),%r14
526 mov -48(%rax),%r15
527 mov %rbx,144($context) # restore context->Rbx
528 mov %rbp,160($context) # restore context->Rbp
529 mov %r12,216($context) # restore context->R12
530 mov %r13,224($context) # restore context->R13
531 mov %r14,232($context) # restore context->R14
532 mov %r15,240($context) # restore context->R15
533
534.Lin_prologue:
535 mov 8(%rax),%rdi
536 mov 16(%rax),%rsi
537 mov %rax,152($context) # restore context->Rsp
538 mov %rsi,168($context) # restore context->Rsi
539 mov %rdi,176($context) # restore context->Rdi
540
541 mov 40($disp),%rdi # disp->ContextRecord
542 mov $context,%rsi # context
543 mov \$154,%ecx # sizeof(CONTEXT)
544 .long 0xa548f3fc # cld; rep movsq
545
546 mov $disp,%rsi
547 xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
548 mov 8(%rsi),%rdx # arg2, disp->ImageBase
549 mov 0(%rsi),%r8 # arg3, disp->ControlPc
550 mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
551 mov 40(%rsi),%r10 # disp->ContextRecord
552 lea 56(%rsi),%r11 # &disp->HandlerData
553 lea 24(%rsi),%r12 # &disp->EstablisherFrame
554 mov %r10,32(%rsp) # arg5
555 mov %r11,40(%rsp) # arg6
556 mov %r12,48(%rsp) # arg7
557 mov %rcx,56(%rsp) # arg8, (NULL)
558 call *__imp_RtlVirtualUnwind(%rip)
559
560 mov \$1,%eax # ExceptionContinueSearch
561 add \$64,%rsp
562 popfq
563 pop %r15
564 pop %r14
565 pop %r13
566 pop %r12
567 pop %rbp
568 pop %rbx
569 pop %rdi
570 pop %rsi
571 ret
572.size se_handler,.-se_handler
573
574.section .pdata
575.align 4
576 .rva .LSEH_begin_$func
577 .rva .LSEH_end_$func
578 .rva .LSEH_info_$func
579
580.section .xdata
581.align 8
582.LSEH_info_$func:
583 .byte 9,0,0,0
584 .rva se_handler
585___
586}
587
588$code =~ s/\`([^\`]*)\`/eval $1/gem; 479$code =~ s/\`([^\`]*)\`/eval $1/gem;
589print $code; 480print $code;
590close STDOUT; 481close STDOUT;