This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Updating an operand in RTL for a builtin function
- From: "Mohamed Shafi" <shafitvm at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Date: Fri, 4 May 2007 18:00:33 +0530
- Subject: Updating an operand in RTL for a builtin function
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