summaryrefslogblamecommitdiffstats
path: root/cpukit/score/cpu/powerpc/include/rtems/score/powerpc.h
blob: 542ab154d20939c8e85c8a8078e9b100be08e435 (plain) (tree)
1
2
3
4
5
6
7
8
9

                                           
   

        
                                          


                                                              


   























                                                                      







                                                                          
  










                                                                              


   

                              




                  
                                 








                                                        
                                 
   
 


                  


                                                      
     
                                              

      






                                                                       

                                                           




                                            

                                           
 
  















                                                 


                                                                              
   


                                                        

  
                                                       

   


                                                                       

                     


                     







                                                       





                           





                                   




                                                                         
                                        

   




                        

  








                                                                  

   
                       

  
                                                                  
   
                           
 




                  
                                   
/* SPDX-License-Identifier: BSD-2-Clause */

/**
 * @file
 * 
 * @brief IBM/Motorola PowerPC Definitions
 * 
 * This file contains definitions for the IBM/Motorola PowerPC
 * family members.
 */

/*
 *  Author:	Andrew Bray <andy@i-cubed.co.uk>
 *
 *  COPYRIGHT (c) 1995 by i-cubed ltd.
 *
 *  MPC860 support code was added by Jay Monkman <jmonkman@frasca.com>
 *  MPC8260 support added by Andy Dachs <a.dachs@sstl.co.uk>
 *  Surrey Satellite Technology Limited
 *
 *  To anyone who acknowledges that this file is provided "AS IS"
 *  without any express or implied warranty:
 *      permission to use, copy, modify, and distribute this file
 *      for any purpose is hereby granted without fee, provided that
 *      the above copyright notice and this notice appears in all
 *      copies, and that the name of i-cubed limited not be used in
 *      advertising or publicity pertaining to distribution of the
 *      software without specific, written prior permission.
 *      i-cubed limited makes no representations about the suitability
 *      of this software for any purpose.
 *
 *  Derived from c/src/exec/cpu/no_cpu/no_cpu.h:
 *
 *  COPYRIGHT (c) 1989-1997.
 *  On-Line Applications Research Corporation (OAR).
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */


#ifndef _RTEMS_SCORE_POWERPC_H
#define _RTEMS_SCORE_POWERPC_H

#ifdef __cplusplus
extern "C" {
#endif

#include <rtems/score/basedefs.h>

/*
 *  Define the name of the CPU family.
 */

#define CPU_NAME "PowerPC"

/*
 *  This file contains the information required to build
 *  RTEMS for the PowerPC family.
 */

/* Generic ppc */

#ifdef _SOFT_FLOAT
#define CPU_MODEL_NAME "Generic (no FPU)"
#elif defined(__NO_FPRS__) || defined(__SPE__)
#define CPU_MODEL_NAME "Generic (E500/float-gprs/SPE)"
#else
#define CPU_MODEL_NAME "Generic (classic FPU)"
#endif

#ifdef __PPC_CPU_E6500__
#define PPC_DEFAULT_CACHE_LINE_POWER 6
#else
#define PPC_DEFAULT_CACHE_LINE_POWER 5
#endif

#define PPC_DEFAULT_CACHE_LINE_SIZE (1 << PPC_DEFAULT_CACHE_LINE_POWER)

#define PPC_STRUCTURE_ALIGNMENT PPC_DEFAULT_CACHE_LINE_SIZE

/*
 *  Application binary interfaces.
 *
 *  PPC_ABI MUST be defined as one of these.
 *  Only big endian is currently supported.
 */

/*
 *  SVR4 ABI
 */
#define PPC_ABI_SVR4		2
/*
 *  Embedded ABI
 */
#define PPC_ABI_EABI		3

/*
 *  Default to the EABI used by current GNU tools
 */

#ifndef PPC_ABI
#define PPC_ABI PPC_ABI_EABI
#endif

/*
 *  Use worst case stack alignment.  For the EABI an 8-byte alignment would be
 *  sufficient.
 */

#define PPC_STACK_ALIGN_POWER 4
#define PPC_STACK_ALIGNMENT (1 << PPC_STACK_ALIGN_POWER)

/*
 *  Assume PPC_HAS_FPU to be a synonym for _SOFT_FLOAT.
 */

#if defined(_SOFT_FLOAT) \
  || defined(__NO_FPRS__) /* e500 has unified integer/FP registers */ \
  || defined(__PPC_CPU_E6500__)
#define PPC_HAS_FPU 0
#else
#define PPC_HAS_FPU 1
#endif

#if defined(__PPC_CPU_E6500__) && defined(__ALTIVEC__)
#define PPC_MULTILIB_ALTIVEC
#endif

#if defined(__PPC_CPU_E6500__) && !defined(_SOFT_FLOAT)
#define PPC_MULTILIB_FPU
#endif

#ifdef PPC_MULTILIB_ALTIVEC
#define PPC_ALIGNMENT 16
#else
#define PPC_ALIGNMENT 8
#endif

#ifdef __powerpc64__
#define PPC_STACK_RED_ZONE_SIZE 512
#else
#define PPC_STACK_RED_ZONE_SIZE 0
#endif

/*
 *  Unless specified above, If the model has FP support, it is assumed to
 *  support doubles (8-byte floating point numbers).
 *
 *  If the model does NOT have FP support, then the model does
 *  NOT have double length FP registers.
 */

#if (PPC_HAS_FPU)
#define PPC_HAS_DOUBLE 1
#else
#define PPC_HAS_DOUBLE 0
#endif

/*
 *  Assemblers.
 *  PPC_ASM MUST be defined as one of these.
 *
 *  PPC_ASM_ELF:   ELF assembler. Currently used for all ABIs.
 *
 *  NOTE: Only PPC_ABI_ELF is currently fully supported.
 *
 *  Also NOTE: cpukit doesn't need this but asm.h which is defined
 *             in cpukit for consistency with other ports does.
 */

#define PPC_ASM_ELF   0

/*
 *  Default to the assembler format used by the current GNU tools.
 */
#define PPC_ASM PPC_ASM_ELF


#ifdef __cplusplus
}
#endif

#endif /* _RTEMS_SCORE_POWERPC_H */