dont try to convert the pixfmt while calculating the "shade"
[AROS.git] / arch / m68k-all / exec / cachecleare_.S
blob887127860bafb824658383414f5fdbcb0af45c9d
1 /*
2     Copyright © 1995-2001, The AROS Development Team. All rights reserved.
3     $Id$
4 */
6         #include "aros/m68k/asm.h"
7         #include "cache.h"
9         .text
10         .balign 4
11         .globl  AROS_SLIB_ENTRY(CacheClearE_00,Exec,107)
12         .type   AROS_SLIB_ENTRY(CacheClearE_00,Exec,107),@function
13 AROS_SLIB_ENTRY(CacheClearE_00,Exec,107):
15 #if CACHEDEBUG
16         bsr             cachedebug
17 #endif
19         rts
21         .globl  AROS_SLIB_ENTRY(CacheClearE_20,Exec,107)
22         .type   AROS_SLIB_ENTRY(CacheClearE_20,Exec,107),@function
23 AROS_SLIB_ENTRY(CacheClearE_20,Exec,107):
25 #if CACHEDEBUG
26         bsr             cachedebug
27 #endif
29         move.l  %a5,%a1
30         lea.l   cacheclearesup_20,%a5
31         jmp     Supervisor(%a6)
33 cacheclearesup_20:
34         and.w #0x0808,%d1
35         beq.s 0f
36         or.w    #0x0700,%sr     /* Disable interrupts so cacr can not be influenced
37                                    while we clear the caches */
38         movec   %cacr,%d0
39         or.w    %d1,%d0
40         movec   %d0,%cacr
42         move.l  %a1,%a5         /* Restore a5 */
43         rte                     /* This rte will restore the SR from the stack */
45         .text
46         .balign 4
47         .globl  AROS_SLIB_ENTRY(CacheClearE_4060,Exec,107)
48         .type   AROS_SLIB_ENTRY(CacheClearE_4060,Exec,107),@function
49 AROS_SLIB_ENTRY(CacheClearE_4060,Exec,107):
51 #if CACHEDEBUG
52         bsr             cachedebug
53 #endif
55         move.l  %a5,%a1
56         lea     cacheclearesup_4060,%a5
57         jmp     Supervisor(%a6)
59 /* CACRF_ClearI = flush both caches (new code may still be only in data cache)
60  * CACRF_ClearD = flush data cache only
61  */
63 cacheclearesup_4060:
64         move.l  %a1,%a5
65 #if CACHEFULLFLUSH == 0
66         /* just flush whole cache if region is big enough */
67         cmp.l #0x00100000,%d0
68         bhi.s 4f
69         move.l %d2,%a1
70         add.l %a0,%d0
71         move.l %a0,%d2
72         and.w #~4095,%d2
73         move.l %d2,%a0
74         move.l %a1,%d2
75         /* CACRF_ClearI set? */
76         btst #3,%d1
77         bne.s 2f
78         /* data only */
79 3:      nop
80         cpushp %dc,(%a0)
81         lea 4096(%a0),%a0
82         cmp.l %a0,%d0
83         bhi.s 3b
84         bra.s 0f
85         /* both */
86 2:      nop
87         cpushp %bc,(%a0)
88         lea 4096(%a0),%a0
89         cmp.l %a0,%d0
90         bhi.s 2b
91 0:      rte
93 #endif
95         /* flush whole cache: data only or both */
96         /* CACRF_ClearI set? */
97         btst #3,%d1
98         bne.s 1f
99         nop
100         cpusha %dc
101         rte
102 1:      nop
103         cpusha %bc
104         rte
107 #if CACHEDEBUG
108 cachedebug:     
109         movem.l %d0-%d1/%a0-%a1,-(%sp)
110         move.l  %d1,-(%sp)
111         move.l  %d0,-(%sp)
112         move.l  %a0,-(%sp)
113         pea format
114         jsr kprintf
115         lea     16(%sp),%sp
116         movem.l (%sp)+,%d0-%d1/%a0-%a1
117         rts
118 format:
119         .string "CE(%08x,%08x,%08x)\n"
120 #endif