/************************************************************* * File: lib/clrbss.s * Purpose: Part of C runtime library * Author: Phil Bunce (pjb@carmel.com) * Revision History: * 970304 Start of revision history * 980107 Added ifdef for GHS */ #include /* * Clear the .bss section as required by C language. */ .globl clrbss .ent clrbss clrbss: # clear the bss area #ifdef BSO_TASKING la t5,__lc_cp beq t5,zero,3f 4: lw t1,0(t5) # action beq t1,zero,3f lw t2,4(t5) # dest lw t3,8(t5) # src lw t4,12(t5) # len sll t0,t1,31-2 bgez t0,1f # test CP_REL bit la t0,__lc_zp addu t2,t0 # add _zp to dest 1: sll t0,t1,31-1 bgez t0,2f # test CP_BSS bit 1: beq t4,zero,2f sw zero,(t2) addu t2,4 subu t4,4 b 1b 2: # next section addu t5,16 # size of entry b 4b 3: #else #ifdef GHS la v0,__ghsbegin_sbss la v1,__ghsend_bss 1: sw zero,0x0(v0) sw zero,0x4(v0) sw zero,0x8(v0) sw zero,0xc(v0) addu v0,16 blt v0,v1,1b #else #ifdef EPI la v0,_fsbss #else la v0,_fbss #endif la v1,BSS_END 1: sw zero,0x0(v0) sw zero,0x4(v0) sw zero,0x8(v0) sw zero,0xc(v0) addu v0,16 blt v0,v1,1b #endif #endif j ra .end clrbss