코드가 soft-fp
디렉토리 내의 소스에서 명확하게 사용 가능하므로 gcc가이 기능을 기본적으로 지원하지 않는다는 것은 놀라운 일입니다. 그것은 수동으로 라이브러리를 컴파일 할 수있다 : 오류로 인해 컴파일되지 않는 몇 가지 C 파일이 있습니다
$ svn co svn://gcc.gnu.org/svn/gcc/trunk/libgcc/ libgcc
$ cd libgcc/soft-fp/
$ gcc -c -O2 -msoft-float -m32 -I../config/arm/ -I.. *.c
$ ar -crv libsoft-fp.a *.o
하지만 대부분은 컴파일 않습니다. 우리의 소스 파일과 디렉토리에 libsoft-fp.a
를 복사 한 후 그들은 지금 -msoft-float
으로 잘 컴파일 :
$ gcc -g -m32 -msoft-float test.c -lsoft-fp -L.
$ objdump -D --disassembler-options=intel a.out | less
를 사용하여 빠른 검사가 예상대로 아무 x87 부동 소수점 명령어가 호출되지 것을 보여주고 코드 실행을 많은 예제를 사용하는 예제에서는 8 배로 상당히 느립니다.
참고 : 나는
$ gcc -c -O2 -msoft-float -m32 -I../config/i386/ -I.. *.c
와 소프트 부동 소수점 라이브러리를 컴파일하는 것이 바람직 한 것입니다하지만
adddf3.c: In function '__adddf3':
adddf3.c:46: error: unknown register name 'st(1)' in 'asm'
가 i386
버전이 같아 같은 오류 메시지의 부하 결과 st(1)
은 x87 레지스터 중 하나를 가리키며, 이는 -msoft-float
을 사용할 때 분명히 사용 가능하지 않습니다. 이상하게도 운 좋게도 i386
에서 arm
버전이 정상적으로 컴파일되고 정상적으로 작동하는 것 같습니다.
응답 해 주셔서 감사합니다. buildroot를 사용하여 uclibc를 부트 스트라이핑 해 보았지만 적어도. UCLIBC_HAS_FPU 옵션에 대해 BR2_UCLIBC_CONFIG 아래 제공된 .config 파일을 무시하는 것으로 보입니다./ – bdonlan
@Alex uclibc 툴체인 링크가 손상되었습니다. http://uclibc.org/toolchains.html이 적절해야합니까? – zengr