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]
Other format: [Raw text]

Re: A question about define_insn and force-reg



Thanks. It seems work now. But... when I define the like insn for QImode,
(define_insn "loadqi_men"
  [(set (match_operand:QI 0 "register_operand" "=r")
  	(mem:QI (match_operand:SI 1 "general_operand" "r")))]
  ""
  "lbu.u\t%0,0(%1)"
  )

 The compiler comes out such error,
 error: insn does not satisfy its constraints
  (insn 349 53 46 4 ../../gcc-3.4.4/gcc/unwind-pe.h:212 (set (reg:QI 1 $1)
        (mem/s:QI (plus:SI (reg/v/f:SI 9 $9 [orig:154 p ] [154])
                (const_int 1 [0x1])) [12 S1 A8])) 45 {} (nil)
    (nil))

Well, it seems not work.

Then it's not really that you have registers. You wanted to use a register, but (of course) you have more addressing modes than that.


(mem:QI (match_operand:QI 1 "address_operand" "p"))) will do the trick. You could have searched the gccint documentation for "Constraints" and you would have found this:

     An operand that is a valid memory address is allowed.  This is for
     "load address" and "push address" instructions.

     `p' in the constraint must be accompanied by `address_operand' as
     the predicate in the `match_operand'.  This predicate interprets
     the mode specified in the `match_operand' as the mode of the memory
     reference for which the address would be valid.

(Note I have match_operand:QI).

Or you could have grepped a small .md file for "(mem:QI" and see how it behaves.

Paolo


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