2.1.53. --fpmode=model

이 옵션은 부동 소수점 규칙을 지정하고 라이브러리 특성 및 부동 소수점 최적화를 설정합니다.

구문

--fpmode=model

여기서 model은 다음 중 하나입니다.

ieee_full

IEEE 표준이 보장하는 모든 기능 작업 및 표현이 단정밀도와 배정밀도로 제공됩니다. 런타임에 연산 모드를 동적으로 선택할 수 있습니다.

다음과 같은 심볼을 정의합니다.

__FP_IEEE
__FP_FENV_EXCEPTIONS
__FP_FENV_ROUNDING
__FP_INEXACT_EXCEPTION
ieee_fixed

가장 가까운 수로 반올림되며 부정확한 예외가 생성되지 않는 IEEE 표준입니다.

다음과 같은 심볼을 정의합니다.

__FP_IEEE
__FP_FENV_EXCEPTIONS
ieee_no_fenv

가장 가까운 수로 반올림되며 예외가 생성되지 않는 IEEE 표준입니다. 이 모드는 상태를 저장하지 않으며 Java 부동 소수점 산술 모델과 호환됩니다.

심볼 __FP_IEEE를 정의합니다.

std

IEEE 유한 값은 비정규 flush-to-zero, 가장 가까운 수로 반올림 및 예외 없음을 지원합니다. 표준 C 및 C++과 호환되며 기본 옵션입니다.

기본 유한 값은 IEEE 표준에서 예고한 값입니다. 그러나 다음 사항에 유의해야 합니다.

  • IEEE 모델에서 정의한 모든 환경에서 NaN 및 무한대가 생성되지 않을 수 있습니다. 생성되었을 경우 동일한 부호를 갖지 않을 수도 있습니다.

  • 부호 0은 IEEE 모델에서 예고한 것과 다를 수 있습니다.

fast

정확도가 조금 낮아지는 반면 성능을 크게 향상시킬 수 있는 보다 적극적인 부동 소수점 최적화를 수행합니다. 이 옵션은 __FP_FAST 심볼을 정의합니다.

이 옵션을 사용하면 ISO C 및 C++ 표준과 부분적으로만 호환되는 동작이 발생하지만 강력한 수치 제어 부동 소수점 프로그램은 올바르게 작동합니다.

다음과 같은 여러 변환이 수행될 수 있습니다.

  • 모든 부동 소수점 인수를 정확히 단정밀도 값으로 나타낼 수 있는 경우 배정밀도 수학 함수가 단정밀도 수학 함수로 변환될 수 있으며 그 결과는 즉시 단정밀도 값으로 변환됩니다.

    예를 들어 선택한 라이브러리가 rvct 또는 aeabi_glibc인 경우와 같이 선택한 라이브러리에 함수와 같은 단정밀도가 포함되는 경우에만 이 변환이 수행됩니다.

    예를 들면 다음과 같습니다.

    float f(float a)
    {
        return sqrt(a);
    }
    

    위 옵션이 다음과 같이 변환됩니다.

    float f(float a)
    {
        return sqrtf(a);
    }
    
  • 단정밀도로 축소된 배정밀도 부동 소수점 식을 단정밀도로 계산하는 것이 유용한 경우에는 그렇게 계산됩니다. 예를 들어 float y = (float)(x + 1.0)float y = (float)x + 1.0f로 평가됩니다.

  • 부동 소수점 상수로 나누기는 역수로 곱하기로 바뀝니다. 예를 들어 x / 3.0x * (1.0 / 3.0)으로 평가됩니다.

  • 수학 함수가 호출된 후에는 errno의 값이 ISO C 또는 C++ 표준과 호환되지 않을 수 있습니다. 이 옵션은 컴파일러에서 sqrt() 또는 sqrtf()를 호출하는 대신 VFP 제곱근 명령어를 인라인하도록 합니다.

추가 참고

  • 컴파일러 사용 설명서에서 4-35페이지의 --fpmode 옵션

  • install_directory\RVDS\Examples\...\vfpsupportARM Application Note 133 - Using VFP with RVDS

Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0348AK
Non-Confidential