	.file	"extr_push.c_ao_play_data.c"
	.intel_syntax noprefix
	.text
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	" final"
.LC1:
	.string	""
	.section	.rodata.str1.8,"aMS",@progbits,1
	.align 8
.LC2:
	.string	"Audio device reports unaligned available buffer size.\n"
	.section	.rodata.str1.1
.LC3:
	.string	"start ao fill"
.LC4:
	.string	"end ao fill"
	.section	.rodata.str1.8
	.align 8
.LC5:
	.string	"Audio device returned nonsense value.\n"
	.align 8
.LC6:
	.string	"Error writing audio to device.\n"
	.align 8
.LC7:
	.string	"Audio device returned broken buffer state (sent %d samples, got %d samples, %d period%s)!\n"
	.align 8
.LC8:
	.string	"Audio output driver seems to ignore AOPLAY_FINAL_CHUNK.\n"
	.align 8
.LC9:
	.string	"Audio output is reporting incorrect buffer status.\n"
	.align 8
.LC10:
	.string	"in=%d flags=%d space=%d r=%d wa/pl=%d/%d needed=%d more=%d\n"
	.text
	.p2align 4
	.type	ao_play_data, @function
ao_play_data:
.LFB0:
	.cfi_startproc
	endbr64
	push	r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	mov	r15, rdi
	push	r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	push	r13
	.cfi_def_cfa_offset 32
	.cfi_offset 13, -32
	push	r12
	.cfi_def_cfa_offset 40
	.cfi_offset 12, -40
	push	rbp
	.cfi_def_cfa_offset 48
	.cfi_offset 6, -48
	push	rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	sub	rsp, 56
	.cfi_def_cfa_offset 112
	mov	rbx, QWORD PTR 40[rdi]
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR 40[rsp], rax
	xor	eax, eax
	mov	rax, QWORD PTR 24[rdi]
	call	[QWORD PTR [rax]]
	cmp	QWORD PTR 40[rbx], 0
	mov	edi, eax
	jne	.L2
	cmp	QWORD PTR 32[r15], 0
	jne	.L49
.L3:
	xor	esi, esi
	call	MPMAX@PLT
	cdq
	mov	r12d, eax
	idiv	DWORD PTR [r15]
	test	edx, edx
	jne	.L50
.L4:
	mov	edi, DWORD PTR 16[rbx]
	lea	rdx, 28[rsp]
	lea	rsi, 32[rsp]
	call	mp_audio_buffer_peek@PLT
	mov	r13d, DWORD PTR 28[rsp]
	mov	BYTE PTR 15[rsp], 1
	mov	DWORD PTR 8[rsp], 0
	cmp	r13d, r12d
	jg	.L51
.L7:
	cmp	QWORD PTR 24[rbx], 0
	mov	r14d, DWORD PTR AOPLAY_FINAL_CHUNK[rip]
	mov	eax, r13d
	je	.L27
	jmp	.L25
	.p2align 4,,10
	.p2align 3
.L49:
	mov	esi, DWORD PTR [rbx]
	test	esi, esi
	jne	.L3
.L2:
	xor	esi, esi
	call	MPMAX@PLT
	cdq
	mov	r12d, eax
	idiv	DWORD PTR [r15]
	test	edx, edx
	jne	.L52
.L22:
	mov	rax, QWORD PTR 32[rbx]
	mov	esi, r12d
	mov	rdi, r15
	mov	r13d, 0
	mov	QWORD PTR 32[rsp], rax
	call	realloc_silence@PLT
	mov	BYTE PTR 15[rsp], 0
	test	rax, rax
	mov	DWORD PTR 8[rsp], 1
	cmovne	r13d, r12d
	mov	DWORD PTR 28[rsp], r13d
	cmp	r13d, r12d
	jle	.L7
.L51:
	mov	eax, r12d
.L27:
	mov	ecx, DWORD PTR [r15]
	cdq
	xor	r14d, r14d
	idiv	ecx
	imul	eax, ecx
	mov	DWORD PTR 28[rsp], eax
.L25:
	lea	rsi, .LC3[rip]
	mov	rdi, r15
	call	MP_STATS@PLT
	mov	edx, DWORD PTR 28[rsp]
	mov	rsi, QWORD PTR 32[rsp]
	mov	rdi, r15
	call	ao_post_process_data@PLT
	mov	ebp, DWORD PTR 28[rsp]
	test	ebp, ebp
	jne	.L8
	lea	rsi, .LC4[rip]
	mov	rdi, r15
	call	MP_STATS@PLT
	mov	edx, DWORD PTR 28[rsp]
	test	edx, edx
	js	.L11
.L9:
	cmp	edx, ebp
	je	.L10
	test	DWORD PTR AOPLAY_FINAL_CHUNK[rip], r14d
	mov	r8d, DWORD PTR [r15]
	mov	ecx, ebp
	mov	rdi, r15
	lea	rax, .LC1[rip]
	lea	r9, .LC0[rip]
	cmove	r9, rax
	lea	rsi, .LC7[rip]
	xor	eax, eax
	call	MP_ERR@PLT
.L10:
	xor	esi, esi
	mov	edi, ebp
	call	MPMAX@PLT
	mov	r9d, eax
	test	eax, eax
	jg	.L13
	cmp	r13d, r12d
	jg	.L13
	mov	ecx, DWORD PTR 28[rsp]
	test	ecx, ecx
	jle	.L14
	test	DWORD PTR AOPLAY_FINAL_CHUNK[rip], r14d
	jne	.L53
.L14:
	mov	eax, DWORD PTR 8[rsp]
	test	eax, eax
	je	.L24
.L16:
	cmp	r13d, r12d
	setge	al
	test	r12d, r12d
	setg	dl
	and	eax, edx
	test	r9d, r9d
	sete	cl
	xor	edx, edx
	test	r12d, r12d
	sete	dl
	and	al, cl
	jne	.L54
.L17:
	and	al, BYTE PTR 15[rsp]
	mov	DWORD PTR 4[rbx], edx
	mov	rdi, r15
	movzx	eax, al
	or	DWORD PTR [rbx], eax
	mov	DWORD PTR 8[rsp], r9d
	call	unlocked_get_space@PLT
	mov	r9d, DWORD PTR 8[rsp]
	xor	ecx, ecx
	mov	ebp, eax
	mov	eax, 1
	cmp	r9d, r12d
	jne	.L19
	mov	edx, DWORD PTR 4[r15]
	test	edx, edx
	lea	eax, 3[rdx]
	cmovns	eax, edx
	sar	eax, 2
.L19:
	xor	edx, edx
	cmp	eax, ebp
	jle	.L55
.L20:
	push	rdx
	.cfi_def_cfa_offset 120
	mov	r8d, r12d
	mov	ecx, r14d
	mov	edx, r13d
	push	rbp
	.cfi_def_cfa_offset 128
	mov	eax, DWORD PTR [rbx]
	lea	rsi, .LC10[rip]
	mov	rdi, r15
	push	rax
	.cfi_def_cfa_offset 136
	mov	eax, DWORD PTR 4[rbx]
	push	rax
	.cfi_def_cfa_offset 144
	call	MP_TRACE@PLT
	add	rsp, 32
	.cfi_def_cfa_offset 112
	mov	rax, QWORD PTR 40[rsp]
	xor	rax, QWORD PTR fs:40
	jne	.L56
	add	rsp, 56
	.cfi_remember_state
	.cfi_def_cfa_offset 56
	pop	rbx
	.cfi_def_cfa_offset 48
	pop	rbp
	.cfi_def_cfa_offset 40
	pop	r12
	.cfi_def_cfa_offset 32
	pop	r13
	.cfi_def_cfa_offset 24
	pop	r14
	.cfi_def_cfa_offset 16
	pop	r15
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L52:
	.cfi_restore_state
	lea	rsi, .LC2[rip]
	mov	rdi, r15
	xor	eax, eax
	call	MP_ERR@PLT
	jmp	.L22
	.p2align 4,,10
	.p2align 3
.L53:
	lea	rsi, .LC8[rip]
	mov	rdi, r15
	xor	eax, eax
	call	MP_ERR@PLT
	mov	r9d, r13d
.L13:
	mov	edx, DWORD PTR 8[rsp]
	test	edx, edx
	je	.L24
.L15:
	test	r9d, r9d
	jle	.L16
	mov	QWORD PTR 8[rbx], 0
	mov	eax, 1
	mov	edx, 1
	jmp	.L17
	.p2align 4,,10
	.p2align 3
.L8:
	mov	rax, QWORD PTR 24[r15]
	mov	edx, ebp
	mov	rsi, QWORD PTR 32[rsp]
	mov	ecx, r14d
	mov	rdi, r15
	call	[QWORD PTR 8[rax]]
	lea	rsi, .LC4[rip]
	mov	rdi, r15
	mov	ebp, eax
	call	MP_STATS@PLT
	mov	edx, DWORD PTR 28[rsp]
	cmp	edx, ebp
	jl	.L11
	test	ebp, ebp
	jns	.L9
	lea	rsi, .LC6[rip]
	mov	rdi, r15
	xor	eax, eax
	call	MP_ERR@PLT
	jmp	.L10
	.p2align 4,,10
	.p2align 3
.L11:
	lea	rsi, .LC5[rip]
	mov	rdi, r15
	xor	eax, eax
	call	MP_ERR@PLT
	mov	ebp, DWORD PTR 28[rsp]
	jmp	.L10
	.p2align 4,,10
	.p2align 3
.L24:
	mov	edi, DWORD PTR 16[rbx]
	mov	esi, r9d
	mov	DWORD PTR 8[rsp], r9d
	call	mp_audio_buffer_skip@PLT
	mov	r9d, DWORD PTR 8[rsp]
	jmp	.L15
	.p2align 4,,10
	.p2align 3
.L55:
	mov	eax, DWORD PTR AOPLAY_FINAL_CHUNK[rip]
	and	eax, r14d
	or	eax, ecx
	jne	.L20
	mov	DWORD PTR 8[rsp], r9d
	mov	edi, DWORD PTR 8[r15]
	call	[QWORD PTR 16[r15]]
	mov	r9d, DWORD PTR 8[rsp]
	mov	edx, 1
	jmp	.L20
	.p2align 4,,10
	.p2align 3
.L54:
	lea	rsi, .LC9[rip]
	mov	rdi, r15
	xor	eax, eax
	call	MP_ERR@PLT
	mov	DWORD PTR 4[rbx], 1
	mov	rdi, r15
	call	unlocked_get_space@PLT
	xor	r9d, r9d
	mov	ecx, 1
	mov	ebp, eax
	mov	eax, 1
	jmp	.L19
	.p2align 4,,10
	.p2align 3
.L50:
	lea	rsi, .LC2[rip]
	mov	rdi, r15
	xor	eax, eax
	call	MP_ERR@PLT
	jmp	.L4
.L56:
	call	__stack_chk_fail@PLT
	.cfi_endproc
.LFE0:
	.size	ao_play_data, .-ao_play_data
	.comm	AOPLAY_FINAL_CHUNK,4,4
	.ident	"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	 1f - 0f
	.long	 4f - 1f
	.long	 5
0:
	.string	 "GNU"
1:
	.align 8
	.long	 0xc0000002
	.long	 3f - 2f
2:
	.long	 0x3
3:
	.align 8
4:

	.arch armv5t
	.eabi_attribute 20, 1
	.eabi_attribute 21, 1
	.eabi_attribute 23, 3
	.eabi_attribute 24, 1
	.eabi_attribute 25, 1
	.eabi_attribute 26, 2
	.eabi_attribute 30, 2
	.eabi_attribute 34, 0
	.eabi_attribute 18, 4
	.file	"extr_push.c_ao_play_data.c"
	.text
	.section	.rodata.str1.4,"aMS",%progbits,1
	.align	2
.LC0:
	.ascii	" final\000"
	.align	2
.LC1:
	.ascii	"\000"
	.align	2
.LC2:
	.ascii	"Audio device reports unaligned available buffer siz"
	.ascii	"e.\012\000"
	.global	__aeabi_idiv
	.align	2
.LC3:
	.ascii	"start ao fill\000"
	.align	2
.LC4:
	.ascii	"end ao fill\000"
	.align	2
.LC5:
	.ascii	"Audio device returned nonsense value.\012\000"
	.align	2
.LC6:
	.ascii	"Error writing audio to device.\012\000"
	.align	2
.LC7:
	.ascii	"Audio device returned broken buffer state (sent %d "
	.ascii	"samples, got %d samples, %d period%s)!\012\000"
	.align	2
.LC8:
	.ascii	"Audio output driver seems to ignore AOPLAY_FINAL_CH"
	.ascii	"UNK.\012\000"
	.align	2
.LC9:
	.ascii	"Audio output is reporting incorrect buffer status.\012"
	.ascii	"\000"
	.align	2
.LC10:
	.ascii	"in=%d flags=%d space=%d r=%d wa/pl=%d/%d needed=%d "
	.ascii	"more=%d\012\000"
	.global	__aeabi_idivmod
	.section	.rodata.cst4,"aM",%progbits,4
	.align	2
.LC11:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	ao_play_data, %function
ao_play_data:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	ldr	r3, [r0, #16]
	ldr	r2, .L60
	ldr	r6, [r0, #24]
	sub	sp, sp, #44
	ldr	r3, [r3]
	mov	r4, r0
	ldr	r2, [r2]
	str	r2, [sp, #36]
	mov	r2,#0
	blx	r3
	ldr	r9, [r6, #24]
	cmp	r9, #0
	bne	.L2
	ldr	r3, [r4, #20]
	cmp	r3, #0
	bne	.L52
.L3:
	mov	r1, #0
	bl	MPMAX
	ldr	r1, [r4]
	mov	r5, r0
	bl	__aeabi_idivmod
	cmp	r1, #0
	bne	.L53
.L4:
	ldr	r0, [r6, #12]
	add	r2, sp, #32
	add	r1, sp, #28
	bl	mp_audio_buffer_peek
	ldr	r7, [sp, #32]
	mov	fp, #1
	cmp	r7, r5
	bgt	.L54
.L7:
	ldr	r3, [r6, #16]
	cmp	r3, #0
	moveq	r0, r7
	beq	.L27
	ldr	r3, .L60+4
	ldr	r10, [r3]
	b	.L25
.L52:
	ldr	r3, [r6]
	cmp	r3, #0
	bne	.L3
.L2:
	mov	r1, #0
	bl	MPMAX
	ldr	r1, [r4]
	mov	r5, r0
	bl	__aeabi_idivmod
	cmp	r1, #0
	bne	.L55
.L22:
	ldr	r3, [r6, #20]
	mov	r1, r5
	mov	r0, r4
	str	r3, [sp, #28]
	bl	realloc_silence
	subs	r7, r0, #0
	movne	r7, r5
	cmp	r7, r5
	mov	fp, #0
	mov	r9, #1
	str	r7, [sp, #32]
	ble	.L7
.L54:
	mov	r0, r5
.L27:
	ldr	r8, [r4]
	mov	r10, #0
	mov	r1, r8
	bl	__aeabi_idiv
	mul	r0, r8, r0
	str	r0, [sp, #32]
.L25:
	ldr	r1, .L60+8
	mov	r0, r4
	bl	MP_STATS
	mov	r0, r4
	ldr	r2, [sp, #32]
	ldr	r1, [sp, #28]
	bl	ao_post_process_data
	ldr	r8, [sp, #32]
	cmp	r8, #0
	bne	.L8
	mov	r0, r4
	ldr	r1, .L60+12
	bl	MP_STATS
	ldr	r2, [sp, #32]
	cmp	r2, #0
	blt	.L11
.L9:
	cmp	r2, r8
	beq	.L10
	ldr	r1, .L60+4
	ldr	r3, .L60+16
	ldr	r0, [r1]
	ldr	r1, .L60+20
	tst	r10, r0
	moveq	r3, r1
	ldr	r1, [r4]
	mov	r0, r4
	stm	sp, {r1, r3}
	mov	r3, r8
	ldr	r1, .L60+24
	bl	MP_ERR
.L10:
	mov	r0, r8
	mov	r1, #0
	bl	MPMAX
	cmp	r0, #0
	cmple	r7, r5
	mov	r8, r0
	bgt	.L13
	ldr	r3, [sp, #32]
	cmp	r3, #0
	ble	.L14
	ldr	r3, .L60+4
	ldr	r3, [r3]
	tst	r10, r3
	bne	.L56
.L14:
	cmp	r9, #0
	beq	.L24
.L16:
	cmp	r7, r5
	cmpge	r5, #0
	movgt	r3, #1
	movle	r3, #0
	cmp	r8, #0
	movne	r3, #0
	cmp	r3, #0
	clzeq	r1, r5
	lsreq	r1, r1, #5
	bne	.L57
.L17:
	ldr	r2, [r6]
	and	fp, fp, r3
	orr	fp, r2, fp
	mov	r0, r4
	str	r1, [r6, #4]
	str	fp, [r6]
	bl	unlocked_get_space
	cmp	r8, r5
	mov	r9, r0
	movne	r2, #0
	movne	r3, #1
	bne	.L19
	mov	r2, #0
	ldr	r3, [r4, #4]
	add	r1, r3, #3
	cmp	r3, r2
	movlt	r3, r1
	asr	r3, r3, #2
.L19:
	cmp	r3, r9
	ble	.L58
.L33:
	mov	r3, #0
.L20:
	str	r3, [sp, #20]
	str	r9, [sp, #16]
	ldr	r2, [r6]
	mov	r3, r10
	str	r2, [sp, #12]
	ldr	r1, [r6, #4]
	mov	r2, r7
	str	r1, [sp, #8]
	mov	r0, r4
	stm	sp, {r5, r8}
	ldr	r1, .L60+28
	bl	MP_TRACE
	ldr	r3, .L60
	ldr	r2, [r3]
	ldr	r3, [sp, #36]
	eors	r2, r3, r2
	mov	r3, #0
	bne	.L59
	add	sp, sp, #44
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L55:
	mov	r0, r4
	ldr	r1, .L60+32
	bl	MP_ERR
	b	.L22
.L56:
	mov	r0, r4
	ldr	r1, .L60+36
	bl	MP_ERR
	mov	r8, r7
.L13:
	cmp	r9, #0
	beq	.L24
.L15:
	cmp	r8, #0
	ble	.L16
	mov	r2, #0
	mov	r3, #1
	str	r2, [r6, #8]
	mov	r1, r3
	b	.L17
.L8:
	ldr	r3, [r4, #16]
	mov	r2, r8
	ldr	r1, [sp, #28]
	ldr	r8, [r3, #4]
	mov	r0, r4
	mov	r3, r10
	blx	r8
	mov	r8, r0
	ldr	r1, .L60+12
	mov	r0, r4
	bl	MP_STATS
	ldr	r2, [sp, #32]
	cmp	r2, r8
	blt	.L11
	cmp	r8, #0
	bge	.L9
	mov	r0, r4
	ldr	r1, .L60+40
	bl	MP_ERR
	b	.L10
.L11:
	mov	r0, r4
	ldr	r1, .L60+44
	bl	MP_ERR
	ldr	r8, [sp, #32]
	b	.L10
.L24:
	mov	r1, r8
	ldr	r0, [r6, #12]
	bl	mp_audio_buffer_skip
	b	.L15
.L58:
	ldr	r3, .L60+4
	ldr	r3, [r3]
	and	r3, r3, r10
	orrs	r3, r3, r2
	bne	.L33
	ldr	r3, [r4, #12]
	ldr	r0, [r4, #8]
	blx	r3
	mov	r3, #1
	b	.L20
.L57:
	mov	r8, #1
	ldr	r1, .L60+48
	mov	r0, r4
	bl	MP_ERR
	str	r8, [r6, #4]
	mov	r0, r4
	bl	unlocked_get_space
	mov	r2, r8
	mov	r3, r8
	mov	r9, r0
	mov	r8, #0
	b	.L19
.L53:
	mov	r0, r4
	ldr	r1, .L60+32
	bl	MP_ERR
	b	.L4
.L59:
	bl	__stack_chk_fail
.L61:
	.align	2
.L60:
	.word	.LC11
	.word	AOPLAY_FINAL_CHUNK
	.word	.LC3
	.word	.LC4
	.word	.LC0
	.word	.LC1
	.word	.LC7
	.word	.LC10
	.word	.LC2
	.word	.LC8
	.word	.LC6
	.word	.LC5
	.word	.LC9
	.size	ao_play_data, .-ao_play_data
	.comm	AOPLAY_FINAL_CHUNK,4,4
	.ident	"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
	.section	.note.GNU-stack,"",%progbits
