diff --git a/compiler/x86/aasmcpu.pas b/compiler/x86/aasmcpu.pas index 94c36c1357..e98069c40d 100644 --- a/compiler/x86/aasmcpu.pas +++ b/compiler/x86/aasmcpu.pas @@ -578,6 +578,7 @@ interface constructor op_reg_reg_reg(op : tasmop;_size : topsize;_op1,_op2,_op3 : tregister); constructor op_const_reg_reg(op : tasmop;_size : topsize;_op1 : aint;_op2 : tregister;_op3 : tregister); constructor op_const_ref_reg(op : tasmop;_size : topsize;_op1 : aint;const _op2 : treference;_op3 : tregister); + constructor op_reg_ref_reg(op : tasmop;_size : topsize;_op1 : tregister; const _op2 : treference;_op3 : tregister); constructor op_ref_reg_reg(op : tasmop;_size : topsize;const _op1 : treference;_op2,_op3 : tregister); constructor op_const_reg_ref(op : tasmop;_size : topsize;_op1 : aint;_op2 : tregister;const _op3 : treference); constructor op_reg_reg_ref(op : tasmop;_size : topsize;_op1,_op2 : tregister;const _op3 : treference); @@ -1159,6 +1160,17 @@ implementation end; + constructor taicpu.op_reg_ref_reg(op : tasmop;_size : topsize;_op1 : tregister; const _op2 : treference;_op3 : tregister); + begin + inherited create(op); + init(_size); + ops:=3; + loadreg(0,_op1); + loadref(1,_op2); + loadreg(2,_op3); + end; + + constructor taicpu.op_ref_reg_reg(op : tasmop;_size : topsize;const _op1 : treference;_op2,_op3 : tregister); begin inherited create(op); diff --git a/compiler/x86/cga.pas b/compiler/x86/cga.pas index a813d54695..721c7a95ec 100644 --- a/compiler/x86/cga.pas +++ b/compiler/x86/cga.pas @@ -45,7 +45,7 @@ interface procedure emit_const_reg_reg(i : tasmop;s : topsize;c : longint;reg1,reg2 : tregister); procedure emit_reg_reg_reg(i : tasmop;s : topsize;reg1,reg2,reg3 : tregister); procedure emit_ref_reg_reg(i : tasmop;s : topsize;ref : treference;reg1,reg2 : tregister); - + procedure emit_reg_ref_reg(i : tasmop;s : topsize; reg1 : tregister; ref : treference; reg2 : tregister); procedure emit_sym(i : tasmop;s : topsize;op : tasmsymbol); @@ -130,6 +130,12 @@ implementation current_asmdata.CurrAsmList.concat(Taicpu.Op_ref_reg_reg(i,s,ref,reg1,reg2)); end; + procedure emit_reg_ref_reg(i : tasmop;s : topsize; reg1 : tregister; ref : treference; reg2 : tregister); + begin + tcgx86(cg).make_simple_ref(current_asmdata.CurrAsmList,ref); + current_asmdata.CurrAsmList.concat(Taicpu.Op_reg_ref_reg(i,s,reg1,ref,reg2)); + end; + procedure emit_sym(i : tasmop;s : topsize;op : tasmsymbol); begin current_asmdata.CurrAsmList.concat(Taicpu.Op_sym(i,s,op));