user: Translate the below assembly code into C programming language:

```asm
<bn_sqr_comba8>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  mul    %rax
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  mov    -0x28(%rbp),%rdx
  mov    %rdx,(%rax)
  movq   $0x0,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mul    %rax
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x10(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x8,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x18(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mul    %rax
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x8,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x20(%rax),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x8,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x10,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x28(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mul    %rax
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x10,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x8,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x30(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x8,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x10,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x18,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x38(%rax),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  mul    %rax
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x18,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x10,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x8,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x40(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x10,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x18,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x20,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x48(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  mul    %rax
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x20,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x18,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x50(%rax),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x20,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x28,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x58(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rax
  mul    %rax
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x28,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x28(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x28(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x20(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x60(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x28(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%rax
  mov    -0x40(%rbp),%rdx
  add    $0x30,%rdx
  mulq   (%rdx)
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rdx
  adc    $0x0,%rax
  mov    %rdx,-0x8(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  add    %rax,%rax
  adc    $0x0,%rdx
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x20(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x20(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x18(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x68(%rax),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,(%rdx)
  movq   $0x0,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%rax
  mul    %rax
  mov    %rax,-0x10(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rax,%rcx
  adc    $0x0,%rdx
  mov    %rcx,-0x18(%rbp)
  mov    %rdx,-0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x28(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rcx
  adc    $0x0,%rax
  mov    %rcx,-0x28(%rbp)
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x70(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,(%rdx)
  mov    -0x38(%rbp),%rax
  lea    0x78(%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rax,(%rdx)
  nop
  pop    %rbp
  ret
```

assistant: ```c
void bn_sqr_comba8(unsigned long *r, unsigned long *a) {
  unsigned long t1, t2;
  unsigned long c1, c2, c3;
  c1 = 0;
  c2 = 0;
  c3 = 0;
  do {
    asm("mulq %2" : "=a"(t1), "=d"(t2) : "a"(a[0]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[0] = c1;
  c1 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[1]), "m"((a)[0]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c1) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[1] = c2;
  c2 = 0;
  do {
    asm("mulq %2" : "=a"(t1), "=d"(t2) : "a"(a[1]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[2]), "m"((a)[0]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c2) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[2] = c3;
  c3 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[3]), "m"((a)[0]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c3) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[2]), "m"((a)[1]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c3) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[3] = c1;
  c1 = 0;
  do {
    asm("mulq %2" : "=a"(t1), "=d"(t2) : "a"(a[2]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[3]), "m"((a)[1]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c1) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[4]), "m"((a)[0]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c1) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[4] = c2;
  c2 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[5]), "m"((a)[0]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c2) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[4]), "m"((a)[1]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c2) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[3]), "m"((a)[2]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c2) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[5] = c3;
  c3 = 0;
  do {
    asm("mulq %2" : "=a"(t1), "=d"(t2) : "a"(a[3]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[4]), "m"((a)[2]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c3) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[5]), "m"((a)[1]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c3) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[6]), "m"((a)[0]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c3) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[6] = c1;
  c1 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[7]), "m"((a)[0]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c1) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[6]), "m"((a)[1]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c1) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[5]), "m"((a)[2]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c1) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[4]), "m"((a)[3]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c1) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[7] = c2;
  c2 = 0;
  do {
    asm("mulq %2" : "=a"(t1), "=d"(t2) : "a"(a[4]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[5]), "m"((a)[3]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c2) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[6]), "m"((a)[2]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c2) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[7]), "m"((a)[1]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c2) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[8] = c3;
  c3 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[7]), "m"((a)[2]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c3) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[6]), "m"((a)[3]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c3) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[5]), "m"((a)[4]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c3) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[9] = c1;
  c1 = 0;
  do {
    asm("mulq %2" : "=a"(t1), "=d"(t2) : "a"(a[5]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[6]), "m"((a)[4]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c1) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[7]), "m"((a)[3]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c1) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[10] = c2;
  c2 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[7]), "m"((a)[4]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c2) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[6]), "m"((a)[5]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c2) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[11] = c3;
  c3 = 0;
  do {
    asm("mulq %2" : "=a"(t1), "=d"(t2) : "a"(a[6]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[7]), "m"((a)[5]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c3) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+r"(c3) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[12] = c1;
  c1 = 0;
  do {
    asm("mulq %3" : "=a"(t1), "=d"(t2) : "a"((a)[7]), "m"((a)[6]) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+d"(t2), "+r"(c1) : "g"(0) : "cc");
    asm("addq %0,%0; adcq %2,%1" : "+a"(t1), "+d"(t2) : "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c2), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+r"(c1) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[13] = c2;
  c2 = 0;
  do {
    asm("mulq %2" : "=a"(t1), "=d"(t2) : "a"(a[7]) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c3), "+d"(t2) : "a"(t1), "g"(0) : "cc");
    asm("addq %2,%0; adcq %3,%1" : "+r"(c1), "+r"(c2) : "d"(t2), "g"(0) : "cc");
  } while (0);
  r[14] = c3;
  r[15] = c1;
}
```