ioef/lcc/sparc/solaris/tst/wf1.sbk
2005-08-28 17:54:51 +00:00

311 lines
4 KiB
Text

.global main
.section ".text"
.align 4
main:
save %sp,-120,%sp
st %g0,[%fp+-24]
set next,%i5
st %g0,[%i5]
ba .L3; nop
.L2:
add -20,%fp,%o0
add -24,%fp,%o1
call lookup; nop
ld [%o0],%i4
add %i4,1,%i4
st %i4,[%o0]
.L3:
add -20,%fp,%o0
call getword; nop
cmp %o0,0; bne .L2; nop
ld [%fp+-24],%o0
call tprint; nop
mov %g0,%i0
.L1:
ret; restore
.type main,#function
.size main,.-main
.global err
.align 4
err:
save %sp,-96,%sp
set .L6,%o0
mov %i0,%o1
call printf; nop
set 1,%o0
call exit; nop
mov %g0,%i0
.L5:
ret; restore
.type err,#function
.size err,.-err
.global getword
.align 4
getword:
save %sp,-96,%sp
.L8:
.L9:
call getchar; nop
mov %o0,%i3
mov %i3,%i5
cmp %i3,-1; be .L11; nop
mov %i5,%o0
call isletter; nop
cmp %o0,0; be .L8; nop
.L11:
mov %i0,%i4
ba .L15; nop
.L12:
mov %i4,%i3
add %i3,1,%i4
mov %i5,%i2
stb %i2,[%i3]
.L13:
call getchar; nop
mov %o0,%i5
.L15:
mov %i5,%o0
call isletter; nop
mov %o0,%i5
cmp %o0,0; bne .L12; nop
stb %g0,[%i4]
mov %i4,%i3
mov %i0,%i2
cmp %i3,%i2; bleu .L16; nop
set 1,%i0
ba .L7; nop
.L16:
mov %g0,%i0
.L7:
ret; restore
.type getword,#function
.size getword,.-getword
.global isletter
.align 4
isletter:
cmp %o0,65; bl .L19; nop
cmp %o0,90; bg .L19; nop
add %o0,32,%o0
.L19:
cmp %o0,97; bl .L21; nop
cmp %o0,122; bg .L21; nop
ba .L18; nop
.L21:
mov %g0,%o0
.L18:
retl; nop
.type isletter,#function
.size isletter,.-isletter
.global lookup
.align 4
lookup:
save %sp,-96,%sp
ld [%i1],%i4
cmp %i4,%g0; be .L24; nop
mov %i0,%o0
ld [%i1],%i4
ld [%i4+12],%o1
call strcmp; nop
mov %o0,%i5
cmp %i5,0; bge .L26; nop
mov %i0,%o0
ld [%i1],%i4
add %i4,4,%o1
call lookup; nop
mov %o0,%i0
ba .L23; nop
.L26:
cmp %i5,0; ble .L28; nop
mov %i0,%o0
ld [%i1],%i4
add %i4,8,%o1
call lookup; nop
mov %o0,%i0
ba .L23; nop
.L28:
ld [%i1],%i0
ba .L23; nop
.L24:
set next,%i4
ld [%i4],%i4
cmp %i4,2000; bl .L30; nop
set .L32,%o0
call err; nop
.L30:
set next,%i4
ld [%i4],%i4
sll %i4,4,%i4
set words,%i3
st %g0,[%i4+%i3]
set next,%i4
ld [%i4],%i4
sll %i4,4,%i4
set words+8,%i2
st %g0,[%i4+%i2]
set words+4,%i2
st %g0,[%i4+%i2]
mov %i0,%o0
call strlen; nop
mov %o0,%i4
add %i4,1,%o0
call malloc; nop
set next,%i3
ld [%i3],%i3
sll %i3,4,%i3
set words+12,%i2
st %o0,[%i3+%i2]
set next,%i4
ld [%i4],%i4
sll %i4,4,%i4
set words+12,%i3
ld [%i4+%i3],%i4
cmp %i4,%g0; bne .L36; nop
set .L39,%o0
call err; nop
.L36:
set next,%i4
ld [%i4],%i4
sll %i4,4,%i4
set words+12,%i3
ld [%i4+%i3],%o0
mov %i0,%o1
call strcpy; nop
set next,%i4
ld [%i4],%i3
add %i3,1,%i2
st %i2,[%i4]
sll %i3,4,%i4
set words,%i3
add %i4,%i3,%i4
st %i4,[%i1]
mov %i4,%i0
.L23:
ret; restore
.type lookup,#function
.size lookup,.-lookup
.global tprint
.align 4
tprint:
save %sp,-96,%sp
mov %i0,%i5
cmp %i5,%g0; be .L42; nop
ld [%i0+4],%o0
call tprint; nop
set .L44,%o0
ld [%i0],%o1
ld [%i0+12],%o2
call printf; nop
ld [%i0+8],%o0
call tprint; nop
.L42:
mov %g0,%i0
.L41:
ret; restore
.type tprint,#function
.size tprint,.-tprint
.global strcmp
.align 4
strcmp:
save %sp,-96,%sp
ba .L47; nop
.L46:
mov %i0,%i5
add %i5,1,%i0
ldsb [%i5],%i5
cmp %i5,0; bne .L49; nop
mov %g0,%i0
ba .L45; nop
.L49:
add %i1,1,%i1
.L47:
ldsb [%i0],%i5
ldsb [%i1],%i4
cmp %i5,%i4; be .L46; nop
ldsb [%i0],%i5
cmp %i5,0; bne .L51; nop
set -1,%i0
ba .L45; nop
.L51:
ldsb [%i1],%i5
cmp %i5,0; bne .L53; nop
set 1,%i0
ba .L45; nop
.L53:
ldsb [%i0],%i5
ldsb [%i1],%i4
sub %i5,%i4,%i0
.L45:
ret; restore
.type strcmp,#function
.size strcmp,.-strcmp
.section ".bss"
.global next
.type next,#object
.size next,4
.common next,4,4
.global words
.type words,#object
.size words,32000
.common words,32000,4
.section ".rodata"
.align 1
.L44:
.byte 37
.byte 100
.byte 9
.byte 37
.byte 115
.byte 10
.byte 0
.align 1
.L39:
.byte 111
.byte 117
.byte 116
.byte 32
.byte 111
.byte 102
.byte 32
.byte 119
.byte 111
.byte 114
.byte 100
.byte 32
.byte 115
.byte 116
.byte 111
.byte 114
.byte 97
.byte 103
.byte 101
.byte 0
.align 1
.L32:
.byte 111
.byte 117
.byte 116
.byte 32
.byte 111
.byte 102
.byte 32
.byte 110
.byte 111
.byte 100
.byte 101
.byte 32
.byte 115
.byte 116
.byte 111
.byte 114
.byte 97
.byte 103
.byte 101
.byte 0
.align 1
.L6:
.byte 63
.byte 32
.byte 37
.byte 115
.byte 10
.byte 0