기본적으로 사용자 지정 명령을 사용하는 경우 부동 소수점 상수는 단정밀도로 컴파일되고 단정밀도 부동 소수점 연산은 하드웨어에서 구현됩니다. 다음 해결 방법은 부동 소수점 상수가 배정밀도로 컴파일되도록 강제하고 배정밀도 부동 소수점 연산이 소프트웨어에서 구현되도록 합니다.
다음 해결 방법 중 하나를 사용할 수 있습니다.
옵션 1 - 상수가 단정밀도로 변환되지 않도록 배정밀도 부동 소수점 상수에 접미사 "L"을 추가하여 소프트웨어를 수정합니다.
다음 표에서는 예제 코드와 부동 소수점 사용자 지정 명령 하드웨어 사용, 정밀도 및 구현이 하드웨어인지 소프트웨어인지 여부를 보여 줍니다.
예제 코드 | FP CI 사용 | 정밀도 | 구현 |
비= ᅡ * 4.67 | 예 | 단일 | 하드웨어 |
비 = ᅡ * 4.67 | 아니요 | 더블 | 소프트웨어 |
b = ᅡ * 4.67f | 예 | 단일 | 하드웨어 |
b = ᅡ * 4.67f | 아니요 | 단일 | 소프트웨어 |
b = ᅡ * 4.67L | 상관 없음* | 더블 | 소프트웨어 |
옵션 2 - public.mk 에서 -mcustom-fpu-config 플래그를 수동으로 제거하고 개별 컴파일러 플래그로 바꾸되 -fsingle-precision-constant 플래그는 생략합니다.
"-mcustom-fpu-config=60-1"에서 "-mcustom-fmuls=252 –mcustom-fadds=253 –mcustom-fsubs=254" 또는
"-mcustom-fpu-config=60-2"에서 "-mcustom-fmuls=252 –mcustom-fadds=253 –mcustom-fsubs=254 –mcustom-divs=255"
60-1과 60-2의 차이점은 60-1에는 –mcustom-divs 플래그가 없다는 것입니다.
자세한 내용은 http://www.altera.com/literature/ug/ug_nios2_custom_instruction.pdf 의 부록 D를 참조하십시오 .