Repository: compiler-explorer/compiler-explorer
Pull request #7540 (2025-04-04 10:23:32)

Add Bintuils 2.42 assemblers for x86, riscv32 and riscv64
Relates to https://github.com/compiler-explorer/compiler-explorer/issues/7528.

I am not updating Arm and AArch64 because they are still using 2.38 in their GCC 14.2.0 builds.


DavidSpickett: I was not able to find a reason why Arm and AArch64 might be using older binutils. I found things like https://github.com/compiler-explorer/gcc-builder/commit/abff70e2b2bbd5e5be412c2eec82070cdec99dfd but that implies that all builds would use that version.

Perhaps Arm and AArch64 are not built that way.

x86 and riscv32/64 I installed the binaries locally and confirmed they are using 2.42.
partouf: > I was not able to find a reason why Arm and AArch64 might be using older binutils. I found things like [compiler-explorer/gcc-builder@abff70e](https://github.com/compiler-explorer/gcc-builder/commit/abff70e2b2bbd5e5be412c2eec82070cdec99dfd) but that implies that all builds would use that version.
> 
> Perhaps Arm and AArch64 are not built that way.
> 
> x86 and riscv32/64 I installed the binaries locally and confirmed they are using 2.42.

Any GCC not targetting x86 is a cross-compiler that we build from https://github.com/compiler-explorer/gcc-cross-builder
It uses ct-ng to configure and build them

https://github.com/compiler-explorer/gcc-cross-builder/blob/main/build/latest/arm64-trunk.config is for example to build gcc trunk for aarch64
DavidSpickett: Thanks, I think `CT_BINUTILS_DEVEL_BRANCH="binutils-2_38"` is the key setting. I'll do some testing locally.

In the meantime, would the PR be okay as is?

Patch:
diff --git a/docs/SupportedEmulators.md b/docs/SupportedEmulators.md
index 8271baf6c..a463ba176 100644
--- a/docs/SupportedEmulators.md
+++ b/docs/SupportedEmulators.md
@@ -25,4 +25,5 @@ These are using Javascript and/or using external websites to facilitate emulatio
 - Hello World with default sprites with CC65 https://compiler-explorer.com/z/e7eGa8rKa
 - Hello World with custom sprites with CC65 https://compiler-explorer.com/z/s8E3PeWfM
 - Hello World with LLVM-MOS C64 https://compiler-explorer.com/z/EveEETnKT
+- Hello World with MadPascal C64 https://compiler-explorer.com/z/fobvf78vY
 - Bouncing balls with CC65 https://compiler-explorer.com/z/ajav6Menq
diff --git a/etc/config/android-java.amazon.properties b/etc/config/android-java.amazon.properties
index c03ab7c69..8219ba5ea 100644
--- a/etc/config/android-java.amazon.properties
+++ b/etc/config/android-java.amazon.properties
@@ -107,7 +107,7 @@ group.dex2oat.compilerType=dex2oat
 group.dex2oat.isSemVer=true
 group.dex2oat.instructionSet=aarch64
 
-compiler.java-dex2oat-latest.name=ART dex2oat latest
+compiler.java-dex2oat-latest.name=ART dex2oat latest quarterly release
 compiler.java-dex2oat-latest.artArtifactDir=/opt/compiler-explorer/dex2oat-latest
 compiler.java-dex2oat-latest.exe=/opt/compiler-explorer/dex2oat-latest/x86_64/bin/dex2oat64
 compiler.java-dex2oat-latest.objdumper=/opt/compiler-explorer/dex2oat-latest/x86_64/bin/oatdump
diff --git a/etc/config/android-kotlin.amazon.properties b/etc/config/android-kotlin.amazon.properties
index 006741ba0..9c42c2bb7 100644
--- a/etc/config/android-kotlin.amazon.properties
+++ b/etc/config/android-kotlin.amazon.properties
@@ -108,7 +108,7 @@ group.dex2oat.compilerType=dex2oat
 group.dex2oat.isSemVer=true
 group.dex2oat.instructionSet=aarch64
 
-compiler.kotlin-dex2oat-latest.name=ART dex2oat latest
+compiler.kotlin-dex2oat-latest.name=ART dex2oat latest quarterly release
 compiler.kotlin-dex2oat-latest.artArtifactDir=/opt/compiler-explorer/dex2oat-latest
 compiler.kotlin-dex2oat-latest.exe=/opt/compiler-explorer/dex2oat-latest/x86_64/bin/dex2oat64
 compiler.kotlin-dex2oat-latest.objdumper=/opt/compiler-explorer/dex2oat-latest/x86_64/bin/oatdump
diff --git a/etc/config/assembly.amazon.properties b/etc/config/assembly.amazon.properties
index 247dccbe3..7206f79b4 100644
--- a/etc/config/assembly.amazon.properties
+++ b/etc/config/assembly.amazon.properties
@@ -25,7 +25,7 @@ compiler.nasm21601.semver=2.16.01
 compiler.nasm21601.exe=/opt/compiler-explorer/nasm-2.16.01/bin/nasm
 
 
-group.gnuas.compilers=gnuas72:gnuas73:gnuas92:gnuas103:gnuas112:gnuas121:gnuassnapshot
+group.gnuas.compilers=gnuas72:gnuas73:gnuas92:gnuas103:gnuas112:gnuas121:gnuas142:gnuassnapshot
 group.gnuas.versionFlag=--version
 group.gnuas.options=-g
 group.gnuas.isSemVer=true
@@ -43,6 +43,8 @@ compiler.gnuas112.exe=/opt/compiler-explorer/gcc-11.2.0/bin/as
 compiler.gnuas112.semver=2.36.1
 compiler.gnuas121.exe=/opt/compiler-explorer/gcc-12.1.0/bin/as
 compiler.gnuas121.semver=2.38
+compiler.gnuas142.exe=/opt/compiler-explorer/gcc-14.2.0/bin/as
+compiler.gnuas142.semver=2.42
 compiler.gnuassnapshot.exe=/opt/compiler-explorer/gcc-snapshot/bin/as
 compiler.gnuassnapshot.objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump
 compiler.gnuassnapshot.semver=(trunk)
@@ -111,7 +113,7 @@ group.gnuasriscv.supportsExecute=false
 group.gnuasriscv.versionFlag=--version
 
 ## GNU as for RISC-V 64-bits
-group.gnuasriscv64.compilers=gnuasriscv64g820:gnuasriscv64g1020:gnuasriscv64g1140:gnuasriscv64g1320
+group.gnuasriscv64.compilers=gnuasriscv64g820:gnuasriscv64g1020:gnuasriscv64g1140:gnuasriscv64g1320:gnuasriscv64g1420
 group.gnuasriscv64.groupName=RISC-V (64-bits) binutils
 group.gnuasriscv64.baseName=RISC-V (64-bits) binutils
 
@@ -135,8 +137,13 @@ compiler.gnuasriscv64g1320.name=RISC-V binutils 2.38.0
 compiler.gnuasriscv64g1320.semver=2.38.0
 compiler.gnuasriscv64g1320.objdumper=/opt/compiler-explorer/riscv64/gcc-13.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-objdump
 
+compiler.gnuasriscv64g1420.exe=/opt/compiler-explorer/riscv64/gcc-14.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-as
+compiler.gnuasriscv64g1420.name=RISC-V binutils 2.42.0
+compiler.gnuasriscv64g1420.semver=2.42.0
+compiler.gnuasriscv64g1420.objdumper=/opt/compiler-explorer/riscv64/gcc-14.2.0/riscv64-unknown-linux-gnu/bin/riscv64-unknown-linux-gnu-objdump
+
 ## GNU as for RISC-V 32-bits
-group.gnuasriscv32.compilers=gnuasriscv32g820:gnuasriscv32g1020:gnuasriscv32g1140:gnuasriscv32g1320
+group.gnuasriscv32.compilers=gnuasriscv32g820:gnuasriscv32g1020:gnuasriscv32g1140:gnuasriscv32g1320:gnuasriscv32g1420
 group.gnuasriscv32.groupName=RISC-V (32-bits) binutils
 group.gnuasriscv32.baseName=RISC-V (32-bits) binutils
 
@@ -160,6 +167,11 @@ compiler.gnuasriscv32g1320.name=RISC-V binutils 2.38.0
 compiler.gnuasriscv32g1320.semver=2.38.0
 compiler.gnuasriscv32g1320.objdumper=/opt/compiler-explorer/riscv32/gcc-13.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-objdump
 
+compiler.gnuasriscv32g1420.exe=/opt/compiler-explorer/riscv32/gcc-14.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-as
+compiler.gnuasriscv32g1420.name=RISC-V binutils 2.42.0
+compiler.gnuasriscv32g1420.semver=2.42.0
+compiler.gnuasriscv32g1420.objdumper=/opt/compiler-explorer/riscv32/gcc-14.2.0/riscv32-unknown-linux-gnu/bin/riscv32-unknown-linux-gnu-objdump
+
 group.llvmas.compilers=llvmas30:llvmas31:llvmas32:llvmas33:llvmas341:llvmas350:llvmas351:llvmas352:llvmas37x:llvmas36x:llvmas371:llvmas380:llvmas381:llvmas390:llvmas391:llvmas400:llvmas401:llvmas500:llvmas600:llvmas700:llvmas800:llvmas900:llvmas1000:llvmas1001:llvmas1100:llvmas1101:llvmas1200:llvmas1201:llvmas1300:llvmas1400:llvmas1500:llvmas1600:llvmas1701:llvmas1810:llvmas1910:llvmas2010:llvmas_trunk:llvmas_assertions_trunk
 group.llvmas.versionFlag=--version
 group.llvmas.options=-filetype=obj -o example.o
diff --git a/etc/config/c++.amazon.properties b/etc/config/c++.amazon.properties
index ecf9dbcac..f73ddc485 100644
--- a/etc/config/c++.amazon.properties
+++ b/etc/config/c++.amazon.properties
@@ -702,7 +702,7 @@ compiler.clang201assert.semver=20.1.0 (assertions)
 compiler.clang201assert.options=--gcc-toolchain=/opt/compiler-explorer/gcc-14.2.0
 compiler.clang201assert.ldPath=${exePath}/../lib|${exePath}/../lib/x86_64-unknown-linux-gnu
 
-group.clang-rocm.compilers=clang-rocm-trunk:clang-rocm-40502:clang-rocm-50002:clang-rocm-50103:clang-rocm-50203:clang-rocm-50303:clang-rocm-50700:clang-rocm-60002:clang-rocm-60102
+group.clang-rocm.compilers=clang-rocm-trunk:clang-rocm-40502:clang-rocm-50002:clang-rocm-50103:clang-rocm-50203:clang-rocm-50303:clang-rocm-50700:clang-rocm-60002:clang-rocm-60102:clang-rocm-60204:clang-rocm-60303
 group.clang-rocm.intelAsm=-mllvm --x86-asm-syntax=intel
 group.clang-rocm.groupName=ROCm clang x86-64
 group.clang-rocm.instructionSet=amd64
@@ -760,6 +760,14 @@ compiler.clang-rocm-60102.exe=/opt/compiler-explorer/clang-rocm-6.1.2/bin/clang+
 compiler.clang-rocm-60102.semver=rocm-6.1.2
 compiler.clang-rocm-60102.options=--gcc-toolchain=/opt/compiler-explorer/gcc-12.2.0
 compiler.clang-rocm-60102.ldPath=${exePath}/../lib|${exePath}/../lib/x86_64-unknown-linux-gnu
+compiler.clang-rocm-60204.exe=/opt/compiler-explorer/clang-rocm-6.2.4/bin/clang++
+compiler.clang-rocm-60204.semver=rocm-6.2.4
+compiler.clang-rocm-60204.options=--gcc-toolchain=/opt/compiler-explorer/gcc-14.2.0
+compiler.clang-rocm-60204.ldPath=${exePath}/../lib|${exePath}/../lib/x86_64-unknown-linux-gnu
+compiler.clang-rocm-60303.exe=/opt/compiler-explorer/clang-rocm-6.3.3/bin/clang++
+compiler.clang-rocm-60303.semver=rocm-6.3.3
+compiler.clang-rocm-60303.options=--gcc-toolchain=/opt/compiler-explorer/gcc-14.2.0
+compiler.clang-rocm-60303.ldPath=${exePath}/../lib|${exePath}/../lib/x86_64-unknown-linux-gnu
 
 ################################
 # Clang for Arm
@@ -4085,7 +4093,7 @@ libs.belleviews.versions.trunk.path=/opt/compiler-explorer/libs/belleviews/trunk
 
 libs.beman_iterator_interface.name=beman.iterator_interface
 libs.beman_iterator_interface.versions=trunk
-libs.beman_iterator_interface.url=https://github.com/beman-project/iterator_interface
+libs.beman_iterator_interface.url=https://github.com/bemanproject/iterator_interface
 libs.beman_iterator_interface.packagedheaders=true
 libs.beman_iterator_interface.staticliblink=beman.iterator_interface
 libs.beman_iterator_interface.versions.trunk.version=trunk
@@ -4093,7 +4101,7 @@ libs.beman_iterator_interface.versions.trunk.lookupversion=main
 
 libs.beman_optional.name=beman.optional
 libs.beman_optional.versions=trunk
-libs.beman_optional.url=https://github.com/beman-project/optional
+libs.beman_optional.url=https://github.com/bemanproject/optional
 libs.beman_optional.versions.trunk.version=trunk
 libs.beman_optional.versions.trunk.path=/opt/compiler-explorer/libs/beman_optional/main/include
 
@@ -5401,7 +5409,7 @@ libs.qt.versions.680.path=/app/qt/include/QtCore
 
 libs.quill.name=Quill
 libs.quill.description=C++ Low Latency Logging Library
-libs.quill.versions=611:700:721:730:750:810:820
+libs.quill.versions=611:700:721:730:750:810:820:900
 libs.quill.url=https://github.com/odygrd/quill
 libs.quill.versions.611.version=6.1.1
 libs.quill.versions.611.path=/opt/compiler-explorer/libs/quill/v6.1.1/quill/include
@@ -5417,6 +5425,8 @@ libs.quill.versions.810.version=8.1.0
 libs.quill.versions.810.path=/opt/compiler-explorer/libs/quill/v8.1.0/include
 libs.quill.versions.820.version=8.2.0
 libs.quill.versions.820.path=/opt/compiler-explorer/libs/quill/v8.2.0/include
+libs.quill.versions.900.version=9.0.0
+libs.quill.versions.900.path=/opt/compiler-explorer/libs/quill/v9.0.0/include
 
 libs.rangesv3.name=range-v3
 libs.rangesv3.versions=trunk:030:035:036:091:0100:0110:0120
diff --git a/etc/config/crystal.amazon.properties b/etc/config/crystal.amazon.properties
index 4f9cd0a43..9758af953 100644
--- a/etc/config/crystal.amazon.properties
+++ b/etc/config/crystal.amazon.properties
@@ -1,7 +1,7 @@
 compilers=&crystal
-defaultCompiler=crystal1151
+defaultCompiler=crystal1160
 
-group.crystal.compilers=crystal1151:crystal1141:crystal1133:crystal1122:crystal1111:crystal1101:crystal192:crystal182:crystal173:crystal162:crystal151:crystal141:crystal132:crystal122:crystal11:crystal10:crystal036:crystal035:crystal034:crystal033:crystal032:crystal031:crystal030:crystal029
+group.crystal.compilers=crystal1160:crystal1151:crystal1141:crystal1133:crystal1122:crystal1111:crystal1101:crystal192:crystal182:crystal173:crystal162:crystal151:crystal141:crystal132:crystal122:crystal11:crystal10:crystal036:crystal035:crystal034:crystal033:crystal032:crystal031:crystal030:crystal029
 group.crystal.isSemVer=true
 group.crystal.baseName=Crystal
 group.crystal.groupName=Crystal x86-64
@@ -13,6 +13,9 @@ group.crystal.licenseLink=https://github.com/crystal-lang/crystal/blob/master/LI
 group.crystal.licenseName=Apache 2.0 with Swift exception
 group.crystal.licensePreamble=Copyright 2012-2025 Manas Technology Solutions.
 
+compiler.crystal1160.semver=1.16.0
+compiler.crystal1160.exe=/opt/compiler-explorer/crystal-1.16.0/bin/crystal
+compiler.crystal1160.cc=/opt/compiler-explorer/gcc-snapshot/bin/gcc
 compiler.crystal1151.semver=1.15.1
 compiler.crystal1151.exe=/opt/compiler-explorer/crystal-1.15.1/bin/crystal
 compiler.crystal1151.cc=/opt/compiler-explorer/gcc-snapshot/bin/gcc
diff --git a/etc/config/cuda.amazon.properties b/etc/config/cuda.amazon.properties
index 302acccfd..7b7d5d29b 100644
--- a/etc/config/cuda.amazon.properties
+++ b/etc/config/cuda.amazon.properties
@@ -320,7 +320,7 @@ compiler.cltrunk.exe=/opt/compiler-explorer/clang-trunk/bin/clang++
 compiler.cltrunk.demangler=/opt/compiler-explorer/gcc-snapshot/bin/c++filt
 compiler.cltrunk.options=--gcc-toolchain=/opt/compiler-explorer/gcc-snapshot --cuda-path=/opt/compiler-explorer/cuda/12.6.1 --cuda-gpu-arch=sm_90 --cuda-device-only -Wno-unknown-cuda-version -D_ALLOW_UNSUPPORTED_LIBCPP
 
-group.hipclang.compilers=hiptrunk:hipclang-rocm-40502:hipclang-rocm-50002:hipclang-rocm-50103:hipclang-rocm-50203:hipclang-rocm-50302:hipclang-rocm-50700:hipclang-rocm-60002:hipclang-rocm-60102:hipclang-trunk-rocm-60102:hipclang-staging-rocm-60102
+group.hipclang.compilers=hiptrunk:hipclang-rocm-40502:hipclang-rocm-50002:hipclang-rocm-50103:hipclang-rocm-50203:hipclang-rocm-50302:hipclang-rocm-50700:hipclang-rocm-60002:hipclang-rocm-60102:hipclang-trunk-rocm-60102:hipclang-staging-rocm-60102:hipclang-rocm-60204:hipclang-trunk-rocm-60204:hipclang-staging-rocm-60204:hipclang-rocm-60303:hipclang-trunk-rocm-60303:hipclang-staging-rocm-60303
 group.hipclang.isSemVer=true
 group.hipclang.baseName=clang
 group.hipclang.compilerType=clang-hip
@@ -395,6 +395,42 @@ compiler.hipclang-staging-rocm-60102.name=clang staging rocm-6.1.2
 compiler.hipclang-staging-rocm-60102.nvdisasm=/opt/compiler-explorer/clang-rocm-trunk/bin/llvm-objdump
 compiler.hipclang-staging-rocm-60102.objdumper=/opt/compiler-explorer/clang-rocm-trunk/bin/llvm-objdump
 compiler.hipclang-staging-rocm-60102.options=-x hip --cuda-device-only -O3 -D__HIP_PLATFORM_AMD__=1 -D__HIP_PLATFORM_HCC__=1 -isystem /opt/compiler-explorer/libs/rocm/6.1.2/include --rocm-path=/opt/compiler-explorer/libs/rocm/6.1.2 -include hip/hip_runtime.h
+compiler.hipclang-rocm-60204.exe=/opt/compiler-explorer/clang-rocm-6.2.4/bin/clang++
+compiler.hipclang-rocm-60204.semver=6.2.4
+compiler.hipclang-rocm-60204.name=clang rocm-6.2.4
+compiler.hipclang-rocm-60204.nvdisasm=/opt/compiler-explorer/clang-rocm-6.2.4/bin/llvm-objdump
+compiler.hipclang-rocm-60204.objdumper=/opt/compiler-explorer/clang-rocm-6.2.4/bin/llvm-objdump
+compiler.hipclang-rocm-60204.options=-x hip --cuda-device-only -O3 --rocm-path=/opt/compiler-explorer/libs/rocm/6.2.4 -include hip/hip_runtime.h
+compiler.hipclang-trunk-rocm-60204.exe=/opt/compiler-explorer/clang-assertions-trunk/bin/clang++
+compiler.hipclang-trunk-rocm-60204.semver=trunk-6.2.4
+compiler.hipclang-trunk-rocm-60204.name=clang trunk rocm-6.2.4
+compiler.hipclang-trunk-rocm-60204.nvdisasm=/opt/compiler-explorer/clang-assertions-trunk/bin/llvm-objdump
+compiler.hipclang-trunk-rocm-60204.objdumper=/opt/compiler-explorer/clang-assertions-trunk/bin/llvm-objdump
+compiler.hipclang-trunk-rocm-60204.options=-x hip --cuda-device-only -O3 --rocm-path=/opt/compiler-explorer/libs/rocm/6.2.4 -include hip/hip_runtime.h
+compiler.hipclang-staging-rocm-60204.exe=/opt/compiler-explorer/clang-rocm-trunk/bin/clang++
+compiler.hipclang-staging-rocm-60204.semver=staging-6.2.4
+compiler.hipclang-staging-rocm-60204.name=clang staging rocm-6.2.4
+compiler.hipclang-staging-rocm-60204.nvdisasm=/opt/compiler-explorer/clang-rocm-trunk/bin/llvm-objdump
+compiler.hipclang-staging-rocm-60204.objdumper=/opt/compiler-explorer/clang-rocm-trunk/bin/llvm-objdump
+compiler.hipclang-staging-rocm-60204.options=-x hip --cuda-device-only -O3 --rocm-path=/opt/compiler-explorer/libs/rocm/6.2.4 -include hip/hip_runtime.h
+compiler.hipclang-rocm-60303.exe=/opt/compiler-explorer/clang-rocm-6.3.3/bin/clang++
+compiler.hipclang-rocm-60303.semver=6.3.3
+compiler.hipclang-rocm-60303.name=clang rocm-6.3.3
+compiler.hipclang-rocm-60303.nvdisasm=/opt/compiler-explorer/clang-rocm-6.3.3/bin/llvm-objdump
+compiler.hipclang-rocm-60303.objdumper=/opt/compiler-explorer/clang-rocm-6.3.3/bin/llvm-objdump
+compiler.hipclang-rocm-60303.options=-x hip --cuda-device-only -O3 --rocm-path=/opt/compiler-explorer/libs/rocm/6.3.3 -include hip/hip_runtime.h
+compiler.hipclang-trunk-rocm-60303.exe=/opt/compiler-explorer/clang-assertions-trunk/bin/clang++
+compiler.hipclang-trunk-rocm-60303.semver=trunk-6.3.3
+compiler.hipclang-trunk-rocm-60303.name=clang trunk rocm-6.3.3
+compiler.hipclang-trunk-rocm-60303.nvdisasm=/opt/compiler-explorer/clang-assertions-trunk/bin/llvm-objdump
+compiler.hipclang-trunk-rocm-60303.objdumper=/opt/compiler-explorer/clang-assertions-trunk/bin/llvm-objdump
+compiler.hipclang-trunk-rocm-60303.options=-x hip --cuda-device-only -O3 --rocm-path=/opt/compiler-explorer/libs/rocm/6.3.3 -include hip/hip_runtime.h
+compiler.hipclang-staging-rocm-60303.exe=/opt/compiler-explorer/clang-rocm-trunk/bin/clang++
+compiler.hipclang-staging-rocm-60303.semver=staging-6.3.3
+compiler.hipclang-staging-rocm-60303.name=clang staging rocm-6.3.3
+compiler.hipclang-staging-rocm-60303.nvdisasm=/opt/compiler-explorer/clang-rocm-trunk/bin/llvm-objdump
+compiler.hipclang-staging-rocm-60303.objdumper=/opt/compiler-explorer/clang-rocm-trunk/bin/llvm-objdump
+compiler.hipclang-staging-rocm-60303.options=-x hip --cuda-device-only -O3 --rocm-path=/opt/compiler-explorer/libs/rocm/6.3.3 -include hip/hip_runtime.h
 
 group.nvrtc.compilers=nvrtc121:nvrtc120u1:nvrtc120:nvrtc118:nvrtc117u1:nvrtc117:nvrtc116u2:nvrtc116u1:nvrtc116:nvrtc115u2:nvrtc115u1:nvrtc115:nvrtc114u1:nvrtc114:nvrtc113u1:nvrtc113:nvrtc112u2:nvrtc112u1:nvrtc112:nvrtc111u1:nvrtc111:nvrtc11u1:nvrtc11
 group.nvrtc.compilerType=nvrtc
@@ -614,7 +650,7 @@ libs.nsimd.versions.22.path=/opt/compiler-explorer/libs/nsimd/v2.2/cuda/include
 libs.nsimd.versions.301.version=3.0.1
 libs.nsimd.versions.301.path=/opt/compiler-explorer/libs/nsimd/v3.0.1/cuda/include
 libs.hip-amd.name=HIP (AMD Platform)
-libs.hip-amd.versions=60102:60002:50700:50203:50103:50002:40502
+libs.hip-amd.versions=60303:60204:60102:60002:50700:50203:50103:50002:40502
 libs.hip-amd.url=https://github.com/ROCm-Developer-Tools/hipamd
 libs.hip-amd.versions.40502.version=4.5.2
 libs.hip-amd.versions.40502.path=/opt/compiler-explorer/libs/rocm/4.5.2
@@ -630,3 +666,7 @@ libs.hip-amd.versions.60002.version=6.0.2
 libs.hip-amd.versions.60002.path=/opt/compiler-explorer/libs/rocm/6.0.2
 libs.hip-amd.versions.60102.version=6.1.2
 libs.hip-amd.versions.60102.path=/opt/compiler-explorer/libs/rocm/6.1.2
+libs.hip-amd.versions.60204.version=6.2.4
+libs.hip-amd.versions.60204.path=/opt/compiler-explorer/libs/rocm/6.2.4
+libs.hip-amd.versions.60303.version=6.3.3
+libs.hip-amd.versions.60303.path=/opt/compiler-explorer/libs/rocm/6.3.3
diff --git a/etc/config/go.amazon.properties b/etc/config/go.amazon.properties
index dd4e15467..8f57560e1 100644
--- a/etc/config/go.amazon.properties
+++ b/etc/config/go.amazon.properties
@@ -1,5 +1,5 @@
 compilers=&gccgo:&gl:&cross
-defaultCompiler=gl1232
+defaultCompiler=gl1242
 objdumper=/opt/compiler-explorer/gcc-13.1.0/bin/objdump
 
 group.gccgo.compilers=&gccgoassert:gccgo494:gccgo630:gccgo720:gccgo830:gccgo930:gccgo950:gccgo102:gccgo105:gccgo111:gccgo112:gccgo113:gccgo114:gccgo121:gccgo122:gccgo123:gccgo124:gccgo131:gccgo132:gccgo133:gccgo141:gccgo142
@@ -92,7 +92,7 @@ group.gl.isSemVer=true
 ###### x86 GC ######
 group.x86gl.compilers=&amd64gl:&386gl
 
-group.amd64gl.compilers=6g141:gl172:gl185:gl187:gl192:gl194:gl1100:gl1101:gl1110:gl1120:gl1130:gl1140:gl1150:gl1160:gl1170:gl1180:gl1190:gl1200:gl1210:gl1221:gl1232:gltip
+group.amd64gl.compilers=6g141:gl172:gl185:gl187:gl192:gl194:gl1100:gl1101:gl1110:gl1120:gl1130:gl1140:gl1150:gl1160:gl1170:gl1180:gl1190:gl1200:gl12113:gl12212:gl1238:gl1242:gltip
 group.amd64gl.groupName=x86-64 GC
 group.amd64gl.baseName=x86-64 gc
 
@@ -152,21 +152,24 @@ compiler.gl1190.goroot=/opt/compiler-explorer/golang-1.19/go
 compiler.gl1200.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.gl1200.semver=1.20
 compiler.gl1200.goroot=/opt/compiler-explorer/golang-1.20/go
-compiler.gl1210.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.gl1210.semver=1.21
-compiler.gl1210.goroot=/opt/compiler-explorer/golang-1.21.0/go
-compiler.gl1221.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.gl1221.semver=1.22.1
-compiler.gl1221.goroot=/opt/compiler-explorer/golang-1.22.1/go
-compiler.gl1232.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.gl1232.semver=1.23.2
-compiler.gl1232.goroot=/opt/compiler-explorer/golang-1.23.2/go
+compiler.gl12113.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.gl12113.semver=1.21.13
+compiler.gl12113.goroot=/opt/compiler-explorer/golang-1.21.13/go
+compiler.gl12212.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.gl12212.semver=1.22.12
+compiler.gl12212.goroot=/opt/compiler-explorer/golang-1.22.12/go
+compiler.gl1238.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
+compiler.gl1238.semver=1.23.8
+compiler.gl1238.goroot=/opt/compiler-explorer/golang-1.23.8/go
+compiler.gl1242.exe=/opt/compiler-explorer/golang-1.24.8/go/bin/go
+compiler.gl1242.semver=1.24.2
+compiler.gl1242.goroot=/opt/compiler-explorer/golang-1.24.2/go
 compiler.gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.gltip.semver=(tip)
 compiler.gltip.isNightly=true
 compiler.gltip.goroot=/opt/compiler-explorer/go-tip
 
-group.386gl.compilers=386_gl114:386_gl115:386_gl116:386_gl117:386_gl118:386_gl119:386_gl120:386_gl121:386_gl122:386_gl123:386_gltip
+group.386gl.compilers=386_gl114:386_gl115:386_gl116:386_gl117:386_gl118:386_gl119:386_gl120:386_gl121:386_gl122:386_gl123:386_gl124:386_gltip
 group.386gl.groupName=x86 GC
 group.386gl.baseName=x86 gc
 group.386gl.goarch=386
@@ -185,12 +188,14 @@ compiler.386_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.386_gl119.semver=1.19
 compiler.386_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.386_gl120.semver=1.20
-compiler.386_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.386_gl121.semver=1.21
-compiler.386_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.386_gl122.semver=1.22.1
-compiler.386_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.386_gl123.semver=1.23.2
+compiler.386_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.386_gl121.semver=1.21.13
+compiler.386_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.386_gl122.semver=1.22.12
+compiler.386_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.386_gl123.semver=1.23.8
+compiler.386_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.386_gl124.semver=1.24.2
 compiler.386_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.386_gltip.semver=(tip)
 compiler.386_gltip.isNightly=true
@@ -200,7 +205,7 @@ compiler.386_gltip.isNightly=true
 group.armgl.compilers=&arm32gl:&arm64gl
 group.armgl.supportsBinary=false
 
-group.arm32gl.compilers=arm_gl114:arm_gl115:arm_gl116:arm_gl117:arm_gl118:arm_gl119:arm_gl120:arm_gl121:arm_gl122:arm_gl123:arm_gltip
+group.arm32gl.compilers=arm_gl114:arm_gl115:arm_gl116:arm_gl117:arm_gl118:arm_gl119:arm_gl120:arm_gl121:arm_gl122:arm_gl123:arm_gl124:arm_gltip
 group.arm32gl.groupName=ARM GC
 group.arm32gl.baseName=ARM gc
 group.arm32gl.goarch=arm
@@ -219,17 +224,19 @@ compiler.arm_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.arm_gl119.semver=1.19
 compiler.arm_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.arm_gl120.semver=1.20
-compiler.arm_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.arm_gl121.semver=1.21
-compiler.arm_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.arm_gl122.semver=1.22.1
-compiler.arm_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.arm_gl123.semver=1.23.2
+compiler.arm_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.arm_gl121.semver=1.21.13
+compiler.arm_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.arm_gl122.semver=1.22.12
+compiler.arm_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.arm_gl123.semver=1.23.8
+compiler.arm_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.arm_gl124.semver=1.24.2
 compiler.arm_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.arm_gltip.semver=(tip)
 compiler.arm_gltip.isNightly=true
 
-group.arm64gl.compilers=arm64_gl114:arm64_gl115:arm64_gl116:arm64_gl117:arm64_gl118:arm64_gl119:arm64_gl120:arm64_gl121:arm64_gl122:arm64_gl123:arm64_gltip
+group.arm64gl.compilers=arm64_gl114:arm64_gl115:arm64_gl116:arm64_gl117:arm64_gl118:arm64_gl119:arm64_gl120:arm64_gl121:arm64_gl122:arm64_gl123:arm64_gl124:arm64_gltip
 group.arm64gl.groupName=ARM64 GC
 group.arm64gl.baseName=ARM64 gc
 group.arm64gl.goarch=arm64
@@ -248,12 +255,14 @@ compiler.arm64_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.arm64_gl119.semver=1.19
 compiler.arm64_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.arm64_gl120.semver=1.20
-compiler.arm64_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.arm64_gl121.semver=1.21
-compiler.arm64_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.arm64_gl122.semver=1.22.1
-compiler.arm64_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.arm64_gl123.semver=1.23.2
+compiler.arm64_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.arm64_gl121.semver=1.21.13
+compiler.arm64_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.arm64_gl122.semver=1.22.12
+compiler.arm64_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.arm64_gl123.semver=1.23.8
+compiler.arm64_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.arm64_gl124.semver=1.24.2
 compiler.arm64_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.arm64_gltip.semver=(tip)
 compiler.arm64_gltip.isNightly=true
@@ -265,7 +274,7 @@ group.mipsgl.supportsBinary=false
 
 group.mips32gl.compilers=&mips32legl:&mips32begl
 
-group.mips32legl.compilers=mipsle_gl114:mipsle_gl115:mipsle_gl116:mipsle_gl117:mipsle_gl118:mipsle_gl119:mipsle_gl120:mipsle_gl121:mipsle_gl122:mipsle_gl123:mipsle_gltip
+group.mips32legl.compilers=mipsle_gl114:mipsle_gl115:mipsle_gl116:mipsle_gl117:mipsle_gl118:mipsle_gl119:mipsle_gl120:mipsle_gl121:mipsle_gl122:mipsle_gl123:mipsle_gl124:mipsle_gltip
 group.mips32legl.goarch=mipsle
 group.mips32legl.groupName=MIPSLE GC
 group.mips32legl.baseName=MIPSLE gc
@@ -284,17 +293,19 @@ compiler.mipsle_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.mipsle_gl119.semver=1.19
 compiler.mipsle_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.mipsle_gl120.semver=1.20
-compiler.mipsle_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.mipsle_gl121.semver=1.21
-compiler.mipsle_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.mipsle_gl122.semver=1.22.1
-compiler.mipsle_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.mipsle_gl123.semver=1.23.2
+compiler.mipsle_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.mipsle_gl121.semver=1.21.13
+compiler.mipsle_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.mipsle_gl122.semver=1.22.12
+compiler.mipsle_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.mipsle_gl123.semver=1.23.8
+compiler.mipsle_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.mipsle_gl124.semver=1.24.2
 compiler.mipsle_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.mipsle_gltip.semver=(tip)
 compiler.mipsle_gltip.isNightly=true
 
-group.mips32begl.compilers=mips_gl114:mips_gl115:mips_gl116:mips_gl117:mips_gl118:mips_gl119:mips_gl120:mips_gl121:mips_gl122:mips_gl123:mips_gltip
+group.mips32begl.compilers=mips_gl114:mips_gl115:mips_gl116:mips_gl117:mips_gl118:mips_gl119:mips_gl120:mips_gl121:mips_gl122:mips_gl123:mips_gl124:mips_gltip
 group.mips32begl.goarch=mips
 group.mips32begl.groupName=MIPS GC
 group.mips32begl.baseName=MIPS gc
@@ -313,19 +324,21 @@ compiler.mips_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.mips_gl119.semver=1.19
 compiler.mips_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.mips_gl120.semver=1.20
-compiler.mips_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.mips_gl121.semver=1.21
-compiler.mips_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.mips_gl122.semver=1.22.1
-compiler.mips_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.mips_gl123.semver=1.23.2
+compiler.mips_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.mips_gl121.semver=1.21.13
+compiler.mips_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.mips_gl122.semver=1.22.12
+compiler.mips_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.mips_gl123.semver=1.23.8
+compiler.mips_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.mips_gl124.semver=1.24.2
 compiler.mips_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.mips_gltip.semver=(tip)
 compiler.mips_gltip.isNightly=true
 
 group.mips64gl.compilers=&mips64legl:&mips64begl
 
-group.mips64begl.compilers=mips64_gl114:mips64_gl115:mips64_gl116:mips64_gl117:mips64_gl118:mips64_gl119:mips64_gl120:mips64_gl121:mips64_gl122:mips64_gl123:mips64_gltip
+group.mips64begl.compilers=mips64_gl114:mips64_gl115:mips64_gl116:mips64_gl117:mips64_gl118:mips64_gl119:mips64_gl120:mips64_gl121:mips64_gl122:mips64_gl123:mips64_gl124:mips64_gltip
 group.mips64begl.goarch=mips64
 group.mips64begl.groupName=MIPS64 GC
 group.mips64begl.baseName=MIPS64 gc
@@ -344,18 +357,20 @@ compiler.mips64_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.mips64_gl119.semver=1.19
 compiler.mips64_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.mips64_gl120.semver=1.20
-compiler.mips64_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.mips64_gl121.semver=1.21
-compiler.mips64_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.mips64_gl122.semver=1.22.1
-compiler.mips64_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.mips64_gl123.semver=1.23.2
+compiler.mips64_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.mips64_gl121.semver=1.21.13
+compiler.mips64_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.mips64_gl122.semver=1.22.12
+compiler.mips64_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.mips64_gl123.semver=1.23.8
+compiler.mips64_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.mips64_gl124.semver=1.24.2
 compiler.mips64_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.mips64_gltip.semver=(tip)
 compiler.mips64_gltip.isNightly=true
 
 
-group.mips64legl.compilers=mips64le_gl114:mips64le_gl115:mips64le_gl116:mips64le_gl117:mips64le_gl118:mips64le_gl119:mips64le_gl120:mips64le_gl121:mips64le_gl122:mips64le_gl123:mips64le_gltip
+group.mips64legl.compilers=mips64le_gl114:mips64le_gl115:mips64le_gl116:mips64le_gl117:mips64le_gl118:mips64le_gl119:mips64le_gl120:mips64le_gl121:mips64le_gl122:mips64le_gl123:mips64le_gl124:mips64le_gltip
 group.mips64legl.goarch=mips64le
 group.mips64legl.groupName=MIPS64LE GC
 group.mips64legl.baseName=MIPS64LE gc
@@ -375,12 +390,14 @@ compiler.mips64le_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.mips64le_gl119.semver=1.19
 compiler.mips64le_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.mips64le_gl120.semver=1.20
-compiler.mips64le_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.mips64le_gl121.semver=1.21
-compiler.mips64le_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.mips64le_gl122.semver=1.22.1
-compiler.mips64le_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.mips64le_gl123.semver=1.23.2
+compiler.mips64le_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.mips64le_gl121.semver=1.21.13
+compiler.mips64le_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.mips64le_gl122.semver=1.22.12
+compiler.mips64le_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.mips64le_gl123.semver=1.23.8
+compiler.mips64le_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.mips64le_gl124.semver=1.24.2
 compiler.mips64le_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.mips64le_gltip.semver=(tip)
 compiler.mips64le_gltip.isNightly=true
@@ -391,7 +408,7 @@ group.ppcgl.compilers=&ppc64legl:&ppc64begl
 group.ppcgl.supportsBinary=false
 group.ppcgl.instructionSet=powerpc
 
-group.ppc64legl.compilers=ppc64le_gl114:ppc64le_gl115:ppc64le_gl116:ppc64le_gl117:ppc64le_gl118:ppc64le_gl119:ppc64le_gl120:ppc64le_gl121:ppc64le_gl122:ppc64le_gl123:ppc64le_gltip
+group.ppc64legl.compilers=ppc64le_gl114:ppc64le_gl115:ppc64le_gl116:ppc64le_gl117:ppc64le_gl118:ppc64le_gl119:ppc64le_gl120:ppc64le_gl121:ppc64le_gl122:ppc64le_gl123:ppc64le_gl124:ppc64le_gltip
 group.ppc64legl.goarch=ppc64le
 group.ppc64legl.groupName=POWER64LE GC
 group.ppc64legl.baseName=POWER64LE gc
@@ -410,18 +427,20 @@ compiler.ppc64le_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.ppc64le_gl119.semver=1.19
 compiler.ppc64le_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.ppc64le_gl120.semver=1.20
-compiler.ppc64le_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.ppc64le_gl121.semver=1.21
-compiler.ppc64le_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.ppc64le_gl122.semver=1.22.1
-compiler.ppc64le_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.ppc64le_gl123.semver=1.23.2
+compiler.ppc64le_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.ppc64le_gl121.semver=1.21.13
+compiler.ppc64le_gl122.exe=/opt/compiler-explorer/golang-1.22.1)/go/bin/go
+compiler.ppc64le_gl122.semver=1.22.12
+compiler.ppc64le_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.ppc64le_gl123.semver=1.23.8
+compiler.ppc64le_gl124.exe=/opt/compiler-explorer/golang-1.2+.2/go/bin/go
+compiler.ppc64le_gl124.semver=1.2+.2
 compiler.ppc64le_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.ppc64le_gltip.semver=(tip)
 compiler.ppc64le_gltip.isNightly=true
 
 
-group.ppc64begl.compilers=ppc64_gl114:ppc64_gl115:ppc64_gl116:ppc64_gl117:ppc64_gl118:ppc64_gl119:ppc64_gl120:ppc64_gl121:ppc64_gl122:ppc64_gl123:ppc64_gltip
+group.ppc64begl.compilers=ppc64_gl114:ppc64_gl115:ppc64_gl116:ppc64_gl117:ppc64_gl118:ppc64_gl119:ppc64_gl120:ppc64_gl121:ppc64_gl122:ppc64_gl123:ppc64_gl124:ppc64_gltip
 group.ppc64begl.goarch=ppc64
 group.ppc64begl.groupName=POWER64 GC
 group.ppc64begl.baseName=POWER64 gc
@@ -440,19 +459,21 @@ compiler.ppc64_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.ppc64_gl119.semver=1.19
 compiler.ppc64_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.ppc64_gl120.semver=1.20
-compiler.ppc64_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.ppc64_gl121.semver=1.21
-compiler.ppc64_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.ppc64_gl122.semver=1.22.1
-compiler.ppc64_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.ppc64_gl123.semver=1.23.2
+compiler.ppc64_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.ppc64_gl121.semver=1.21.13
+compiler.ppc64_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.ppc64_gl122.semver=1.22.12
+compiler.ppc64_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.ppc64_gl123.semver=1.23.8
+compiler.ppc64_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.ppc64_gl124.semver=1.24.2
 compiler.ppc64_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.ppc64_gltip.semver=(tip)
 compiler.ppc64_gltip.isNightly=true
 
 
 ###### RSICV GL ######
-group.riscvgl.compilers=riscv64_gl114:riscv64_gl115:riscv64_gl116:riscv64_gl117:riscv64_gl118:riscv64_gl119:riscv64_gl120:riscv64_gl121:riscv64_gl122:riscv64_gl123:riscv64_gltip
+group.riscvgl.compilers=riscv64_gl114:riscv64_gl115:riscv64_gl116:riscv64_gl117:riscv64_gl118:riscv64_gl119:riscv64_gl120:riscv64_gl121:riscv64_gl122:riscv64_gl123:riscv64_gl124:riscv64_gltip
 group.riscvgl.supportsBinary=false
 group.riscvgl.groupName=RISC-V 64 GC
 group.riscvgl.baseName=RISC-V 64 gc
@@ -472,19 +493,21 @@ compiler.riscv64_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.riscv64_gl119.semver=1.19
 compiler.riscv64_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.riscv64_gl120.semver=1.20
-compiler.riscv64_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.riscv64_gl121.semver=1.21
-compiler.riscv64_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.riscv64_gl122.semver=1.22.1
-compiler.riscv64_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.riscv64_gl123.semver=1.23.2
+compiler.riscv64_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.riscv64_gl121.semver=1.21.13
+compiler.riscv64_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.riscv64_gl122.semver=1.22.12
+compiler.riscv64_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.riscv64_gl123.semver=1.23.8
+compiler.riscv64_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.riscv64_gl124.semver=1.24.2
 compiler.riscv64_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.riscv64_gltip.semver=(tip)
 compiler.riscv64_gltip.isNightly=true
 
 
 ##### s390x GL ######
-group.s390xgl.compilers=s390x_gl114:s390x_gl115:s390x_gl116:s390x_gl117:s390x_gl118:s390x_gl119:s390x_gl120:s390x_gl121:s390x_gl122:s390x_gl123:s390x_gltip
+group.s390xgl.compilers=s390x_gl114:s390x_gl115:s390x_gl116:s390x_gl117:s390x_gl118:s390x_gl119:s390x_gl120:s390x_gl121:s390x_gl122:s390x_gl123:s390x_gl124:s390x_gltip
 group.s390xgl.supportsBinary=false
 group.s390xgl.goarch=s390x
 group.s390xgl.groupName=S390X GC
@@ -505,12 +528,14 @@ compiler.s390x_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.s390x_gl119.semver=1.19
 compiler.s390x_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.s390x_gl120.semver=1.20
-compiler.s390x_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.s390x_gl121.semver=1.21
-compiler.s390x_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.s390x_gl122.semver=1.22.1
-compiler.s390x_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.s390x_gl123.semver=1.23.2
+compiler.s390x_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.s390x_gl121.semver=1.21.13
+compiler.s390x_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.s390x_gl122.semver=1.22.12
+compiler.s390x_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.s390x_gl123.semver=1.23.8
+compiler.s390x_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.s390x_gl124.semver=1.24.2
 compiler.s390x_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.s390x_gltip.semver=(tip)
 compiler.s390x_gltip.isNightly=true
@@ -518,7 +543,7 @@ compiler.s390x_gltip.isNightly=true
 
 ###############################
 # WASM GO
-group.wasmgl.compilers=wasm_gl114:wasm_gl115:wasm_gl116:wasm_gl117:wasm_gl118:wasm_gl119:wasm_gl120:wasm_gl121:wasm_gl122:wasm_gl123:wasm_gltip
+group.wasmgl.compilers=wasm_gl114:wasm_gl115:wasm_gl116:wasm_gl117:wasm_gl118:wasm_gl119:wasm_gl120:wasm_gl121:wasm_gl122:wasm_gl123:wasm_gl124:wasm_gltip
 group.wasmgl.supportsBinary=false
 group.wasmgl.groupName=WASM GC
 group.wasmgl.goarch=wasm
@@ -539,12 +564,14 @@ compiler.wasm_gl119.exe=/opt/compiler-explorer/golang-1.19/go/bin/go
 compiler.wasm_gl119.semver=1.19
 compiler.wasm_gl120.exe=/opt/compiler-explorer/golang-1.20/go/bin/go
 compiler.wasm_gl120.semver=1.20
-compiler.wasm_gl121.exe=/opt/compiler-explorer/golang-1.21.0/go/bin/go
-compiler.wasm_gl121.semver=1.21
-compiler.wasm_gl122.exe=/opt/compiler-explorer/golang-1.22.1/go/bin/go
-compiler.wasm_gl122.semver=1.22.1
-compiler.wasm_gl123.exe=/opt/compiler-explorer/golang-1.23.2/go/bin/go
-compiler.wasm_gl123.semver=1.23.2
+compiler.wasm_gl121.exe=/opt/compiler-explorer/golang-1.21.13/go/bin/go
+compiler.wasm_gl121.semver=1.21.13
+compiler.wasm_gl122.exe=/opt/compiler-explorer/golang-1.22.12/go/bin/go
+compiler.wasm_gl122.semver=1.22.12
+compiler.wasm_gl123.exe=/opt/compiler-explorer/golang-1.23.8/go/bin/go
+compiler.wasm_gl123.semver=1.23.8
+compiler.wasm_gl124.exe=/opt/compiler-explorer/golang-1.24.2/go/bin/go
+compiler.wasm_gl124.semver=1.24.2
 compiler.wasm_gltip.exe=/opt/compiler-explorer/go-tip/bin/go
 compiler.wasm_gltip.semver=(tip)
 compiler.wasm_gltip.isNightly=true
diff --git a/etc/config/sponsors.yaml b/etc/config/sponsors.yaml
index 1a8228819..e7e701fa7 100644
--- a/etc/config/sponsors.yaml
+++ b/etc/config/sponsors.yaml
@@ -513,3 +513,4 @@ levels:
       - elliot
       - Cemalettin Dervis
       - Yuki ITO
+      - André Brand
diff --git a/etc/config/sway.amazon.properties b/etc/config/sway.amazon.properties
index d6ac0bdd4..affbce3b8 100644
--- a/etc/config/sway.amazon.properties
+++ b/etc/config/sway.amazon.properties
@@ -10,7 +10,7 @@ group.sway.irArg=--ir final
 group.sway.supportsBinary=true
 group.sway.supportsAsm=true
 group.sway.asmArg=--asm all
-group.sway.options=--offline
+group.sway.options=build --offline
 
 compiler.swayv0667.exe=/opt/compiler-explorer/sway-0.66.7/forc-binaries/forc
 compiler.swayv0667.semver=0.66.7
diff --git a/etc/config/swift.amazon.properties b/etc/config/swift.amazon.properties
index 6c726eb86..d8b63dac7 100644
--- a/etc/config/swift.amazon.properties
+++ b/etc/config/swift.amazon.properties
@@ -1,6 +1,6 @@
 compilers=&swift:&arm-swift
-demangler=/opt/compiler-explorer/swift-6.0.3/usr/bin/swift-demangle
-defaultCompiler=swift603
+demangler=/opt/compiler-explorer/swift-6.1/usr/bin/swift-demangle
+defaultCompiler=swift61
 objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump
 
 #################################
@@ -8,7 +8,7 @@ objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump
 #################################
 
 # swift (x86_64)
-group.swift.compilers=swift311:swift402:swift403:swift41:swift411:swift412:swift42:swift50:swift51:swift52:swift53:swift54:swift55:swift56:swift57:swift58:swift59:swift510:swift603:swiftdevsnapshot:swiftnightly
+group.swift.compilers=swift311:swift402:swift403:swift41:swift411:swift412:swift42:swift50:swift51:swift52:swift53:swift54:swift55:swift56:swift57:swift58:swift59:swift510:swift603:swift61:swiftdevsnapshot:swiftnightly
 group.swift.isSemVer=true
 group.swift.groupName=swift (x86-64)
 group.swift.baseName=x86-64 swiftc
@@ -38,6 +38,9 @@ compiler.swiftdevsnapshot.semver=devsnapshot
 
 # 6.x (x86)
 
+compiler.swift61.exe=/opt/compiler-explorer/swift-6.1/usr/bin/swiftc
+compiler.swift61.semver=6.1
+
 compiler.swift603.exe=/opt/compiler-explorer/swift-6.0.3/usr/bin/swiftc
 compiler.swift603.semver=6.0.3
 
diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts
index 77c31ff15..4f5b63b25 100644
--- a/lib/base-compiler.ts
+++ b/lib/base-compiler.ts
@@ -1153,6 +1153,10 @@ export class BaseCompiler {
         return options;
     }
 
+    prepareOptRemarksArgs(options: string[], outputFilename: string): string[] {
+        return options.concat(unwrap(this.compiler.optArg));
+    }
+
     prepareArguments(
         userOptions: string[],
         filters: ParseFiltersAndOutputOptions,
@@ -1172,7 +1176,7 @@ export class BaseCompiler {
         }
 
         if (this.compiler.supportsOptOutput && backendOptions.produceOptInfo) {
-            options = options.concat(unwrap(this.compiler.optArg));
+            options = this.prepareOptRemarksArgs(options, outputFilename);
         }
         if (this.compiler.supportsStackUsageOutput && backendOptions.produceStackUsageInfo) {
             options = options.concat(unwrap(this.compiler.stackUsageArg));
@@ -2322,6 +2326,10 @@ export class BaseCompiler {
         }
     }
 
+    getOptYamlPath(dirPath: string, outputFilebase: string): string {
+        return path.join(dirPath, `${outputFilebase}.opt.yaml`);
+    }
+
     async doCompilation(
         inputFilename: string,
         dirPath: string,
@@ -2456,7 +2464,7 @@ export class BaseCompiler {
 
         asmResult.tools = toolsResult;
         if (this.compiler.supportsOptOutput && backendOptions.produceOptInfo) {
-            const optPath = path.join(dirPath, `${this.outputFilebase}.opt.yaml`);
+            const optPath = this.getOptYamlPath(dirPath, this.outputFilebase);
             if (await utils.fileExists(optPath)) {
                 asmResult.optPath = optPath;
             }
diff --git a/lib/compilers/rust.ts b/lib/compilers/rust.ts
index ee77a612e..0f8a85022 100644
--- a/lib/compilers/rust.ts
+++ b/lib/compilers/rust.ts
@@ -22,8 +22,8 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 
+import {readdirSync} from 'node:fs';
 import path from 'node:path';
-
 import {SemVer} from 'semver';
 import _ from 'underscore';
 
@@ -62,6 +62,10 @@ export class RustCompiler extends BaseCompiler {
         // are only available for Nightly
         this.compiler.supportsRustMacroExpView = isNightly;
         this.compiler.supportsRustHirView = isNightly;
+        if (this.compiler.name === 'rustc nightly') {
+            this.compiler.supportsOptOutput = true;
+            // not setting compiler.optArg, overriding prepareOptRemarksArgs instead (2 args needed)
+        }
 
         this.compiler.irArg = ['--emit', 'llvm-ir'];
         this.compiler.minIrArgs = ['--emit=llvm-ir'];
@@ -245,6 +249,23 @@ export class RustCompiler extends BaseCompiler {
         return opts;
     }
 
+    override getOptYamlPath(dirPath: string, outputFilebase: string): string {
+        // Find a file in dirPath that ends with codegen.opt.yaml, and return it
+        // A bit of a hack, but it works for now
+        const files = readdirSync(dirPath);
+        for (const file of files) {
+            if (file.endsWith('codegen.opt.yaml')) {
+                return path.join(dirPath, file);
+            }
+        }
+        return '';
+    }
+
+    override prepareOptRemarksArgs(options: string[], outputFilename: string): string[] {
+        const outputDir = path.dirname(outputFilename);
+        return options.concat(['-Cremark=all', `-Zremark-dir=${outputDir}`]);
+    }
+
     override optionsForFilter(filters: ParseFiltersAndOutputOptions, outputFilename: string, userOptions?: string[]) {
         let options = ['-C', 'debuginfo=2', '-o', this.filename(outputFilename)];
 
diff --git a/package-lock.json b/package-lock.json
index 3a91058d4..30beb9b95 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13640,9 +13640,9 @@
       "license": "MIT"
     },
     "node_modules/vite": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz",
-      "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==",
+      "version": "6.2.6",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz",
+      "integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/static/panes/gccdump-view.ts b/static/panes/gccdump-view.ts
index 6e3b2eda7..41d0a803f 100644
--- a/static/panes/gccdump-view.ts
+++ b/static/panes/gccdump-view.ts
@@ -230,6 +230,17 @@ export class GccDump extends MonacoPane<monaco.editor.IStandaloneCodeEditor, Gcc
             // Prevent overflowing the window
             const dropdown = this.selectize.dropdown_content;
             dropdown.style.maxHeight = `${window.innerHeight - dropdown.getBoundingClientRect().top - 10}px`;
+            if (!this.selectedPass) return;
+            const activeOption = Object.entries(this.selectize.options).find(
+                op => op[1].filename_suffix === this.selectedPass,
+            );
+            const selectedPassId = activeOption![0];
+            const option = this.selectize.getOption(selectedPassId);
+            // Workaround for a TomSelect glitch: onFocus sets the active option to the first one
+            // on the first re-open, so this setActiveOption call needs to be delayed.
+            setTimeout(() => {
+                this.selectize.setActiveOption(option);
+            }, 0);
         });
         this.selectize.on('dropdown_close', () => {
             // scroll back to the selection on the next open


Test patch:
diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml
index 0c3682ce3..68cca8af7 100644
--- a/.github/workflows/test-and-deploy.yml
+++ b/.github/workflows/test-and-deploy.yml
@@ -35,7 +35,7 @@ jobs:
           verbose: true
 
   build_minimum_support:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: Checkout repository
         uses: actions/checkout@v4