! 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