merge_sort_s.s
contents ::
  merge.c
  merge_modified.c
  merge_proc.c
  merge_sort.c
  merge_sort_s.s


.text
.globl amerge
amerge:
         pushl         %ebp
         movl         %esp, %ebp
         pushl         %esi
         pushl         %ebx
         subl         $48, %esp
         
         movl         12(%ebp), %eax
         cmpl         16(%ebp), %eax
         jl         body
         jmp         .L3

body:         
         movl         16(%ebp), %edx
         addl         %eax, %edx
         movl         %edx, %eax
         sarl         $31, %eax
         shrl         $31, %eax
         leal         (%eax,%edx), %eax
         sarl         $1, %eax
         movl         %eax, -16(%ebp)
         
         subl         $4, %esp
         pushl         -16(%ebp)
         pushl         12(%ebp)
         pushl         8(%ebp)
         call         amerge
         addl         $16, %esp
         
         subl         $4, %esp
         pushl         16(%ebp)
         movl         -16(%ebp), %eax
         incl         %eax
         pushl         %eax
         pushl         8(%ebp)
         call         amerge
         addl         $16, %esp
         
         movl         12(%ebp), %eax
         cmpl         -16(%ebp), %eax
         jne         .L4
         
         imull         $4,%eax, %esi
         movl         8(%ebp), %ebx
         imull         $4,16(%ebp), %ecx
         movl         (%ebx,%esi), %eax
         cmpl         (%ebx,%ecx), %eax
         jle         .L3
         
         imull         $4,12(%ebp), %edx
         movl         (%ebx,%edx), %ecx
         movl         %ecx, -20(%ebp)
         
         imull         $4,12(%ebp), %eax
         imull         $4,16(%ebp), %edx
         movl         (%ebx,%edx), %ecx
         movl         %ecx, (%ebx,%eax)
         
         imull         $4,16(%ebp), %ecx
         movl         -20(%ebp), %edx
         movl         %edx, (%ebx,%ecx)
         jmp         .L3

.L4:
         movl         %esp, -44(%ebp)
         movl         12(%ebp), %edx
         movl         16(%ebp), %eax
         subl         %edx, %eax
         movl         %eax, %ecx
         incl         %eax
         movl         %eax, -24(%ebp)

         imull         $4, %ecx, %eax
         addl         $19, %eax
         shrl         $4, %eax
         sall         $4, %eax
         subl         %eax, %esp
         movl         %esp, -48(%ebp)
         movl         12(%ebp), %eax
         movl         %eax, -28(%ebp)
         movl         -16(%ebp), %eax
         incl         %eax
         movl         %eax, -32(%ebp)
         movl         $0, -20(%ebp)

.L7:
         movl         -16(%ebp), %eax
         incl         %eax
         cmpl         %eax,-28(%ebp)
         jl         .L10
         jmp         .L8

.L10:
         movl         -32(%ebp), %eax
         cmpl         16(%ebp), %eax
         jg         .L12
         
         imull         $4,-28(%ebp), %esi
         movl         8(%ebp), %ebx
         imull         $4,-32(%ebp), %ecx
         movl         (%ebx,%esi), %eax
         cmpl         (%ebx,%ecx), %eax
         jle         .L12
         jmp         .L11

.L12:
         movl         -20(%ebp), %eax
         leal         0(,%eax,4), %ecx
         imull         $4,-28(%ebp), %edx
         movl         8(%ebp), %eax
         movl         (%eax,%edx), %eax
         movl         -48(%ebp), %edx
         movl         %eax, (%ecx,%edx)
         leal         -28(%ebp), %eax
         incl         (%eax)
         jmp         .L9

.L11:
         imull         $4,-28(%ebp), %esi
         movl         8(%ebp), %ebx
         movl         -32(%ebp), %eax
         imull         $4,-32(%ebp), %ecx
         movl         (%ebx,%esi), %eax
         cmpl         (%ebx,%ecx), %eax
         jle         .L9
         
         movl         -20(%ebp), %eax
         leal         0(,%eax,4), %ecx
         imull         $4,-32(%ebp), %edx
         movl         (%ebx,%edx), %eax
         movl         -48(%ebp), %ebx
         movl         %eax, (%ecx,%ebx)
         leal         -32(%ebp), %eax
         incl         (%eax)
.L9:
         leal         -20(%ebp), %eax
         incl         (%eax)
         jmp         .L7

.L8:

.L15:
         movl         -32(%ebp), %eax
         cmpl         16(%ebp), %eax
         jle         .L17
         jmp         .L16

.L17:
         movl         -20(%ebp), %eax
         leal         0(,%eax,4), %ecx
         imull         $4,-32(%ebp), %edx
         movl         8(%ebp), %ebx
         movl         (%ebx,%edx), %eax
         movl         -48(%ebp), %edx
         movl         %eax, (%ecx,%edx)
         leal         -32(%ebp), %eax
         incl         (%eax)
         leal         -20(%ebp), %eax
         incl         (%eax)
         jmp         .L15

.L16:
         movl         $0, -20(%ebp)

.L18:
         movl         -20(%ebp), %eax
         cmpl         -24(%ebp), %eax
         jl         .L21
         jmp         .L19

.L21:
         imull         $4,12(%ebp), %ecx
         movl         8(%ebp), %edx
         movl         -20(%ebp), %eax
         sall         $2, %eax
         movl         -48(%ebp), %ebx
         movl         (%eax,%ebx), %eax
         movl         %eax, (%edx,%ecx)
         leal         -20(%ebp), %eax
         incl         (%eax)
         leal         12(%ebp), %eax
         incl         (%eax)
         jmp         .L18

.L19:
         movl         -44(%ebp), %esp
.L3:
         leal         -8(%ebp), %esp
         popl         %ebx
         popl         %esi
         popl         %ebp
         ret


James Little