a88b5ba8bd
o Move all files from sparc64/kernel/ to sparc/kernel - rename as appropriate o Update sparc/Makefile to the changes o Update sparc/kernel/Makefile to include the sparc64 files NOTE: This commit changes link order on sparc64! Link order had to change for either of sparc32 and sparc64. And assuming sparc64 see more testing than sparc32 change link order on sparc64 where issues will be caught faster. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: David S. Miller <davem@davemloft.net>
147 lines
3.0 KiB
ArmAsm
147 lines
3.0 KiB
ArmAsm
/* una_asm.S: Kernel unaligned trap assembler helpers.
|
|
*
|
|
* Copyright (C) 1996,2005 David S. Miller (davem@davemloft.net)
|
|
* Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
|
|
*/
|
|
|
|
.text
|
|
|
|
.globl __do_int_store
|
|
__do_int_store:
|
|
rd %asi, %o4
|
|
wr %o3, 0, %asi
|
|
mov %o2, %g3
|
|
cmp %o1, 2
|
|
be,pn %icc, 2f
|
|
cmp %o1, 4
|
|
be,pt %icc, 1f
|
|
srlx %g3, 24, %g2
|
|
srlx %g3, 56, %g1
|
|
srlx %g3, 48, %g7
|
|
4: stba %g1, [%o0] %asi
|
|
srlx %g3, 40, %g1
|
|
5: stba %g7, [%o0 + 1] %asi
|
|
srlx %g3, 32, %g7
|
|
6: stba %g1, [%o0 + 2] %asi
|
|
7: stba %g7, [%o0 + 3] %asi
|
|
srlx %g3, 16, %g1
|
|
8: stba %g2, [%o0 + 4] %asi
|
|
srlx %g3, 8, %g7
|
|
9: stba %g1, [%o0 + 5] %asi
|
|
10: stba %g7, [%o0 + 6] %asi
|
|
ba,pt %xcc, 0f
|
|
11: stba %g3, [%o0 + 7] %asi
|
|
1: srl %g3, 16, %g7
|
|
12: stba %g2, [%o0] %asi
|
|
srl %g3, 8, %g2
|
|
13: stba %g7, [%o0 + 1] %asi
|
|
14: stba %g2, [%o0 + 2] %asi
|
|
ba,pt %xcc, 0f
|
|
15: stba %g3, [%o0 + 3] %asi
|
|
2: srl %g3, 8, %g2
|
|
16: stba %g2, [%o0] %asi
|
|
17: stba %g3, [%o0 + 1] %asi
|
|
0:
|
|
wr %o4, 0x0, %asi
|
|
retl
|
|
mov 0, %o0
|
|
.size __do_int_store, .-__do_int_store
|
|
|
|
.section __ex_table,"a"
|
|
.word 4b, __retl_efault
|
|
.word 5b, __retl_efault
|
|
.word 6b, __retl_efault
|
|
.word 7b, __retl_efault
|
|
.word 8b, __retl_efault
|
|
.word 9b, __retl_efault
|
|
.word 10b, __retl_efault
|
|
.word 11b, __retl_efault
|
|
.word 12b, __retl_efault
|
|
.word 13b, __retl_efault
|
|
.word 14b, __retl_efault
|
|
.word 15b, __retl_efault
|
|
.word 16b, __retl_efault
|
|
.word 17b, __retl_efault
|
|
.previous
|
|
|
|
.globl do_int_load
|
|
do_int_load:
|
|
rd %asi, %o5
|
|
wr %o4, 0, %asi
|
|
cmp %o1, 8
|
|
bge,pn %icc, 9f
|
|
cmp %o1, 4
|
|
be,pt %icc, 6f
|
|
4: lduba [%o2] %asi, %g2
|
|
5: lduba [%o2 + 1] %asi, %g3
|
|
sll %g2, 8, %g2
|
|
brz,pt %o3, 3f
|
|
add %g2, %g3, %g2
|
|
sllx %g2, 48, %g2
|
|
srax %g2, 48, %g2
|
|
3: ba,pt %xcc, 0f
|
|
stx %g2, [%o0]
|
|
6: lduba [%o2 + 1] %asi, %g3
|
|
sll %g2, 24, %g2
|
|
7: lduba [%o2 + 2] %asi, %g7
|
|
sll %g3, 16, %g3
|
|
8: lduba [%o2 + 3] %asi, %g1
|
|
sll %g7, 8, %g7
|
|
or %g2, %g3, %g2
|
|
or %g7, %g1, %g7
|
|
or %g2, %g7, %g2
|
|
brnz,a,pt %o3, 3f
|
|
sra %g2, 0, %g2
|
|
3: ba,pt %xcc, 0f
|
|
stx %g2, [%o0]
|
|
9: lduba [%o2] %asi, %g2
|
|
10: lduba [%o2 + 1] %asi, %g3
|
|
sllx %g2, 56, %g2
|
|
11: lduba [%o2 + 2] %asi, %g7
|
|
sllx %g3, 48, %g3
|
|
12: lduba [%o2 + 3] %asi, %g1
|
|
sllx %g7, 40, %g7
|
|
sllx %g1, 32, %g1
|
|
or %g2, %g3, %g2
|
|
or %g7, %g1, %g7
|
|
13: lduba [%o2 + 4] %asi, %g3
|
|
or %g2, %g7, %g7
|
|
14: lduba [%o2 + 5] %asi, %g1
|
|
sllx %g3, 24, %g3
|
|
15: lduba [%o2 + 6] %asi, %g2
|
|
sllx %g1, 16, %g1
|
|
or %g7, %g3, %g7
|
|
16: lduba [%o2 + 7] %asi, %g3
|
|
sllx %g2, 8, %g2
|
|
or %g7, %g1, %g7
|
|
or %g2, %g3, %g2
|
|
or %g7, %g2, %g7
|
|
cmp %o1, 8
|
|
be,a,pt %icc, 0f
|
|
stx %g7, [%o0]
|
|
srlx %g7, 32, %g2
|
|
sra %g7, 0, %g7
|
|
stx %g2, [%o0]
|
|
stx %g7, [%o0 + 8]
|
|
0:
|
|
wr %o5, 0x0, %asi
|
|
retl
|
|
mov 0, %o0
|
|
.size __do_int_load, .-__do_int_load
|
|
|
|
.section __ex_table,"a"
|
|
.word 4b, __retl_efault
|
|
.word 5b, __retl_efault
|
|
.word 6b, __retl_efault
|
|
.word 7b, __retl_efault
|
|
.word 8b, __retl_efault
|
|
.word 9b, __retl_efault
|
|
.word 10b, __retl_efault
|
|
.word 11b, __retl_efault
|
|
.word 12b, __retl_efault
|
|
.word 13b, __retl_efault
|
|
.word 14b, __retl_efault
|
|
.word 15b, __retl_efault
|
|
.word 16b, __retl_efault
|
|
.previous
|