unrecognized call_value instruction

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

We want to upgrade our cross compiler (for custom processor) from gcc.3.3 to gcc.4.3.1. In this process we have successfully build the compiler, But it is fail to recognize the following (function with return value) insn

test.c:17: error: unrecognizable insn:
(call_insn 14 13 15 3 test.c:15 (set (reg:HI 0 d2)
(call (mem:SI (symbol_ref:SI ("add") [flags 0x3] <function_decl 0xb7d08930 add>) [0 S4 A16]) (const_int 8 [0x8]))) -1 (expr_list:REG_EH_REGION (const_int 0 [0x0])
       (nil))
   (nil))
test.c:17: internal compiler error: in extract_insn, at recog.c:1990

This is our define_expand for our call_value pattern:

(define_expand "call_value"
 [(set (match_operand 0 "register_operand" "")
         (call (match_operand:SI 1 "" "")
         (match_operand:SI 2 "" "")))]
 ""
 "
{
   if (GET_CODE (operands[1]) == MEM
     && ! address_operand (XEXP (operands[1], 0), SImode))
 {
   operands[1] = gen_rtx_MEM (GET_MODE (operands[1]),
                  force_reg (Pmode, XEXP (operands[1], 0)));
 }
}")

define_insn for our call_value pattern:

(define_insn "*call_value"
 [(set (match_operand 0 "register_operand" "=x,x")
       (call (mem:SI (match_operand:SI 1 "address_operand" "a,R"))
               (match_operand 2 "" ""))) ]
 ""
 "@
 jsri %1
 jsr %1"
 [(set_attr "type" "call")])

where x- is return registers
         a= address register which can hold address of the function
         R= symbolic operand

The same pattern definitions are working fine with gcc-3.3, But failing with gcc-4.3.1. I am unable to identify actual reason,so can you please help me in this regard.

Thanks,
P.V.Siva Prasad



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux