|
@@ -50,6 +50,7 @@ unit pararv;
|
|
|
|
|
|
function push_addr_param(varspez: tvarspez; def: tdef; calloption: tproccalloption): boolean;override;
|
|
|
|
|
|
+ function create_paraloc_info(p: tabstractprocdef; side: tcallercallee): longint;override;
|
|
|
protected
|
|
|
procedure init_values(var curintreg, curfloatreg, curmmreg: tsuperregister; var cur_stack_offset: aword);
|
|
|
end;
|
|
@@ -309,6 +310,19 @@ implementation
|
|
|
end;
|
|
|
|
|
|
|
|
|
+ function trvparamanager.create_paraloc_info(p: tabstractprocdef; side: tcallercallee): longint;
|
|
|
+ var
|
|
|
+ cur_stack_offset: aword;
|
|
|
+ curintreg, curfloatreg, curmmreg : tsuperregister;
|
|
|
+ begin
|
|
|
+ init_values(curintreg, curfloatreg, curmmreg, cur_stack_offset);
|
|
|
+
|
|
|
+ result := create_paraloc_info_intern(p, side, p.paras, curintreg, curfloatreg, curmmreg, cur_stack_offset, false);
|
|
|
+
|
|
|
+ create_funcretloc_info(p, side);
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
function trvparamanager.create_paraloc_info_intern(p: tabstractprocdef; side: tcallercallee; paras: tparalist; var curintreg, curfloatreg, curmmreg: tsuperregister; var cur_stack_offset: aword; isVararg : boolean): longint;
|
|
|
var
|
|
|
nextintreg, nextfloatreg, nextmmreg : tsuperregister;
|