| .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 |