문제

어떻게 이루어 집니까?어떤 조치를 취해야 하며 고려해야 할 함정과 문제점은 무엇입니까?

도움이 되었습니까?

해결책

내부 도움을 받아 이 작업을 수행했습니다. Apple 개발자 포럼, iPhone 전용 개발자라면 가입해야 합니다.

가장 먼저 할 일은, __asm__(), 평범하지 않다 asm().

둘째, 기본적으로 XCode는 ARM Thumb 명령어 세트에 대해 인라인 어셈블리를 컴파일하는 컴파일 타겟을 생성하므로 미국 올바른 지시로 인정되지 않았습니다.이 문제를 해결하려면 대상에서 "정보 입수"를 수행하십시오."GCC 4.0 - 코드 생성" 섹션까지 아래로 스크롤하고 "Compile for Thumb" 선택을 취소합니다.그런 다음 Active SDK를 "Device"로 설정하면 다음 코드 조각이 제대로 컴파일됩니다.

inline int asm_saturate_to_255 (int a) {
  int y;
  __asm__("usat %0, #8, %1\n\t" : "=r"(y) : "r"(a));
  return y;
}

당연히 이제 IPhone Simulator에서는 작동하지 않습니다.하지만 TargetConditionals.h #ifdef를 수행할 수 있는 정의가 있습니다.즉 TARGET_OS_IPHONE 그리고 TARGET_IPHONE_SIMULATOR.

다른 팁

나는 꽤 많은 팔 cortex-a8 어셈블리 코드를 씁니다. iPhone의 CPU는 ARM11 (AFAIK)이므로 핵심 명령 세트는 동일합니다.

정확히 무엇을 찾고 있습니까? 원한다면 몇 가지 예를 제시 할 수 있습니다.


편집하다:

방금 iPhone에서는 LLVM-GCC 컴파일러를 사용해야한다는 것을 알았습니다. 내가 아는 한 GCC의 인라인 어셈블러 구문을 이해해야합니다. 그렇다면 모든 암 인라인 어셈블러 자습서도 iPhone에서도 작동합니다.

다음은 매우 최소 인라인 어셈블러 기능 (C에서)입니다. iPhone에서 컴파일하고 작동하는지 말해 주시겠습니까? 그것이 작동하면 ARM Inline Assembler, 특히 ARMV6 아키텍처 및 DSP 확장에 유용한 작업을 수행하는 방법을 조금 만질 수 있습니다.

inline int saturate_to_255 (int a)
{
  int y;
  asm ("usat %0, #8, %1\n\t" : "=r"(y) : "r"(a));
  return y;
}

다음과 같아야합니다.

inline int saturate_to_255 (int a)
{
  if (a < 0) a =0;
  if (a > 255) a = 255;
  return a;
}

레지스터는 인라인 ASM에서 명시 적으로 사용할 수 있습니다.

void foo(void) {
#if TARGET_CPU_ARM64
    __asm ("sub        sp, sp, #0x60");
    __asm ("str        x29, [sp, #0x50]");
#endif
}

무거운 플로트 작동이 필요하지 않은 응용 프로그램에는 엄지가 권장됩니다. 썸은 코드 크기를 더 작게 만들고 결과가 빠른 코드 실행도 만들어집니다.

따라서 3D 게임과 같은 응용 프로그램을 위해 엄지 손가락을 끄면 ...

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