1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 2a88b5ba8SSam Ravnborg/* una_asm.S: Kernel unaligned trap assembler helpers. 3a88b5ba8SSam Ravnborg * 4a88b5ba8SSam Ravnborg * Copyright (C) 1996,2005 David S. Miller (davem@davemloft.net) 5a88b5ba8SSam Ravnborg * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 6a88b5ba8SSam Ravnborg */ 7a88b5ba8SSam Ravnborg 8a88b5ba8SSam Ravnborg .text 9a88b5ba8SSam Ravnborg 10a88b5ba8SSam Ravnborg .globl __do_int_store 11a88b5ba8SSam Ravnborg__do_int_store: 12a88b5ba8SSam Ravnborg rd %asi, %o4 13a88b5ba8SSam Ravnborg wr %o3, 0, %asi 14a88b5ba8SSam Ravnborg mov %o2, %g3 15a88b5ba8SSam Ravnborg cmp %o1, 2 16a88b5ba8SSam Ravnborg be,pn %icc, 2f 17a88b5ba8SSam Ravnborg cmp %o1, 4 18a88b5ba8SSam Ravnborg be,pt %icc, 1f 19a88b5ba8SSam Ravnborg srlx %g3, 24, %g2 20a88b5ba8SSam Ravnborg srlx %g3, 56, %g1 21a88b5ba8SSam Ravnborg srlx %g3, 48, %g7 22a88b5ba8SSam Ravnborg4: stba %g1, [%o0] %asi 23a88b5ba8SSam Ravnborg srlx %g3, 40, %g1 24a88b5ba8SSam Ravnborg5: stba %g7, [%o0 + 1] %asi 25a88b5ba8SSam Ravnborg srlx %g3, 32, %g7 26a88b5ba8SSam Ravnborg6: stba %g1, [%o0 + 2] %asi 27a88b5ba8SSam Ravnborg7: stba %g7, [%o0 + 3] %asi 28a88b5ba8SSam Ravnborg srlx %g3, 16, %g1 29a88b5ba8SSam Ravnborg8: stba %g2, [%o0 + 4] %asi 30a88b5ba8SSam Ravnborg srlx %g3, 8, %g7 31a88b5ba8SSam Ravnborg9: stba %g1, [%o0 + 5] %asi 32a88b5ba8SSam Ravnborg10: stba %g7, [%o0 + 6] %asi 33a88b5ba8SSam Ravnborg ba,pt %xcc, 0f 34a88b5ba8SSam Ravnborg11: stba %g3, [%o0 + 7] %asi 35a88b5ba8SSam Ravnborg1: srl %g3, 16, %g7 36a88b5ba8SSam Ravnborg12: stba %g2, [%o0] %asi 37a88b5ba8SSam Ravnborg srl %g3, 8, %g2 38a88b5ba8SSam Ravnborg13: stba %g7, [%o0 + 1] %asi 39a88b5ba8SSam Ravnborg14: stba %g2, [%o0 + 2] %asi 40a88b5ba8SSam Ravnborg ba,pt %xcc, 0f 41a88b5ba8SSam Ravnborg15: stba %g3, [%o0 + 3] %asi 42a88b5ba8SSam Ravnborg2: srl %g3, 8, %g2 43a88b5ba8SSam Ravnborg16: stba %g2, [%o0] %asi 44a88b5ba8SSam Ravnborg17: stba %g3, [%o0 + 1] %asi 45a88b5ba8SSam Ravnborg0: 46a88b5ba8SSam Ravnborg wr %o4, 0x0, %asi 47a88b5ba8SSam Ravnborg retl 48a88b5ba8SSam Ravnborg mov 0, %o0 49a88b5ba8SSam Ravnborg .size __do_int_store, .-__do_int_store 50a88b5ba8SSam Ravnborg 51a88b5ba8SSam Ravnborg .section __ex_table,"a" 52a88b5ba8SSam Ravnborg .word 4b, __retl_efault 53a88b5ba8SSam Ravnborg .word 5b, __retl_efault 54a88b5ba8SSam Ravnborg .word 6b, __retl_efault 55a88b5ba8SSam Ravnborg .word 7b, __retl_efault 56a88b5ba8SSam Ravnborg .word 8b, __retl_efault 57a88b5ba8SSam Ravnborg .word 9b, __retl_efault 58a88b5ba8SSam Ravnborg .word 10b, __retl_efault 59a88b5ba8SSam Ravnborg .word 11b, __retl_efault 60a88b5ba8SSam Ravnborg .word 12b, __retl_efault 61a88b5ba8SSam Ravnborg .word 13b, __retl_efault 62a88b5ba8SSam Ravnborg .word 14b, __retl_efault 63a88b5ba8SSam Ravnborg .word 15b, __retl_efault 64a88b5ba8SSam Ravnborg .word 16b, __retl_efault 65a88b5ba8SSam Ravnborg .word 17b, __retl_efault 66a88b5ba8SSam Ravnborg .previous 67a88b5ba8SSam Ravnborg 68a88b5ba8SSam Ravnborg .globl do_int_load 69a88b5ba8SSam Ravnborgdo_int_load: 70a88b5ba8SSam Ravnborg rd %asi, %o5 71a88b5ba8SSam Ravnborg wr %o4, 0, %asi 72a88b5ba8SSam Ravnborg cmp %o1, 8 73a88b5ba8SSam Ravnborg bge,pn %icc, 9f 74a88b5ba8SSam Ravnborg cmp %o1, 4 75a88b5ba8SSam Ravnborg be,pt %icc, 6f 76a88b5ba8SSam Ravnborg4: lduba [%o2] %asi, %g2 77a88b5ba8SSam Ravnborg5: lduba [%o2 + 1] %asi, %g3 78a88b5ba8SSam Ravnborg sll %g2, 8, %g2 79a88b5ba8SSam Ravnborg brz,pt %o3, 3f 80a88b5ba8SSam Ravnborg add %g2, %g3, %g2 81a88b5ba8SSam Ravnborg sllx %g2, 48, %g2 82a88b5ba8SSam Ravnborg srax %g2, 48, %g2 83a88b5ba8SSam Ravnborg3: ba,pt %xcc, 0f 84a88b5ba8SSam Ravnborg stx %g2, [%o0] 85a88b5ba8SSam Ravnborg6: lduba [%o2 + 1] %asi, %g3 86a88b5ba8SSam Ravnborg sll %g2, 24, %g2 87a88b5ba8SSam Ravnborg7: lduba [%o2 + 2] %asi, %g7 88a88b5ba8SSam Ravnborg sll %g3, 16, %g3 89a88b5ba8SSam Ravnborg8: lduba [%o2 + 3] %asi, %g1 90a88b5ba8SSam Ravnborg sll %g7, 8, %g7 91a88b5ba8SSam Ravnborg or %g2, %g3, %g2 92a88b5ba8SSam Ravnborg or %g7, %g1, %g7 93a88b5ba8SSam Ravnborg or %g2, %g7, %g2 94a88b5ba8SSam Ravnborg brnz,a,pt %o3, 3f 95a88b5ba8SSam Ravnborg sra %g2, 0, %g2 96a88b5ba8SSam Ravnborg3: ba,pt %xcc, 0f 97a88b5ba8SSam Ravnborg stx %g2, [%o0] 98a88b5ba8SSam Ravnborg9: lduba [%o2] %asi, %g2 99a88b5ba8SSam Ravnborg10: lduba [%o2 + 1] %asi, %g3 100a88b5ba8SSam Ravnborg sllx %g2, 56, %g2 101a88b5ba8SSam Ravnborg11: lduba [%o2 + 2] %asi, %g7 102a88b5ba8SSam Ravnborg sllx %g3, 48, %g3 103a88b5ba8SSam Ravnborg12: lduba [%o2 + 3] %asi, %g1 104a88b5ba8SSam Ravnborg sllx %g7, 40, %g7 105a88b5ba8SSam Ravnborg sllx %g1, 32, %g1 106a88b5ba8SSam Ravnborg or %g2, %g3, %g2 107a88b5ba8SSam Ravnborg or %g7, %g1, %g7 108a88b5ba8SSam Ravnborg13: lduba [%o2 + 4] %asi, %g3 109a88b5ba8SSam Ravnborg or %g2, %g7, %g7 110a88b5ba8SSam Ravnborg14: lduba [%o2 + 5] %asi, %g1 111a88b5ba8SSam Ravnborg sllx %g3, 24, %g3 112a88b5ba8SSam Ravnborg15: lduba [%o2 + 6] %asi, %g2 113a88b5ba8SSam Ravnborg sllx %g1, 16, %g1 114a88b5ba8SSam Ravnborg or %g7, %g3, %g7 115a88b5ba8SSam Ravnborg16: lduba [%o2 + 7] %asi, %g3 116a88b5ba8SSam Ravnborg sllx %g2, 8, %g2 117a88b5ba8SSam Ravnborg or %g7, %g1, %g7 118a88b5ba8SSam Ravnborg or %g2, %g3, %g2 119a88b5ba8SSam Ravnborg or %g7, %g2, %g7 120a88b5ba8SSam Ravnborg cmp %o1, 8 121a88b5ba8SSam Ravnborg be,a,pt %icc, 0f 122a88b5ba8SSam Ravnborg stx %g7, [%o0] 123a88b5ba8SSam Ravnborg srlx %g7, 32, %g2 124a88b5ba8SSam Ravnborg sra %g7, 0, %g7 125a88b5ba8SSam Ravnborg stx %g2, [%o0] 126a88b5ba8SSam Ravnborg stx %g7, [%o0 + 8] 127a88b5ba8SSam Ravnborg0: 128a88b5ba8SSam Ravnborg wr %o5, 0x0, %asi 129a88b5ba8SSam Ravnborg retl 130a88b5ba8SSam Ravnborg mov 0, %o0 13135043c42SBen Hutchings .size do_int_load, .-do_int_load 132a88b5ba8SSam Ravnborg 133a88b5ba8SSam Ravnborg .section __ex_table,"a" 134a88b5ba8SSam Ravnborg .word 4b, __retl_efault 135a88b5ba8SSam Ravnborg .word 5b, __retl_efault 136a88b5ba8SSam Ravnborg .word 6b, __retl_efault 137a88b5ba8SSam Ravnborg .word 7b, __retl_efault 138a88b5ba8SSam Ravnborg .word 8b, __retl_efault 139a88b5ba8SSam Ravnborg .word 9b, __retl_efault 140a88b5ba8SSam Ravnborg .word 10b, __retl_efault 141a88b5ba8SSam Ravnborg .word 11b, __retl_efault 142a88b5ba8SSam Ravnborg .word 12b, __retl_efault 143a88b5ba8SSam Ravnborg .word 13b, __retl_efault 144a88b5ba8SSam Ravnborg .word 14b, __retl_efault 145a88b5ba8SSam Ravnborg .word 15b, __retl_efault 146a88b5ba8SSam Ravnborg .word 16b, __retl_efault 147a88b5ba8SSam Ravnborg .previous 148