| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- program t28;
- var
- g : integer ;
- unused : integer ;
- (* Seventy parameters, laid out the way TP3 lays them out: the LAST declared
- one sits at BP+4 and each earlier parameter is 2 bytes farther from BP, so
- p1 is at +142 and p8 at +128 -- the first offsets an 8-bit displacement
- cannot represent -- and their accesses must use the 4-byte mod=10 form;
- that is what check_framedisp.py asserts.
- A call caps at 16 arguments, so p1..p54 are never passed and reading them
- returns stack garbage. `unused' takes that sum and is never printed, so
- the point of the fixture is the ENCODING and the printed value must stay
- deterministic. The 16 arguments that ARE passed land on p55..p70, which
- is why `g' reads those two: p55 is where the FIRST argument goes and p70
- is where the LAST one goes, so p55 + p70 = 1 + 16. Do not read any of
- this as a claim that a 70-argument call works. *)
- procedure far (p1 : integer,
- p2 : integer,
- p3 : integer,
- p4 : integer,
- p5 : integer,
- p6 : integer,
- p7 : integer,
- p8 : integer,
- p9 : integer,
- p10 : integer,
- p11 : integer,
- p12 : integer,
- p13 : integer,
- p14 : integer,
- p15 : integer,
- p16 : integer,
- p17 : integer,
- p18 : integer,
- p19 : integer,
- p20 : integer,
- p21 : integer,
- p22 : integer,
- p23 : integer,
- p24 : integer,
- p25 : integer,
- p26 : integer,
- p27 : integer,
- p28 : integer,
- p29 : integer,
- p30 : integer,
- p31 : integer,
- p32 : integer,
- p33 : integer,
- p34 : integer,
- p35 : integer,
- p36 : integer,
- p37 : integer,
- p38 : integer,
- p39 : integer,
- p40 : integer,
- p41 : integer,
- p42 : integer,
- p43 : integer,
- p44 : integer,
- p45 : integer,
- p46 : integer,
- p47 : integer,
- p48 : integer,
- p49 : integer,
- p50 : integer,
- p51 : integer,
- p52 : integer,
- p53 : integer,
- p54 : integer,
- p55 : integer,
- p56 : integer,
- p57 : integer,
- p58 : integer,
- p59 : integer,
- p60 : integer,
- p61 : integer,
- p62 : integer,
- p63 : integer,
- p64 : integer,
- p65 : integer,
- p66 : integer,
- p67 : integer,
- p68 : integer,
- p69 : integer,
- p70 : integer) ;
- begin
- g := p55 + p70 ;
- unused := p8 + p1
- end ;
- begin
- far (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) ;
- writeln (g)
- end.
|