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