Also save/restore fpu register in vbl interrupt
authorPatrice Mandin <patmandin@gmail.com>
Sat, 21 Oct 2006 18:56:35 +0000
changeset 2052 eb5e61b72da3
parent 2051 c03f1446e897
child 2053 716cf90f24a0
Also save/restore fpu register in vbl interrupt
src/timer/mint/SDL_systimer.c
src/timer/mint/SDL_vbltimer.S
--- a/src/timer/mint/SDL_systimer.c	Fri Oct 20 00:15:18 2006 +0000
+++ b/src/timer/mint/SDL_systimer.c	Sat Oct 21 18:56:35 2006 +0000
@@ -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;
@@ -124,6 +127,8 @@
 
     supervisor = SDL_FALSE;
 
+    SDL_MintAudio_CheckFpu();
+
     /* Install RunTimer in vbl vector */
     oldpile = (void *) Super(0);
     timer_installed = !SDL_AtariVblInstall(RunTimer);
--- a/src/timer/mint/SDL_vbltimer.S	Fri Oct 20 00:15:18 2006 +0000
+++ b/src/timer/mint/SDL_vbltimer.S	Sat Oct 21 18:56:35 2006 +0000
@@ -33,6 +33,8 @@
 	.globl	_SDL_AtariVblInstall
 	.globl	_SDL_AtariVblUninstall
 
+	.globl	_SDL_MintAudio_hasfpu
+
 /*--- Vector installer ---*/
 
 _SDL_AtariVblInstall:
@@ -113,8 +115,30 @@
 	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