---
source_url: https://devblogs.microsoft.com/oldnewthing/20260615-00/?p=112419
source_title: "The time the x86 emulator team found code so bad that they fixed it during emulation"
source_site: "The Old New Thing"
source_published_at: 2026-06-15T14:00:00+00:00
hero_image: https://devblogs.microsoft.com/oldnewthing/wp-content/uploads/sites/38/2019/02/ShowCover.jpg
tags: x86-emulation,compiler-optimization,performance
generated_at: 2026-06-16T08:00:24.657Z
model: claude-haiku-4-5
---
# x86エミュレータチーム、ひどいコンパイラ最適化を手作業で修正

x86エミュレータチームは、コンパイラのループ展開により64キロバイトのデータ初期化に256キロバイトものコードを生成するプログラムを発見。エミュレータの翻訳器に特別なコードを追加して、この関数を検出し、効率的なループに置き換えた。

Windowsの非x86システム向けx86-32プロセッサエミュレータが搭載されていた時代、x86エミュレータチームはバイナリ翻訳を用いてネイティブコードを生成していた。あるプログラムでは、スタック上に約64キロバイトのメモリを割り当てて初期化する必要があった。

## コンパイラの過度な最適化

通常のアプローチでは、スタックプローブを実行してスタックポインタから65536を減算し、ループで初期化を行う。ところがこのプログラムに使用されたコンパイラは、ループを展開して65,536個の個別の「メモリへバイト書き込み」命令に変換した。各命令は4バイト長であり、合計すると64キロバイトのデータを初期化するために256キロバイトものコードが生成されることになった。

## エミュレータチームの対応

「このようなことは何度も起きた。ただし、この特定の話がどのプロセッサに適用されたかは知らない」と、この事案に関わった関係者の述べている通り、同様の問題は複数回発生していた。256キロバイトの無駄なコードサイズはエミュレータチームの怒りを買い、彼らは翻訳器にこの悪質な関数を検出して等価の効率的なループに置き換える特別なコードを追加することになった。

*この記事は元記事の事実のみに基づいて自動生成されました。*

## 出典
The Old New Thing、「The time the x86 emulator team found code so bad that they fixed it during emulation」、https://devblogs.microsoft.com/oldnewthing/20260615-00/?p=112419
