summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bn
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/lib/libcrypto/bn
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/lib/libcrypto/bn')
-rw-r--r--src/lib/libcrypto/bn/asm/modexp512-x86_64.pl109
-rwxr-xr-xsrc/lib/libcrypto/bn/asm/x86_64-mont.pl177
2 files changed, 0 insertions, 286 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;