Peter Bergner via Gcc <gcc@gcc.gnu.org> wrote:

On 4/20/21 4:20 PM, Jakub Jelinek via Gcc wrote:
On Tue, Apr 20, 2021 at 03:27:08PM -0500, William Seurer via Gcc wrote:
/tmp/cc8zG8DV.s: Assembler messages:
/tmp/cc8zG8DV.s:2566: Error: unsupported relocation against r13
/tmp/cc8zG8DV.s:2570: Error: unsupported relocation against r14
[snip]
So do we need to change
+        else version (PPC)
+        {
+            void*[19] regs = void;
+            asm pure nothrow @nogc
+            {
+                "stw r13, %0" : "=m" (regs[ 0]);
+                "stw r14, %0" : "=m" (regs[ 1]);
...
+        else version (PPC64)
+        {
+            void*[19] regs = void;
+            asm pure nothrow @nogc
+            {
+                "std r13, %0" : "=m" (regs[ 0]);
+                "std r14, %0" : "=m" (regs[ 1]);
...
to "stw 13, %0" and "std 13, %0" etc. unconditionally, or
to "stw %%r13, %0" etc. under some conditions?

Yes, I think so.  The "r13", etc. names are not accepted by gas unless you
use the -mregnames option.  It's easier to just remove the 'r’.

which would break it on Darwin.

Either that section needs to be conditional on “version Darwin” and a second one general - or the existing fall-back can be used for Linux (but the comments still stand
that there are disadvantages on PPC from using the fallback).

Iain (S)

Reply via email to