diff options
Diffstat (limited to 'src/cmd/gc/align.c')
-rw-r--r-- | src/cmd/gc/align.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/cmd/gc/align.c b/src/cmd/gc/align.c index 7c39c646c..7c2960277 100644 --- a/src/cmd/gc/align.c +++ b/src/cmd/gc/align.c @@ -349,3 +349,35 @@ typeinit(int lex) Array_cap = rnd(Array_nel+types[TUINT32]->width, types[TUINT32]->width); sizeof_Array = rnd(Array_cap+types[TUINT32]->width, maxround); } + +/* + * compute total size of f's in/out arguments. + */ +int +argsize(Type *t) +{ + Iter save; + Type *fp; + int w, x; + + w = 0; + + fp = structfirst(&save, getoutarg(t)); + while(fp != T) { + x = fp->width + fp->type->width; + if(x > w) + w = x; + fp = structnext(&save); + } + + fp = funcfirst(&save, t); + while(fp != T) { + x = fp->width + fp->type->width; + if(x > w) + w = x; + fp = funcnext(&save); + } + + w = (w+7) & ~7; + return w; +} |