------- Comment #2 from raj dot khem at gmail dot com 2010-05-27 07:12 -------
here is diff of two assembly outputs
$ diff copypage-v4wb.s copypage-v4wb.no-ipa-sra.S -u
--- copypage-v4wb.s 2010-05-27 00:11:03.130607878 -0700
+++ copypage-v4wb.no-ipa-sra.S 2010-05-27 00:10:54.790615578 -0700
@@ -120,19 +120,30 @@
v4wb_copy_user_highpage:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
- stmfd sp!, {r4, lr}
- mov r1, sp
- bic r4, r1, #8128
+ stmfd sp!, {r4, r5, r6, lr}
+ mov ip, sp
+ bic r4, ip, #8128
bic r4, r4, #63
- ldr r1, [r4, #4]
- add r1, r1, #1
- str r1, [r4, #4]
- ldr r1, [r4, #4]
- add r1, r1, #1
- str r1, [r4, #4]
- ldr r1, [r3, #0]
- ldr r1, [r1, #332]
- tst r1, #1
+ ldr ip, [r4, #4]
+ add ip, ip, #1
+ str ip, [r4, #4]
+ ldr ip, .L8
+ ldr lr, [r4, #4]
+ ldr r6, [ip, #0]
+ add lr, lr, #1
+ rsb r6, r6, r0
+ mov r6, r6, asr #5
+ mov r6, r6, asl #12
+ add r6, r6, #-1073741824
+ str lr, [r4, #4]
+ ldr r5, [ip, #0]
+ ldr r0, [r3, #0]
+ rsb r5, r5, r1
+ ldr r0, [r0, #332]
+ mov r5, r5, asr #5
+ mov r5, r5, asl #12
+ tst r0, #1
+ add r5, r5, #-1073741824
beq .L6
bic r2, r2, #4080
bic r0, r2, #15
@@ -140,6 +151,8 @@
ldr r2, [r3, #20]
bl arm926_flush_user_cache_range
.L6:
+ mov r0, r6
+ mov r1, r5
bl v4wb_copy_user_page
ldr r3, [r4, #4]
sub r3, r3, #1
@@ -147,7 +160,11 @@
ldr r3, [r4, #4]
sub r3, r3, #1
str r3, [r4, #4]
- ldmfd sp!, {r4, pc}
+ ldmfd sp!, {r4, r5, r6, pc}
+.L9:
+ .align 2
+.L8:
+ .word mem_map
.size v4wb_copy_user_highpage, .-v4wb_copy_user_highpage
.global v4wb_user_fns
.section .init.data,"aw",%progbits
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44290