最適化の不具合?

特定のPCでは問題がないが、特定のPCで問題がある・・・という、よくあるやっかいな症状ですが、

private short NonStaticMethod(short s1, short s2, short s3)
{
  // このメソッドの実装は大嘘ですが
  // 始点 s1 から終点 s2 までの線分上の点 s3 が
  // s2 からみてどれぐらいの距離にあるか計算する
  s2 = (short) (s2 - s1);
  s3 -= s1;

  // for DEBUG
  Console.Write("{0} - {1} = ", s2, s1);

  StaticMethod(s2 - s1);
}

private void StaticMethod(int value)
{
  // for DEBUG
  Console.WriteLine(value);

  short v = Convert.ToInt16(value);
}

こんなかんじの実装で、手元のPCでは "58 - 57 = 1" とでるのだが、別の環境(複数)では "58 - 57 = -65535" とでる。
-65535 = 0xFFFF0001 なので、NonStaticMethod の short と StaticMethod の int が共に JIT で native int にコンパイルされているのに、StaticMethod へパラメータを引き渡す時にインライン展開された結果、native int 同士なのでマスキングがかからず素通りしているかんじ?

追記

どうやら、mscorwks.dll がロードされる環境では問題ないが、mscorsvr.dll がロードされる環境では問題があるようだ。
mscorwks.dll だと GC スレッドがアプリケーションドメイン全体で1個しか存在しないけど、mscorsvr.dll の場合は、GC スレッドが SMP/SMT で認識されているプロセッサ単位で生成されるぐらいだと思ってたけど…。*1

*1:.NET Framework 2.0 では GC のコードが統一され、mscorsvr.dll が mscorwks.dll をロードするようになるため、ファイルサイズが激減しているらしい