diff -r a362694dda2d -r 07477249d3e1 src/arch/x86/isa/decoder/x87.isa --- a/src/arch/x86/isa/decoder/x87.isa Fri Jan 17 11:02:15 2014 -0600 +++ b/src/arch/x86/isa/decoder/x87.isa Fri Jan 17 11:58:29 2014 -0600 @@ -59,7 +59,7 @@ default: Inst::FLD(Md); } 0x1: decode MODRM_MOD { - 0x3: fxch(); + 0x3: Inst::FXCH(Eq); default: Inst::UD2(); } 0x2: decode MODRM_MOD { @@ -240,8 +240,14 @@ 0x3: Inst::UD2(); default: fisttp(); } - 0x2: Inst::FST(Eq); - 0x3: Inst::FSTP(Eq); + 0x2: decode MODRM_MOD { + 0x3: Inst::FST(Eq); + default: Inst::FST(Mq); + } + 0x3: decode MODRM_MOD { + 0x3: Inst::FSTP(Eq); + default: Inst::FSTP(Mq); + } 0x4: decode MODRM_MOD { 0x3: fucom(); default: frstor(); diff -r a362694dda2d -r 07477249d3e1 src/arch/x86/isa/insts/x87/data_transfer_and_conversion/exchange.py --- a/src/arch/x86/isa/insts/x87/data_transfer_and_conversion/exchange.py Fri Jan 17 11:02:15 2014 -0600 +++ b/src/arch/x86/isa/insts/x87/data_transfer_and_conversion/exchange.py Fri Jan 17 11:58:29 2014 -0600 @@ -36,5 +36,20 @@ # Authors: Gabe Black microcode = ''' -# FXCH +def macroop FXCH_R +{ + movfp ufp1, sti + movfp sti, st(0) + movfp st(0), ufp1 +}; + +def macroop FXCH_M +{ + fault "new UnimpInstFault" +}; + +def macroop FXCH_P +{ + fault "new UnimpInstFault" +}; '''