Loading arch/blackfin/mach-common/head.S +19 −47 Original line number Diff line number Diff line Loading @@ -195,6 +195,19 @@ ENDPROC(__start) # define WDOG_CTL WDOGA_CTL #endif ENTRY(__init_clear_bss) r2 = r2 - r1; cc = r2 == 0; if cc jump .L_bss_done; r2 >>= 2; p1 = r1; p2 = r2; lsetup (1f, 1f) lc0 = p2; 1: [p1++] = r0; .L_bss_done: rts; ENDPROC(__init_clear_bss) ENTRY(_real_start) /* Enable nested interrupts */ [--sp] = reti; Loading @@ -206,75 +219,34 @@ ENTRY(_real_start) w[p0] = r0; ssync; r0 = 0 (x); /* Zero out all of the fun bss regions */ #if L1_DATA_A_LENGTH > 0 r1.l = __sbss_l1; r1.h = __sbss_l1; r2.l = __ebss_l1; r2.h = __ebss_l1; r0 = 0 (z); r2 = r2 - r1; cc = r2 == 0; if cc jump .L_a_l1_done; r2 >>= 2; p1 = r1; p2 = r2; lsetup (.L_clear_a_l1, .L_clear_a_l1 ) lc0 = p2; .L_clear_a_l1: [p1++] = r0; .L_a_l1_done: call __init_clear_bss #endif #if L1_DATA_B_LENGTH > 0 r1.l = __sbss_b_l1; r1.h = __sbss_b_l1; r2.l = __ebss_b_l1; r2.h = __ebss_b_l1; r0 = 0 (z); r2 = r2 - r1; cc = r2 == 0; if cc jump .L_b_l1_done; r2 >>= 2; p1 = r1; p2 = r2; lsetup (.L_clear_b_l1, .L_clear_b_l1 ) lc0 = p2; .L_clear_b_l1: [p1++] = r0; .L_b_l1_done: call __init_clear_bss #endif #if L2_LENGTH > 0 r1.l = __sbss_l2; r1.h = __sbss_l2; r2.l = __ebss_l2; r2.h = __ebss_l2; r0 = 0 (z); r2 = r2 - r1; cc = r2 == 0; if cc jump .L_l2_done; r2 >>= 2; p1 = r1; p2 = r2; lsetup (.L_clear_l2, .L_clear_l2 ) lc0 = p2; .L_clear_l2: [p1++] = r0; .L_l2_done: call __init_clear_bss #endif /* Zero out the bss region * Note: this will fail if bss is 0 bytes ... */ r0 = 0 (z); r1.l = ___bss_start; r1.h = ___bss_start; r2.l = ___bss_stop; r2.h = ___bss_stop; r2 = r2 - r1; r2 >>= 2; p1 = r1; p2 = r2; lsetup (.L_clear_bss, .L_clear_bss) lc0 = p2; .L_clear_bss: [p1++] = r0; call __init_clear_bss /* In case there is a NULL pointer reference, * zero out region before stext Loading Loading
arch/blackfin/mach-common/head.S +19 −47 Original line number Diff line number Diff line Loading @@ -195,6 +195,19 @@ ENDPROC(__start) # define WDOG_CTL WDOGA_CTL #endif ENTRY(__init_clear_bss) r2 = r2 - r1; cc = r2 == 0; if cc jump .L_bss_done; r2 >>= 2; p1 = r1; p2 = r2; lsetup (1f, 1f) lc0 = p2; 1: [p1++] = r0; .L_bss_done: rts; ENDPROC(__init_clear_bss) ENTRY(_real_start) /* Enable nested interrupts */ [--sp] = reti; Loading @@ -206,75 +219,34 @@ ENTRY(_real_start) w[p0] = r0; ssync; r0 = 0 (x); /* Zero out all of the fun bss regions */ #if L1_DATA_A_LENGTH > 0 r1.l = __sbss_l1; r1.h = __sbss_l1; r2.l = __ebss_l1; r2.h = __ebss_l1; r0 = 0 (z); r2 = r2 - r1; cc = r2 == 0; if cc jump .L_a_l1_done; r2 >>= 2; p1 = r1; p2 = r2; lsetup (.L_clear_a_l1, .L_clear_a_l1 ) lc0 = p2; .L_clear_a_l1: [p1++] = r0; .L_a_l1_done: call __init_clear_bss #endif #if L1_DATA_B_LENGTH > 0 r1.l = __sbss_b_l1; r1.h = __sbss_b_l1; r2.l = __ebss_b_l1; r2.h = __ebss_b_l1; r0 = 0 (z); r2 = r2 - r1; cc = r2 == 0; if cc jump .L_b_l1_done; r2 >>= 2; p1 = r1; p2 = r2; lsetup (.L_clear_b_l1, .L_clear_b_l1 ) lc0 = p2; .L_clear_b_l1: [p1++] = r0; .L_b_l1_done: call __init_clear_bss #endif #if L2_LENGTH > 0 r1.l = __sbss_l2; r1.h = __sbss_l2; r2.l = __ebss_l2; r2.h = __ebss_l2; r0 = 0 (z); r2 = r2 - r1; cc = r2 == 0; if cc jump .L_l2_done; r2 >>= 2; p1 = r1; p2 = r2; lsetup (.L_clear_l2, .L_clear_l2 ) lc0 = p2; .L_clear_l2: [p1++] = r0; .L_l2_done: call __init_clear_bss #endif /* Zero out the bss region * Note: this will fail if bss is 0 bytes ... */ r0 = 0 (z); r1.l = ___bss_start; r1.h = ___bss_start; r2.l = ___bss_stop; r2.h = ___bss_stop; r2 = r2 - r1; r2 >>= 2; p1 = r1; p2 = r2; lsetup (.L_clear_bss, .L_clear_bss) lc0 = p2; .L_clear_bss: [p1++] = r0; call __init_clear_bss /* In case there is a NULL pointer reference, * zero out region before stext Loading