| xj | b04a402 | 2021-11-25 15:01:52 +0800 | [diff] [blame] | 1 | /* NG4fls.S: SPARC optimized fls and __fls for T4 and above. | 
|  | 2 | * | 
|  | 3 | * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. | 
|  | 4 | */ | 
|  | 5 |  | 
|  | 6 | #include <linux/linkage.h> | 
|  | 7 |  | 
|  | 8 | #define LZCNT_O0_G2	\ | 
|  | 9 | .word	0x85b002e8 | 
|  | 10 |  | 
|  | 11 | .text | 
|  | 12 | .register	%g2, #scratch | 
|  | 13 | .register	%g3, #scratch | 
|  | 14 |  | 
|  | 15 | ENTRY(NG4fls) | 
|  | 16 | LZCNT_O0_G2	!lzcnt	%o0, %g2 | 
|  | 17 | mov	64, %g3 | 
|  | 18 | retl | 
|  | 19 | sub	%g3, %g2, %o0 | 
|  | 20 | ENDPROC(NG4fls) | 
|  | 21 |  | 
|  | 22 | ENTRY(__NG4fls) | 
|  | 23 | brz,pn	%o0, 1f | 
|  | 24 | LZCNT_O0_G2	!lzcnt	%o0, %g2 | 
|  | 25 | mov	63, %g3 | 
|  | 26 | sub	%g3, %g2, %o0 | 
|  | 27 | 1: | 
|  | 28 | retl | 
|  | 29 | nop | 
|  | 30 | ENDPROC(__NG4fls) |