1/* SPDX-License-Identifier: GPL-2.0 */ 2/* NG4memset.S: Niagara-4 optimized memset/bzero. 3 * 4 * Copyright (C) 2012 David S. Miller (davem@davemloft.net) 5 */ 6 7#include <asm/asi.h> 8 9 .register %g2, #scratch 10 .register %g3, #scratch 11 12 .text 13 .align 32 14 .globl NG4memset 15NG4memset: 16 andcc %o1, 0xff, %o4 17 be,pt %icc, 1f 18 mov %o2, %o1 19 sllx %o4, 8, %g1 20 or %g1, %o4, %o2 21 sllx %o2, 16, %g1 22 or %g1, %o2, %o2 23 sllx %o2, 32, %g1 24 ba,pt %icc, 1f 25 or %g1, %o2, %o4 26 .size NG4memset,.-NG4memset 27 28 .align 32 29 .globl NG4bzero 30NG4bzero: 31 clr %o4 321: cmp %o1, 16 33 ble %icc, .Ltiny 34 mov %o0, %o3 35 sub %g0, %o0, %g1 36 and %g1, 0x7, %g1 37 brz,pt %g1, .Laligned8 38 sub %o1, %g1, %o1 391: stb %o4, [%o0 + 0x00] 40 subcc %g1, 1, %g1 41 bne,pt %icc, 1b 42 add %o0, 1, %o0 43.Laligned8: 44 cmp %o1, 64 + (64 - 8) 45 ble .Lmedium 46 sub %g0, %o0, %g1 47 andcc %g1, (64 - 1), %g1 48 brz,pn %g1, .Laligned64 49 sub %o1, %g1, %o1 501: stx %o4, [%o0 + 0x00] 51 subcc %g1, 8, %g1 52 bne,pt %icc, 1b 53 add %o0, 0x8, %o0 54.Laligned64: 55 andn %o1, 64 - 1, %g1 56 sub %o1, %g1, %o1 57 brnz,pn %o4, .Lnon_bzero_loop 58 mov 0x20, %g2 591: stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P 60 subcc %g1, 0x40, %g1 61 stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P 62 bne,pt %icc, 1b 63 add %o0, 0x40, %o0 64.Lpostloop: 65 cmp %o1, 8 66 bl,pn %icc, .Ltiny 67 membar #StoreStore|#StoreLoad 68.Lmedium: 69 andn %o1, 0x7, %g1 70 sub %o1, %g1, %o1 711: stx %o4, [%o0 + 0x00] 72 subcc %g1, 0x8, %g1 73 bne,pt %icc, 1b 74 add %o0, 0x08, %o0 75 andcc %o1, 0x4, %g1 76 be,pt %icc, .Ltiny 77 sub %o1, %g1, %o1 78 stw %o4, [%o0 + 0x00] 79 add %o0, 0x4, %o0 80.Ltiny: 81 cmp %o1, 0 82 be,pn %icc, .Lexit 831: subcc %o1, 1, %o1 84 stb %o4, [%o0 + 0x00] 85 bne,pt %icc, 1b 86 add %o0, 1, %o0 87.Lexit: 88 retl 89 mov %o3, %o0 90.Lnon_bzero_loop: 91 mov 0x08, %g3 92 mov 0x28, %o5 931: stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P 94 subcc %g1, 0x40, %g1 95 stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P 96 stxa %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P 97 stxa %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P 98 add %o0, 0x10, %o0 99 stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P 100 stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P 101 stxa %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P 102 stxa %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P 103 bne,pt %icc, 1b 104 add %o0, 0x30, %o0 105 ba,a,pt %icc, .Lpostloop 106 nop 107 .size NG4bzero,.-NG4bzero 108