user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<scrypt_core_r2_sidm>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  mov    %edx,%r14d
  push   %r13
  push   %r12
  push   %rbx
  mov    %rdi,%rbx
  sub    $0xa8,%rsp
  mov    %esi,-0xb4(%rbp)
  mov    %rsp,%rdx
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  mov    %esi,%eax
  shl    $0x5,%eax
  cltq
  shl    $0x2,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  sub    %rcx,%rdx
  cmp    %rdx,%rsp
  je     L17
L64:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L64
L17:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  jne    L43
L23:
  lea    0x20(%rbx),%rcx
  lea    0x4(%rbx),%rax
  mov    0x38(%rbx),%esi
  mov    0x30(%rbx),%edi
  mov    $0xf0,%edx
  lea    0x10(%rbx),%r12
  lea    0x14(%rbx),%r13
  mov    %rsp,%r15
  mov    %rcx,-0x90(%rbp)
  lea    0x24(%rbx),%rcx
  mov    %rcx,-0x98(%rbp)
  lea    0x28(%rbx),%rcx
  mov    %rcx,-0xa0(%rbp)
  lea    0x2c(%rbx),%rcx
  mov    %rax,-0x88(%rbp)
  lea    0x8(%rbx),%rax
  mov    %rcx,-0xa8(%rbp)
  lea    0x30(%rbx),%rcx
  mov    %rax,-0x48(%rbp)
  lea    0xc(%rbx),%rax
  mov    %rcx,-0x60(%rbp)
  lea    0x34(%rbx),%rcx
  mov    %rax,-0x50(%rbp)
  lea    0x18(%rbx),%rax
  mov    %rcx,-0x68(%rbp)
  lea    0x38(%rbx),%rcx
  mov    %rax,-0x58(%rbp)
  lea    0x1c(%rbx),%rax
  mov    %rcx,-0x70(%rbp)
  lea    0x3c(%rbx),%rcx
  mov    %rcx,-0x78(%rbp)
  mov    %r15,-0xc8(%rbp)
  mov    %rax,-0x80(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    0x3c(%rbx),%esi
  mov    0x34(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    0x30(%rbx),%esi
  mov    0x38(%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,-0xcc(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    0x34(%rbx),%esi
  mov    0x3c(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,-0xb8(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%edi
  mov    $0xcc,%edx
  mov    %eax,%esi
  mov    %eax,-0xc0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    $0xcc,%edx
  mov    -0xcc(%rbp),%r9d
  mov    %eax,0x30(%rbx)
  mov    %r9d,%edi
  mov    %r9d,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    $0xcc,%edx
  mov    -0xb8(%rbp),%r8d
  mov    %eax,0x34(%rbx)
  mov    %r8d,%edi
  mov    %r8d,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    -0xc0(%rbp),%edi
  mov    $0xcc,%edx
  mov    %eax,0x38(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0x28(%rbx),%esi
  mov    0x20(%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,0x3c(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0x2c(%rbx),%esi
  mov    0x24(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    0x20(%rbx),%esi
  mov    0x28(%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,-0xcc(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    0x24(%rbx),%esi
  mov    0x2c(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,-0xb8(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%edi
  mov    $0xcc,%edx
  mov    %eax,%esi
  mov    %eax,-0xc0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    $0xcc,%edx
  mov    -0xcc(%rbp),%r9d
  mov    %eax,0x20(%rbx)
  mov    %r9d,%edi
  mov    %r9d,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    $0xcc,%edx
  mov    -0xb8(%rbp),%r8d
  mov    %eax,0x24(%rbx)
  mov    %r8d,%edi
  mov    %r8d,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    -0xc0(%rbp),%edi
  mov    $0xcc,%edx
  mov    %eax,0x28(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0x18(%rbx),%esi
  mov    0x10(%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,0x2c(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0x1c(%rbx),%esi
  mov    0x14(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    0x10(%rbx),%esi
  mov    0x18(%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,-0xcc(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    0x14(%rbx),%esi
  mov    0x1c(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,-0xb8(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%edi
  mov    $0xcc,%edx
  mov    %eax,%esi
  mov    %eax,-0xc0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    $0xcc,%edx
  mov    -0xcc(%rbp),%r9d
  mov    %eax,0x10(%rbx)
  mov    %r9d,%edi
  mov    %r9d,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    $0xcc,%edx
  mov    -0xb8(%rbp),%r8d
  mov    %eax,0x14(%rbx)
  mov    %r8d,%edi
  mov    %r8d,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    -0xc0(%rbp),%edi
  mov    $0xcc,%edx
  mov    %eax,0x18(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0x8(%rbx),%esi
  mov    (%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,0x1c(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0xc(%rbx),%esi
  mov    0x4(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    0x8(%rbx),%edi
  mov    (%rbx),%esi
  mov    $0xf0,%edx
  mov    %eax,-0xcc(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    0x4(%rbx),%esi
  mov    0xc(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,-0xb8(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%edi
  mov    $0xcc,%edx
  mov    %eax,%esi
  mov    %eax,-0xc0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    $0xcc,%edx
  mov    -0xcc(%rbp),%r9d
  mov    %eax,(%rbx)
  mov    %r9d,%edi
  mov    %r9d,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    $0xcc,%edx
  mov    -0xb8(%rbp),%r8d
  mov    %eax,0x4(%rbx)
  mov    %r8d,%edi
  mov    %r8d,-0xb0(%rbp)
  call   <_mm_blend_epi16@plt>
  mov    -0xb0(%rbp),%esi
  mov    -0xc0(%rbp),%edi
  mov    $0xcc,%edx
  mov    %eax,0x8(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    -0xb4(%rbp),%ecx
  mov    %eax,0xc(%rbx)
  movd   %eax,%xmm4
  test   %ecx,%ecx
  jle    L3
  mov    %ecx,%eax
  mov    %r15,%r11
  shl    $0x6,%rax
  add    %r15,%rax
  mov    %r12,%r15
  mov    %rbx,%r12
  mov    %r13,%rbx
  mov    %rax,-0xc0(%rbp)
  mov    -0x80(%rbp),%r13
  jmp    L5
  nopl   0x0(%rax)
L71:
  movd   0xc(%r12),%xmm4
L5:
  movd   0x1c(%r12),%xmm6
  movd   0x14(%r12),%xmm7
  sub    $0x8,%rsp
  mov    %r12,%rdi
  movd   0x18(%r12),%xmm0
  movd   0x10(%r12),%xmm2
  mov    %r11,-0xb0(%rbp)
  movd   0x20(%r12),%xmm1
  movd   0x38(%r12),%xmm3
  punpckldq %xmm6,%xmm0
  punpckldq %xmm7,%xmm2
  mov    -0x68(%rbp),%r9
  mov    -0x60(%rbp),%r8
  movd   0x2c(%r12),%xmm6
  punpcklqdq %xmm0,%xmm2
  mov    -0x50(%rbp),%rcx
  movd   0x24(%r12),%xmm7
  movups %xmm2,0x10(%r11)
  movd   0x28(%r12),%xmm0
  movd   0x8(%r12),%xmm5
  mov    -0x48(%rbp),%rdx
  punpckldq %xmm6,%xmm0
  punpckldq %xmm7,%xmm1
  movd   0x3c(%r12),%xmm6
  movd   0x34(%r12),%xmm7
  punpcklqdq %xmm0,%xmm1
  movd   0x30(%r12),%xmm0
  punpckldq %xmm4,%xmm5
  movd   0x4(%r12),%xmm4
  punpckldq %xmm6,%xmm3
  movups %xmm1,0x20(%r11)
  mov    -0x88(%rbp),%rsi
  punpckldq %xmm7,%xmm0
  punpcklqdq %xmm3,%xmm0
  movd   (%r12),%xmm3
  movups %xmm0,0x30(%r11)
  punpckldq %xmm4,%xmm3
  punpcklqdq %xmm5,%xmm3
  movups %xmm3,(%r11)
  push   %r14
  push   -0x78(%rbp)
  push   -0x70(%rbp)
  call   <xor_salsa_sidm@plt>
  add    $0x18,%rsp
  mov    -0x58(%rbp),%rdx
  mov    %r12,%r8
  push   %r14
  mov    -0x88(%rbp),%r9
  mov    %r13,%rcx
  mov    %rbx,%rsi
  push   -0x50(%rbp)
  mov    %r15,%rdi
  push   -0x48(%rbp)
  call   <xor_salsa_sidm@plt>
  add    $0x18,%rsp
  mov    %rbx,%r9
  mov    -0xa8(%rbp),%rcx
  push   %r14
  mov    -0xa0(%rbp),%rdx
  mov    %r15,%r8
  mov    -0x98(%rbp),%rsi
  mov    -0x90(%rbp),%rdi
  push   %r13
  push   -0x58(%rbp)
  call   <xor_salsa_sidm_swap@plt>
  add    $0x18,%rsp
  mov    -0x78(%rbp),%rcx
  mov    %rbx,%r9
  mov    -0x70(%rbp),%rdx
  mov    -0x68(%rbp),%rsi
  push   %r14
  mov    %r15,%r8
  push   %r13
  mov    -0x60(%rbp),%rdi
  push   -0x58(%rbp)
  call   <xor_salsa_sidm@plt>
  mov    -0xb0(%rbp),%r11
  add    $0x20,%rsp
  add    $0x40,%r11
  cmp    %r11,-0xc0(%rbp)
  jne    L71
  mov    -0xb4(%rbp),%eax
  mov    %rbx,%r13
  xor    %r11d,%r11d
  mov    %r12,%rbx
  mov    %r15,%r12
  sub    $0x1,%eax
  mov    %eax,-0xc0(%rbp)
  nopl   0x0(%rax,%rax,1)
L48:
  mov    0x30(%rbx),%edi
  xor    %esi,%esi
  mov    %r11d,-0xb0(%rbp)
  call   <_mm_extract_epi16@plt>
  and    -0xc0(%rbp),%eax
  mov    -0xc8(%rbp),%rcx
  shl    $0x4,%eax
  mov    (%rbx),%edi
  cltq
  lea    (%rcx,%rax,4),%r15
  mov    (%r15),%esi
  call   <_mm_xor_si128@plt>
  mov    0x4(%r15),%esi
  mov    0x4(%rbx),%edi
  mov    %eax,(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x8(%r15),%esi
  mov    0x8(%rbx),%edi
  mov    %eax,0x4(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0xc(%r15),%esi
  mov    0xc(%rbx),%edi
  mov    %eax,0x8(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x10(%r15),%esi
  mov    0x10(%rbx),%edi
  mov    %eax,0xc(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x14(%r15),%esi
  mov    0x14(%rbx),%edi
  mov    %eax,0x10(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x18(%r15),%esi
  mov    0x18(%rbx),%edi
  mov    %eax,0x14(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x1c(%r15),%esi
  mov    0x1c(%rbx),%edi
  mov    %eax,0x18(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x20(%r15),%esi
  mov    0x20(%rbx),%edi
  mov    %eax,0x1c(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x24(%r15),%esi
  mov    0x24(%rbx),%edi
  mov    %eax,0x20(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x28(%r15),%esi
  mov    0x28(%rbx),%edi
  mov    %eax,0x24(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x2c(%r15),%esi
  mov    0x2c(%rbx),%edi
  mov    %eax,0x28(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x30(%r15),%esi
  mov    0x30(%rbx),%edi
  mov    %eax,0x2c(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x34(%r15),%esi
  mov    0x34(%rbx),%edi
  mov    %eax,0x30(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x38(%r15),%esi
  mov    0x38(%rbx),%edi
  mov    %eax,0x34(%rbx)
  call   <_mm_xor_si128@plt>
  mov    0x3c(%r15),%esi
  mov    0x3c(%rbx),%edi
  mov    %eax,0x38(%rbx)
  call   <_mm_xor_si128@plt>
  sub    $0x8,%rsp
  mov    -0x68(%rbp),%r9
  mov    %rbx,%rdi
  mov    -0x88(%rbp),%r15
  mov    -0x60(%rbp),%r8
  mov    %eax,0x3c(%rbx)
  mov    -0x50(%rbp),%rcx
  mov    -0x48(%rbp),%rdx
  push   %r14
  push   -0x78(%rbp)
  mov    %r15,%rsi
  push   -0x70(%rbp)
  call   <xor_salsa_sidm@plt>
  add    $0x18,%rsp
  mov    %r15,%r9
  mov    -0x58(%rbp),%r15
  push   %r14
  mov    -0x80(%rbp),%rcx
  mov    %rbx,%r8
  mov    %r13,%rsi
  push   -0x50(%rbp)
  mov    %r15,%rdx
  mov    %r12,%rdi
  push   -0x48(%rbp)
  call   <xor_salsa_sidm@plt>
  add    $0x18,%rsp
  mov    %r13,%r9
  mov    -0xa8(%rbp),%rcx
  push   %r14
  mov    -0xa0(%rbp),%rdx
  mov    %r12,%r8
  push   -0x80(%rbp)
  mov    -0x98(%rbp),%rsi
  mov    -0x90(%rbp),%rdi
  push   %r15
  call   <xor_salsa_sidm_swap@plt>
  add    $0x18,%rsp
  mov    -0x78(%rbp),%rcx
  mov    %r13,%r9
  mov    -0x70(%rbp),%rdx
  mov    -0x68(%rbp),%rsi
  push   %r14
  mov    %r12,%r8
  push   -0x80(%rbp)
  mov    -0x60(%rbp),%rdi
  push   %r15
  call   <xor_salsa_sidm@plt>
  mov    -0xb0(%rbp),%r11d
  add    $0x20,%rsp
  add    $0x1,%r11d
  cmp    %r11d,-0xb4(%rbp)
  jne    L48
L3:
  mov    0x38(%rbx),%esi
  mov    0x30(%rbx),%edi
  mov    $0xf0,%edx
  call   <_mm_blend_epi16@plt>
  mov    0x3c(%rbx),%esi
  mov    0x34(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,%r15d
  call   <_mm_blend_epi16@plt>
  mov    0x30(%rbx),%esi
  mov    0x38(%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,%r14d
  call   <_mm_blend_epi16@plt>
  mov    0x34(%rbx),%esi
  mov    0x3c(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,%r13d
  call   <_mm_blend_epi16@plt>
  mov    %r15d,%edi
  mov    $0xcc,%edx
  mov    %eax,%esi
  mov    %eax,%r12d
  call   <_mm_blend_epi16@plt>
  mov    %r15d,%esi
  mov    %r14d,%edi
  mov    $0xcc,%edx
  mov    %eax,0x30(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    %r14d,%esi
  mov    %r13d,%edi
  mov    $0xcc,%edx
  mov    %eax,0x34(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    %r13d,%esi
  mov    %r12d,%edi
  mov    $0xcc,%edx
  mov    %eax,0x38(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0x28(%rbx),%esi
  mov    0x20(%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,0x3c(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0x2c(%rbx),%esi
  mov    0x24(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,%r15d
  call   <_mm_blend_epi16@plt>
  mov    0x20(%rbx),%esi
  mov    0x28(%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,%r14d
  call   <_mm_blend_epi16@plt>
  mov    0x24(%rbx),%esi
  mov    0x2c(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,%r13d
  call   <_mm_blend_epi16@plt>
  mov    %r15d,%edi
  mov    $0xcc,%edx
  mov    %eax,%esi
  mov    %eax,%r12d
  call   <_mm_blend_epi16@plt>
  mov    %r15d,%esi
  mov    %r14d,%edi
  mov    $0xcc,%edx
  mov    %eax,0x20(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    %r14d,%esi
  mov    %r13d,%edi
  mov    $0xcc,%edx
  mov    %eax,0x24(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    %r13d,%esi
  mov    %r12d,%edi
  mov    $0xcc,%edx
  mov    %eax,0x28(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0x18(%rbx),%esi
  mov    0x10(%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,0x2c(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0x1c(%rbx),%esi
  mov    0x14(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,%r15d
  call   <_mm_blend_epi16@plt>
  mov    0x10(%rbx),%esi
  mov    0x18(%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,%r14d
  call   <_mm_blend_epi16@plt>
  mov    0x14(%rbx),%esi
  mov    0x1c(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,%r13d
  call   <_mm_blend_epi16@plt>
  mov    %r15d,%edi
  mov    $0xcc,%edx
  mov    %eax,%esi
  mov    %eax,%r12d
  call   <_mm_blend_epi16@plt>
  mov    %r15d,%esi
  mov    %r14d,%edi
  mov    $0xcc,%edx
  mov    %eax,0x10(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    %r14d,%esi
  mov    %r13d,%edi
  mov    $0xcc,%edx
  mov    %eax,0x14(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    %r13d,%esi
  mov    %r12d,%edi
  mov    $0xcc,%edx
  mov    %eax,0x18(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0x8(%rbx),%esi
  mov    (%rbx),%edi
  mov    $0xf0,%edx
  mov    %eax,0x1c(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    0xc(%rbx),%esi
  mov    0x4(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,%r15d
  call   <_mm_blend_epi16@plt>
  mov    0x8(%rbx),%edi
  mov    (%rbx),%esi
  mov    $0xf0,%edx
  mov    %eax,%r14d
  call   <_mm_blend_epi16@plt>
  mov    0x4(%rbx),%esi
  mov    0xc(%rbx),%edi
  mov    $0xf,%edx
  mov    %eax,%r13d
  call   <_mm_blend_epi16@plt>
  mov    $0xcc,%edx
  mov    %r15d,%edi
  mov    %eax,%esi
  mov    %eax,%r12d
  call   <_mm_blend_epi16@plt>
  mov    $0xcc,%edx
  mov    %r15d,%esi
  mov    %r14d,%edi
  mov    %eax,(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    $0xcc,%edx
  mov    %r14d,%esi
  mov    %r13d,%edi
  mov    %eax,0x4(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    $0xcc,%edx
  mov    %r13d,%esi
  mov    %r12d,%edi
  mov    %eax,0x8(%rbx)
  call   <_mm_blend_epi16@plt>
  mov    %eax,0xc(%rbx)
  mov    -0x38(%rbp),%rax
  sub    %fs:0x28,%rax
  jne    L72
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
  nopl   (%rax)
L43:
  orq    $0x0,-0x8(%rsp,%rax,1)
  jmp    L23
L72:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void scrypt_core_r2_sidm(__m128i *X, uint32_t Loops, uint32_t double_rounds) {
  uint32_t i, j;
  __m128i scratch[Loops * 8 * 4];
  __m128i *calc_1 = (__m128i *)&X[0];
  __m128i *calc_2 = (__m128i *)&X[1];
  __m128i *calc_3 = (__m128i *)&X[2];
  __m128i *calc_4 = (__m128i *)&X[3];
  __m128i *calc_11 = (__m128i *)&X[4];
  __m128i *calc_12 = (__m128i *)&X[5];
  __m128i *calc_13 = (__m128i *)&X[6];
  __m128i *calc_14 = (__m128i *)&X[7];
  __m128i *calc_21 = (__m128i *)&X[8];
  __m128i *calc_22 = (__m128i *)&X[9];
  __m128i *calc_23 = (__m128i *)&X[10];
  __m128i *calc_24 = (__m128i *)&X[11];
  __m128i *calc_31 = (__m128i *)&X[12];
  __m128i *calc_32 = (__m128i *)&X[13];
  __m128i *calc_33 = (__m128i *)&X[14];
  __m128i *calc_34 = (__m128i *)&X[15];
  __m128i _calc5;
  __m128i _calc6;
  __m128i _calc7;
  __m128i _calc8;
  _calc5 = _mm_blend_epi16(*calc_31, *calc_33, 0xf0);
  _calc6 = _mm_blend_epi16(*calc_32, *calc_34, 0x0f);
  _calc7 = _mm_blend_epi16(*calc_33, *calc_31, 0xf0);
  _calc8 = _mm_blend_epi16(*calc_34, *calc_32, 0x0f);
  *calc_31 = _mm_blend_epi16(_calc5, _calc8, 0xcc);
  *calc_32 = _mm_blend_epi16(_calc6, _calc5, 0xcc);
  *calc_33 = _mm_blend_epi16(_calc7, _calc6, 0xcc);
  *calc_34 = _mm_blend_epi16(_calc8, _calc7, 0xcc);
  _calc5 = _mm_blend_epi16(*calc_21, *calc_23, 0xf0);
  _calc6 = _mm_blend_epi16(*calc_22, *calc_24, 0x0f);
  _calc7 = _mm_blend_epi16(*calc_23, *calc_21, 0xf0);
  _calc8 = _mm_blend_epi16(*calc_24, *calc_22, 0x0f);
  *calc_21 = _mm_blend_epi16(_calc5, _calc8, 0xcc);
  *calc_22 = _mm_blend_epi16(_calc6, _calc5, 0xcc);
  *calc_23 = _mm_blend_epi16(_calc7, _calc6, 0xcc);
  *calc_24 = _mm_blend_epi16(_calc8, _calc7, 0xcc);
  _calc5 = _mm_blend_epi16(*calc_11, *calc_13, 0xf0);
  _calc6 = _mm_blend_epi16(*calc_12, *calc_14, 0x0f);
  _calc7 = _mm_blend_epi16(*calc_13, *calc_11, 0xf0);
  _calc8 = _mm_blend_epi16(*calc_14, *calc_12, 0x0f);
  *calc_11 = _mm_blend_epi16(_calc5, _calc8, 0xcc);
  *calc_12 = _mm_blend_epi16(_calc6, _calc5, 0xcc);
  *calc_13 = _mm_blend_epi16(_calc7, _calc6, 0xcc);
  *calc_14 = _mm_blend_epi16(_calc8, _calc7, 0xcc);
  _calc5 = _mm_blend_epi16(*calc_1, *calc_3, 0xf0);
  _calc6 = _mm_blend_epi16(*calc_2, *calc_4, 0x0f);
  _calc7 = _mm_blend_epi16(*calc_3, *calc_1, 0xf0);
  _calc8 = _mm_blend_epi16(*calc_4, *calc_2, 0x0f);
  *calc_1 = _mm_blend_epi16(_calc5, _calc8, 0xcc);
  *calc_2 = _mm_blend_epi16(_calc6, _calc5, 0xcc);
  *calc_3 = _mm_blend_epi16(_calc7, _calc6, 0xcc);
  *calc_4 = _mm_blend_epi16(_calc8, _calc7, 0xcc);
  for (i = 0; i < Loops; i++) {
    scratch[i * 16 + 0] = *calc_1;
    scratch[i * 16 + 1] = *calc_2;
    scratch[i * 16 + 2] = *calc_3;
    scratch[i * 16 + 3] = *calc_4;
    scratch[i * 16 + 4] = *calc_11;
    scratch[i * 16 + 5] = *calc_12;
    scratch[i * 16 + 6] = *calc_13;
    scratch[i * 16 + 7] = *calc_14;
    scratch[i * 16 + 8] = *calc_21;
    scratch[i * 16 + 9] = *calc_22;
    scratch[i * 16 + 10] = *calc_23;
    scratch[i * 16 + 11] = *calc_24;
    scratch[i * 16 + 12] = *calc_31;
    scratch[i * 16 + 13] = *calc_32;
    scratch[i * 16 + 14] = *calc_33;
    scratch[i * 16 + 15] = *calc_34;
    xor_salsa_sidm(calc_1, calc_2, calc_3, calc_4, calc_31, calc_32, calc_33, calc_34, double_rounds);
    xor_salsa_sidm(calc_11, calc_12, calc_13, calc_14, calc_1, calc_2, calc_3, calc_4, double_rounds);
    xor_salsa_sidm_swap(calc_21, calc_22, calc_23, calc_24, calc_11, calc_12, calc_13, calc_14, double_rounds);
    xor_salsa_sidm(calc_31, calc_32, calc_33, calc_34, calc_11, calc_12, calc_13, calc_14, double_rounds);
  }
  for (i = 0; i < Loops; i++) {
    j = 16 * (_mm_extract_epi16(*calc_31, 0x00) & (Loops - 1));
    *calc_1 = _mm_xor_si128(*calc_1, scratch[j]);
    *calc_2 = _mm_xor_si128(*calc_2, scratch[j + 1]);
    *calc_3 = _mm_xor_si128(*calc_3, scratch[j + 2]);
    *calc_4 = _mm_xor_si128(*calc_4, scratch[j + 3]);
    *calc_11 = _mm_xor_si128(*calc_11, scratch[j + 4]);
    *calc_12 = _mm_xor_si128(*calc_12, scratch[j + 5]);
    *calc_13 = _mm_xor_si128(*calc_13, scratch[j + 6]);
    *calc_14 = _mm_xor_si128(*calc_14, scratch[j + 7]);
    *calc_21 = _mm_xor_si128(*calc_21, scratch[j + 8]);
    *calc_22 = _mm_xor_si128(*calc_22, scratch[j + 9]);
    *calc_23 = _mm_xor_si128(*calc_23, scratch[j + 10]);
    *calc_24 = _mm_xor_si128(*calc_24, scratch[j + 11]);
    *calc_31 = _mm_xor_si128(*calc_31, scratch[j + 12]);
    *calc_32 = _mm_xor_si128(*calc_32, scratch[j + 13]);
    *calc_33 = _mm_xor_si128(*calc_33, scratch[j + 14]);
    *calc_34 = _mm_xor_si128(*calc_34, scratch[j + 15]);
    xor_salsa_sidm(calc_1, calc_2, calc_3, calc_4, calc_31, calc_32, calc_33, calc_34, double_rounds);
    xor_salsa_sidm(calc_11, calc_12, calc_13, calc_14, calc_1, calc_2, calc_3, calc_4, double_rounds);
    xor_salsa_sidm_swap(calc_21, calc_22, calc_23, calc_24, calc_11, calc_12, calc_13, calc_14, double_rounds);
    xor_salsa_sidm(calc_31, calc_32, calc_33, calc_34, calc_11, calc_12, calc_13, calc_14, double_rounds);
  }
  _calc5 = _mm_blend_epi16(*calc_31, *calc_33, 0xf0);
  _calc6 = _mm_blend_epi16(*calc_32, *calc_34, 0x0f);
  _calc7 = _mm_blend_epi16(*calc_33, *calc_31, 0xf0);
  _calc8 = _mm_blend_epi16(*calc_34, *calc_32, 0x0f);
  *calc_31 = _mm_blend_epi16(_calc5, _calc8, 0xcc);
  *calc_32 = _mm_blend_epi16(_calc6, _calc5, 0xcc);
  *calc_33 = _mm_blend_epi16(_calc7, _calc6, 0xcc);
  *calc_34 = _mm_blend_epi16(_calc8, _calc7, 0xcc);
  _calc5 = _mm_blend_epi16(*calc_21, *calc_23, 0xf0);
  _calc6 = _mm_blend_epi16(*calc_22, *calc_24, 0x0f);
  _calc7 = _mm_blend_epi16(*calc_23, *calc_21, 0xf0);
  _calc8 = _mm_blend_epi16(*calc_24, *calc_22, 0x0f);
  *calc_21 = _mm_blend_epi16(_calc5, _calc8, 0xcc);
  *calc_22 = _mm_blend_epi16(_calc6, _calc5, 0xcc);
  *calc_23 = _mm_blend_epi16(_calc7, _calc6, 0xcc);
  *calc_24 = _mm_blend_epi16(_calc8, _calc7, 0xcc);
  _calc5 = _mm_blend_epi16(*calc_11, *calc_13, 0xf0);
  _calc6 = _mm_blend_epi16(*calc_12, *calc_14, 0x0f);
  _calc7 = _mm_blend_epi16(*calc_13, *calc_11, 0xf0);
  _calc8 = _mm_blend_epi16(*calc_14, *calc_12, 0x0f);
  *calc_11 = _mm_blend_epi16(_calc5, _calc8, 0xcc);
  *calc_12 = _mm_blend_epi16(_calc6, _calc5, 0xcc);
  *calc_13 = _mm_blend_epi16(_calc7, _calc6, 0xcc);
  *calc_14 = _mm_blend_epi16(_calc8, _calc7, 0xcc);
  _calc5 = _mm_blend_epi16(*calc_1, *calc_3, 0xf0);
  _calc6 = _mm_blend_epi16(*calc_2, *calc_4, 0x0f);
  _calc7 = _mm_blend_epi16(*calc_3, *calc_1, 0xf0);
  _calc8 = _mm_blend_epi16(*calc_4, *calc_2, 0x0f);
  *calc_1 = _mm_blend_epi16(_calc5, _calc8, 0xcc);
  *calc_2 = _mm_blend_epi16(_calc6, _calc5, 0xcc);
  *calc_3 = _mm_blend_epi16(_calc7, _calc6, 0xcc);
  *calc_4 = _mm_blend_epi16(_calc8, _calc7, 0xcc);
}
```