On 8 December 2016 at 10:09, Thomas Preudhomme <thomas.preudho...@foss.arm.com> wrote: > > > On 08/12/16 08:46, Christophe Lyon wrote: >> >> On 21 November 2016 at 12:03, Thomas Preudhomme >> <thomas.preudho...@foss.arm.com> wrote: >>> >>> On 17/11/16 20:04, Thomas Preudhomme wrote: >>>> >>>> >>>> Hi Christophe, >>>> >>>> On 17/11/16 13:36, Christophe Lyon wrote: >>>>> >>>>> >>>>> On 16 November 2016 at 10:39, Kyrill Tkachov >>>>> <kyrylo.tkac...@foss.arm.com> wrote: >>>>>> >>>>>> >>>>>> >>>>>> On 09/11/16 16:19, Thomas Preudhomme wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> This patch fixes the following ICE when building when compiling an >>>>>>> empty >>>>>>> FIQ interrupt handler in ARM mode: >>>>>>> >>>>>>> empty_fiq_handler.c:5:1: error: insn does not satisfy its >>>>>>> constraints: >>>>>>> } >>>>>>> ^ >>>>>>> >>>>>>> (insn/f 13 12 14 (set (reg/f:SI 13 sp) >>>>>>> (plus:SI (reg/f:SI 11 fp) >>>>>>> (const_int 4 [0x4]))) irq.c:5 4 {*arm_addsi3} >>>>>>> (expr_list:REG_CFA_ADJUST_CFA (set (reg/f:SI 13 sp) >>>>>>> (plus:SI (reg/f:SI 11 fp) >>>>>>> (const_int 4 [0x4]))) >>>>>>> (nil))) >>>>>>> >>>>>>> The ICE was provoked by missing an alternative to reflect that ARM >>>>>>> mode >>>>>>> can do an add of general register into sp which is unpredictable in >>>>>>> Thumb >>>>>>> mode add immediate. >>>>>>> >>>>>>> ChangeLog entries are as follow: >>>>>>> >>>>>>> *** gcc/ChangeLog *** >>>>>>> >>>>>>> 2016-11-04 Thomas Preud'homme <thomas.preudho...@arm.com> >>>>>>> >>>>>>> * config/arm/arm.md (arm_addsi3): Add alternative for >>>>>>> addition >>>>>>> of >>>>>>> general register with general register or ARM constant into >>>>>>> SP >>>>>>> register. >>>>>>> >>>>>>> >>>>>>> *** gcc/testsuite/ChangeLog *** >>>>>>> >>>>>>> 2016-11-04 Thomas Preud'homme <thomas.preudho...@arm.com> >>>>>>> >>>>>>> * gcc.target/arm/empty_fiq_handler.c: New test. >>>>>>> >>>>>>> >>>>>>> Testing: bootstrapped on ARMv7-A ARM mode & testsuite shows no >>>>>>> regression. >>>>>>> >>>>>>> Is this ok for trunk? >>>>>>> >>>>>> >>>>>> I see that "r" does not include the stack pointer (STACK_REG is >>>>>> separate >>>>>> from GENERAL_REGs) so we are indeed missing >>>>>> that constraint. >>>>>> >>>>>> Ok for trunk. >>>>>> Thanks, >>>>>> Kyrill >>>>>> >>>>>>> Best regards, >>>>>>> >>>>>>> Thomas >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> Hi Thomas, >>>>> >>>>> The new test fails when compiled with -mthumb -march=armv5t: >>>>> gcc.target/arm/empty_fiq_handler.c: In function 'fiq_handler': >>>>> gcc.target/arm/empty_fiq_handler.c:11:1: error: interrupt Service >>>>> Routines cannot be coded in Thumb mode >>>> >>>> >>>> >>>> Right, interrupt handler can only be compiled in the mode where the CPU >>>> boots. >>>> So for non Thumb-only targets it should be compiled with -marm. I'll >>>> push >>>> a >>>> patch tomorrow. >>> >>> >>> >>> I've committed the following patch as obvious: >>> >>> Interrupt handlers on ARM can only be compiled in the execution mode >>> where >>> the processor boot. That is -mthumb for Thumb-only devices, -marm >>> otherwise. >>> This changes the empty_fiq_handler to skip the test when -mthumb is >>> passed >>> but the processor boot in ARM mode. >>> >>> ChangeLog entry is as follows: >>> >>> *** gcc/testsuite/ChangeLog *** >>> >>> 2016-11-17 Thomas Preud'homme <thomas.preudho...@arm.com> >>> >>> * gcc.target/arm/empty_fiq_handler.c: Skip if -mthumb is passed >>> in >>> and >>> target is Thumb-only. >>> >> >> Hi Thomas, >> >> As for another patch of yours, this doesn't work in GCC was configured >> --with-mode=thumb >> (the test is not skipped). But I guess you know that already :-) > > > Oh no! I wasn't aware this patch also had the issue on trunk. Ok, I better > get going with adding a dejagnu procedure to check --with-mode. > > Thanks for the feedback and sorry for that. >
No problem, I know it's a nightmare to cover all the combinations :( > Best regards, > > Thomas