From 61ea67894ba3403712cbcae9953c967ae4e07835 Mon Sep 17 00:00:00 2001 From: Patrice Mandin Date: Sat, 21 Oct 2006 18:53:33 +0000 Subject: [PATCH] Also save/restore fpu register in vbl interrupt --- src/timer/mint/SDL_systimer.c | 5 +++++ src/timer/mint/SDL_vbltimer.S | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/timer/mint/SDL_systimer.c b/src/timer/mint/SDL_systimer.c index 8963ca0b7..0a3e71a84 100644 --- a/src/timer/mint/SDL_systimer.c +++ b/src/timer/mint/SDL_systimer.c @@ -48,6 +48,9 @@ #include "SDL_vbltimer_s.h" +/* from audio/mint */ +void SDL_MintAudio_CheckFpu(void); + /* The first ticks value of the application */ static Uint32 start; static SDL_bool supervisor; @@ -119,6 +122,8 @@ int SDL_SYS_TimerInit(void) supervisor=SDL_FALSE; + SDL_MintAudio_CheckFpu(); + /* Install RunTimer in vbl vector */ oldpile=(void *)Super(0); timer_installed = !SDL_AtariVblInstall(RunTimer); diff --git a/src/timer/mint/SDL_vbltimer.S b/src/timer/mint/SDL_vbltimer.S index d9b4a1b9b..6dfd49970 100644 --- a/src/timer/mint/SDL_vbltimer.S +++ b/src/timer/mint/SDL_vbltimer.S @@ -33,6 +33,8 @@ .globl _SDL_AtariVblInstall .globl _SDL_AtariVblUninstall + .globl _SDL_MintAudio_hasfpu + /*--- Vector installer ---*/ _SDL_AtariVblInstall: @@ -113,8 +115,30 @@ _my_vbl: notw vbl_mutex moveml d0-d7/a0-a6,sp@- + + /* Save FPU if needed */ + tstw _SDL_MintAudio_hasfpu + beqs SDL_AtariVbl_nofpu1 + .chip 68060 + fsave sp@- + fmoveml fpcr/fpsr/fpiar,sp@- + fmovemx fp0-fp7,sp@- + .chip 68000 +SDL_AtariVbl_nofpu1: + movel my_vector,a0 jsr a0@ + + /* Restore FPU if needed */ + tstw _SDL_MintAudio_hasfpu + beqs SDL_AtariVbl_Xbios_nofpu2 + .chip 68060 + fmovemx sp@+,fp0-fp7 + fmoveml sp@+,fpcr/fpsr/fpiar + frestore sp@+ + .chip 68000 +SDL_AtariVbl_Xbios_nofpu2: + moveml sp@+,d0-d7/a0-a6 clrw vbl_mutex