# poly1305aes_athlon_isequal.s version 20050218
# D. J. Bernstein
# Public domain.

# translated by qhasm-x86 version 20050213

## input line 1: register int32 x

## input line 2: register int32 y

## input line 3: register int32 d

## input line 4: register int32 x1

## input line 5: register int32 x2

## input line 6: register int32 x3

## input line 7: register int32 result

## input line 8: 

## input line 9: enter poly1305aes_athlon_isequal
.text
.p2align 5
.globl _poly1305aes_athlon_isequal
.globl poly1305aes_athlon_isequal
_poly1305aes_athlon_isequal:
poly1305aes_athlon_isequal:
sub $16,%esp
## live mem32 values: 2
## live int32 values: 4
## live flags values: 0

## input line 10: input x

## input line 11: input y

## input line 12: 

## input line 13:   store callerint ebx
movl %ebx,0(%esp)
## live mem32 values: 3
## live int32 values: 3
## live flags values: 0

## input line 14: 

## input line 15:   load x
movl 20(%esp),%eax
## live mem32 values: 2
## live int32 values: 4
## live flags values: 0

## input line 16:   load y
movl 24(%esp),%ecx
## live mem32 values: 1
## live int32 values: 5
## live flags values: 0

## input line 17: 

## input line 18:   d = *(uint32 *) (x + 0)
## d = *(uint32 *) (x + 0)
## int32#3 = *(uint32 *) (int32#1 + 0)
## %edx = *(uint32 *) (%eax + 0)
movl 0(%eax),%edx
## live mem32 values: 1
## live int32 values: 6
## live flags values: 0

## input line 19:   inplace d ^= *(uint32 *) (y + 0)
## d ^= *(uint32 *) (y + 0)
## int32#3 ^= *(uint32 *) (int32#2 + 0)
## %edx ^= *(uint32 *) (%ecx + 0)
xorl 0(%ecx),%edx
## live mem32 values: 1
## live int32 values: 6
## live flags values: 0

## input line 20: 

## input line 21:   x1 = *(uint32 *) (x + 4)
## x1 = *(uint32 *) (x + 4)
## int32#4 = *(uint32 *) (int32#1 + 4)
## %ebx = *(uint32 *) (%eax + 4)
movl 4(%eax),%ebx
## live mem32 values: 1
## live int32 values: 7
## live flags values: 0

## input line 22:   inplace x1 ^= *(uint32 *) (y + 4)
## x1 ^= *(uint32 *) (y + 4)
## int32#4 ^= *(uint32 *) (int32#2 + 4)
## %ebx ^= *(uint32 *) (%ecx + 4)
xorl 4(%ecx),%ebx
## live mem32 values: 1
## live int32 values: 7
## live flags values: 0

## input line 23:   inplace d |= x1
## d |= x1
## int32#3 |= int32#4
## %edx |= %ebx
or %ebx,%edx
## live mem32 values: 1
## live int32 values: 6
## live flags values: 0

## input line 24: 

## input line 25:   x2 = *(uint32 *) (x + 8)
## x2 = *(uint32 *) (x + 8)
## int32#4 = *(uint32 *) (int32#1 + 8)
## %ebx = *(uint32 *) (%eax + 8)
movl 8(%eax),%ebx
## live mem32 values: 1
## live int32 values: 7
## live flags values: 0

## input line 26:   inplace x2 ^= *(uint32 *) (y + 8)
## x2 ^= *(uint32 *) (y + 8)
## int32#4 ^= *(uint32 *) (int32#2 + 8)
## %ebx ^= *(uint32 *) (%ecx + 8)
xorl 8(%ecx),%ebx
## live mem32 values: 1
## live int32 values: 7
## live flags values: 0

## input line 27:   inplace d |= x2
## d |= x2
## int32#3 |= int32#4
## %edx |= %ebx
or %ebx,%edx
## live mem32 values: 1
## live int32 values: 6
## live flags values: 0

## input line 28: 

## input line 29:   x3 = *(uint32 *) (x + 12)
## x3 = *(uint32 *) (x + 12)
## int32#1 = *(uint32 *) (int32#1 + 12)
## %eax = *(uint32 *) (%eax + 12)
movl 12(%eax),%eax
## live mem32 values: 1
## live int32 values: 6
## live flags values: 0

## input line 30:   inplace x3 ^= *(uint32 *) (y + 12)
## x3 ^= *(uint32 *) (y + 12)
## int32#1 ^= *(uint32 *) (int32#2 + 12)
## %eax ^= *(uint32 *) (%ecx + 12)
xorl 12(%ecx),%eax
## live mem32 values: 1
## live int32 values: 5
## live flags values: 0

## input line 31:   inplace d |= x3
## d |= x3
## int32#3 |= int32#1
## %edx |= %eax
or %eax,%edx
## live mem32 values: 1
## live int32 values: 4
## live flags values: 0

## input line 32: 

## input line 33:   d -= 1
## d -= 1
## int32#3 -= 1
## %edx -= 1
sub $1,%edx
## live mem32 values: 1
## live int32 values: 4
## live flags values: 1

## input line 34:   

## input line 35:   d += 1
## d += 1
## int32#3 += 1
## %edx += 1
add $1,%edx
## live mem32 values: 1
## live int32 values: 3
## live flags values: 1

## input line 36:   result = 0
## result = 0
## int32#1 = 0
## %eax = 0
mov $0,%eax
## live mem32 values: 1
## live int32 values: 4
## live flags values: 1

## input line 37: 

## input line 38:   kill d

## input line 39: 

## input line 40:   carry result += result + carry
## carry result += result + carry
## carry int32#1 += int32#1 + carry
## carry %eax += %eax + carry
adc %eax,%eax
## live mem32 values: 1
## live int32 values: 4
## live flags values: 0

## input line 41: 

## input line 42:   load callerint ebx
movl 0(%esp),%ebx
## live mem32 values: 0
## live int32 values: 5
## live flags values: 0

## input line 43: 

## input line 44: output result

## input line 45: leave
add $16,%esp
ret
## live mem32 values: 0
## live int32 values: 5
## live flags values: 0
