Hi!
I'm trying to allocate a scratch register: write immediate constant
into scratch register r, write register r into memory
;; write imm into memory
(define_insn_and_split "mov<mode>_imm_by_store"
[(set (match_operand:I8I16 0 "memory_operand" "=m")
(match_operand:I8I16 1 "immediate_operand" " i"))
(clobber (match_scratch:I8I16 2 "=r"))]
""
"#"
""
[(parallel
[(set (match_dup 2) (match_dup 1))
(set (match_dup 0) (match_dup 2))])]
""
)
I found that in a mips back-end. But this pattern is not recognized
during code-generation [char c1; c1 = 1;]:
simple-memory.c:19: error: unrecognizable insn:
(insn 12 11 14 3 (set (mem/c/i:QI (reg/f:SI 105) [0 c1+0 S8])
(const_int 1 [0x1])) -1 (nil)
(nil))
If I remove the clobber command and replace (match_dup 2) by
(reg:I8I16 A15_REGNUM) code will be generated (but not as wanted).
What is wrong with the code above?
Thanks,
Boris