18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc 48c2ecf20Sopenharmony_ci * generic strncmp routine. 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include <linux/linkage.h> 88c2ecf20Sopenharmony_ci#include <asm/export.h> 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci .text 118c2ecf20Sopenharmony_ciENTRY(strncmp) 128c2ecf20Sopenharmony_ci mov %o0, %g3 138c2ecf20Sopenharmony_ci mov 0, %o3 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci cmp %o2, 3 168c2ecf20Sopenharmony_ci ble 7f 178c2ecf20Sopenharmony_ci mov 0, %g2 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci sra %o2, 2, %o4 208c2ecf20Sopenharmony_ci ldub [%g3], %o3 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci0: 238c2ecf20Sopenharmony_ci ldub [%o1], %g2 248c2ecf20Sopenharmony_ci add %g3, 1, %g3 258c2ecf20Sopenharmony_ci and %o3, 0xff, %o0 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci cmp %o0, 0 288c2ecf20Sopenharmony_ci be 8f 298c2ecf20Sopenharmony_ci add %o1, 1, %o1 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci cmp %o0, %g2 328c2ecf20Sopenharmony_ci be,a 1f 338c2ecf20Sopenharmony_ci ldub [%g3], %o3 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci retl 368c2ecf20Sopenharmony_ci sub %o0, %g2, %o0 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci1: 398c2ecf20Sopenharmony_ci ldub [%o1], %g2 408c2ecf20Sopenharmony_ci add %g3,1, %g3 418c2ecf20Sopenharmony_ci and %o3, 0xff, %o0 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci cmp %o0, 0 448c2ecf20Sopenharmony_ci be 8f 458c2ecf20Sopenharmony_ci add %o1, 1, %o1 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci cmp %o0, %g2 488c2ecf20Sopenharmony_ci be,a 1f 498c2ecf20Sopenharmony_ci ldub [%g3], %o3 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci retl 528c2ecf20Sopenharmony_ci sub %o0, %g2, %o0 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ci1: 558c2ecf20Sopenharmony_ci ldub [%o1], %g2 568c2ecf20Sopenharmony_ci add %g3, 1, %g3 578c2ecf20Sopenharmony_ci and %o3, 0xff, %o0 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci cmp %o0, 0 608c2ecf20Sopenharmony_ci be 8f 618c2ecf20Sopenharmony_ci add %o1, 1, %o1 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci cmp %o0, %g2 648c2ecf20Sopenharmony_ci be,a 1f 658c2ecf20Sopenharmony_ci ldub [%g3], %o3 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci retl 688c2ecf20Sopenharmony_ci sub %o0, %g2, %o0 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci1: 718c2ecf20Sopenharmony_ci ldub [%o1], %g2 728c2ecf20Sopenharmony_ci add %g3, 1, %g3 738c2ecf20Sopenharmony_ci and %o3, 0xff, %o0 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ci cmp %o0, 0 768c2ecf20Sopenharmony_ci be 8f 778c2ecf20Sopenharmony_ci add %o1, 1, %o1 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ci cmp %o0, %g2 808c2ecf20Sopenharmony_ci be 1f 818c2ecf20Sopenharmony_ci add %o4, -1, %o4 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci retl 848c2ecf20Sopenharmony_ci sub %o0, %g2, %o0 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci1: 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci cmp %o4, 0 898c2ecf20Sopenharmony_ci bg,a 0b 908c2ecf20Sopenharmony_ci ldub [%g3], %o3 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci b 7f 938c2ecf20Sopenharmony_ci and %o2, 3, %o2 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ci9: 968c2ecf20Sopenharmony_ci ldub [%o1], %g2 978c2ecf20Sopenharmony_ci add %g3, 1, %g3 988c2ecf20Sopenharmony_ci and %o3, 0xff, %o0 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_ci cmp %o0, 0 1018c2ecf20Sopenharmony_ci be 8f 1028c2ecf20Sopenharmony_ci add %o1, 1, %o1 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ci cmp %o0, %g2 1058c2ecf20Sopenharmony_ci be 7f 1068c2ecf20Sopenharmony_ci add %o2, -1, %o2 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_ci8: 1098c2ecf20Sopenharmony_ci retl 1108c2ecf20Sopenharmony_ci sub %o0, %g2, %o0 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci7: 1138c2ecf20Sopenharmony_ci cmp %o2, 0 1148c2ecf20Sopenharmony_ci bg,a 9b 1158c2ecf20Sopenharmony_ci ldub [%g3], %o3 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_ci and %g2, 0xff, %o0 1188c2ecf20Sopenharmony_ci retl 1198c2ecf20Sopenharmony_ci sub %o3, %o0, %o0 1208c2ecf20Sopenharmony_ciENDPROC(strncmp) 1218c2ecf20Sopenharmony_ciEXPORT_SYMBOL(strncmp) 122