From 167fd6508ba4f89e0b98de46ef82913040f24923 Mon Sep 17 00:00:00 2001 From: ktietz Date: Mon, 12 Apr 2010 18:04:44 +0000 Subject: [PATCH] 2010-04-12 Kai Tietz PR/43702 * config/i386/i386.c (x86_this_parameter): Handle aggregate for __thiscall convention. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158232 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386.c | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6d0c44cea34..d5b6a057263 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-04-12 Kai Tietz + + PR/43702 + * config/i386/i386.c (x86_this_parameter): Handle aggregate for + __thiscall convention. + 2010-04-12 Steve Ellcey * config/pa/pa.c (hppa_legitimize_address): Remove unused variable diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 8c4f088efcd..a54651da4e7 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -26395,11 +26395,13 @@ x86_this_parameter (tree function) if (lookup_attribute ("fastcall", TYPE_ATTRIBUTES (type))) regno = aggr ? DX_REG : CX_REG; - /* ???: To be verified. It is not absolutely clear how aggregates - have to be treated for thiscall. We assume that they are - identical to fastcall. */ else if (lookup_attribute ("thiscall", TYPE_ATTRIBUTES (type))) - regno = aggr ? DX_REG : CX_REG; + { + regno = CX_REG; + if (aggr) + return gen_rtx_MEM (SImode, + plus_constant (stack_pointer_rtx, 4)); + } else { regno = AX_REG; -- 2.11.0