summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;