Hi Jason,

FYI, the error/warning still remains.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   0aea6d5c5be33ce94c16f9ab2f64de1f481f424b
commit: 07b586fe06625b0b610dc3d3a969c51913d143d4 crypto: x86/curve25519 - 
replace with formally verified implementation
date:   5 months ago
config: x86_64-randconfig-a003-20200712 (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 
02946de3802d3bc65bc9f2eb9b8d4969b5a7add8)
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
        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: kernel test robot <l...@intel.com>

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
   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-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to