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 ?