root/arch/sparc/kernel/una_asm_64.S

/* [<][>][^][v][top][bottom][index][help] */
   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
  22 4:      stba    %g1, [%o0] %asi
  23         srlx    %g3, 40, %g1
  24 5:      stba    %g7, [%o0 + 1] %asi
  25         srlx    %g3, 32, %g7
  26 6:      stba    %g1, [%o0 + 2] %asi
  27 7:      stba    %g7, [%o0 + 3] %asi
  28         srlx    %g3, 16, %g1
  29 8:      stba    %g2, [%o0 + 4] %asi
  30         srlx    %g3, 8, %g7
  31 9:      stba    %g1, [%o0 + 5] %asi
  32 10:     stba    %g7, [%o0 + 6] %asi
  33         ba,pt   %xcc, 0f
  34 11:      stba   %g3, [%o0 + 7] %asi
  35 1:      srl     %g3, 16, %g7
  36 12:     stba    %g2, [%o0] %asi
  37         srl     %g3, 8, %g2
  38 13:     stba    %g7, [%o0 + 1] %asi
  39 14:     stba    %g2, [%o0 + 2] %asi
  40         ba,pt   %xcc, 0f
  41 15:      stba   %g3, [%o0 + 3] %asi
  42 2:      srl     %g3, 8, %g2
  43 16:     stba    %g2, [%o0] %asi
  44 17:     stba    %g3, [%o0 + 1] %asi
  45 0:
  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
  69 do_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
  76 4:       lduba  [%o2] %asi, %g2
  77 5:      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
  83 3:      ba,pt   %xcc, 0f
  84          stx    %g2, [%o0]
  85 6:      lduba   [%o2 + 1] %asi, %g3
  86         sll     %g2, 24, %g2
  87 7:      lduba   [%o2 + 2] %asi, %g7
  88         sll     %g3, 16, %g3
  89 8:      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
  96 3:      ba,pt   %xcc, 0f
  97          stx    %g2, [%o0]
  98 9:      lduba   [%o2] %asi, %g2
  99 10:     lduba   [%o2 + 1] %asi, %g3
 100         sllx    %g2, 56, %g2
 101 11:     lduba   [%o2 + 2] %asi, %g7
 102         sllx    %g3, 48, %g3
 103 12:     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
 108 13:     lduba   [%o2 + 4] %asi, %g3
 109         or      %g2, %g7, %g7
 110 14:     lduba   [%o2 + 5] %asi, %g1
 111         sllx    %g3, 24, %g3
 112 15:     lduba   [%o2 + 6] %asi, %g2
 113         sllx    %g1, 16, %g1
 114         or      %g7, %g3, %g7
 115 16:     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]
 127 0:
 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

/* [<][>][^][v][top][bottom][index][help] */