linux/arch/sparc/kernel/una_asm_64.S
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/* una_asm.S: Kernel unaligned trap assembler helpers.
   3 *
   4 * Copyright (C) 1996,2005 David S. Miller (davem@davemloft.net)
   5 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
   6 */
   7
   8        .text
   9
  10        .globl  __do_int_store
  11__do_int_store:
  12        rd      %asi, %o4
  13        wr      %o3, 0, %asi
  14        mov     %o2, %g3
  15        cmp     %o1, 2
  16        be,pn   %icc, 2f
  17         cmp    %o1, 4
  18        be,pt   %icc, 1f
  19         srlx   %g3, 24, %g2
  20        srlx    %g3, 56, %g1
  21        srlx    %g3, 48, %g7
  224:      stba    %g1, [%o0] %asi
  23        srlx    %g3, 40, %g1
  245:      stba    %g7, [%o0 + 1] %asi
  25        srlx    %g3, 32, %g7
  266:      stba    %g1, [%o0 + 2] %asi
  277:      stba    %g7, [%o0 + 3] %asi
  28        srlx    %g3, 16, %g1
  298:      stba    %g2, [%o0 + 4] %asi
  30        srlx    %g3, 8, %g7
  319:      stba    %g1, [%o0 + 5] %asi
  3210:     stba    %g7, [%o0 + 6] %asi
  33        ba,pt   %xcc, 0f
  3411:      stba   %g3, [%o0 + 7] %asi
  351:      srl     %g3, 16, %g7
  3612:     stba    %g2, [%o0] %asi
  37        srl     %g3, 8, %g2
  3813:     stba    %g7, [%o0 + 1] %asi
  3914:     stba    %g2, [%o0 + 2] %asi
  40        ba,pt   %xcc, 0f
  4115:      stba   %g3, [%o0 + 3] %asi
  422:      srl     %g3, 8, %g2
  4316:     stba    %g2, [%o0] %asi
  4417:     stba    %g3, [%o0 + 1] %asi
  450:
  46        wr      %o4, 0x0, %asi
  47        retl
  48         mov    0, %o0
  49        .size   __do_int_store, .-__do_int_store
  50
  51        .section        __ex_table,"a"
  52        .word           4b, __retl_efault
  53        .word           5b, __retl_efault
  54        .word           6b, __retl_efault
  55        .word           7b, __retl_efault
  56        .word           8b, __retl_efault
  57        .word           9b, __retl_efault
  58        .word           10b, __retl_efault
  59        .word           11b, __retl_efault
  60        .word           12b, __retl_efault
  61        .word           13b, __retl_efault
  62        .word           14b, __retl_efault
  63        .word           15b, __retl_efault
  64        .word           16b, __retl_efault
  65        .word           17b, __retl_efault
  66        .previous
  67
  68        .globl  do_int_load
  69do_int_load:
  70        rd      %asi, %o5
  71        wr      %o4, 0, %asi
  72        cmp     %o1, 8
  73        bge,pn  %icc, 9f
  74         cmp    %o1, 4
  75        be,pt   %icc, 6f
  764:       lduba  [%o2] %asi, %g2
  775:      lduba   [%o2 + 1] %asi, %g3
  78        sll     %g2, 8, %g2
  79        brz,pt  %o3, 3f
  80         add    %g2, %g3, %g2
  81        sllx    %g2, 48, %g2
  82        srax    %g2, 48, %g2
  833:      ba,pt   %xcc, 0f
  84         stx    %g2, [%o0]
  856:      lduba   [%o2 + 1] %asi, %g3
  86        sll     %g2, 24, %g2
  877:      lduba   [%o2 + 2] %asi, %g7
  88        sll     %g3, 16, %g3
  898:      lduba   [%o2 + 3] %asi, %g1
  90        sll     %g7, 8, %g7
  91        or      %g2, %g3, %g2
  92        or      %g7, %g1, %g7
  93        or      %g2, %g7, %g2
  94        brnz,a,pt %o3, 3f
  95         sra    %g2, 0, %g2
  963:      ba,pt   %xcc, 0f
  97         stx    %g2, [%o0]
  989:      lduba   [%o2] %asi, %g2
  9910:     lduba   [%o2 + 1] %asi, %g3
 100        sllx    %g2, 56, %g2
 10111:     lduba   [%o2 + 2] %asi, %g7
 102        sllx    %g3, 48, %g3
 10312:     lduba   [%o2 + 3] %asi, %g1
 104        sllx    %g7, 40, %g7
 105        sllx    %g1, 32, %g1
 106        or      %g2, %g3, %g2
 107        or      %g7, %g1, %g7
 10813:     lduba   [%o2 + 4] %asi, %g3
 109        or      %g2, %g7, %g7
 11014:     lduba   [%o2 + 5] %asi, %g1
 111        sllx    %g3, 24, %g3
 11215:     lduba   [%o2 + 6] %asi, %g2
 113        sllx    %g1, 16, %g1
 114        or      %g7, %g3, %g7
 11516:     lduba   [%o2 + 7] %asi, %g3
 116        sllx    %g2, 8, %g2
 117        or      %g7, %g1, %g7
 118        or      %g2, %g3, %g2
 119        or      %g7, %g2, %g7
 120        cmp     %o1, 8
 121        be,a,pt %icc, 0f
 122         stx    %g7, [%o0]
 123        srlx    %g7, 32, %g2
 124        sra     %g7, 0, %g7
 125        stx     %g2, [%o0]
 126        stx     %g7, [%o0 + 8]
 1270:
 128        wr      %o5, 0x0, %asi
 129        retl
 130         mov    0, %o0
 131        .size   do_int_load, .-do_int_load
 132
 133        .section        __ex_table,"a"
 134        .word           4b, __retl_efault
 135        .word           5b, __retl_efault
 136        .word           6b, __retl_efault
 137        .word           7b, __retl_efault
 138        .word           8b, __retl_efault
 139        .word           9b, __retl_efault
 140        .word           10b, __retl_efault
 141        .word           11b, __retl_efault
 142        .word           12b, __retl_efault
 143        .word           13b, __retl_efault
 144        .word           14b, __retl_efault
 145        .word           15b, __retl_efault
 146        .word           16b, __retl_efault
 147        .previous
 148