r_icu_feret.h 6.77 KB
Newer Older
hu's avatar
hu committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
/*===========================================================================*/
/* Module      = icu_feret.h                                                 */
/* Version     = V3.03                                                       */
/*               generated by DeFiXRH850 0.7.2.3                             */
/*===========================================================================*/
/*                                  COPYRIGHT                                */
/*===========================================================================*/
/* Copyright (c) 2014 by Renesas Electronics Europe GmbH,                    */
/*               a company of the Renesas Electronics Corporation            */
/*===========================================================================*/
/* Purpose:      Definition of ICU Macros                                    */
/*                                                                           */
/*===========================================================================*/
/*                                                                           */
/* Warranty Disclaimer                                                       */
/*                                                                           */
/* Because the Product(s) is licensed free of charge, there is no warranty   */
/* of any kind whatsoever and expressly disclaimed and excluded by Renesas,  */
/* either expressed or implied, including but not limited to those for       */
/* non-infringement of intellectual property, merchantability and/or         */
/* fitness for the particular purpose.                                       */
/* Renesas shall not have any obligation to maintain, service or provide bug */
/* fixes for the supplied Product(s) and/or the Application.                 */
/*                                                                           */
/* Each User is solely responsible for determining the appropriateness of    */
/* using the Product(s) and assumes all risks associated with its exercise   */
/* of rights under this Agreement, including, but not limited to the risks   */
/* and costs of program errors, compliance with applicable laws, damage to   */
/* or loss of data, programs or equipment, and unavailability or             */
/* interruption of operations.                                               */
/*                                                                           */
/* Limitation of Liability                                                   */
/*                                                                           */
/* In no event shall Renesas be liable to the User for any incidental,       */
/* consequential, indirect, or punitive damage (including but not limited    */
/* to lost profits) regardless of whether such liability is based on breach  */
/* of contract, tort, strict liability, breach of warranties, failure of     */
/* essential purpose or otherwise and even if advised of the possibility of  */
/* such damages. Renesas shall not be liable for any services or products    */
/* provided by third party vendors, developers or consultants identified or  */
/* referred to the User by Renesas in connection with the Product(s) and/or  */
/* the Application.                                                          */
/*                                                                           */
/*===========================================================================*/
/* Environment:                                                              */
/*         Device:         RH850G3M core devices (with FPU)                  */
/*                         RH850G3K core devices (__HAS_FPU__ is undefined)  */
/*         IDE:            GHS Multi for V800  V6.xx or later                */
/*===========================================================================*/
#if defined (__ghs__)
#pragma ghs startnomisra
#endif

#ifndef __ICU_FERET_H__
 #define __ICU_FERET_H__

 #define __HAS_FPU__
/* #undef __HAS_FPU__ */ 
 asm void FETRAP_ENTRY( void)
 {
   pushsp  lp-lp
   pushsp  r1-r2
   #if (__V800_registermode==32)
     pushsp  r5-r31
   #endif
   #if (__V800_registermode==26)
     pushsp  r5-r16     -- r17 to r22 are reserved for user
     pushsp  r23-r31
   #endif
   #if (__V800_registermode==22)
     pushsp  r5-r14     -- r15 to r24 are reserved for user
     pushsp  r25-r31
   #endif
   pushsp  ep-ep
   stsr  FEIC,  r6,  0      -- FEIC
   stsr  FEPSW, r7,  0      -- FEPSW
   stsr  FEPC,  r8,  0      -- FEPC
   #ifndef __V800_ignore_callt_state_in_interrupts__
     stsr  CTPSW, r9,  0      -- CTPSW
     stsr  CTPC,  r10, 0      -- CTPC
     #ifdef __HAS_FPU__
       stsr  FPSR,  r11, 0      -- FPSR
       stsr  FPEPC, r12, 0      -- FPEPC
       pushsp  r6-r12           -- FPU and CALLT to save
     #else
       pushsp  r6-r10           -- CALLT to save
     #endif    /* __HAS_FPU__ */
   #else 	/* do not save callt control registers */
     #ifdef __HAS_FPU__
       stsr	FPSR,  r9, 0     -- FPSR
       stsr	FPEPC, r10, 0    -- FPEPC
       pushsp	r6-r10           -- FPU reg to save
     #else
       pushsp	r6-r8            -- no FPU and no CALLT
     #endif    /* __HAS_FPU__ */
   #endif    /*__V800_ignore_callt_state_in_interrupts__*/
 }

 asm void FETRAP_LEAVE( void)
 { 
   #ifndef __V800_ignore_callt_state_in_interrupts__
     #ifdef __HAS_FPU__
       popsp r6-r12
       ldsr  r12, FPEPC, 0      -- FPEPC
       ldsr  r11, FPSR,  0      -- FPSR
       ldsr  r10, CTPC,  0      -- CTPC
       ldsr  r9,  CTPSW, 0      -- CTPSW
     #else
       popsp r6-r10
       ldsr  r10,  CTPC,  0     -- CTPC
       ldsr  r9,   CTPSW, 0     -- CTPSW
     #endif    /* __HAS_FPU__ */
   #else 	/* do not restore callt control registers */ 
     #ifdef __HAS_FPU__
       popsp r6-r10
       ldsr  r10, FPEPC, 0      -- FPEPC
       ldsr  r9,  FPSR,  0      -- FPSR
     #else
       popsp r6-r8
     #endif    /* __HAS_FPU__ */
   #endif   /* __V800_ignore_callt_state_in_interrupts__ */
	ldsr	r8,  FEPC,  0      -- FEPC
	ldsr	r7,  FEPSW, 0      -- FEPSW
	ldsr	r6,  FEIC, 0       -- FEIC
	popsp	ep-ep
  #if (__V800_registermode==32)
    popsp r5-r31
  #endif
  #if (__V800_registermode==26)
    popsp r23-r31       -- r17 to r22 are reserved for user
    popsp r5-r16
  #endif
  #if (__V800_registermode==22)
    popsp r25-r31       -- r15 to r24 are reserved for user
    popsp r5-r14
  #endif
    popsp r1-r2
    popsp lp-lp
    feret  
 }

 #define PRAGMA(x) _Pragma(#x)

 #define FETRAP_EXCEPTION( name, isr) \
   __attribute__((noinline)) void isr( void); \
   PRAGMA( ghs noprologue)            \
   void name( void) {                 \
     FETRAP_ENTRY();                  \
     isr();                           \
     FETRAP_LEAVE();                  \
   }

#if defined (__ghs__)
#pragma ghs endnomisra
#endif

#endif  /* __ICU_FERET_H__ */