Changeset e339d8b in rtems


Ignore:
Timestamp:
Jun 11, 2008, 8:19:13 AM (12 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, 4.9, master
Children:
a552181
Parents:
84fff68d
Message:

hris Johns <chrisj@…>

  • cpu_asm.S: Add Coldfire FPU support.
  • rtems/score/m68k.h: Change the Coldfire CPU defines to be based on the instruction set. Add Tiny RTEMS support to the small memory model RTEMS processors.
  • rtems/score/cpu.h: Handle the new Tiny RTEMS support.
Location:
cpukit/score/cpu/m68k
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • cpukit/score/cpu/m68k/ChangeLog

    r84fff68d re339d8b  
     12008-06-10      Chris Johns <chrisj@rtems.org>
     2
     3        * cpu_asm.S: Add Coldfire FPU support.
     4        * rtems/score/m68k.h: Change the Coldfire CPU defines to be based
     5        on the instruction set. Add Tiny RTEMS support to the small memory
     6        model RTEMS processors.
     7        * rtems/score/cpu.h: Handle the new Tiny RTEMS support.
     8
    192008-06-05      Joel Sherrill <joel.sherrill@OARcorp.com>
    210
  • cpukit/score/cpu/m68k/cpu_asm.S

    r84fff68d re339d8b  
    6060
    6161.set FPCONTEXT_ARG,   4                   | save FP context argument
     62.set FP_STATE_SAVED,  (4*4)               | FPU state is 4 longwords
     63.set FP_REGS_SAVED,   (8*8)               | FPU regs is 8 64bit values
    6264
    6365        .align  4
     
    6769        moval    a7@(FPCONTEXT_ARG),a1    | a1 = &ptr to context area
    6870        moval    a1@,a0                   | a0 = Save context area
     71#if ( !defined(__mcoldfire__) && !__mc68060__ )
    6972        fsave    a0@-                     | save 68881/68882 state frame
     73#else
     74        lea      a0@(-FP_STATE_SAVED),a0  | save the state of the FPU
     75        fsave    a0@                      | on a Coldfire and 68060.
     76#endif
    7077        tstb     a0@                      | check for a null frame
    7178        beq.b    nosv                     | Yes, skip save of user model
     79#if ( !defined(__mcoldfire__) )
    7280        fmovem   fp0-fp7,a0@-             | save data registers (fp0-fp7)
    7381        fmovem   fpc/fps/fpi,a0@-         | and save control registers
     82#else
     83        lea      a0@(-FP_REGS_SAVED),a0
     84        fmovem   fp0-fp7,a0@              | save data registers (fp0-fp7)
     85        fmove.l  fpc,a0@-                 | and save control registers
     86        fmove.l  fps,a0@-
     87        fmove.l  fpi,a0@-
     88#endif
    7489        movl     #-1,a0@-                 | place not-null flag on stack
    7590nosv:   movl     a0,a1@                   | save pointer to saved context
     
    86101        beq.b    norst                    | Yes, skip fp restore
    87102        addql    #4,a0                    | throwaway non-null flag
     103#if ( !defined(__mcoldfire__) )
    88104        fmovem   a0@+,fpc/fps/fpi         | restore control registers
    89105        fmovem   a0@+,fp0-fp7             | restore data regs (fp0-fp7)
    90106norst:  frestore a0@+                     | restore the fp state frame
     107#else
     108        fmove.l  a0@+,fpc                 | restore control registers
     109        fmove.l  a0@+,fps   
     110        fmove.l  a0@+,fpi
     111        fmovem   a0@,fp0-fp7              | restore data regs (fp0-fp7)
     112        lea      a0@(FP_REGS_SAVED),a0
     113norst:  frestore a0@                      | restore the fp state frame
     114        lea      a0@(FP_STATE_SAVED),a0
     115#endif
    91116        movl     a0,a1@                   | save pointer to saved context
    92117#endif
     
    196221 * without the dispatch level being incremented.
    197222 */
    198   #if ( !defined(__mcoldfire__) && M68K_MC68060_ARCH == 0 )
     223  #if ( !defined(__mcoldfire__) && !__mc68060__ )
    199224        cmpl    #_ISR_Handler,a7@(SAVED+PC_OFFSET)
    200225        beq.b   exit       
  • cpukit/score/cpu/m68k/rtems/score/cpu.h

    r84fff68d re339d8b  
    277277 */
    278278
    279 #define CPU_STACK_MINIMUM_SIZE           4096
     279#define CPU_STACK_MINIMUM_SIZE           M68K_CPU_STACK_MINIMUM_SIZE
     280
     281/*
     282 *  Maximum priority of a thread. Note based from 0 which is the idle task.
     283 */
     284#define CPU_PRIORITY_MAXIMUM             M68K_CPU_PRIORITY_MAXIMUM
    280285
    281286/*
     
    464469  asm volatile( "bfffo (%1),#0,#16,%0" : "=d" (_output) : "a" (&_value));
    465470
    466 #elif ( M68K_HAS_ISA_APLUS == 1 )
     471#elif ( __mcfisaaplus__ )
    467472  /* This is simplified by the fact that RTEMS never calls it with _value=0 */
    468473#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
  • cpukit/score/cpu/m68k/rtems/score/m68k.h

    r84fff68d re339d8b  
    8585
    8686/*
     87 * Handle the Coldfire family based on the instruction set.
     88 */
     89#if defined(__mcoldfire__)
     90
     91# define CPU_NAME "Motorola ColdFire"
     92
     93# if defined(__mcfisaa__)
     94/* Motorola ColdFire ISA A */
     95# define CPU_MODEL_NAME         "mcfisaa"
     96# define M68K_HAS_VBR             1
     97# define M68K_HAS_BFFFO           0
     98# define M68K_HAS_SEPARATE_STACKS 0
     99# define M68K_HAS_PREINDEXING     0
     100# define M68K_HAS_EXTB_L          1
     101# define M68K_HAS_MISALIGNED      1
     102
     103# elif defined(__mcfisaaplus__)
     104/* Motorola ColdFire ISA A+ */
     105# define CPU_MODEL_NAME         "mcfisaaplus"
     106# define M68K_HAS_VBR             1
     107# define M68K_HAS_BFFFO           0
     108# define M68K_HAS_SEPARATE_STACKS 0
     109# define M68K_HAS_PREINDEXING     0
     110# define M68K_HAS_EXTB_L          1
     111# define M68K_HAS_MISALIGNED      1
     112
     113# elif defined(__mcfisab__)
     114/* Motorola ColdFire ISA B */
     115# define CPU_MODEL_NAME         "mcfisab"
     116# define M68K_HAS_VBR             1
     117# define M68K_HAS_BFFFO           0
     118# define M68K_HAS_SEPARATE_STACKS 0
     119# define M68K_HAS_PREINDEXING     0
     120# define M68K_HAS_EXTB_L          1
     121# define M68K_HAS_MISALIGNED      1
     122
     123# else
     124# error "Unsupported Coldfire ISA -- Please notify RTEMS"
     125# endif
     126
     127/*
     128 * Assume the FPU support is independent. I think it is just the ISA B
     129 * instruction set.
     130 */
     131# if defined (__mcffpu__)
     132# define M68K_HAS_FPU            1
     133# define M68K_HAS_FPSP_PACKAGE   0
     134# else
     135# define M68K_HAS_FPU            0
     136# define M68K_HAS_FPSP_PACKAGE   0
     137# endif
     138
     139/*
     140 * Tiny RTEMS support. Small stack and limited priorities.
     141 */
     142# if (defined(__mcf_cpu_52221) || \
     143      defined(__mcf_cpu_52223) || \
     144      defined(__mcf_cpu_52230) || \
     145      defined(__mcf_cpu_52231) || \
     146      defined(__mcf_cpu_52232) || \
     147      defined(__mcf_cpu_52233) || \
     148      defined(__mcf_cpu_52234) || \
     149      defined(__mcf_cpu_52235) || \
     150      defined(__mcf_cpu_52225) || \
     151      defined(__mcf_cpu_52235))
     152# define M68K_CPU_STACK_MINIMUM_SIZE 2048
     153/* Define the lowest priority. Based from 0 to this is 16 levels. */
     154# define M68K_CPU_PRIORITY_MAXIMUM   15
     155# else
     156# define M68K_CPU_STACK_MINIMUM_SIZE 4096
     157# define M68K_CPU_PRIORITY_MAXIMUM   255
     158# endif
     159
     160#else
     161
     162/*
    87163 *  Figure out all CPU Model Feature Flags based upon compiler
    88164 *  predefines.   Notice the only exception to this is that
     
    93169 */
    94170
    95 #if (defined(__mc68020__) && !defined(__mcpu32__))
    96  
    97 #define CPU_MODEL_NAME          "m68020"
    98 #define M68K_HAS_VBR             1
    99 #define M68K_HAS_SEPARATE_STACKS 1
    100 #define M68K_HAS_BFFFO           1
    101 #define M68K_HAS_PREINDEXING     1
    102 #define M68K_HAS_EXTB_L          1
    103 #define M68K_HAS_MISALIGNED      1
    104 # if defined (__HAVE_68881__)
    105 # define M68K_HAS_FPU            1
    106 # define M68K_HAS_FPSP_PACKAGE   0
     171# define CPU_NAME "Motorola MC68xxx"
     172
     173/*
     174 * One stack size fits all 68000 processors.
     175 */
     176# define M68K_CPU_STACK_MINIMUM_SIZE 4096
     177
     178# if (defined(__mc68020__) && !defined(__mcpu32__))
     179
     180# define CPU_MODEL_NAME          "m68020"
     181# define M68K_HAS_VBR             1
     182# define M68K_HAS_SEPARATE_STACKS 1
     183# define M68K_HAS_BFFFO           1
     184# define M68K_HAS_PREINDEXING     1
     185# define M68K_HAS_EXTB_L          1
     186# define M68K_HAS_MISALIGNED      1
     187#  if defined (__HAVE_68881__)
     188#  define M68K_HAS_FPU            1
     189#  define M68K_HAS_FPSP_PACKAGE   0
     190#  else
     191#  define M68K_HAS_FPU            0
     192#  define M68K_HAS_FPSP_PACKAGE   0
     193#  endif
     194 
     195# elif defined(__mc68030__)
     196 
     197# define CPU_MODEL_NAME          "m68030"
     198# define M68K_HAS_VBR             1
     199# define M68K_HAS_SEPARATE_STACKS 1
     200# define M68K_HAS_BFFFO           1
     201# define M68K_HAS_PREINDEXING     1
     202# define M68K_HAS_EXTB_L          1
     203# define M68K_HAS_MISALIGNED      1
     204#  if defined (__HAVE_68881__)
     205#  define M68K_HAS_FPU            1
     206#  define M68K_HAS_FPSP_PACKAGE   0
     207#  else
     208#  define M68K_HAS_FPU            0
     209#  define M68K_HAS_FPSP_PACKAGE   0
     210#  endif
     211 
     212# elif defined(__mc68040__)
     213
     214# define CPU_MODEL_NAME          "m68040"
     215# define M68K_HAS_VBR             1
     216# define M68K_HAS_SEPARATE_STACKS 1
     217# define M68K_HAS_BFFFO           1
     218# define M68K_HAS_PREINDEXING     1
     219# define M68K_HAS_EXTB_L          1
     220# define M68K_HAS_MISALIGNED      1
     221#  if defined (__HAVE_68881__)
     222#  define M68K_HAS_FPU            1
     223#  define M68K_HAS_FPSP_PACKAGE   1
     224#  else
     225#  define M68K_HAS_FPU            0
     226#  define M68K_HAS_FPSP_PACKAGE   0
     227#  endif
     228 
     229# elif defined(__mc68060__)
     230
     231# define CPU_MODEL_NAME          "m68060"
     232# define M68K_HAS_VBR             1
     233# define M68K_HAS_SEPARATE_STACKS 0
     234# define M68K_HAS_BFFFO           1
     235# define M68K_HAS_PREINDEXING     1
     236# define M68K_HAS_EXTB_L          1
     237# define M68K_HAS_MISALIGNED      1
     238#  if defined (__HAVE_68881__)
     239#  define M68K_HAS_FPU            1
     240#  define M68K_HAS_FPSP_PACKAGE   0
     241#  else
     242#  define M68K_HAS_FPU            0
     243#  define M68K_HAS_FPSP_PACKAGE   0
     244#  endif
     245 
     246# elif defined(__mc68302__)
     247
     248# define CPU_MODEL_NAME          "m68302"
     249# define M68K_HAS_VBR             0
     250# define M68K_HAS_SEPARATE_STACKS 0
     251# define M68K_HAS_BFFFO           0
     252# define M68K_HAS_PREINDEXING     0
     253# define M68K_HAS_EXTB_L          0
     254# define M68K_HAS_MISALIGNED      0
     255# define M68K_HAS_FPU             0
     256# define M68K_HAS_FPSP_PACKAGE    0
     257
     258  /* gcc and egcs do not distinguish between CPU32 and CPU32+ */
     259# elif defined(RTEMS__mcpu32p__)
     260 
     261# define CPU_MODEL_NAME          "mcpu32+"
     262# define M68K_HAS_VBR             1
     263# define M68K_HAS_SEPARATE_STACKS 0
     264# define M68K_HAS_BFFFO           0
     265# define M68K_HAS_PREINDEXING     1
     266# define M68K_HAS_EXTB_L          1
     267# define M68K_HAS_MISALIGNED      1
     268# define M68K_HAS_FPU             0
     269# define M68K_HAS_FPSP_PACKAGE    0
     270
     271# elif defined(__mcpu32__)
     272 
     273# define CPU_MODEL_NAME          "mcpu32"
     274# define M68K_HAS_VBR             1
     275# define M68K_HAS_SEPARATE_STACKS 0
     276# define M68K_HAS_BFFFO           0
     277# define M68K_HAS_PREINDEXING     1
     278# define M68K_HAS_EXTB_L          1
     279# define M68K_HAS_MISALIGNED      0
     280# define M68K_HAS_FPU             0
     281# define M68K_HAS_FPSP_PACKAGE    0
     282
     283# elif defined(__mc68000__)
     284 
     285# define CPU_MODEL_NAME          "m68000"
     286# define M68K_HAS_VBR             0
     287# define M68K_HAS_SEPARATE_STACKS 0
     288# define M68K_HAS_BFFFO           0
     289# define M68K_HAS_PREINDEXING     0
     290# define M68K_HAS_EXTB_L          0
     291# define M68K_HAS_MISALIGNED      0
     292#  if defined (__HAVE_68881__)
     293#  define M68K_HAS_FPU            1
     294#  define M68K_HAS_FPSP_PACKAGE   0
     295#  else
     296#  define M68K_HAS_FPU            0
     297#  define M68K_HAS_FPSP_PACKAGE   0
     298#  endif
     299
    107300# else
    108 # define M68K_HAS_FPU            0
    109 # define M68K_HAS_FPSP_PACKAGE   0
     301
     302# error "Unsupported 68000 CPU model -- are you sure you're running a 68k compiler?"
     303
    110304# endif
    111  
    112 #elif defined(__mc68030__)
    113  
    114 #define CPU_MODEL_NAME          "m68030"
    115 #define M68K_HAS_VBR             1
    116 #define M68K_HAS_SEPARATE_STACKS 1
    117 #define M68K_HAS_BFFFO           1
    118 #define M68K_HAS_PREINDEXING     1
    119 #define M68K_HAS_EXTB_L          1
    120 #define M68K_HAS_MISALIGNED      1
    121 # if defined (__HAVE_68881__)
    122 # define M68K_HAS_FPU            1
    123 # define M68K_HAS_FPSP_PACKAGE   0
    124 # else
    125 # define M68K_HAS_FPU            0
    126 # define M68K_HAS_FPSP_PACKAGE   0
    127 # endif
    128  
    129 #elif defined(__mc68040__)
    130 
    131 #define CPU_MODEL_NAME          "m68040"
    132 #define M68K_HAS_VBR             1
    133 #define M68K_HAS_SEPARATE_STACKS 1
    134 #define M68K_HAS_BFFFO           1
    135 #define M68K_HAS_PREINDEXING     1
    136 #define M68K_HAS_EXTB_L          1
    137 #define M68K_HAS_MISALIGNED      1
    138 # if defined (__HAVE_68881__)
    139 # define M68K_HAS_FPU            1
    140 # define M68K_HAS_FPSP_PACKAGE   1
    141 # else
    142 # define M68K_HAS_FPU            0
    143 # define M68K_HAS_FPSP_PACKAGE   0
    144 # endif
    145  
    146 #elif defined(__mc68060__)
    147 
    148 #define CPU_MODEL_NAME          "m68060"
    149 #define M68K_HAS_VBR             1
    150 #define M68K_HAS_SEPARATE_STACKS 0
    151 #define M68K_HAS_BFFFO           1
    152 #define M68K_HAS_PREINDEXING     1
    153 #define M68K_HAS_EXTB_L          1
    154 #define M68K_HAS_MISALIGNED      1
    155 # if defined (__HAVE_68881__)
    156 # define M68K_HAS_FPU            1
    157 # define M68K_HAS_FPSP_PACKAGE   0
    158 # else
    159 # define M68K_HAS_FPU            0
    160 # define M68K_HAS_FPSP_PACKAGE   0
    161 # endif
    162  
    163 #elif defined(__mc68302__)
    164 
    165 #define CPU_MODEL_NAME          "m68302"
    166 #define M68K_HAS_VBR             0
    167 #define M68K_HAS_SEPARATE_STACKS 0
    168 #define M68K_HAS_BFFFO           0
    169 #define M68K_HAS_PREINDEXING     0
    170 #define M68K_HAS_EXTB_L          0
    171 #define M68K_HAS_MISALIGNED      0
    172 #define M68K_HAS_FPU             0
    173 #define M68K_HAS_FPSP_PACKAGE    0
    174 
    175   /* gcc and egcs do not distinguish between CPU32 and CPU32+ */
    176 #elif defined(RTEMS__mcpu32p__)
    177  
    178 #define CPU_MODEL_NAME          "mcpu32+"
    179 #define M68K_HAS_VBR             1
    180 #define M68K_HAS_SEPARATE_STACKS 0
    181 #define M68K_HAS_BFFFO           0
    182 #define M68K_HAS_PREINDEXING     1
    183 #define M68K_HAS_EXTB_L          1
    184 #define M68K_HAS_MISALIGNED      1
    185 #define M68K_HAS_FPU             0
    186 #define M68K_HAS_FPSP_PACKAGE    0
    187 
    188 #elif defined(__mcpu32__)
    189  
    190 #define CPU_MODEL_NAME          "mcpu32"
    191 #define M68K_HAS_VBR             1
    192 #define M68K_HAS_SEPARATE_STACKS 0
    193 #define M68K_HAS_BFFFO           0
    194 #define M68K_HAS_PREINDEXING     1
    195 #define M68K_HAS_EXTB_L          1
    196 #define M68K_HAS_MISALIGNED      0
    197 #define M68K_HAS_FPU             0
    198 #define M68K_HAS_FPSP_PACKAGE    0
    199 
    200 #elif defined(__mcf528x__)
    201 /* Motorola ColdFire ISA A+ - RISC/68020 hybrid */
    202 #define CPU_MODEL_NAME         "m528x"
    203 #define M68K_HAS_VBR             1
    204 #define M68K_HAS_BFFFO           0
    205 #define M68K_HAS_SEPARATE_STACKS 0
    206 #define M68K_HAS_PREINDEXING     0
    207 #define M68K_HAS_EXTB_L          1
    208 #define M68K_HAS_MISALIGNED      1
    209 #define M68K_HAS_FPU             0
    210 #define M68K_HAS_FPSP_PACKAGE    0
    211 #define M68K_HAS_ISA_APLUS       1
    212 
    213 #elif defined(__mcf5200__)
    214 /* Motorola ColdFire V2 core - RISC/68020 hybrid */
    215 #define CPU_MODEL_NAME         "m5200"
    216 #define M68K_HAS_VBR             1
    217 #define M68K_HAS_BFFFO           0
    218 #define M68K_HAS_SEPARATE_STACKS 0
    219 #define M68K_HAS_PREINDEXING     0
    220 #define M68K_HAS_EXTB_L          1
    221 #define M68K_HAS_MISALIGNED      1
    222 #define M68K_HAS_FPU             0
    223 #define M68K_HAS_FPSP_PACKAGE    0
    224 #define M68K_HAS_ISA_APLUS       0
    225 
    226 #elif defined(__mcf5307__)
    227 /* UNCHECKED */
    228 /* Motorola ColdFire 5307 */
    229 #define CPU_MODEL_NAME         "m5307"
    230 #define M68K_HAS_VBR             1
    231 #define M68K_HAS_BFFFO           0
    232 #define M68K_HAS_SEPARATE_STACKS 0
    233 #define M68K_HAS_PREINDEXING     0
    234 #define M68K_HAS_EXTB_L          1
    235 #define M68K_HAS_MISALIGNED      1
    236 #define M68K_HAS_FPU             0
    237 #define M68K_HAS_FPSP_PACKAGE    0
    238 #define M68K_HAS_ISA_APLUS       0
    239 
    240 #elif defined(__mcf5407__)
    241 #if defined(__mcfv4e__)
    242 /* UNCHECKED */
    243 /* Motorola ColdFire V4e */
    244 #define CPU_MODEL_NAME         "mcfv4e"
    245 #define M68K_HAS_VBR             1
    246 #define M68K_HAS_BFFFO           0
    247 #define M68K_HAS_SEPARATE_STACKS 0
    248 #define M68K_HAS_PREINDEXING     0
    249 #define M68K_HAS_EXTB_L          1
    250 #define M68K_HAS_MISALIGNED      1
    251 #define M68K_HAS_FPU             0
    252 #define M68K_HAS_FPSP_PACKAGE    0
    253 #define M68K_HAS_ISA_APLUS       0
    254 #else
    255 /* UNCHECKED */
    256 /* Motorola ColdFire 5407 */
    257 #define CPU_MODEL_NAME         "m5407"
    258 #define M68K_HAS_VBR             1
    259 #define M68K_HAS_BFFFO           0
    260 #define M68K_HAS_SEPARATE_STACKS 0
    261 #define M68K_HAS_PREINDEXING     0
    262 #define M68K_HAS_EXTB_L          1
    263 #define M68K_HAS_MISALIGNED      1
    264 #define M68K_HAS_FPU             0
    265 #define M68K_HAS_FPSP_PACKAGE    0
    266 #define M68K_HAS_ISA_APLUS       0
    267 #endif
    268 
    269 #elif defined(__mc68000__)
    270  
    271 #define CPU_MODEL_NAME          "m68000"
    272 #define M68K_HAS_VBR             0
    273 #define M68K_HAS_SEPARATE_STACKS 0
    274 #define M68K_HAS_BFFFO           0
    275 #define M68K_HAS_PREINDEXING     0
    276 #define M68K_HAS_EXTB_L          0
    277 #define M68K_HAS_MISALIGNED      0
    278 # if defined (__HAVE_68881__)
    279 # define M68K_HAS_FPU            1
    280 # define M68K_HAS_FPSP_PACKAGE   0
    281 # else
    282 # define M68K_HAS_FPU            0
    283 # define M68K_HAS_FPSP_PACKAGE   0
    284 # endif
    285 
    286 #else
    287 
    288 #error "Unsupported CPU model -- are you sure you're running a 68k compiler?"
     305
     306/*
     307 * No Tiny RTEMS support on the standard 68000 family.
     308 */
     309# define M68K_CPU_STACK_MINIMUM_SIZE 4096
     310# define M68K_CPU_PRIORITY_MAXIMUM   255
    289311
    290312#endif
     
    300322 */
    301323#if defined(__mcoldfire__)
    302 #define M68K_COLDFIRE_ARCH      1
     324#define M68K_COLDFIRE_ARCH  1
    303325#else
    304326#define M68K_COLDFIRE_ARCH      0
    305 #endif
    306 
    307 /*
    308  *  Define the name of the CPU family.
    309  */
    310 
    311 #if ( defined(__mcoldfire__) )
    312   #define CPU_NAME "Motorola ColdFire"
    313 #else
    314   #define CPU_NAME "Motorola MC68xxx"
    315327#endif
    316328
Note: See TracChangeset for help on using the changeset viewer.