[fpc-devel] passing a double parameter on arm

Den Jean Den.Jean at telenet.be
Thu Jul 21 16:15:31 CEST 2005


Hi,

There seems to be an ARM ABI bug with passing doubles on arm.

When I call a C-procedure of a library using a c-program, it works.

When I call the C-procedure using a fpc ARM program it doesn't work.

Here is an example:

definition of the c-procedure to call
void QLCDNumber_display2(QLCDNumberH handle, double num);

use of the c-procedure in a c-program that works fine:
QLCDNumber_display2(lcd,142.3);

use of the c-procedure in a pascal program (does not work)
procedure QLCDNumber_display(handle: QLCDNumberH; num: Double); cdecl; overload;  external QtShareName name 'QLCDNumber_display2';
QLCDNumber_Display(lcd,142.3);


but this trick works:
procedure QLCDNumber_display_trick(handle: QLCDNumberH; hinum,lonum:integer); cdecl; overload;  external QtShareName name 'QLCDNumber_display2';
type
  TDoubleRec = record
    Hi : integer;
    Lo : integer;
  end;
  PDoubleRec = ^TDoubleRec;

..... 
var
  d : double;
  p : PDoubleRec; 
......
d:=142.3;	
p:=PDoubleRec(@d);
QLCDNumber_Display_trick(l,p^.hi,p^.lo);

I used :
Free Pascal Compiler version 2.0.1 [2005/07/21] for arm


kind regards,

Den Jean




More information about the fpc-devel mailing list