forked from Minki/linux
255845fc43
Otherwise modules that use these arithmetic operations will fail to link. We accomplish this with the usual EXPORT_SYMBOL, which on most architectures goes in the .S file but the ARM64 maintainers prefer that insead it goes into arm64ksyms. While we're at it, we also fix this up to use SPDX, and I personally choose to relicense this as GPL2||BSD so that these symbols don't need to be export_symbol_gpl, so all modules can use the routines, since these are important general purpose compiler-generated function calls. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Reported-by: PaX Team <pageexec@freemail.hu> Cc: stable@vger.kernel.org Signed-off-by: Will Deacon <will.deacon@arm.com>
70 lines
909 B
ArmAsm
70 lines
909 B
ArmAsm
/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
|
|
*
|
|
* Copyright (C) 2017-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
|
*/
|
|
|
|
#include <linux/linkage.h>
|
|
|
|
ENTRY(__ashlti3)
|
|
cbz x2, 1f
|
|
mov x3, #64
|
|
sub x3, x3, x2
|
|
cmp x3, #0
|
|
b.le 2f
|
|
lsl x1, x1, x2
|
|
lsr x3, x0, x3
|
|
lsl x2, x0, x2
|
|
orr x1, x1, x3
|
|
mov x0, x2
|
|
1:
|
|
ret
|
|
2:
|
|
neg w1, w3
|
|
mov x2, #0
|
|
lsl x1, x0, x1
|
|
mov x0, x2
|
|
ret
|
|
ENDPROC(__ashlti3)
|
|
|
|
ENTRY(__ashrti3)
|
|
cbz x2, 1f
|
|
mov x3, #64
|
|
sub x3, x3, x2
|
|
cmp x3, #0
|
|
b.le 2f
|
|
lsr x0, x0, x2
|
|
lsl x3, x1, x3
|
|
asr x2, x1, x2
|
|
orr x0, x0, x3
|
|
mov x1, x2
|
|
1:
|
|
ret
|
|
2:
|
|
neg w0, w3
|
|
asr x2, x1, #63
|
|
asr x0, x1, x0
|
|
mov x1, x2
|
|
ret
|
|
ENDPROC(__ashrti3)
|
|
|
|
ENTRY(__lshrti3)
|
|
cbz x2, 1f
|
|
mov x3, #64
|
|
sub x3, x3, x2
|
|
cmp x3, #0
|
|
b.le 2f
|
|
lsr x0, x0, x2
|
|
lsl x3, x1, x3
|
|
lsr x2, x1, x2
|
|
orr x0, x0, x3
|
|
mov x1, x2
|
|
1:
|
|
ret
|
|
2:
|
|
neg w0, w3
|
|
mov x2, #0
|
|
lsr x0, x1, x0
|
|
mov x1, x2
|
|
ret
|
|
ENDPROC(__lshrti3)
|