summaryrefslogtreecommitdiff
path: root/packages/gcc/gcc-3.4.4/gcc34-thumb-clearinsn.patch
blob: 57ccb853613ab595947cec46f666789b14defeb8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
--- gcc-3.4.4/gcc/config/arm/linux-gas.h.orig	2005-08-09 08:10:22.809195204 -0700
+++ gcc-3.4.4/gcc/config/arm/linux-gas.h	2005-08-09 08:13:06.539498102 -0700
@@ -56,6 +56,7 @@
 
 /* Clear the instruction cache from `beg' to `end'.  This makes an
    inline system call to SYS_cacheflush.  */
+#if !defined(__thumb__)
 #define CLEAR_INSN_CACHE(BEG, END)					\
 {									\
   register unsigned long _beg __asm ("a1") = (unsigned long) (BEG);	\
@@ -65,3 +66,15 @@
 		    : "=r" (_beg)					\
 		    : "0" (_beg), "r" (_end), "r" (_flg));		\
 }
+#else
+#define CLEAR_INSN_CACHE(BEG, END)					\
+{									\
+  register unsigned long _beg __asm ("a1") = (unsigned long) (BEG);	\
+  register unsigned long _end __asm ("a2") = (unsigned long) (END);	\
+  register unsigned long _flg __asm ("a3") = 0;				\
+  register unsigned long _swi __asm ("r7") = 0x9f0002;			\
+  __asm __volatile ("swi 0		@ sys_cacheflush"		\
+		    : "=r" (_beg)					\
+		    : "0" (_beg), "r" (_end), "r" (_flg), "r" (_swi));	\
+}
+#endif