1 | /* |
1 | /* |
2 | * libecb - http://software.schmorp.de/pkg/libecb |
2 | * libecb - http://software.schmorp.de/pkg/libecb |
3 | * |
3 | * |
4 | * Copyright (©) 2009-2013 Marc Alexander Lehmann <libecb@schmorp.de> |
4 | * Copyright (©) 2009-2014 Marc Alexander Lehmann <libecb@schmorp.de> |
5 | * Copyright (©) 2011 Emanuele Giaquinta |
5 | * Copyright (©) 2011 Emanuele Giaquinta |
6 | * All rights reserved. |
6 | * All rights reserved. |
7 | * |
7 | * |
8 | * Redistribution and use in source and binary forms, with or without modifica- |
8 | * Redistribution and use in source and binary forms, with or without modifica- |
9 | * tion, are permitted provided that the following conditions are met: |
9 | * tion, are permitted provided that the following conditions are met: |
… | |
… | |
23 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
23 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
24 | * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
24 | * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
25 | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- |
25 | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- |
26 | * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
26 | * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
27 | * OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | * OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
28 | * |
|
|
29 | * Alternatively, the contents of this file may be used under the terms of |
|
|
30 | * the GNU General Public License ("GPL") version 2 or any later version, |
|
|
31 | * in which case the provisions of the GPL are applicable instead of |
|
|
32 | * the above. If you wish to allow the use of your version of this file |
|
|
33 | * only under the terms of the GPL and not to allow others to use your |
|
|
34 | * version of this file under the BSD license, indicate your decision |
|
|
35 | * by deleting the provisions above and replace them with the notice |
|
|
36 | * and other provisions required by the GPL. If you do not delete the |
|
|
37 | * provisions above, a recipient may use your version of this file under |
|
|
38 | * either the BSD or the GPL. |
28 | */ |
39 | */ |
29 | |
40 | |
30 | #ifndef ECB_H |
41 | #ifndef ECB_H |
31 | #define ECB_H |
42 | #define ECB_H |
32 | |
43 | |
… | |
… | |
142 | || defined __ARM_ARCH_6K__ || defined __ARM_ARCH_6ZK__ |
153 | || defined __ARM_ARCH_6K__ || defined __ARM_ARCH_6ZK__ |
143 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("mcr p15,0,%0,c7,c10,5" : : "r" (0) : "memory") |
154 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("mcr p15,0,%0,c7,c10,5" : : "r" (0) : "memory") |
144 | #elif defined __ARM_ARCH_7__ || defined __ARM_ARCH_7A__ \ |
155 | #elif defined __ARM_ARCH_7__ || defined __ARM_ARCH_7A__ \ |
145 | || defined __ARM_ARCH_7M__ || defined __ARM_ARCH_7R__ |
156 | || defined __ARM_ARCH_7M__ || defined __ARM_ARCH_7R__ |
146 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("dmb" : : : "memory") |
157 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("dmb" : : : "memory") |
|
|
158 | #elif __aarch64__ |
|
|
159 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("dmb ish" : : : "memory") |
147 | #elif (__sparc || __sparc__) && !__sparcv8 |
160 | #elif (__sparc || __sparc__) && !__sparcv8 |
148 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad | #StoreStore | #StoreLoad" : : : "memory") |
161 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad | #StoreStore | #StoreLoad" : : : "memory") |
149 | #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad" : : : "memory") |
162 | #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad" : : : "memory") |
150 | #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("membar #LoadStore | #StoreStore") |
163 | #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("membar #LoadStore | #StoreStore") |
151 | #elif defined __s390__ || defined __s390x__ |
164 | #elif defined __s390__ || defined __s390x__ |
… | |
… | |
592 | /* the only noteworthy exception is ancient armle, which uses order 43218765 */ |
605 | /* the only noteworthy exception is ancient armle, which uses order 43218765 */ |
593 | #if 0 \ |
606 | #if 0 \ |
594 | || __i386 || __i386__ \ |
607 | || __i386 || __i386__ \ |
595 | || __amd64 || __amd64__ || __x86_64 || __x86_64__ \ |
608 | || __amd64 || __amd64__ || __x86_64 || __x86_64__ \ |
596 | || __powerpc__ || __ppc__ || __powerpc64__ || __ppc64__ \ |
609 | || __powerpc__ || __ppc__ || __powerpc64__ || __ppc64__ \ |
597 | || defined __arm__ && defined __ARM_EABI__ \ |
|
|
598 | || defined __s390__ || defined __s390x__ \ |
610 | || defined __s390__ || defined __s390x__ \ |
599 | || defined __mips__ \ |
611 | || defined __mips__ \ |
600 | || defined __alpha__ \ |
612 | || defined __alpha__ \ |
601 | || defined __hppa__ \ |
613 | || defined __hppa__ \ |
602 | || defined __ia64__ \ |
614 | || defined __ia64__ \ |
603 | || defined __m68k__ \ |
615 | || defined __m68k__ \ |
604 | || defined __m88k__ \ |
616 | || defined __m88k__ \ |
605 | || defined __sh__ \ |
617 | || defined __sh__ \ |
606 | || defined _M_IX86 || defined _M_AMD64 || defined _M_IA64 |
618 | || defined _M_IX86 || defined _M_AMD64 || defined _M_IA64 \ |
|
|
619 | || (defined __arm__ && (defined __ARM_EABI__ || defined __EABI__ || defined __VFP_FP__ || defined _WIN32_WCE || defined __ANDROID__)) \ |
|
|
620 | || defined __aarch64__ |
607 | #define ECB_STDFP 1 |
621 | #define ECB_STDFP 1 |
608 | #include <string.h> /* for memcpy */ |
622 | #include <string.h> /* for memcpy */ |
609 | #else |
623 | #else |
610 | #define ECB_STDFP 0 |
624 | #define ECB_STDFP 0 |
611 | #endif |
625 | #endif |