Updating an operand in RTL for a builtin function

Mohamed Shafi shafitvm@gmail.com
Fri May 4 12:30:00 GMT 2007


Hello all,

I am trying to implement a builtin function __macf for a private target.
I have added the required target hooks for this.
Say for the following code

int main()
{
  int operand1 = 2;
  int operand2 = 3;
  int operand3 = 4;
  int result;

   /* operand3 = operand3 + (operand1 * operand2)*/

  result = __macf(operand1, operand2, operand3);

}

Requirement :  I need the value of operand3 and result to be same
after calling the builtin.
But this is not happening.
In this case, all the 3 operands are loaded from memory for the
operation. After the operation is complete, operand3 gets modified.
But the modified value of operand3 is not saved/updated.Only the
variable "result" is updated

How do i do this?

The pattern that i have used for this purpose is
(define_insn "macfsi"
   [(set (match_operand:SI 0 "data_reg" "=f")
		(plus:SI (mult:SI (match_operand:SI 1 "data_reg" "f")
			                (match_operand:SI 2 "data_reg" "f"))
			    (match_operand:SI 3 "data_reg" "0")))]
     ""
     "macf\\t%1, %2, %3"
   [(set_attr "type" "arith")
    (set_attr "length" "2")]
)

The instruction macf will store the result in last operand i.e %3+=%2 * %1

Regards,
Shafi



More information about the Gcc mailing list