From: SHUDO Kazuyuki Date: 2000-08-27T01:31:59+09:00 Subject: [ruby-list:24541] Re: did commit install guide 首藤です。 > > >ところでi686ってIntel以外のCPUで使えるんでしょうか? > > >AMD K6-2らしいのですがCygwinのuname -mでi586とでてるんですが。 > > 実のところ i386 と Pentium と Pentium II あたりでどの程度違うコードが > 出るのかとか、実際に i386 だと動かないのかとかはぜんぜん分かりません。 > Kondara だったかはすべて i586 で作ってあるから何パーセントだか速いとかき > きますが。 Kondara ではおそらく、 gcc ではなくて pgcc を使っているのではないかと思います。 Pentium Compiler Group http://www.goof.com/pcg/ pgcc は gcc へのパッチとして配付されています。 Pentium 移行の各プロセッサに対する最適化を目的としています。 パッチを眺めると、命令ごとのコストを、プロセッサの種類に応じて 変えていたりする様子が見えます。 Kondara が i586 に特化、というのは、本当だとすると ちょっともったいない気がします。 Pentium といわゆる P6 (Pentium Pro, II, III) では 最適化 (コードスケジューリング) の指針が同じではないので、 いまどきなら P6 (i686) でコンパイルしたものを配付した方がベターです。 とはいえ、pgcc (gcc) が i586 と i686 でどのくらい違うコードを吐けるものかが そもそも疑問ですが。 > # どっかに ix86 のインストラクションセットみたいのないかな。gas ? はい。 (GNU as を含んでいる) GNU binutils の include/opcode/i386.h は 参考になると思います。 例えば、486 で追加された命令、Pentium で… Pentium Pro で… Pentium II で… がわかります。 486 以降で追加された命令で、実際に性能向上のために 使われそうなのは bswap, cmovXX くらいでしょうか。 K6 シリーズの各プロセッサが、これらをどのくらいサポートしているのかは 知りません。 /* 486 extensions */ {"bswap", 1, 0x0fc8, _, ShortForm|DWordOperand, { Reg32,0,0 } }, {"xadd", 2, 0x0fc0, _, W|Modrm|ByteOperand|WordOperand|DWordOperand, { Reg, Reg|Mem, 0 } }, {"cmpxchg", 2, 0x0fb0, _, W|Modrm|ByteOperand|WordOperand|DWordOperand, { Reg, Reg|Mem, 0 } }, {"invd", 0, 0x0f08, _, NoModrm, { 0, 0, 0} }, {"wbinvd", 0, 0x0f09, _, NoModrm, { 0, 0, 0} }, {"invlpg", 1, 0x0f01, 7, Modrm, { Mem, 0, 0} }, /* 586 and late 486 extensions */ {"cpuid", 0, 0x0fa2, _, NoModrm, { 0, 0, 0} }, /* Pentium extensions */ {"wrmsr", 0, 0x0f30, _, NoModrm, { 0, 0, 0} }, {"rdtsc", 0, 0x0f31, _, NoModrm, { 0, 0, 0} }, {"rdmsr", 0, 0x0f32, _, NoModrm, { 0, 0, 0} }, {"cmpxchg8b", 1, 0x0fc7, 1, Modrm, { Mem, 0, 0} }, /* Pentium Pro extensions */ {"rdpmc", 0, 0x0f33, _, NoModrm, { 0, 0, 0} }, {"ud2", 0, 0x0f0b, _, NoModrm, {0, 0, 0} }, /* official undefined instr. */ {"cmovo", 2, 0x0f40, _, Modrm|ReverseRegRegmem|WordOperand|DWordOperand, { WordReg|WordMem, WordReg, 0} }, {"cmovno", 2, 0x0f41, _, Modrm|ReverseRegRegmem|WordOperand|DWordOperand, { WordReg|WordMem, WordReg, 0} }, (略) /* Pentium II extensions */ {"sysenter", 0, 0x0f34, _, NoModrm, { 0, 0, 0} }, {"sysexit", 0, 0x0f35, _, NoModrm, { 0, 0, 0} }, {"fxsave", 1, 0x0fae, 0, Modrm, { WordMem, 0, 0 } }, {"fxrstor", 1, 0x0fae, 1, Modrm, { WordMem, 0, 0 } }, SHUDO Kazuyuki/首藤一幸 私をたばねないで あらせいとうの花のように shudoh@muraoka.info.waseda.ac.jp