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))] "" "@ ... ...") However GCC throw the following error for atomic_exchangesi: Any idea what could be the cause of such an error ? error: unable to generate reloads for: 902 | } | ^ (insn 89 86 90 12 (parallel [ (set (reg:SI 4 %4 [orig:36 _30 ] [36]) (mem/v:SI (plus:SI (reg/f:SI 0 %sp) (const_int 36 [0x24])) [-1 S4 A32])) (set (mem/v:SI (plus:SI (reg/f:SI 0 %sp) (const_int 36 [0x24])) [-1 S4 A32]) (unspec:SI [ (reg:SI 3 %3 [orig:34 _28 ] [34]) (const_int 32770 [0x8002]) ] 0)) ]) "/linux/include/asm-generic/atomic.h":118:1 35 {atomic_exchangesi} (nil)) during RTL pass: reload