Hi Jason, FYI, the error/warning still remains. tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 16fc44d6387e260f4932e9248b985837324705d8 commit: 07b586fe06625b0b610dc3d3a969c51913d143d4 crypto: x86/curve25519 - replace with formally verified implementation date: 1 year, 2 months ago config: x86_64-randconfig-a006-20210422 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project d87b9b81ccb95217181ce75515c6c68bbb408ca4) reproduce (this is a W=1 build): 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 # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=07b586fe06625b0b610dc3d3a969c51913d143d4 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 07b586fe06625b0b610dc3d3a969c51913d143d4 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All errors (new 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 >> 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 >> 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 fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 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