	.section	__TEXT,__text,regular,pure_instructions
	.build_version macos, 13, 0	sdk_version 13, 3
	.globl	_iforce_init_device             ## -- Begin function iforce_init_device
	.p2align	4, 0x90
_iforce_init_device:                    ## @iforce_init_device
	.cfi_startproc
## %bb.0:
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register %rbp
	pushq	%r15
	pushq	%r14
	pushq	%r13
	pushq	%r12
	pushq	%rbx
	subq	$40, %rsp
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	movq	%rdx, %r13
	movl	%esi, %r15d
	movq	%rdi, -64(%rbp)                 ## 8-byte Spill
	movq	___stack_chk_guard@GOTPCREL(%rip), %rax
	movq	(%rax), %rax
	movq	%rax, -48(%rbp)
	movq	_IFORCE_MAX_LENGTH@GOTPCREL(%rip), %rax
	movl	(%rax), %eax
	callq	____chkstk_darwin
	addq	$15, %rax
	andq	$-16, %rax
	subq	%rax, %rsp
	movq	%rsp, %r12
	xorl	%ebx, %ebx
	xorl	%eax, %eax
	callq	_input_allocate_device
	testq	%rax, %rax
	je	LBB0_1
## %bb.2:
	movq	%rax, %r14
	leaq	88(%r13), %rdi
	callq	_init_waitqueue_head
	leaq	84(%r13), %rdi
	callq	_spin_lock_init
	leaq	80(%r13), %rdi
	callq	_mutex_init
	movl	72(%r13), %eax
	movl	%eax, 76(%r13)
	movq	%r14, (%r13)
	movl	%r15d, 48(%r14)
	movq	%r14, %rax
	addq	$56, %rax
	movq	%rax, -72(%rbp)                 ## 8-byte Spill
	movq	-64(%rbp), %rax                 ## 8-byte Reload
	movq	%rax, 56(%r14)
	movq	%r14, %rdi
	movq	%r13, %rsi
	callq	_input_set_drvdata
	leaq	L_.str(%rip), %rax
	movq	%rax, (%r14)
	movq	_iforce_open@GOTPCREL(%rip), %rax
	movl	(%rax), %eax
	movl	%eax, 68(%r14)
	movq	_iforce_close@GOTPCREL(%rip), %rax
	movl	(%rax), %eax
	movl	%eax, 64(%r14)
	leaq	L_.str.1(%rip), %rax
	movq	%rax, 16(%r13)
	movq	$0, 64(%r13)
	movl	$200, 24(%r13)
	movq	_IORESOURCE_MEM@GOTPCREL(%rip), %rax
	movl	(%rax), %eax
	movl	%eax, 56(%r13)
	xorps	%xmm0, %xmm0
	movups	%xmm0, 32(%r13)
	movq	$0, 48(%r13)
	movl	$20, %r15d
	leaq	-56(%rbp), %rbx
	.p2align	4, 0x90
LBB0_3:                                 ## =>This Inner Loop Header: Depth=1
	movq	%r13, %rdi
	movl	$79, %esi
	movq	%r12, %rdx
	movq	%rbx, %rcx
	callq	_iforce_get_id_packet
	testl	%eax, %eax
	je	LBB0_7
## %bb.4:                               ##   in Loop: Header=BB0_3 Depth=1
	decl	%r15d
	jne	LBB0_3
## %bb.5:
	leaq	L_.str.2(%rip), %rsi
	movq	-72(%rbp), %rdi                 ## 8-byte Reload
	callq	_dev_err
	movq	_ENODEV@GOTPCREL(%rip), %rax
	xorl	%ebx, %ebx
	subl	(%rax), %ebx
	jmp	LBB0_6
LBB0_1:
	movq	_ENOMEM@GOTPCREL(%rip), %rax
	subl	(%rax), %ebx
	jmp	LBB0_60
LBB0_7:
	leaq	-56(%rbp), %rcx
	movq	%r13, %rdi
	movl	$77, %esi
	movq	%r12, %rdx
	callq	_iforce_get_id_packet
	testl	%eax, %eax
	je	LBB0_9
## %bb.8:
	cmpq	$2, -56(%rbp)
	jbe	LBB0_9
## %bb.10:
	movq	(%r13), %rdi
	addq	$56, %rdi
	leaq	L_.str.3(%rip), %rsi
	xorl	%eax, %eax
	callq	_dev_warn
	jmp	LBB0_11
LBB0_9:
	leaq	1(%r12), %rdi
	callq	_get_unaligned_le16
	movq	%rax, 32(%r14)
LBB0_11:
	leaq	-56(%rbp), %rcx
	movq	%r13, %rdi
	movl	$80, %esi
	movq	%r12, %rdx
	callq	_iforce_get_id_packet
	testl	%eax, %eax
	je	LBB0_13
## %bb.12:
	cmpq	$2, -56(%rbp)
	jbe	LBB0_13
## %bb.14:
	movq	(%r13), %rdi
	addq	$56, %rdi
	leaq	L_.str.4(%rip), %rsi
	xorl	%eax, %eax
	callq	_dev_warn
	jmp	LBB0_15
LBB0_13:
	leaq	1(%r12), %rdi
	callq	_get_unaligned_le16
	movq	%rax, 40(%r14)
LBB0_15:
	leaq	-56(%rbp), %rcx
	movq	%r13, %rdi
	movl	$66, %esi
	movq	%r12, %rdx
	callq	_iforce_get_id_packet
	testl	%eax, %eax
	je	LBB0_17
## %bb.16:
	cmpq	$2, -56(%rbp)
	jbe	LBB0_17
## %bb.18:
	movq	(%r13), %rdi
	addq	$56, %rdi
	leaq	L_.str.5(%rip), %rsi
	xorl	%eax, %eax
	callq	_dev_warn
	jmp	LBB0_19
LBB0_17:
	movq	%r12, %rdi
	incq	%rdi
	callq	_get_unaligned_le16
	movl	%eax, 24(%r13)
LBB0_19:
	leaq	-56(%rbp), %rcx
	movq	%r13, %rdi
	movl	$78, %esi
	movq	%r12, %rdx
	callq	_iforce_get_id_packet
	testl	%eax, %eax
	je	LBB0_21
## %bb.20:
	cmpq	$1, -56(%rbp)
	jbe	LBB0_21
## %bb.22:
	movq	(%r13), %rdi
	addq	$56, %rdi
	leaq	L_.str.6(%rip), %rsi
	xorl	%r15d, %r15d
	xorl	%eax, %eax
	callq	_dev_warn
	jmp	LBB0_23
LBB0_21:
	movsbl	1(%r12), %r15d
LBB0_23:
	movq	_IFORCE_EFFECTS_MAX@GOTPCREL(%rip), %rbx
	movl	(%rbx), %edx
	cmpl	%edx, %r15d
	jle	LBB0_25
## %bb.24:
	movq	(%r13), %rdi
	addq	$56, %rdi
	leaq	L_.str.7(%rip), %rsi
	movl	%r15d, %ecx
	xorl	%eax, %eax
	callq	_dev_warn
	movl	(%rbx), %r15d
LBB0_25:
	leaq	-56(%rbp), %rcx
	movq	%r13, %rdi
	movl	$67, %esi
	movq	%r12, %rdx
	callq	_iforce_get_id_packet
	testl	%eax, %eax
	jne	LBB0_27
## %bb.26:
	movq	_FF_CMD_QUERY@GOTPCREL(%rip), %rax
	movzbl	1(%rax), %edx
	shll	$8, %edx
	orl	-56(%rbp), %edx
	leaq	L_.str.8(%rip), %rsi
	movq	%r13, %rdi
	movq	%r12, %rcx
	callq	_iforce_dump_packet
LBB0_27:
	leaq	-56(%rbp), %rcx
	movq	%r13, %rdi
	movl	$69, %esi
	movq	%r12, %rdx
	callq	_iforce_get_id_packet
	testl	%eax, %eax
	jne	LBB0_29
## %bb.28:
	movq	_FF_CMD_QUERY@GOTPCREL(%rip), %rax
	movzbl	1(%rax), %edx
	shll	$8, %edx
	orl	-56(%rbp), %edx
	leaq	L_.str.8(%rip), %rsi
	movq	%r13, %rdi
	movq	%r12, %rcx
	callq	_iforce_dump_packet
LBB0_29:
	leaq	-56(%rbp), %rcx
	movq	%r13, %rdi
	movl	$79, %esi
	movq	%r12, %rdx
	callq	_iforce_get_id_packet
	testl	%eax, %eax
	jne	LBB0_31
## %bb.30:
	movq	_FF_CMD_QUERY@GOTPCREL(%rip), %rax
	movzbl	1(%rax), %edx
	shll	$8, %edx
	orl	-56(%rbp), %edx
	leaq	L_.str.8(%rip), %rsi
	movq	%r13, %rdi
	movq	%r12, %rcx
	callq	_iforce_dump_packet
LBB0_31:
	leaq	-56(%rbp), %rcx
	movq	%r13, %rdi
	movl	$86, %esi
	movq	%r12, %rdx
	callq	_iforce_get_id_packet
	testl	%eax, %eax
	jne	LBB0_33
## %bb.32:
	movq	_FF_CMD_QUERY@GOTPCREL(%rip), %rax
	movzbl	1(%rax), %edx
	shll	$8, %edx
	orl	-56(%rbp), %edx
	leaq	L_.str.8(%rip), %rsi
	movq	%r13, %rdi
	movq	%r12, %rcx
	callq	_iforce_dump_packet
LBB0_33:
	xorl	%ebx, %ebx
	movq	%r14, %rdi
	xorl	%esi, %esi
	callq	_iforce_set_autocenter
	movq	_iforce_device@GOTPCREL(%rip), %rax
	movq	(%rax), %rax
	movq	(%rax), %rdi
	testq	%rdi, %rdi
	movl	%r15d, -64(%rbp)                ## 4-byte Spill
	je	LBB0_39
## %bb.34:
	movq	32(%r14), %rdx
	leaq	48(%rax), %rsi
	xorl	%ecx, %ecx
	jmp	LBB0_35
	.p2align	4, 0x90
LBB0_37:                                ##   in Loop: Header=BB0_35 Depth=1
	incq	%rcx
	movq	(%rsi), %rdi
	addq	$48, %rsi
	testq	%rdi, %rdi
	je	LBB0_38
LBB0_35:                                ## =>This Inner Loop Header: Depth=1
	cmpq	%rdx, %rdi
	jne	LBB0_37
## %bb.36:                              ##   in Loop: Header=BB0_35 Depth=1
	movq	-40(%rsi), %rdi
	cmpq	40(%r14), %rdi
	jne	LBB0_37
LBB0_38:
	movl	%ecx, %ebx
LBB0_39:
	leaq	(%rbx,%rbx,2), %rcx
	shlq	$4, %rcx
	leaq	(%rax,%rcx), %rdx
	movq	%rdx, 8(%r13)
	movq	16(%rax,%rcx), %rax
	movq	%rax, (%r14)
	movq	_EV_KEY@GOTPCREL(%rip), %rax
	movl	(%rax), %edi
	callq	_BIT_MASK
	movl	%eax, %r12d
	movq	_EV_ABS@GOTPCREL(%rip), %rax
	movl	(%rax), %edi
	callq	_BIT_MASK
	movl	%eax, %ebx
	orl	%r12d, %ebx
	movq	_EV_FF_STATUS@GOTPCREL(%rip), %rax
	movl	(%rax), %edi
	callq	_BIT_MASK
	orl	%ebx, %eax
	movq	8(%r14), %rcx
	movl	%eax, (%rcx)
	movq	8(%r13), %rcx
	movq	24(%rcx), %rax
	movq	(%rax), %rax
	testq	%rax, %rax
	js	LBB0_42
## %bb.40:
	movl	$8, %ebx
	.p2align	4, 0x90
LBB0_41:                                ## =>This Inner Loop Header: Depth=1
	movl	28(%r14), %esi
	movswl	%ax, %edi
	callq	_set_bit
	movq	8(%r13), %rcx
	movq	24(%rcx), %rax
	movq	(%rax,%rbx), %rax
	addq	$8, %rbx
	testq	%rax, %rax
	jns	LBB0_41
LBB0_42:
	movq	32(%rcx), %rax
	movzwl	(%rax), %eax
	testw	%ax, %ax
	js	LBB0_52
## %bb.43:
	movl	$2, %ebx
	leaq	LJTI0_0(%rip), %r15
	jmp	LBB0_44
	.p2align	4, 0x90
LBB0_49:                                ##   in Loop: Header=BB0_44 Depth=1
	movswl	%ax, %esi
	movq	%r14, %rdi
	movl	$-1, %edx
	movl	$1, %ecx
LBB0_50:                                ##   in Loop: Header=BB0_44 Depth=1
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	_input_set_abs_params
LBB0_51:                                ##   in Loop: Header=BB0_44 Depth=1
	movq	8(%r13), %rcx
	movq	32(%rcx), %rax
	movzwl	(%rax,%rbx), %eax
	addq	$2, %rbx
	testw	%ax, %ax
	js	LBB0_52
LBB0_44:                                ## =>This Inner Loop Header: Depth=1
	leal	-128(%rax), %ecx
	cmpw	$10, %cx
	ja	LBB0_51
## %bb.45:                              ##   in Loop: Header=BB0_44 Depth=1
	movzwl	%cx, %ecx
	movslq	(%r15,%rcx,4), %rcx
	addq	%r15, %rcx
	jmpq	*%rcx
LBB0_46:                                ##   in Loop: Header=BB0_44 Depth=1
	movswl	%ax, %r12d
	movq	%r14, %rdi
	movl	%r12d, %esi
	movl	$-1920, %edx                    ## imm = 0xF880
	movl	$1920, %ecx                     ## imm = 0x780
	movl	$16, %r8d
	movl	$128, %r9d
	callq	_input_set_abs_params
	movl	24(%r14), %esi
	movl	%r12d, %edi
	callq	_set_bit
	jmp	LBB0_51
	.p2align	4, 0x90
LBB0_47:                                ##   in Loop: Header=BB0_44 Depth=1
	movswl	%ax, %esi
	movq	%r14, %rdi
	xorl	%edx, %edx
	movl	$255, %ecx
	jmp	LBB0_50
LBB0_48:                                ##   in Loop: Header=BB0_44 Depth=1
	movq	%r14, %rdi
	movl	$132, %esi
	movl	$-128, %edx
	movl	$127, %ecx
	jmp	LBB0_50
LBB0_52:
	movl	-64(%rbp), %r15d                ## 4-byte Reload
	testl	%r15d, %r15d
	je	LBB0_58
## %bb.53:
	movq	40(%rcx), %rax
	movq	(%rax), %rax
	testq	%rax, %rax
	js	LBB0_56
## %bb.54:
	movl	$8, %ebx
	.p2align	4, 0x90
LBB0_55:                                ## =>This Inner Loop Header: Depth=1
	movl	24(%r14), %esi
	movswl	%ax, %edi
	callq	_set_bit
	movq	8(%r13), %rax
	movq	40(%rax), %rax
	movq	(%rax,%rbx), %rax
	addq	$8, %rbx
	testq	%rax, %rax
	jns	LBB0_55
LBB0_56:
	movq	%r14, %rdi
	movl	%r15d, %esi
	callq	_input_ff_create
	movl	%eax, %ebx
	testl	%eax, %eax
	jne	LBB0_6
## %bb.57:
	movq	16(%r14), %rax
	movq	_iforce_upload_effect@GOTPCREL(%rip), %rcx
	movl	(%rcx), %ecx
	movl	%ecx, 24(%rax)
	movq	_iforce_erase_effect@GOTPCREL(%rip), %rcx
	movl	(%rcx), %ecx
	movl	%ecx, 20(%rax)
	movq	_iforce_set_gain@GOTPCREL(%rip), %rcx
	movl	(%rcx), %ecx
	movl	%ecx, 16(%rax)
	movq	_iforce_set_autocenter@GOTPCREL(%rip), %rcx
	movq	%rcx, 8(%rax)
	movq	_iforce_playback@GOTPCREL(%rip), %rcx
	movl	(%rcx), %ecx
	movl	%ecx, (%rax)
LBB0_58:
	movq	(%r13), %rdi
	callq	_input_register_device
	movl	%eax, %ebx
	testl	%eax, %eax
	je	LBB0_59
LBB0_6:
	movq	%r14, %rdi
	callq	_input_free_device
LBB0_60:
	movq	___stack_chk_guard@GOTPCREL(%rip), %rax
	movq	(%rax), %rax
	cmpq	-48(%rbp), %rax
	jne	LBB0_62
## %bb.61:
	movl	%ebx, %eax
	leaq	-40(%rbp), %rsp
	popq	%rbx
	popq	%r12
	popq	%r13
	popq	%r14
	popq	%r15
	popq	%rbp
	retq
LBB0_59:
	xorl	%ebx, %ebx
	jmp	LBB0_60
LBB0_62:
	callq	___stack_chk_fail
	.cfi_endproc
	.p2align	2, 0x90
	.data_region jt32
.set L0_0_set_46, LBB0_46-LJTI0_0
.set L0_0_set_47, LBB0_47-LJTI0_0
.set L0_0_set_48, LBB0_48-LJTI0_0
.set L0_0_set_49, LBB0_49-LJTI0_0
LJTI0_0:
	.long	L0_0_set_46
	.long	L0_0_set_46
	.long	L0_0_set_46
	.long	L0_0_set_47
	.long	L0_0_set_48
	.long	L0_0_set_49
	.long	L0_0_set_49
	.long	L0_0_set_49
	.long	L0_0_set_49
	.long	L0_0_set_47
	.long	L0_0_set_47
	.end_data_region
                                        ## -- End function
	.comm	_IFORCE_MAX_LENGTH,4,2          ## @IFORCE_MAX_LENGTH
	.comm	_ENOMEM,4,2                     ## @ENOMEM
	.section	__TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
	.asciz	"Unknown I-Force device"

	.comm	_iforce_open,4,2                ## @iforce_open
	.comm	_iforce_close,4,2               ## @iforce_close
L_.str.1:                               ## @.str.1
	.asciz	"I-Force device effect memory"

	.comm	_IORESOURCE_MEM,4,2             ## @IORESOURCE_MEM
L_.str.2:                               ## @.str.2
	.asciz	"Timeout waiting for response from device.\n"

	.comm	_ENODEV,4,2                     ## @ENODEV
L_.str.3:                               ## @.str.3
	.asciz	"Device does not respond to id packet M\n"

L_.str.4:                               ## @.str.4
	.asciz	"Device does not respond to id packet P\n"

L_.str.5:                               ## @.str.5
	.asciz	"Device does not respond to id packet B\n"

L_.str.6:                               ## @.str.6
	.asciz	"Device does not respond to id packet N\n"

	.comm	_IFORCE_EFFECTS_MAX,4,2         ## @IFORCE_EFFECTS_MAX
L_.str.7:                               ## @.str.7
	.asciz	"Limiting number of effects to %d (device reports %d)\n"

L_.str.8:                               ## @.str.8
	.asciz	"info"

	.comm	_FF_CMD_QUERY,4,2               ## @FF_CMD_QUERY
	.comm	_iforce_device,8,3              ## @iforce_device
	.comm	_EV_KEY,4,2                     ## @EV_KEY
	.comm	_EV_ABS,4,2                     ## @EV_ABS
	.comm	_EV_FF_STATUS,4,2               ## @EV_FF_STATUS
	.comm	_iforce_upload_effect,4,2       ## @iforce_upload_effect
	.comm	_iforce_erase_effect,4,2        ## @iforce_erase_effect
	.comm	_iforce_set_gain,4,2            ## @iforce_set_gain
	.comm	_iforce_playback,4,2            ## @iforce_playback
.subsections_via_symbols

	.section	__TEXT,__text,regular,pure_instructions
	.build_version macos, 13, 0	sdk_version 13, 3
	.globl	_iforce_init_device             ; -- Begin function iforce_init_device
	.p2align	2
_iforce_init_device:                    ; @iforce_init_device
	.cfi_startproc
; %bb.0:
	stp	x24, x23, [sp, #-64]!           ; 16-byte Folded Spill
	.cfi_def_cfa_offset 64
	stp	x22, x21, [sp, #16]             ; 16-byte Folded Spill
	stp	x20, x19, [sp, #32]             ; 16-byte Folded Spill
	stp	x29, x30, [sp, #48]             ; 16-byte Folded Spill
	add	x29, sp, #48
	.cfi_def_cfa w29, 16
	.cfi_offset w30, -8
	.cfi_offset w29, -16
	.cfi_offset w19, -24
	.cfi_offset w20, -32
	.cfi_offset w21, -40
	.cfi_offset w22, -48
	.cfi_offset w23, -56
	.cfi_offset w24, -64
	sub	sp, sp, #16
	mov	x20, x2
	mov	x21, x1
	mov	x23, x0
Lloh0:
	adrp	x8, ___stack_chk_guard@GOTPAGE
Lloh1:
	ldr	x8, [x8, ___stack_chk_guard@GOTPAGEOFF]
Lloh2:
	ldr	x8, [x8]
	stur	x8, [x29, #-56]
Lloh3:
	adrp	x8, _IFORCE_MAX_LENGTH@GOTPAGE
Lloh4:
	ldr	x8, [x8, _IFORCE_MAX_LENGTH@GOTPAGEOFF]
Lloh5:
	ldr	w8, [x8]
	mov	x9, x8
Lloh6:
	adrp	x16, ___chkstk_darwin@GOTPAGE
Lloh7:
	ldr	x16, [x16, ___chkstk_darwin@GOTPAGEOFF]
	blr	x16
	mov	x9, sp
	add	x8, x8, #15
	and	x8, x8, #0x1fffffff0
	sub	x22, x9, x8
	mov	sp, x22
	bl	_input_allocate_device
	cbz	x0, LBB0_5
; %bb.1:
	mov	x19, x0
	add	x0, x20, #88
	bl	_init_waitqueue_head
	add	x0, x20, #84
	bl	_spin_lock_init
	add	x0, x20, #80
	bl	_mutex_init
	ldr	w8, [x20, #72]
	str	w8, [x20, #76]
	str	x19, [x20]
	str	w21, [x19, #48]
	mov	x21, x19
	str	x23, [x21, #56]!
	mov	x0, x19
	mov	x1, x20
	bl	_input_set_drvdata
Lloh8:
	adrp	x8, l_.str@PAGE
Lloh9:
	add	x8, x8, l_.str@PAGEOFF
	str	x8, [x19]
Lloh10:
	adrp	x8, _iforce_open@GOTPAGE
Lloh11:
	ldr	x8, [x8, _iforce_open@GOTPAGEOFF]
Lloh12:
	adrp	x9, _iforce_close@GOTPAGE
Lloh13:
	ldr	x9, [x9, _iforce_close@GOTPAGEOFF]
Lloh14:
	ldr	w8, [x8]
Lloh15:
	ldr	w9, [x9]
	stp	w9, w8, [x19, #64]
Lloh16:
	adrp	x8, l_.str.1@PAGE
Lloh17:
	add	x8, x8, l_.str.1@PAGEOFF
	str	x8, [x20, #16]
	str	xzr, [x20, #64]
	mov	w8, #200
	str	w8, [x20, #24]
Lloh18:
	adrp	x8, _IORESOURCE_MEM@GOTPAGE
Lloh19:
	ldr	x8, [x8, _IORESOURCE_MEM@GOTPAGEOFF]
Lloh20:
	ldr	w8, [x8]
	str	w8, [x20, #56]
	stp	xzr, xzr, [x20, #40]
	str	xzr, [x20, #32]
	mov	w23, #20
LBB0_2:                                 ; =>This Inner Loop Header: Depth=1
	sub	x3, x29, #64
	mov	x0, x20
	mov	w1, #79
	mov	x2, x22
	bl	_iforce_get_id_packet
	cbz	w0, LBB0_6
; %bb.3:                                ;   in Loop: Header=BB0_2 Depth=1
	subs	w23, w23, #1
	b.ne	LBB0_2
; %bb.4:
Lloh21:
	adrp	x1, l_.str.2@PAGE
Lloh22:
	add	x1, x1, l_.str.2@PAGEOFF
	mov	x0, x21
	bl	_dev_err
Lloh23:
	adrp	x8, _ENODEV@GOTPAGE
Lloh24:
	ldr	x8, [x8, _ENODEV@GOTPAGEOFF]
Lloh25:
	ldr	w8, [x8]
	neg	w21, w8
	b	LBB0_59
LBB0_5:
Lloh26:
	adrp	x8, _ENOMEM@GOTPAGE
Lloh27:
	ldr	x8, [x8, _ENOMEM@GOTPAGEOFF]
Lloh28:
	ldr	w8, [x8]
	neg	w21, w8
	b	LBB0_60
LBB0_6:
	sub	x3, x29, #64
	mov	x0, x20
	mov	w1, #77
	mov	x2, x22
	bl	_iforce_get_id_packet
	cbz	w0, LBB0_9
; %bb.7:
	ldur	x8, [x29, #-64]
	cmp	x8, #2
	b.ls	LBB0_9
; %bb.8:
	ldr	x8, [x20]
	add	x0, x8, #56
Lloh29:
	adrp	x1, l_.str.3@PAGE
Lloh30:
	add	x1, x1, l_.str.3@PAGEOFF
	bl	_dev_warn
	b	LBB0_10
LBB0_9:
	add	x0, x22, #1
	bl	_get_unaligned_le16
	str	x0, [x19, #32]
LBB0_10:
	sub	x3, x29, #64
	mov	x0, x20
	mov	w1, #80
	mov	x2, x22
	bl	_iforce_get_id_packet
	cbz	w0, LBB0_13
; %bb.11:
	ldur	x8, [x29, #-64]
	cmp	x8, #2
	b.ls	LBB0_13
; %bb.12:
	ldr	x8, [x20]
	add	x0, x8, #56
Lloh31:
	adrp	x1, l_.str.4@PAGE
Lloh32:
	add	x1, x1, l_.str.4@PAGEOFF
	bl	_dev_warn
	b	LBB0_14
LBB0_13:
	add	x0, x22, #1
	bl	_get_unaligned_le16
	str	x0, [x19, #40]
LBB0_14:
	sub	x3, x29, #64
	mov	x0, x20
	mov	w1, #66
	mov	x2, x22
	bl	_iforce_get_id_packet
	cbz	w0, LBB0_17
; %bb.15:
	ldur	x8, [x29, #-64]
	cmp	x8, #2
	b.ls	LBB0_17
; %bb.16:
	ldr	x8, [x20]
	add	x0, x8, #56
Lloh33:
	adrp	x1, l_.str.5@PAGE
Lloh34:
	add	x1, x1, l_.str.5@PAGEOFF
	bl	_dev_warn
	b	LBB0_18
LBB0_17:
	add	x0, x22, #1
	bl	_get_unaligned_le16
	str	w0, [x20, #24]
LBB0_18:
	sub	x3, x29, #64
	mov	x0, x20
	mov	w1, #78
	mov	x2, x22
	bl	_iforce_get_id_packet
	cbz	w0, LBB0_21
; %bb.19:
	ldur	x8, [x29, #-64]
	cmp	x8, #1
	b.ls	LBB0_21
; %bb.20:
	ldr	x8, [x20]
	add	x0, x8, #56
Lloh35:
	adrp	x1, l_.str.6@PAGE
Lloh36:
	add	x1, x1, l_.str.6@PAGEOFF
	bl	_dev_warn
	mov	w21, #0
	b	LBB0_22
LBB0_21:
	ldrsb	w21, [x22, #1]
LBB0_22:
Lloh37:
	adrp	x23, _IFORCE_EFFECTS_MAX@GOTPAGE
Lloh38:
	ldr	x23, [x23, _IFORCE_EFFECTS_MAX@GOTPAGEOFF]
	ldr	w8, [x23]
	cmp	w21, w8
	b.le	LBB0_24
; %bb.23:
	ldr	x9, [x20]
	add	x0, x9, #56
	stp	x8, x21, [sp, #-16]!
Lloh39:
	adrp	x1, l_.str.7@PAGE
Lloh40:
	add	x1, x1, l_.str.7@PAGEOFF
	bl	_dev_warn
	add	sp, sp, #16
	ldr	w21, [x23]
LBB0_24:
	sub	x3, x29, #64
	mov	x0, x20
	mov	w1, #67
	mov	x2, x22
	bl	_iforce_get_id_packet
	cbnz	w0, LBB0_26
; %bb.25:
Lloh41:
	adrp	x8, _FF_CMD_QUERY@GOTPAGE
Lloh42:
	ldr	x8, [x8, _FF_CMD_QUERY@GOTPAGEOFF]
	ldrb	w8, [x8, #1]
	ldur	w9, [x29, #-64]
	orr	w2, w9, w8, lsl #8
Lloh43:
	adrp	x1, l_.str.8@PAGE
Lloh44:
	add	x1, x1, l_.str.8@PAGEOFF
	mov	x0, x20
	mov	x3, x22
	bl	_iforce_dump_packet
LBB0_26:
	sub	x3, x29, #64
	mov	x0, x20
	mov	w1, #69
	mov	x2, x22
	bl	_iforce_get_id_packet
	cbnz	w0, LBB0_28
; %bb.27:
Lloh45:
	adrp	x8, _FF_CMD_QUERY@GOTPAGE
Lloh46:
	ldr	x8, [x8, _FF_CMD_QUERY@GOTPAGEOFF]
	ldrb	w8, [x8, #1]
	ldur	w9, [x29, #-64]
	orr	w2, w9, w8, lsl #8
Lloh47:
	adrp	x1, l_.str.8@PAGE
Lloh48:
	add	x1, x1, l_.str.8@PAGEOFF
	mov	x0, x20
	mov	x3, x22
	bl	_iforce_dump_packet
LBB0_28:
	sub	x3, x29, #64
	mov	x0, x20
	mov	w1, #79
	mov	x2, x22
	bl	_iforce_get_id_packet
	cbnz	w0, LBB0_30
; %bb.29:
Lloh49:
	adrp	x8, _FF_CMD_QUERY@GOTPAGE
Lloh50:
	ldr	x8, [x8, _FF_CMD_QUERY@GOTPAGEOFF]
	ldrb	w8, [x8, #1]
	ldur	w9, [x29, #-64]
	orr	w2, w9, w8, lsl #8
Lloh51:
	adrp	x1, l_.str.8@PAGE
Lloh52:
	add	x1, x1, l_.str.8@PAGEOFF
	mov	x0, x20
	mov	x3, x22
	bl	_iforce_dump_packet
LBB0_30:
	sub	x3, x29, #64
	mov	x0, x20
	mov	w1, #86
	mov	x2, x22
	bl	_iforce_get_id_packet
	cbnz	w0, LBB0_32
; %bb.31:
Lloh53:
	adrp	x8, _FF_CMD_QUERY@GOTPAGE
Lloh54:
	ldr	x8, [x8, _FF_CMD_QUERY@GOTPAGEOFF]
	ldrb	w8, [x8, #1]
	ldur	w9, [x29, #-64]
	orr	w2, w9, w8, lsl #8
Lloh55:
	adrp	x1, l_.str.8@PAGE
Lloh56:
	add	x1, x1, l_.str.8@PAGEOFF
	mov	x0, x20
	mov	x3, x22
	bl	_iforce_dump_packet
LBB0_32:
	mov	x0, x19
	mov	w1, #0
	bl	_iforce_set_autocenter
Lloh57:
	adrp	x8, _iforce_device@GOTPAGE
Lloh58:
	ldr	x8, [x8, _iforce_device@GOTPAGEOFF]
Lloh59:
	ldr	x8, [x8]
	ldr	x12, [x8]
	cbz	x12, LBB0_38
; %bb.33:
	mov	x9, #0
	ldr	x10, [x19, #32]
	add	x11, x8, #48
	b	LBB0_35
LBB0_34:                                ;   in Loop: Header=BB0_35 Depth=1
	add	x9, x9, #1
	ldr	x12, [x11], #48
	cbz	x12, LBB0_37
LBB0_35:                                ; =>This Inner Loop Header: Depth=1
	cmp	x12, x10
	b.ne	LBB0_34
; %bb.36:                               ;   in Loop: Header=BB0_35 Depth=1
	ldur	x12, [x11, #-40]
	ldr	x13, [x19, #40]
	cmp	x12, x13
	b.ne	LBB0_34
LBB0_37:
	and	x9, x9, #0xffffffff
	b	LBB0_39
LBB0_38:
	mov	x9, #0
LBB0_39:
	mov	w10, #48
	madd	x8, x9, x10, x8
	str	x8, [x20, #8]
	ldr	x8, [x8, #16]
	str	x8, [x19]
Lloh60:
	adrp	x8, _EV_KEY@GOTPAGE
Lloh61:
	ldr	x8, [x8, _EV_KEY@GOTPAGEOFF]
Lloh62:
	ldr	w0, [x8]
	bl	_BIT_MASK
	mov	x22, x0
Lloh63:
	adrp	x8, _EV_ABS@GOTPAGE
Lloh64:
	ldr	x8, [x8, _EV_ABS@GOTPAGEOFF]
Lloh65:
	ldr	w0, [x8]
	bl	_BIT_MASK
	orr	w22, w0, w22
Lloh66:
	adrp	x8, _EV_FF_STATUS@GOTPAGE
Lloh67:
	ldr	x8, [x8, _EV_FF_STATUS@GOTPAGEOFF]
Lloh68:
	ldr	w0, [x8]
	bl	_BIT_MASK
	orr	w8, w22, w0
	ldr	x9, [x19, #8]
	str	w8, [x9]
	ldr	x9, [x20, #8]
	ldr	x8, [x9, #24]
	ldr	x8, [x8]
	tbnz	x8, #63, LBB0_42
; %bb.40:
	mov	w22, #8
LBB0_41:                                ; =>This Inner Loop Header: Depth=1
	ldr	w1, [x19, #28]
	sxth	w0, w8
	bl	_set_bit
	ldr	x9, [x20, #8]
	ldr	x8, [x9, #24]
	ldr	x8, [x8, x22]
	add	x22, x22, #8
	tbz	x8, #63, LBB0_41
LBB0_42:
	ldr	x8, [x9, #32]
	ldrsh	w8, [x8]
	tbnz	w8, #31, LBB0_52
; %bb.43:
	mov	w23, #2
Lloh69:
	adrp	x24, lJTI0_0@PAGE
Lloh70:
	add	x24, x24, lJTI0_0@PAGEOFF
	b	LBB0_47
LBB0_44:                                ;   in Loop: Header=BB0_47 Depth=1
	sxth	w1, w8
	mov	x0, x19
	mov	w2, #-1
	mov	w3, #1
LBB0_45:                                ;   in Loop: Header=BB0_47 Depth=1
	mov	w4, #0
	mov	w5, #0
	bl	_input_set_abs_params
LBB0_46:                                ;   in Loop: Header=BB0_47 Depth=1
	ldr	x9, [x20, #8]
	ldr	x8, [x9, #32]
	ldrsh	w8, [x8, x23]
	add	x23, x23, #2
	tbnz	w8, #31, LBB0_52
LBB0_47:                                ; =>This Inner Loop Header: Depth=1
	and	w9, w8, #0xffff
	sub	w9, w9, #128
	cmp	w9, #10
	b.hi	LBB0_46
; %bb.48:                               ;   in Loop: Header=BB0_47 Depth=1
	adr	x10, LBB0_44
	ldrb	w11, [x24, x9]
	add	x10, x10, x11, lsl #2
	br	x10
LBB0_49:                                ;   in Loop: Header=BB0_47 Depth=1
	sxth	w22, w8
	mov	x0, x19
	mov	x1, x22
	mov	w2, #-1920
	mov	w3, #1920
	mov	w4, #16
	mov	w5, #128
	bl	_input_set_abs_params
	ldr	w1, [x19, #24]
	mov	x0, x22
	bl	_set_bit
	b	LBB0_46
LBB0_50:                                ;   in Loop: Header=BB0_47 Depth=1
	sxth	w1, w8
	mov	x0, x19
	mov	w2, #0
	mov	w3, #255
	b	LBB0_45
LBB0_51:                                ;   in Loop: Header=BB0_47 Depth=1
	mov	x0, x19
	mov	w1, #132
	mov	w2, #-128
	mov	w3, #127
	b	LBB0_45
LBB0_52:
	cbz	w21, LBB0_58
; %bb.53:
	ldr	x8, [x9, #40]
	ldr	x8, [x8]
	tbnz	x8, #63, LBB0_56
; %bb.54:
	mov	w22, #8
LBB0_55:                                ; =>This Inner Loop Header: Depth=1
	ldr	w1, [x19, #24]
	sxth	w0, w8
	bl	_set_bit
	ldr	x8, [x20, #8]
	ldr	x8, [x8, #40]
	ldr	x8, [x8, x22]
	add	x22, x22, #8
	tbz	x8, #63, LBB0_55
LBB0_56:
	mov	x0, x19
	mov	x1, x21
	bl	_input_ff_create
	mov	x21, x0
	cbnz	w0, LBB0_59
; %bb.57:
Lloh71:
	adrp	x8, _iforce_upload_effect@GOTPAGE
Lloh72:
	ldr	x8, [x8, _iforce_upload_effect@GOTPAGEOFF]
	ldr	x9, [x19, #16]
Lloh73:
	ldr	w8, [x8]
	str	w8, [x9, #24]
Lloh74:
	adrp	x8, _iforce_erase_effect@GOTPAGE
Lloh75:
	ldr	x8, [x8, _iforce_erase_effect@GOTPAGEOFF]
Lloh76:
	ldr	w8, [x8]
Lloh77:
	adrp	x10, _iforce_set_gain@GOTPAGE
Lloh78:
	ldr	x10, [x10, _iforce_set_gain@GOTPAGEOFF]
Lloh79:
	ldr	w10, [x10]
Lloh80:
	adrp	x11, _iforce_set_autocenter@GOTPAGE
Lloh81:
	ldr	x11, [x11, _iforce_set_autocenter@GOTPAGEOFF]
	stp	w10, w8, [x9, #16]
	str	x11, [x9, #8]
Lloh82:
	adrp	x8, _iforce_playback@GOTPAGE
Lloh83:
	ldr	x8, [x8, _iforce_playback@GOTPAGEOFF]
Lloh84:
	ldr	w8, [x8]
	str	w8, [x9]
LBB0_58:
	ldr	x0, [x20]
	bl	_input_register_device
	mov	x21, x0
	cbz	w0, LBB0_60
LBB0_59:
	mov	x0, x19
	bl	_input_free_device
LBB0_60:
	ldur	x8, [x29, #-56]
Lloh85:
	adrp	x9, ___stack_chk_guard@GOTPAGE
Lloh86:
	ldr	x9, [x9, ___stack_chk_guard@GOTPAGEOFF]
Lloh87:
	ldr	x9, [x9]
	cmp	x9, x8
	b.ne	LBB0_62
; %bb.61:
	mov	x0, x21
	sub	sp, x29, #48
	ldp	x29, x30, [sp, #48]             ; 16-byte Folded Reload
	ldp	x20, x19, [sp, #32]             ; 16-byte Folded Reload
	ldp	x22, x21, [sp, #16]             ; 16-byte Folded Reload
	ldp	x24, x23, [sp], #64             ; 16-byte Folded Reload
	ret
LBB0_62:
	bl	___stack_chk_fail
	.loh AdrpLdrGot	Lloh6, Lloh7
	.loh AdrpLdrGotLdr	Lloh3, Lloh4, Lloh5
	.loh AdrpLdrGotLdr	Lloh0, Lloh1, Lloh2
	.loh AdrpLdrGotLdr	Lloh18, Lloh19, Lloh20
	.loh AdrpAdd	Lloh16, Lloh17
	.loh AdrpLdrGotLdr	Lloh12, Lloh13, Lloh15
	.loh AdrpLdrGotLdr	Lloh10, Lloh11, Lloh14
	.loh AdrpAdd	Lloh8, Lloh9
	.loh AdrpLdrGotLdr	Lloh23, Lloh24, Lloh25
	.loh AdrpAdd	Lloh21, Lloh22
	.loh AdrpLdrGotLdr	Lloh26, Lloh27, Lloh28
	.loh AdrpAdd	Lloh29, Lloh30
	.loh AdrpAdd	Lloh31, Lloh32
	.loh AdrpAdd	Lloh33, Lloh34
	.loh AdrpAdd	Lloh35, Lloh36
	.loh AdrpLdrGot	Lloh37, Lloh38
	.loh AdrpAdd	Lloh39, Lloh40
	.loh AdrpAdd	Lloh43, Lloh44
	.loh AdrpLdrGot	Lloh41, Lloh42
	.loh AdrpAdd	Lloh47, Lloh48
	.loh AdrpLdrGot	Lloh45, Lloh46
	.loh AdrpAdd	Lloh51, Lloh52
	.loh AdrpLdrGot	Lloh49, Lloh50
	.loh AdrpAdd	Lloh55, Lloh56
	.loh AdrpLdrGot	Lloh53, Lloh54
	.loh AdrpLdrGotLdr	Lloh57, Lloh58, Lloh59
	.loh AdrpLdrGotLdr	Lloh66, Lloh67, Lloh68
	.loh AdrpLdrGotLdr	Lloh63, Lloh64, Lloh65
	.loh AdrpLdrGotLdr	Lloh60, Lloh61, Lloh62
	.loh AdrpAdd	Lloh69, Lloh70
	.loh AdrpLdrGotLdr	Lloh82, Lloh83, Lloh84
	.loh AdrpLdrGot	Lloh80, Lloh81
	.loh AdrpLdrGotLdr	Lloh77, Lloh78, Lloh79
	.loh AdrpLdrGotLdr	Lloh74, Lloh75, Lloh76
	.loh AdrpLdrGotLdr	Lloh71, Lloh72, Lloh73
	.loh AdrpLdrGotLdr	Lloh85, Lloh86, Lloh87
	.cfi_endproc
	.section	__TEXT,__const
lJTI0_0:
	.byte	(LBB0_49-LBB0_44)>>2
	.byte	(LBB0_49-LBB0_44)>>2
	.byte	(LBB0_49-LBB0_44)>>2
	.byte	(LBB0_50-LBB0_44)>>2
	.byte	(LBB0_51-LBB0_44)>>2
	.byte	(LBB0_44-LBB0_44)>>2
	.byte	(LBB0_44-LBB0_44)>>2
	.byte	(LBB0_44-LBB0_44)>>2
	.byte	(LBB0_44-LBB0_44)>>2
	.byte	(LBB0_50-LBB0_44)>>2
	.byte	(LBB0_50-LBB0_44)>>2
                                        ; -- End function
	.comm	_IFORCE_MAX_LENGTH,4,2          ; @IFORCE_MAX_LENGTH
	.comm	_ENOMEM,4,2                     ; @ENOMEM
	.section	__TEXT,__cstring,cstring_literals
l_.str:                                 ; @.str
	.asciz	"Unknown I-Force device"

	.comm	_iforce_open,4,2                ; @iforce_open
	.comm	_iforce_close,4,2               ; @iforce_close
l_.str.1:                               ; @.str.1
	.asciz	"I-Force device effect memory"

	.comm	_IORESOURCE_MEM,4,2             ; @IORESOURCE_MEM
l_.str.2:                               ; @.str.2
	.asciz	"Timeout waiting for response from device.\n"

	.comm	_ENODEV,4,2                     ; @ENODEV
l_.str.3:                               ; @.str.3
	.asciz	"Device does not respond to id packet M\n"

l_.str.4:                               ; @.str.4
	.asciz	"Device does not respond to id packet P\n"

l_.str.5:                               ; @.str.5
	.asciz	"Device does not respond to id packet B\n"

l_.str.6:                               ; @.str.6
	.asciz	"Device does not respond to id packet N\n"

	.comm	_IFORCE_EFFECTS_MAX,4,2         ; @IFORCE_EFFECTS_MAX
l_.str.7:                               ; @.str.7
	.asciz	"Limiting number of effects to %d (device reports %d)\n"

l_.str.8:                               ; @.str.8
	.asciz	"info"

	.comm	_FF_CMD_QUERY,4,2               ; @FF_CMD_QUERY
	.comm	_iforce_device,8,3              ; @iforce_device
	.comm	_EV_KEY,4,2                     ; @EV_KEY
	.comm	_EV_ABS,4,2                     ; @EV_ABS
	.comm	_EV_FF_STATUS,4,2               ; @EV_FF_STATUS
	.comm	_iforce_upload_effect,4,2       ; @iforce_upload_effect
	.comm	_iforce_erase_effect,4,2        ; @iforce_erase_effect
	.comm	_iforce_set_gain,4,2            ; @iforce_set_gain
	.comm	_iforce_playback,4,2            ; @iforce_playback
.subsections_via_symbols
