6d5144998a84c3933d769a5da157890476e4ef17
[platform/upstream/libunwind.git] / tests / flush-cache.S
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