문제

현재 Shark를 사용하여 일부 DSP 관련 코드를 최적화하려고 시도 중이며 부동 소수점을 정수로 변환하는 데 많은 시간을 낭비하고 있음을 발견했습니다.

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

iPhone에 ARM11 FP 보조 프로세서가 있는 것 같아서 코드를 FTOSI 명령어로 대체할 수 있는지 궁금합니다.일부가 있습니다 선적 서류 비치 ARM 웹사이트에서 구할 수 있지만 손으로 ​​최적화된 어셈블리를 인라인 처리한 경험이 없습니다.누군가 전에 그런 일을 한 적이 있나요?
코드를 인라인할 수 있을 것 같아요.

__asm__ volatile

하지만 지침이 사용 가능한지 어떻게 확인합니까?
내 가치를 어떻게 전달할 수 있나요?

편집1:Louis가 이미 지적했듯이 "Compile for Thumb"을 끈 상태에서 컴파일하고 있다는 사실을 언급하는 것을 잊어버렸습니다.

편집2:float를 unsigned Int가 아닌 signed Int16으로 변환하려고 하기 때문에 ARM 명령어를 FTOUI에서 FTOSI로 변경했습니다.원본글에 오류가 있었네요.

도움이 되었습니까?

해결책

당연한 질문일 수 있지만 ARM을 타겟으로 하고 있습니까?기본적으로 iPhone SDK는 소프트웨어 부동 소수점 모든 것(float/int 변환 포함)을 사용하는 THUMB용으로 모든 앱을 컴파일합니다.

어쨌든 장치에 VFP 보조 프로세서가 있으면 명령이 있습니다.FPSID 레지스터를 읽고 지원되는 모델인지 확인하여 적절한 보조 프로세서가 있는지 확인할 수 있습니다.

모든 iPhone이 이를 지원한다고 가정하는 것이 안전할 것 같습니다.무엇보다도 Apple의 어셈블러는 opcode를 지원하며 LLVM ARM 백엔드는 이를 유형 변환에 사용합니다. 이는 Apple이 결국 휴대폰에서 LLVM을 지원할 때 컴파일러가 FTOUI 명령어를 생성하게 된다는 의미입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top