aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Preud'homme <robotux@celest.fr>2013-11-25 11:00:51 +0800
committerThomas Preud'homme <robotux@celest.fr>2013-11-25 11:00:51 +0800
commit82b257c29cc24e561fd29a0374fcda73feb5d760 (patch)
treed7a98375c5e3e3c21bbb6480bd18530f1f3f63f7
parent48fc7466527d8b3409f313421e8aed559563bfdb (diff)
downloadtinycc-82b257c29cc24e561fd29a0374fcda73feb5d760.tar.gz
tinycc-82b257c29cc24e561fd29a0374fcda73feb5d760.tar.bz2
Add comment to explain the code added by 41ce391c
Add a comment in arm-gen.c to explain how commit 41ce391c86df135609af33658414d4d452c5beb3 solves the register corruption when passing a structure in a function call.
-rw-r--r--arm-gen.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/arm-gen.c b/arm-gen.c
index 8b07708..c22e98e 100644
--- a/arm-gen.c
+++ b/arm-gen.c
@@ -1127,7 +1127,10 @@ static int copy_params(int nb_args, struct plan *plan, int todo)
for(pplan = plan->clsplans[CORE_STRUCT_CLASS]; pplan; pplan = pplan->prev) {
int r;
pplan->sval->r = pplan->start;
- /* TODO: why adding fake param */
+ /* An SValue can only pin 2 registers at best (r and r2) but a structure
+ can occupy more than 2 registers. Thus, we need to push on the value
+ stack some fake parameter to have on SValue for each registers used
+ by a structure (r2 is not used). */
for (r = pplan->start + 1; r <= pplan->end; r++) {
if (todo & (1 << r)) {
nb_extra_sval++;