Skip to content

Windows on ARM (ARM64/ARM64EC) に向けた修正 - #1188

Merged
durswd merged 1 commit into
effekseer:masterfrom
rumichi2210:windows-arm
Aug 12, 2026
Merged

durswd merged 1 commit into
effekseer:masterfrom
rumichi2210:windows-arm

Conversation

@rumichi2210

Copy link
Copy Markdown
Contributor

修正点

  • ARM64/ARM64ECにおいて適切なSIMDを利用するように修正
  • ARM64向けに適切なヘッダーをincludeするように修正

詳細

Float4_SSE.h/Int4_SEE.hに関して

Float4_SSE.h/Int4_SEE.hにおいては通常ARMにおいて利用されないが、
ARM64でSSEのエミュレーションを利用する場合にコンパイルエラーが出ないように修正
理由としては以下の通り

ARM64EC では、Windows SDK の softintrin.h に含まれる一部の SSE intrinsic が関数形式マクロとして定義されています。 たとえば _mm_move_ss や _mm_cvtss_f32 はマクロとして展開されます。 C/C++ プリプロセッサは C++ のテンプレート構文を解析する前にマクロの引数を処理するため、テンプレート引数の <...> はマクロ引数解析上のネストとして扱われません。

そのため、Swizzle<1, 1, 1, 1>(s).s のようなテンプレート式をマクロの引数として直接渡すと、テンプレート引数内のカンマがマクロ引数の区切りとして解釈される場合があります。 以下のコードでは _mm_cvtss_f32 に複数の引数が渡されたものとして解釈され、警告 C4002 とそれに続く構文エラーが発生します。

_mm_cvtss_f32(Swizzle<1, 1, 1, 1>(s).s)

同様に、_mm_move_ss の引数へテンプレート式を直接渡した場合にも同じ問題が発生します。 この問題を回避するため、テンプレート引数を含む式をこれらのマクロへ渡す際は、式全体を追加の括弧で囲みます。

_mm_cvtss_f32((Swizzle<1, 1, 1, 1>(s).s))

_mm_move_ss((Swizzle<1, 0, 2, 3>(s).s), _mm_set_ss(i))

追加の括弧によってテンプレート式全体が 1 つのマクロ引数として扱われ、テンプレート引数内のカンマがマクロ引数の区切りとして解釈されることを防止します。

- ARM64/ARM64ECにおいて適切なSIMDを利用するように修正
- ARM64向けに適切なヘッダーをincludeするように修正

Float4_SSE.h/Int4_SEE.hにおいては通常ARMにおいて利用されないが、
ARM64でSSEのエミュレーションを利用する場合にコンパイルエラーが出ないように修正
理由としては以下の通り

ARM64EC では、Windows SDK の `softintrin.h` に含まれる一部の SSE intrinsic が関数形式マクロとして定義されています。
たとえば `_mm_move_ss` や `_mm_cvtss_f32` はマクロとして展開されます。
C/C++ プリプロセッサは C++ のテンプレート構文を解析する前にマクロ引数を処理するため、テンプレート引数の <...> はマクロ引数解析上のネストとして扱われません。

そのため、`Swizzle<1, 1, 1, 1>(s).s` のようなテンプレート式をマクロ引数として直接渡すと、テンプレート引数内のカンマがマクロ引数の区切りとして解釈される場合があります。
以下のコードでは _mm_cvtss_f32 に複数の引数が渡されたものとして解釈され、警告 C4002 とそれに続く構文エラーが発生します。
```
_mm_cvtss_f32(Swizzle<1, 1, 1, 1>(s).s)
```
同様に、`_mm_move_ss` の引数へテンプレート式を直接渡した場合にも同じ問題が発生します。
この問題を回避するため、テンプレート引数を含む式をこれらのマクロへ渡す際は、式全体を追加の括弧で囲みます。
```
_mm_cvtss_f32((Swizzle<1, 1, 1, 1>(s).s))

_mm_move_ss((Swizzle<1, 0, 2, 3>(s).s), _mm_set_ss(i))
```
追加の括弧によってテンプレート式全体が 1 つのマクロ引数として扱われ、テンプレート引数内のカンマがマクロ引数の区切りとして解釈されることを防止します。
@durswd
durswd merged commit d7ac71b into effekseer:master Aug 12, 2026
6 checks passed
@rumichi2210
rumichi2210 deleted the windows-arm branch August 13, 2026 02:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants