Thank you. I fixed the error. it caused by macro: #define ELIMINABLE_REGS \ {\
{ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ {ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM} \ } because everytime when gcc check the frame_pointer_need, if it is false, aim eliminated register is SP. But in the former array, gcc still got FP. So error accurred. Now it is OK with the following: #define ELIMINABLE_REGS \ {\ {ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM} \ } just exchange the former two elements. So thanks for your guys.