On Tue, Aug 27, 2013 at 9:02 AM, Hendrik Greving <hendrik.greving.intel@xxxxxxxxx> wrote: > Would you say that basically you're supposed to support that in terms > of predicates so it 'passes' recog? (Please don't top-post. Thanks.) Yes, assuming your processor supports loading a full word immediate into a register in a single instruction (e.g., x86 does support that, MIPS does not). Ian > On Mon, Aug 26, 2013 at 10:50 PM, Ian Lance Taylor <iant@xxxxxxxxxx> wrote: >> On Mon, Aug 26, 2013 at 7:51 PM, Hendrik Greving >> <hendrik.greving.intel@xxxxxxxxx> wrote: >>> >>> GCC 4.8.1 generates a movsi like this when compiling newlib with my backend: >>> >>> gdb) call debug_rtx(operand0) >>> (reg:SI 356) >>> (gdb) call debug_rtx(operand1) >>> (const:SI (plus:SI (symbol_ref:SI ("_ctype_locale_buf") <var_decl >>> 0x2aaaab15d558 _ctype_locale_buf>) >>> (const_int 32 [0x20]))) >>> >>> Any idea why the compiler tries to store such a weird construct? Is it >>> weird actually, or normal? I am trying to figure out if I either >>> allowed too much at some point (predicates?) or too little (do I need >>> to handle this with instructions?)? >> >> This seems normal enough to me. It's basically >> move reg356, $_ctype_locale_buf+32 >> Here _ctype_locale_buf+32 is an immediate value which is known at link >> time. >> >> You will get this kind of thing from code like >> p = &_ctype_locale_buf[32]; >> if _ctype_locale_buf is a char array. >> >> Ian