how to force mem constraint for symbol ?

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

 



Let's consider the following code snippet that retrieve the address of a label:

mylabel:
void* ptr = &&mylabel;

when compiling the above, GCC associate the label with the constraint "i".

However, I am unable to force GCC to associate symbols with the
constraint "A" that I am defining in the excerpt below:

----------------------------------------
(define_constraint "A"
 "A memory address."
 (and (match_code "mem")
      (ior (match_test "GET_CODE (XEXP (op, 0)) == SYMBOL_REF")
           (match_test "GET_CODE (XEXP (op, 0)) == LABEL_REF")
           (match_test "GET_CODE (XEXP (op, 0)) == CONST"))))

(define_insn "movsi"
 [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r")
       (match_operand:SI 1 "general_operand"      "A,i"))]
 ""
 "@
  gip %0, %1
  li %0, %1")
----------------------------------------------------------

GCC always choose to match the line "li %0, %1" instead of the line
"gip %0, %1".

How can I force GCC to match "gip %0, %1" for a symbol ?



[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