mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2024-12-15 06:30:49 +00:00
311 lines
4 KiB
Text
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
|