.globl crossout
crossout:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$16, %esp
	movl	$3, -4(%ebp)
	jmp	.L2
.L3:
	movl	-4(%ebp), %eax
	imull	8(%ebp), %eax
	movl	$0, prime(,%eax,4)
	addl	$2, -4(%ebp)
.L2:
	movl	-4(%ebp), %eax
	movl	%eax, %edx
	imull	8(%ebp), %edx
	movl	n, %eax
	cmpl	%eax, %edx
	jle	.L3
	leave
	ret
.globl worker
worker:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$56, %esp
	movl	$0, -12(%ebp)
	movl	n, %eax
	movl	%eax, -32(%ebp)
	fildl	-32(%ebp)
	fld	%st(0)
	fsqrt
	fucomi	%st(0), %st
	jp	.L11
	fucomi	%st(0), %st
	je	.L12
	fstp	%st(0)
	jmp	.L6
.L11:
	fstp	%st(0)
.L6:
	fstpl	(%esp)
	call	sqrt
	jmp	.L5
.L12:
	fstp	%st(1)
.L5:
	fnstcw	-26(%ebp)
	movzwl	-26(%ebp), %eax
	movb	$12, %ah
	movw	%ax, -28(%ebp)
	fldcw	-28(%ebp)
	fistpl	-16(%ebp)
	fldcw	-26(%ebp)
	jmp	.L9
.L10:
	nop
.L9:
	movl	$nextbaselock, (%esp)
	call	pthread_mutex_lock
	movl	nextbase, %eax
	movl	%eax, -20(%ebp)
	movl	nextbase, %eax
	addl	$2, %eax
	movl	%eax, nextbase
	movl	$nextbaselock, (%esp)
	call	pthread_mutex_unlock
	movl	-20(%ebp), %eax
	cmpl	-16(%ebp), %eax
	jg	.L7
	movl	-20(%ebp), %eax
	movl	prime(,%eax,4), %eax
	testl	%eax, %eax
	je	.L10
	movl	-20(%ebp), %eax
	movl	%eax, (%esp)
	call	crossout
	addl	$1, -12(%ebp)
	jmp	.L9
.L7:
	movl	-12(%ebp), %eax
	leave
	ret
