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