/* from to eq verify reg gen fu */ \ _OE( _UnPP( M, R, NONE ), V_NO, RG_##reg, G_LOAD_ADDR, FU_ALU ), \ _OE( _Un( M, M, NONE ), V_NO, RG_##reg, R_MOVRESTEMP, FU_NO ), \ _OE( _Un( M, ANY, NONE ), V_NO, RG_##reg##_NEED,G_UNKNOWN, FU_NO ), \ _OE( _Un( ANY, ANY, NONE ), V_NO, RG_##reg, R_FORCEOP1MEM, FU_NO ), \ _OE( _Un( ANY, ANY, NONE ), V_NO, RG_, G_UNKNOWN, FU_NO ), \ }; LOAD_TABLE( LoadAddr2, WORD ); LOAD_TABLE( LoadAddr8, QWORD ); static opcode_entry LoadAddr4[] = { /*************************************/ /* from to eq verify reg gen fu */ _OE( _Un( M, ANY, NONE ), V_OFFSETZERO, RG_DWORD, R_MOVEINDEX, FU_NO ), _OE( _UnPP( M, R, NONE ), V_NO, RG_DWORD, G_LOAD_ADDR, FU_ALU ), _OE( _Un( M, M, NONE ), V_NO, RG_DWORD, R_MOVRESTEMP, FU_NO ), _OE( _Un( M, ANY, NONE ), V_NO, RG_DWORD_NEED,G_UNKNOWN, FU_NO ), _OE( _Un( ANY, ANY, NONE ), V_NO, RG_DWORD, R_FORCEOP1MEM, FU_NO ), _OE( _Un( ANY, ANY, NONE ), V_NO, RG_, G_UNKNOWN, FU_NO ), }; opcode_entry Conv[] = { /************************/ /* from to eq verify reg gen fu */ _OE( _Un( ANY, ANY, NONE ), V_NO, RG_, R_DOCVT, FU_NO ), }; opcode_entry NegF[] = { /************************/ /* from to eq verify reg gen fu */
* * Description: Reduction tables for x87 instructions. * ****************************************************************************/ #include "cgstd.h" #include "coderep.h" #include "model.h" #include "pattern.h" #include "regset.h" opcode_entry Move87L[] = { /* op res eq verify gen reg fu*/ {_UnPP( R|M|U,R|M|U,EQ_R1 ), V_NO, G_NO, RG_, FU_NO}, {_UnPP( ANY, ANY, NONE ), V_NO, G_UNKNOWN, RG_8087_NEED,FU_NO}, }; opcode_entry Move87D[] = { /***********************************/ /* op res eq verify gen reg fu*/ {_UnPP( R|M|U,R|M|U,EQ_R1 ), V_NO, G_NO, RG_, FU_NO}, {_UnPP( M, M, NONE ), V_SAME_LOCN, G_NO, RG_, FU_NO}, #if _TARGET & _TARG_80386 {_UnPP( M, M, NONE ), V_SAME_TYPE, R_SPLITMOVE, RG_, FU_NO}, {_UnPP( M|C, R, NONE ), V_NO, R_SPLITMOVE, RG_8, FU_NO}, {_UnPP( R, M, NONE ), V_NO, R_SPLITMOVE, RG_8, FU_NO}, {_UnPP( C, M, NONE ), V_SAME_TYPE, R_SPLITMOVE, RG_8, FU_NO}, #else {_UnPP( M, M, NONE ), V_SAME_TYPE, R_SPLIT8, RG_, FU_NO},
/********************************/ \ /* op res eq verify gen reg fu*/ \ _UnPP( M, R, NONE ), V_NO, G_LOAD_ADDR, RG_##reg,FU_ALU, \ _Un( M, M, NONE ), V_NO, R_MOVRESTEMP, RG_##reg,FU_NO, \ _Un( M, ANY, NONE ), V_NO, G_UNKNOWN, RG_##reg##_NEED,FU_NO, \ _Un( ANY, ANY, NONE ), V_NO, R_FORCEOP1MEM, RG_##reg,FU_NO, \ }; LOAD_TABLE( LoadAddr2, WORD ); LOAD_TABLE( LoadAddr8, QWORD ); static opcode_entry LoadAddr4[] = { /*************************************/ /* op res eq verify gen reg fu*/ _Un( M, ANY, NONE ), V_OFFSETZERO, R_MOVEINDEX, RG_DWORD,FU_NO, _UnPP( M, R, NONE ), V_NO, G_LOAD_ADDR, RG_DWORD,FU_ALU, _Un( M, M, NONE ), V_NO, R_MOVRESTEMP, RG_DWORD,FU_NO, _Un( M, ANY, NONE ), V_NO, G_UNKNOWN, RG_DWORD_NEED,FU_NO, _Un( ANY, ANY, NONE ), V_NO, R_FORCEOP1MEM, RG_DWORD,FU_NO, }; opcode_entry Conv[] = { /************************/ /* op1 res eq verify gen reg fu */ _Un( ANY, ANY, NONE ), V_NO, R_DOCVT, RG_, FU_NO, }; opcode_entry NegF[] = { /************************/ /* op1 res eq verify gen reg fu */ _Un( R, R, NONE ), V_NO, G_UNARY, RG_FLOAT,FU_NO,