home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / unixlib36d / src / sys / s / _alloca next >
Text File  |  1994-02-26  |  1KB  |  62 lines

  1. ;       /* _alloca.s (c) Copyright 1991 H.Rogers */
  2.  
  3.         GET     @.src.sys.s.asm_dec
  4.  
  5.         AREA    |C$$code|,CODE,READONLY
  6.  
  7.         IMPORT  malloc
  8.         IMPORT  free
  9.  
  10.         EXPORT  |__alloca|
  11.         EXPORT  alloca
  12.         NAME    |__alloca|
  13. alloca          ; just in case
  14. |__alloca|
  15.  
  16.         CMP     a1,#0
  17.         MOVEQS  pc,lr
  18.  
  19.         ADD     a1,a1,#8
  20.         STMFD   sp!,{lr}
  21.         BL      malloc
  22.         CMP     a1,#0
  23.         CMPNE   fp,#0
  24.         LDMEQFD sp!,{pc}^
  25.  
  26.         LDR     a2,[fp,#-4]
  27.         LDR     a3,[pc,#|__alloca_list_ptr|-.-8]
  28.         LDR     a4,[a3,#0]
  29.         STR     a4,[a1,#0]
  30.         STR     a2,[a1,#4]
  31.         STR     a1,[a3,#0]
  32.         AND     a2,a2,#&fc000003
  33.         ADR     a3,|__alloca_free|
  34.         BIC     a3,a3,#&fc000003
  35.         ORR     a2,a2,a3
  36.         STR     a2,[fp,#-4]
  37.         ADD     a1,a1,#8
  38.         LDMFD   sp!,{pc}^
  39.  
  40. |__alloca_free|
  41.         STMFD   sp!,{a1,a2,v1}
  42.         LDR     a3,[pc,#|__alloca_list_ptr|-.-8]
  43.         LDR     a1,[a3,#0]
  44.         LDR     a4,[a1,#0]
  45.         LDR     v1,[a1,#4]
  46.         STR     a4,[a3,#0]
  47.         BL      free
  48.         MOV     a3,v1
  49.         LDMFD   sp!,{a1,a2,v1}
  50.         MOVS    pc,a3
  51.  
  52. |__alloca_list_ptr|
  53.         DCD     |__alloca_list|
  54.  
  55.         AREA    |C$$data|
  56.  
  57.         EXPORT  |__alloca_list|
  58. |__alloca_list|
  59.         DCD     0
  60.  
  61.         END
  62.