source: rtems/bsps/m68k/shared/fpsp/rtems_fpsp.c

Last change on this file was 3fe2155, checked in by Sebastian Huber <sebastian.huber@…>, on 02/01/19 at 09:00:36

Remove superfluous <rtems/system.h> includes

  • Property mode set to 100644
File size: 2.3 KB
Line 
1#include <rtems/score/cpu.h>
2
3/*
4 * User exception handlers
5 */
6CPU_ISR_raw_handler M68040FPSPUserExceptionHandlers[9];
7
8/*
9 * Intercept requests to install an exception handler.
10 * FPSP exceptions get special treatment.
11 */
12static int
13FPSP_install_raw_handler(
14  uint32_t vector,
15  CPU_ISR_raw_handler new_handler,
16  CPU_ISR_raw_handler *old_handler
17)
18{
19  int fpspVector;
20
21  switch (vector) {
22  default:      return 0;       /* Non-FPSP vector */
23  case 11:      fpspVector = 0; break;  /* F-line */
24  case 48:      fpspVector = 1; break;  /* BSUN */
25  case 49:      fpspVector = 2; break;  /* INEXACT */
26  case 50:      fpspVector = 3; break;  /* DIVIDE-BY-ZERO */
27  case 51:      fpspVector = 4; break;  /* UNDERFLOW */
28  case 52:      fpspVector = 5; break;  /* OPERAND ERROR */
29  case 53:      fpspVector = 6; break;  /* OVERFLOW */
30  case 54:      fpspVector = 7; break;  /* SIGNALLING NAN */
31  case 55:      fpspVector = 8; break;  /* UNIMPLEMENTED DATA TYPE */
32  }
33  *old_handler = M68040FPSPUserExceptionHandlers[fpspVector];
34  M68040FPSPUserExceptionHandlers[fpspVector] = new_handler;
35  return 1;
36}
37
38/*
39 *  Exception handlers provided by FPSP package.
40 */
41extern void _fpspEntry_fline(void);
42extern void _fpspEntry_bsun(void);
43extern void _fpspEntry_inex(void);
44extern void _fpspEntry_dz(void);
45extern void _fpspEntry_unfl(void);
46extern void _fpspEntry_ovfl(void);
47extern void _fpspEntry_operr(void);
48extern void _fpspEntry_snan(void);
49extern void _fpspEntry_unsupp(void);
50
51/*
52 * Attach floating point exception vectors to M68040FPSP entry points
53 *
54 *  NOTE: Uses M68K rather than M68040 in the name so all CPUs having
55 *        an FPSP can share the same code in RTEMS proper.
56 */
57void
58M68KFPSPInstallExceptionHandlers (void)
59{
60  static struct {
61    int  vector_number;
62    void  (*handler)(void);
63  } fpspHandlers[] = {
64    { 11,  _fpspEntry_fline },
65    { 48,  _fpspEntry_bsun },
66    { 49,  _fpspEntry_inex },
67    { 50,  _fpspEntry_dz },
68    { 51,  _fpspEntry_unfl },
69    { 52,  _fpspEntry_operr },
70    { 53,  _fpspEntry_ovfl },
71    { 54,  _fpspEntry_snan },
72    { 55,  _fpspEntry_unsupp },
73  };
74  int i;
75  CPU_ISR_raw_handler oldHandler;
76
77  for (i = 0 ; i < sizeof fpspHandlers / sizeof fpspHandlers[0] ; i++) {
78    _CPU_ISR_install_raw_handler(fpspHandlers[i].vector_number, fpspHandlers[i].handler, &oldHandler);
79      M68040FPSPUserExceptionHandlers[i] = oldHandler;
80  }
81  _FPSP_install_raw_handler = FPSP_install_raw_handler;
82}
Note: See TracBrowser for help on using the repository browser.