[arch-commits] Commit in libretro-duckstation/trunk (PKGBUILD glibc-2.34.patch)
Antonio Rojas
arojas at gemini.archlinux.org
Sat Mar 12 19:23:20 UTC 2022
Date: Saturday, March 12, 2022 @ 19:23:20
Author: arojas
Revision: 1150136
9437DD3815A7A9169E3D3946AFF5D95098BC6FF5 key removal
Added:
libretro-duckstation/trunk/glibc-2.34.patch
Modified:
libretro-duckstation/trunk/PKGBUILD
------------------+
PKGBUILD | 12 ++++-
glibc-2.34.patch | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 128 insertions(+), 3 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2022-03-12 19:22:38 UTC (rev 1150135)
+++ PKGBUILD 2022-03-12 19:23:20 UTC (rev 1150136)
@@ -2,7 +2,7 @@
pkgname=libretro-duckstation
pkgver=2105
-pkgrel=1
+pkgrel=2
pkgdesc='Sony PlayStation core'
arch=(x86_64)
url=https://github.com/stenzek/duckstation
@@ -18,8 +18,10 @@
git
)
_commit=79aaf908a602e03a16698976791c82baafa794d0
-source=(git+https://github.com/stenzek/duckstation.git#commit=${_commit})
-sha256sums=(SKIP)
+source=(git+https://github.com/stenzek/duckstation.git#commit=${_commit}
+ glibc-2.34.patch)
+sha256sums=('SKIP'
+ 'fef29c81a9a42451a64a1cc32c6489b67bd9464ed5eedca4c03bc7853b8f2a11')
pkgver() {
cd duckstation
@@ -27,6 +29,10 @@
git rev-list --count HEAD
}
+prepare() {
+ patch -d duckstation -p1 < glibc-2.34.patch # Fix build with glibc 2.34
+}
+
build() {
cmake -S duckstation -B build \
-DCMAKE_BUILD_TYPE=None \
Added: glibc-2.34.patch
===================================================================
--- glibc-2.34.patch (rev 0)
+++ glibc-2.34.patch 2022-03-12 19:23:20 UTC (rev 1150136)
@@ -0,0 +1,119 @@
+diff --git a/src/core/cpu_core.h b/src/core/cpu_core.h
+index 66059635..252ee860 100644
+--- a/src/core/cpu_core.h
++++ b/src/core/cpu_core.h
+@@ -56,6 +56,9 @@ struct State
+
+ // data cache (used as scratchpad)
+ std::array<u8, DCACHE_SIZE> dcache = {};
++
++ static constexpr u32 GPRRegisterOffset(u32 index) { return offsetof(State, regs.r) + (sizeof(u32) * index); }
++ static constexpr u32 GTERegisterOffset(u32 index) { return offsetof(State, gte_regs.r32) + (sizeof(u32) * index); }
+ };
+
+ extern State g_state;
+diff --git a/src/core/cpu_recompiler_code_generator.cpp b/src/core/cpu_recompiler_code_generator.cpp
+index 1c7ae0db..a454d4f5 100644
+--- a/src/core/cpu_recompiler_code_generator.cpp
++++ b/src/core/cpu_recompiler_code_generator.cpp
+@@ -14,11 +14,6 @@ Log_SetChannel(CPU::Recompiler);
+
+ namespace CPU::Recompiler {
+
+-u32 CodeGenerator::CalculateRegisterOffset(Reg reg)
+-{
+- return u32(offsetof(State, regs.r[0]) + (static_cast<u32>(reg) * sizeof(u32)));
+-}
+-
+ bool CodeGenerator::CompileBlock(const CodeBlock* block, CodeBlock::HostCodePointer* out_host_code,
+ u32* out_host_code_size)
+ {
+@@ -1991,7 +1986,7 @@ Value CodeGenerator::DoGTERegisterRead(u32 index)
+
+ default:
+ {
+- EmitLoadCPUStructField(value.host_reg, RegSize_32, offsetof(State, gte_regs.r32[index]));
++ EmitLoadCPUStructField(value.host_reg, RegSize_32, State::GTERegisterOffset(index));
+ }
+ break;
+ }
+@@ -2020,7 +2015,7 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value)
+ {
+ // sign-extend z component of vector registers
+ Value temp = ConvertValueSize(value.ViewAsSize(RegSize_16), RegSize_32, true);
+- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[index]), temp);
++ EmitStoreCPUStructField(State::GTERegisterOffset(index), temp);
+ return;
+ }
+ break;
+@@ -2033,7 +2028,7 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value)
+ {
+ // zero-extend unsigned values
+ Value temp = ConvertValueSize(value.ViewAsSize(RegSize_16), RegSize_32, false);
+- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[index]), temp);
++ EmitStoreCPUStructField(State::GTERegisterOffset(index), temp);
+ return;
+ }
+ break;
+@@ -2044,15 +2039,15 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value)
+ Value temp = m_register_cache.AllocateScratch(RegSize_32);
+
+ // SXY0 <- SXY1
+- EmitLoadCPUStructField(temp.host_reg, RegSize_32, offsetof(State, gte_regs.r32[13]));
+- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[12]), temp);
++ EmitLoadCPUStructField(temp.host_reg, RegSize_32, State::GTERegisterOffset(13));
++ EmitStoreCPUStructField(State::GTERegisterOffset(12), temp);
+
+ // SXY1 <- SXY2
+- EmitLoadCPUStructField(temp.host_reg, RegSize_32, offsetof(State, gte_regs.r32[14]));
+- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[13]), temp);
++ EmitLoadCPUStructField(temp.host_reg, RegSize_32, State::GTERegisterOffset(14));
++ EmitStoreCPUStructField(State::GTERegisterOffset(13), temp);
+
+ // SXY2 <- SXYP
+- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[14]), value);
++ EmitStoreCPUStructField(State::GTERegisterOffset(14), value);
+ return;
+ }
+ break;
+@@ -2075,7 +2070,7 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value)
+ default:
+ {
+ // written as-is, 2x16 or 1x32 bits
+- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[index]), value);
++ EmitStoreCPUStructField(State::GTERegisterOffset(index), value);
+ return;
+ }
+ }
+diff --git a/src/core/cpu_recompiler_code_generator.h b/src/core/cpu_recompiler_code_generator.h
+index b5999233..94af334e 100644
+--- a/src/core/cpu_recompiler_code_generator.h
++++ b/src/core/cpu_recompiler_code_generator.h
+@@ -19,7 +19,6 @@ public:
+ CodeGenerator(JitCodeBuffer* code_buffer);
+ ~CodeGenerator();
+
+- static u32 CalculateRegisterOffset(Reg reg);
+ static const char* GetHostRegName(HostReg reg, RegSize size = HostPointerSize);
+ static void AlignCodeBuffer(JitCodeBuffer* code_buffer);
+
+diff --git a/src/core/cpu_recompiler_code_generator_generic.cpp b/src/core/cpu_recompiler_code_generator_generic.cpp
+index b652cb24..8b8b2d76 100644
+--- a/src/core/cpu_recompiler_code_generator_generic.cpp
++++ b/src/core/cpu_recompiler_code_generator_generic.cpp
+@@ -5,13 +5,13 @@ namespace CPU::Recompiler {
+
+ void CodeGenerator::EmitLoadGuestRegister(HostReg host_reg, Reg guest_reg)
+ {
+- EmitLoadCPUStructField(host_reg, RegSize_32, CalculateRegisterOffset(guest_reg));
++ EmitLoadCPUStructField(host_reg, RegSize_32, State::GPRRegisterOffset(static_cast<u32>(guest_reg)));
+ }
+
+ void CodeGenerator::EmitStoreGuestRegister(Reg guest_reg, const Value& value)
+ {
+ DebugAssert(value.size == RegSize_32);
+- EmitStoreCPUStructField(CalculateRegisterOffset(guest_reg), value);
++ EmitStoreCPUStructField(State::GPRRegisterOffset(static_cast<u32>(guest_reg)), value);
+ }
+
+ void CodeGenerator::EmitStoreInterpreterLoadDelay(Reg reg, const Value& value)
More information about the arch-commits
mailing list