diff options
author | Thiemo Seufer <ths@networkno.de> | 2008-02-18 14:32:49 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2008-04-28 12:14:23 -0400 |
commit | fb2a27e743cd565c25cd896911e494482a8b7251 (patch) | |
tree | 791190ead6211e829443185fb1d4b4109fbd9a34 /arch/mips/mm/uasm.h | |
parent | 064922a805ec7aadfafdd27aa6b4908d737c3c1d (diff) |
[MIPS] Reimplement clear_page/copy_page
Fold the SB-1 specific implementation of clear_page/copy_page in the
generic version, and rewrite that one in tlbex style. The immediate
benefits:
- It converts the compile-time workaround for SB-1 pass 1 prefetches
to a more efficient run-time check.
- It allows adjustment of loop unfolling, which helps to reduce the
number of redundant cdex cache ops.
- It fixes some esoteric cornercases (the cache line length calculations
can go wrong, and support for 64k pages without prefetch instructions
will overflow the addiu immediate).
- Somewhat better guesses of "good" prefetch values.
Signed-off-by: Thiemo Seufer <ths@networkno.de>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/mm/uasm.h')
-rw-r--r-- | arch/mips/mm/uasm.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/mips/mm/uasm.h b/arch/mips/mm/uasm.h index fe0574f6e77d..0d6a66f32030 100644 --- a/arch/mips/mm/uasm.h +++ b/arch/mips/mm/uasm.h | |||
@@ -55,6 +55,7 @@ Ip_u1s2(_bgezl); | |||
55 | Ip_u1s2(_bltz); | 55 | Ip_u1s2(_bltz); |
56 | Ip_u1s2(_bltzl); | 56 | Ip_u1s2(_bltzl); |
57 | Ip_u1u2s3(_bne); | 57 | Ip_u1u2s3(_bne); |
58 | Ip_u2s3u1(_cache); | ||
58 | Ip_u1u2u3(_dmfc0); | 59 | Ip_u1u2u3(_dmfc0); |
59 | Ip_u1u2u3(_dmtc0); | 60 | Ip_u1u2u3(_dmtc0); |
60 | Ip_u2u1s3(_daddiu); | 61 | Ip_u2u1s3(_daddiu); |
@@ -77,6 +78,7 @@ Ip_u2s3u1(_lw); | |||
77 | Ip_u1u2u3(_mfc0); | 78 | Ip_u1u2u3(_mfc0); |
78 | Ip_u1u2u3(_mtc0); | 79 | Ip_u1u2u3(_mtc0); |
79 | Ip_u2u1u3(_ori); | 80 | Ip_u2u1u3(_ori); |
81 | Ip_u2s3u1(_pref); | ||
80 | Ip_0(_rfe); | 82 | Ip_0(_rfe); |
81 | Ip_u2s3u1(_sc); | 83 | Ip_u2s3u1(_sc); |
82 | Ip_u2s3u1(_scd); | 84 | Ip_u2s3u1(_scd); |
@@ -177,6 +179,8 @@ void uasm_il_bltz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); | |||
177 | void uasm_il_b(u32 **p, struct uasm_reloc **r, int lid); | 179 | void uasm_il_b(u32 **p, struct uasm_reloc **r, int lid); |
178 | void uasm_il_beqz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); | 180 | void uasm_il_beqz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); |
179 | void uasm_il_beqzl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); | 181 | void uasm_il_beqzl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); |
182 | void uasm_il_bne(u32 **p, struct uasm_reloc **r, unsigned int reg1, | ||
183 | unsigned int reg2, int lid); | ||
180 | void uasm_il_bnez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); | 184 | void uasm_il_bnez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); |
181 | void uasm_il_bgezl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); | 185 | void uasm_il_bgezl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); |
182 | void uasm_il_bgez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); | 186 | void uasm_il_bgez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid); |