Save/restore fpu registers if needed SDL-1.2
authorPatrice Mandin <patmandin@gmail.com>
Sat, 16 Sep 2006 11:50:34 +0000
branchSDL-1.2
changeset 3866 afbcf97a5dd9
parent 3865 e958a003b69b
child 3867 4dae257a9cbf
Save/restore fpu registers if needed
src/audio/mint/SDL_mintaudio_it.S
--- 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