/* This C language subroutine provides heap memory management for the runtime library. The Run Time Library for the C Language. Gordon A. Sterling (617) 461 - 3076 DSP Development Tools Engineering Created on 12/9/90 #include
int set_alloc_type(char *heap_name); */ #include "lib_glob.h" #include "sdl_glob.h" .SEGMENT/CODE Code_Space_Name; .FILE RTL_FILENAME; .GLOBAL _set_alloc_type; .GLOBAL ___lib_get_heap_info; .GLOBAL ___lib_get_heap_data; _set_alloc_type:R12=R12-R12, dm_ptr=R4; LCNTR=4, DO get_begin_name UNTIL LCE; R8=DM(dm_ptr, dm_1); R8=PASS R8; IF EQ MODIFY(dm_ptr, dm_M1); R12=LSHIFT R12 BY 8; get_begin_name: R12=R12 OR R8; R4=R12; LCNTR=4, DO get_end_name UNTIL LCE; R8=DM(dm_ptr, dm_1); R8=PASS R8; IF EQ MODIFY(dm_ptr, dm_M1); R12=LSHIFT R12 BY 8; get_end_name: R12=R12 OR R8; pm_ptr=___lib_heap_space; R1=-1; DO find_heap UNTIL EQ; R1=R1+1, PX=PM(pm_ptr, pm_1); R8=PX2; R8=PASS R8, dm_ptr=pm_ptr; IF EQ JUMP (PC, no_heap) (LA); COMP(R8,R4), R0=PX1; PX=PM(pm_ptr, pm_1); R8=PX2; R8=LSHIFT R8 BY -16; R8=R8 OR LSHIFT R0 BY 16; IF EQ COMP(R8,R12); IF EQ JUMP (PC, found_heap) (DB, LA); NOP;NOP; find_heap: MODIFY(pm_ptr, 3); no_heap: JUMP (PC, restore_state) (DB); R0=1; FETCH_RETURN found_heap: ramvar(which_heap)=R1; R0=R0-R0, FETCH_RETURN restore_state: RETURN (DB); RESTORE_STACK RESTORE_FRAME ___lib_get_heap_info: R3=ramvar(which_heap); ___lib_get_heap_data: pm_ptr=___lib_heap_space; R4=5; R3=R3*R4 (SSI), R5=R3; pm_mdf=R3; MODIFY(pm_ptr, pm_mdf); R4=PM(pm_ptr, pm_1); PX=PM(pm_ptr, pm_1); R4=PASS R4, R3=PX1; RTS (DB); R3=LSHIFT R3 BY 16; /* sign extend */ IF NE R4=PM(pm_1, pm_ptr); .ENDSEG; .SEGMENT/RAM_SPACE Ram_Space_Name; .VAR which_heap = 0; .ENDSEG;