-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARM: crypto: add NEON accelerated XOR implementation
Add a source file xor-neon.c (which is really just the reference C implementation passed through the GCC vectorizer) and hook it up to the XOR framework. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Acked-by: Nicolas Pitre <nico@linaro.org>
- Loading branch information
Ard Biesheuvel
committed
Jul 8, 2013
1 parent
73c132c
commit 0195659
Showing
3 changed files
with
121 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
/* | ||
* linux/arch/arm/lib/xor-neon.c | ||
* | ||
* Copyright (C) 2013 Linaro Ltd <ard.biesheuvel@linaro.org> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#include <linux/raid/xor.h> | ||
|
||
#ifndef __ARM_NEON__ | ||
#error You should compile this file with '-mfloat-abi=softfp -mfpu=neon' | ||
#endif | ||
|
||
/* | ||
* Pull in the reference implementations while instructing GCC (through | ||
* -ftree-vectorize) to attempt to exploit implicit parallelism and emit | ||
* NEON instructions. | ||
*/ | ||
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) | ||
#pragma GCC optimize "tree-vectorize" | ||
#else | ||
/* | ||
* While older versions of GCC do not generate incorrect code, they fail to | ||
* recognize the parallel nature of these functions, and emit plain ARM code, | ||
* which is known to be slower than the optimized ARM code in asm-arm/xor.h. | ||
*/ | ||
#warning This code requires at least version 4.6 of GCC | ||
#endif | ||
|
||
#pragma GCC diagnostic ignored "-Wunused-variable" | ||
#include <asm-generic/xor.h> | ||
|
||
struct xor_block_template const xor_block_neon_inner = { | ||
.name = "__inner_neon__", | ||
.do_2 = xor_8regs_2, | ||
.do_3 = xor_8regs_3, | ||
.do_4 = xor_8regs_4, | ||
.do_5 = xor_8regs_5, | ||
}; |