crypto/aesni-intel_asm.S [977:1095]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TMP6 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 operation

	movdqa	  \XMM1, \XMM5
	movdqa	  \XMM2, \XMM6
	movdqa	  \XMM3, \XMM7
	movdqa	  \XMM4, \XMM8

        movdqa    SHUF_MASK(%rip), %xmm15
        # multiply TMP5 * HashKey using karatsuba

	movdqa	  \XMM5, \TMP4
	pshufd	  $78, \XMM5, \TMP6
	pxor	  \XMM5, \TMP6
	paddd     ONE(%rip), \XMM0		# INCR CNT
	movdqu	  HashKey_4(%arg2), \TMP5
	pclmulqdq $0x11, \TMP5, \TMP4           # TMP4 = a1*b1
	movdqa    \XMM0, \XMM1
	paddd     ONE(%rip), \XMM0		# INCR CNT
	movdqa    \XMM0, \XMM2
	paddd     ONE(%rip), \XMM0		# INCR CNT
	movdqa    \XMM0, \XMM3
	paddd     ONE(%rip), \XMM0		# INCR CNT
	movdqa    \XMM0, \XMM4
	pshufb %xmm15, \XMM1	# perform a 16 byte swap
	pclmulqdq $0x00, \TMP5, \XMM5           # XMM5 = a0*b0
	pshufb %xmm15, \XMM2	# perform a 16 byte swap
	pshufb %xmm15, \XMM3	# perform a 16 byte swap
	pshufb %xmm15, \XMM4	# perform a 16 byte swap

	pxor	  (%arg1), \XMM1
	pxor	  (%arg1), \XMM2
	pxor	  (%arg1), \XMM3
	pxor	  (%arg1), \XMM4
	movdqu	  HashKey_4_k(%arg2), \TMP5
	pclmulqdq $0x00, \TMP5, \TMP6       # TMP6 = (a1+a0)*(b1+b0)
	movaps 0x10(%arg1), \TMP1
	aesenc	  \TMP1, \XMM1              # Round 1
	aesenc	  \TMP1, \XMM2
	aesenc	  \TMP1, \XMM3
	aesenc	  \TMP1, \XMM4
	movaps 0x20(%arg1), \TMP1
	aesenc	  \TMP1, \XMM1              # Round 2
	aesenc	  \TMP1, \XMM2
	aesenc	  \TMP1, \XMM3
	aesenc	  \TMP1, \XMM4
	movdqa	  \XMM6, \TMP1
	pshufd	  $78, \XMM6, \TMP2
	pxor	  \XMM6, \TMP2
	movdqu	  HashKey_3(%arg2), \TMP5
	pclmulqdq $0x11, \TMP5, \TMP1       # TMP1 = a1 * b1
	movaps 0x30(%arg1), \TMP3
	aesenc    \TMP3, \XMM1              # Round 3
	aesenc    \TMP3, \XMM2
	aesenc    \TMP3, \XMM3
	aesenc    \TMP3, \XMM4
	pclmulqdq $0x00, \TMP5, \XMM6       # XMM6 = a0*b0
	movaps 0x40(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1              # Round 4
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	movdqu	  HashKey_3_k(%arg2), \TMP5
	pclmulqdq $0x00, \TMP5, \TMP2       # TMP2 = (a1+a0)*(b1+b0)
	movaps 0x50(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1              # Round 5
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	pxor	  \TMP1, \TMP4
# accumulate the results in TMP4:XMM5, TMP6 holds the middle part
	pxor	  \XMM6, \XMM5
	pxor	  \TMP2, \TMP6
	movdqa	  \XMM7, \TMP1
	pshufd	  $78, \XMM7, \TMP2
	pxor	  \XMM7, \TMP2
	movdqu	  HashKey_2(%arg2), \TMP5

        # Multiply TMP5 * HashKey using karatsuba

	pclmulqdq $0x11, \TMP5, \TMP1       # TMP1 = a1*b1
	movaps 0x60(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1              # Round 6
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	pclmulqdq $0x00, \TMP5, \XMM7       # XMM7 = a0*b0
	movaps 0x70(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1              # Round 7
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	movdqu	  HashKey_2_k(%arg2), \TMP5
	pclmulqdq $0x00, \TMP5, \TMP2       # TMP2 = (a1+a0)*(b1+b0)
	movaps 0x80(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1              # Round 8
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	pxor	  \TMP1, \TMP4
# accumulate the results in TMP4:XMM5, TMP6 holds the middle part
	pxor	  \XMM7, \XMM5
	pxor	  \TMP2, \TMP6

        # Multiply XMM8 * HashKey
        # XMM8 and TMP5 hold the values for the two operands

	movdqa	  \XMM8, \TMP1
	pshufd	  $78, \XMM8, \TMP2
	pxor	  \XMM8, \TMP2
	movdqu	  HashKey(%arg2), \TMP5
	pclmulqdq $0x11, \TMP5, \TMP1      # TMP1 = a1*b1
	movaps 0x90(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1             # Round 9
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	pclmulqdq $0x00, \TMP5, \XMM8      # XMM8 = a0*b0
	lea	  0xa0(%arg1),%r10
	mov	  keysize,%eax
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



crypto/aesni-intel_asm.S [1185:1303]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TMP6 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 operation

	movdqa	  \XMM1, \XMM5
	movdqa	  \XMM2, \XMM6
	movdqa	  \XMM3, \XMM7
	movdqa	  \XMM4, \XMM8

        movdqa    SHUF_MASK(%rip), %xmm15
        # multiply TMP5 * HashKey using karatsuba

	movdqa	  \XMM5, \TMP4
	pshufd	  $78, \XMM5, \TMP6
	pxor	  \XMM5, \TMP6
	paddd     ONE(%rip), \XMM0		# INCR CNT
	movdqu	  HashKey_4(%arg2), \TMP5
	pclmulqdq $0x11, \TMP5, \TMP4           # TMP4 = a1*b1
	movdqa    \XMM0, \XMM1
	paddd     ONE(%rip), \XMM0		# INCR CNT
	movdqa    \XMM0, \XMM2
	paddd     ONE(%rip), \XMM0		# INCR CNT
	movdqa    \XMM0, \XMM3
	paddd     ONE(%rip), \XMM0		# INCR CNT
	movdqa    \XMM0, \XMM4
	pshufb %xmm15, \XMM1	# perform a 16 byte swap
	pclmulqdq $0x00, \TMP5, \XMM5           # XMM5 = a0*b0
	pshufb %xmm15, \XMM2	# perform a 16 byte swap
	pshufb %xmm15, \XMM3	# perform a 16 byte swap
	pshufb %xmm15, \XMM4	# perform a 16 byte swap

	pxor	  (%arg1), \XMM1
	pxor	  (%arg1), \XMM2
	pxor	  (%arg1), \XMM3
	pxor	  (%arg1), \XMM4
	movdqu	  HashKey_4_k(%arg2), \TMP5
	pclmulqdq $0x00, \TMP5, \TMP6       # TMP6 = (a1+a0)*(b1+b0)
	movaps 0x10(%arg1), \TMP1
	aesenc	  \TMP1, \XMM1              # Round 1
	aesenc	  \TMP1, \XMM2
	aesenc	  \TMP1, \XMM3
	aesenc	  \TMP1, \XMM4
	movaps 0x20(%arg1), \TMP1
	aesenc	  \TMP1, \XMM1              # Round 2
	aesenc	  \TMP1, \XMM2
	aesenc	  \TMP1, \XMM3
	aesenc	  \TMP1, \XMM4
	movdqa	  \XMM6, \TMP1
	pshufd	  $78, \XMM6, \TMP2
	pxor	  \XMM6, \TMP2
	movdqu	  HashKey_3(%arg2), \TMP5
	pclmulqdq $0x11, \TMP5, \TMP1       # TMP1 = a1 * b1
	movaps 0x30(%arg1), \TMP3
	aesenc    \TMP3, \XMM1              # Round 3
	aesenc    \TMP3, \XMM2
	aesenc    \TMP3, \XMM3
	aesenc    \TMP3, \XMM4
	pclmulqdq $0x00, \TMP5, \XMM6       # XMM6 = a0*b0
	movaps 0x40(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1              # Round 4
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	movdqu	  HashKey_3_k(%arg2), \TMP5
	pclmulqdq $0x00, \TMP5, \TMP2       # TMP2 = (a1+a0)*(b1+b0)
	movaps 0x50(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1              # Round 5
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	pxor	  \TMP1, \TMP4
# accumulate the results in TMP4:XMM5, TMP6 holds the middle part
	pxor	  \XMM6, \XMM5
	pxor	  \TMP2, \TMP6
	movdqa	  \XMM7, \TMP1
	pshufd	  $78, \XMM7, \TMP2
	pxor	  \XMM7, \TMP2
	movdqu	  HashKey_2(%arg2), \TMP5

        # Multiply TMP5 * HashKey using karatsuba

	pclmulqdq $0x11, \TMP5, \TMP1       # TMP1 = a1*b1
	movaps 0x60(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1              # Round 6
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	pclmulqdq $0x00, \TMP5, \XMM7       # XMM7 = a0*b0
	movaps 0x70(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1              # Round 7
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	movdqu	  HashKey_2_k(%arg2), \TMP5
	pclmulqdq $0x00, \TMP5, \TMP2       # TMP2 = (a1+a0)*(b1+b0)
	movaps 0x80(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1              # Round 8
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	pxor	  \TMP1, \TMP4
# accumulate the results in TMP4:XMM5, TMP6 holds the middle part
	pxor	  \XMM7, \XMM5
	pxor	  \TMP2, \TMP6

        # Multiply XMM8 * HashKey
        # XMM8 and TMP5 hold the values for the two operands

	movdqa	  \XMM8, \TMP1
	pshufd	  $78, \XMM8, \TMP2
	pxor	  \XMM8, \TMP2
	movdqu	  HashKey(%arg2), \TMP5
	pclmulqdq $0x11, \TMP5, \TMP1      # TMP1 = a1*b1
	movaps 0x90(%arg1), \TMP3
	aesenc	  \TMP3, \XMM1             # Round 9
	aesenc	  \TMP3, \XMM2
	aesenc	  \TMP3, \XMM3
	aesenc	  \TMP3, \XMM4
	pclmulqdq $0x00, \TMP5, \XMM8      # XMM8 = a0*b0
	lea	  0xa0(%arg1),%r10
	mov	  keysize,%eax
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



