lkml.org 
[lkml]   [2020]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subjectarch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
Hi Jason,

FYI, the error/warning still remains.

tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: b9bbe6ed63b2b9f2c9ee5cbd0f2c946a2723f4ce
commit: 07b586fe06625b0b610dc3d3a969c51913d143d4 crypto: x86/curve25519 - replace with formally verified implementation
date: 3 months ago
config: x86_64-randconfig-r001-20200518 (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 135b877874fae96b4372c8a3fbfaa8ff44ff86e3)
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
git checkout 07b586fe06625b0b610dc3d3a969c51913d143d4
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>, old ones prefixed by <<):

>> arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
" movq 0(%1), %%rdx;" /* f[0] */
^
>> arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
>> arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
>> arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
>> arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
>> arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
>> arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
>> arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
>> arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
9 errors generated.

vim +518 arch/x86/crypto/curve25519-x86_64.c

509
510 /* Computes the square of a field element: out <- f * f
511 * Uses the 8-element buffer tmp for intermediate results */
512 static inline void fsqr(u64 *out, const u64 *f, u64 *tmp)
513 {
514 asm volatile(
515 /* Compute the raw multiplication: tmp <- f * f */
516
517 /* Step 1: Compute all partial products */
> 518 " movq 0(%1), %%rdx;" /* f[0] */
519 " mulxq 8(%1), %%r8, %%r14;" " xor %%r15, %%r15;" /* f[1]*f[0] */
520 " mulxq 16(%1), %%r9, %%r10;" " adcx %%r14, %%r9;" /* f[2]*f[0] */
521 " mulxq 24(%1), %%rax, %%rcx;" " adcx %%rax, %%r10;" /* f[3]*f[0] */
522 " movq 24(%1), %%rdx;" /* f[3] */
523 " mulxq 8(%1), %%r11, %%r12;" " adcx %%rcx, %%r11;" /* f[1]*f[3] */
524 " mulxq 16(%1), %%rax, %%r13;" " adcx %%rax, %%r12;" /* f[2]*f[3] */
525 " movq 8(%1), %%rdx;" " adcx %%r15, %%r13;" /* f1 */
526 " mulxq 16(%1), %%rax, %%rcx;" " mov $0, %%r14;" /* f[2]*f[1] */
527
528 /* Step 2: Compute two parallel carry chains */
529 " xor %%r15, %%r15;"
530 " adox %%rax, %%r10;"
531 " adcx %%r8, %%r8;"
532 " adox %%rcx, %%r11;"
533 " adcx %%r9, %%r9;"
534 " adox %%r15, %%r12;"
535 " adcx %%r10, %%r10;"
536 " adox %%r15, %%r13;"
537 " adcx %%r11, %%r11;"
538 " adox %%r15, %%r14;"
539 " adcx %%r12, %%r12;"
540 " adcx %%r13, %%r13;"
541 " adcx %%r14, %%r14;"
542
543 /* Step 3: Compute intermediate squares */
544 " movq 0(%1), %%rdx;" " mulx %%rdx, %%rax, %%rcx;" /* f[0]^2 */
545 " movq %%rax, 0(%0);"
546 " add %%rcx, %%r8;" " movq %%r8, 8(%0);"
547 " movq 8(%1), %%rdx;" " mulx %%rdx, %%rax, %%rcx;" /* f[1]^2 */
548 " adcx %%rax, %%r9;" " movq %%r9, 16(%0);"
549 " adcx %%rcx, %%r10;" " movq %%r10, 24(%0);"
550 " movq 16(%1), %%rdx;" " mulx %%rdx, %%rax, %%rcx;" /* f[2]^2 */
551 " adcx %%rax, %%r11;" " movq %%r11, 32(%0);"
552 " adcx %%rcx, %%r12;" " movq %%r12, 40(%0);"
553 " movq 24(%1), %%rdx;" " mulx %%rdx, %%rax, %%rcx;" /* f[3]^2 */
554 " adcx %%rax, %%r13;" " movq %%r13, 48(%0);"
555 " adcx %%rcx, %%r14;" " movq %%r14, 56(%0);"
556
557 /* Line up pointers */
558 " mov %0, %1;"
559 " mov %2, %0;"
560
561 /* Wrap the result back into the field */
562
563 /* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
564 " mov $38, %%rdx;"
565 " mulxq 32(%1), %%r8, %%r13;"
566 " xor %%rcx, %%rcx;"
567 " adoxq 0(%1), %%r8;"
568 " mulxq 40(%1), %%r9, %%r12;"
569 " adcx %%r13, %%r9;"
570 " adoxq 8(%1), %%r9;"
571 " mulxq 48(%1), %%r10, %%r13;"
572 " adcx %%r12, %%r10;"
573 " adoxq 16(%1), %%r10;"
574 " mulxq 56(%1), %%r11, %%rax;"
575 " adcx %%r13, %%r11;"
576 " adoxq 24(%1), %%r11;"
577 " adcx %%rcx, %%rax;"
578 " adox %%rcx, %%rax;"
579 " imul %%rdx, %%rax;"
580
581 /* Step 2: Fold the carry back into dst */
582 " add %%rax, %%r8;"
583 " adcx %%rcx, %%r9;"
584 " movq %%r9, 8(%0);"
585 " adcx %%rcx, %%r10;"
586 " movq %%r10, 16(%0);"
587 " adcx %%rcx, %%r11;"
588 " movq %%r11, 24(%0);"
589
590 /* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
591 " mov $0, %%rax;"
592 " cmovc %%rdx, %%rax;"
593 " add %%rax, %%r8;"
594 " movq %%r8, 0(%0);"
595 : "+&r" (tmp), "+&r" (f), "+&r" (out)
596 :
597 : "%rax", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", "memory", "cc"
598 );
599 }
600

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[unhandled content-type:application/gzip]
\
 
 \ /
  Last update: 2020-05-18 20:01    [W:0.075 / U:0.656 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site