linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: "Jason A. Donenfeld" <zx2c4@kernel.org>
Cc: kbuild-all@lists.01.org, clang-built-linux@googlegroups.com,
	linux-kernel@vger.kernel.org,
	Herbert Xu <herbert@gondor.apana.org.au>
Subject: arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available
Date: Sun, 5 Jul 2020 04:40:05 +0800	[thread overview]
Message-ID: <202007050400.kQYL0soL%lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 6644 bytes --]

Hi Jason,

FYI, the error/warning still remains.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   35e884f89df4c48566d745dc5a97a0d058d04263
commit: 07b586fe06625b0b610dc3d3a969c51913d143d4 crypto: x86/curve25519 - replace with formally verified implementation
date:   5 months ago
config: x86_64-randconfig-a002-20200705 (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project e359ab1eca5727ce4c688bb49323b8a09478d61c)
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 <lkp@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
   arch/x86/crypto/curve25519-x86_64.c:609:3: error: inline assembly requires more registers than available
                   "  movq 0(%1), %%rdx;"                                       /* f[0] */
                   ^
   arch/x86/crypto/curve25519-x86_64.c:609:3: error: inline assembly requires more registers than available
   11 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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30973 bytes --]

             reply	other threads:[~2020-07-04 21:09 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-04 20:40 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-05-10  8:30 arch/x86/crypto/curve25519-x86_64.c:518:3: error: inline assembly requires more registers than available kernel test robot
2021-04-22  2:20 kernel test robot
2021-04-05 22:49 kernel test robot
2021-03-19 21:03 kernel test robot
2020-07-12  3:36 kernel test robot
2020-06-18 14:53 kernel test robot
2020-06-03 12:32 kernel test robot
2020-05-18 17:42 kbuild test robot
2020-05-01  0:51 kbuild test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202007050400.kQYL0soL%lkp@intel.com \
    --to=lkp@intel.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=zx2c4@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).