// File: bitwiseshiftleft[P]crandom/chacha.c
// Function: quarter_round_sse2
static inline void
  quarter_round_sse2(ssereg *a, ssereg *b, ssereg *c, ssereg *d) {
    *a = add(*a,*b); *d = sse2_rotate(16, *d ^ *a);
    *c = add(*c,*d); *b = sse2_rotate(12, *b ^ *c);
    *a = add(*a,*b); *d = sse2_rotate(8,  *d ^ *a);
    *c = add(*c,*d); *b = sse2_rotate(7,  *b ^ *c);
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x190, %rsp            # imm = 0x190
movq %rdi, -0x1f8(%rbp)
movq %rsi, -0x200(%rbp)
movq %rdx, -0x208(%rbp)
movq %rcx, -0x210(%rbp)
movq -0x1f8(%rbp), %rax
movdqa (%rax), %xmm1
movq -0x200(%rbp), %rax
movdqa (%rax), %xmm0
movdqa %xmm1, -0x180(%rbp)
movdqa %xmm0, -0x190(%rbp)
movdqa -0x180(%rbp), %xmm0
movdqa -0x190(%rbp), %xmm1
paddd %xmm1, %xmm0
movq -0x1f8(%rbp), %rax
movdqa %xmm0, (%rax)
movq -0x210(%rbp), %rax
movdqa (%rax), %xmm0
movq -0x1f8(%rbp), %rax
pxor (%rax), %xmm0
movl $0x10, -0xf8(%rbp)
movdqa %xmm0, -0x110(%rbp)
movdqa -0x110(%rbp), %xmm0
movl -0xf8(%rbp), %eax
movdqa %xmm0, -0xf0(%rbp)
movl %eax, -0xf4(%rbp)
movdqa -0xf0(%rbp), %xmm0
movl -0xf4(%rbp), %eax
movd %eax, %xmm1
pslld %xmm1, %xmm0
movdqa -0x110(%rbp), %xmm1
movl $0x20, %eax
subl -0xf8(%rbp), %eax
movdqa %xmm1, -0x70(%rbp)
movl %eax, -0x74(%rbp)
movdqa -0x70(%rbp), %xmm1
movl -0x74(%rbp), %eax
movd %eax, %xmm2
psrld %xmm2, %xmm1
pxor %xmm1, %xmm0
movq -0x210(%rbp), %rax
movdqa %xmm0, (%rax)
movq -0x208(%rbp), %rax
movdqa (%rax), %xmm1
movq -0x210(%rbp), %rax
movdqa (%rax), %xmm0
movdqa %xmm1, -0x1a0(%rbp)
movdqa %xmm0, -0x1b0(%rbp)
movdqa -0x1a0(%rbp), %xmm0
movdqa -0x1b0(%rbp), %xmm1
paddd %xmm1, %xmm0
movq -0x208(%rbp), %rax
movdqa %xmm0, (%rax)
movq -0x200(%rbp), %rax
movdqa (%rax), %xmm0
movq -0x208(%rbp), %rax
pxor (%rax), %xmm0
movl $0xc, -0x114(%rbp)
movdqa %xmm0, -0x130(%rbp)
movdqa -0x130(%rbp), %xmm0
movl -0x114(%rbp), %eax
movdqa %xmm0, -0xd0(%rbp)
movl %eax, -0xd4(%rbp)
movdqa -0xd0(%rbp), %xmm0
movl -0xd4(%rbp), %eax
movd %eax, %xmm1
pslld %xmm1, %xmm0
movdqa -0x130(%rbp), %xmm1
movl $0x20, %eax
subl -0x114(%rbp), %eax
movdqa %xmm1, -0x50(%rbp)
movl %eax, -0x54(%rbp)
movdqa -0x50(%rbp), %xmm1
movl -0x54(%rbp), %eax
movd %eax, %xmm2
psrld %xmm2, %xmm1
pxor %xmm1, %xmm0
movq -0x200(%rbp), %rax
movdqa %xmm0, (%rax)
movq -0x1f8(%rbp), %rax
movdqa (%rax), %xmm1
movq -0x200(%rbp), %rax
movdqa (%rax), %xmm0
movdqa %xmm1, -0x1c0(%rbp)
movdqa %xmm0, -0x1d0(%rbp)
movdqa -0x1c0(%rbp), %xmm0
movdqa -0x1d0(%rbp), %xmm1
paddd %xmm1, %xmm0
movq -0x1f8(%rbp), %rax
movdqa %xmm0, (%rax)
movq -0x210(%rbp), %rax
movdqa (%rax), %xmm0
movq -0x1f8(%rbp), %rax
pxor (%rax), %xmm0
movl $0x8, -0x134(%rbp)
movdqa %xmm0, -0x150(%rbp)
movdqa -0x150(%rbp), %xmm0
movl -0x134(%rbp), %eax
movdqa %xmm0, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movdqa -0xb0(%rbp), %xmm0
movl -0xb4(%rbp), %eax
movd %eax, %xmm1
pslld %xmm1, %xmm0
movdqa -0x150(%rbp), %xmm1
movl $0x20, %eax
subl -0x134(%rbp), %eax
movdqa %xmm1, -0x30(%rbp)
movl %eax, -0x34(%rbp)
movdqa -0x30(%rbp), %xmm1
movl -0x34(%rbp), %eax
movd %eax, %xmm2
psrld %xmm2, %xmm1
pxor %xmm1, %xmm0
movq -0x210(%rbp), %rax
movdqa %xmm0, (%rax)
movq -0x208(%rbp), %rax
movdqa (%rax), %xmm1
movq -0x210(%rbp), %rax
movdqa (%rax), %xmm0
movdqa %xmm1, -0x1e0(%rbp)
movdqa %xmm0, -0x1f0(%rbp)
movdqa -0x1e0(%rbp), %xmm0
movdqa -0x1f0(%rbp), %xmm1
paddd %xmm1, %xmm0
movq -0x208(%rbp), %rax
movdqa %xmm0, (%rax)
movq -0x200(%rbp), %rax
movdqa (%rax), %xmm0
movq -0x208(%rbp), %rax
pxor (%rax), %xmm0
movl $0x7, -0x154(%rbp)
movdqa %xmm0, -0x170(%rbp)
movdqa -0x170(%rbp), %xmm0
movl -0x154(%rbp), %eax
movdqa %xmm0, -0x90(%rbp)
movl %eax, -0x94(%rbp)
movdqa -0x90(%rbp), %xmm0
movl -0x94(%rbp), %eax
movd %eax, %xmm1
pslld %xmm1, %xmm0
movdqa -0x170(%rbp), %xmm1
movl $0x20, %eax
subl -0x154(%rbp), %eax
movdqa %xmm1, -0x10(%rbp)
movl %eax, -0x14(%rbp)
movdqa -0x10(%rbp), %xmm1
movl -0x14(%rbp), %eax
movd %eax, %xmm2
psrld %xmm2, %xmm1
pxor %xmm1, %xmm0
movq -0x200(%rbp), %rax
movdqa %xmm0, (%rax)
addq $0x190, %rsp            # imm = 0x190
popq %rbp
retq
nopw %cs:(%rax,%rax)