summaryrefslogtreecommitdiff
path: root/sfileIO2.s
diff options
context:
space:
mode:
authorJohn van Groningen2003-10-03 15:35:50 +0000
committerJohn van Groningen2003-10-03 15:35:50 +0000
commitce658fe1be31a9b2e7030a7d82314820d75b8409 (patch)
tree005148aca0fc52d069b0ac0ea70c67dd33a4d189 /sfileIO2.s
parentadd makefiles for solaris (diff)
add assembly files for solaris
Diffstat (limited to 'sfileIO2.s')
-rw-r--r--sfileIO2.s698
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