Hello,

This diff unbreaks lang/gcc/11 on powerpc64, adds dlang to powerpc64,
and changes D's fibers on all archs; ok to commit?

gcc 11 was broken in powerpc64 bulks,
http://build-failures.rhaalovely.net/powerpc64/2021-09-27/lang/gcc/11,-c++.log

Unbreak by adding gnu-user.h (patch-gcc_config_gcc).  Also add
PFRAG.powerpc64-main, to be like other archs; this PFRAG is still
missing in gcc 8.  The rest of this diff is for the D programming
language, with parts for powerpc64, 32-bit powerpc, and all archs.

Add powerpc64 to ONLY_FOR_ARCHS-dlang.  Add enough PPC64 code to
libphobos to complete the build.  (I might be the 1st person to try D
on powerpc64.)  This PPC64 code is trivial, except the code for fibers
(https://tour.dlang.org/tour/en/multithreading/fibers), where I wrote
some powerpc64 asm.  I found 2 other problems with fibers:

  1. The fiber crashed SIGSEGV, because it didn't pass MAP_STACK to
     mmap(2).  The fix is easy, and affects all archs.

  2. The existing code for 32-bit powerpc was wrong; it saved the
     link register at 8(%r1), should be 4(%r1), and allowed signal
     handlers to clobber the values saved below %r1.  I change
     almost every line of 32-bit asm as I add the 64-bit asm.

The attachment "dfiber.d" is my fiber example.  I can run it on macppc
and powerpc64, and you should be able to run it on any dlang arch,

$ egdc -o dfiber dfiber.d
$ ./dfiber
adder(1, 1, 1)()
1, 1, 3, 5, 9, 15, 25, 41, 67, 109, 177, 287, 465, 753

But on macppc, egdc works only with ld.bfd,

$ ln -s /usr/bin/ld.bfd ld
$ PATH=$PWD:$PATH
$ egdc -o dfiber dfiber.d

Bump REVISION-dlang for libphobos.  Don't bump REVISION, because
the other changes (patch-gcc_config_gcc, and %%powerpc64%% in
PLIST-main) affect only powerpc64, which was broken.

--George

Index: Makefile
===================================================================
RCS file: /cvs/ports/lang/gcc/11/Makefile,v
retrieving revision 1.3
diff -u -p -r1.3 Makefile
--- Makefile    24 Aug 2021 18:13:19 -0000      1.3
+++ Makefile    10 Oct 2021 23:40:00 -0000
@@ -12,7 +12,7 @@ ONLY_FOR_ARCHS = aarch64 alpha amd64 arm
        powerpc powerpc64 sparc64
 
 ONLY_FOR_ARCHS-ada = amd64 i386 mips64 powerpc
-ONLY_FOR_ARCHS-dlang = aarch64 amd64 arm i386 powerpc
+ONLY_FOR_ARCHS-dlang = aarch64 amd64 arm i386 powerpc powerpc64
 
 DPB_PROPERTIES = parallel
 
@@ -20,6 +20,7 @@ V = 11.2.0
 FULL_VERSION = $V
 FULL_PKGVERSION = $V
 REVISION = 0
+REVISION-dlang = 1
 
 ADASTRAP-amd64 = adastrap-amd64-$V-0.tar.xz
 ADASTRAP-arm = adastrap-arm-4.9.4-0.tar.xz
Index: patches/patch-gcc_config_gcc
===================================================================
RCS file: /cvs/ports/lang/gcc/11/patches/patch-gcc_config_gcc,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 patch-gcc_config_gcc
--- patches/patch-gcc_config_gcc        15 Aug 2021 18:42:10 -0000      1.1.1.1
+++ patches/patch-gcc_config_gcc        10 Oct 2021 23:40:00 -0000
@@ -123,7 +123,7 @@ Index: gcc/config.gcc
 +      ;;
 +powerpc64*-*-openbsd*)
 +      tm_defines="${tm_defines} DEFAULT_FLAG_PIE=2"
-+      tm_file="${tm_file} dbxelf.h elfos.h openbsd.h openbsd-stdint.h 
openbsd-libpthread.h freebsd-spec.h rs6000/sysv4.h rs6000/default64.h 
rs6000/openbsd64.h"
++      tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h openbsd.h 
openbsd-stdint.h openbsd-libpthread.h freebsd-spec.h rs6000/sysv4.h 
rs6000/default64.h rs6000/openbsd64.h"
 +      tmake_file="${tmake_file} rs6000/t-openbsd64"
 +      extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt 
openbsd.opt"
 +      ;;
Index: patches/patch-libphobos_configure
===================================================================
RCS file: patches/patch-libphobos_configure
diff -N patches/patch-libphobos_configure
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libphobos_configure   10 Oct 2021 23:40:00 -0000
@@ -0,0 +1,17 @@
+$OpenBSD$
+
+Add fiber asm for powerpc64, to avoid
+"configure: error: setcontext required but not found"
+
+Index: libphobos/configure
+--- libphobos/configure.orig
++++ libphobos/configure
+@@ -15196,7 +15196,7 @@ fi
+     aarch64* | \
+     arm* | \
+     i[34567]86|x86_64 | \
+-    powerpc)
++    powerpc*)
+       druntime_fiber_asm_external=yes
+       ;;
+   esac
Index: patches/patch-libphobos_libdruntime_config_powerpc_switchcontext_S
===================================================================
RCS file: patches/patch-libphobos_libdruntime_config_powerpc_switchcontext_S
diff -N patches/patch-libphobos_libdruntime_config_powerpc_switchcontext_S
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libphobos_libdruntime_config_powerpc_switchcontext_S  10 Oct 
2021 23:40:00 -0000
@@ -0,0 +1,224 @@
+$OpenBSD$
+
+Add fibers for powerpc64 ELFv2, and fix fibers for 32-bit powerpc ELF.
+The old code was for some other platform (AIX?), not BSD nor Linux.
+This patch fixes OpenBSD but might break the other platform.
+
+This patch doesn't save altivec registers v20..v31, because gcc
+disables altivec by default.
+
+Index: libphobos/libdruntime/config/powerpc/switchcontext.S
+--- libphobos/libdruntime/config/powerpc/switchcontext.S.orig
++++ libphobos/libdruntime/config/powerpc/switchcontext.S
+@@ -24,7 +24,210 @@ see the files COPYING3 and COPYING.RUNTIME respectivel
+ 
+ #include "../common/threadasm.S"
+ 
+-#if !defined(__PPC64__) && !defined(__MACH__)
++#if defined(__ELF__)
++
++/**
++ * Performs a context switch.
++ *
++ * r3 - old context pointer
++ * r4 - new context pointer
++ *
++ */
++    .text
++    .globl CSYM(fiber_switchContext)
++    .type CSYM(fiber_switchContext), @function
++    .align 2
++CSYM(fiber_switchContext):
++    .cfi_startproc
++#ifdef __PPC64__
++    /* ELF64 - Save linkage area */
++    mflr        0
++    mfcr        5
++    std     0, 16(1)
++    stw     5, 8(1)
++
++    /* Make room for 18 GPRs, 18 FPRs */
++    addi    6, 1, -18 * 8
++    addi    1, 6, -18 * 8
++
++    /* Save GPRs */
++    std     31, (17 * 8)(6)
++    std     30, (16 * 8)(6)
++    std     29, (15 * 8)(6)
++    std     28, (14 * 8)(6)
++    std     27, (13 * 8)(6)
++    std     26, (12 * 8)(6)
++    std     25, (11 * 8)(6)
++    std     24, (10 * 8)(6)
++    std     23, (9 * 8)(6)
++    std     22, (8 * 8)(6)
++    std     21, (7 * 8)(6)
++    std     20, (6 * 8)(6)
++    std     19, (5 * 8)(6)
++    std     18, (4 * 8)(6)
++    std     17, (3 * 8)(6)
++    std     16, (2 * 8)(6)
++    std     15, (1 * 8)(6)
++    std     14, (0 * 8)(6)
++#else
++    /* ELF32 - Save linkage area */
++    mflr        0
++    mfcr        5
++    stw     0, 4(1)
++
++    /* Make room for 18 GPRs, CR, 18 FPRs; rounding up so r1 stays
++       16-byte aligned.  We must move r1, because ELF32 allows
++       signals to clobber below r1 (no red zone). */
++    addi    6, 1, -20 * 4
++    addi    1, 6, -18 * 8
++
++    /* Save GPRs */
++    stw     31, (19 * 4)(6)
++    stw     30, (18 * 4)(6)
++    stw     29, (17 * 4)(6)
++    stw     28, (16 * 4)(6)
++    stw     27, (15 * 4)(6)
++    stw     26, (14 * 4)(6)
++    stw     25, (13 * 4)(6)
++    stw     24, (12 * 4)(6)
++    stw     23, (11 * 4)(6)
++    stw     22, (10 * 4)(6)
++    stw     21, (9 * 4)(6)
++    stw     20, (8 * 4)(6)
++    stw     19, (7 * 4)(6)
++    stw     18, (6 * 4)(6)
++    stw     17, (5 * 4)(6)
++    stw     16, (4 * 4)(6)
++    stw     15, (3 * 4)(6)
++    stw     14, (2 * 4)(6)
++
++    /* Save condition register */
++    stw     5, 0(6)
++#endif
++
++    /* ELF32 and ELF64 - Save FPRs */
++    stfd    31, (-1 * 8)(6)
++    stfd    30, (-2 * 8)(6)
++    stfd    29, (-3 * 8)(6)
++    stfd    28, (-4 * 8)(6)
++    stfd    27, (-5 * 8)(6)
++    stfd    26, (-6 * 8)(6)
++    stfd    25, (-7 * 8)(6)
++    stfd    24, (-8 * 8)(6)
++    stfd    23, (-9 * 8)(6)
++    stfd    22, (-10 * 8)(6)
++    stfd    21, (-11 * 8)(6)
++    stfd    20, (-12 * 8)(6)
++    stfd    19, (-13 * 8)(6)
++    stfd    18, (-14 * 8)(6)
++    stfd    17, (-15 * 8)(6)
++    stfd    16, (-16 * 8)(6)
++    stfd    15, (-17 * 8)(6)
++    stfd    14, (-18 * 8)(6)
++
++    /* Save r6 in the old context, since we do not want the GC to
++       scan the floating point registers. */
++
++#ifdef __PPC64__
++    /* ELF64 - Update the old stack pointer */
++    std     6, 0(3)
++
++    /* Set new stack pointer */
++    addi    1, 4, -18 * 8
++
++    /* Set condition and link register.  If lr is &fiber_entryPoint,
++       then ELFv2 ABI needs the same address in r12. */
++    lwz     5, (18 * 8 + 8)(4)
++    ld      12, (18 * 8 + 16)(4)
++    mtcr        5
++    mtlr        12
++#else
++    /* ELF32 - Update the old stack pointer */
++    stw     6, 0(3)
++
++    /* Set new stack pointer */
++    addi    1, 4, -18 * 8
++
++    /* Set condition and link register */
++    lwz     5, 0(4)
++    lwz     12, (20 * 4 + 4)(4)
++    mtcr        5
++    mtlr        12
++#endif
++
++    /* PPC32 and PPC64 - Restore FPRs */
++    lfd     14, (-18 * 8)(4)
++    lfd     15, (-17 * 8)(4)
++    lfd     16, (-16 * 8)(4)
++    lfd     17, (-15 * 8)(4)
++    lfd     18, (-14 * 8)(4)
++    lfd     19, (-13 * 8)(4)
++    lfd     20, (-12 * 8)(4)
++    lfd     21, (-11 * 8)(4)
++    lfd     22, (-10 * 8)(4)
++    lfd     23, (-9 * 8)(4)
++    lfd     24, (-8 * 8)(4)
++    lfd     25, (-7 * 8)(4)
++    lfd     26, (-6 * 8)(4)
++    lfd     27, (-5 * 8)(4)
++    lfd     28, (-4 * 8)(4)
++    lfd     29, (-3 * 8)(4)
++    lfd     30, (-2 * 8)(4)
++    lfd     31, (-1 * 8)(4)
++
++#ifdef __PPC64__
++    /* PPC64 - Restore GPRs */
++    ld      14, (0 * 8)(4)
++    ld      15, (1 * 8)(4)
++    ld      16, (2 * 8)(4)
++    ld      17, (3 * 8)(4)
++    ld      18, (4 * 8)(4)
++    ld      19, (5 * 8)(4)
++    ld      20, (6 * 8)(4)
++    ld      21, (7 * 8)(4)
++    ld      22, (8 * 8)(4)
++    ld      23, (9 * 8)(4)
++    ld      24, (10 * 8)(4)
++    ld      25, (11 * 8)(4)
++    ld      26, (12 * 8)(4)
++    ld      27, (13 * 8)(4)
++    ld      28, (14 * 8)(4)
++    ld      29, (15 * 8)(4)
++    ld      30, (16 * 8)(4)
++    ld      31, (17 * 8)(4)
++
++    /* Return and switch context */
++    addi    1, 4, 18 * 8
++    blr
++#else
++    /* PPC32 - Restore GPRs */
++    lwz     14, (2 * 4)(4)
++    lwz     15, (3 * 4)(4)
++    lwz     16, (4 * 4)(4)
++    lwz     17, (5 * 4)(4)
++    lwz     18, (6 * 4)(4)
++    lwz     19, (7 * 4)(4)
++    lwz     20, (8 * 4)(4)
++    lwz     21, (9 * 4)(4)
++    lwz     22, (10 * 4)(4)
++    lwz     23, (11 * 4)(4)
++    lwz     24, (12 * 4)(4)
++    lwz     25, (13 * 4)(4)
++    lwz     26, (14 * 4)(4)
++    lwz     27, (15 * 4)(4)
++    lwz     28, (16 * 4)(4)
++    lwz     29, (17 * 4)(4)
++    lwz     30, (18 * 4)(4)
++    lwz     31, (19 * 4)(4)
++
++    /* Return and switch context */
++    addi    1, 4, 20 * 4
++    blr
++#endif
++    .cfi_endproc
++    .size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext)
++
++#elif !defined(__PPC64__) && !defined(__MACH__)
+ 
+ /**
+  * Performs a context switch.
Index: patches/patch-libphobos_libdruntime_core_sys_posix_config_d
===================================================================
RCS file: patches/patch-libphobos_libdruntime_core_sys_posix_config_d
diff -N patches/patch-libphobos_libdruntime_core_sys_posix_config_d
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libphobos_libdruntime_core_sys_posix_config_d 10 Oct 2021 
23:40:00 -0000
@@ -0,0 +1,18 @@
+$OpenBSD$
+
+Index: libphobos/libdruntime/core/sys/posix/config.d
+--- libphobos/libdruntime/core/sys/posix/config.d.orig
++++ libphobos/libdruntime/core/sys/posix/config.d
+@@ -169,6 +169,12 @@ else version (OpenBSD)
+         enum _STACKALIGNBYTES = 15;
+         enum _MAX_PAGE_SHIFT = 12;
+     }
++    else version (PPC64)
++    {
++        enum _ALIGNBYTES = 7;
++        enum _STACKALIGNBYTES = 15;
++        enum _MAX_PAGE_SHIFT = 12;
++    }
+     else version (SPARC64)
+     {
+         enum _ALIGNBYTES = 15;
Index: patches/patch-libphobos_libdruntime_core_sys_posix_setjmp_d
===================================================================
RCS file: 
/cvs/ports/lang/gcc/11/patches/patch-libphobos_libdruntime_core_sys_posix_setjmp_d,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 patch-libphobos_libdruntime_core_sys_posix_setjmp_d
--- patches/patch-libphobos_libdruntime_core_sys_posix_setjmp_d 15 Aug 2021 
18:42:11 -0000      1.1.1.1
+++ patches/patch-libphobos_libdruntime_core_sys_posix_setjmp_d 10 Oct 2021 
23:40:00 -0000
@@ -3,14 +3,25 @@ $OpenBSD: patch-libphobos_libdruntime_co
 Index: libphobos/libdruntime/core/sys/posix/setjmp.d
 --- libphobos/libdruntime/core/sys/posix/setjmp.d.orig
 +++ libphobos/libdruntime/core/sys/posix/setjmp.d
-@@ -277,6 +277,10 @@ else version (OpenBSD)
+@@ -265,6 +265,10 @@ else version (OpenBSD)
      {
-         enum _JBLEN = 14;
+         enum _JBLEN = 100;
      }
++    else version (PPC64)
++    {
++        enum _JBLEN = 208;
++    }
+     else version (MIPS64)
+     {
+         enum _JBLEN = 83;
+@@ -276,6 +280,10 @@ else version (OpenBSD)
+     else version (SPARC64)
+     {
+         enum _JBLEN = 14;
++    }
 +    else version (AArch64)
 +    {
 +        enum _JBLEN = 64;
-+    }
+     }
      else
          static assert(0);
- 
Index: patches/patch-libphobos_libdruntime_core_sys_posix_sys_mman_d
===================================================================
RCS file: patches/patch-libphobos_libdruntime_core_sys_posix_sys_mman_d
diff -N patches/patch-libphobos_libdruntime_core_sys_posix_sys_mman_d
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libphobos_libdruntime_core_sys_posix_sys_mman_d       10 Oct 
2021 23:40:00 -0000
@@ -0,0 +1,15 @@
+$OpenBSD$
+
+Fiber needs mmap(2) MAP_STACK.
+
+Index: libphobos/libdruntime/core/sys/posix/sys/mman.d
+--- libphobos/libdruntime/core/sys/posix/sys/mman.d.orig
++++ libphobos/libdruntime/core/sys/posix/sys/mman.d
+@@ -460,6 +460,7 @@ else version (OpenBSD)
+     enum MAP_PRIVATE    = 0x0002;
+     enum MAP_FIXED      = 0x0010;
+     enum MAP_ANON       = 0x1000;
++    enum MAP_STACK      = 0x4000;
+ 
+     enum MAP_FAILED     = cast(void*)-1;
+ 
Index: patches/patch-libphobos_libdruntime_core_sys_posix_ucontext_d
===================================================================
RCS file: patches/patch-libphobos_libdruntime_core_sys_posix_ucontext_d
diff -N patches/patch-libphobos_libdruntime_core_sys_posix_ucontext_d
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libphobos_libdruntime_core_sys_posix_ucontext_d       10 Oct 
2021 23:40:00 -0000
@@ -0,0 +1,31 @@
+$OpenBSD$
+
+Index: libphobos/libdruntime/core/sys/posix/ucontext.d
+--- libphobos/libdruntime/core/sys/posix/ucontext.d.orig
++++ libphobos/libdruntime/core/sys/posix/ucontext.d
+@@ -1381,6 +1381,25 @@ else version (OpenBSD)
+             trapframe sc_frame;
+         }
+     }
++    else version (PPC64)
++    {
++        struct sigcontext
++        {
++            c_long       sc_cookie;
++            int          sc_mask;
++            c_long[32]   sc_reg;
++            c_long       sc_lr;
++            c_long       sc_cr;
++            c_long       sc_xer;
++            c_long       sc_ctr;
++            c_long       sc_pc;
++            c_long       sc_ps;
++            c_long       sc_vrsave;
++            ulong[2][64] sc_vsx; // __uint128_t
++            ulong        sc_fpscr;
++            ulong        sc_vcsr;
++        }
++    }
+     else version (SPARC64)
+     {
+         struct sigcontext
Index: patches/patch-libphobos_libdruntime_core_thread_fiber_d
===================================================================
RCS file: patches/patch-libphobos_libdruntime_core_thread_fiber_d
diff -N patches/patch-libphobos_libdruntime_core_thread_fiber_d
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libphobos_libdruntime_core_thread_fiber_d     10 Oct 2021 
23:40:00 -0000
@@ -0,0 +1,82 @@
+$OpenBSD$
+
+Fiber needs mmap(2) MAP_STACK.
+
+Add fibers for powerpc64 ELFv2, and fix fibers for 32-bit powerpc ELF.
+The old code was for some other platform (AIX?), not BSD nor Linux.
+This patch fixes OpenBSD but might break the other platform.
+
+Index: libphobos/libdruntime/core/thread/fiber.d
+--- libphobos/libdruntime/core/thread/fiber.d.orig
++++ libphobos/libdruntime/core/thread/fiber.d
+@@ -125,6 +125,7 @@ private
+         {
+             version = AsmPPC_Posix;
+             version = AsmExternal;
++            version = AlignFiberStackTo16Byte;
+         }
+     }
+     else version (PPC64)
+@@ -137,6 +138,8 @@ private
+         }
+         else version (Posix)
+         {
++            version = AsmPPC_Posix;
++            version = AsmExternal;
+             version = AlignFiberStackTo16Byte;
+         }
+     }
+@@ -1033,10 +1036,13 @@ class Fiber (private)
+                 // Allocate more for the memory guard
+                 sz += guardPageSize;
+ 
++                int mmap_flags = MAP_PRIVATE | MAP_ANON;
++                version (OpenBSD)
++                    mmap_flags |= MAP_STACK;
+                 m_pmem = mmap( null,
+                                sz,
+                                PROT_READ | PROT_WRITE,
+-                               MAP_PRIVATE | MAP_ANON,
++                               mmap_flags,
+                                -1,
+                                0 );
+                 if ( m_pmem == MAP_FAILED )
+@@ -1338,27 +1344,22 @@ class Fiber (private)
+         }
+         else version (AsmPPC_Posix)
+         {
+-            version (StackGrowsDown)
+-            {
+-                pstack -= int.sizeof * 5;
+-            }
+-            else
+-            {
+-                pstack += int.sizeof * 5;
+-            }
++            version (StackGrowsDown) {} else static assert (false);
+ 
+-            push( cast(size_t) &fiber_entryPoint );     // link register
+-            push( 0x00000000 );                         // control register
+-            push( 0x00000000 );                         // old stack pointer
+-
+-            // GPR values
+-            version (StackGrowsDown)
++            version (PPC64)
+             {
+-                pstack -= int.sizeof * 20;
++                pstack -= size_t.sizeof * 5;
++                push( cast(size_t) &fiber_entryPoint);  // link register
++                push( 0x00000000_00000000 );            // condition register
++                push( 0x00000000_00000000 );            // old stack pointer
++                pstack -= size_t.sizeof * 18;           // GPRs
+             }
+             else
+             {
+-                pstack += int.sizeof * 20;
++                pstack -= size_t.sizeof * 6;
++                push( cast(size_t) &fiber_entryPoint);  // link register
++                push( 0x00000000 );                     // old stack pointer
++                pstack -= size_t.sizeof * 20;           // GPRs and CR
+             }
+ 
+             assert( (cast(size_t) pstack & 0x0f) == 0 );
Index: pkg/PFRAG.powerpc64-main
===================================================================
RCS file: pkg/PFRAG.powerpc64-main
diff -N pkg/PFRAG.powerpc64-main
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/PFRAG.powerpc64-main    10 Oct 2021 23:40:00 -0000
@@ -0,0 +1,42 @@
+@comment $OpenBSD: PFRAG.powerpc-main,v 1.1.1.1 2021/08/15 18:42:12 pascal Exp 
$
+lib/gcc/${CONFIG}/${V}/include/altivec.h
+lib/gcc/${CONFIG}/${V}/include/amo.h
+lib/gcc/${CONFIG}/${V}/include/bmi2intrin.h
+lib/gcc/${CONFIG}/${V}/include/bmiintrin.h
+lib/gcc/${CONFIG}/${V}/include/emmintrin.h
+lib/gcc/${CONFIG}/${V}/include/htmintrin.h
+lib/gcc/${CONFIG}/${V}/include/htmxlintrin.h
+lib/gcc/${CONFIG}/${V}/include/mm_malloc.h
+lib/gcc/${CONFIG}/${V}/include/mmintrin.h
+lib/gcc/${CONFIG}/${V}/include/pmmintrin.h
+lib/gcc/${CONFIG}/${V}/include/ppc-asm.h
+lib/gcc/${CONFIG}/${V}/include/ppu_intrinsics.h
+lib/gcc/${CONFIG}/${V}/include/si2vmx.h
+lib/gcc/${CONFIG}/${V}/include/smmintrin.h
+lib/gcc/${CONFIG}/${V}/include/spu2vmx.h
+lib/gcc/${CONFIG}/${V}/include/tgmath.h
+lib/gcc/${CONFIG}/${V}/include/tmmintrin.h
+lib/gcc/${CONFIG}/${V}/include/unwind.h
+lib/gcc/${CONFIG}/${V}/include/vec_types.h
+lib/gcc/${CONFIG}/${V}/include/x86intrin.h
+lib/gcc/${CONFIG}/${V}/include/xmmintrin.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/dbxelf.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/elfos.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/freebsd-spec.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/gnu-user.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/initfini-array.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/openbsd-libpthread.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/openbsd-stdint.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/openbsd.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/default64.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/openbsd64.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/option-defaults.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/rs6000-builtin.def
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/rs6000-cpus.def
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/rs6000-modes.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/rs6000-opts.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/rs6000-protos.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/rs6000.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/rs6000/sysv4.h
+lib/gcc/${CONFIG}/${V}/plugin/include/config/vxworks-dummy.h
Index: pkg/PLIST-main
===================================================================
RCS file: /cvs/ports/lang/gcc/11/pkg/PLIST-main,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 PLIST-main
--- pkg/PLIST-main      15 Aug 2021 18:42:13 -0000      1.1.1.1
+++ pkg/PLIST-main      10 Oct 2021 23:40:00 -0000
@@ -109,6 +109,7 @@ lib/gcc/${CONFIG}/${V}/plugin/include/co
 %%mips64%%
 %%mips64el%%
 %%powerpc%%
+%%powerpc64%%
 %%sparc64%%
 %%X86%%
 lib/gcc/${CONFIG}/${V}/plugin/include/configargs.h
import core.thread.fiber;
import std.algorithm;
import std.range;
import std.stdio;

// Make an integer sequence a, b, a + b + c, ...
int delegate() adder(int a, int b, int c) {
        int next;
        void yield(int i) {
                next = i;
                Fiber.yield();
        }
        auto fib = new Fiber({
                writefln("adder(%d, %d, %d)()", a, b, c);
                yield(a);
                yield(b);
                for (;;) {
                        yield(next = a + b + c);
                        a = b;
                        b = next;
                }
        });
        return {fib.call(); return next;};
}

// Show the first 15 Leonardo numbers.
void main()
{
        auto leonardo = adder(1, 1, 1);
        writefln("%(%d, %)", iota(1, 15).map!(i => leonardo()));
}

Reply via email to