]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/libsdl/contrib/src/timer/mint/SDL_vbltimer.S
update
[l4.git] / l4 / pkg / libsdl / contrib / src / timer / mint / SDL_vbltimer.S
index 2d3a76a5f8d862cd0b550ef7bd2ddadef9fcfa7a..7837afce08d0ddb3029a7dd9e4eb28ec64839f83 100644 (file)
@@ -1,6 +1,6 @@
 /*
     SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2009 Sam Lantinga
+    Copyright (C) 1997-2012 Sam Lantinga
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
 
        .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 @@ bcl_search_place:
        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 @@ bcl2_search_place:
        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 @@ badvector:
 /*--- 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 @@ SDL_AtariVbl_nofpu1:
        /* 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