forked from Minki/linux
af1a8899d2
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 or at your option any later version you should have received a copy of the gnu general public license for example usr src linux copying if not write to the free software foundation inc 675 mass ave cambridge ma 02139 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 20 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190520170858.552543146@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
182 lines
3.2 KiB
ArmAsm
182 lines
3.2 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* arch/ia64/lib/xor.S
|
|
*
|
|
* Optimized RAID-5 checksumming functions for IA-64.
|
|
*/
|
|
|
|
#include <asm/asmmacro.h>
|
|
#include <asm/export.h>
|
|
|
|
GLOBAL_ENTRY(xor_ia64_2)
|
|
.prologue
|
|
.fframe 0
|
|
.save ar.pfs, r31
|
|
alloc r31 = ar.pfs, 3, 0, 13, 16
|
|
.save ar.lc, r30
|
|
mov r30 = ar.lc
|
|
.save pr, r29
|
|
mov r29 = pr
|
|
;;
|
|
.body
|
|
mov r8 = in1
|
|
mov ar.ec = 6 + 2
|
|
shr in0 = in0, 3
|
|
;;
|
|
adds in0 = -1, in0
|
|
mov r16 = in1
|
|
mov r17 = in2
|
|
;;
|
|
mov ar.lc = in0
|
|
mov pr.rot = 1 << 16
|
|
;;
|
|
.rotr s1[6+1], s2[6+1], d[2]
|
|
.rotp p[6+2]
|
|
0:
|
|
(p[0]) ld8.nta s1[0] = [r16], 8
|
|
(p[0]) ld8.nta s2[0] = [r17], 8
|
|
(p[6]) xor d[0] = s1[6], s2[6]
|
|
(p[6+1])st8.nta [r8] = d[1], 8
|
|
nop.f 0
|
|
br.ctop.dptk.few 0b
|
|
;;
|
|
mov ar.lc = r30
|
|
mov pr = r29, -1
|
|
br.ret.sptk.few rp
|
|
END(xor_ia64_2)
|
|
EXPORT_SYMBOL(xor_ia64_2)
|
|
|
|
GLOBAL_ENTRY(xor_ia64_3)
|
|
.prologue
|
|
.fframe 0
|
|
.save ar.pfs, r31
|
|
alloc r31 = ar.pfs, 4, 0, 20, 24
|
|
.save ar.lc, r30
|
|
mov r30 = ar.lc
|
|
.save pr, r29
|
|
mov r29 = pr
|
|
;;
|
|
.body
|
|
mov r8 = in1
|
|
mov ar.ec = 6 + 2
|
|
shr in0 = in0, 3
|
|
;;
|
|
adds in0 = -1, in0
|
|
mov r16 = in1
|
|
mov r17 = in2
|
|
;;
|
|
mov r18 = in3
|
|
mov ar.lc = in0
|
|
mov pr.rot = 1 << 16
|
|
;;
|
|
.rotr s1[6+1], s2[6+1], s3[6+1], d[2]
|
|
.rotp p[6+2]
|
|
0:
|
|
(p[0]) ld8.nta s1[0] = [r16], 8
|
|
(p[0]) ld8.nta s2[0] = [r17], 8
|
|
(p[6]) xor d[0] = s1[6], s2[6]
|
|
;;
|
|
(p[0]) ld8.nta s3[0] = [r18], 8
|
|
(p[6+1])st8.nta [r8] = d[1], 8
|
|
(p[6]) xor d[0] = d[0], s3[6]
|
|
br.ctop.dptk.few 0b
|
|
;;
|
|
mov ar.lc = r30
|
|
mov pr = r29, -1
|
|
br.ret.sptk.few rp
|
|
END(xor_ia64_3)
|
|
EXPORT_SYMBOL(xor_ia64_3)
|
|
|
|
GLOBAL_ENTRY(xor_ia64_4)
|
|
.prologue
|
|
.fframe 0
|
|
.save ar.pfs, r31
|
|
alloc r31 = ar.pfs, 5, 0, 27, 32
|
|
.save ar.lc, r30
|
|
mov r30 = ar.lc
|
|
.save pr, r29
|
|
mov r29 = pr
|
|
;;
|
|
.body
|
|
mov r8 = in1
|
|
mov ar.ec = 6 + 2
|
|
shr in0 = in0, 3
|
|
;;
|
|
adds in0 = -1, in0
|
|
mov r16 = in1
|
|
mov r17 = in2
|
|
;;
|
|
mov r18 = in3
|
|
mov ar.lc = in0
|
|
mov pr.rot = 1 << 16
|
|
mov r19 = in4
|
|
;;
|
|
.rotr s1[6+1], s2[6+1], s3[6+1], s4[6+1], d[2]
|
|
.rotp p[6+2]
|
|
0:
|
|
(p[0]) ld8.nta s1[0] = [r16], 8
|
|
(p[0]) ld8.nta s2[0] = [r17], 8
|
|
(p[6]) xor d[0] = s1[6], s2[6]
|
|
(p[0]) ld8.nta s3[0] = [r18], 8
|
|
(p[0]) ld8.nta s4[0] = [r19], 8
|
|
(p[6]) xor r20 = s3[6], s4[6]
|
|
;;
|
|
(p[6+1])st8.nta [r8] = d[1], 8
|
|
(p[6]) xor d[0] = d[0], r20
|
|
br.ctop.dptk.few 0b
|
|
;;
|
|
mov ar.lc = r30
|
|
mov pr = r29, -1
|
|
br.ret.sptk.few rp
|
|
END(xor_ia64_4)
|
|
EXPORT_SYMBOL(xor_ia64_4)
|
|
|
|
GLOBAL_ENTRY(xor_ia64_5)
|
|
.prologue
|
|
.fframe 0
|
|
.save ar.pfs, r31
|
|
alloc r31 = ar.pfs, 6, 0, 34, 40
|
|
.save ar.lc, r30
|
|
mov r30 = ar.lc
|
|
.save pr, r29
|
|
mov r29 = pr
|
|
;;
|
|
.body
|
|
mov r8 = in1
|
|
mov ar.ec = 6 + 2
|
|
shr in0 = in0, 3
|
|
;;
|
|
adds in0 = -1, in0
|
|
mov r16 = in1
|
|
mov r17 = in2
|
|
;;
|
|
mov r18 = in3
|
|
mov ar.lc = in0
|
|
mov pr.rot = 1 << 16
|
|
mov r19 = in4
|
|
mov r20 = in5
|
|
;;
|
|
.rotr s1[6+1], s2[6+1], s3[6+1], s4[6+1], s5[6+1], d[2]
|
|
.rotp p[6+2]
|
|
0:
|
|
(p[0]) ld8.nta s1[0] = [r16], 8
|
|
(p[0]) ld8.nta s2[0] = [r17], 8
|
|
(p[6]) xor d[0] = s1[6], s2[6]
|
|
(p[0]) ld8.nta s3[0] = [r18], 8
|
|
(p[0]) ld8.nta s4[0] = [r19], 8
|
|
(p[6]) xor r21 = s3[6], s4[6]
|
|
;;
|
|
(p[0]) ld8.nta s5[0] = [r20], 8
|
|
(p[6+1])st8.nta [r8] = d[1], 8
|
|
(p[6]) xor d[0] = d[0], r21
|
|
;;
|
|
(p[6]) xor d[0] = d[0], s5[6]
|
|
nop.f 0
|
|
br.ctop.dptk.few 0b
|
|
;;
|
|
mov ar.lc = r30
|
|
mov pr = r29, -1
|
|
br.ret.sptk.few rp
|
|
END(xor_ia64_5)
|
|
EXPORT_SYMBOL(xor_ia64_5)
|