summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2005-05-24 23:55:09 +0000
committercognet <cognet@FreeBSD.org>2005-05-24 23:55:09 +0000
commitd2691df07df9557bb97e41e6bb037eca1609d814 (patch)
tree5d10232b9c36f0d638a653174b85fd56d7408989 /sys/arm
parent07e93041c6b4c4f4550a99541ea2d38575a14ed6 (diff)
downloadFreeBSD-src-d2691df07df9557bb97e41e6bb037eca1609d814.zip
FreeBSD-src-d2691df07df9557bb97e41e6bb037eca1609d814.tar.gz
Remove kcopy(), we don't use it.
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/bcopyinout.S202
-rw-r--r--sys/arm/arm/bcopyinout_xscale.S428
2 files changed, 0 insertions, 630 deletions
diff --git a/sys/arm/arm/bcopyinout.S b/sys/arm/arm/bcopyinout.S
index 1fc99f5..fdd57d6 100644
--- a/sys/arm/arm/bcopyinout.S
+++ b/sys/arm/arm/bcopyinout.S
@@ -502,210 +502,8 @@ ENTRY(copyout)
RESTORE_REGS
RET
-
-/*
- * r0 = kernel space source address
- * r1 = kernel space destination address
- * r2 = length
- *
- * Copies bytes from kernel space to kernel space, aborting on page fault
- *
- * Copy of copyout, but without the ldrt/strt instructions.
- */
-
-ENTRY(kcopy)
- /* Quick exit if length is zero */
- teq r2, #0
- moveq r0, #0
- RETeq
-
- SAVE_REGS
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r2, r14}
- bl _C_LABEL(cpu_number)
- ldr r4, .Lcpu_info
- ldr r4, [r4, r0, lsl #2]
- ldr r4, [r4, #CI_CURPCB]
- ldmfd sp!, {r0-r2, r14}
-#else
- ldr r4, .Lcurpcb
- ldr r4, [r4]
#endif
- ldr r5, [r4, #PCB_ONFAULT]
- adr r3, .Lcopyfault
- str r3, [r4, #PCB_ONFAULT]
-
- PREFETCH(r0, 0)
- PREFETCH(r1, 0)
-
- /*
- * If not too many bytes, take the slow path.
- */
- cmp r2, #0x08
- blt .Lkcleanup
-
- /*
- * Align destination to word boundary.
- */
- and r6, r1, #0x3
- ldr pc, [pc, r6, lsl #2]
- b .Lkalend
- .word .Lkalend
- .word .Lkal3
- .word .Lkal2
- .word .Lkal1
-.Lkal3: ldrb r6, [r0], #1
- sub r2, r2, #1
- strb r6, [r1], #1
-.Lkal2: ldrb r7, [r0], #1
- sub r2, r2, #1
- strb r7, [r1], #1
-.Lkal1: ldrb r6, [r0], #1
- sub r2, r2, #1
- strb r6, [r1], #1
-.Lkalend:
-
- /*
- * If few bytes left, finish slow.
- */
- cmp r2, #0x08
- blt .Lkcleanup
-
- /*
- * If source is not aligned, finish slow.
- */
- ands r3, r0, #0x03
- bne .Lkcleanup
-
- cmp r2, #0x60 /* Must be > 0x5f for unrolled cacheline */
- blt .Lkcleanup8
-
- /*
- * Align source & destination to cacheline boundary.
- */
- and r6, r1, #0x1f
- ldr pc, [pc, r6]
- b .Lkcaligned
- .word .Lkcaligned
- .word .Lkcal28
- .word .Lkcal24
- .word .Lkcal20
- .word .Lkcal16
- .word .Lkcal12
- .word .Lkcal8
- .word .Lkcal4
-.Lkcal28:ldr r6, [r0], #4
- sub r2, r2, #4
- str r6, [r1], #4
-.Lkcal24:ldr r7, [r0], #4
- sub r2, r2, #4
- str r7, [r1], #4
-.Lkcal20:ldr r6, [r0], #4
- sub r2, r2, #4
- str r6, [r1], #4
-.Lkcal16:ldr r7, [r0], #4
- sub r2, r2, #4
- str r7, [r1], #4
-.Lkcal12:ldr r6, [r0], #4
- sub r2, r2, #4
- str r6, [r1], #4
-.Lkcal8:ldr r7, [r0], #4
- sub r2, r2, #4
- str r7, [r1], #4
-.Lkcal4:ldr r6, [r0], #4
- sub r2, r2, #4
- str r6, [r1], #4
-
- /*
- * We start with > 0x40 bytes to copy (>= 0x60 got us into this
- * part of the code, and we may have knocked that down by as much
- * as 0x1c getting aligned).
- *
- * This loop basically works out to:
- * do {
- * prefetch-next-cacheline(s)
- * bytes -= 0x20;
- * copy cacheline
- * } while (bytes >= 0x40);
- * bytes -= 0x20;
- * copy cacheline
- */
-.Lkcaligned:
- PREFETCH(r0, 32)
- PREFETCH(r1, 32)
-
- sub r2, r2, #0x20
-
- /* Copy a cacheline */
- ldmia r0!, {r6-r11}
- stmia r1!, {r6, r7}
- ldmia r0!, {r6, r7}
- stmia r1!, {r8-r11}
- stmia r1!, {r6, r7}
-
- cmp r2, #0x40
- bge .Lkcaligned
-
- sub r2, r2, #0x20
-
- /* Copy a cacheline */
- ldmia r0!, {r6-r11}
- stmia r1!, {r6-r7}
- ldmia r0!, {r6-r7}
- stmia r1!, {r8-r11}
- stmia r1!, {r6-r7}
-
- cmp r2, #0x08
- blt .Lkprecleanup
-
-.Lkcleanup8:
- ldmia r0!, {r8-r9}
- sub r2, r2, #8
- stmia r1!, {r8-r9}
- cmp r2, #8
- bge .Lkcleanup8
-
-.Lkprecleanup:
- /*
- * If we're done, bail.
- */
- cmp r2, #0
- beq .Lkout
-
-.Lkcleanup:
- and r6, r2, #0x3
- ldr pc, [pc, r6, lsl #2]
- b .Lkcend
- .word .Lkc4
- .word .Lkc1
- .word .Lkc2
- .word .Lkc3
-.Lkc4: ldrb r6, [r0], #1
- sub r2, r2, #1
- strb r6, [r1], #1
-.Lkc3: ldrb r7, [r0], #1
- sub r2, r2, #1
- strb r7, [r1], #1
-.Lkc2: ldrb r6, [r0], #1
- sub r2, r2, #1
- strb r6, [r1], #1
-.Lkc1: ldrb r7, [r0], #1
- subs r2, r2, #1
- strb r7, [r1], #1
-.Lkcend:
- bne .Lkcleanup
-
-.Lkout:
- mov r0, #0
-
- str r5, [r4, #PCB_ONFAULT]
- RESTORE_REGS
-
- RET
-#endif /* !__XSCALE__ */
-
/*
* int badaddr_read_1(const uint8_t *src, uint8_t *dest)
*
diff --git a/sys/arm/arm/bcopyinout_xscale.S b/sys/arm/arm/bcopyinout_xscale.S
index d75a2dd..bb785f8 100644
--- a/sys/arm/arm/bcopyinout_xscale.S
+++ b/sys/arm/arm/bcopyinout_xscale.S
@@ -927,431 +927,3 @@ ENTRY(copyout)
ldrb ip, [r0]
strbt ip, [r1]
RET
-
-
-/*
- * r0 = kernel space source address
- * r1 = kernel space destination address
- * r2 = length
- *
- * Copies bytes from kernel space to kernel space, aborting on page fault
- */
-ENTRY(kcopy)
- cmp r2, #0x00
- movle r0, #0x00
- movle pc, lr /* Bail early if length is <= 0 */
-
- stmfd sp!, {r10-r11, lr}
-
-#ifdef MULTIPROCESSOR
- /* XXX Probably not appropriate for non-Hydra SMPs */
- stmfd sp!, {r0-r2}
- bl _C_LABEL(cpu_number)
- ldr r10, .Lcpu_info
- ldmfd sp!, {r0-r2}
- ldr r10, [r10, r0, lsl #2]
- ldr r10, [r10, #CI_CURPCB]
-#else
- ldr r10, .Lcurpcb
- ldr r10, [r10]
-#endif
-
- mov r3, #0x00
- adr ip, .Lkcopy_fault
- ldr r11, [r10, #PCB_ONFAULT]
- str ip, [r10, #PCB_ONFAULT]
- bl .Lkcopy_guts
- str r11, [r10, #PCB_ONFAULT]
- mov r0, #0x00
- ldmfd sp!, {r10-r11, pc}
-
-.Lkcopy_fault:
- str r11, [r10, #PCB_ONFAULT]
- cmp r3, #0x00
- ldmgtfd sp!, {r4-r7} /* r3 > 0 Restore r4-r7 */
- ldmltfd sp!, {r4-r9} /* r3 < 0 Restore r4-r9 */
- ldmfd sp!, {r10-r11, pc}
-
-.Lkcopy_guts:
- pld [r0]
- /* Word-align the destination buffer */
- ands ip, r1, #0x03 /* Already word aligned? */
- beq .Lkcopy_wordaligned /* Yup */
- rsb ip, ip, #0x04
- cmp r2, ip /* Enough bytes left to align it? */
- blt .Lkcopy_bad_endgame2 /* Nope. Just copy bytewise */
- sub r2, r2, ip
- rsbs ip, ip, #0x03
- addne pc, pc, ip, lsl #3
- ldrb ip, [r0], #0x01
- strb ip, [r1], #0x01
- ldrb ip, [r0], #0x01
- strb ip, [r1], #0x01
- ldrb ip, [r0], #0x01
- strb ip, [r1], #0x01
- cmp r2, #0x00 /* All done? */
- RETeq
-
- /* Destination buffer is now word aligned */
-.Lkcopy_wordaligned:
- ands ip, r0, #0x03 /* Is src also word-aligned? */
- bne .Lkcopy_bad_align /* Nope. Things just got bad */
- cmp r2, #0x08 /* Less than 8 bytes remaining? */
- blt .Lkcopy_w_less_than8
-
- /* Quad-align the destination buffer */
- tst r1, #0x07 /* Already quad aligned? */
- ldrne ip, [r0], #0x04
- stmfd sp!, {r4-r9} /* Free up some registers */
- mov r3, #-1 /* Signal restore r4-r9 */
- subne r2, r2, #0x04
- strne ip, [r1], #0x04
-
- /* Destination buffer quad aligned, source is word aligned */
- subs r2, r2, #0x80
- blt .Lkcopy_w_lessthan128
-
- /* Copy 128 bytes at a time */
-.Lkcopy_w_loop128:
- ldr r4, [r0], #0x04 /* LD:00-03 */
- ldr r5, [r0], #0x04 /* LD:04-07 */
- pld [r0, #0x18] /* Prefetch 0x20 */
- ldr r6, [r0], #0x04 /* LD:08-0b */
- ldr r7, [r0], #0x04 /* LD:0c-0f */
- ldr r8, [r0], #0x04 /* LD:10-13 */
- ldr r9, [r0], #0x04 /* LD:14-17 */
- strd r4, [r1], #0x08 /* ST:00-07 */
- ldr r4, [r0], #0x04 /* LD:18-1b */
- ldr r5, [r0], #0x04 /* LD:1c-1f */
- strd r6, [r1], #0x08 /* ST:08-0f */
- ldr r6, [r0], #0x04 /* LD:20-23 */
- ldr r7, [r0], #0x04 /* LD:24-27 */
- pld [r0, #0x18] /* Prefetch 0x40 */
- strd r8, [r1], #0x08 /* ST:10-17 */
- ldr r8, [r0], #0x04 /* LD:28-2b */
- ldr r9, [r0], #0x04 /* LD:2c-2f */
- strd r4, [r1], #0x08 /* ST:18-1f */
- ldr r4, [r0], #0x04 /* LD:30-33 */
- ldr r5, [r0], #0x04 /* LD:34-37 */
- strd r6, [r1], #0x08 /* ST:20-27 */
- ldr r6, [r0], #0x04 /* LD:38-3b */
- ldr r7, [r0], #0x04 /* LD:3c-3f */
- strd r8, [r1], #0x08 /* ST:28-2f */
- ldr r8, [r0], #0x04 /* LD:40-43 */
- ldr r9, [r0], #0x04 /* LD:44-47 */
- pld [r0, #0x18] /* Prefetch 0x60 */
- strd r4, [r1], #0x08 /* ST:30-37 */
- ldr r4, [r0], #0x04 /* LD:48-4b */
- ldr r5, [r0], #0x04 /* LD:4c-4f */
- strd r6, [r1], #0x08 /* ST:38-3f */
- ldr r6, [r0], #0x04 /* LD:50-53 */
- ldr r7, [r0], #0x04 /* LD:54-57 */
- strd r8, [r1], #0x08 /* ST:40-47 */
- ldr r8, [r0], #0x04 /* LD:58-5b */
- ldr r9, [r0], #0x04 /* LD:5c-5f */
- strd r4, [r1], #0x08 /* ST:48-4f */
- ldr r4, [r0], #0x04 /* LD:60-63 */
- ldr r5, [r0], #0x04 /* LD:64-67 */
- pld [r0, #0x18] /* Prefetch 0x80 */
- strd r6, [r1], #0x08 /* ST:50-57 */
- ldr r6, [r0], #0x04 /* LD:68-6b */
- ldr r7, [r0], #0x04 /* LD:6c-6f */
- strd r8, [r1], #0x08 /* ST:58-5f */
- ldr r8, [r0], #0x04 /* LD:70-73 */
- ldr r9, [r0], #0x04 /* LD:74-77 */
- strd r4, [r1], #0x08 /* ST:60-67 */
- ldr r4, [r0], #0x04 /* LD:78-7b */
- ldr r5, [r0], #0x04 /* LD:7c-7f */
- strd r6, [r1], #0x08 /* ST:68-6f */
- strd r8, [r1], #0x08 /* ST:70-77 */
- subs r2, r2, #0x80
- strd r4, [r1], #0x08 /* ST:78-7f */
- bge .Lkcopy_w_loop128
-
-.Lkcopy_w_lessthan128:
- adds r2, r2, #0x80 /* Adjust for extra sub */
- ldmeqfd sp!, {r4-r9}
- RETeq /* Return now if done */
- subs r2, r2, #0x20
- blt .Lkcopy_w_lessthan32
-
- /* Copy 32 bytes at a time */
-.Lkcopy_w_loop32:
- ldr r4, [r0], #0x04
- ldr r5, [r0], #0x04
- pld [r0, #0x18]
- ldr r6, [r0], #0x04
- ldr r7, [r0], #0x04
- ldr r8, [r0], #0x04
- ldr r9, [r0], #0x04
- strd r4, [r1], #0x08
- ldr r4, [r0], #0x04
- ldr r5, [r0], #0x04
- strd r6, [r1], #0x08
- strd r8, [r1], #0x08
- subs r2, r2, #0x20
- strd r4, [r1], #0x08
- bge .Lkcopy_w_loop32
-
-.Lkcopy_w_lessthan32:
- adds r2, r2, #0x20 /* Adjust for extra sub */
- ldmeqfd sp!, {r4-r9}
- RETeq /* Return now if done */
-
- and r4, r2, #0x18
- rsb r5, r4, #0x18
- subs r2, r2, r4
- add pc, pc, r5, lsl #1
- nop
-
- /* At least 24 bytes remaining */
- ldr r4, [r0], #0x04
- ldr r5, [r0], #0x04
- nop
- strd r4, [r1], #0x08
-
- /* At least 16 bytes remaining */
- ldr r4, [r0], #0x04
- ldr r5, [r0], #0x04
- nop
- strd r4, [r1], #0x08
-
- /* At least 8 bytes remaining */
- ldr r4, [r0], #0x04
- ldr r5, [r0], #0x04
- nop
- strd r4, [r1], #0x08
-
- /* Less than 8 bytes remaining */
- ldmfd sp!, {r4-r9}
- RETeq /* Return now if done */
- mov r3, #0x00
-
-.Lkcopy_w_less_than8:
- subs r2, r2, #0x04
- ldrge ip, [r0], #0x04
- strge ip, [r1], #0x04
- RETeq /* Return now if done */
- addlt r2, r2, #0x04
- ldrb ip, [r0], #0x01
- cmp r2, #0x02
- ldrgeb r2, [r0], #0x01
- strb ip, [r1], #0x01
- ldrgtb ip, [r0]
- strgeb r2, [r1], #0x01
- strgtb ip, [r1]
- RET
-
-/*
- * At this point, it has not been possible to word align both buffers.
- * The destination buffer (r1) is word aligned, but the source buffer
- * (r0) is not.
- */
-.Lkcopy_bad_align:
- stmfd sp!, {r4-r7}
- mov r3, #0x01
- bic r0, r0, #0x03
- cmp ip, #2
- ldr ip, [r0], #0x04
- bgt .Lkcopy_bad3
- beq .Lkcopy_bad2
- b .Lkcopy_bad1
-
-.Lkcopy_bad1_loop16:
-#ifdef __ARMEB__
- mov r4, ip, lsl #8
-#else
- mov r4, ip, lsr #8
-#endif
- ldr r5, [r0], #0x04
- pld [r0, #0x018]
- ldr r6, [r0], #0x04
- ldr r7, [r0], #0x04
- ldr ip, [r0], #0x04
-#ifdef __ARMEB__
- orr r4, r4, r5, lsr #24
- mov r5, r5, lsl #8
- orr r5, r5, r6, lsr #24
- mov r6, r6, lsl #8
- orr r6, r6, r7, lsr #24
- mov r7, r7, lsl #8
- orr r7, r7, ip, lsr #24
-#else
- orr r4, r4, r5, lsl #24
- mov r5, r5, lsr #8
- orr r5, r5, r6, lsl #24
- mov r6, r6, lsr #8
- orr r6, r6, r7, lsl #24
- mov r7, r7, lsr #8
- orr r7, r7, ip, lsl #24
-#endif
- str r4, [r1], #0x04
- str r5, [r1], #0x04
- str r6, [r1], #0x04
- str r7, [r1], #0x04
-.Lkcopy_bad1:
- subs r2, r2, #0x10
- bge .Lkcopy_bad1_loop16
-
- adds r2, r2, #0x10
- ldmeqfd sp!, {r4-r7}
- RETeq /* Return now if done */
- subs r2, r2, #0x04
- sublt r0, r0, #0x03
- blt .Lkcopy_bad_endgame
-
-.Lkcopy_bad1_loop4:
-#ifdef __ARMEB__
- mov r4, ip, lsl #8
-#else
- mov r4, ip, lsr #8
-#endif
- ldr ip, [r0], #0x04
- subs r2, r2, #0x04
-#ifdef __ARMEB__
- orr r4, r4, ip, lsr #24
-#else
- orr r4, r4, ip, lsl #24
-#endif
- str r4, [r1], #0x04
- bge .Lkcopy_bad1_loop4
- sub r0, r0, #0x03
- b .Lkcopy_bad_endgame
-
-.Lkcopy_bad2_loop16:
-#ifdef __ARMEB__
- mov r4, ip, lsl #16
-#else
- mov r4, ip, lsr #16
-#endif
- ldr r5, [r0], #0x04
- pld [r0, #0x018]
- ldr r6, [r0], #0x04
- ldr r7, [r0], #0x04
- ldr ip, [r0], #0x04
-#ifdef __ARMEB__
- orr r4, r4, r5, lsr #16
- mov r5, r5, lsl #16
- orr r5, r5, r6, lsr #16
- mov r6, r6, lsl #16
- orr r6, r6, r7, lsr #16
- mov r7, r7, lsl #16
- orr r7, r7, ip, lsr #16
-#else
- orr r4, r4, r5, lsl #16
- mov r5, r5, lsr #16
- orr r5, r5, r6, lsl #16
- mov r6, r6, lsr #16
- orr r6, r6, r7, lsl #16
- mov r7, r7, lsr #16
- orr r7, r7, ip, lsl #16
-#endif
- str r4, [r1], #0x04
- str r5, [r1], #0x04
- str r6, [r1], #0x04
- str r7, [r1], #0x04
-.Lkcopy_bad2:
- subs r2, r2, #0x10
- bge .Lkcopy_bad2_loop16
-
- adds r2, r2, #0x10
- ldmeqfd sp!, {r4-r7}
- RETeq /* Return now if done */
- subs r2, r2, #0x04
- sublt r0, r0, #0x02
- blt .Lkcopy_bad_endgame
-
-.Lkcopy_bad2_loop4:
-#ifdef __ARMEB__
- mov r4, ip, lsl #16
-#else
- mov r4, ip, lsr #16
-#endif
- ldr ip, [r0], #0x04
- subs r2, r2, #0x04
-#ifdef __ARMEB__
- orr r4, r4, ip, lsr #16
-#else
- orr r4, r4, ip, lsl #16
-#endif
- str r4, [r1], #0x04
- bge .Lkcopy_bad2_loop4
- sub r0, r0, #0x02
- b .Lkcopy_bad_endgame
-
-.Lkcopy_bad3_loop16:
-#ifdef __ARMEB__
- mov r4, ip, lsl #24
-#else
- mov r4, ip, lsr #24
-#endif
- ldr r5, [r0], #0x04
- pld [r0, #0x018]
- ldr r6, [r0], #0x04
- ldr r7, [r0], #0x04
- ldr ip, [r0], #0x04
-#ifdef __ARMEB__
- orr r4, r4, r5, lsr #8
- mov r5, r5, lsl #24
- orr r5, r5, r6, lsr #8
- mov r6, r6, lsl #24
- orr r6, r6, r7, lsr #8
- mov r7, r7, lsl #24
- orr r7, r7, ip, lsr #8
-#else
- orr r4, r4, r5, lsl #8
- mov r5, r5, lsr #24
- orr r5, r5, r6, lsl #8
- mov r6, r6, lsr #24
- orr r6, r6, r7, lsl #8
- mov r7, r7, lsr #24
- orr r7, r7, ip, lsl #8
-#endif
- str r4, [r1], #0x04
- str r5, [r1], #0x04
- str r6, [r1], #0x04
- str r7, [r1], #0x04
-.Lkcopy_bad3:
- subs r2, r2, #0x10
- bge .Lkcopy_bad3_loop16
-
- adds r2, r2, #0x10
- ldmeqfd sp!, {r4-r7}
- RETeq /* Return now if done */
- subs r2, r2, #0x04
- sublt r0, r0, #0x01
- blt .Lkcopy_bad_endgame
-
-.Lkcopy_bad3_loop4:
-#ifdef __ARMEB__
- mov r4, ip, lsl #24
-#else
- mov r4, ip, lsr #24
-#endif
- ldr ip, [r0], #0x04
- subs r2, r2, #0x04
-#ifdef __ARMEB__
- orr r4, r4, ip, lsr #8
-#else
- orr r4, r4, ip, lsl #8
-#endif
- str r4, [r1], #0x04
- bge .Lkcopy_bad3_loop4
- sub r0, r0, #0x01
-
-.Lkcopy_bad_endgame:
- ldmfd sp!, {r4-r7}
- mov r3, #0x00
- adds r2, r2, #0x04
- RETeq
-.Lkcopy_bad_endgame2:
- rsbs r2, r2, #0x03
- addne pc, pc, r2, lsl #3
- nop
- ldrb ip, [r0], #0x01
- strb ip, [r1], #0x01
- ldrb ip, [r0], #0x01
- strb ip, [r1], #0x01
- ldrb ip, [r0]
- strb ip, [r1]
- RET
OpenPOWER on IntegriCloud