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 12 flush_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 42 flush_cache: 43 ret 44 45 #elif defined(__hppa__) 46 47 # warning FIX ME!! 48 49 .globl flush_cache 50 flush_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 58 flush_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 68 flush_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 78 flush_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