mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
sparc32: switch __bzero() away from range exception table entries
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -27,35 +27,44 @@
|
|||||||
.text; \
|
.text; \
|
||||||
.align 4
|
.align 4
|
||||||
|
|
||||||
#define EXT(start,end,handler) \
|
#define STORE(source, base, offset, n) \
|
||||||
|
98: std source, [base + offset + n]; \
|
||||||
|
.section .fixup,ALLOC,EXECINSTR; \
|
||||||
|
.align 4; \
|
||||||
|
99: ba 30f; \
|
||||||
|
sub %o3, n - offset, %o3; \
|
||||||
.section __ex_table,ALLOC; \
|
.section __ex_table,ALLOC; \
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word start, 0, end, handler; \
|
.word 98b, 99b; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4
|
.align 4;
|
||||||
|
|
||||||
|
#define STORE_LAST(source, base, offset, n) \
|
||||||
|
EX(std source, [base - offset - n], \
|
||||||
|
add %o1, offset + n);
|
||||||
|
|
||||||
/* Please don't change these macros, unless you change the logic
|
/* Please don't change these macros, unless you change the logic
|
||||||
* in the .fixup section below as well.
|
* in the .fixup section below as well.
|
||||||
* Store 64 bytes at (BASE + OFFSET) using value SOURCE. */
|
* Store 64 bytes at (BASE + OFFSET) using value SOURCE. */
|
||||||
#define ZERO_BIG_BLOCK(base, offset, source) \
|
#define ZERO_BIG_BLOCK(base, offset, source) \
|
||||||
std source, [base + offset + 0x00]; \
|
STORE(source, base, offset, 0x00); \
|
||||||
std source, [base + offset + 0x08]; \
|
STORE(source, base, offset, 0x08); \
|
||||||
std source, [base + offset + 0x10]; \
|
STORE(source, base, offset, 0x10); \
|
||||||
std source, [base + offset + 0x18]; \
|
STORE(source, base, offset, 0x18); \
|
||||||
std source, [base + offset + 0x20]; \
|
STORE(source, base, offset, 0x20); \
|
||||||
std source, [base + offset + 0x28]; \
|
STORE(source, base, offset, 0x28); \
|
||||||
std source, [base + offset + 0x30]; \
|
STORE(source, base, offset, 0x30); \
|
||||||
std source, [base + offset + 0x38];
|
STORE(source, base, offset, 0x38);
|
||||||
|
|
||||||
#define ZERO_LAST_BLOCKS(base, offset, source) \
|
#define ZERO_LAST_BLOCKS(base, offset, source) \
|
||||||
std source, [base - offset - 0x38]; \
|
STORE_LAST(source, base, offset, 0x38); \
|
||||||
std source, [base - offset - 0x30]; \
|
STORE_LAST(source, base, offset, 0x30); \
|
||||||
std source, [base - offset - 0x28]; \
|
STORE_LAST(source, base, offset, 0x28); \
|
||||||
std source, [base - offset - 0x20]; \
|
STORE_LAST(source, base, offset, 0x20); \
|
||||||
std source, [base - offset - 0x18]; \
|
STORE_LAST(source, base, offset, 0x18); \
|
||||||
std source, [base - offset - 0x10]; \
|
STORE_LAST(source, base, offset, 0x10); \
|
||||||
std source, [base - offset - 0x08]; \
|
STORE_LAST(source, base, offset, 0x08); \
|
||||||
std source, [base - offset - 0x00];
|
STORE_LAST(source, base, offset, 0x00);
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.align 4
|
.align 4
|
||||||
@@ -120,8 +129,6 @@ __bzero:
|
|||||||
ZERO_BIG_BLOCK(%o0, 0x00, %g2)
|
ZERO_BIG_BLOCK(%o0, 0x00, %g2)
|
||||||
subcc %o3, 128, %o3
|
subcc %o3, 128, %o3
|
||||||
ZERO_BIG_BLOCK(%o0, 0x40, %g2)
|
ZERO_BIG_BLOCK(%o0, 0x40, %g2)
|
||||||
11:
|
|
||||||
EXT(10b, 11b, 20f)
|
|
||||||
bne 10b
|
bne 10b
|
||||||
add %o0, 128, %o0
|
add %o0, 128, %o0
|
||||||
|
|
||||||
@@ -136,7 +143,6 @@ __bzero:
|
|||||||
jmp %o4
|
jmp %o4
|
||||||
add %o0, %o2, %o0
|
add %o0, %o2, %o0
|
||||||
|
|
||||||
12:
|
|
||||||
ZERO_LAST_BLOCKS(%o0, 0x48, %g2)
|
ZERO_LAST_BLOCKS(%o0, 0x48, %g2)
|
||||||
ZERO_LAST_BLOCKS(%o0, 0x08, %g2)
|
ZERO_LAST_BLOCKS(%o0, 0x08, %g2)
|
||||||
13:
|
13:
|
||||||
@@ -182,24 +188,10 @@ __bzero:
|
|||||||
|
|
||||||
.section .fixup,#alloc,#execinstr
|
.section .fixup,#alloc,#execinstr
|
||||||
.align 4
|
.align 4
|
||||||
20:
|
30:
|
||||||
cmp %g2, 8
|
and %o1, 0x7f, %o1
|
||||||
bleu 1f
|
|
||||||
and %o1, 0x7f, %o1
|
|
||||||
sub %g2, 9, %g2
|
|
||||||
add %o3, 64, %o3
|
|
||||||
1:
|
|
||||||
sll %g2, 3, %g2
|
|
||||||
add %o3, %o1, %o0
|
|
||||||
retl
|
retl
|
||||||
sub %o0, %g2, %o0
|
add %o3, %o1, %o0
|
||||||
21:
|
|
||||||
mov 8, %o0
|
|
||||||
and %o1, 7, %o1
|
|
||||||
sub %o0, %g2, %o0
|
|
||||||
sll %o0, 3, %o0
|
|
||||||
retl
|
|
||||||
add %o0, %o1, %o0
|
|
||||||
|
|
||||||
.globl __bzero_end
|
.globl __bzero_end
|
||||||
__bzero_end:
|
__bzero_end:
|
||||||
|
Reference in New Issue
Block a user