changeset 3866:afbcf97a5dd9 SDL-1.2

Save/restore fpu registers if needed
author Patrice Mandin <patmandin@gmail.com>
date Sat, 16 Sep 2006 11:50:34 +0000
parents e958a003b69b
children 4dae257a9cbf
files src/audio/mint/SDL_mintaudio_it.S
diffstat 1 files changed, 51 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/audio/mint/SDL_mintaudio_it.S	Sat Sep 16 10:38:09 2006 +0000
+++ b/src/audio/mint/SDL_mintaudio_it.S	Sat Sep 16 11:50:34 2006 +0000
@@ -40,6 +40,7 @@
 	.globl	_SDL_MintAudio_numbuf
 	.globl	_SDL_MintAudio_audiosize
 	.globl	_SDL_MintAudio_clocktics
+	.globl	_SDL_MintAudio_hasfpu
 
 	.globl	_SDL_MintAudio_stfa
 
@@ -77,7 +78,7 @@
 
 	/* Check if we are not already running */
 	tstw	_SDL_MintAudio_mutex
-	bnes	SDL_MintAudio_XbiosEnd
+	bne	SDL_MintAudio_XbiosEnd
 	notw	_SDL_MintAudio_mutex
 	
 	/* Swap buffers */
@@ -85,9 +86,25 @@
 
 	moveml	d0-d7/a0-a6,sp@-
 
+	/* Save FPU if needed */
+	tstw	_SDL_MintAudio_hasfpu
+	beqs	SDL_MintAudio_Xbios_nofpu1
+	fsave	sp@-
+	fmoveml fpcr/fpsr/fpiar,sp@-
+	fmovemx	fp0-fp7,sp@-
+SDL_MintAudio_Xbios_nofpu1:
+
 	/* Callback */
 	jsr	_SDL_MintAudio_Callback
 
+	/* Restore FPU if needed */
+	tstw	_SDL_MintAudio_hasfpu
+	beqs	SDL_MintAudio_Xbios_nofpu2
+	fmovemx	sp@+,fp0-fp7
+	fmoveml	sp@+,fpcr/fpsr/fpiar
+	frestore	sp@+
+SDL_MintAudio_Xbios_nofpu2:
+
 	/* Reserve space for registers */
 	subl	#savamt,savptr
 
@@ -131,7 +148,7 @@
 
 	/* Check if we are not already running */
 	tstw	_SDL_MintAudio_mutex
-	bnes	SDL_MintAudio_Dma8End
+	bne	SDL_MintAudio_Dma8End
 	notw	_SDL_MintAudio_mutex
 	
 	/* Swap buffers */
@@ -139,9 +156,25 @@
 
 	moveml	d0-d1/a0-a1,sp@-
 
+	/* Save FPU if needed */
+	tstw	_SDL_MintAudio_hasfpu
+	beqs	SDL_MintAudio_Dma8_nofpu1
+	fsave	sp@-
+	fmoveml fpcr/fpsr/fpiar,sp@-
+	fmovemx	fp0-fp7,sp@-
+SDL_MintAudio_Dma8_nofpu1:
+
 	/* Callback */
 	jsr	_SDL_MintAudio_Callback
 
+	/* Restore FPU if needed */
+	tstw	_SDL_MintAudio_hasfpu
+	beqs	SDL_MintAudio_Dma8_nofpu2
+	fmovemx	sp@+,fp0-fp7
+	fmoveml	sp@+,fpcr/fpsr/fpiar
+	frestore	sp@+
+SDL_MintAudio_Dma8_nofpu2:
+
 	/* Set new buffer */
 
 	moveq	#0,d0
@@ -195,9 +228,25 @@
 
 	moveml	d0-d7/a0-a6,sp@-
 
+	/* Save FPU if needed */
+	tstw	_SDL_MintAudio_hasfpu
+	beqs	SDL_MintAudio_Stfa_nofpu1
+	fsave	sp@-
+	fmoveml fpcr/fpsr/fpiar,sp@-
+	fmovemx	fp0-fp7,sp@-
+SDL_MintAudio_Stfa_nofpu1:
+
 	/* Callback */
 	jsr	_SDL_MintAudio_Callback
 
+	/* Restore FPU if needed */
+	tstw	_SDL_MintAudio_hasfpu
+	beqs	SDL_MintAudio_Stfa_nofpu2
+	fmovemx	sp@+,fp0-fp7
+	fmoveml	sp@+,fpcr/fpsr/fpiar
+	frestore	sp@+
+SDL_MintAudio_Stfa_nofpu2:
+
 	/* Set new buffer */
 
 	moveq	#0,d0