312 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			312 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
.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
 |