diff options
author | John van Groningen | 2003-10-03 15:35:50 +0000 |
---|---|---|
committer | John van Groningen | 2003-10-03 15:35:50 +0000 |
commit | ce658fe1be31a9b2e7030a7d82314820d75b8409 (patch) | |
tree | 005148aca0fc52d069b0ac0ea70c67dd33a4d189 /sfileIO2.s | |
parent | add makefiles for solaris (diff) |
add assembly files for solaris
Diffstat (limited to 'sfileIO2.s')
-rw-r--r-- | sfileIO2.s | 698 |
1 files changed, 698 insertions, 0 deletions
diff --git a/sfileIO2.s b/sfileIO2.s new file mode 100644 index 0000000..2e3b86f --- /dev/null +++ b/sfileIO2.s @@ -0,0 +1,698 @@ + +! File: cgsfileIO2.s +! Author: John van Groningen +! At: University of Nijmegen +! Machine: Sun 4 + +#define SP_G5 + +#define d0 %l0 +#define d1 %l1 +#define d2 %l2 +#define d3 %l3 +#define d4 %l4 +#define d5 %l5 +#define d6 %l6 +#define d7 %l7 +#define a0 %i0 +#define a1 %i1 +#define a2 %i2 +#define a3 %i3 +#define a4 %i4 +#define a5 %i5 +#define a6 %g6 +#ifdef SP_G5 +# define sp %g5 +#else +# define sp %g7 +#endif + + .data + + .align 8 + +tmp_real: .double 0 + + .text + + .global stderrF + .global stdioF + .global openF + .global closeF + .global reopenF + .global readFC + .global readFI + .global readFR + .global readFS + .global readLineF + .global writeFC + .global writeFI + .global writeFR + .global writeFS + .global endF + .global errorF + .global positionF + .global seekF + .global shareF + + .global openSF + .global readSFC + .global readSFI + .global readSFR + .global readSFS + .global readLineSF + .global endSF + .global positionSF + .global seekSF + +! imports + + .global @IO_error + .global @open_stdio + .global @open_stderr + .global @open_file + .global @re_open_file + .global @close_file + .global @file_read_char + .global @file_read_int + .global @file_read_real + .global @file_read_string + .global @file_read_line + .global @file_write_char + .global @file_write_int + .global @file_write_real + .global @file_write_string + .global @file_end + .global @file_error + .global @file_position + .global @file_seek + .global @file_share + + .global @open_s_file + .global @file_read_s_char + .global @file_read_s_int + .global @file_read_s_real + .global @file_read_s_string + .global @file_read_s_line + .global @file_s_end + .global @file_s_position + .global @file_s_seek + + .global collect_0 + .global collect_1 + .global out_of_memory_4 + + .global __STRING__ + +stdioF: call @open_stdio + nop + + mov %o0,%l1 + mov -1,%l0 + + ld [sp],%o7 + retl + inc 4,sp + +stderrF: call @open_stderr + nop + + mov %o0,%l1 + mov -1,%l0 + + ld [sp],%o7 + retl + inc 4,sp + +openF: mov %l0,%o1 + call @open_file + add %i0,4,%o0 + + orcc %o0,%g0,%l1 + mov -1,%l0 + ld [sp],%o7 + clr %l2 + bpos,a openF_1 + mov -1,%l2 +openF_1: + retl + inc 4,sp + +closeF: call @close_file + mov %l1,%o0 + + ld [sp],%o7 + retl + inc 4,sp + +reopenF: + mov %l2,%o0 + call @re_open_file + mov %l0,%o1 + + mov %l2,%l1 + mov %o0,%l2 + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +readFC: + call @file_read_char + mov %l1,%o0 + + mov %o0,%l2 + addcc %o0,1,%g0 + be readFC_eof + set -1,%l0 + + ld [sp],%o7 + set -1,%l3 + retl + inc 4,sp + +readFC_eof: + ld [sp],%o7 + clr %l2 + clr %l3 + retl + inc 4,sp + +readFI: + sub sp,4,%o1 + call @file_read_int + mov %l1,%o0 + + ld [sp-4],%l2 + set -1,%l0 + ld [sp],%o7 + mov %o0,%l3 + retl + inc 4,sp + +readFR: + set tmp_real,%o1 + call @file_read_real + mov %l1,%o0 + + sethi %hi tmp_real,%g1 + ldd [%g1+%lo tmp_real],%f0 + mov %o0,%l2 + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +readFS: + add %l0,8+3,%l5 + srl %l5,2,%l5 + subcc %l7,%l5,%l7 + bneg readFS_gc + nop + +readFS_r_gc: + add d7,%l5,d7 + mov %l2,%l4 + mov %g6,%l3 + + set __STRING__+2,%o0 + st %o0,[%g6] + inc 4,%g6 + + mov %g6,%o2 + mov %l0,%o1 + call @file_read_string + mov %l2,%o0 + +readFS_end: + inc 3,d0 + and d0,-4,d0 + inc 4,%g6 + add a6,d0,a6 + srl d0,2,d0 + inc 2,d0 + sub d7,d0,d7 + + mov %l3,%i0 + mov %l4,%l1 + ld [sp],%o7 + set -1,d0 + retl + inc 4,sp + +readFS_gc: dec 4,sp + call collect_0 + st %o7,[sp] + + b,a readFS_r_gc + +readLineF: + mov 32+2,%l5 + subcc %l7,%l5,%g0 + bneg readLineF_gc + nop + +readLineF_r_gc: + mov %l1,%l4 + mov a6,%l3 + + set __STRING__+2,%o0 + st %o0,[a6] + inc 4,a6 + + add a6,4,%o2 + sub %l7,2,%o1 + sll %o1,2,%o1 + call @file_read_line + mov %l4,%o0 + + orcc %o0,%g0,%l0 + bpos readFS_end + st %l0,[a6] + + tst %l5 + be out_of_memory_4 + nop + + sub %l7,2,%l0 + sll %l0,2,%l0 + st %l0,[a6] + inc 4,a6 + add a6,%l0,a6 + + add %l7,32+2,%l5 + neg %l5,%l7 + mov %l3,%i0 + + dec 4,sp + call collect_1 + st %o7,[sp] + + add %l7,%l5,%l7 + mov %i0,%i1 + + ld [%i1+4],%l0 + inc 8,%i1 + add %l0,3,%l1 + srl %l1,2,%l1 + dec 2,%l7 + sub %l7,%l1,%l7 + + set __STRING__+2,%o0 + st %o0,[a6] + mov a6,%l3 + st %l0,[a6+4] + b st_copy_string1 + inc 8,a6 +copy_st_lp1: + inc 4,%i1 + st %g1,[a6] + inc 4,a6 +st_copy_string1: + deccc 1,%l1 + bcc,a copy_st_lp1 + ld [%i1],%g1 + + mov a6,%o2 + sll %l7,2,%o1 + call @file_read_line + mov %l4,%o0 + + orcc %o0,%g0,%l0 + bneg out_of_memory_4 + mov %l3,%i0 + + ld [%i0+4],%g1 + + add %l0,3,%l1 + + add %g1,%l0,%g1 + st %g1,[%i0+4] + + srl %l1,2,%l1 + sub %l7,%l1,%l7 + sll %l1,2,%l1 + add a6,%l1,a6 + + mov %l4,%l1 + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +readLineF_gc: + sub %l7,%l5,%l7 + dec 4,sp + call collect_0 + st %o7,[sp] + + add %l7,%l5,%l7 + b readLineF_r_gc + clr %l5 + +writeFC: + mov %l1,%o1 + call @file_write_char + mov %l2,%o0 + + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +writeFI: + mov %l1,%o1 + call @file_write_int + mov %l2,%o0 + + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +writeFR: + sethi %hi tmp_real,%g1 + std %f0,[%g1+%lo tmp_real] + mov %l1,%o2 + call @file_write_real + ldd [%g1+%lo tmp_real],%o0 + + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +writeFS: + mov %l1,%o1 + call @file_write_string + add %i0,4,%o0 + + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +endF: + call @file_end + mov %l1,%o0 + + mov %o0,%l2 + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +errorF: + call @file_error + mov %l1,%o0 + + mov %o0,%l2 + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +positionF: + call @file_position + mov %l1,%o0 + + mov %o0,%l2 + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +seekF: + mov %l0,%o2 + mov %l1,%o1 + mov %l3,%o0 + call @file_seek + mov %l3,%l1 + + mov %o0,%l2 + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +shareF: + call @file_share + mov %l1,%o0 + + ld [sp],%o7 + set -1,%l0 + retl + inc 4,sp + +openSF: mov %l0,%o1 + call @open_s_file + add %i0,4,%o0 + + orcc %o0,%g0,%l1 + mov 0,%l0 + ld [sp],%o7 + clr %l2 + bpos,a openSF_1 + mov -1,%l2 +openSF_1: + retl + inc 4,sp + +readSFC: + sub sp,4,%o1 + st %l0,[sp-4] + call @file_read_s_char + mov %l1,%o0 + + mov %o0,%l2 + addcc %o0,1,%g0 + be readSFC_eof + ld [sp-4],%l0 + + ld [sp],%o7 + mov -1,%l3 + retl + inc 4,sp + +readSFC_eof: + clr %l2 + ld [sp],%o7 + clr %l3 + retl + inc 4,sp + +readSFI: + sub sp,4,%o2 + st %l0,[sp-4] + sub sp,8,%o1 + call @file_read_s_int + mov %l1,%o0 + + ld [sp-8],%l2 + ld [sp-4],%l0 + ld [sp],%o7 + mov %o0,%l3 + retl + inc 4,sp + +readSFR: + sub sp,4,%o2 + st %l0,[sp-4] + set tmp_real,%o1 + call @file_read_s_real + mov %l1,%o0 + + sethi %hi tmp_real,%g1 + ldd [%g1+%lo tmp_real],%f0 + ld [sp-4],%l0 + ld [sp],%o7 + mov %o0,%l2 + retl + inc 4,sp + +readSFS: + add %l0,8+3,%l5 + srl %l5,2,%l5 + subcc %l7,%l5,%l7 + bneg readSFS_gc + nop + +readSFS_r_gc: + add %l7,%l5,%l7 + mov %l2,%l4 + mov %g6,%l3 + + set __STRING__+2,%o0 + st %o0,[%g6] + inc 4,%g6 + + sub sp,4,%o3 + st %l1,[sp-4] + mov %g6,%o2 + mov %l0,%o1 + call @file_read_s_string + mov %l2,%o0 + +readSFS_end: + inc 3,%l0 + and %l0,-4,%l0 + inc 4,%g6 + add %g6,%l0,%g6 + srl %l0,2,%l0 + inc 4,%l0 + sub %l7,%l0,%l7 + + mov %l3,%i0 + mov %l4,%l1 + ld [sp],%o7 + ld [sp-4],%l0 + retl + inc 4,sp + +readSFS_gc: dec 4,sp + call collect_0 + st %o7,[sp] + + b,a readSFS_r_gc + +readLineSF: + mov 32+2,%l5 + subcc %l7,%l5,%g0 + bneg readLineSF_gc + nop + +readLineSF_r_gc: + st %l0,[sp-4] + mov %l1,%l4 + mov %g6,%l3 + + set __STRING__+2,%o0 + st %o0,[%g6] + inc 4,%g6 + + sub sp,4,%o3 + add %g6,4,%o2 + sub %l7,2,%o1 + sll %o1,2,%o1 + call @file_read_s_line + mov %l4,%o0 + + orcc %o0,%g0,%l0 + bpos readSFS_end + st %l0,[%g6] + + tst %l5 + be out_of_memory_4 + nop + + sub %l7,2,%l0 + sll %l0,2,%l0 + st %l0,[%g6] + inc 4,%g6 + add %g6,%l0,%g6 + + add %l7,32+2,%l5 + neg %l5,%l7 + mov %l3,%i0 + + dec 4,sp + call collect_1 + st %o7,[sp] + + add %l7,%l5,%l7 + + mov %i0,%i1 + ld [%i1+4],%l0 + inc 8,%i1 + add %l0,3,%l1 + srl %l1,2,%l1 + dec 2,%l7 + sub %l7,%l1,%l7 + + set __STRING__+2,%o0 + st %o0,[%g6] + mov %g6,%l3 + st %l0,[%g6+4] + b st_copy_string2 + inc 8,%g6 + +copy_st_lp2: + inc 4,%i1 + st %g1,[%g6] + inc 4,%g6 +st_copy_string2: + deccc 1,%l1 + bcc,a copy_st_lp2 + ld [%i1],%g1 + + sub sp,4,%o3 + mov %g6,%o2 + sll %l7,2,%o1 + call @file_read_s_line + mov %l4,%o0 + + orcc %o0,%g0,%l0 + bneg out_of_memory_4 + mov %l3,%i0 + + ld [%i0+4],%g1 + add %l0,3,%l1 + + add %g1,%l0,%g1 + st %g1,[%i0+4] + + srl %l1,2,%l1 + sub %l7,%l1,%l7 + sll %l1,2,%l1 + add %g6,%l1,%g6 + + ld [sp-4],%l0 + ld [sp],%o7 + mov %l4,%l1 + retl + inc 4,sp + +readLineSF_gc: + sub %l7,%l5,%l7 + dec 4,sp + call collect_0 + st %o7,[sp] + + add %l7,%l5,%l7 + b readLineSF_r_gc + clr %l5 + +endSF: + mov %l0,%o1 + call @file_s_end + mov %l1,%o0 + + ld [sp],%o7 + mov %o0,%l0 + retl + inc 4,sp + +positionSF: + mov %l0,%o1 + call @file_s_position + mov %l1,%o0 + + ld [sp],%o7 + mov %o0,%l0 + retl + inc 4,sp + +seekSF: + sub sp,4,%o3 + st %l2,[sp-4] + mov %l0,%o2 + mov %l1,%o1 + mov %l3,%o0 + call @file_s_seek + mov %l3,%l1 + + ld [sp-4],%l0 + ld [sp],%o7 + mov %o0,%l2 + retl + inc 4,sp |