mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 21:09:24 +02:00
* translate_disp_call: improved building the parameter block by using ttemprefnode.create_offset instead of taking address/pointer additions/dereference. Results in simpler node tree and lesser CPU instructions generated.
git-svn-id: trunk@21018 -
This commit is contained in:
parent
6d0dd50be3
commit
04ca8a9126
@ -408,7 +408,7 @@ implementation
|
||||
end;
|
||||
|
||||
{ create a temp to store parameter values }
|
||||
params:=ctempcreatenode.create(voidtype,0,tt_persistent,true);
|
||||
params:=ctempcreatenode.create(cformaltype,0,tt_persistent,false);
|
||||
addstatement(statements,params);
|
||||
|
||||
calldescnode:=cdataconstnode.create;
|
||||
@ -462,20 +462,14 @@ implementation
|
||||
depending on byref bit }
|
||||
|
||||
if assignmenttype=voidpointertype then
|
||||
begin
|
||||
addstatement(statements,cassignmentnode.create(
|
||||
ctypeconvnode.create_internal(cderefnode.create(caddnode.create(addn,
|
||||
caddrnode.create(ctemprefnode.create(params)),
|
||||
cordconstnode.create(qword(paramssize),ptruinttype,false)
|
||||
)),voidpointertype),
|
||||
ctypeconvnode.create_internal(caddrnode.create_internal(para.left),voidpointertype)));
|
||||
end
|
||||
addstatement(statements,cassignmentnode.create(
|
||||
ctypeconvnode.create_internal(ctemprefnode.create_offset(params,paramssize),
|
||||
voidpointertype),
|
||||
ctypeconvnode.create_internal(caddrnode.create_internal(para.left),voidpointertype)))
|
||||
else
|
||||
addstatement(statements,cassignmentnode.create(
|
||||
ctypeconvnode.create_internal(cderefnode.create(caddnode.create(addn,
|
||||
caddrnode.create(ctemprefnode.create(params)),
|
||||
cordconstnode.create(paramssize,ptruinttype,false)
|
||||
)),assignmenttype),
|
||||
ctypeconvnode.create_internal(ctemprefnode.create_offset(params,paramssize),
|
||||
assignmenttype),
|
||||
ctypeconvnode.create_internal(para.left,assignmenttype)));
|
||||
|
||||
inc(paramssize,max(voidpointertype.size,assignmenttype.size));
|
||||
|
Loading…
Reference in New Issue
Block a user