From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id D571A3858C2B; Mon, 7 Aug 2023 16:24:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D571A3858C2B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1691425490; bh=xnRpeQ5N/vbsoz3nuhyM+lCAuvmH+GEY3ccehDiMPrI=; h=From:To:Subject:Date:In-Reply-To:References:From; b=uNP9KBQqET6sdsbJmW3SwMvnJ5vskVbPAvBJ1rLHujO/UzfHCQdZTe1KqAsU8FGmz Y7UDFVkF4naIdAsoddv0bAy+Vq/g+k9Hx5WJmN5W9NxQAw5VlkQptkdwRrQbmcv2tq XtRLAlvo4tud+oUxn84ecrPb4DVS19x3+Y8LZ00c= From: "matz at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/110899] RFE: Attributes preserve_most and preserve_all Date: Mon, 07 Aug 2023 16:24:50 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 14.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: enhancement X-Bugzilla-Who: matz at gcc dot gnu.org X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D110899 --- Comment #9 from Michael Matz --- (In reply to Florian Weimer from comment #8) > (In reply to Michael Matz from comment #7) > > > > Does the clang implementation take into account the various problem= atic > > > > cases that arise when calling a normal function from a (say) preser= ve_all > > > > function > > > > (hint: such call can't usually be done)? > > >=20 > > > How so? We need to version the __preserve_most__ attribute with the I= SA > > > level, of course. > >=20 > > I don't see how that helps. Imagine a preserve_all function foo that c= alls > > printf. How do you propose that 'foo' saves all parts of the SSE regis= ters, > > even those that aren't invented yet, or those that can't be touched by = the > > current ISA? (printf might clobber all of these) >=20 > Vector registers are out of scope for this. Why do you say that? From clang: "Furthermore it also preserves all floating-point registers (XMMs/YMMs)." (for preserve_all, but this bugrepo= rt does include that variant of the attribute). > But lets look at APX. If printf is recompiled to use APX, then it will > clobber the extended register file. If we define __preserve_most__ the way > we do in my psABI proposal (i.e., *not* as everything but %r11), the > extended APX registers are still caller-saved. Right, for preserve_most _with your wording_ it works out. preserve_all or preserve_most with clang wording doesn't. > (These details are the main reason why I want this in the psABI > documentation. This stuff is out there and will be used, so let's make su= re > that it's somewhat reasonable.) I agree with that. I just want a little hashing-out-the-details before putting anything in the psABI.=