.include "thumb2regs.s" .syntax unified .fpu vfp3 .thumb .include "armmacros.s" .data .p2align 3 freadstring_error: .ascii "Error in freadsubstring parameters." .byte 10,0 .byte 0,0,0 fwritestring_error: .ascii "Error in fwritesubstring parameters." .byte 10,0 .byte 0,0 .text .globl stdioF .globl stderrF .globl openF .globl closeF .globl reopenF .globl readFC .globl readFI .globl readFR .globl readFS .globl readFString .globl readLineF .globl writeFC .globl writeFI .globl writeFR .globl writeFS .globl writeFString .globl endF .globl errorF .globl positionF .globl seekF .globl shareF @ .globl flushF .globl openSF .globl readSFC .globl readSFI .globl readSFR .globl readSFS .globl readLineSF .globl endSF .globl positionSF .globl seekSF @ imports .globl open_file .globl open_stdio .globl open_stderr .globl re_open_file .globl close_file .globl file_read_char .globl file_read_int .globl file_read_real .globl file_read_characters .globl file_read_line .globl file_write_char .globl file_write_int .globl file_write_real .globl file_write_characters .globl file_end .globl file_error .globl file_position .globl file_seek .globl file_share .globl open_s_file .globl file_read_s_char .globl file_read_s_int .globl file_read_s_real .globl file_read_s_string .globl file_read_s_line .globl file_s_end .globl file_s_position .globl file_s_seek .globl collect_0 .globl collect_1 .globl __STRING__ @ .d 0 0 # jsr stdioF # .o 0 2 f stdioF: mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl open_stdio mov sp,BSTACK_0 mov BSTACK_1,BSTACK_4 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 0 @ jsr stderrF @ .o 0 2 f stderrF: mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl open_stderr mov sp,BSTACK_0 mov BSTACK_1,BSTACK_4 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 1 1 i @ jsr openF @ .o 0 3 b f openF: add BSTACK_4,ASTACK_0,#4 mov BSTACK_3,BSTACK_0 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl open_file mov sp,BSTACK_0 mov BSTACK_1,BSTACK_4 cmp BSTACK_4,#0 mov BSTACK_0,#-1 it mi movmi BSTACK_2,#0 it pl movpl BSTACK_2,#1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr closeF @ .o 0 1 b closeF: mov BSTACK_4,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl close_file mov sp,BSTACK_0 mov BSTACK_0,BSTACK_4 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 3 f i @ jsr reopenF @ .o 0 3 b f reopenF: mov BSTACK_4,BSTACK_2 mov BSTACK_3,BSTACK_0 mov ASTACK_0,BSTACK_2 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl re_open_file mov sp,BSTACK_0 neg BSTACK_2,BSTACK_4 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr readFC @ .o 0 4 b c f readFC: mov BSTACK_4,BSTACK_1 mov ASTACK_0,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_char mov sp,BSTACK_0 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 cmp BSTACK_4,#-1 beq readFC_eof mov BSTACK_2,BSTACK_4 mov BSTACK_3,#1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr readFC_eof: mov BSTACK_2,#0 mov BSTACK_1,#0 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr readFI @ .o 0 4 b i f readFI: sub sp,sp,#4 mov BSTACK_4,BSTACK_1 mov BSTACK_3,sp mov ASTACK_0,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_int mov sp,BSTACK_0 ldr BSTACK_2,[sp],#4 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 neg BSTACK_3,BSTACK_4 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr readFR @ .o 0 5 b r f readFR: mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 mov BSTACK_4,BSTACK_1 sub sp,sp,#8 mov ASTACK_0,BSTACK_1 mov BSTACK_3,sp bl file_read_real vldr.f64 d0,[sp] mov sp,BSTACK_0 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 neg BSTACK_2,BSTACK_4 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 3 f i @ jsr readFS @ .o 1 2 f readFS: add SCRATCH_REG,BSTACK_0,#8+3 subs BSTACK_3,HEAP_FREE,SCRATCH_REG,lsr #2 blo readFS_gc readFS_r_gc: laol SCRATCH_REG,__STRING__+2,__STRING___o_2,0 otoa SCRATCH_REG,__STRING___o_2,0 str SCRATCH_REG,[HEAP_PTR] add BSTACK_3,HEAP_PTR,#4 str BSTACK_0,[HEAP_PTR,#4] mov BSTACK_4,BSTACK_2 mov ASTACK_2,BSTACK_2 add BSTACK_2,HEAP_PTR,#8 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_characters mov sp,BSTACK_0 mov BSTACK_1,ASTACK_2 readFS_end: add BSTACK_2,BSTACK_4,#8+3 mov ASTACK_0,HEAP_PTR and BSTACK_2,BSTACK_2,#-4 add HEAP_PTR,HEAP_PTR,BSTACK_2 sub HEAP_FREE,HEAP_FREE,BSTACK_2,lsr #2 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr readFS_gc: mov HEAP_FREE,BSTACK_3 bl collect_0 add SCRATCH_REG,BSTACK_0,#8+3 add HEAP_FREE,HEAP_FREE,SCRATCH_REG,lsr #2 b readFS_r_gc @ .d 1 4 i i f @ jsr readFString @ .o 1 3 i f readFString: ldr BSTACK_4,[ASTACK_0,#4] cmp BSTACK_3,BSTACK_4 bhs readFString_error sub BSTACK_4,BSTACK_4,BSTACK_3 cmp BSTACK_2,BSTACK_4 bhi readFString_error str BSTACK_2,[sp,#-4]! add BSTACK_2,ASTACK_0,#8 mov BSTACK_4,BSTACK_1 mov ASTACK_2,BSTACK_1 add BSTACK_2,BSTACK_2,BSTACK_3 mov BSTACK_3,sp mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_characters mov sp,BSTACK_0 mov BSTACK_1,ASTACK_2 ldr BSTACK_2,[sp],#4 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr readFString_error: lao ASTACK_2,freadstring_error,0 otoa ASTACK_2,freadstring_error,0 b print_error @ .d 0 2 f @ jsr readLineF @ .o 1 2 f readLineF: subs BSTACK_2,HEAP_FREE,#32+2 blo readLineF_gc readLineF_r_gc: laol SCRATCH_REG,__STRING__+2,__STRING___o_2,1 otoa SCRATCH_REG,__STRING___o_2,1 add BSTACK_2,HEAP_PTR,#8 str SCRATCH_REG,[HEAP_PTR] lsl BSTACK_3,HEAP_FREE,#2 mov BSTACK_4,BSTACK_1 sub BSTACK_3,BSTACK_3,#8 mov ASTACK_1,BSTACK_3 mov ASTACK_2,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_line mov sp,BSTACK_0 mov BSTACK_1,ASTACK_2 str BSTACK_4,[HEAP_PTR,#4] cmp BSTACK_4,#0 bpl readFS_end mov ASTACK_0,HEAP_PTR readLineF_again: str ASTACK_1,[ASTACK_0,#4] add HEAP_PTR,#8 mov HEAP_FREE,#-(32+4) add HEAP_PTR,HEAP_PTR,ASTACK_1 sub HEAP_FREE,HEAP_FREE,ASTACK_1,lsr #2 bl collect_1 ldr BSTACK_0,[ASTACK_0,#4] add HEAP_FREE,HEAP_FREE,#32+4 add ASTACK_3,ASTACK_0,#8 add HEAP_FREE,HEAP_FREE,BSTACK_0,lsr #2 laol SCRATCH_REG,__STRING__+2,__STRING___o_2,2 otoa SCRATCH_REG,__STRING___o_2,2 mov ASTACK_0,HEAP_PTR add BSTACK_3,HEAP_PTR,HEAP_FREE,lsl #2 str SCRATCH_REG,[HEAP_PTR] add BSTACK_2,BSTACK_0,#3 lsr BSTACK_2,BSTACK_2,#2 str BSTACK_0,[HEAP_PTR,#4] add HEAP_PTR,HEAP_PTR,#8 b st_copy_string1 copy_st_lp1: ldr SCRATCH_REG,[ASTACK_3],#4 str SCRATCH_REG,[HEAP_PTR],#4 st_copy_string1: subs BSTACK_2,BSTACK_2,#1 bcs copy_st_lp1 mov BSTACK_2,HEAP_PTR sub BSTACK_3,BSTACK_3,HEAP_PTR mov BSTACK_4,BSTACK_1 mov ASTACK_2,BSTACK_1 add ASTACK_1,BSTACK_3,BSTACK_0 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_line mov sp,BSTACK_0 mov BSTACK_1,ASTACK_2 cmp BSTACK_4,#0 bmi readLineF_again ldr BSTACK_0,[ASTACK_0,#4] add BSTACK_0,BSTACK_0,BSTACK_4 str BSTACK_0,[ASTACK_0,#4] add SCRATCH_REG,BSTACK_4,#3 and SCRATCH_REG,SCRATCH_REG,#-4 add HEAP_PTR,HEAP_PTR,SCRATCH_REG add SCRATCH_REG,BSTACK_0,#8+3 sub HEAP_FREE,HEAP_FREE,SCRATCH_REG,lsr #2 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr readLineF_gc: mov HEAP_FREE,BSTACK_2 bl collect_0 add HEAP_FREE,HEAP_FREE,#32+2 b readLineF_r_gc @ .d 0 3 i f @ jsr writeFI @ .o 0 2 f writeFC: mov ASTACK_0,BSTACK_1 mov BSTACK_3,BSTACK_1 mov BSTACK_4,BSTACK_2 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_write_char mov sp,BSTACK_0 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 3 i f @ jsr writeFI @ .o 0 2 f writeFI: mov ASTACK_0,BSTACK_1 mov BSTACK_3,BSTACK_1 mov BSTACK_4,BSTACK_2 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_write_int mov sp,BSTACK_0 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 4 r f @ jsr writeFR @ .o 0 2 f writeFR: mov ASTACK_0,BSTACK_1 mov BSTACK_4,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_write_real mov sp,BSTACK_0 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 1 2 f @ jsr writeFS @ .o 0 2 f writeFS: mov BSTACK_2,BSTACK_1 ldr BSTACK_3,[ASTACK_0,#4] add BSTACK_4,ASTACK_0,#8 mov ASTACK_0,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_write_characters mov sp,BSTACK_0 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 1 4 i i f @ jsr writeFString @ .o 0 2 f writeFString: ldr BSTACK_4,[ASTACK_0,#4] cmp BSTACK_3,BSTACK_4 bhs writeFString_error sub BSTACK_4,BSTACK_4,BSTACK_3 cmp BSTACK_2,BSTACK_4 bhi writeFString_error mov BSTACK_3,BSTACK_2 mov BSTACK_2,BSTACK_1 add BSTACK_4,ASTACK_0,#8 mov ASTACK_0,BSTACK_1 add BSTACK_4,BSTACK_4,BSTACK_3 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_write_characters mov sp,BSTACK_0 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr writeFString_error: lao ASTACK_2,fwritestring_error,0 otoa ASTACK_2,fwritestring_error,0 b print_error @ .d 0 2 f @ jsr endF @ .o 0 3 b f endF: mov BSTACK_4,BSTACK_1 mov ASTACK_0,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_end mov sp,BSTACK_0 neg BSTACK_2,BSTACK_4 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr errorF @ .o 0 3 b f errorF: mov BSTACK_4,BSTACK_1 mov ASTACK_0,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_error mov sp,BSTACK_0 neg BSTACK_2,BSTACK_4 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr positionF @ .o 0 3 i f positionF: mov BSTACK_4,BSTACK_1 mov ASTACK_0,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_position mov sp,BSTACK_0 mov BSTACK_2,BSTACK_4 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 4 f i i @ jsr seekF @ .o 0 3 b f seekF: mov BSTACK_4,BSTACK_3 mov ASTACK_0,BSTACK_3 mov BSTACK_3,BSTACK_1 mov BSTACK_2,BSTACK_0 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_seek mov sp,BSTACK_0 neg BSTACK_2,BSTACK_4 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr shareF @ .o 0 2 f shareF: mov BSTACK_4,BSTACK_3 mov ASTACK_0,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_share mov sp,BSTACK_0 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#-1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 1 1 i @ jsr openSF @ .o 0 3 b f openSF: mov BSTACK_4,BSTACK_0 add BSTACK_3,ASTACK_0,#4 mov ASTACK_0,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl open_s_file mov sp,BSTACK_0 cmp BSTACK_4,#0 it mi movmi BSTACK_2,#0 it pl movpl BSTACK_2,#1 mov BSTACK_1,ASTACK_0 mov BSTACK_0,#0 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr readSFC @ .o 0 4 b c f readSFC: str BSTACK_0,[sp,#-4]! mov ASTACK_0,BSTACK_1 mov BSTACK_3,sp mov BSTACK_4,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_s_char mov sp,BSTACK_0 ldr BSTACK_0,[sp],#4 mov BSTACK_1,ASTACK_0 mov BSTACK_2,BSTACK_4 cmp BSTACK_4,#-1 beq readSFC_eof mov BSTACK_3,#1 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr readSFC_eof: mov BSTACK_2,#0 mov BSTACK_3,#0 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr readSFI @ .o 0 4 b i f readSFI: str BSTACK_0,[sp,#-4]! mov ASTACK_0,BSTACK_1 mov BSTACK_2,sp sub BSTACK_3,sp,#4 sub sp,sp,#4 mov BSTACK_4,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_s_int mov sp,BSTACK_0 neg BSTACK_3,BSTACK_4 ldr BSTACK_2,[sp],#4 mov BSTACK_1,ASTACK_0 ldr BSTACK_0,[sp],#4 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr readSFR @ .o 0 5 b r f readSFR: str BSTACK_0,[sp,#-4]! mov ASTACK_0,BSTACK_1 mov BSTACK_2,sp mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 mov BSTACK_4,BSTACK_1 sub BSTACK_3,sp,#8 sub sp,sp,#8 bl file_read_s_real vldr.f64 d0,[sp] mov sp,BSTACK_0 mov BSTACK_1,ASTACK_0 ldr BSTACK_0,[sp],#4 neg BSTACK_2,BSTACK_4 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 3 f i @ jsr readSFS @ .o 1 2 f readSFS: add SCRATCH_REG,BSTACK_0,#8+3 subs BSTACK_2,HEAP_FREE,SCRATCH_REG,lsr #2 blo readSFS_gc readSFS_r_gc: laol SCRATCH_REG,__STRING__+2,__STRING___o_2,3 otoa SCRATCH_REG,__STRING___o_2,3 str SCRATCH_REG,[HEAP_PTR] mov BSTACK_3,BSTACK_0 mov BSTACK_4,BSTACK_2 mov ASTACK_2,BSTACK_2 add BSTACK_2,HEAP_PTR,#4 str BSTACK_1,[sp,#-4]! mov BSTACK_1,sp mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_s_string mov sp,BSTACK_0 mov BSTACK_1,ASTACK_2 ldr BSTACK_0,[sp],#4 readSFS_end: add BSTACK_2,BSTACK_4,#8+3 mov ASTACK_0,HEAP_PTR and BSTACK_2,BSTACK_2,#-4 add HEAP_PTR,HEAP_PTR,BSTACK_2 sub HEAP_FREE,HEAP_FREE,BSTACK_2,lsr #2 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr readSFS_gc: mov HEAP_FREE,BSTACK_2 bl collect_0 add SCRATCH_REG,BSTACK_0,#8+3 add HEAP_FREE,HEAP_FREE,SCRATCH_REG,lsr #2 b readSFS_r_gc @ .d 0 2 f @ jsr readLineSF @ .o 1 2 f readLineSF: subs BSTACK_2,HEAP_FREE,#32+2 blo readLineSF_gc readLineSF_r_gc: laol SCRATCH_REG,__STRING__+2,__STRING___o_2,4 otoa SCRATCH_REG,__STRING___o_2,4 add BSTACK_2,HEAP_PTR,#8 str SCRATCH_REG,[HEAP_PTR] lsl BSTACK_3,HEAP_FREE,#2 mov BSTACK_4,BSTACK_1 sub BSTACK_3,BSTACK_3,#8 mov ASTACK_1,BSTACK_3 mov ASTACK_2,BSTACK_1 str BSTACK_0,[sp,#-4]! mov BSTACK_1,sp mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_s_line mov sp,BSTACK_0 mov BSTACK_1,ASTACK_2 ldr BSTACK_0,[sp],#4 str BSTACK_4,[HEAP_PTR,#4] cmp BSTACK_4,#0 bpl readSFS_end mov ASTACK_0,HEAP_PTR readLineSF_again: str ASTACK_1,[ASTACK_0,#4] add HEAP_PTR,#8 mov HEAP_FREE,#-(32+4) add HEAP_PTR,HEAP_PTR,ASTACK_1 sub HEAP_FREE,HEAP_FREE,ASTACK_1,lsr #2 bl collect_1 ldr BSTACK_2,[ASTACK_0,#4] add HEAP_FREE,HEAP_FREE,#32+4 add ASTACK_3,ASTACK_0,#8 add HEAP_FREE,HEAP_FREE,BSTACK_2,lsr #2 laol SCRATCH_REG,__STRING__+2,__STRING___o_2,5 otoa SCRATCH_REG,__STRING___o_2,5 add BSTACK_3,HEAP_PTR,HEAP_FREE,lsl #2 str SCRATCH_REG,[HEAP_PTR] add ASTACK_0,BSTACK_2,#3 lsr ASTACK_0,ASTACK_0,#2 str BSTACK_2,[HEAP_PTR,#4] add HEAP_PTR,HEAP_PTR,#8 b st_copy_string2 copy_st_lp2: ldr SCRATCH_REG,[ASTACK_3],#4 str SCRATCH_REG,[HEAP_PTR],#4 st_copy_string2: subs ASTACK_0,ASTACK_0,#1 bcs copy_st_lp2 sub BSTACK_3,BSTACK_3,HEAP_PTR mov BSTACK_4,BSTACK_1 mov ASTACK_2,BSTACK_1 add ASTACK_1,BSTACK_3,BSTACK_2 mov BSTACK_2,HEAP_PTR str BSTACK_0,[sp,#-4]! mov BSTACK_1,sp mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_read_s_line mov sp,BSTACK_0 mov BSTACK_1,ASTACK_2 ldr BSTACK_0,[sp],#4 ldr ASTACK_0,[sp],#4 cmp BSTACK_4,#0 bmi readLineSF_again ldr BSTACK_2,[ASTACK_0,#4] add BSTACK_2,BSTACK_2,BSTACK_4 str BSTACK_2,[ASTACK_0,#4] add SCRATCH_REG,BSTACK_4,#3 and SCRATCH_REG,SCRATCH_REG,#-4 add HEAP_PTR,HEAP_PTR,SCRATCH_REG add SCRATCH_REG,BSTACK_2,#8+3 sub HEAP_FREE,HEAP_FREE,SCRATCH_REG,lsr #2 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr readLineSF_gc: mov HEAP_FREE,BSTACK_2 bl collect_0 add HEAP_FREE,HEAP_FREE,#32+2 b readLineSF_r_gc @ .d 0 2 f @ jsr endSF @ .o 0 1 b endSF: mov BSTACK_3,BSTACK_0 mov BSTACK_4,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_s_end mov sp,BSTACK_0 neg BSTACK_0,BSTACK_4 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 2 f @ jsr positionSF @ .o 0 1 i positionSF: mov BSTACK_3,BSTACK_0 mov BSTACK_4,BSTACK_1 mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_s_position mov sp,BSTACK_0 mov BSTACK_0,BSTACK_4 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr @ .d 0 4 f i i @ jsr seekSF @ .o 0 3 b f seekSF: str BSTACK_0,[sp,#-4]! mov ASTACK_0,BSTACK_1 mov BSTACK_4,BSTACK_1 @ mov BSTACK_3,BSTACK_3 @ mov BSTACK_2,BSTACK_2 mov BSTACK_1,sp mov BSTACK_0,sp bic BSTACK_1,BSTACK_0,#4 mov sp,BSTACK_1 bl file_s_seek mov sp,BSTACK_0 neg BSTACK_2,BSTACK_4 ldr BSTACK_0,[sp],#4 mov BSTACK_1,ASTACK_0 ldr lr,[sp],#4 orr lr,lr,#1 mov pc,lr .ifdef PIC lto freadstring_error,0 ltol __STRING__+2,__STRING___o_2,0 ltol __STRING__+2,__STRING___o_2,1 ltol __STRING__+2,__STRING___o_2,2 lto fwritestring_error,0 ltol __STRING__+2,__STRING___o_2,3 ltol __STRING__+2,__STRING___o_2,4 ltol __STRING__+2,__STRING___o_2,5 .endif