summaryrefslogtreecommitdiff
path: root/thread/afileIO3.asm
diff options
context:
space:
mode:
Diffstat (limited to 'thread/afileIO3.asm')
-rw-r--r--thread/afileIO3.asm2042
1 files changed, 1021 insertions, 1021 deletions
diff --git a/thread/afileIO3.asm b/thread/afileIO3.asm
index 62efe53..e93dca0 100644
--- a/thread/afileIO3.asm
+++ b/thread/afileIO3.asm
@@ -1,1021 +1,1021 @@
-
-; nonvolatile registers: rbx rsi rdi rbp r12 r13 r14 r15
-; volatile registers: rax rcx rdx r8 r9 r10 r11
-
- THREAD equ 1
-
-_TEXT segment para 'CODE'
-_TEXT ends
-_DATA segment para 'DATA'
-_DATA ends
-
- _DATA segment
- align 8
-
-freadstring_error:
- db "Error in freadsubstring parameters."
- db 10,0
- db 0,0,0
-fwritestring_error:
- db "Error in fwritesubstring parameters."
- db 10,0
- db 0,0
-
- extrn clean_exception_handler:near
- public clean_unwind_info
-clean_unwind_info:
- DD 000000009H
- DD imagerel(clean_exception_handler)
-
-_DATA ends
-
- _TEXT segment
-
- public stdioF
- public stderrF
- public openF
- public closeF
- public reopenF
- public readFC
- public readFI
- public readFR
- public readFS
- public readFString
- public readLineF
- public writeFC
- public writeFI
- public writeFR
- public writeFS
- public writeFString
- public endF
- public errorF
- public positionF
- public seekF
- public shareF
- public flushF
- public openSF
- public readSFC
- public readSFI
- public readSFR
- public readSFS
- public readLineSF
- public endSF
- public positionSF
- public seekSF
-
-; imports
-
- extrn open_file:near
- extrn open_stdio:near
- extrn open_stderr:near
- extrn re_open_file:near
- extrn close_file:near
- extrn file_read_char:near
- extrn file_read_int:near
- extrn file_read_real:near
- extrn file_read_characters:near
- extrn file_read_line:near
- extrn file_write_char:near
- extrn file_write_int:near
- extrn file_write_real:near
- extrn file_write_characters:near
- extrn file_end:near
- extrn file_error:near
- extrn file_position:near
- extrn file_seek:near
- extrn file_share:near
- extrn flush_file_buffer:near
- extrn open_s_file:near
- extrn file_read_s_char:near
- extrn file_read_s_int:near
- extrn file_read_s_real:near
- extrn file_read_s_string:near
- extrn file_read_s_line:near
- extrn file_s_end:near
- extrn file_s_position:near
- extrn file_s_seek:near
-
- extrn collect_0:near
- extrn collect_1:near
-
- extrn print_error:near
-
- extrn __STRING__:near
-
-stdioF:
- mov rbp,rsp
- and rsp,-16
- if THREAD
- mov r14,r9
- endif
- sub rsp,32
- call open_stdio
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov rbx,rax
- mov rax,-1
- ret
-
-stderrF:
- mov rbp,rsp
- and rsp,-16
- if THREAD
- mov r14,r9
- endif
- sub rsp,32
- call open_stderr
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov rbx,rax
- mov rax,-1
- ret
-
-openF:
- mov rbp,rsp
- and rsp,-16
-
- mov rdx,rax
- add rcx,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,32
- call open_file
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- xor r10,r10
- test rax,rax
- setns r10b
- mov rbx,rax
- mov rax,-1
- ret
-
-closeF: mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call close_file
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- ret
-
-reopenF:
- mov rdx,rax
- mov rcx,r10
- mov rbx,r10
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call re_open_file
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov r10d,eax
- mov rax,-1
- ret
-
-readFC:
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_read_char
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- cmp eax,-1
- je readFC_eof
-
- mov r10,rax
- mov rax,-1
- mov r11,1
- ret
-
-readFC_eof:
- xor r10,r10
- mov rax,-1
- xor r11,r11
- ret
-
-readFI:
- mov rbp,rsp
- sub rsp,40+8
- if THREAD
- mov r14,r9
- endif
- and rsp,-16
-
- lea rdx,32[rsp]
- mov rcx,rbx
- call file_read_int
-
- mov r10,32[rsp]
-
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov r11,rax
- mov rax,-1
- ret
-
-readFR:
- mov rbp,rsp
- sub rsp,40+8
- if THREAD
- mov r14,r9
- endif
- and rsp,-16
-
- lea rdx,32[rsp]
- mov rcx,rbx
- call file_read_real
-
- movlpd xmm0,qword ptr 32[rsp]
-
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov r10,rax
- mov rax,-1
- ret
-
-readFString:
- mov rbp,8[rcx]
- cmp r11,rbp
- jae readFString_error
-
- sub rbp,r11
- cmp r10,rbp
- ja readFString_error
-
- push rcx
-
- push r11
-
- lea r8,16[rcx+r11]
- mov rdx,rsp
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_read_characters
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- add rsp,8
- pop rcx
-
- mov r10,rax
- mov rax,-1
- ret
-
-readFString_error:
- mov rbp,offset freadstring_error
- jmp print_error
-
-readFS: lea rbp,16+7[rax]
- shr rbp,3
- sub r15,rbp
- jb readFS_gc
-readFS_r_gc:
- add r15,rbp
-
- lea r8,__STRING__+2
- mov qword ptr [rdi],r8
-; mov qword ptr [rdi],offset __STRING__+2
-
- lea r8,16[rdi]
- mov 8[rdi],rax
- lea rdx,8[rdi]
- mov rcx,r10
-
- mov rbx,r10
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_read_characters
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
-
-readFS_end:
- add rax,16+7
- mov rcx,rdi
- shr rax,3
- sub r15,rax
- lea rdi,[rdi+rax*8]
- mov rax,-1
- ret
-
-readFS_gc: push rbp
- call collect_0
- pop rbp
- jmp readFS_r_gc
-
-readLineF:
- cmp r15,32+2
- jb readLineF_gc
-
-readLineF_r_gc:
- lea r8,__STRING__+2
- mov qword ptr [rdi],r8
-; mov qword ptr [rdi],offset __STRING__+2
-
- lea r8,16[rdi]
- lea rdx,-16[r15*8]
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_read_line
- mov rsp,rbp
-
- mov 8[rdi],rax
- if THREAD
- mov r9,r14
- endif
- test rax,rax
- jns readFS_end
-
- lea rax,-16[r15*8]
- mov r12,rdi
- mov 8[rdi],rax
- add rdi,16
-
-readLineF_lp:
- add rdi,rax
-
- mov r13,8[r12]
- mov rcx,r12
- shr r13,3
- xor r15,r15
- add r13,2+32
- sub r15,r13
-
- call collect_1
-
- add r15,r13
- mov rax,8[rcx]
- lea rdx,16[rcx]
- lea rcx,7[rax]
- shr rcx,3
- sub r15,2
- sub r15,rcx
-
- mov r12,rdi
-
- lea rbp,__STRING__+2
- mov qword ptr [rdi],rbp
-; mov qword ptr [rdi],offset __STRING__+2
-
- mov 8[rdi],rax
- add rdi,16
- jmp st_copy_string1
-
-copy_st_lp1:
- mov rbp,[rdx]
- add rdx,8
- mov [rdi],rbp
- add rdi,8
-st_copy_string1:
- sub rcx,1
- jnc copy_st_lp1
-
- mov r8,rdi
- lea rdx,[r15*8]
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_read_line
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- test rax,rax
- js readLineF_again
-
- add 8[r12],rax
- add rax,7
-
- mov rcx,r12
-
- shr rax,3
- sub r15,rax
- lea rdi,[rdi+rax*8]
-
- mov rax,-1
- ret
-
-readLineF_gc:
- sub r15,32+2
- call collect_0
- add r15,32+2
- jmp readLineF_r_gc
-
-readLineF_again:
- mov rcx,8[r12]
- lea rax,[r15*8]
- add rcx,rax
- mov 8[r12],rcx
- jmp readLineF_lp
-
-writeFC:
- mov rcx,r10
- mov rdx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_write_char
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov rax,-1
- ret
-
-writeFI:
- mov rcx,r10
- mov rdx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_write_int
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov rax,-1
- ret
-
-writeFR:
- mov rdx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_write_real
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov rax,-1
- ret
-
-writeFS:
- mov r8,rbx
- mov rdx,8[rcx]
- add rcx,16
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_write_characters
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov rax,-1
- ret
-
-writeFString:
- mov rbp,8[rcx]
- cmp r11,rbp
- jae writeFString_error
-
- sub rbp,r11
- cmp r10,rbp
- ja writeFString_error
-
- mov r8,rbx
- mov rdx,r10
- lea rcx,16[rcx+r11]
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_write_characters
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov rax,-1
-
- ret
-
-writeFString_error:
- mov rbp,offset fwritestring_error
- jmp print_error
-
-endF:
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_end
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov r10,rax
- mov rax,-1
- ret
-
-errorF:
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_error
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov r10,rax
- mov rax,-1
- ret
-
-positionF:
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_position
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov r10,rax
- mov rax,-1
- ret
-
-seekF:
- mov r8,rax
- mov rdx,rbx
- mov rcx,r11
-
- mov rbx,r11
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_seek
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov r10,rax
- mov rax,-1
- ret
-
-shareF:
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_share
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov rax,-1
- ret
-
-flushF:
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call flush_file_buffer
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov r10,rax
- mov rax,-1
- ret
-
-openSF: mov rdx,rax
- add rcx,8
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call open_s_file
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- xor r10,r10
- test rax,rax
- setns r10b
-
- mov rbx,rax
- xor rax,rax
- ret
-
-readSFC:
- push rax
-
- mov rdx,rsp
- mov rax,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_read_s_char
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- cmp rax,-1
- je readSFC_eof
-
- pop rax
- mov r10,rax
- mov r11,1
- ret
-
-readSFC_eof:
- pop rax
- xor r10,r10
- xor r11,r11
- ret
-
-readSFI:
- push rax
- mov r8,rsp
- sub rsp,8
- mov rdx,rsp
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_read_s_int
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- pop r10
- mov r11,rax
- pop rax
-
- ret
-
-readSFR:
- push rax
- mov r8,rsp
- sub rsp,8
- mov rdx,rsp
- mov rcx,rbx
-
- mov rbp,rsp
- sub rsp,40+8
- if THREAD
- mov r14,r9
- endif
- and rsp,-16
- call file_read_s_real
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- movlpd xmm0,qword ptr [rsp]
- mov r10,rax
- add rsp,8
- pop rax
-
- ret
-
-readSFS:
- lea rbp,16+7[rax]
- shr rbp,3
- sub r15,rbp
- jb readSFS_gc
-readSFS_r_gc:
- add r15,rbp
-
- if THREAD
- lea rbp,__STRING__+2
- mov qword ptr [rdi],rbp
- else
- lea r9,__STRING__+2
- mov qword ptr [rdi],r9
- endif
-; mov qword ptr [rdi],offset __STRING__+2
-
- push rbx
-
- if THREAD
- mov r14,r9
- endif
- mov r9,rsp
- lea r8,8[rdi]
- mov rdx,rax
- mov rcx,r10
-
- mov rbx,r10
-
- mov rbp,rsp
- or rsp,8
- sub rsp,40
- call file_read_s_string
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
-
-readSFS_end:
- add rax,16+7
- mov rcx,rdi
- shr rax,3
- sub r15,rax
- lea rdi,[rdi+rax*8]
- pop rax
- ret
-
-readSFS_gc: push rbp
- call collect_0
- pop rbp
- jmp readSFS_r_gc
-
-readLineSF:
- cmp r15,32+2
- ja readLineSF_gc
-
-readLineSF_r_gc:
- push rax
-
- if THREAD
- lea rbp,__STRING__+2
- mov qword ptr [rdi],rbp
- else
- lea r9,__STRING__+2
- mov qword ptr [rdi],r9
- endif
-; mov qword ptr [rdi],offset __STRING__+2
-
- if THREAD
- mov r14,r9
- endif
- mov r9,rsp
- lea r8,16[rdi]
- lea rdx,-16[r15*8]
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- sub rsp,40
- call file_read_s_line
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov 8[rdi],rax
-
- test rax,rax
- jns readSFS_end
-
- lea rax,-16[r15*8]
- mov r12,rdi
- mov 8[rdi],rax
- add rdi,16
-
-readLineSF_lp:
- add rdi,rax
-
- mov r13,8[r12]
- mov rcx,r12
- shr r13,3
- xor r15,r15
- add r13,2+32
- sub r15,r13
-
- call collect_1
-
- add r15,r13
- mov rax,8[rcx]
- lea rdx,16[rcx]
- lea rcx,7[rax]
- shr rcx,3
- sub r15,2
- sub r15,rcx
-
- mov r12,rdi
-
- lea rbp,__STRING__+2
- mov qword ptr [rdi],rbp
-; mov qword ptr [rdi],offset __STRING__+2
-
- mov 8[rdi],rax
- add rdi,16
- jmp st_copy_string2
-
-copy_st_lp2:
- mov rbp,[rdx]
- add rdx,8
- mov [rdi],rbp
- add rdi,8
-st_copy_string2:
- sub rcx,1
- jnc copy_st_lp2
-
- if THREAD
- mov r14,r9
- endif
- mov r9,rsp
- mov r8,rdi
- lea rdx,[r15*8]
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- sub rsp,40
- call file_read_s_line
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- test rax,rax
- js readLineSF_again
-
- add 8[r12],rax
- add rax,7
-
- mov rcx,r12
-
- shr rax,3
- sub r15,rax
- lea rdi,[rdi+rax*8]
-
- pop rax
- ret
-
-readLineSF_gc:
- sub r15,32+2
- call collect_0
- add r15,32+2
- jmp readLineSF_r_gc
-
-readLineSF_again:
- mov rcx,8[r12]
- lea rax,[r15*8]
- add rcx,rax
- mov 8[r12],rcx
- jmp readLineSF_lp
-
-endSF:
- mov rdx,rax
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_s_end
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- ret
-
-positionSF:
- mov rdx,rax
- mov rcx,rbx
-
- mov rbp,rsp
- or rsp,8
- if THREAD
- mov r14,r9
- endif
- sub rsp,40
- call file_s_position
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- ret
-
-seekSF:
- push rbx
- if THREAD
- mov r14,r9
- endif
- mov r9,rsp
- mov r8,rax
- mov rdx,r10
- mov rcx,r11
-
- mov rbx,r11
-
- mov rbp,rsp
- or rsp,8
- sub rsp,40
- call file_s_seek
- mov rsp,rbp
- if THREAD
- mov r9,r14
- endif
- mov r10,rax
- pop rax
-
- ret
-
-_TEXT ends
-
-
- end
+
+; nonvolatile registers: rbx rsi rdi rbp r12 r13 r14 r15
+; volatile registers: rax rcx rdx r8 r9 r10 r11
+
+ THREAD equ 1
+
+_TEXT segment para 'CODE'
+_TEXT ends
+_DATA segment para 'DATA'
+_DATA ends
+
+ _DATA segment
+ align 8
+
+freadstring_error:
+ db "Error in freadsubstring parameters."
+ db 10,0
+ db 0,0,0
+fwritestring_error:
+ db "Error in fwritesubstring parameters."
+ db 10,0
+ db 0,0
+
+ extrn clean_exception_handler:near
+ public clean_unwind_info
+clean_unwind_info:
+ DD 000000009H
+ DD imagerel(clean_exception_handler)
+
+_DATA ends
+
+ _TEXT segment
+
+ public stdioF
+ public stderrF
+ public openF
+ public closeF
+ public reopenF
+ public readFC
+ public readFI
+ public readFR
+ public readFS
+ public readFString
+ public readLineF
+ public writeFC
+ public writeFI
+ public writeFR
+ public writeFS
+ public writeFString
+ public endF
+ public errorF
+ public positionF
+ public seekF
+ public shareF
+ public flushF
+ public openSF
+ public readSFC
+ public readSFI
+ public readSFR
+ public readSFS
+ public readLineSF
+ public endSF
+ public positionSF
+ public seekSF
+
+; imports
+
+ extrn open_file:near
+ extrn open_stdio:near
+ extrn open_stderr:near
+ extrn re_open_file:near
+ extrn close_file:near
+ extrn file_read_char:near
+ extrn file_read_int:near
+ extrn file_read_real:near
+ extrn file_read_characters:near
+ extrn file_read_line:near
+ extrn file_write_char:near
+ extrn file_write_int:near
+ extrn file_write_real:near
+ extrn file_write_characters:near
+ extrn file_end:near
+ extrn file_error:near
+ extrn file_position:near
+ extrn file_seek:near
+ extrn file_share:near
+ extrn flush_file_buffer:near
+ extrn open_s_file:near
+ extrn file_read_s_char:near
+ extrn file_read_s_int:near
+ extrn file_read_s_real:near
+ extrn file_read_s_string:near
+ extrn file_read_s_line:near
+ extrn file_s_end:near
+ extrn file_s_position:near
+ extrn file_s_seek:near
+
+ extrn collect_0:near
+ extrn collect_1:near
+
+ extrn print_error:near
+
+ extrn __STRING__:near
+
+stdioF:
+ mov rbp,rsp
+ and rsp,-16
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,32
+ call open_stdio
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov rbx,rax
+ mov rax,-1
+ ret
+
+stderrF:
+ mov rbp,rsp
+ and rsp,-16
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,32
+ call open_stderr
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov rbx,rax
+ mov rax,-1
+ ret
+
+openF:
+ mov rbp,rsp
+ and rsp,-16
+
+ mov rdx,rax
+ add rcx,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,32
+ call open_file
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ xor r10,r10
+ test rax,rax
+ setns r10b
+ mov rbx,rax
+ mov rax,-1
+ ret
+
+closeF: mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call close_file
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ ret
+
+reopenF:
+ mov rdx,rax
+ mov rcx,r10
+ mov rbx,r10
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call re_open_file
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov r10d,eax
+ mov rax,-1
+ ret
+
+readFC:
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_read_char
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ cmp eax,-1
+ je readFC_eof
+
+ mov r10,rax
+ mov rax,-1
+ mov r11,1
+ ret
+
+readFC_eof:
+ xor r10,r10
+ mov rax,-1
+ xor r11,r11
+ ret
+
+readFI:
+ mov rbp,rsp
+ sub rsp,40+8
+ if THREAD
+ mov r14,r9
+ endif
+ and rsp,-16
+
+ lea rdx,32[rsp]
+ mov rcx,rbx
+ call file_read_int
+
+ mov r10,32[rsp]
+
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov r11,rax
+ mov rax,-1
+ ret
+
+readFR:
+ mov rbp,rsp
+ sub rsp,40+8
+ if THREAD
+ mov r14,r9
+ endif
+ and rsp,-16
+
+ lea rdx,32[rsp]
+ mov rcx,rbx
+ call file_read_real
+
+ movlpd xmm0,qword ptr 32[rsp]
+
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov r10,rax
+ mov rax,-1
+ ret
+
+readFString:
+ mov rbp,8[rcx]
+ cmp r11,rbp
+ jae readFString_error
+
+ sub rbp,r11
+ cmp r10,rbp
+ ja readFString_error
+
+ push rcx
+
+ push r11
+
+ lea r8,16[rcx+r11]
+ mov rdx,rsp
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_read_characters
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ add rsp,8
+ pop rcx
+
+ mov r10,rax
+ mov rax,-1
+ ret
+
+readFString_error:
+ mov rbp,offset freadstring_error
+ jmp print_error
+
+readFS: lea rbp,16+7[rax]
+ shr rbp,3
+ sub r15,rbp
+ jb readFS_gc
+readFS_r_gc:
+ add r15,rbp
+
+ lea r8,__STRING__+2
+ mov qword ptr [rdi],r8
+; mov qword ptr [rdi],offset __STRING__+2
+
+ lea r8,16[rdi]
+ mov 8[rdi],rax
+ lea rdx,8[rdi]
+ mov rcx,r10
+
+ mov rbx,r10
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_read_characters
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+
+readFS_end:
+ add rax,16+7
+ mov rcx,rdi
+ shr rax,3
+ sub r15,rax
+ lea rdi,[rdi+rax*8]
+ mov rax,-1
+ ret
+
+readFS_gc: push rbp
+ call collect_0
+ pop rbp
+ jmp readFS_r_gc
+
+readLineF:
+ cmp r15,32+2
+ jb readLineF_gc
+
+readLineF_r_gc:
+ lea r8,__STRING__+2
+ mov qword ptr [rdi],r8
+; mov qword ptr [rdi],offset __STRING__+2
+
+ lea r8,16[rdi]
+ lea rdx,-16[r15*8]
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_read_line
+ mov rsp,rbp
+
+ mov 8[rdi],rax
+ if THREAD
+ mov r9,r14
+ endif
+ test rax,rax
+ jns readFS_end
+
+ lea rax,-16[r15*8]
+ mov r12,rdi
+ mov 8[rdi],rax
+ add rdi,16
+
+readLineF_lp:
+ add rdi,rax
+
+ mov r13,8[r12]
+ mov rcx,r12
+ shr r13,3
+ xor r15,r15
+ add r13,2+32
+ sub r15,r13
+
+ call collect_1
+
+ add r15,r13
+ mov rax,8[rcx]
+ lea rdx,16[rcx]
+ lea rcx,7[rax]
+ shr rcx,3
+ sub r15,2
+ sub r15,rcx
+
+ mov r12,rdi
+
+ lea rbp,__STRING__+2
+ mov qword ptr [rdi],rbp
+; mov qword ptr [rdi],offset __STRING__+2
+
+ mov 8[rdi],rax
+ add rdi,16
+ jmp st_copy_string1
+
+copy_st_lp1:
+ mov rbp,[rdx]
+ add rdx,8
+ mov [rdi],rbp
+ add rdi,8
+st_copy_string1:
+ sub rcx,1
+ jnc copy_st_lp1
+
+ mov r8,rdi
+ lea rdx,[r15*8]
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_read_line
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ test rax,rax
+ js readLineF_again
+
+ add 8[r12],rax
+ add rax,7
+
+ mov rcx,r12
+
+ shr rax,3
+ sub r15,rax
+ lea rdi,[rdi+rax*8]
+
+ mov rax,-1
+ ret
+
+readLineF_gc:
+ sub r15,32+2
+ call collect_0
+ add r15,32+2
+ jmp readLineF_r_gc
+
+readLineF_again:
+ mov rcx,8[r12]
+ lea rax,[r15*8]
+ add rcx,rax
+ mov 8[r12],rcx
+ jmp readLineF_lp
+
+writeFC:
+ mov rcx,r10
+ mov rdx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_write_char
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov rax,-1
+ ret
+
+writeFI:
+ mov rcx,r10
+ mov rdx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_write_int
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov rax,-1
+ ret
+
+writeFR:
+ mov rdx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_write_real
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov rax,-1
+ ret
+
+writeFS:
+ mov r8,rbx
+ mov rdx,8[rcx]
+ add rcx,16
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_write_characters
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov rax,-1
+ ret
+
+writeFString:
+ mov rbp,8[rcx]
+ cmp r11,rbp
+ jae writeFString_error
+
+ sub rbp,r11
+ cmp r10,rbp
+ ja writeFString_error
+
+ mov r8,rbx
+ mov rdx,r10
+ lea rcx,16[rcx+r11]
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_write_characters
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov rax,-1
+
+ ret
+
+writeFString_error:
+ mov rbp,offset fwritestring_error
+ jmp print_error
+
+endF:
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_end
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov r10,rax
+ mov rax,-1
+ ret
+
+errorF:
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_error
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov r10,rax
+ mov rax,-1
+ ret
+
+positionF:
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_position
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov r10,rax
+ mov rax,-1
+ ret
+
+seekF:
+ mov r8,rax
+ mov rdx,rbx
+ mov rcx,r11
+
+ mov rbx,r11
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_seek
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov r10,rax
+ mov rax,-1
+ ret
+
+shareF:
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_share
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov rax,-1
+ ret
+
+flushF:
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call flush_file_buffer
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov r10,rax
+ mov rax,-1
+ ret
+
+openSF: mov rdx,rax
+ add rcx,8
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call open_s_file
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ xor r10,r10
+ test rax,rax
+ setns r10b
+
+ mov rbx,rax
+ xor rax,rax
+ ret
+
+readSFC:
+ push rax
+
+ mov rdx,rsp
+ mov rax,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_read_s_char
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ cmp rax,-1
+ je readSFC_eof
+
+ pop rax
+ mov r10,rax
+ mov r11,1
+ ret
+
+readSFC_eof:
+ pop rax
+ xor r10,r10
+ xor r11,r11
+ ret
+
+readSFI:
+ push rax
+ mov r8,rsp
+ sub rsp,8
+ mov rdx,rsp
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_read_s_int
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ pop r10
+ mov r11,rax
+ pop rax
+
+ ret
+
+readSFR:
+ push rax
+ mov r8,rsp
+ sub rsp,8
+ mov rdx,rsp
+ mov rcx,rbx
+
+ mov rbp,rsp
+ sub rsp,40+8
+ if THREAD
+ mov r14,r9
+ endif
+ and rsp,-16
+ call file_read_s_real
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ movlpd xmm0,qword ptr [rsp]
+ mov r10,rax
+ add rsp,8
+ pop rax
+
+ ret
+
+readSFS:
+ lea rbp,16+7[rax]
+ shr rbp,3
+ sub r15,rbp
+ jb readSFS_gc
+readSFS_r_gc:
+ add r15,rbp
+
+ if THREAD
+ lea rbp,__STRING__+2
+ mov qword ptr [rdi],rbp
+ else
+ lea r9,__STRING__+2
+ mov qword ptr [rdi],r9
+ endif
+; mov qword ptr [rdi],offset __STRING__+2
+
+ push rbx
+
+ if THREAD
+ mov r14,r9
+ endif
+ mov r9,rsp
+ lea r8,8[rdi]
+ mov rdx,rax
+ mov rcx,r10
+
+ mov rbx,r10
+
+ mov rbp,rsp
+ or rsp,8
+ sub rsp,40
+ call file_read_s_string
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+
+readSFS_end:
+ add rax,16+7
+ mov rcx,rdi
+ shr rax,3
+ sub r15,rax
+ lea rdi,[rdi+rax*8]
+ pop rax
+ ret
+
+readSFS_gc: push rbp
+ call collect_0
+ pop rbp
+ jmp readSFS_r_gc
+
+readLineSF:
+ cmp r15,32+2
+ ja readLineSF_gc
+
+readLineSF_r_gc:
+ push rax
+
+ if THREAD
+ lea rbp,__STRING__+2
+ mov qword ptr [rdi],rbp
+ else
+ lea r9,__STRING__+2
+ mov qword ptr [rdi],r9
+ endif
+; mov qword ptr [rdi],offset __STRING__+2
+
+ if THREAD
+ mov r14,r9
+ endif
+ mov r9,rsp
+ lea r8,16[rdi]
+ lea rdx,-16[r15*8]
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ sub rsp,40
+ call file_read_s_line
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov 8[rdi],rax
+
+ test rax,rax
+ jns readSFS_end
+
+ lea rax,-16[r15*8]
+ mov r12,rdi
+ mov 8[rdi],rax
+ add rdi,16
+
+readLineSF_lp:
+ add rdi,rax
+
+ mov r13,8[r12]
+ mov rcx,r12
+ shr r13,3
+ xor r15,r15
+ add r13,2+32
+ sub r15,r13
+
+ call collect_1
+
+ add r15,r13
+ mov rax,8[rcx]
+ lea rdx,16[rcx]
+ lea rcx,7[rax]
+ shr rcx,3
+ sub r15,2
+ sub r15,rcx
+
+ mov r12,rdi
+
+ lea rbp,__STRING__+2
+ mov qword ptr [rdi],rbp
+; mov qword ptr [rdi],offset __STRING__+2
+
+ mov 8[rdi],rax
+ add rdi,16
+ jmp st_copy_string2
+
+copy_st_lp2:
+ mov rbp,[rdx]
+ add rdx,8
+ mov [rdi],rbp
+ add rdi,8
+st_copy_string2:
+ sub rcx,1
+ jnc copy_st_lp2
+
+ if THREAD
+ mov r14,r9
+ endif
+ mov r9,rsp
+ mov r8,rdi
+ lea rdx,[r15*8]
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ sub rsp,40
+ call file_read_s_line
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ test rax,rax
+ js readLineSF_again
+
+ add 8[r12],rax
+ add rax,7
+
+ mov rcx,r12
+
+ shr rax,3
+ sub r15,rax
+ lea rdi,[rdi+rax*8]
+
+ pop rax
+ ret
+
+readLineSF_gc:
+ sub r15,32+2
+ call collect_0
+ add r15,32+2
+ jmp readLineSF_r_gc
+
+readLineSF_again:
+ mov rcx,8[r12]
+ lea rax,[r15*8]
+ add rcx,rax
+ mov 8[r12],rcx
+ jmp readLineSF_lp
+
+endSF:
+ mov rdx,rax
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_s_end
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ ret
+
+positionSF:
+ mov rdx,rax
+ mov rcx,rbx
+
+ mov rbp,rsp
+ or rsp,8
+ if THREAD
+ mov r14,r9
+ endif
+ sub rsp,40
+ call file_s_position
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ ret
+
+seekSF:
+ push rbx
+ if THREAD
+ mov r14,r9
+ endif
+ mov r9,rsp
+ mov r8,rax
+ mov rdx,r10
+ mov rcx,r11
+
+ mov rbx,r11
+
+ mov rbp,rsp
+ or rsp,8
+ sub rsp,40
+ call file_s_seek
+ mov rsp,rbp
+ if THREAD
+ mov r9,r14
+ endif
+ mov r10,rax
+ pop rax
+
+ ret
+
+_TEXT ends
+
+
+ end