1#ifdef HAVE_CONFIG_H 2# include "config.h" 3#endif 4 5#ifndef HAVE__BUILTIN___CLEAR_CACHE 6 7#if defined(__ia64__) 8 9 .global flush_cache 10 11 .proc flush_cache 12flush_cache: 13 .prologue 14 alloc r2=ar.pfs,2,0,0,0 15 add r8=31,in1 // round up to 32 byte-boundary 16 ;; 17 shr.u r8=r8,5 // we flush 32 bytes per iteration 18 ;; 19 add r8=-1,r8 20 .save ar.lc, r3 21 mov r3=ar.lc // save ar.lc 22 ;; 23 .body 24 25 mov ar.lc=r8 26 ;; 27.loop: fc in0 // issuable on M0 only 28 add in0=32,in0 29 br.cloop.sptk.few .loop 30 ;; 31 sync.i 32 ;; 33 srlz.i 34 ;; 35 mov ar.lc=r3 // restore ar.lc 36 br.ret.sptk.many rp 37 .endp flush_cache 38 39#elif defined(__i386__) || defined (__x86_64__) 40 41 .globl flush_cache 42flush_cache: 43 ret 44 45#elif defined(__hppa__) 46 47# warning FIX ME!! 48 49 .globl flush_cache 50flush_cache: 51 .proc 52 .callinfo 53 bv %r0(%rp) 54 .procend 55#elif defined(__powerpc64__) 56# warning IMPLEMENT ME FOR PPC64!! 57 .globl flush_cache 58flush_cache: 59 lwz 11, 0(1) ; 60 lwz 0, 4(11) ; 61 mtlr 0 ; 62 lwz 31, -4(11) ; 63 mr 1, 11 ; 64 blr 65#elif defined(__powerpc__) 66# warning IMPLEMENT ME FOR PPC32!! 67 .globl flush_cache 68flush_cache: 69 lwz 11, 0(1) ; 70 lwz 0, 4(11) ; 71 mtlr 0 ; 72 lwz 31, -4(11) ; 73 mr 1, 11 ; 74 blr 75#elif defined(__arm__) 76 .text 77 .globl flush_cache 78flush_cache: 79 bx lr 80 81#else 82# error Need flush_cache code for this architecture. 83#endif 84 85#if defined ( __linux__) && !defined (__arm__) 86 /* We do not need executable stack. */ 87 .section .note.GNU-stack,"",@progbits 88#endif 89 90#endif 91