Mercurial > sdl-ios-xcode
diff src/timer/mint/SDL_vbltimer.S @ 4381:5425a6fbacf8 SDL-1.2
Adapt timer code for Coldfire
author | Patrice Mandin <patmandin@gmail.com> |
---|---|
date | Sat, 07 Nov 2009 20:56:09 +0000 |
parents | a1b03ba2fcd0 |
children |
line wrap: on
line diff
--- a/src/timer/mint/SDL_vbltimer.S Sat Nov 07 20:45:45 2009 +0000 +++ b/src/timer/mint/SDL_vbltimer.S Sat Nov 07 20:56:09 2009 +0000 @@ -36,14 +36,61 @@ .globl _SDL_MintAudio_hasfpu +/*--- Save/restore FPU context ---*/ + +#if defined(__mcoldfire__) + +#define SAVE_FPU_CONTEXT \ + lea sp@(-216),sp; \ + fsave sp@; \ + fmovel fpiar,sp@-; \ + lea sp@(-64),sp; \ + fmovemd fp0-fp7,sp@ + +#define RESTORE_FPU_CONTEXT \ + fmovemd sp@,fp0-fp7; \ + lea sp@(64),sp; \ + fmovel sp@+,fpiar; \ + frestore sp@; \ + lea sp@(216),sp + +#else + +#define SAVE_FPU_CONTEXT \ + .chip 68k/68881; \ + fsave sp@-; \ + fmoveml fpcr/fpsr/fpiar,sp@-; \ + fmovemx fp0-fp7,sp@-; \ + .chip 68k + +#define RESTORE_FPU_CONTEXT \ + .chip 68k/68881; \ + fmovemx sp@+,fp0-fp7; \ + fmoveml sp@+,fpcr/fpsr/fpiar; \ + frestore sp@+; \ + .chip 68k + +#endif + /*--- Vector installer ---*/ _SDL_AtariVblInstall: +#if defined(__mcoldfire__) + movel sp@(4),d0 + movel d0,my_vector +#else movel sp@(4),my_vector +#endif + lea _my_vbl,a0 clrw vbl_mutex +#if defined(__mcoldfire__) + movel _hz_200.w,d0 + movel d0, _SDL_Atari_hz200 +#else movel _hz_200.w, _SDL_Atari_hz200 +#endif /* Stop interrupts */ @@ -58,7 +105,12 @@ movel (a1),d1 beqs place_found addql #4,a1 +#if defined(__mcoldfire__) + subql #1,d0 + bpls bcl_search_place +#else dbra d0,bcl_search_place +#endif /* Not found */ moveq #1,d0 @@ -100,7 +152,12 @@ moveq #0,d1 next_place: addql #4,a1 +#if defined(__mcoldfire__) + subql #1,d1 + bpls bcl_search_place +#else dbra d1,bcl2_search_place +#endif /* Restart interrupts */ movew #0x2300,sr @@ -110,25 +167,37 @@ /*--- Our vbl ---*/ _my_vbl: +#if defined(__mcoldfire__) + lea sp@(-60),sp + moveml d0-d7/a0-a6,sp@ +#else + moveml d0-d7/a0-a6,sp@- +#endif + /* Update _hz_200 */ +#if defined(__mcoldfire__) + movel _hz_200.w,d0 + movel d0, _SDL_Atari_hz200 +#else movel _hz_200.w, _SDL_Atari_hz200 +#endif /* Verify if this is not already running */ tstw vbl_mutex bnes vbl_end +#if defined(__mcoldfire__) + movew vbl_mutex,d0 + notl d0 + movew d0,vbl_mutex +#else notw vbl_mutex - - moveml d0-d7/a0-a6,sp@- +#endif /* 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 + SAVE_FPU_CONTEXT SDL_AtariVbl_nofpu1: movel my_vector,a0 @@ -137,17 +206,17 @@ /* 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 + RESTORE_FPU_CONTEXT SDL_AtariVbl_Xbios_nofpu2: - moveml sp@+,d0-d7/a0-a6 - clrw vbl_mutex vbl_end: +#if defined(__mcoldfire__) + moveml sp@,d0-d7/a0-a6 + lea sp@(60),sp +#else + moveml sp@+,d0-d7/a0-a6 +#endif rts .data