Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [DISCUSSION] Adding ARM64EC support to FFmpeg
@ 2025-09-22 10:04 harish.rajaselvan--- via ffmpeg-devel
  2025-09-22 11:48 ` [FFmpeg-devel] " Martin Storsjö via ffmpeg-devel
  2025-09-27  9:00 ` Rémi Denis-Courmont via ffmpeg-devel
  0 siblings, 2 replies; 13+ messages in thread
From: harish.rajaselvan--- via ffmpeg-devel @ 2025-09-22 10:04 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: harish.rajaselvan

Hi everyone,
 
I'm reaching out regarding ARM64EC support for FFmpeg on Windows.

I have been working on enabling ARM64EC compilation and have successfully built FFmpeg binaries for this target. To achieve this it required modifications to the build configuration files and to the gas-preprocessor.pl script (maintained in https://github.com/FFmpeg/gas-preprocessor). Should changes to gas-preprocessor.pl be submitted as a pull request to its repository, or also sent to this mailing list for review?
 
I would like to submit these patches upstream for review and feedback from the community in the near future in this thread. Please let us know if we can proceed with submitting them, or if there are any challenges we should anticipate for enabling for this target.
 
Additionally, I would like to know the point of contact for hosting ARM64EC binaries (for example, via btbn or gyan.dev), so that people targeting this platform can have access to FFmpeg builds for this target.
 
Looking forward to your feedback.
 
Thanks,
Harish Raja Selvan
_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-09-22 10:04 [FFmpeg-devel] [DISCUSSION] Adding ARM64EC support to FFmpeg harish.rajaselvan--- via ffmpeg-devel
@ 2025-09-22 11:48 ` Martin Storsjö via ffmpeg-devel
  2025-09-23 13:03   ` Harish Raja Selvan via ffmpeg-devel
  2025-09-27  9:00 ` Rémi Denis-Courmont via ffmpeg-devel
  1 sibling, 1 reply; 13+ messages in thread
From: Martin Storsjö via ffmpeg-devel @ 2025-09-22 11:48 UTC (permalink / raw)
  To: harish.rajaselvan--- via ffmpeg-devel
  Cc: harish.rajaselvan, Martin Storsjö

On Mon, 22 Sep 2025, harish.rajaselvan--- via ffmpeg-devel wrote:

> I have been working on enabling ARM64EC compilation and have 
> successfully built FFmpeg binaries for this target. To achieve this it 
> required modifications to the build configuration files and to the 
> gas-preprocessor.pl script (maintained in 
> https://github.com/FFmpeg/gas-preprocessor). Should changes to 
> gas-preprocessor.pl be submitted as a pull request to its repository, or 
> also sent to this mailing list for review?

I'm not sure if we have a policy for this; reviewing it on the mailing 
list probably gives it more visibility than as a PR in a repo that very 
few follows.

> I would like to submit these patches upstream for review and feedback 
> from the community in the near future in this thread. Please let us know 
> if we can proceed with submitting them, or if there are any challenges 
> we should anticipate for enabling for this target.

Feel free to send patches for review - although I cannot guarantee that we 
are willing to integrate the changes.

As far as I can see, for building for ARM64EC with MSVC, the changes 
required mainly are for passing "-machine:arm64ec" to lib.exe, and for 
filtering out the -arm64EC option from the compiler command in 
gas-preprocessor.pl.

Such changes probably are straightforward and probably can be accepted.

If building with https://github.com/mstorsjo/llvm-mingw/releases (with the 
latest 2 releases), no such changes are needed, and it's possible to 
configure a build with just "--cross-prefix=arm64ec-w64-mingw32- 
--target-os=mingw32 --arch=aarch64".

The other, much more major issue, is that all aarch64 assembly may need to 
be tweaked to work in ARM64EC mode. This may need rewrites (or ugly 
conditionals) to avoid using registers that are forbidden in ARM64EC mode.

(Building with Clang makes this aspect much more straightforward, as Clang 
gives warnings about the use of forbidden registers, like "warning: 
register Q25 is disallowed on ARM64EC.".)

We would have to see the proposed patches to see if these changes are 
palatable or if they are too outrageous for us to want to take them 
upstream.

> Additionally, I would like to know the point of contact for hosting 
> ARM64EC binaries (for example, via btbn or gyan.dev), so that people 
> targeting this platform can have access to FFmpeg builds for this 
> target.

Upstream ffmpeg can't make any promises about this; you'd have to convince 
the developers providing those builds to do it. Personally, I'm 
unconvinced.

For users of the plain ffmpeg.exe binaries, I don't see any reason why 
anyone would want to run an ARM64EC version rather than a plain regular 
ARM64 build. (The main theoretical reason is if intending to load a binary 
x86_64 plugin, but I don't know what plugins that would be?)

The main reason for wanting an ARM64EC build of ffmpeg is for integrating 
into an app that still runs in emulated x86_64 mode - then you'd want 
linking against the libraries and not just using the commandline 
executable. I'm not familiar with those binary distributions, whether they 
include such libraries as well, or only the end executables. If they do 
provide libraries as well, I could see some value in it, but it's of 
course totally up to them whether they feel it's worth the effort (I doubt 
it).

// Martin

_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-09-22 11:48 ` [FFmpeg-devel] " Martin Storsjö via ffmpeg-devel
@ 2025-09-23 13:03   ` Harish Raja Selvan via ffmpeg-devel
  2025-09-24 12:15     ` Martin Storsjö via ffmpeg-devel
  0 siblings, 1 reply; 13+ messages in thread
From: Harish Raja Selvan via ffmpeg-devel @ 2025-09-23 13:03 UTC (permalink / raw)
  To: Martin Storsjö, harish.rajaselvan--- via ffmpeg-devel
  Cc: Harish Raja Selvan

[-- Attachment #1: Type: text/plain, Size: 5259 bytes --]

Hello,

Following up on the discussion above on ARM64EC support, I’ve prepared a patch to
update gas-preprocessor.pl that enables FFmpeg to be compiled for ARM64EC
target on Windows. This change ensures that -m flags are not eliminated for
ARM64EC target, allowing assembly files to preprocess as expected. This
avoids build failures.

The patch has been tested locally & allows FFmpeg to build successfully for
ARM64EC target. Attaching the patch file and in-lined here for your reference.

Thanks,
Harish Raja Selvan.

In-Lined patch:

diff --git a/gas-preprocessor.pl b/gas-preprocessor.pl
index 62c1a04..b2e38c0 100755
--- a/gas-preprocessor.pl
+++ b/gas-preprocessor.pl
@@ -166,6 +166,7 @@ if ($as_type ne "armasm") {
     @gcc_cmd = grep ! /^-D/, @gcc_cmd;
 } else {
     @preprocess_c_cmd = grep ! /^-m/, @preprocess_c_cmd;
+    @preprocess_c_cmd = grep ! /^ARM64EC/, @preprocess_c_cmd;

     @preprocess_c_cmd = grep ! /^-G/, @preprocess_c_cmd;
     @preprocess_c_cmd = grep ! /^-W/, @preprocess_c_cmd;
@@ -195,7 +196,8 @@ if ($as_type ne "armasm") {
     # which doesn't support any of the common compiler/preprocessor options.
     @gcc_cmd = grep ! /^-D/, @gcc_cmd;
     @gcc_cmd = grep ! /^-U/, @gcc_cmd;
-    @gcc_cmd = grep ! /^-m/, @gcc_cmd;
+    @gcc_cmd = grep !/^-m/, @gcc_cmd if !grep /-arm64EC/, @gcc_cmd;
+    @gcc_cmd = grep ! /^-arm64EC/, @gcc_cmd;
     @gcc_cmd = grep ! /^-M/, @gcc_cmd;
     @gcc_cmd = grep ! /^-c$/, @gcc_cmd;
     @gcc_cmd = grep ! /^-I/, @gcc_cmd;
--
2.50.1.windows.1

________________________________
From: Martin Storsjö <martin@martin.st>
Sent: 22 September 2025 17:18
To: harish.rajaselvan--- via ffmpeg-devel <ffmpeg-devel@ffmpeg.org>
Cc: Harish Raja Selvan <harish.rajaselvan@multicorewareinc.com>
Subject: Re: [FFmpeg-devel] [DISCUSSION] Adding ARM64EC support to FFmpeg

On Mon, 22 Sep 2025, harish.rajaselvan--- via ffmpeg-devel wrote:

> I have been working on enabling ARM64EC compilation and have
> successfully built FFmpeg binaries for this target. To achieve this it
> required modifications to the build configuration files and to the
> gas-preprocessor.pl script (maintained in
> https://github.com/FFmpeg/gas-preprocessor). Should changes to
> gas-preprocessor.pl be submitted as a pull request to its repository, or
> also sent to this mailing list for review?

I'm not sure if we have a policy for this; reviewing it on the mailing
list probably gives it more visibility than as a PR in a repo that very
few follows.

> I would like to submit these patches upstream for review and feedback
> from the community in the near future in this thread. Please let us know
> if we can proceed with submitting them, or if there are any challenges
> we should anticipate for enabling for this target.

Feel free to send patches for review - although I cannot guarantee that we
are willing to integrate the changes.

As far as I can see, for building for ARM64EC with MSVC, the changes
required mainly are for passing "-machine:arm64ec" to lib.exe, and for
filtering out the -arm64EC option from the compiler command in
gas-preprocessor.pl.

Such changes probably are straightforward and probably can be accepted.

If building with https://github.com/mstorsjo/llvm-mingw/releases (with the
latest 2 releases), no such changes are needed, and it's possible to
configure a build with just "--cross-prefix=arm64ec-w64-mingw32-
--target-os=mingw32 --arch=aarch64".

The other, much more major issue, is that all aarch64 assembly may need to
be tweaked to work in ARM64EC mode. This may need rewrites (or ugly
conditionals) to avoid using registers that are forbidden in ARM64EC mode.

(Building with Clang makes this aspect much more straightforward, as Clang
gives warnings about the use of forbidden registers, like "warning:
register Q25 is disallowed on ARM64EC.".)

We would have to see the proposed patches to see if these changes are
palatable or if they are too outrageous for us to want to take them
upstream.

> Additionally, I would like to know the point of contact for hosting
> ARM64EC binaries (for example, via btbn or gyan.dev), so that people
> targeting this platform can have access to FFmpeg builds for this
> target.

Upstream ffmpeg can't make any promises about this; you'd have to convince
the developers providing those builds to do it. Personally, I'm
unconvinced.

For users of the plain ffmpeg.exe binaries, I don't see any reason why
anyone would want to run an ARM64EC version rather than a plain regular
ARM64 build. (The main theoretical reason is if intending to load a binary
x86_64 plugin, but I don't know what plugins that would be?)

The main reason for wanting an ARM64EC build of ffmpeg is for integrating
into an app that still runs in emulated x86_64 mode - then you'd want
linking against the libraries and not just using the commandline
executable. I'm not familiar with those binary distributions, whether they
include such libraries as well, or only the end executables. If they do
provide libraries as well, I could see some value in it, but it's of
course totally up to them whether they feel it's worth the effort (I doubt
it).

// Martin


[-- Attachment #2: 0001-ffmpeg-gas-preprocessor-enable-ARM64EC-compilation.patch --]
[-- Type: application/octet-stream, Size: 1666 bytes --]

[-- Attachment #3: Type: text/plain, Size: 163 bytes --]

_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-09-23 13:03   ` Harish Raja Selvan via ffmpeg-devel
@ 2025-09-24 12:15     ` Martin Storsjö via ffmpeg-devel
  2025-09-30  4:58       ` Harish Raja Selvan via ffmpeg-devel
  0 siblings, 1 reply; 13+ messages in thread
From: Martin Storsjö via ffmpeg-devel @ 2025-09-24 12:15 UTC (permalink / raw)
  To: Harish Raja Selvan
  Cc: harish.rajaselvan--- via ffmpeg-devel, Martin Storsjö

On Tue, 23 Sep 2025, Harish Raja Selvan wrote:

> Following up on the discussion above on ARM64EC support, I’ve prepared a
> patch to
> update gas-preprocessor.pl that enables FFmpeg to be compiled for ARM64EC
> target on Windows. This change ensures that -m flags are not eliminated for
> ARM64EC target, allowing assembly files to preprocess as expected. This
> avoids build failures.

It is entirely unclear to me what -m flags you would expect to be seeing 
here. I can understand the part of the patch to filter out the flag 
-arm64EC, but I don't see where a flag "ARM64EC" would come from for 
preprocess_c_cd, or where any -m flags would come from.

To make sense of the patch, I would suggest you at least explain what kind 
of configure flags you are using in combination with these patches.

My attempts with ARM64EC with MSVC are configured with --arch=arm64 
--target-os=win32 --toolchain=msvc --extra-cflags="-arm64EC" 
--extra-ldflags="-machine:arm64ec". I guess you are doing something other 
than that, if you're getting -m flags somewhere.

Ideally, post both your build system patches and the gas-preprocessor 
patch at the same time.

Also, don't top post.

// Martin
_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-09-22 10:04 [FFmpeg-devel] [DISCUSSION] Adding ARM64EC support to FFmpeg harish.rajaselvan--- via ffmpeg-devel
  2025-09-22 11:48 ` [FFmpeg-devel] " Martin Storsjö via ffmpeg-devel
@ 2025-09-27  9:00 ` Rémi Denis-Courmont via ffmpeg-devel
  2025-10-03 12:44   ` Martin Storsjö via ffmpeg-devel
  1 sibling, 1 reply; 13+ messages in thread
From: Rémi Denis-Courmont via ffmpeg-devel @ 2025-09-27  9:00 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Rémi Denis-Courmont

Hello,

Le maanantaina 22. syyskuuta 2025, 13.04.40 Itä-Euroopan kesäaika 
harish.rajaselvan--- via ffmpeg-devel a écrit :
> I'm reaching out regarding ARM64EC support for FFmpeg on Windows.

I don't really see the point. There is no use case for FFmpeg proper (the 
executable) to target ARM64EC, and the use care for libav.* seem flimsy at 
best.

To make matters worse, this would really only serve proprietary software. 
Open-source software should, and most likely can, be recompiled to the normal 
Windows/UEFI variant of the AArch64 ABI. If this was a simple question of 
tweaking build parameters and some macros, that could be acceptable.

But this will constrain the assembler is aggravating. It probably requires 
major changes already, but even if it doesn't, I don't think we should 
constrain future assembler code nor expect developers to support the JIT-
friendly ABI.

> Additionally, I would like to know the point of contact for hosting ARM64EC
> binaries (for example, via btbn or gyan.dev), so that people targeting this
> platform can have access to FFmpeg builds for this target.

I don't think that the community resources should be spent on making those 
builds at all. It looks like that would only benefit proprietary Windows apps 
ISVs. That being the case, they should fund the CI setup and running 
themselves.

-- 
ヅニ-クーモン・レミ
Hagalund ny stad, f.d. Finska republik Nylands



_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-09-24 12:15     ` Martin Storsjö via ffmpeg-devel
@ 2025-09-30  4:58       ` Harish Raja Selvan via ffmpeg-devel
  2025-10-03 12:27         ` Martin Storsjö via ffmpeg-devel
  0 siblings, 1 reply; 13+ messages in thread
From: Harish Raja Selvan via ffmpeg-devel @ 2025-09-30  4:58 UTC (permalink / raw)
  To: Martin Storsjö
  Cc: harish.rajaselvan--- via ffmpeg-devel, Harish Raja Selvan

[-- Attachment #1: Type: text/plain, Size: 2036 bytes --]

Hello,

Thank you for your feedback and questions about the ARM64EC patch.
I’m sharing the build system patch for enabling ARM64EC support in FFmpeg.
This patch addresses .def file generation for ARM64EC builds on Windows.

In-Lined patch:

diff --git a/compat/windows/makedef b/compat/windows/makedef
index add8222d13..59e300ab61 100755
--- a/compat/windows/makedef
+++ b/compat/windows/makedef
@@ -108,7 +108,12 @@ if [ -n "$NM" ]; then
               cut -d' ' -f3 |
               sed -e "s/^${prefix}//")
 else
-    dump=$(dumpbin.exe -linkermember:1 ${libname} |
+    member=1
+    arch=$VSCMD_ARG_TGT_ARCH
+    if [ "${arch^^}" = "ARM64EC" ]; then
+        member=32
+    fi
+        dump=$(dumpbin.exe -linkermember:${member} ${libname} |
               sed -e '/public symbols/,$!d' -e '/^ \{1,\}Summary/,$d' -e "s/ \{1,\}${prefix}/ /" -e 's/ \{1,\}/ /g' |
               tail -n +2 |
               cut -d' ' -f3)
@@ -121,7 +126,7 @@ list=""
 for exp in ${regex}; do
     list="${list}"'
 '$(echo "${dump}" |
-          grep "^${exp}" |
+          grep "^${exp}" | awk '!/\$exit_thunk/{print}' |
           sed -e 's/^/    /')
 done

--
2.50.0.windows.1

For reference, here is the configuration used to build FFmpeg with MSVC for ARM64EC:
I've also attached the same configuration in ffmpeg-arm64ec-msvc.config for convenience.

# find_ar_lib resolves to /usr/share/automake-1.16/ar-lib
AR_LIB="$(find_ar_lib)"
AR_CMD="${AR_LIB} lib.exe -machine:arm64ec"
ARCH="arm64"

"${SRC_DIR}/configure" \
    --toolchain=msvc \
    --target-os=win64 \
    --cc=cl.exe \
    --cxx=cl.exe \
    --extra-cxxflags="-arm64EC" \
    --extra-cflags="-arm64EC" \
    --extra-ldflags="/machine:arm64ec" \
    --as="armasm64.exe -machine ARM64EC" \
    --ld=link.exe \
    --ar="${AR_CMD}" \
    --arch="${ARCH}"

In my setup, this configuration requires the gas-preprocessor.pl patch, as the build otherwise ends with a “GNU assembler not found” error.

Thanks,
Harish Raja Selvan.

[-- Attachment #2: 0001-compat-windows-makedef-fix-.def-generation-for-ARM64.patch --]
[-- Type: application/octet-stream, Size: 2032 bytes --]

[-- Attachment #3: 0001-ffmpeg-gas-preprocessor-enable-ARM64EC-compilation.patch --]
[-- Type: application/octet-stream, Size: 1666 bytes --]

[-- Attachment #4: config-arm64ec-msvc.config --]
[-- Type: application/xml, Size: 480 bytes --]

[-- Attachment #5: Type: text/plain, Size: 163 bytes --]

_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-09-30  4:58       ` Harish Raja Selvan via ffmpeg-devel
@ 2025-10-03 12:27         ` Martin Storsjö via ffmpeg-devel
  0 siblings, 0 replies; 13+ messages in thread
From: Martin Storsjö via ffmpeg-devel @ 2025-10-03 12:27 UTC (permalink / raw)
  To: Harish Raja Selvan
  Cc: harish.rajaselvan--- via ffmpeg-devel, Martin Storsjö

On Tue, 30 Sep 2025, Harish Raja Selvan wrote:

> Thank you for your feedback and questions about the ARM64EC patch.
> I’m sharing the build system patch for enabling ARM64EC support in FFmpeg.
> This patch addresses .def file generation for ARM64EC builds on Windows.
> 
> In-Lined patch:
> 
> diff --git a/compat/windows/makedef b/compat/windows/makedef
> index add8222d13..59e300ab61 100755
> --- a/compat/windows/makedef
> +++ b/compat/windows/makedef
> @@ -108,7 +108,12 @@ if [ -n "$NM" ]; then
>                cut -d' ' -f3 |
>                sed -e "s/^${prefix}//")
>  else
> -    dump=$(dumpbin.exe -linkermember:1 ${libname} |
> +    member=1
> +    arch=$VSCMD_ARG_TGT_ARCH
> +    if [ "${arch^^}" = "ARM64EC" ]; then
> +        member=32
> +    fi

We shouldn't inspect any VSCMD_* env variables here in order to deduce the 
target architecture. (Also, how do you initialize the environment in order 
to get such a variable set? If you just open a regular arm64 VS command 
prompt, which AFAIK is the default environment for arm64ec compilation, I 
wouldn't expect such a variable to be set?)

Instead we need to deduce the architecture from something else here - 
potentially by passing some parameter from configure.

> +        dump=$(dumpbin.exe -linkermember:${member} ${libname} |
>                sed -e '/public symbols/,$!d' -e '/^ \{1,\}Summary/,$d' -e
> "s/ \{1,\}${prefix}/ /" -e 's/ \{1,\}/ /g' |
>                tail -n +2 |
>                cut -d' ' -f3)
> @@ -121,7 +126,7 @@ list=""
>  for exp in ${regex}; do
>      list="${list}"'
>  '$(echo "${dump}" |
> -          grep "^${exp}" |
> +          grep "^${exp}" | awk '!/\$exit_thunk/{print}' |

I presume the added awk expression here is just to filter out any line 
that doesn't match '$exit_thunk'? Why not just a "grep -v '$exit_thunk'"? 
And that can be in the dump expression as well, in order not to need to do 
that filtering for each expression. (If we add it to the dump expression, 
we do need to include it in both variants of the dump expression though; 
it's possible to build arm64ec with mingw style tools as well.)

For me, this doesn't really end up matching any symbols - I only get the 
data symbols. What does EXTERN_PREFIX end up being set to in your 
configurations; for me it's an empty string. Does it get set to "#" in 
your case?


> For reference, here is the configuration used to build FFmpeg with MSVC for
> ARM64EC:
> I've also attached the same configuration in ffmpeg-arm64ec-msvc.config for
> convenience.
> 
> # find_ar_lib resolves to /usr/share/automake-1.16/ar-lib
> AR_LIB="$(find_ar_lib)"
> AR_CMD="${AR_LIB} lib.exe -machine:arm64ec"

Why do you need any extra ar-lib here? This works fine for me with just 
AR_CMD="lib.exe -machine:arm64ec".

> ARCH="arm64"
> 
> "${SRC_DIR}/configure" \
>     --toolchain=msvc \
>     --target-os=win64 \
>     --cc=cl.exe \
>     --cxx=cl.exe \
>     --extra-cxxflags="-arm64EC" \
>     --extra-cflags="-arm64EC" \
>     --extra-ldflags="/machine:arm64ec" \
>     --as="armasm64.exe -machine ARM64EC" \
>     --ld=link.exe \
>     --ar="${AR_CMD}" \
>     --arch="${ARCH}"
> 
> In my setup, this configuration requires the gas-preprocessor.pl patch, as
> the build otherwise ends with a “GNU assembler not found” error.

Thanks - with this context, it's easier to review your gas-preprocessor 
patch.

As far as I can see, this builds fine without any extra modifications of 
ffmpeg, as long as gas-preprocessor is patched. Building with 
--enable-shared would require the suggested changes to makedef, but those 
changes aren't entirely right in order to work for me in my tests.

I have an alternative suggestion on how to do the gas-preprocessor patch - 
I'll send those patches and CC you on them.

Another alternative for gas-preprocessor would be to just look for the 
-arm64EC option, and inject the "-machine arm64ec" options implicitly in 
that case (it turns out I actually had such a patch lying around since 
experiments in 2021), but it's perhaps more transparent to force the 
caller of gas-preprocessor to provide the option.

// Martin
_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-09-27  9:00 ` Rémi Denis-Courmont via ffmpeg-devel
@ 2025-10-03 12:44   ` Martin Storsjö via ffmpeg-devel
  2025-10-03 14:32     ` Rémi Denis-Courmont via ffmpeg-devel
  0 siblings, 1 reply; 13+ messages in thread
From: Martin Storsjö via ffmpeg-devel @ 2025-10-03 12:44 UTC (permalink / raw)
  To: Rémi Denis-Courmont via ffmpeg-devel
  Cc: Rémi Denis-Courmont, harish.rajaselvan, Martin Storsjö

On Sat, 27 Sep 2025, Rémi Denis-Courmont via ffmpeg-devel wrote:

> But this will constrain the assembler is aggravating. It probably requires
> major changes already, but even if it doesn't, I don't think we should
> constrain future assembler code nor expect developers to support the JIT-
> friendly ABI.

This is indeed a core concern of mine as well.

I don't mind adding build system tweaks to make it possible to build, but 
having to modify all the assembly to make it properly compatible with 
arm64ec isn't really feasible or maintainable.

Given the information in your other mails, it sounds like you don't make 
any modifications to the aarch64 assembly at all - so it uses all the 
aarch64 registers, including the ones that are disallowed to use in 
arm64ec mode.

If building with MSVC with the suggested configuration, building produces 
a very large number of warnings of this kind:

Z:\home\martin\code\ffmpeg-msvc-arm64ec\libavutil\aarch64\float_dsp_neon.o.asm(1056) 
: warning A4253: this instruction uses forbidden registers
         fmul            v16.4s, v0.4s,  v4.4s

The same also is produced if building with Clang:

src/libavutil/aarch64/float_dsp_neon.S:32:9: warning: register Q16 is 
disallowed on ARM64EC.
         fmul v16.4s, v0.4s, v4.4s
         ^

I've tried to talk to acquaintances to figure out exactly what one can 
expect to work and what one can't expect to work, if using assembly 
routines with all registers in arm64ec mode.

First off, calling a C function, which turns out to be in x86_64 mode, 
will clobber those registers. But for assembly which only works as leaf 
functions, that don't call C functions (and those C functions are internal 
in ffmpeg, which also are in arm64ec mode, not x86_64), this shouldn't be 
happening.

Secondly, unwinding through such functions won't work correctly either. 
But we never provide any unwind info for assembly functions, and don't 
expect to unwind through them anyway, so that's probably not an issue 
either.

Inspecting (and possibly single-stepping through) such code in a debugger 
could break.

One case which really can break though, is if some other process suspends 
and resumes the thread - as a form of manual scheduling. This sounds 
exotic, but I'm told these things do exist.

All in all, it sounds to me like these things actually can work, at least 
with some amount of caveats. In that case, it sounds acceptable to add 
build system tweaks to make it buildable, as long as the assembly itself 
doesn't need compromises for this mode.

I tested a checkasm.exe built in this mode, both with MSVC and with Clang, 
and it seems to run fine in a single-shot test at least.

// Martin
_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-10-03 12:44   ` Martin Storsjö via ffmpeg-devel
@ 2025-10-03 14:32     ` Rémi Denis-Courmont via ffmpeg-devel
  2025-10-03 15:11       ` Martin Storsjö via ffmpeg-devel
  0 siblings, 1 reply; 13+ messages in thread
From: Rémi Denis-Courmont via ffmpeg-devel @ 2025-10-03 14:32 UTC (permalink / raw)
  To: FFmpeg development discussions and patches,
	Martin Storsjö via ffmpeg-devel,
	Rémi Denis-Courmont via ffmpeg-devel
  Cc: harish.rajaselvan, Martin Storsjö, Rémi Denis-Courmont



Le 3 octobre 2025 15:44:56 GMT+03:00, "Martin Storsjö via ffmpeg-devel" <ffmpeg-devel@ffmpeg.org> a écrit :
>First off, calling a C function, which turns out to be in x86_64 mode, will clobber those registers.

Will it? I thought code JITed from x86_64 to AArch64 could *not* access the reserved registers, and that was why they were forbidden (which barely makes sense to me).

I don't understand how this can be a problem except for green threads and long jumps. But that shouldn't be allowed to happen if you're using FFmpeg anyway - it could dead lock - regardless of the instruction set.

But again, the use case seems very unclear. I'm sure some people are using x86 FFmpeg on Arm, but how do you credibly end up with an AArch64 FFmpeg inside an Arm64EC process?

We shouldn't go out of our way to support an academic exercise or some weird proprietary insane code.
_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-10-03 14:32     ` Rémi Denis-Courmont via ffmpeg-devel
@ 2025-10-03 15:11       ` Martin Storsjö via ffmpeg-devel
  2025-10-03 16:39         ` Rémi Denis-Courmont via ffmpeg-devel
  0 siblings, 1 reply; 13+ messages in thread
From: Martin Storsjö via ffmpeg-devel @ 2025-10-03 15:11 UTC (permalink / raw)
  To: Rémi Denis-Courmont
  Cc: FFmpeg development discussions and patches, harish.rajaselvan,
	Martin Storsjö

On Fri, 3 Oct 2025, Rémi Denis-Courmont wrote:

> Le 3 octobre 2025 15:44:56 GMT+03:00, "Martin Storsjö via ffmpeg-devel" <ffmpeg-devel@ffmpeg.org> a écrit :
>> First off, calling a C function, which turns out to be in x86_64 mode, 
>> will clobber those registers.
>
> Will it? I thought code JITed from x86_64 to AArch64 could *not* access 
> the reserved registers, and that was why they were forbidden (which 
> barely makes sense to me).

The JITed code itself probably doesn't don't use those registers, no, and 
probably not the JIT compiler itself either. I'm not entirely sure about 
which case actually would clobber them - but I'm told this is a case that 
can do it. Perhaps there's some serialization to/from CONTEXT in some of 
the transitions (perhaps when invoking the JIT compiler?).

> But again, the use case seems very unclear.

Requesting us to provide premade builds for this mode seems very unclear, 
yes - that sounds unreasonable to me.

Wanting to use the libav* libraries in a hybrid x86_64/arm64ec process 
seems like something quite plausible though. Not something I'd go out of 
my way to complicate other things to accomplish, but reasonable build 
system tweaks to allow such builds sound tolerable to me.

> I'm sure some people are using x86 FFmpeg on Arm, but how do you 
> credibly end up with an AArch64 FFmpeg inside an Arm64EC process?

I don't quite understand what you mean here. Do you mean how one does to 
end up with the aarch64 assembly touching all registers, in an arm64ec 
process? Or how one does to retrofit an aarch64 ffmpeg DLL into an arm64ec 
process?

For the former - it works just fine to build and assemble our current 
aarch64 assembly, unmodified, with both MSVC and LLVM build tools. Both of 
them complain loudly about code touching the unavailable registers, but it 
still builds fine, and runs fine in practice.

// Martin
_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-10-03 15:11       ` Martin Storsjö via ffmpeg-devel
@ 2025-10-03 16:39         ` Rémi Denis-Courmont via ffmpeg-devel
  2025-10-03 20:49           ` Stephen Hutchinson via ffmpeg-devel
  0 siblings, 1 reply; 13+ messages in thread
From: Rémi Denis-Courmont via ffmpeg-devel @ 2025-10-03 16:39 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Rémi Denis-Courmont

Le perjantaina 3. lokakuuta 2025, 18.11.55 Itä-Euroopan kesäaika Martin 
Storsjö a écrit :
> Wanting to use the libav* libraries in a hybrid x86_64/arm64ec process
> seems like something quite plausible though. Not something I'd go out of
> my way to complicate other things to accomplish, but reasonable build
> system tweaks to allow such builds sound tolerable to me.

Is it that plausible? That seems far less plausible than running a plain 
x86_64 application on an Arm system. Especially for something performance 
sensitive as FFmpeg, you would want a proper native port. Sure, you could very 
well end up with slow x86 code due to "non-technical challenges" (euphemism 
for the vendor not providing an Arm build or your IT department lagging 
behind).

But realistically, you're not going to be able to replace an x86 
libavcodec.dll with an AArch64 libavcodec.dll in such an x86 app. The chance 
of finding the right build options to get a compatible ABI are pretty much 
zero. In fact, they are very exactly zero because the libavutil ABI depends on 
the ISA due notably to the CPU feature flags, configuration parameters, etc.

So this can only work if you have Arm64EC application code calling an 
hypothetical Arm64EC libav*, but also calling x86 code on independent code 
paths. Why would you not port the x86 code to Arm too (or run them in a 
separate process)? That seems pretty fringe if not academic to me.

-- 
Rémi Denis-Courmont
Hagalund ny stad, f.d. Finska republik Nylands



_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-10-03 16:39         ` Rémi Denis-Courmont via ffmpeg-devel
@ 2025-10-03 20:49           ` Stephen Hutchinson via ffmpeg-devel
  2025-10-04  8:43             ` Rémi Denis-Courmont via ffmpeg-devel
  0 siblings, 1 reply; 13+ messages in thread
From: Stephen Hutchinson via ffmpeg-devel @ 2025-10-03 20:49 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Stephen Hutchinson

On 10/3/25 12:39 PM, Rémi Denis-Courmont via ffmpeg-devel wrote:
> Le perjantaina 3. lokakuuta 2025, 18.11.55 Itä-Euroopan kesäaika Martin
> Storsjö a écrit :
>> Wanting to use the libav* libraries in a hybrid x86_64/arm64ec process
>> seems like something quite plausible though. Not something I'd go out of
>> my way to complicate other things to accomplish, but reasonable build
>> system tweaks to allow such builds sound tolerable to me.
> 
> Is it that plausible? That seems far less plausible than running a plain
> x86_64 application on an Arm system. Especially for something performance
> sensitive as FFmpeg, you would want a proper native port. Sure, you could very
> well end up with slow x86 code due to "non-technical challenges" (euphemism
> for the vendor not providing an Arm build or your IT department lagging
> behind).
> 
> But realistically, you're not going to be able to replace an x86
> libavcodec.dll with an AArch64 libavcodec.dll in such an x86 app. The chance
> of finding the right build options to get a compatible ABI are pretty much
> zero. In fact, they are very exactly zero because the libavutil ABI depends on
> the ISA due notably to the CPU feature flags, configuration parameters, etc.
> 
> So this can only work if you have Arm64EC application code calling an
> hypothetical Arm64EC libav*, but also calling x86 code on independent code
> paths. Why would you not port the x86 code to Arm too (or run them in a
> separate process)? That seems pretty fringe if not academic to me.
> 

While I haven't gotten through adding the more newly-added external
libraries to the tedious mingw build guide, IIRC most/all of them
already can be built natively for AArch64, so I can't really think of a
publicly-available set of circumstances where someone would be linking
an x86-64 dependency into a native Arm instance of FFmpeg.

I could see it as trying to use x86-64 builds of AviSynth+, though.
That's LoadLibrary, and I either can't remember or haven't seen
anything that describes how the Arm64EC concept behaves when using
dynamic loading.

Yes, there is a native AArch64 Windows release of AviSynth+,
but there won't be one for Arm64EC, because we dropped support
for building with MSVC outside of x86(-64).  An llvm-mingw-built
Arm64EC core wouldn't be able to load MSVC-built x86-64 plugins.

So it wouldn't surprise me if people stubbornly refuse to use
the AArch64 release because they don't want to let go of a build
of a plugin that the plugin author only published for x86-64
(even if said plugin is FOSS).
_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FFmpeg-devel] Re: [DISCUSSION] Adding ARM64EC support to FFmpeg
  2025-10-03 20:49           ` Stephen Hutchinson via ffmpeg-devel
@ 2025-10-04  8:43             ` Rémi Denis-Courmont via ffmpeg-devel
  0 siblings, 0 replies; 13+ messages in thread
From: Rémi Denis-Courmont via ffmpeg-devel @ 2025-10-04  8:43 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Rémi Denis-Courmont

Le perjantaina 3. lokakuuta 2025, 23.49.46 Itä-Euroopan kesäaika Stephen 
Hutchinson via ffmpeg-devel a écrit :
> While I haven't gotten through adding the more newly-added external
> libraries to the tedious mingw build guide, IIRC most/all of them
> already can be built natively for AArch64, so I can't really think of a
> publicly-available set of circumstances where someone would be linking
> an x86-64 dependency into a native Arm instance of FFmpeg.
> 
> I could see it as trying to use x86-64 builds of AviSynth+, though.
> That's LoadLibrary, and I either can't remember or haven't seen
> anything that describes how the Arm64EC concept behaves when using
> dynamic loading.
> 
> Yes, there is a native AArch64 Windows release of AviSynth+,
> but there won't be one for Arm64EC, because we dropped support
> for building with MSVC outside of x86(-64).  An llvm-mingw-built
> Arm64EC core wouldn't be able to load MSVC-built x86-64 plugins.
> 
> So it wouldn't surprise me if people stubbornly refuse to use
> the AArch64 release because they don't want to let go of a build
> of a plugin that the plugin author only published for x86-64
> (even if said plugin is FOSS).

Ok, fair enough. Though on second thought, I think that the problem of how to 
build that is far worse than the problem of register allocations in assembler.

-- 
ヅニ-クーモン・レミ
Tapio's place new town, former Finnish Republic of Uusimaa



_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2025-10-04  8:44 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-22 10:04 [FFmpeg-devel] [DISCUSSION] Adding ARM64EC support to FFmpeg harish.rajaselvan--- via ffmpeg-devel
2025-09-22 11:48 ` [FFmpeg-devel] " Martin Storsjö via ffmpeg-devel
2025-09-23 13:03   ` Harish Raja Selvan via ffmpeg-devel
2025-09-24 12:15     ` Martin Storsjö via ffmpeg-devel
2025-09-30  4:58       ` Harish Raja Selvan via ffmpeg-devel
2025-10-03 12:27         ` Martin Storsjö via ffmpeg-devel
2025-09-27  9:00 ` Rémi Denis-Courmont via ffmpeg-devel
2025-10-03 12:44   ` Martin Storsjö via ffmpeg-devel
2025-10-03 14:32     ` Rémi Denis-Courmont via ffmpeg-devel
2025-10-03 15:11       ` Martin Storsjö via ffmpeg-devel
2025-10-03 16:39         ` Rémi Denis-Courmont via ffmpeg-devel
2025-10-03 20:49           ` Stephen Hutchinson via ffmpeg-devel
2025-10-04  8:43             ` Rémi Denis-Courmont via ffmpeg-devel

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ http://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git