Hello, I am trying to compile for hardfloat.
When passing floats as parameters to a C-library function call, I get incorrect values inside the library. Both for singles as doubles. If I write the same call to the c-library in c, I get assembler like call function test_param (int, single, single) test_param (i,f1,f2); ldr r0, [fp, #-8] flds s0, [fp, #-12] flds s1, [fp, #-16] bl test_param test_param (142,1.1,2.2); mov r0, #142 flds s0, .L3 flds s1, .L3+4 bl test_param In pascal I get the following assembler for this call test_param(i,f1,f2); ldr r0,.Lj10 ldr r2,[r0] ldr r0,.Lj6 ldr r1,[r0] ldr r0,.Lj13 ldr r0,[r0] blx test_param test_param(142,1.1,2.2); ldr r2,.Lj5 ldr r1,.Lj8 mov r0,#142 blx test_param blx FPC_DO_EXIT ldmea r11,{r11,r13,r15} .Lj5: .byte 205,204,12,64 .Lj8: .byte 205,204,140,63 Pascal compiler options like fpc -Aas -O- -CfVFPv3 -Cparmv7 -CaEABI pmain.pp or fpc -Aas -dFPC_ARMEL -O- -dFPC_ABI_EABI -CfVFPv3 -Cparmv7 -CaEABI pmain using fpc svn fixes_2_6 Revision: 22520 G++ calls as with -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -meabi=5 and is configured with $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/armv7l-unknown-linux-gnueabihf/4.7.1/lto- wrapper Target: armv7l-unknown-linux-gnueabihf Configured with: /build/src/gcc-4.7-20120721/configure --prefix=/usr -- libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man -- infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable- languages=c,c++,fortran,lto,objc,obj-c++ --enable-shared --enable- threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind- exceptions --enable-clocale=gnu --disable-libstdcxx-pch --enable-libstdcxx- time --enable-gnu-unique-object --enable-linker-build-id --with-ppl --enable- cloog-backend=isl --disable-ppl-version-check --disable-cloog-version-check -- enable-lto --enable-gold --enable-ld=default --enable-plugin --with-plugin- ld=ld.gold --with-linker-hash-style=gnu --disable-multilib --disable-libssp -- disable-build-with-cxx --disable-build-poststage1-with-cxx --enable- checking=release --host=armv7l-unknown-linux-gnueabihf --build=armv7l-unknown- linux-gnueabihf --with-arch=armv7-a --with-float=hard --with-fpu=vfpv3-d16 Thread model: posix gcc version 4.7.1 20120721 (prerelease) (GCC) $ fpc -i Free Pascal Compiler version 2.6.1 Compiler Date : 2012/10/03 Compiler CPU Target: arm <snip> Supported CPU instruction sets: ARMV3 ARMV4 ARMV5 ARMV6 ARMV7 ARMV7M CORTEXM3 Supported FPU instruction sets: SOFT LIBGCC FPA FPA10 FPA11 VFPV2 VFPV3 Supported ABI targets: DEFAULT SYSV AIX EABI ARMEB <snip> Platform: Beaglebone $ cat /proc/cpuinfo Processor : ARMv7 Processor rev 2 (v7l) BogoMIPS : 498.89 Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x3 CPU part : 0xc08 CPU revision : 2 Hardware : am335xevm Revision : 0000 Serial : 0000000000000000 Kind regards, Den Jean
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel