diff options
author | Vijay Kumar <vijay.ac.kumar@oracle.com> | 2017-10-11 20:50:04 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-11-15 06:26:46 +0100 |
commit | 70cbec0c53739e170ea9c418e740f007ab5bca52 (patch) | |
tree | b5b37614b6a07b8a1b71b27914f8730075b8e0e5 /arch/sparc/lib | |
parent | sparc64: Define SPARC default __fls function (diff) | |
download | linux-70cbec0c53739e170ea9c418e740f007ab5bca52.tar.xz linux-70cbec0c53739e170ea9c418e740f007ab5bca52.zip |
sparc64: SPARC optimized fls function
Defined SPARC optimized fls using lzcnt opcode.
Signed-off-by: Vijay Kumar <vijay.ac.kumar@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/lib')
-rw-r--r-- | arch/sparc/lib/Makefile | 1 | ||||
-rw-r--r-- | arch/sparc/lib/NG4fls.S | 20 |
2 files changed, 21 insertions, 0 deletions
diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile index 5380c5985420..2823b8e530ed 100644 --- a/arch/sparc/lib/Makefile +++ b/arch/sparc/lib/Makefile @@ -18,6 +18,7 @@ lib-$(CONFIG_SPARC32) += muldi3.o bitext.o cmpdi2.o lib-$(CONFIG_SPARC64) += multi3.o lib-$(CONFIG_SPARC64) += fls.o lib-$(CONFIG_SPARC64) += fls64.o +obj-$(CONFIG_SPARC64) += NG4fls.o lib-$(CONFIG_SPARC64) += copy_page.o clear_page.o bzero.o lib-$(CONFIG_SPARC64) += csum_copy.o csum_copy_from_user.o csum_copy_to_user.o diff --git a/arch/sparc/lib/NG4fls.S b/arch/sparc/lib/NG4fls.S new file mode 100644 index 000000000000..bc17b65f1052 --- /dev/null +++ b/arch/sparc/lib/NG4fls.S @@ -0,0 +1,20 @@ +/* NG4fls.S: SPARC optimized fls and __fls for T4 and above. + * + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + */ + +#include <linux/linkage.h> + +#define LZCNT_O0_G2 \ + .word 0x85b002e8 + + .text + .register %g2, #scratch + .register %g3, #scratch + +ENTRY(NG4fls) + LZCNT_O0_G2 !lzcnt %o0, %g2 + mov 64, %g3 + retl + sub %g3, %g2, %o0 +ENDPROC(NG4fls) |