On 01/08/2010 16:26, Gabor Kerenyi wrote:
I'm porting GCC 4.4.4 to a new arch and while cross-compiling libgcc I get
the
following error:
../../../libgcc/../gcc/libgcc2.c: In function ‘__clzsi2’:
../../../libgcc/../gcc/libgcc2.c:716: error: unrecognizable insn:
(insn 49 48 50 16 ../../../libgcc/../gcc/libgcc2.c:713 (set (reg:QI 25)
(mem/s/u/j:QI (plus:SI (reg/f:SI 22)
(reg:SI 23)) [0 __clz_tab S1 A8])) -1 (nil))
../../../libgcc/../gcc/libgcc2.c:716: internal compiler error: in
extract_insn, at recog.c:2048
Please submit a full bug report,
If I understand correctly it complains about a move instruction where src
memory location should be (reg22+reg23). My arch defines:
#define MAX_REGS_PER_ADDRESS 1
the first pseudo reg is 13
So I don't really understand why it tries to use such a pattern.
I think the wording of the second sentence in the M_R_P_A documentation
(beginning 'Note that ...'):
-- Macro: MAX_REGS_PER_ADDRESS
A number, the maximum number of registers that can appear in a
valid memory address. Note that it is up to you to specify a
value equal to the maximum number that
`TARGET_LEGITIMATE_ADDRESS_P' would ever accept.
... is meant to imply that you /also/ need to reject such address patterns in
TARGET_LEGITIMATE_ADDRESS_P, i.e. M_R_P_A only /informs/ the compiler of the
most registers that will be in any address that T_L_A_P ends up accepting, it
doesn't set a limit on what the compiler will ask T_L_A_P to decide if it's ok
or not.
cheers,
DaveK