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 +}
