Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* una_asm.S: Kernel unaligned trap assembler helpers.
0003  *
0004  * Copyright (C) 1996,2005 David S. Miller (davem@davemloft.net)
0005  * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
0006  */
0007 
0008     .text
0009 
0010     .globl  __do_int_store
0011 __do_int_store:
0012     rd  %asi, %o4
0013     wr  %o3, 0, %asi
0014     mov %o2, %g3
0015     cmp %o1, 2
0016     be,pn   %icc, 2f
0017      cmp    %o1, 4
0018     be,pt   %icc, 1f
0019      srlx   %g3, 24, %g2
0020     srlx    %g3, 56, %g1
0021     srlx    %g3, 48, %g7
0022 4:  stba    %g1, [%o0] %asi
0023     srlx    %g3, 40, %g1
0024 5:  stba    %g7, [%o0 + 1] %asi
0025     srlx    %g3, 32, %g7
0026 6:  stba    %g1, [%o0 + 2] %asi
0027 7:  stba    %g7, [%o0 + 3] %asi
0028     srlx    %g3, 16, %g1
0029 8:  stba    %g2, [%o0 + 4] %asi
0030     srlx    %g3, 8, %g7
0031 9:  stba    %g1, [%o0 + 5] %asi
0032 10: stba    %g7, [%o0 + 6] %asi
0033     ba,pt   %xcc, 0f
0034 11:  stba   %g3, [%o0 + 7] %asi
0035 1:  srl %g3, 16, %g7
0036 12: stba    %g2, [%o0] %asi
0037     srl %g3, 8, %g2
0038 13: stba    %g7, [%o0 + 1] %asi
0039 14: stba    %g2, [%o0 + 2] %asi
0040     ba,pt   %xcc, 0f
0041 15:  stba   %g3, [%o0 + 3] %asi
0042 2:  srl %g3, 8, %g2
0043 16: stba    %g2, [%o0] %asi
0044 17: stba    %g3, [%o0 + 1] %asi
0045 0:
0046     wr  %o4, 0x0, %asi
0047     retl
0048      mov    0, %o0
0049     .size   __do_int_store, .-__do_int_store
0050 
0051     .section    __ex_table,"a"
0052     .word       4b, __retl_efault
0053     .word       5b, __retl_efault
0054     .word       6b, __retl_efault
0055     .word       7b, __retl_efault
0056     .word       8b, __retl_efault
0057     .word       9b, __retl_efault
0058     .word       10b, __retl_efault
0059     .word       11b, __retl_efault
0060     .word       12b, __retl_efault
0061     .word       13b, __retl_efault
0062     .word       14b, __retl_efault
0063     .word       15b, __retl_efault
0064     .word       16b, __retl_efault
0065     .word       17b, __retl_efault
0066     .previous
0067 
0068     .globl  do_int_load
0069 do_int_load:
0070     rd  %asi, %o5
0071     wr  %o4, 0, %asi
0072     cmp %o1, 8
0073     bge,pn  %icc, 9f
0074      cmp    %o1, 4
0075     be,pt   %icc, 6f
0076 4:   lduba  [%o2] %asi, %g2
0077 5:  lduba   [%o2 + 1] %asi, %g3
0078     sll %g2, 8, %g2
0079     brz,pt  %o3, 3f
0080      add    %g2, %g3, %g2
0081     sllx    %g2, 48, %g2
0082     srax    %g2, 48, %g2
0083 3:  ba,pt   %xcc, 0f
0084      stx    %g2, [%o0]
0085 6:  lduba   [%o2 + 1] %asi, %g3
0086     sll %g2, 24, %g2
0087 7:  lduba   [%o2 + 2] %asi, %g7
0088     sll %g3, 16, %g3
0089 8:  lduba   [%o2 + 3] %asi, %g1
0090     sll %g7, 8, %g7
0091     or  %g2, %g3, %g2
0092     or  %g7, %g1, %g7
0093     or  %g2, %g7, %g2
0094     brnz,a,pt %o3, 3f
0095      sra    %g2, 0, %g2
0096 3:  ba,pt   %xcc, 0f
0097      stx    %g2, [%o0]
0098 9:  lduba   [%o2] %asi, %g2
0099 10: lduba   [%o2 + 1] %asi, %g3
0100     sllx    %g2, 56, %g2
0101 11: lduba   [%o2 + 2] %asi, %g7
0102     sllx    %g3, 48, %g3
0103 12: lduba   [%o2 + 3] %asi, %g1
0104     sllx    %g7, 40, %g7
0105     sllx    %g1, 32, %g1
0106     or  %g2, %g3, %g2
0107     or  %g7, %g1, %g7
0108 13: lduba   [%o2 + 4] %asi, %g3
0109     or  %g2, %g7, %g7
0110 14: lduba   [%o2 + 5] %asi, %g1
0111     sllx    %g3, 24, %g3
0112 15: lduba   [%o2 + 6] %asi, %g2
0113     sllx    %g1, 16, %g1
0114     or  %g7, %g3, %g7
0115 16: lduba   [%o2 + 7] %asi, %g3
0116     sllx    %g2, 8, %g2
0117     or  %g7, %g1, %g7
0118     or  %g2, %g3, %g2
0119     or  %g7, %g2, %g7
0120     cmp %o1, 8
0121     be,a,pt %icc, 0f
0122      stx    %g7, [%o0]
0123     srlx    %g7, 32, %g2
0124     sra %g7, 0, %g7
0125     stx %g2, [%o0]
0126     stx %g7, [%o0 + 8]
0127 0:
0128     wr  %o5, 0x0, %asi
0129     retl
0130      mov    0, %o0
0131     .size   do_int_load, .-do_int_load
0132 
0133     .section    __ex_table,"a"
0134     .word       4b, __retl_efault
0135     .word       5b, __retl_efault
0136     .word       6b, __retl_efault
0137     .word       7b, __retl_efault
0138     .word       8b, __retl_efault
0139     .word       9b, __retl_efault
0140     .word       10b, __retl_efault
0141     .word       11b, __retl_efault
0142     .word       12b, __retl_efault
0143     .word       13b, __retl_efault
0144     .word       14b, __retl_efault
0145     .word       15b, __retl_efault
0146     .word       16b, __retl_efault
0147     .previous