On Fri, Jun 02, 2006 at 08:23:49AM +0200, Wolfgang Mües wrote:
> Rask,
> 
> (_only_ adding the clobber statement),
> I get

> >0/newlib/li bc/argz/argz_create_sep.c:60: error: unrecognizable insn:
> (insn 192 21 24 0 (set (reg:QI 1 r1) (reg:QI 4 r4)) -1
>      (nil) (nil))
> 
> What do you mean with
> 
> > You will also have to modify any code which 
> > expands this pattern accordingly.

The rest of the ARM backend presently assumes that the pattern has the form

(set (operand:QI 0) (operand:QI 1))

but now we've changed it to

(parallel [(set (operand:QI 0) (operand:QI 1))
           (clobber (operand:QI 2))
])

so that's why you get "unrecognizable insn" errors now. Any place which
intended to generate an *arm_movqi_insn has to add a clobber also. For a
start, this means the "movqi" pattern.

There may be a faster way of seeing if the modification is going to work for
the DS at all. I noticed from the output template "swp%?b\\t%1, %1, [%M0]"
that "swp" takes three operands. I don't know ARM assembler, but you may be
able to choose to always clobber a specific register. Make it a fixed register
(see FIXED_REGISTERS), refer to this register directly in the output template
and don't add a clobber to the movqi patterns. IMHO, that's an acceptable hack
at an experimental stage. If the resulting code runs correctly on the DS, you
can then undo the FIXED_REGISTERS change and add the clobber statements.

-- 
Rask Ingemann Lambertsen

Reply via email to