From 94e3fe4dda6da37c7e8b702b0eb1bb750f4c8412 Mon Sep 17 00:00:00 2001
From: Nagaraju Mekala <nmekala@xilinx.com>
Date: Sat, 4 Apr 2020 14:40:08 +0530
Subject: [PATCH]Microblaze: Fixed missing save of r18 in
 fast_interrupt.     Register 18 is used as a clobber register, and must be
 stored when     entering a fast_interrupt. Before this fix, register 18 was
 only     saved if it was used directly in the interrupt function.

    However, if the fast_interrupt function called a function that used
    r18, the register would not be saved, and thus be mangled
    upon returning from the interrupt.

    Changelog

    2020-04-04  Klaus Petersen <klauspetersen@gmail.com>

     * gcc/config/microblaze/microblaze.c: Check for fast_interrupt in
       microblaze_must_save_register.

    Signed-off-by: Klaus Petersen <klauspetersen@gmail.com>
    Signed-off-by :Nagaraju Mekala <nmekala@xilix.com>
---
 gcc/config/microblaze/microblaze.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/config/microblaze/microblaze.c b/gcc/config/microblaze/microblaze.c
index b4754b1..67e393d 100644
--- a/gcc/config/microblaze/microblaze.c
+++ b/gcc/config/microblaze/microblaze.c
@@ -2035,7 +2035,7 @@ microblaze_must_save_register (int regno)
     {
       if (df_regs_ever_live_p (regno) 
 	  || regno == MB_ABI_MSR_SAVE_REG
-	  || (interrupt_handler
+	  || ((interrupt_handler || fast_interrupt)	  
               && (regno == MB_ABI_ASM_TEMP_REGNUM
 	          || regno == MB_ABI_EXCEPTION_RETURN_ADDR_REGNUM)))
 	return 1;
-- 
1.8.3.1

