我正在尝试使用针对 iOS 的 ARM NEON 优化来编译 Opus 1.1-rc2。
这是我正在使用的配置:
export CC="xcrun -sdk iphoneos clang -arch armv7"
export CCAS="xcrun -sdk iphoneos clang -arch armv7 -no-integrated-as"
./configure --enable-fixed-point \
--disable-doc \
--disable-extra-programs \
--with-sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk \
--host=arm-apple-darwin
如果我使用--disable-asm
,一切都编译得很好 :) 但我确实想要 ARM NEON 优化,所以我不想设置标志。麻烦来了:
没有-no-integrated-as
,我得到:
libtool: compile: xcrun -sdk iphoneos clang -arch armv7 -DHAVE_CONFIG_H -I. -I../../../opus-1.1-rc -I../../../opus-1.1-rc/include -I../../../opus-1.1-rc/celt -I../../../opus-1.1-rc/silk -I../../../opus-1.1-rc/silk/float -I../../../opus-1.1-rc/silk/fixed -g -O2 -MT celt/arm/celt_pitch_xcorr_arm-gnu.lo -MD -MP -MF celt/arm/.deps/celt_pitch_xcorr_arm-gnu.Tpo -c celt/arm/celt_pitch_xcorr_arm-gnu.S -fno-common -DPIC -o celt/arm/.libs/celt_pitch_xcorr_arm-gnu.o
celt/arm/celt_pitch_xcorr_arm-gnu.S:29:24: error: unknown directive
.text; .p2align 2; .arch armv7-a
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:30:4: error: unknown directive
.fpu neon
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:31:4: error: unknown directive
.object_arch armv4t
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:255:2: error: unknown directive
.type xcorr_kernel_neon, %function; xcorr_kernel_neon: @ PROC
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:316:2: error: unknown directive
.size xcorr_kernel_neon, .-xcorr_kernel_neon @ ENDP
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:318:2: error: unknown directive
.type celt_pitch_xcorr_neon, %function; celt_pitch_xcorr_neon: @ PROC
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:362:14: error: invalid variant ''
CMP r8, r4@
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:405:2: error: unknown directive
.size celt_pitch_xcorr_neon, .-celt_pitch_xcorr_neon @ ENDP
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:414:2: error: unknown directive
.type xcorr_kernel_edsp, %function; xcorr_kernel_edsp: @ PROC
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:466:3: error: invalid instruction
LDRGTH r14, [r4], #2 @ r14 = *x++
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:476:3: error: invalid instruction
LDRGTH r12, [r4], #2 @ r12 = *x++
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:484:3: error: invalid instruction
LDRGTH r14, [r4] @ r14 = *x
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:494:2: error: unknown directive
.size xcorr_kernel_edsp, .-xcorr_kernel_edsp @ ENDP
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:496:2: error: unknown directive
.type celt_pitch_xcorr_edsp, %function; celt_pitch_xcorr_edsp: @ PROC
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:577:3: error: invalid instruction
LDRGEH r6, [r4], #2
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:578:3: error: invalid instruction
LDRGEH r8, [r5], #2
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:596:2: error: unknown directive
.size celt_pitch_xcorr_edsp, .-celt_pitch_xcorr_edsp @ ENDP
^
celt/arm/celt_pitch_xcorr_arm-gnu.S:601:23: error: unexpected token in '.section' directive
.section .note.GNU-stack,"",%progbits
^
-no-integrated-as
,我得到:
libtool: compile: xcrun -sdk iphoneos clang -arch armv7 -no-integrated-as -DHAVE_CONFIG_H -I. -I../../../opus-1.1-rc -I../../../opus-1.1-rc/include -I../../../opus-1.1-rc/celt -I../../../opus-1.1-rc/silk -I../../../opus-1.1-rc/silk/float -I../../../opus-1.1-rc/silk/fixed -g -O2 -MT celt/arm/celt_pitch_xcorr_arm-gnu.lo -MD -MP -MF celt/arm/.deps/celt_pitch_xcorr_arm-gnu.Tpo -c celt/arm/celt_pitch_xcorr_arm-gnu.S -fno-common -DPIC -o celt/arm/.libs/celt_pitch_xcorr_arm-gnu.o
celt/arm/celt_pitch_xcorr_arm-gnu.S:29:Unknown pseudo-op: .arch
celt/arm/celt_pitch_xcorr_arm-gnu.S:29:Rest of line ignored. 1st junk character valued 97 (a).
celt/arm/celt_pitch_xcorr_arm-gnu.S:30:Unknown pseudo-op: .fpu
celt/arm/celt_pitch_xcorr_arm-gnu.S:30:Rest of line ignored. 1st junk character valued 110 (n).
celt/arm/celt_pitch_xcorr_arm-gnu.S:31:Unknown pseudo-op: .object_arch
celt/arm/celt_pitch_xcorr_arm-gnu.S:31:Rest of line ignored. 1st junk character valued 97 (a).
celt/arm/celt_pitch_xcorr_arm-gnu.S:36:Unknown pseudo-op: .global
celt/arm/celt_pitch_xcorr_arm-gnu.S:36:Rest of line ignored. 1st junk character valued 99 (c).
celt/arm/celt_pitch_xcorr_arm-gnu.S:40:Unknown pseudo-op: .global
celt/arm/celt_pitch_xcorr_arm-gnu.S:40:Rest of line ignored. 1st junk character valued 99 (c).
celt/arm/celt_pitch_xcorr_arm-gnu.S:255:Unknown pseudo-op: .type
celt/arm/celt_pitch_xcorr_arm-gnu.S:255:Rest of line ignored. 1st junk character valued 120 (x).
celt/arm/celt_pitch_xcorr_arm-gnu.S:273:bad instruction `VLD1.16 {d3},[r1]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:274:bad instruction `SUB r3,r2,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:275:bad instruction `MOVS r3,r3,lsr#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:276:bad instruction `BEQ xcorr_kernel_neon_process4_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:281:bad instruction `SUBS r3,r3,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:282:bad instruction `VLD1.16 d4,[r1]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:283:bad instruction `VLD1.16 d2,[r0]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:284:bad instruction `VEXT.16 d5,d3,d4,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:285:bad instruction `VEXT.16 d6,d3,d4,#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:286:bad instruction `VEXT.16 d7,d3,d4,#3'
celt/arm/celt_pitch_xcorr_arm-gnu.S:288:bad instruction `VMLAL.S16 q0,d3,d2[0]'
celt/arm/celt_pitch_xcorr_arm-gnu.S:289:bad instruction `VMLAL.S16 q0,d5,d2[1]'
celt/arm/celt_pitch_xcorr_arm-gnu.S:290:bad instruction `VMLAL.S16 q0,d6,d2[2]'
celt/arm/celt_pitch_xcorr_arm-gnu.S:291:bad instruction `VMLAL.S16 q0,d7,d2[3]'
celt/arm/celt_pitch_xcorr_arm-gnu.S:293:bad instruction `VMOV.S16 d3,d4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:295:bad instruction `BNE xcorr_kernel_neon_process4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:299:bad instruction `VLD1.16 {d2[]},[r0]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:301:bad instruction `SUB r3,r2,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:302:bad instruction `ANDS r3,r3,#3'
celt/arm/celt_pitch_xcorr_arm-gnu.S:303:bad instruction `VMLAL.S16 q0,d3,d2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:304:bad instruction `BEQ xcorr_kernel_neon_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:307:bad instruction `SUBS r3,r3,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:308:bad instruction `VLD1.16 {d4[]},[r1]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:309:bad instruction `VLD1.16 {d2[]},[r0]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:310:bad instruction `VEXT.16 d3,d3,d4,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:311:bad instruction `VMLAL.S16 q0,d3,d2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:312:bad instruction `BNE xcorr_kernel_neon_process_remaining'
celt/arm/celt_pitch_xcorr_arm-gnu.S:315:bad instruction `MOV pc,lr'
celt/arm/celt_pitch_xcorr_arm-gnu.S:316:Unknown pseudo-op: .size
celt/arm/celt_pitch_xcorr_arm-gnu.S:316:Rest of line ignored. 1st junk character valued 120 (x).
celt/arm/celt_pitch_xcorr_arm-gnu.S:318:Unknown pseudo-op: .type
celt/arm/celt_pitch_xcorr_arm-gnu.S:318:Rest of line ignored. 1st junk character valued 99 (c).
celt/arm/celt_pitch_xcorr_arm-gnu.S:328:bad instruction `STMFD sp!,{r4-r9,lr}'
celt/arm/celt_pitch_xcorr_arm-gnu.S:330:bad instruction `LDR r4,[sp,#28]'
celt/arm/celt_pitch_xcorr_arm-gnu.S:331:bad instruction `MOV r5,r0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:332:bad instruction `MOV r6,r1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:333:bad instruction `MOV r7,r2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:334:bad instruction `MOV r2,r3'
celt/arm/celt_pitch_xcorr_arm-gnu.S:336:bad instruction `VMOV.S32 d16,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:337:bad instruction `MOV r8,#0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:338:bad instruction `CMP r4,#3'
celt/arm/celt_pitch_xcorr_arm-gnu.S:339:bad instruction `BLE celt_pitch_xcorr_neon_process4_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:341:bad instruction `SUB r9,r4,#3'
celt/arm/celt_pitch_xcorr_arm-gnu.S:344:bad instruction `MOV r0,r5'
celt/arm/celt_pitch_xcorr_arm-gnu.S:345:bad instruction `ADD r1,r6,r8,LSL#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:346:bad instruction `VMOV.I32 q0,#0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:350:bad instruction `BL xcorr_kernel_neon'
celt/arm/celt_pitch_xcorr_arm-gnu.S:352:bad instruction `VST1.32 {q0},[r7]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:353:bad instruction `VPMAX.S32 d0,d0,d1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:354:bad instruction `ADD r8,r8,#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:355:bad instruction `VPMAX.S32 d0,d0,d0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:356:bad instruction `CMP r8,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:357:bad instruction `VMAX.S32 d16,d16,d0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:359:bad instruction `BLT celt_pitch_xcorr_neon_process4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:362:bad instruction `CMP r8,r4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:363:bad instruction `BGE celt_pitch_xcorr_neon_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:366:bad instruction `MOV r0,r5'
celt/arm/celt_pitch_xcorr_arm-gnu.S:367:bad instruction `ADD r1,r6,r8,LSL#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:368:bad instruction `VMOV.I32 q0,#0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:369:bad instruction `MOVS r3,r2,LSR#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:370:bad instruction `BEQ inner_loop_neon_process4_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:373:bad instruction `VLD1.16 {d2},[r0]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:374:bad instruction `VLD1.16 {d3},[r1]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:375:bad instruction `SUBS r3,r3,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:376:bad instruction `VMLAL.S16 q0,d2,d3'
celt/arm/celt_pitch_xcorr_arm-gnu.S:377:bad instruction `BNE inner_loop_neon_process4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:379:bad instruction `VPADD.S32 d0,d0,d1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:380:bad instruction `VPADD.S32 d0,d0,d0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:383:bad instruction `ANDS r3,r2,#3'
celt/arm/celt_pitch_xcorr_arm-gnu.S:384:bad instruction `BEQ inner_loop_neon_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:387:bad instruction `VLD1.16 {d2[]},[r0]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:388:bad instruction `VLD1.16 {d3[]},[r1]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:389:bad instruction `SUBS r3,r3,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:390:bad instruction `VMLAL.S16 q0,d2,d3'
celt/arm/celt_pitch_xcorr_arm-gnu.S:391:bad instruction `BNE inner_loop_neon_process_remaining'
celt/arm/celt_pitch_xcorr_arm-gnu.S:394:bad instruction `VST1.32 {d0[0]},[r7]!'
celt/arm/celt_pitch_xcorr_arm-gnu.S:395:bad instruction `VMAX.S32 d16,d16,d0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:397:bad instruction `ADD r8,r8,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:398:bad instruction `CMP r8,r4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:399:bad instruction `BCC celt_pitch_xcorr_neon_process_remaining'
celt/arm/celt_pitch_xcorr_arm-gnu.S:402:bad instruction `VMOV d0,d16'
celt/arm/celt_pitch_xcorr_arm-gnu.S:403:bad instruction `VMOV.32 r0,d0[0]'
celt/arm/celt_pitch_xcorr_arm-gnu.S:404:bad instruction `LDMFD sp!,{r4-r9,pc}'
celt/arm/celt_pitch_xcorr_arm-gnu.S:405:Unknown pseudo-op: .size
celt/arm/celt_pitch_xcorr_arm-gnu.S:405:Rest of line ignored. 1st junk character valued 99 (c).
celt/arm/celt_pitch_xcorr_arm-gnu.S:414:Unknown pseudo-op: .type
celt/arm/celt_pitch_xcorr_arm-gnu.S:414:Rest of line ignored. 1st junk character valued 120 (x).
celt/arm/celt_pitch_xcorr_arm-gnu.S:427:bad instruction `STMFD sp!,{r2,r4,r5,lr}'
celt/arm/celt_pitch_xcorr_arm-gnu.S:428:bad instruction `SUBS r2,r3,#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:429:bad instruction `LDRD r10,r11,[r5],#8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:430:bad instruction `BLE xcorr_kernel_edsp_process4_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:431:bad instruction `LDR r12,[r4],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:437:bad instruction `SMLABB r6,r12,r10,r6'
celt/arm/celt_pitch_xcorr_arm-gnu.S:438:bad instruction `LDR r14,[r4],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:439:bad instruction `SMLABT r7,r12,r10,r7'
celt/arm/celt_pitch_xcorr_arm-gnu.S:440:bad instruction `SUBS r2,r2,#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:441:bad instruction `SMLABB r8,r12,r11,r8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:442:bad instruction `SMLABT r9,r12,r11,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:443:bad instruction `SMLATT r6,r12,r10,r6'
celt/arm/celt_pitch_xcorr_arm-gnu.S:444:bad instruction `LDR r10,[r5],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:445:bad instruction `SMLATB r7,r12,r11,r7'
celt/arm/celt_pitch_xcorr_arm-gnu.S:446:bad instruction `SMLATT r8,r12,r11,r8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:447:bad instruction `SMLATB r9,r12,r10,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:448:bad instruction `LDRGT r12,[r4],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:449:bad instruction `SMLABB r6,r14,r11,r6'
celt/arm/celt_pitch_xcorr_arm-gnu.S:450:bad instruction `SMLABT r7,r14,r11,r7'
celt/arm/celt_pitch_xcorr_arm-gnu.S:451:bad instruction `SMLABB r8,r14,r10,r8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:452:bad instruction `SMLABT r9,r14,r10,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:453:bad instruction `SMLATT r6,r14,r11,r6'
celt/arm/celt_pitch_xcorr_arm-gnu.S:454:bad instruction `LDR r11,[r5],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:455:bad instruction `SMLATB r7,r14,r10,r7'
celt/arm/celt_pitch_xcorr_arm-gnu.S:456:bad instruction `SMLATT r8,r14,r10,r8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:457:bad instruction `SMLATB r9,r14,r11,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:458:bad instruction `BGT xcorr_kernel_edsp_process4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:460:bad instruction `ADDS r2,r2,#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:461:bad instruction `BLE xcorr_kernel_edsp_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:462:bad instruction `LDRH r12,[r4],#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:463:bad instruction `SUBS r2,r2,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:465:bad instruction `SMLABB r6,r12,r10,r6'
celt/arm/celt_pitch_xcorr_arm-gnu.S:466:bad instruction `LDRGTH r14,[r4],#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:467:bad instruction `SMLABT r7,r12,r10,r7'
celt/arm/celt_pitch_xcorr_arm-gnu.S:468:bad instruction `SMLABB r8,r12,r11,r8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:469:bad instruction `SMLABT r9,r12,r11,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:470:bad instruction `BLE xcorr_kernel_edsp_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:471:bad instruction `SMLABT r6,r14,r10,r6'
celt/arm/celt_pitch_xcorr_arm-gnu.S:472:bad instruction `SUBS r2,r2,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:473:bad instruction `SMLABB r7,r14,r11,r7'
celt/arm/celt_pitch_xcorr_arm-gnu.S:474:bad instruction `LDRH r10,[r5],#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:475:bad instruction `SMLABT r8,r14,r11,r8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:476:bad instruction `LDRGTH r12,[r4],#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:477:bad instruction `SMLABB r9,r14,r10,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:478:bad instruction `BLE xcorr_kernel_edsp_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:479:bad instruction `SMLABB r6,r12,r11,r6'
celt/arm/celt_pitch_xcorr_arm-gnu.S:480:bad instruction `CMP r2,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:481:bad instruction `SMLABT r7,r12,r11,r7'
celt/arm/celt_pitch_xcorr_arm-gnu.S:482:bad instruction `LDRH r2,[r5],#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:483:bad instruction `SMLABB r8,r12,r10,r8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:484:bad instruction `LDRGTH r14,[r4]'
celt/arm/celt_pitch_xcorr_arm-gnu.S:485:bad instruction `SMLABB r9,r12,r2,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:486:bad instruction `BLE xcorr_kernel_edsp_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:487:bad instruction `SMLABT r6,r14,r11,r6'
celt/arm/celt_pitch_xcorr_arm-gnu.S:488:bad instruction `LDRH r11,[r5]'
celt/arm/celt_pitch_xcorr_arm-gnu.S:489:bad instruction `SMLABB r7,r14,r10,r7'
celt/arm/celt_pitch_xcorr_arm-gnu.S:490:bad instruction `SMLABB r8,r14,r2,r8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:491:bad instruction `SMLABB r9,r14,r11,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:493:bad instruction `LDMFD sp!,{r2,r4,r5,pc}'
celt/arm/celt_pitch_xcorr_arm-gnu.S:494:Unknown pseudo-op: .size
celt/arm/celt_pitch_xcorr_arm-gnu.S:494:Rest of line ignored. 1st junk character valued 120 (x).
celt/arm/celt_pitch_xcorr_arm-gnu.S:496:Unknown pseudo-op: .type
celt/arm/celt_pitch_xcorr_arm-gnu.S:496:Rest of line ignored. 1st junk character valued 99 (c).
celt/arm/celt_pitch_xcorr_arm-gnu.S:513:bad instruction `STMFD sp!,{r4-r11,lr}'
celt/arm/celt_pitch_xcorr_arm-gnu.S:514:bad instruction `MOV r5,r1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:515:bad instruction `LDR r1,[sp,#36]'
celt/arm/celt_pitch_xcorr_arm-gnu.S:516:bad instruction `MOV r4,r0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:518:bad instruction `MOV r0,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:520:bad instruction `SUBS r1,r1,#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:521:bad instruction `BLT celt_pitch_xcorr_edsp_process4_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:525:bad instruction `MOV r6,#0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:526:bad instruction `MOV r7,#0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:527:bad instruction `MOV r8,#0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:528:bad instruction `MOV r9,#0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:529:bad instruction `BL xcorr_kernel_edsp'
celt/arm/celt_pitch_xcorr_arm-gnu.S:531:bad instruction `CMP r0,r6'
celt/arm/celt_pitch_xcorr_arm-gnu.S:533:bad instruction `ADD r5,r5,#8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:534:bad instruction `MOVLT r0,r6'
celt/arm/celt_pitch_xcorr_arm-gnu.S:535:bad instruction `CMP r0,r7'
celt/arm/celt_pitch_xcorr_arm-gnu.S:536:bad instruction `STRD r6,r7,[r2],#8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:537:bad instruction `MOVLT r0,r7'
celt/arm/celt_pitch_xcorr_arm-gnu.S:538:bad instruction `CMP r0,r8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:539:bad instruction `STRD r8,r9,[r2],#8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:540:bad instruction `MOVLT r0,r8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:541:bad instruction `CMP r0,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:542:bad instruction `MOVLT r0,r9'
celt/arm/celt_pitch_xcorr_arm-gnu.S:543:bad instruction `SUBS r1,r1,#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:544:bad instruction `BGE celt_pitch_xcorr_edsp_process4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:546:bad instruction `ADDS r1,r1,#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:547:bad instruction `BLE celt_pitch_xcorr_edsp_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:550:bad instruction `SUBS r12,r3,#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:552:bad instruction `MOV r14,#0'
celt/arm/celt_pitch_xcorr_arm-gnu.S:553:bad instruction `BLT celt_pitch_xcorr_edsp_process_remaining_loop_done'
celt/arm/celt_pitch_xcorr_arm-gnu.S:554:bad instruction `LDRD r6,r7,[r4],#8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:555:bad instruction `LDRD r8,r9,[r5],#8'
celt/arm/celt_pitch_xcorr_arm-gnu.S:558:bad instruction `SMLABB r14,r6,r8,r14'
celt/arm/celt_pitch_xcorr_arm-gnu.S:559:bad instruction `SUBS r12,r12,#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:560:bad instruction `SMLATT r14,r6,r8,r14'
celt/arm/celt_pitch_xcorr_arm-gnu.S:561:bad instruction `LDRGE r6,[r4],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:562:bad instruction `SMLABB r14,r7,r9,r14'
celt/arm/celt_pitch_xcorr_arm-gnu.S:563:bad instruction `LDRGE r8,[r5],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:564:bad instruction `SMLATT r14,r7,r9,r14'
celt/arm/celt_pitch_xcorr_arm-gnu.S:565:bad instruction `LDRGE r7,[r4],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:566:bad instruction `LDRGE r9,[r5],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:567:bad instruction `BGE celt_pitch_xcorr_edsp_process_remaining_loop4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:569:bad instruction `ADDS r12,r12,#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:570:bad instruction `LDRGE r6,[r4],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:571:bad instruction `LDRGE r8,[r5],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:573:bad instruction `SMLABBGE r14,r6,r8,r14'
celt/arm/celt_pitch_xcorr_arm-gnu.S:574:bad instruction `SUBGE r12,r12,#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:575:bad instruction `SMLATTGE r14,r6,r8,r14'
celt/arm/celt_pitch_xcorr_arm-gnu.S:576:bad instruction `ADDS r12,r12,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:577:bad instruction `LDRGEH r6,[r4],#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:578:bad instruction `LDRGEH r8,[r5],#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:580:bad instruction `SUB r4,r4,r3,LSL#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:582:bad instruction `SMLABBGE r14,r6,r8,r14'
celt/arm/celt_pitch_xcorr_arm-gnu.S:584:bad instruction `SUB r5,r5,r3,LSL#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:587:bad instruction `CMP r0,r14'
celt/arm/celt_pitch_xcorr_arm-gnu.S:588:bad instruction `ADD r5,r5,#2'
celt/arm/celt_pitch_xcorr_arm-gnu.S:589:bad instruction `MOVLT r0,r14'
celt/arm/celt_pitch_xcorr_arm-gnu.S:590:bad instruction `SUBS r1,r1,#1'
celt/arm/celt_pitch_xcorr_arm-gnu.S:592:bad instruction `STR r14,[r2],#4'
celt/arm/celt_pitch_xcorr_arm-gnu.S:593:bad instruction `BGT celt_pitch_xcorr_edsp_process_remaining'
celt/arm/celt_pitch_xcorr_arm-gnu.S:595:bad instruction `LDMFD sp!,{r4-r11,pc}'
celt/arm/celt_pitch_xcorr_arm-gnu.S:596:Unknown pseudo-op: .size
celt/arm/celt_pitch_xcorr_arm-gnu.S:596:Rest of line ignored. 1st junk character valued 99 (c).
celt/arm/celt_pitch_xcorr_arm-gnu.S:601:unknown section type: %progbits
clang: error: assembler command failed with exit code 1 (use -v to see invocation)
那么我应该怎么做才能为 iOS 编译带有 ASM NEON 优化的 Opus 呢?
(顺便说一句,使用 ASM Neon optims 为 Android 编译 Opus 非常简单直接)