(*
* param.pas - Test parameter passing.
*
* Copyright (C) 2004 Southern Storm Software, Pty Ltd.
*
* This file is part of the libjit library.
*
* The libjit library is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation, either version 2.1 of
* the License, or (at your option) any later version.
*
* The libjit library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with the libjit library. If not, see
* .
*)
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.