Allocating scratch register

Boris Boesler baembel@gmx.de
Wed Jan 9 18:26:00 GMT 2008


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



More information about the Gcc mailing list