commit:     e82087ca0b0e9bf65d7292ce7cd6150298bbcaa9
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 16 19:19:09 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Jan 16 19:25:41 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e82087ca

dev-lang/orc: backport AVX backend fix

Closes: https://bugs.gentoo.org/948164
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-lang/orc/files/orc-0.4.40-avx.patch | 77 +++++++++++++++++++++++++++++++++
 dev-lang/orc/orc-0.4.40-r1.ebuild       | 45 +++++++++++++++++++
 2 files changed, 122 insertions(+)

diff --git a/dev-lang/orc/files/orc-0.4.40-avx.patch 
b/dev-lang/orc/files/orc-0.4.40-avx.patch
new file mode 100644
index 000000000000..41dddd0c7248
--- /dev/null
+++ b/dev-lang/orc/files/orc-0.4.40-avx.patch
@@ -0,0 +1,77 @@
+https://bugs.gentoo.org/948164
+https://gitlab.freedesktop.org/gstreamer/orc/-/issues/82
+https://gitlab.freedesktop.org/gstreamer/orc/-/commit/8e48a61e27f4d3e60bf2e3e7873fd61363db6ff8
+
+From 8e48a61e27f4d3e60bf2e3e7873fd61363db6ff8 Mon Sep 17 00:00:00 2001
+From: "L. E. Segovia" <[email protected]>
+Date: Wed, 15 Jan 2025 22:20:14 +0000
+Subject: [PATCH] avx: Fix sqrtps encoding, it's an unary operator
+
+Fixes #82
+
+Part-of: <https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/213>
+---
+ orc/orcavx.h       | 4 ++--
+ orc/orcprogram-c.c | 1 +
+ orc/orcrules-avx.c | 2 +-
+ testsuite/test.orc | 8 ++++++++
+ 4 files changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/orc/orcavx.h b/orc/orcavx.h
+index f564b63f..ca95bd02 100644
+--- a/orc/orcavx.h
++++ b/orc/orcavx.h
+@@ -224,8 +224,8 @@ ORC_API void orc_avx_restore_mxcsr (OrcCompiler *compiler);
+ #define orc_avx_emit_mulps(p,s1,s2,d) orc_vex_emit_cpuinsn_size(p, 
ORC_X86_mulps, 32, s1, s2, d, ORC_X86_AVX_VEX256_PREFIX)
+ #define orc_avx_sse_emit_divps(p,s1,s2,d) orc_vex_emit_cpuinsn_size(p, 
ORC_X86_divps, 32, s1, s2, d, ORC_X86_AVX_VEX128_PREFIX)
+ #define orc_avx_emit_divps(p,s1,s2,d) orc_vex_emit_cpuinsn_size(p, 
ORC_X86_divps, 32, s1, s2, d, ORC_X86_AVX_VEX256_PREFIX)
+-#define orc_avx_sse_emit_sqrtps(p,s1,s2,d) orc_vex_emit_cpuinsn_size(p, 
ORC_X86_sqrtps, 32, s1, s2, d, ORC_X86_AVX_VEX128_PREFIX)
+-#define orc_avx_emit_sqrtps(p,s1,s2,d) orc_vex_emit_cpuinsn_size(p, 
ORC_X86_sqrtps, 32, s1, s2, d, ORC_X86_AVX_VEX256_PREFIX)
++#define orc_avx_sse_emit_sqrtps(p,s1,d) orc_vex_emit_cpuinsn_size(p, 
ORC_X86_sqrtps, 32, s1, 0, d, ORC_X86_AVX_VEX128_PREFIX)
++#define orc_avx_emit_sqrtps(p,s1,d) orc_vex_emit_cpuinsn_size(p, 
ORC_X86_sqrtps, 32, s1, 0, d, ORC_X86_AVX_VEX256_PREFIX)
+ #define orc_avx_sse_emit_andps(p,s1,s2,d) orc_vex_emit_cpuinsn_size(p, 
ORC_X86_andps, 32, s1, s2, d, ORC_X86_AVX_VEX128_PREFIX)
+ #define orc_avx_emit_andps(p,s1,s2,d) orc_vex_emit_cpuinsn_size(p, 
ORC_X86_andps, 32, s1, s2, d, ORC_X86_AVX_VEX256_PREFIX)
+ #define orc_avx_sse_emit_orps(p,s1,s2,d) orc_vex_emit_cpuinsn_size(p, 
ORC_X86_orps, 32, s1, s2, d, ORC_X86_AVX_VEX128_PREFIX)
+diff --git a/orc/orcprogram-c.c b/orc/orcprogram-c.c
+index 49e0b73b..1c9ff7cf 100644
+--- a/orc/orcprogram-c.c
++++ b/orc/orcprogram-c.c
+@@ -106,6 +106,7 @@ orc_target_c_get_asm_preamble (void)
+ {
+   return "\n"
+     "/* begin Orc C target preamble */\n"
++    "#include <math.h>\n"
+     "#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))\n"
+     "#define ORC_ABS(a) ((a)<0 ? -(a) : (a))\n"
+     "#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))\n"
+diff --git a/orc/orcrules-avx.c b/orc/orcrules-avx.c
+index 66925982..5cffe145 100644
+--- a/orc/orcrules-avx.c
++++ b/orc/orcrules-avx.c
+@@ -2678,7 +2678,7 @@ BINARY (addf, addps)
+ BINARY (subf, subps)
+ BINARY (mulf, mulps)
+ BINARY (divf, divps)
+-BINARY (sqrtf, sqrtps)
++UNARY (sqrtf, sqrtps)
+ BINARY (orf, orps)
+ BINARY (andf, andps)
+ 
+diff --git a/testsuite/test.orc b/testsuite/test.orc
+index 3e9c5790..9ff53236 100644
+--- a/testsuite/test.orc
++++ b/testsuite/test.orc
+@@ -2806,3 +2806,11 @@ x4 addb argb, x, c128
+ mulslq t1, d1, p1
+ shrsq t1, t1, 27
+ convql d1, t1
++
++.function sqrt_nx
++.dest 4 dst float
++.source 4 src float
++.floatparam 4 k
++.temp 4 tmp
++sqrtf tmp, src
++mulf dst, tmp, k
+-- 
+GitLab

diff --git a/dev-lang/orc/orc-0.4.40-r1.ebuild 
b/dev-lang/orc/orc-0.4.40-r1.ebuild
new file mode 100644
index 000000000000..2a32020e4637
--- /dev/null
+++ b/dev-lang/orc/orc-0.4.40-r1.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson-multilib
+
+DESCRIPTION="The Oil Runtime Compiler, a just-in-time compiler for array 
operations"
+HOMEPAGE="https://gstreamer.freedesktop.org/";
+SRC_URI="https://gstreamer.freedesktop.org/src/${PN}/${P}.tar.xz";
+
+LICENSE="BSD BSD-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~x86 
~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
+RESTRICT="!test? ( test )"
+IUSE="gtk-doc static-libs test"
+
+BDEPEND="
+       gtk-doc? (
+               dev-util/gtk-doc
+               app-text/docbook-xml-dtd:4.1.2
+               app-text/docbook-xml-dtd:4.3
+       )
+"
+
+DOCS=( CONTRIBUTING.md README RELEASE )
+
+PATCHES=(
+       "${FILESDIR}"/${P}-avx.patch
+)
+
+multilib_src_configure() {
+       # FIXME: handle backends per arch? What about cross-compiling for the 
other arches?
+       local emesonargs=(
+               -Ddefault_library=$(usex static-libs both shared)
+               -Dorc-backend=all
+               -Dorc-test=enabled
+               -Dbenchmarks=disabled
+               -Dexamples=disabled
+               $(meson_native_use_feature gtk-doc gtk_doc)
+               $(meson_feature test tests)
+               -Dtools=enabled # requires orc-test
+       )
+       meson_src_configure
+}

Reply via email to