This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

insn matching problem


I'm having problems getting a complicated insn to match and I'm not sure
what I've done wrong.

Here is the error message.

foo.c:74: internal error--unrecognizable insn:

(insn 33 31 34 (set (reg:SI 74)
        (ior:SI (const_int 0)
            (zero_extract:SI (const_int 1)
                (const_int:SI 16)
                (const_int 0)))) -1 (nil)
    (nil))

The insn is generated by this code:

  emit_insn (gen_rtx_SET(VOIDmode,
    operands[0],
    gen_rtx_IOR(SImode,const0_rtx,
      gen_rtx_ZERO_EXTRACT(SImode,operands[1],
      gen_rtx_raw_CONST_INT(SImode,16),const0_rtx))));


This is what I thought the insn should match against.

(define_insn ""
  [(set (match_operand:SI 0 "register_operand" "=r")
	(ior:SI (const_int 0)
		(zero_extract:SI (match_operand:SI 1 "immediate_operand" "i")
				 (const_int:SI 16)
				 (const_int 0))))]
  ""
  "orh %H1,%?r0,%0")

What am I doing wrong?  I'll continue trying to figure it out in the
mean time, but any help will be appreciated.   Would getting rid of the
SImodes for the const_ints help?

BTW, this is for the i860 (big endian).

Bill
-- 
Leave others their otherness


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]