This is the mail archive of the gcc@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]

Allocating scratch register


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


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