(*
 * param.pas - Test parameter passing.
 *
 * Copyright (C) 2004  Southern Storm Software, Pty Ltd.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *)

program local;

var
	failed: Boolean;

procedure run(msg: String; value: Boolean);
begin
	Write(msg);
	Write(" ... ");
	if value then begin
		WriteLn("ok");
	end else begin
		WriteLn("failed");
		failed := True;
	end;
end;

{ Test large numbers of 32-bit int parameters, which should stress
  both register and stack parameter passing }
procedure param_int
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: integer);
begin
	run("param_int",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_int_fastcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: integer) fastcall;
begin
	run("param_int_fastcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_int_stdcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: integer) stdcall;
begin
	run("param_int_stdcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;

{ Test large numbers of 64-bit int parameters, which should stress
  both register and stack parameter passing.  On a 32-bit system,
  parameters will be passed in pairs.  If the test platform has an
  odd number of word registers, then this will also test long
  splitting on 32-bit systems }
procedure param_long
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: longint);
begin
	run("param_long",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_long_fastcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: longint) fastcall;
begin
	run("param_long_fastcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_long_stdcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: longint) stdcall;
begin
	run("param_long_stdcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;

{ Test long splitting on 32-bit systems that have an even
  number of word registers }
procedure param_int_long
	(p1: integer; p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: longint);
begin
	run("param_int_long",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_int_long_fastcall
	(p1: integer; p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: longint) fastcall;
begin
	run("param_int_long_fastcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_int_long_stdcall
	(p1: integer; p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: longint) stdcall;
begin
	run("param_int_long_stdcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;

{ Test passing 32-bit float values in registers and on the stack }
procedure param_float32
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: shortreal);
begin
	run("param_float32",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_float32_fastcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: shortreal) fastcall;
begin
	run("param_float32_fastcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_float32_stdcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: shortreal) stdcall;
begin
	run("param_float32_stdcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;

{ Test passing 64-bit float values in registers and on the stack }
procedure param_float64
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: real);
begin
	run("param_float64",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_float64_fastcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: real) fastcall;
begin
	run("param_float64_fastcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_float64_stdcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: real) stdcall;
begin
	run("param_float64_stdcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;

{ Test passing native float values in registers and on the stack }
procedure param_nfloat
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: longreal);
begin
	run("param_nfloat",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_nfloat_fastcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: longreal) fastcall;
begin
	run("param_nfloat_fastcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;
procedure param_nfloat_stdcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: longreal) stdcall;
begin
	run("param_nfloat_stdcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32));
end;

{ Test passing both int and float64 parameters }
procedure param_int_float64
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: integer;
	 q1,   q2,  q3,  q4,  q5,  q6,  q7,  q8,
	 q9,  q10, q11, q12, q13, q14, q15, q16,
	 q17, q18, q19, q20, q21, q22, q23, q24,
	 q25, q26, q27, q28, q29, q30, q31, q32: real);
begin
	run("param_int_float64",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32) and
	     (q1 = 1)  and  (q2 = 2)  and  (q3 = 3)  and  (q4 = 4) and
		 (q5 = 5)  and  (q6 = 6)  and  (q7 = 7)  and  (q8 = 8) and
		 (q9 = 9)  and (q10 = 10) and (q11 = 11) and (q12 = 12) and
		(q13 = 13) and (q14 = 14) and (q15 = 15) and (q16 = 16) and
		(q17 = 17) and (q18 = 18) and (q19 = 19) and (q20 = 20) and
		(q21 = 21) and (q22 = 22) and (q23 = 23) and (q24 = 24) and
		(q25 = 25) and (q26 = 26) and (q27 = 27) and (q28 = 28) and
		(q29 = 29) and (q30 = 30) and (q31 = 31) and (q32 = 32));
end;
procedure param_int_float64_fastcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: integer;
	 q1,   q2,  q3,  q4,  q5,  q6,  q7,  q8,
	 q9,  q10, q11, q12, q13, q14, q15, q16,
	 q17, q18, q19, q20, q21, q22, q23, q24,
	 q25, q26, q27, q28, q29, q30, q31, q32: real) fastcall;
begin
	run("param_int_float64_fastcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32) and
	     (q1 = 1)  and  (q2 = 2)  and  (q3 = 3)  and  (q4 = 4) and
		 (q5 = 5)  and  (q6 = 6)  and  (q7 = 7)  and  (q8 = 8) and
		 (q9 = 9)  and (q10 = 10) and (q11 = 11) and (q12 = 12) and
		(q13 = 13) and (q14 = 14) and (q15 = 15) and (q16 = 16) and
		(q17 = 17) and (q18 = 18) and (q19 = 19) and (q20 = 20) and
		(q21 = 21) and (q22 = 22) and (q23 = 23) and (q24 = 24) and
		(q25 = 25) and (q26 = 26) and (q27 = 27) and (q28 = 28) and
		(q29 = 29) and (q30 = 30) and (q31 = 31) and (q32 = 32));
end;
procedure param_int_float64_stdcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: integer;
	 q1,   q2,  q3,  q4,  q5,  q6,  q7,  q8,
	 q9,  q10, q11, q12, q13, q14, q15, q16,
	 q17, q18, q19, q20, q21, q22, q23, q24,
	 q25, q26, q27, q28, q29, q30, q31, q32: real) stdcall;
begin
	run("param_int_float64_stdcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32) and
	     (q1 = 1)  and  (q2 = 2)  and  (q3 = 3)  and  (q4 = 4) and
		 (q5 = 5)  and  (q6 = 6)  and  (q7 = 7)  and  (q8 = 8) and
		 (q9 = 9)  and (q10 = 10) and (q11 = 11) and (q12 = 12) and
		(q13 = 13) and (q14 = 14) and (q15 = 15) and (q16 = 16) and
		(q17 = 17) and (q18 = 18) and (q19 = 19) and (q20 = 20) and
		(q21 = 21) and (q22 = 22) and (q23 = 23) and (q24 = 24) and
		(q25 = 25) and (q26 = 26) and (q27 = 27) and (q28 = 28) and
		(q29 = 29) and (q30 = 30) and (q31 = 31) and (q32 = 32));
end;

{ Test passing both int and float64 parameters, reversed from above }
procedure param_float64_int
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: real;
	 q1,   q2,  q3,  q4,  q5,  q6,  q7,  q8,
	 q9,  q10, q11, q12, q13, q14, q15, q16,
	 q17, q18, q19, q20, q21, q22, q23, q24,
	 q25, q26, q27, q28, q29, q30, q31, q32: integer);
begin
	run("param_float64_int",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32) and
	     (q1 = 1)  and  (q2 = 2)  and  (q3 = 3)  and  (q4 = 4) and
		 (q5 = 5)  and  (q6 = 6)  and  (q7 = 7)  and  (q8 = 8) and
		 (q9 = 9)  and (q10 = 10) and (q11 = 11) and (q12 = 12) and
		(q13 = 13) and (q14 = 14) and (q15 = 15) and (q16 = 16) and
		(q17 = 17) and (q18 = 18) and (q19 = 19) and (q20 = 20) and
		(q21 = 21) and (q22 = 22) and (q23 = 23) and (q24 = 24) and
		(q25 = 25) and (q26 = 26) and (q27 = 27) and (q28 = 28) and
		(q29 = 29) and (q30 = 30) and (q31 = 31) and (q32 = 32));
end;
procedure param_float64_int_fastcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: real;
	 q1,   q2,  q3,  q4,  q5,  q6,  q7,  q8,
	 q9,  q10, q11, q12, q13, q14, q15, q16,
	 q17, q18, q19, q20, q21, q22, q23, q24,
	 q25, q26, q27, q28, q29, q30, q31, q32: integer) fastcall;
begin
	run("param_float64_int_fastcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32) and
	     (q1 = 1)  and  (q2 = 2)  and  (q3 = 3)  and  (q4 = 4) and
		 (q5 = 5)  and  (q6 = 6)  and  (q7 = 7)  and  (q8 = 8) and
		 (q9 = 9)  and (q10 = 10) and (q11 = 11) and (q12 = 12) and
		(q13 = 13) and (q14 = 14) and (q15 = 15) and (q16 = 16) and
		(q17 = 17) and (q18 = 18) and (q19 = 19) and (q20 = 20) and
		(q21 = 21) and (q22 = 22) and (q23 = 23) and (q24 = 24) and
		(q25 = 25) and (q26 = 26) and (q27 = 27) and (q28 = 28) and
		(q29 = 29) and (q30 = 30) and (q31 = 31) and (q32 = 32));
end;
procedure param_float64_int_stdcall
	(p1,   p2,  p3,  p4,  p5,  p6,  p7,  p8,
	 p9,  p10, p11, p12, p13, p14, p15, p16,
	 p17, p18, p19, p20, p21, p22, p23, p24,
	 p25, p26, p27, p28, p29, p30, p31, p32: real;
	 q1,   q2,  q3,  q4,  q5,  q6,  q7,  q8,
	 q9,  q10, q11, q12, q13, q14, q15, q16,
	 q17, q18, q19, q20, q21, q22, q23, q24,
	 q25, q26, q27, q28, q29, q30, q31, q32: integer) stdcall;
begin
	run("param_float64_int_stdcall",
	     (p1 = 1)  and  (p2 = 2)  and  (p3 = 3)  and  (p4 = 4) and
		 (p5 = 5)  and  (p6 = 6)  and  (p7 = 7)  and  (p8 = 8) and
		 (p9 = 9)  and (p10 = 10) and (p11 = 11) and (p12 = 12) and
		(p13 = 13) and (p14 = 14) and (p15 = 15) and (p16 = 16) and
		(p17 = 17) and (p18 = 18) and (p19 = 19) and (p20 = 20) and
		(p21 = 21) and (p22 = 22) and (p23 = 23) and (p24 = 24) and
		(p25 = 25) and (p26 = 26) and (p27 = 27) and (p28 = 28) and
		(p29 = 29) and (p30 = 30) and (p31 = 31) and (p32 = 32) and
	     (q1 = 1)  and  (q2 = 2)  and  (q3 = 3)  and  (q4 = 4) and
		 (q5 = 5)  and  (q6 = 6)  and  (q7 = 7)  and  (q8 = 8) and
		 (q9 = 9)  and (q10 = 10) and (q11 = 11) and (q12 = 12) and
		(q13 = 13) and (q14 = 14) and (q15 = 15) and (q16 = 16) and
		(q17 = 17) and (q18 = 18) and (q19 = 19) and (q20 = 20) and
		(q21 = 21) and (q22 = 22) and (q23 = 23) and (q24 = 24) and
		(q25 = 25) and (q26 = 26) and (q27 = 27) and (q28 = 28) and
		(q29 = 29) and (q30 = 30) and (q31 = 31) and (q32 = 32));
end;

{ Test passing both int and float 64 parameters, alternatively mixed }
procedure param_int_float64_mixed
	( p1: integer;  q1: real;  p2: integer;  q2: real;
	  p3: integer;  q3: real;  p4: integer;  q4: real;
	  p5: integer;  q5: real;  p6: integer;  q6: real;
	  p7: integer;  q7: real;  p8: integer;  q8: real;
	  p9: integer;  q9: real; p10: integer; q10: real;
	 p11: integer; q11: real; p12: integer; q12: real;
	 p13: integer; q13: real; p14: integer; q14: real;
	 p15: integer; q15: real; p16: integer; q16: real;
	 p17: integer; q17: real; p18: integer; q18: real;
	 p19: integer; q19: real; p20: integer; q20: real;
	 p21: integer; q21: real; p22: integer; q22: real;
	 p23: integer; q23: real; p24: integer; q24: real;
	 p25: integer; q25: real; p26: integer; q26: real;
	 p27: integer; q27: real; p28: integer; q28: real;
	 p29: integer; q29: real; p30: integer; q30: real;
	 p31: integer; q31: real; p32: integer; q32: real);
begin
	run("param_int_float64_mixed",
		 (p1 =  1) and  (q1 =  2) and  (p2 =  3) and  (q2 =  4) and
		 (p3 =  5) and  (q3 =  6) and  (p4 =  7) and  (q4 =  8) and
		 (p5 =  9) and  (q5 = 10) and  (p6 = 11) and  (q6 = 12) and
		 (p7 = 13) and  (q7 = 14) and  (p8 = 15) and  (q8 = 16) and
		 (p9 = 17) and  (q9 = 18) and (p10 = 19) and (q10 = 20) and
		(p11 = 21) and (q11 = 22) and (p12 = 23) and (q12 = 24) and
		(p13 = 25) and (q13 = 26) and (p14 = 27) and (q14 = 28) and
		(p15 = 29) and (q15 = 30) and (p16 = 31) and (q16 = 32) and
		(p17 =  1) and (q17 =  2) and (p18 =  3) and (q18 =  4) and
		(p19 =  5) and (q19 =  6) and (p20 =  7) and (q20 =  8) and
		(p21 =  9) and (q21 = 10) and (p22 = 11) and (q22 = 12) and
		(p23 = 13) and (q23 = 14) and (p24 = 15) and (q24 = 16) and
		(p25 = 17) and (q25 = 18) and (p26 = 19) and (q26 = 20) and
		(p27 = 21) and (q27 = 22) and (p28 = 23) and (q28 = 24) and
		(p29 = 25) and (q29 = 26) and (p30 = 27) and (q30 = 28) and
		(p31 = 29) and (q31 = 30) and (p32 = 31) and (q32 = 32));
end;
procedure param_int_float64_mixed_fastcall
	( p1: integer;  q1: real;  p2: integer;  q2: real;
	  p3: integer;  q3: real;  p4: integer;  q4: real;
	  p5: integer;  q5: real;  p6: integer;  q6: real;
	  p7: integer;  q7: real;  p8: integer;  q8: real;
	  p9: integer;  q9: real; p10: integer; q10: real;
	 p11: integer; q11: real; p12: integer; q12: real;
	 p13: integer; q13: real; p14: integer; q14: real;
	 p15: integer; q15: real; p16: integer; q16: real;
	 p17: integer; q17: real; p18: integer; q18: real;
	 p19: integer; q19: real; p20: integer; q20: real;
	 p21: integer; q21: real; p22: integer; q22: real;
	 p23: integer; q23: real; p24: integer; q24: real;
	 p25: integer; q25: real; p26: integer; q26: real;
	 p27: integer; q27: real; p28: integer; q28: real;
	 p29: integer; q29: real; p30: integer; q30: real;
	 p31: integer; q31: real; p32: integer; q32: real) fastcall;
begin
	run("param_int_float64_mixed_fastcall",
		 (p1 =  1) and  (q1 =  2) and  (p2 =  3) and  (q2 =  4) and
		 (p3 =  5) and  (q3 =  6) and  (p4 =  7) and  (q4 =  8) and
		 (p5 =  9) and  (q5 = 10) and  (p6 = 11) and  (q6 = 12) and
		 (p7 = 13) and  (q7 = 14) and  (p8 = 15) and  (q8 = 16) and
		 (p9 = 17) and  (q9 = 18) and (p10 = 19) and (q10 = 20) and
		(p11 = 21) and (q11 = 22) and (p12 = 23) and (q12 = 24) and
		(p13 = 25) and (q13 = 26) and (p14 = 27) and (q14 = 28) and
		(p15 = 29) and (q15 = 30) and (p16 = 31) and (q16 = 32) and
		(p17 =  1) and (q17 =  2) and (p18 =  3) and (q18 =  4) and
		(p19 =  5) and (q19 =  6) and (p20 =  7) and (q20 =  8) and
		(p21 =  9) and (q21 = 10) and (p22 = 11) and (q22 = 12) and
		(p23 = 13) and (q23 = 14) and (p24 = 15) and (q24 = 16) and
		(p25 = 17) and (q25 = 18) and (p26 = 19) and (q26 = 20) and
		(p27 = 21) and (q27 = 22) and (p28 = 23) and (q28 = 24) and
		(p29 = 25) and (q29 = 26) and (p30 = 27) and (q30 = 28) and
		(p31 = 29) and (q31 = 30) and (p32 = 31) and (q32 = 32));
end;
procedure param_int_float64_mixed_stdcall
	( p1: integer;  q1: real;  p2: integer;  q2: real;
	  p3: integer;  q3: real;  p4: integer;  q4: real;
	  p5: integer;  q5: real;  p6: integer;  q6: real;
	  p7: integer;  q7: real;  p8: integer;  q8: real;
	  p9: integer;  q9: real; p10: integer; q10: real;
	 p11: integer; q11: real; p12: integer; q12: real;
	 p13: integer; q13: real; p14: integer; q14: real;
	 p15: integer; q15: real; p16: integer; q16: real;
	 p17: integer; q17: real; p18: integer; q18: real;
	 p19: integer; q19: real; p20: integer; q20: real;
	 p21: integer; q21: real; p22: integer; q22: real;
	 p23: integer; q23: real; p24: integer; q24: real;
	 p25: integer; q25: real; p26: integer; q26: real;
	 p27: integer; q27: real; p28: integer; q28: real;
	 p29: integer; q29: real; p30: integer; q30: real;
	 p31: integer; q31: real; p32: integer; q32: real) stdcall;
begin
	run("param_int_float64_mixed_stdcall",
		 (p1 =  1) and  (q1 =  2) and  (p2 =  3) and  (q2 =  4) and
		 (p3 =  5) and  (q3 =  6) and  (p4 =  7) and  (q4 =  8) and
		 (p5 =  9) and  (q5 = 10) and  (p6 = 11) and  (q6 = 12) and
		 (p7 = 13) and  (q7 = 14) and  (p8 = 15) and  (q8 = 16) and
		 (p9 = 17) and  (q9 = 18) and (p10 = 19) and (q10 = 20) and
		(p11 = 21) and (q11 = 22) and (p12 = 23) and (q12 = 24) and
		(p13 = 25) and (q13 = 26) and (p14 = 27) and (q14 = 28) and
		(p15 = 29) and (q15 = 30) and (p16 = 31) and (q16 = 32) and
		(p17 =  1) and (q17 =  2) and (p18 =  3) and (q18 =  4) and
		(p19 =  5) and (q19 =  6) and (p20 =  7) and (q20 =  8) and
		(p21 =  9) and (q21 = 10) and (p22 = 11) and (q22 = 12) and
		(p23 = 13) and (q23 = 14) and (p24 = 15) and (q24 = 16) and
		(p25 = 17) and (q25 = 18) and (p26 = 19) and (q26 = 20) and
		(p27 = 21) and (q27 = 22) and (p28 = 23) and (q28 = 24) and
		(p29 = 25) and (q29 = 26) and (p30 = 27) and (q30 = 28) and
		(p31 = 29) and (q31 = 30) and (p32 = 31) and (q32 = 32));
end;

procedure run_tests;
begin
	param_int
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_int_fastcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_int_stdcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);

	param_long
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_long_fastcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_long_stdcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);

	param_int_long
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_int_long_fastcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_int_long_stdcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);

	param_float32
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_float32_fastcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_float32_stdcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);

	param_float64
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_float64_fastcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_float64_stdcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);

	param_nfloat
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_nfloat_fastcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_nfloat_stdcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);

	param_int_float64
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
		 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_int_float64_fastcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
		 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_int_float64_stdcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
		 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);

	param_float64_int
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
		 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_float64_int_fastcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
		 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_float64_int_stdcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
		 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);

	param_int_float64_mixed
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
		 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_int_float64_mixed_fastcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
		 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
	param_int_float64_mixed_stdcall
		(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
		 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
		 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
end;

begin
	failed := False;
	run_tests;
	if failed then begin
		Terminate(1);
	end;
end.


syntax highlighted by Code2HTML, v. 0.9.1