マニュアルにある全命令に関して、現在の記述状態は以下の通りです。 各セクション毎に以下の番号により整理しました。 「☆同じ定義になっている命令のリスト」については以前確認したものです。 (1)記述対象外であるため除外する命令リスト (2)別名があるために除外する命令のリスト (3)一部が除外されている命令のリスト (4)現在の記述では問題があると思われる命令のリスト ☆同じ定義になっている命令のリスト ======= General ======= 5.1.1 データ転送命令 (1)除外命令リスト IN OUT (2)別名があるために除外 CMOVE -> CMOVZ CMOVNE -> CMOVNZ CMOVNBE -> CMOVA CMOVNB -> CMOVAE CMOVNAE -> CMOVB CMOVNA -> CMOVBE CMOVNLE -> CMOVG CMOVNL -> CMOVGE CMOVNGE -> CMOVL CMOVNG -> CMOVLE CMOVC -> CMOVB CMOVNC -> CMOVAE CMOVP -> CMOVPE CMOVNP -> CMOVPO (3)一部除外命令リスト PUSH imm8 PUSH CS,SS,DS,ES,FS,GS POP CS,SS,DS,ES,FS,GS MOV Sreg,r/m16 MOV r/m16,Sreg XCHG r8,m8 m8,r8 と同じ XCHG r16,m18 m16,r16と同じ XCHG r32,m32 m32,r32と同じ (4)現在の記述では問題があると思われる命令のリスト CMPXCHG CMPXCHG8B 仕様には「条件に合わない場合には変化しない」となっているが、 IFTHENELSE のその他の値として、元の値を書き込んでいる。 5.1.2 2進算術命令 (3)一部除外命令リスト ADC r/m16,imm8 ADC r/m32,imm8 ADD r/m16,imm8 ADD r/m32,imm8 SUB r/m16,imm8 SUB r/m32,imm8 SBB r/m16,imm8 SBB r/m32,imm8 CMP r/m16,imm8 CMP r/m32,imm8 IMUL r16,r/m16,imm8 IMUL r32,r/m32,imm8 IMUL r16,imm8 IMUL r32,imm8 IMUL r16,imm16 r16,r/m16,imm16と同じ IMUL r32,imm32 r32,r/m32,imm32と同じ 5.1.3 10進算術命令 (3)一部が除外されている命令のリスト ニーモニックなしの場合の記述を除外 AAM AAD 5.1.4 論理命令 (3)一部が除外されている命令のリスト AND r/m16, imm8 AND r/m32, imm8 OR r/m16, imm8 OR r/m32, imm8 XOR r/m16, imm8 XOR r/m32, imm8 5.1.5 シフト命令とローテート命令 (4)問題があると思われる命令のリスト SAR SHR SAL SHRD SHLD ROR ROL RCR RCL 条件判定の結果で未定義となるので、IFTHENELSE内に副作用(SETとCLOBBER) を書かないと記述できない。現在は未定義の場合元の値をSETしている。 5.1.6 ビット命令とバイト命令 (1)除外命令リスト BSF BSR (2)別名があるために除外 SETE SETNE SETNBE SETNB SETNC SETNAE SETC SETNA SETNLE SETNL SETNGE SETNG SETP SETNP 5.1.7 制御転送命令 (1)除外命令リスト IRET INT INTO BOUND (2)別名があるために除外 JZ JNE JNBE JNB JNAE JNA JNLE JNL JNGE JNG JNP JP LOOPNE LOOPE (3)一部除外命令リスト ENTER imm16,imm8 LEAVE ;StackAddressSize,OperandSize=16 Jcc rel8/16 JMP rel8/16 farジャンプ RET far リターン CALL far コール CALL rel16 CALL r/m16 5.1.8 ストリング命令 (1)除外命令リスト INS/INSB INS/INSD INS/INSW OUTS/OUTB OUTS/OUTD OUTS/OUTW REP REPE/REPZ REPNE/REPNZ (2)別名があるために除外 MOVS CMPS SCAS LODS STOS 5.1.9 フラグ制御命令 (1)除外命令リスト PUSHF/PUSHFD POPF/POPFD STI CLI 5.1.11 その他の命令 (1).除外命令リスト UD2 CPUID XLAT 「明示オペランド形式」は記述しない === MMX === 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5 5.4.6 5.4.7 (1)除外命令リスト EMMS === SSE === 5.5.1.1 データ転送命令 5.5.1.2 変換命令 5.5.1.3 パックド算術演算命令 (1)除外命令リスト RCPPS RCPSS SQRTPS SQRTSS RSQRTPS RSQRTSS (4)現在の記述では問題があると思われる命令のリスト MAXPS,MAXSS,MINPS,MINSS 「比較される値が両方とも0.0のばあいは、ソースオペランドの値...」とマニュアル に 記述されている。0.0とは比較しているが、-0.0との比較も必要? 5.5.1.4 比較命令 (2)別名があるために除外 CMPPS->CMPEQPS,CMPLTPS,CMPLEPS,CMPUNORDPS,CMPNEQPS,CMPNLTPS,CMPNLEPS,CMPORDPS CMPSS->CMPEQSS,CMPLTSS,CMPLESS,CMPUNORDSS,CMPNEQSS,CMPNLTSS,CMPNLESS,CMPORDSS 5.5.1.5 論理演算命令 5.5.1.6 シャッフル命令とアンパック命令 5.5.2 ステート管理命令 (1)除外命令リスト LDMXCSR STMXCSR FXSAVE FXRSTOR 5.5.3 64ビットSIMD整数命令 (4)現在の記述では問題があると思われる命令のリスト PINSRW 仕様には「条件に合わない場合には変化しない」となっているが、 IFTHENELSE のその他の値として、元の値を書き込んでいる。 5.5.4 キャッシュ制御、プリフェッチ、命令順序付け命令 (1)除外命令リスト PREFETCHh SFENCE (4)現在の記述では問題があると思われる命令のリスト MASKMOVQ 仕様には「条件に合わない場合には変化しない」となっているが、 IFTHENELSE のその他の値として、元の値を書き込んでいる。 ☆同じ定義になっている命令リスト ・MOVAPS xmm1, xmm2/m128 MOVUPS xmm1, xmm2/m128 ・MOVAPS m128, xmm1 MOVUPS m128, xmm1 MOVNTPS m128, xmm1 ・COMISS xmm1, xmm2/m32 UCOMISS xmm1, xmm2/m32 ==== SSE2 ==== 5.6.1 パックドおよびスカラ倍精度浮動小数点命令 5.6.1.1 データ転送命令 5.6.1.2 パックド算術命令 (1)除外命令リスト SQRTPD SQRTSD 5.6.1.3 論理演算命令 5.6.1.4 比較命令 (2)別名があるために除外 CMPPD->CMPEQPD,CMPLTPD,CMPLEPD,CMPUNORDPD,CMPNEQPD,CMPNLTPD,CMPNLEPD,CMPORDPD CMPSD->CMPEQSD,CMPLTSD,CMPLESD,CMPUNORDSD,CMPNEQSD,CMPNLTSD,CMPNLESD,CMPORDSD (4)問題があると思われる命令 sse COMISS UCOMISS sse2 COMISD UCOMISD 比較条件により IFTHENELSE で分岐して記述しているが、その他に対する値の 設定については仕様上に記述がない。これはその他になることはないからであ るが、この場合、明記されている条件のどれかをその他として、記述上明記し ないことにしてよいか? 5.6.1.5 シャッフル命令とアンパック命令 5.6.1.6 変換命令 5.6.2 パックド単精度浮動小数点命令 5.6.3 128ビットSIMD整数命令 5.6.4 キャッシュ制御命令と命令順序付け命令 (1)除外命令リスト CLFLUSH LFENCE MFENCE PAUSE (4)問題があると思われる命令 sse MASKMOVQ sse2 MASKMOVDQU 仕様には「マスクが0の場合にはデータはメモリに書き込まれない」となって いるが、IFTHENELSE のその他の値として、元の値を書き込んでいる。 ☆同じ定義になっている命令リスト ・MOVAPD xmm1, xmm2/m128 MOVUPD xmm1, xmm2/m128 ・MOVDQA xmm1, xmm2/m128 MOVDQU xmm1, xmm2/m128 ・MOVAPD m128, xmm1 MOVUPD m128, xmm1 MOVNTPD m128,xmm ・MOVDQA m128, xmm1 MOVDQU m128, xmm1 MOVNTDQ m128, xmm ・general MOV m32, r32 MOVNTI m32,r32 ・COMISD xmm1, xmm2/m64 UCOMISD xmm1, xmm2/m64 ・MOVSD m64, xmm1 MOVLPD m64,xmm ・CVTDQ2PD xmm1, m64 CVTPI2PD xmm, m64 ------------------------------------------------- 5.7 システム命令 (1)除外命令リスト LGDT SGDT LLDT SLDT LTR STR LIDT SIDT MOV LMSW SMSW CLTS ARPL LAR LSL VERR VERW INVD WBINVD INVLPG LOCK HLT RSM RDMSR WRMSR RDPMC RDTSC SYENTER SYSEXIT ------------------------------------------------- ====== 3DNow! ====== (1)除外命令リスト PREFETCHNTA,PREFETCHT0,PREFETCHT1,PREFETCHT2 SFENCE FEMMS PFRCP PFRCPIT1 PFRCPIT2 PFRSQIT1 PFRSQRT PREFETCH/PREFETCHW ☆sse と同じ命令 MASKMOVQ MOVNTQ PAVGB PAVGW PEXTRW PINSRW PMAXSW PMAXUB PMINSW PMINUB PMOVMSKB PMULHUW PSADBW PSHUFW