diff options
Diffstat (limited to 'macho64/afileIO3.s')
-rw-r--r-- | macho64/afileIO3.s | 915 |
1 files changed, 915 insertions, 0 deletions
diff --git a/macho64/afileIO3.s b/macho64/afileIO3.s new file mode 100644 index 0000000..64a270e --- /dev/null +++ b/macho64/afileIO3.s @@ -0,0 +1,915 @@ + + .intel_syntax noprefix + + .macro att_jmp + .att_syntax + jmp $0 + .intel_syntax noprefix + .endmacro + + .macro att_call + .att_syntax + call $0 + .intel_syntax noprefix + .endmacro + + .macro att_ja + .att_syntax + ja $0 + .intel_syntax noprefix + .endmacro + + .macro att_jnc + .att_syntax + jnc $0 + .intel_syntax noprefix + .endmacro + + .macro att_jns + .att_syntax + jns $0 + .intel_syntax noprefix + .endmacro + + .data + .align 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 +.if 0 + .globl flushF +.endif + .globl openSF + .globl readSFC + .globl readSFI + .globl readSFR + .globl readSFS + .globl readLineSF + .globl endSF + .globl positionSF + .globl seekSF + + .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 +.if 0 + .globl flush_file_buffer +.endif + .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 print_error + + .globl __STRING__ + +stdioF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov r14,rdi + att_call _open_stdio + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov rbx,rax + mov rax,-1 + ret + +stderrF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov r14,rdi + att_call _open_stderr + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov rbx,rax + mov rax,-1 + ret + +openF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rax + mov r14,rdi + lea rdi,8[rcx] + att_call _open_file + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + xor r10,r10 + test rax,rax + setns r10b + mov rbx,rax + mov rax,-1 + ret + +closeF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov r14,rdi + mov rdi,rbx + att_call _close_file + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + ret + +reopenF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rax + mov rbx,r10 + mov r14,rdi + mov rdi,r10 + att_call _re_open_file + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov r10d,eax + mov rax,-1 + ret + +readFC: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov r14,rdi + mov rdi,rbx + att_call _file_read_char + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + 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,8 + and rsp,-16 + mov r13,rsi + lea rsi,[rsp] + mov r14,rdi + mov rdi,rbx + att_call _file_read_int + mov r10,[rsp] + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov r11,rax + mov rax,-1 + ret + +readFR: + mov rbp,rsp + sub rsp,8 + and rsp,-16 + mov r13,rsi + lea rsi,[rsp] + mov r14,rdi + mov rdi,rbx + att_call _file_read_real + + movlpd xmm0,[rsp] + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov r10,rax + mov rax,-1 + ret + +readFString: + mov rbp,8[rcx] + cmp r11,rbp + jae readFString_error + + sub rbp,r11 + cmp r10,rbp + att_ja readFString_error + + push rcx + + push r11 + + lea rdx,16[rcx+r11] + mov rbp,rsp + or rsp,-16 + mov r13,rsi + mov rsi,rbp + mov r14,rdi + mov rdi,rbx + att_call _file_read_characters + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + add rsp,8 + pop rcx + + mov r10,rax + mov rax,-1 + ret + +readFString_error: + lea rbp,freadstring_error[rip] + att_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 rbx,__STRING__+2[rip] + mov qword ptr [rdi],rbx + mov 8[rdi],rax + mov rbx,r10 + + lea rdx,16[rdi] + mov rbp,rsp + and rsp,-16 + mov r13,rsi + lea rsi,8[rdi] + mov r14,rdi + mov rdi,r10 + att_call _file_read_characters + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + +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 + att_call collect_0 + pop rbp + att_jmp readFS_r_gc + +readLineF: + cmp r15,32+2 + jb readLineF_gc + +readLineF_r_gc: + lea rdx,__STRING__+2[rip] + mov qword ptr [rdi],rdx + + lea rdx,16[rdi] + mov rbp,rsp + and rsp,-16 + mov r13,rsi + lea rsi,-16[r15*8] + mov r14,rdi + mov rdi,rbx + att_call _file_read_line + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov 8[rdi],rax + + test rax,rax + att_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 + + att_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[rip] + mov qword ptr [rdi],rbp + + 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 + att_jnc copy_st_lp1 + + mov rdx,rdi + mov rbp,rsp + and rsp,-16 + mov r13,rsi + lea rsi,[r15*8] + mov r14,rdi + mov rdi,rbx + att_call _file_read_line + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + 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 + att_call collect_0 + add r15,32+2 + att_jmp readLineF_r_gc + +readLineF_again: + mov rcx,8[r12] + lea rax,[r15*8] + add rcx,rax + mov 8[r12],rcx + att_jmp readLineF_lp + +writeFC: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rbx + mov r14,rdi + mov rdi,r10 + att_call _file_write_char + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov rax,-1 + ret + +writeFI: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rbx + mov r14,rdi + mov rdi,r10 + att_call _file_write_int + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov rax,-1 + ret + +writeFR: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov r14,rdi + mov rdi,rbx + att_call _file_write_real + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov rax,-1 + ret + +writeFS: + mov rdx,rbx + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,8[rcx] + mov r14,rdi + lea rdi,16[rcx] + att_call _file_write_characters + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov rax,-1 + ret + +writeFString: + mov rbp,8[rcx] + cmp r11,rbp + jae writeFString_error + + sub rbp,r11 + cmp r10,rbp + att_ja writeFString_error + + mov rdx,rbx + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,r10 + mov r14,rdi + lea rdi,16[rcx+r11] + att_call _file_write_characters + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov rax,-1 + + ret + +writeFString_error: + lea rbp,fwritestring_error[rip] + att_jmp print_error + +endF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov r14,rdi + mov rdi,rbx + att_call _file_end + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov r10,rax + mov rax,-1 + ret + +errorF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov r14,rdi + mov rdi,rbx + att_call _file_error + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov r10,rax + mov rax,-1 + ret + +positionF: + and rsp,-16 + mov r13,rsi + mov r14,rdi + mov rbp,rsp + mov rdi,rbx + att_call _file_position + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov r10,rax + mov rax,-1 + ret + +seekF: + mov rdx,rax + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rbx + mov rbx,r11 + mov r14,rdi + mov rdi,r11 + att_call _file_seek + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov r10,rax + mov rax,-1 + ret + +shareF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov r14,rdi + mov rdi,rbx + att_call _file_share + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov rax,-1 + ret +.if 0 +flushF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov r14,rdi + mov rdi,rbx + call flush_file_buffer + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov r10,rax + mov rax,-1 + ret +.endif + +openSF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rax + mov r14,rdi + lea rdi,8[rcx] + att_call _open_s_file + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + xor r10,r10 + test rax,rax + setns r10b + + mov rbx,rax + xor rax,rax + ret + +readSFC: + push rax + + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rbp + mov r14,rdi + mov rdi,rbx + att_call _file_read_s_char + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + 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 rdx,rsp + sub rsp,8 + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rbp + mov r14,rdi + mov rdi,rbx + att_call _file_read_s_int + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + pop r10 + mov r11,rax + pop rax + + ret + +readSFR: + push rax + mov rdx,rsp + sub rsp,8 + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rbp + mov r14,rdi + mov rdi,rbx + att_call _file_read_s_real + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + movlpd xmm0,[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 + + lea rcx,__STRING__+2[rip] + mov qword ptr [rdi],rcx + + push rbx + + mov rbx,r10 + + mov rcx,rsp + lea rdx,8[rdi] + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rax + mov r14,rdi + mov rdi,r10 + att_call _file_read_s_string + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + +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 + att_call collect_0 + pop rbp + att_jmp readSFS_r_gc + +readLineSF: + cmp r15,32+2 + ja readLineSF_gc + +readLineSF_r_gc: + push rax + + lea rcx,__STRING__+2[rip] + mov qword ptr [rdi],rcx + + mov rcx,rsp + lea rdx,16[rdi] + mov rbp,rsp + and rsp,-16 + mov r13,rsi + lea rsi,-16[r15*8] + mov r14,rdi + mov rdi,rbx + att_call _file_read_s_line + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov 8[rdi],rax + + test rax,rax + att_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 + + att_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[rip] + mov qword ptr [rdi],rbp + + 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 + att_jnc copy_st_lp2 + + mov r9,rsp + mov r8,rdi + lea rdx,[r15*8] + mov rcx,rbx + + mov rbp,rsp + or rsp,8 + sub rsp,40 + att_call _file_read_s_line + mov rsp,rbp + + 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 + att_call collect_0 + add r15,32+2 + att_jmp readLineSF_r_gc + +readLineSF_again: + mov rcx,8[r12] + lea rax,[r15*8] + add rcx,rax + mov 8[r12],rcx + att_jmp readLineSF_lp + +endSF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rax + mov r14,rdi + mov rdi,rbx + att_call _file_s_end + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + ret + +positionSF: + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,rax + mov r14,rdi + mov rdi,rbx + att_call _file_s_position + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + ret + +seekSF: + push rbx + mov rcx,rsp + mov rdx,rax + + mov rbx,r11 + + mov rbp,rsp + and rsp,-16 + mov r13,rsi + mov rsi,r10 + mov r14,rdi + mov rdi,r11 + att_call _file_s_seek + mov rsp,rbp + mov rsi,r13 + mov rdi,r14 + + mov r10,rax + pop rax + + ret |