From: SourceForge.net <no...@so...> - 2010-05-19 07:48:19
|
Feature Requests item #1921061, was opened at 2008-03-20 14:44 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1921061&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: z80 port Group: None Status: Open Priority: 5 Private: No Submitted By: Philipp Krause (spth) Assigned to: Nobody/Anonymous (nobody) Summary: Register parameter passing Initial Comment: Similar to RFE #979838, but #979838 is for mcs51, while this one is for Z80. Passing arguments in registers would reduce call overhead. However this makes sense for small parameters only: Any register pair can be pushed by the caller, but if the arguments are passed in registers that could mean that we'd have to move them around in registers a lot before the call. In a simialr way the callee would probably spend a lot of time reordering arguments, unless we take the registers used for arguments away from the register allocator. Using the second register set is probably quite complicated. I see two possible solutions: *Use register arguments for functions where the sum of the arguments' sizes is below 24 bits only. We could then use a, h, l, which are not used by the register allocator for arguments. *Let the user decide. The C standard allows use of the register storage class for function parameters. Passing arguments in registers would mostly help with small function, which is currently one of sdcc's weak points. Philipp ---------------------------------------------------------------------- >Comment By: Philipp Krause (spth) Date: 2010-05-19 09:48 Message: Steps needed: - Make the notUsed() peephole function aware of passing parameters in registers, so assignments to register arguments are not considered dead code. This has to be done exactly, since notUsed() is probably the peephole optimizer's single most powerful tool, and it's effectiveness should not be compromised. - Fix bug #2811521. - Enable register parameters by changing the default value of --no-reg-params to 0 for the Z80 port. - This solution would use de and bc for passing parameters that have the register storage class specifier. Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1921061&group_id=599 |