18c2ecf20Sopenharmony_ci/* fls64.S: SPARC default __fls definition. 28c2ecf20Sopenharmony_ci * 38c2ecf20Sopenharmony_ci * SPARC default __fls definition, which follows the same algorithm as 48c2ecf20Sopenharmony_ci * in generic __fls(). This function will be boot time patched on T4 58c2ecf20Sopenharmony_ci * and onward. 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/linkage.h> 98c2ecf20Sopenharmony_ci#include <asm/export.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci .text 128c2ecf20Sopenharmony_ci .register %g2, #scratch 138c2ecf20Sopenharmony_ci .register %g3, #scratch 148c2ecf20Sopenharmony_ciENTRY(__fls) 158c2ecf20Sopenharmony_ci mov -1, %g2 168c2ecf20Sopenharmony_ci sllx %g2, 32, %g2 178c2ecf20Sopenharmony_ci and %o0, %g2, %g2 188c2ecf20Sopenharmony_ci brnz,pt %g2, 1f 198c2ecf20Sopenharmony_ci mov 63, %g1 208c2ecf20Sopenharmony_ci sllx %o0, 32, %o0 218c2ecf20Sopenharmony_ci mov 31, %g1 228c2ecf20Sopenharmony_ci1: 238c2ecf20Sopenharmony_ci mov -1, %g2 248c2ecf20Sopenharmony_ci sllx %g2, 48, %g2 258c2ecf20Sopenharmony_ci and %o0, %g2, %g2 268c2ecf20Sopenharmony_ci brnz,pt %g2, 2f 278c2ecf20Sopenharmony_ci mov -1, %g2 288c2ecf20Sopenharmony_ci sllx %o0, 16, %o0 298c2ecf20Sopenharmony_ci add %g1, -16, %g1 308c2ecf20Sopenharmony_ci2: 318c2ecf20Sopenharmony_ci mov -1, %g2 328c2ecf20Sopenharmony_ci sllx %g2, 56, %g2 338c2ecf20Sopenharmony_ci and %o0, %g2, %g2 348c2ecf20Sopenharmony_ci brnz,pt %g2, 3f 358c2ecf20Sopenharmony_ci mov -1, %g2 368c2ecf20Sopenharmony_ci sllx %o0, 8, %o0 378c2ecf20Sopenharmony_ci add %g1, -8, %g1 388c2ecf20Sopenharmony_ci3: 398c2ecf20Sopenharmony_ci sllx %g2, 60, %g2 408c2ecf20Sopenharmony_ci and %o0, %g2, %g2 418c2ecf20Sopenharmony_ci brnz,pt %g2, 4f 428c2ecf20Sopenharmony_ci mov -1, %g2 438c2ecf20Sopenharmony_ci sllx %o0, 4, %o0 448c2ecf20Sopenharmony_ci add %g1, -4, %g1 458c2ecf20Sopenharmony_ci4: 468c2ecf20Sopenharmony_ci sllx %g2, 62, %g2 478c2ecf20Sopenharmony_ci and %o0, %g2, %g2 488c2ecf20Sopenharmony_ci brnz,pt %g2, 5f 498c2ecf20Sopenharmony_ci mov -1, %g3 508c2ecf20Sopenharmony_ci sllx %o0, 2, %o0 518c2ecf20Sopenharmony_ci add %g1, -2, %g1 528c2ecf20Sopenharmony_ci5: 538c2ecf20Sopenharmony_ci mov 0, %g2 548c2ecf20Sopenharmony_ci sllx %g3, 63, %g3 558c2ecf20Sopenharmony_ci and %o0, %g3, %o0 568c2ecf20Sopenharmony_ci movre %o0, 1, %g2 578c2ecf20Sopenharmony_ci sub %g1, %g2, %g1 588c2ecf20Sopenharmony_ci jmp %o7+8 598c2ecf20Sopenharmony_ci sra %g1, 0, %o0 608c2ecf20Sopenharmony_ciENDPROC(__fls) 618c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__fls) 62