forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
43 lines
1.2 KiB
// SPDX-License-Identifier: GPL-2.0-only |
|
/* |
|
* linux/arch/arm/lib/xor-neon.c |
|
* |
|
* Copyright (C) 2013 Linaro Ltd <[email protected]> |
|
*/ |
|
|
|
#include <linux/raid/xor.h> |
|
#include <linux/module.h> |
|
|
|
MODULE_LICENSE("GPL"); |
|
|
|
#ifndef __ARM_NEON__ |
|
#error You should compile this file with '-march=armv7-a -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, |
|
}; |
|
EXPORT_SYMBOL(xor_block_neon_inner);
|
|
|