What is this code doing exactly?
mystery:
pushl %ebp
movl %esp, %ebp
subl $20, %esp
movl $0, -4(%ebp)
jmp .L2
.L3:
movl -4(%ebp), %eax
sall $2, %eax
addl 8(%ebp), %eax
movl (%eax), %eax
cmpl 16(%ebp), %eax
jne .L4
movl $1, -20(%ebp)
jmp .L6
.L4:
addl $1, -4(%ebp)
.L2:
movl -4(%ebp), %eax
cmpl 12(%ebp), %eax
jl .L3
movl $0, -20(%ebp)
.L6:
movl -20(%ebp), %eax
leave
ret