18c2ecf20Sopenharmony_ci/* fls.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 brz,pn %o0, 6f 168c2ecf20Sopenharmony_ci mov 0, %o1 178c2ecf20Sopenharmony_ci sethi %hi(0xffff0000), %g3 188c2ecf20Sopenharmony_ci mov %o0, %g2 198c2ecf20Sopenharmony_ci andcc %o0, %g3, %g0 208c2ecf20Sopenharmony_ci be,pt %icc, 8f 218c2ecf20Sopenharmony_ci mov 32, %o1 228c2ecf20Sopenharmony_ci sethi %hi(0xff000000), %g3 238c2ecf20Sopenharmony_ci andcc %g2, %g3, %g0 248c2ecf20Sopenharmony_ci bne,pt %icc, 3f 258c2ecf20Sopenharmony_ci sethi %hi(0xf0000000), %g3 268c2ecf20Sopenharmony_ci sll %o0, 8, %o0 278c2ecf20Sopenharmony_ci1: 288c2ecf20Sopenharmony_ci add %o1, -8, %o1 298c2ecf20Sopenharmony_ci sra %o0, 0, %o0 308c2ecf20Sopenharmony_ci mov %o0, %g2 318c2ecf20Sopenharmony_ci2: 328c2ecf20Sopenharmony_ci sethi %hi(0xf0000000), %g3 338c2ecf20Sopenharmony_ci3: 348c2ecf20Sopenharmony_ci andcc %g2, %g3, %g0 358c2ecf20Sopenharmony_ci bne,pt %icc, 4f 368c2ecf20Sopenharmony_ci sethi %hi(0xc0000000), %g3 378c2ecf20Sopenharmony_ci sll %o0, 4, %o0 388c2ecf20Sopenharmony_ci add %o1, -4, %o1 398c2ecf20Sopenharmony_ci sra %o0, 0, %o0 408c2ecf20Sopenharmony_ci mov %o0, %g2 418c2ecf20Sopenharmony_ci4: 428c2ecf20Sopenharmony_ci andcc %g2, %g3, %g0 438c2ecf20Sopenharmony_ci be,a,pt %icc, 7f 448c2ecf20Sopenharmony_ci sll %o0, 2, %o0 458c2ecf20Sopenharmony_ci5: 468c2ecf20Sopenharmony_ci xnor %g0, %o0, %o0 478c2ecf20Sopenharmony_ci srl %o0, 31, %o0 488c2ecf20Sopenharmony_ci sub %o1, %o0, %o1 498c2ecf20Sopenharmony_ci6: 508c2ecf20Sopenharmony_ci jmp %o7 + 8 518c2ecf20Sopenharmony_ci sra %o1, 0, %o0 528c2ecf20Sopenharmony_ci7: 538c2ecf20Sopenharmony_ci add %o1, -2, %o1 548c2ecf20Sopenharmony_ci ba,pt %xcc, 5b 558c2ecf20Sopenharmony_ci sra %o0, 0, %o0 568c2ecf20Sopenharmony_ci8: 578c2ecf20Sopenharmony_ci sll %o0, 16, %o0 588c2ecf20Sopenharmony_ci sethi %hi(0xff000000), %g3 598c2ecf20Sopenharmony_ci sra %o0, 0, %o0 608c2ecf20Sopenharmony_ci mov %o0, %g2 618c2ecf20Sopenharmony_ci andcc %g2, %g3, %g0 628c2ecf20Sopenharmony_ci bne,pt %icc, 2b 638c2ecf20Sopenharmony_ci mov 16, %o1 648c2ecf20Sopenharmony_ci ba,pt %xcc, 1b 658c2ecf20Sopenharmony_ci sll %o0, 8, %o0 668c2ecf20Sopenharmony_ciENDPROC(fls) 678c2ecf20Sopenharmony_ciEXPORT_SYMBOL(fls) 68