1*b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 29f825962SDavid S. Miller/* NG4memset.S: Niagara-4 optimized memset/bzero. 39f825962SDavid S. Miller * 49f825962SDavid S. Miller * Copyright (C) 2012 David S. Miller (davem@davemloft.net) 59f825962SDavid S. Miller */ 69f825962SDavid S. Miller 79f825962SDavid S. Miller#include <asm/asi.h> 89f825962SDavid S. Miller 99f825962SDavid S. Miller .register %g2, #scratch 109f825962SDavid S. Miller .register %g3, #scratch 119f825962SDavid S. Miller 129f825962SDavid S. Miller .text 139f825962SDavid S. Miller .align 32 149f825962SDavid S. Miller .globl NG4memset 159f825962SDavid S. MillerNG4memset: 169f825962SDavid S. Miller andcc %o1, 0xff, %o4 179f825962SDavid S. Miller be,pt %icc, 1f 189f825962SDavid S. Miller mov %o2, %o1 199f825962SDavid S. Miller sllx %o4, 8, %g1 209f825962SDavid S. Miller or %g1, %o4, %o2 219f825962SDavid S. Miller sllx %o2, 16, %g1 229f825962SDavid S. Miller or %g1, %o2, %o2 239f825962SDavid S. Miller sllx %o2, 32, %g1 249f825962SDavid S. Miller ba,pt %icc, 1f 259f825962SDavid S. Miller or %g1, %o2, %o4 269f825962SDavid S. Miller .size NG4memset,.-NG4memset 279f825962SDavid S. Miller 289f825962SDavid S. Miller .align 32 299f825962SDavid S. Miller .globl NG4bzero 309f825962SDavid S. MillerNG4bzero: 319f825962SDavid S. Miller clr %o4 329f825962SDavid S. Miller1: cmp %o1, 16 339f825962SDavid S. Miller ble %icc, .Ltiny 349f825962SDavid S. Miller mov %o0, %o3 359f825962SDavid S. Miller sub %g0, %o0, %g1 369f825962SDavid S. Miller and %g1, 0x7, %g1 379f825962SDavid S. Miller brz,pt %g1, .Laligned8 389f825962SDavid S. Miller sub %o1, %g1, %o1 399f825962SDavid S. Miller1: stb %o4, [%o0 + 0x00] 409f825962SDavid S. Miller subcc %g1, 1, %g1 419f825962SDavid S. Miller bne,pt %icc, 1b 429f825962SDavid S. Miller add %o0, 1, %o0 439f825962SDavid S. Miller.Laligned8: 449f825962SDavid S. Miller cmp %o1, 64 + (64 - 8) 459f825962SDavid S. Miller ble .Lmedium 469f825962SDavid S. Miller sub %g0, %o0, %g1 479f825962SDavid S. Miller andcc %g1, (64 - 1), %g1 489f825962SDavid S. Miller brz,pn %g1, .Laligned64 499f825962SDavid S. Miller sub %o1, %g1, %o1 509f825962SDavid S. Miller1: stx %o4, [%o0 + 0x00] 519f825962SDavid S. Miller subcc %g1, 8, %g1 529f825962SDavid S. Miller bne,pt %icc, 1b 539f825962SDavid S. Miller add %o0, 0x8, %o0 549f825962SDavid S. Miller.Laligned64: 559f825962SDavid S. Miller andn %o1, 64 - 1, %g1 569f825962SDavid S. Miller sub %o1, %g1, %o1 579f825962SDavid S. Miller brnz,pn %o4, .Lnon_bzero_loop 589f825962SDavid S. Miller mov 0x20, %g2 599f825962SDavid S. Miller1: stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P 609f825962SDavid S. Miller subcc %g1, 0x40, %g1 619f825962SDavid S. Miller stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P 629f825962SDavid S. Miller bne,pt %icc, 1b 639f825962SDavid S. Miller add %o0, 0x40, %o0 649f825962SDavid S. Miller.Lpostloop: 659f825962SDavid S. Miller cmp %o1, 8 669f825962SDavid S. Miller bl,pn %icc, .Ltiny 679f825962SDavid S. Miller membar #StoreStore|#StoreLoad 689f825962SDavid S. Miller.Lmedium: 699f825962SDavid S. Miller andn %o1, 0x7, %g1 709f825962SDavid S. Miller sub %o1, %g1, %o1 719f825962SDavid S. Miller1: stx %o4, [%o0 + 0x00] 729f825962SDavid S. Miller subcc %g1, 0x8, %g1 739f825962SDavid S. Miller bne,pt %icc, 1b 749f825962SDavid S. Miller add %o0, 0x08, %o0 759f825962SDavid S. Miller andcc %o1, 0x4, %g1 769f825962SDavid S. Miller be,pt %icc, .Ltiny 779f825962SDavid S. Miller sub %o1, %g1, %o1 789f825962SDavid S. Miller stw %o4, [%o0 + 0x00] 799f825962SDavid S. Miller add %o0, 0x4, %o0 809f825962SDavid S. Miller.Ltiny: 819f825962SDavid S. Miller cmp %o1, 0 829f825962SDavid S. Miller be,pn %icc, .Lexit 839f825962SDavid S. Miller1: subcc %o1, 1, %o1 849f825962SDavid S. Miller stb %o4, [%o0 + 0x00] 859f825962SDavid S. Miller bne,pt %icc, 1b 869f825962SDavid S. Miller add %o0, 1, %o0 879f825962SDavid S. Miller.Lexit: 889f825962SDavid S. Miller retl 899f825962SDavid S. Miller mov %o3, %o0 909f825962SDavid S. Miller.Lnon_bzero_loop: 919f825962SDavid S. Miller mov 0x08, %g3 929f825962SDavid S. Miller mov 0x28, %o5 939f825962SDavid S. Miller1: stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P 949f825962SDavid S. Miller subcc %g1, 0x40, %g1 959f825962SDavid S. Miller stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P 969f825962SDavid S. Miller stxa %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P 979f825962SDavid S. Miller stxa %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P 989f825962SDavid S. Miller add %o0, 0x10, %o0 999f825962SDavid S. Miller stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P 1009f825962SDavid S. Miller stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P 1019f825962SDavid S. Miller stxa %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P 1029f825962SDavid S. Miller stxa %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P 1039f825962SDavid S. Miller bne,pt %icc, 1b 1049f825962SDavid S. Miller add %o0, 0x30, %o0 1059f825962SDavid S. Miller ba,a,pt %icc, .Lpostloop 1060ae2d26fSBabu Moger nop 1079f825962SDavid S. Miller .size NG4bzero,.-NG4bzero 108