]>
Commit | Line | Data |
---|---|---|
01956597 AB |
1 | /* |
2 | * linux/arch/arm/lib/xor-neon.c | |
3 | * | |
4 | * Copyright (C) 2013 Linaro Ltd <ard.biesheuvel@linaro.org> | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License version 2 as | |
8 | * published by the Free Software Foundation. | |
9 | */ | |
10 | ||
11 | #include <linux/raid/xor.h> | |
12 | ||
13 | #ifndef __ARM_NEON__ | |
14 | #error You should compile this file with '-mfloat-abi=softfp -mfpu=neon' | |
15 | #endif | |
16 | ||
17 | /* | |
18 | * Pull in the reference implementations while instructing GCC (through | |
19 | * -ftree-vectorize) to attempt to exploit implicit parallelism and emit | |
20 | * NEON instructions. | |
21 | */ | |
22 | #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) | |
23 | #pragma GCC optimize "tree-vectorize" | |
24 | #else | |
25 | /* | |
26 | * While older versions of GCC do not generate incorrect code, they fail to | |
27 | * recognize the parallel nature of these functions, and emit plain ARM code, | |
28 | * which is known to be slower than the optimized ARM code in asm-arm/xor.h. | |
29 | */ | |
30 | #warning This code requires at least version 4.6 of GCC | |
31 | #endif | |
32 | ||
33 | #pragma GCC diagnostic ignored "-Wunused-variable" | |
34 | #include <asm-generic/xor.h> | |
35 | ||
36 | struct xor_block_template const xor_block_neon_inner = { | |
37 | .name = "__inner_neon__", | |
38 | .do_2 = xor_8regs_2, | |
39 | .do_3 = xor_8regs_3, | |
40 | .do_4 = xor_8regs_4, | |
41 | .do_5 = xor_8regs_5, | |
42 | }; |