This is the mail archive of the gcc-help@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: Help with "unable to generate reloads for" atomic_exchangesi


On Tue, Sep 24, 2019 at 04:31:49AM -0500, William Tambe wrote:
> I have defined atomic_exchangesi as follow in the machine description:
> 
> (define_insn "atomic_exchangesi"
>  [(set (match_operand:SI 0 "register_operand" "=r,r")
>        (match_operand:SI 1 "memory_operand" "+B,W"))
>   (set (match_dup 1)
>        (unspec:SI
>         [(match_operand:SI 2 "register_operand" "0,0")
>          (match_operand:SI 3 "const_int_operand")]
>         0))]
>  ""
>  "@
>   ...
>   ...")

Don't use "+", just use matching constraints, like the "0" you already
have, but then "1"?  Like

(define_insn "atomic_exchangesi"
 [(set (match_operand:SI 0 "register_operand" "=r,r")
       (match_operand:SI 1 "memory_operand" "B,W"))
  (set (match_operand:SI 2 "memory_operand" "=1,1")
       (unspec:SI
        [(match_operand:SI 3 "register_operand" "0,0")
         (match_operand:SI 4 "const_int_operand")]
        0))]


Segher


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