Hi all, Finally got the combined compare_and_branch instruction to work. But it has some side effects while testing other files.
20010129-1.s: Assembler messages: 20010129-1.s:46: Error: Value of 0x88 too large for 7-bit relative instruction offset I just designed my compare and branch insn as given below: (define_insn "compare_and_branch_insn" [(set (pc) (if_then_else (match_operator 3 "comparison_operator" [(match_operand:SI 1 "register_operand" "r,r") (match_operand:SI 2 "nonmemory_operand" "O,r")]) (label_ref (match_operand 0 "" "")) (pc)))] "" "* output_asm_insn (\"cmp\\t%2, %1\", operands); /* Body of branch insn */ " [(set (attr "length") (if_then_else (ltu (plus (minus (match_dup 0) (pc)) (const_int 128)) (const_int 250)) (const_int 4) (if_then_else (ltu (plus (minus (match_dup 0) (pc)) (const_int 65536)) (const_int 131072)) (if_then_else (eq_attr "align_lbranch" "true") (const_int 6) (const_int 5)) (if_then_else (eq_attr "call_type" "short") (const_int 8) (const_int 16))))) (set_attr "delay_type" "delayed") (set_attr "type" "compare,branch")] ) 1. Does attribute length affect the calculation of offset? 2. What are the other factors that i have to take into consideration while combining a compare and branch instruction. Regards, Rohit On 08 Nov 2006 07:00:29 -0800, Ian Lance Taylor <[EMAIL PROTECTED]> wrote:
"Rohit Arul Raj" <[EMAIL PROTECTED]> writes: > I have used cbranchmode4 instruction to generate combined compare and > branch instruction. > > (define_insn "cbranchmode4" > (set (pc) (if_then_else > (match_operator:CC 0 "comparison_operator" > [ (match_operand:SI 1 "register_operand" "r,r") > (match_operand:SI 2 "nonmemory_operand" "O,r")]) > (label_ref (match_operand 3 "" "")) > (pc)))] > This pattern matches if the code is of the form > > if ( h == 1) > p = 0; > > if the code is of the form > if (h), if (h >= 0) > p = 0; > > Then it matches the seperate compare and branch instructions and not > cbranch instruction. > > Can anyone point out where i am going wrong? If you have a cbranch insn, and you want that one to always be recognized, then why do you also have separate compare and branch insns? Ian