Bug 979894. Add unwind information for pixman arm functions. r=jseward

This isn't technically correct because these functions will never call
functions that throw exceptions, however it lets the profiler unwind them.
The unwinding will also probably be wrong during prologue/epilogue. The right
solution is probably to use cfi.
This commit is contained in:
Jeff Muizelaar 2014-03-10 12:31:58 -04:00
parent b304f198e0
commit 7f48f279b5
3 changed files with 25 additions and 0 deletions

View File

@ -954,6 +954,7 @@ generate_composite_function \
*/
.macro pixman_composite_over_n_8_0565_init
add DUMMY, sp, #ARGS_STACK_OFFSET
.vsave {d8-d15}
vpush {d8-d15}
vld1.32 {d11[0]}, [DUMMY]
vdup.8 d8, d11[0]
@ -981,6 +982,7 @@ generate_composite_function \
.macro pixman_composite_over_8888_n_0565_init
add DUMMY, sp, #(ARGS_STACK_OFFSET + 8)
.vsave {d8-d15}
vpush {d8-d15}
vld1.32 {d24[0]}, [DUMMY]
vdup.8 d24, d24[3]
@ -1447,6 +1449,7 @@ generate_composite_function \
.macro pixman_composite_over_n_8_8888_init
add DUMMY, sp, #ARGS_STACK_OFFSET
.vsave {d8-d15}
vpush {d8-d15}
vld1.32 {d11[0]}, [DUMMY]
vdup.8 d8, d11[0]
@ -1518,6 +1521,7 @@ generate_composite_function \
.macro pixman_composite_over_n_8_8_init
add DUMMY, sp, #ARGS_STACK_OFFSET
.vsave {d8-d15}
vpush {d8-d15}
vld1.32 {d8[0]}, [DUMMY]
vdup.8 d8, d8[3]
@ -1619,6 +1623,7 @@ generate_composite_function \
.macro pixman_composite_over_n_8888_8888_ca_init
add DUMMY, sp, #ARGS_STACK_OFFSET
.vsave {d8-d15}
vpush {d8-d15}
vld1.32 {d11[0]}, [DUMMY]
vdup.8 d8, d11[0]
@ -1788,6 +1793,7 @@ generate_composite_function \
.macro pixman_composite_over_n_8888_0565_ca_init
add DUMMY, sp, #ARGS_STACK_OFFSET
.vsave {d8-d15}
vpush {d8-d15}
vld1.32 {d11[0]}, [DUMMY]
vdup.8 d8, d11[0]
@ -1901,6 +1907,7 @@ generate_composite_function \
.macro pixman_composite_add_n_8_8_init
add DUMMY, sp, #ARGS_STACK_OFFSET
.vsave {d8-d15}
vpush {d8-d15}
vld1.32 {d11[0]}, [DUMMY]
vdup.8 d11, d11[3]
@ -2207,6 +2214,7 @@ generate_composite_function_single_scanline \
.macro pixman_composite_over_8888_n_8888_init
add DUMMY, sp, #48
.vsave {d8-d15}
vpush {d8-d15}
vld1.32 {d15[0]}, [DUMMY]
vdup.8 d15, d15[3]
@ -2579,6 +2587,7 @@ generate_composite_function \
.macro pixman_composite_over_0565_n_0565_init
add DUMMY, sp, #(ARGS_STACK_OFFSET + 8)
.vsave {d8-d15}
vpush {d8-d15}
vld1.32 {d15[0]}, [DUMMY]
vdup.8 d15, d15[3]
@ -3132,13 +3141,16 @@ pixman_asm_function fname
TMP4 .req r9
STRIDE .req r2
.fnstart
mov ip, sp
.save {r4, r5, r6, r7, r8, r9}
push {r4, r5, r6, r7, r8, r9}
mov PF_OFFS, #prefetch_distance
ldmia ip, {WB, X, UX, WIDTH}
mul PF_OFFS, PF_OFFS, UX
.if ((flags) & BILINEAR_FLAG_USE_ALL_NEON_REGS) != 0
.vsave {d8-d15}
vpush {d8-d15}
.endif
@ -3232,6 +3244,7 @@ pixman_asm_function fname
.endif
pop {r4, r5, r6, r7, r8, r9}
bx lr
.fnend
.unreq OUT
.unreq TOP

View File

@ -639,6 +639,8 @@ local skip1
.type fname, %function
#endif
fname:
.fnstart
.save {r4-r12, lr}
push {r4-r12, lr} /* save all registers */
/*
@ -816,6 +818,7 @@ fname:
init
.if regs_shortage
.save {r0, r1}
push {r0, r1}
.endif
subs H, H, #1
@ -901,6 +904,7 @@ fname:
.endif
cleanup
pop {r4-r12, pc} /* exit */
.fnend
.purgem fetch_src_pixblock
.purgem pixld_src
@ -953,6 +957,7 @@ fname:
.type fname, %function
#endif
fname:
.fnstart
.set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_NONE
/*
* Make some macro arguments globally visible and accessible
@ -987,6 +992,7 @@ fname:
.endm
ldr UNIT_X, [sp]
.save {r4-r8, lr}
push {r4-r8, lr}
ldr SRC_WIDTH_FIXED, [sp, #(24 + 4)]
.if mask_bpp != 0
@ -1102,6 +1108,7 @@ fname:
.purgem fetch_src_pixblock
.purgem pixld_src
.fnend
.endfunc
.endm
@ -1128,6 +1135,7 @@ fname:
*/
.macro default_init_need_all_regs
.vsave {d8-d15}
vpush {d8-d15}
.endm

View File

@ -680,12 +680,15 @@
ORIG_W .req r14 /* width (pixels) */
fname:
.fnstart
.save {r4-r11, lr}
push {r4-r11, lr} /* save all registers */
subs Y, Y, #1
blo 199f
#ifdef DEBUG_PARAMS
.pad #9*4
sub sp, sp, #9*4
#endif
@ -857,6 +860,7 @@ fname:
#endif
199:
pop {r4-r11, pc} /* exit */
.fnend
.ltorg