Question about Machine Description

yazdanbakhsh amir.yazdanbakhsh@gmail.com
Thu May 6 09:08:00 GMT 2010


Hi,

As I told I want to add  "ble" intruction in MIPS that works like "beq".

I used from the available branch_equality instruction that shows in the
following paragraph:

--------------------------------------------------------------------------------------------------
(define_insn "branch_equality"
  [(set (pc)
	(if_then_else (match_operator:SI 0 "equality_op"
					 [(match_operand:SI 1 "register_operand" "d")
					  (match_operand:SI 2 "register_operand" "d")])
	(match_operand 3 "pc_or_label_operand" "")
	(match_operand 4 "pc_or_label_operand" "")))]
  ""
  "*
{
  ss_branch_likely = (final_sequence && INSN_ANNULLED_BRANCH_P (insn));
  return (operands[3] != pc_rtx)
	? \"%*b%C0%?\\t%z1,%z2,%3\"
	: \"%*b%N0%?\\t%z1,%z2,%4\";
}"
  [(set_attr "type"	"branch")
   (set_attr "mode"	"none")
   (set_attr "length"	"1")])
--------------------------------------------------------------------------------------------------
To add "ble" I changed "equality_op" in the header file to have "ble" as a
acceptable operation.but it didn't work. Do u have any idea? I also saw some
functions in the assembler that handle branchs. Should i changed assembler
for this purpose?

Best Regards



yazdanbakhsh wrote:
> 
> I have read all the documents, and changed some lines but nothing happened
> :(
> 
> Ian Lance Taylor-3 wrote:
>> 
>> yazdanbakhsh <amir.yazdanbakhsh@gmail.com> writes:
>> 
>>> I want to change instruction blez to ble. ble compare two registers and
>>> jump
>>> to the target address if the condition is true.
>> 
>> Read the internals manual to understand how operand predicates and
>> constraints work.  See the hundreds of existing examples.  Ask if you
>> have specific questions.
>> 
>> Ian
>> 
>>> Ian Lance Taylor-3 wrote:
>>>> 
>>>> yazdanbakhsh <amir.yazdanbakhsh@gmail.com> writes:
>>>> 
>>>>> Please assume I'm working with the MIPS. There is a little difference
>>>>> between the MIPS and what I'm actually working on it. How can I remove
>>>>> immediate logical shift right/left from the compiler?
>>>>> I mean If I want the programmer writes an immediate shift, It is
>>>>> compiled
>>>>> to
>>>>> the two instructions:
>>>>>
>>>>> sll %2,%2,5
>>>>>
>>>>> changed to:
>>>>>
>>>>> addi %3,%0,5
>>>>> sllv %2,%2,%3
>>>> 
>>>> Find the insn which generates sll.  Change the operand constraints and
>>>> predicates to reject an immediate operand.
>>>> 
>>>> E.g., in mips.md this is:
>>>> 
>>>> (define_insn "*<optab><mode>3"
>>>>   [(set (match_operand:GPR 0 "register_operand" "=d")
>>>> 	(any_shift:GPR (match_operand:GPR 1 "register_operand" "d")
>>>> 		       (match_operand:SI 2 "arith_operand" "dI")))]
>>>>   "!TARGET_MIPS16"
>>>> {
>>>>   if (CONST_INT_P (operands[2]))
>>>>     operands[2] = GEN_INT (INTVAL (operands[2])
>>>> 			   & (GET_MODE_BITSIZE (<MODE>mode) - 1));
>>>> 
>>>>   return "<d><insn>\t%0,%1,%2";
>>>> }
>>>>   [(set_attr "type" "shift")
>>>>    (set_attr "mode" "<MODE>")])
>>>> 
>>>> 
>>>> For operand 2, change the predicate to register_operand and remove the
>>>> 'I' constraint.
>>>> 
>>>> Ian
>>>> 
>>>> 
>>>
>>> -- 
>>> View this message in context:
>>> http://old.nabble.com/Question-about-Machine-Description-tp1026428p28447744.html
>>> Sent from the gcc - Dev mailing list archive at Nabble.com.
>> 
>> 
> 
> 

-- 
View this message in context: http://old.nabble.com/Question-about-Machine-Description-tp1026428p28471097.html
Sent from the gcc - Dev mailing list archive at Nabble.com.



More information about the Gcc mailing list