File indexing completed on 2025-05-11 08:23:48
0001 #include <rtems/score/cpu.h>
0002
0003
0004
0005
0006 CPU_ISR_raw_handler M68040FPSPUserExceptionHandlers[9];
0007
0008
0009
0010
0011
0012 static int
0013 FPSP_install_raw_handler(
0014 uint32_t vector,
0015 CPU_ISR_raw_handler new_handler,
0016 CPU_ISR_raw_handler *old_handler
0017 )
0018 {
0019 int fpspVector;
0020
0021 switch (vector) {
0022 default: return 0;
0023 case 11: fpspVector = 0; break;
0024 case 48: fpspVector = 1; break;
0025 case 49: fpspVector = 2; break;
0026 case 50: fpspVector = 3; break;
0027 case 51: fpspVector = 4; break;
0028 case 52: fpspVector = 5; break;
0029 case 53: fpspVector = 6; break;
0030 case 54: fpspVector = 7; break;
0031 case 55: fpspVector = 8; break;
0032 }
0033 *old_handler = M68040FPSPUserExceptionHandlers[fpspVector];
0034 M68040FPSPUserExceptionHandlers[fpspVector] = new_handler;
0035 return 1;
0036 }
0037
0038
0039
0040
0041 extern void _fpspEntry_fline(void);
0042 extern void _fpspEntry_bsun(void);
0043 extern void _fpspEntry_inex(void);
0044 extern void _fpspEntry_dz(void);
0045 extern void _fpspEntry_unfl(void);
0046 extern void _fpspEntry_ovfl(void);
0047 extern void _fpspEntry_operr(void);
0048 extern void _fpspEntry_snan(void);
0049 extern void _fpspEntry_unsupp(void);
0050
0051
0052
0053
0054
0055
0056
0057 void
0058 M68KFPSPInstallExceptionHandlers (void)
0059 {
0060 static struct {
0061 int vector_number;
0062 void (*handler)(void);
0063 } fpspHandlers[] = {
0064 { 11, _fpspEntry_fline },
0065 { 48, _fpspEntry_bsun },
0066 { 49, _fpspEntry_inex },
0067 { 50, _fpspEntry_dz },
0068 { 51, _fpspEntry_unfl },
0069 { 52, _fpspEntry_operr },
0070 { 53, _fpspEntry_ovfl },
0071 { 54, _fpspEntry_snan },
0072 { 55, _fpspEntry_unsupp },
0073 };
0074 int i;
0075 CPU_ISR_raw_handler oldHandler;
0076
0077 for (i = 0 ; i < sizeof fpspHandlers / sizeof fpspHandlers[0] ; i++) {
0078 _CPU_ISR_install_raw_handler(fpspHandlers[i].vector_number, fpspHandlers[i].handler, &oldHandler);
0079 M68040FPSPUserExceptionHandlers[i] = oldHandler;
0080 }
0081 _FPSP_install_raw_handler = FPSP_install_raw_handler;
0082 }