.data fc1: .byte 0x00 .byte 0x00 .byte 0x53 .byte 0x40 fc2: .byte 0x00 .byte 0x00 .byte 0xa3 .byte 0x3b global_volume: .byte 0x00 .byte 0x00 .byte 0x80 .byte 0x3f end_fade: .byte 0x00 .byte 0xff .byte 0x7f .byte 0x3f stereo_mod: .byte 0x00 .byte 0x62 .byte 0x80 .byte 0x3f main_tune: .byte 0x00 .byte 0x81 .byte 0x4f .byte 0x3a oct_semitones: .long 12 small: .byte 0 .byte 0 .byte 128 .byte 0 order: .byte 0 .byte 1 .byte 2 .byte 9 .byte 0 .byte 1 .byte 2 .byte 3 .byte 4 .byte 5 .byte 6 .byte 7 .byte 8 instr_data: .byte 128 .byte 0 .byte 0 .byte 0 .byte 56 .byte 0 .byte 0 .byte 0 .byte 0 .byte 204 .byte 204 .byte 61 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 71 .byte 1 .byte 64 .byte 2 .byte 0 .byte 0 .byte 0 .byte 36 .byte 0 .byte 0 .byte 0 .byte 0 .byte 18 .byte 131 .byte 59 .byte 0 .byte 0 .byte 0 .byte 63 .byte 0 .byte 250 .byte 127 .byte 63 .byte 0 .byte 0 .byte 0 .byte 0 .byte 1 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 63 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 56 .byte 0 .byte 0 .byte 0 .byte 0 .byte 153 .byte 153 .byte 62 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 32 .byte 0 .byte 64 .byte 2 .byte 0 .byte 0 .byte 0 .byte 36 .byte 0 .byte 0 .byte 0 .byte 0 .byte 18 .byte 131 .byte 59 .byte 0 .byte 0 .byte 128 .byte 62 .byte 0 .byte 236 .byte 127 .byte 63 .byte 0 .byte 0 .byte 0 .byte 0 .byte 1 .byte 0 .byte 0 .byte 0 .byte 32 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 153 .byte 25 .byte 63 .byte 0 .byte 0 .byte 0 .byte 0 .byte 4 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 64 .byte 156 .byte 0 .byte 0 .byte 0 .byte 51 .byte 51 .byte 63 .byte 0 .byte 0 .byte 0 .byte 0 .byte 128 .byte 0 .byte 0 .byte 0 .byte 56 .byte 0 .byte 0 .byte 0 .byte 0 .byte 153 .byte 25 .byte 62 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 71 .byte 161 .byte 63 .byte 2 .byte 0 .byte 0 .byte 0 .byte 36 .byte 0 .byte 0 .byte 0 .byte 0 .byte 15 .byte 161 .byte 53 .byte 0 .byte 204 .byte 76 .byte 62 .byte 0 .byte 253 .byte 127 .byte 63 .byte 0 .byte 0 .byte 0 .byte 0 .byte 1 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 204 .byte 76 .byte 63 .byte 0 .byte 0 .byte 0 .byte 0 .byte 128 .byte 0 .byte 0 .byte 0 .byte 80 .byte 0 .byte 0 .byte 0 .byte 0 .byte 194 .byte 117 .byte 62 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 65 .byte 192 .byte 63 .byte 2 .byte 0 .byte 0 .byte 0 .byte 60 .byte 0 .byte 0 .byte 0 .byte 0 .byte 15 .byte 161 .byte 53 .byte 0 .byte 215 .byte 35 .byte 62 .byte 0 .byte 255 .byte 127 .byte 63 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 1 .byte 0 .byte 0 .byte 36 .byte 0 .byte 0 .byte 0 .byte 0 .byte 194 .byte 245 .byte 61 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 183 .byte 81 .byte 57 .byte 0 .byte 0 .byte 128 .byte 63 .byte 1 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 204 .byte 76 .byte 63 .byte 0 .byte 0 .byte 0 .byte 0 patterns: .byte 21 .byte 164 .byte 0 .byte 52 .byte 0 .byte 40 .byte 0 .byte 0 .byte 0 .byte 0 .byte 45 .byte 0 .byte 21 .byte 0 .byte 0 .byte 0 .byte 0 .byte 40 .byte 0 .byte 0 .byte 0 .byte 0 .byte 45 .byte 0 .byte 21 .byte 0 .byte 0 .byte 48 .byte 0 .byte 40 .byte 0 .byte 0 .byte 0 .byte 0 .byte 45 .byte 0 .byte 21 .byte 0 .byte 0 .byte 48 .byte 0 .byte 40 .byte 0 .byte 52 .byte 0 .byte 0 .byte 45 .byte 48 .byte 18 .byte 0 .byte 0 .byte 45 .byte 0 .byte 37 .byte 161 .byte 0 .byte 0 .byte 0 .byte 42 .byte 0 .byte 18 .byte 0 .byte 0 .byte 0 .byte 0 .byte 37 .byte 0 .byte 0 .byte 0 .byte 0 .byte 42 .byte 0 .byte 18 .byte 0 .byte 0 .byte 0 .byte 0 .byte 37 .byte 0 .byte 0 .byte 0 .byte 0 .byte 42 .byte 0 .byte 18 .byte 0 .byte 0 .byte 48 .byte 0 .byte 37 .byte 0 .byte 0 .byte 0 .byte 0 .byte 42 .byte 45 .byte 17 .byte 169 .byte 0 .byte 41 .byte 0 .byte 29 .byte 0 .byte 0 .byte 0 .byte 0 .byte 36 .byte 0 .byte 17 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 0 .byte 0 .byte 0 .byte 0 .byte 36 .byte 0 .byte 17 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 0 .byte 0 .byte 0 .byte 0 .byte 36 .byte 0 .byte 17 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 0 .byte 45 .byte 0 .byte 0 .byte 36 .byte 41 .byte 14 .byte 0 .byte 166 .byte 42 .byte 0 .byte 26 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 14 .byte 0 .byte 0 .byte 0 .byte 0 .byte 26 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 14 .byte 0 .byte 0 .byte 45 .byte 0 .byte 26 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 42 .byte 14 .byte 0 .byte 0 .byte 0 .byte 0 .byte 26 .byte 0 .byte 38 .byte 0 .byte 0 .byte 33 .byte 0 .byte 21 .byte 164 .byte 0 .byte 36 .byte 0 .byte 28 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 21 .byte 0 .byte 0 .byte 0 .byte 0 .byte 28 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 21 .byte 0 .byte 0 .byte 0 .byte 0 .byte 28 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 19 .byte 0 .byte 0 .byte 35 .byte 0 .byte 26 .byte 0 .byte 38 .byte 0 .byte 159 .byte 31 .byte 35 .byte 18 .byte 0 .byte 0 .byte 33 .byte 0 .byte 25 .byte 0 .byte 0 .byte 0 .byte 161 .byte 30 .byte 0 .byte 18 .byte 0 .byte 0 .byte 0 .byte 0 .byte 25 .byte 0 .byte 0 .byte 0 .byte 0 .byte 30 .byte 0 .byte 18 .byte 0 .byte 0 .byte 0 .byte 0 .byte 25 .byte 0 .byte 0 .byte 0 .byte 0 .byte 30 .byte 40 .byte 18 .byte 0 .byte 0 .byte 0 .byte 0 .byte 25 .byte 0 .byte 45 .byte 0 .byte 0 .byte 30 .byte 0 .byte 17 .byte 0 .byte 169 .byte 47 .byte 0 .byte 24 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 0 .byte 17 .byte 0 .byte 0 .byte 48 .byte 0 .byte 24 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 45 .byte 17 .byte 0 .byte 0 .byte 0 .byte 0 .byte 24 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 0 .byte 17 .byte 0 .byte 0 .byte 43 .byte 0 .byte 24 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 0 .byte 14 .byte 0 .byte 0 .byte 45 .byte 0 .byte 17 .byte 169 .byte 0 .byte 0 .byte 0 .byte 26 .byte 38 .byte 14 .byte 0 .byte 0 .byte 0 .byte 0 .byte 21 .byte 0 .byte 45 .byte 0 .byte 0 .byte 26 .byte 0 .byte 19 .byte 0 .byte 171 .byte 47 .byte 0 .byte 26 .byte 0 .byte 0 .byte 0 .byte 0 .byte 31 .byte 38 .byte 19 .byte 0 .byte 0 .byte 0 .byte 0 .byte 26 .byte 0 .byte 47 .byte 0 .byte 0 .byte 31 .byte 0 .byte 9 .byte 173 .byte 0 .byte 49 .byte 173 .byte 28 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 9 .byte 0 .byte 0 .byte 0 .byte 0 .byte 28 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 9 .byte 0 .byte 0 .byte 0 .byte 0 .byte 28 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 9 .byte 0 .byte 0 .byte 40 .byte 0 .byte 28 .byte 0 .byte 45 .byte 0 .byte 0 .byte 33 .byte 49 .byte 13 .byte 0 .byte 168 .byte 52 .byte 165 .byte 32 .byte 0 .byte 0 .byte 0 .byte 0 .byte 37 .byte 0 .byte 13 .byte 0 .byte 0 .byte 0 .byte 0 .byte 32 .byte 0 .byte 0 .byte 0 .byte 0 .byte 37 .byte 0 .byte 13 .byte 0 .byte 0 .byte 56 .byte 0 .byte 32 .byte 0 .byte 0 .byte 0 .byte 0 .byte 37 .byte 52 .byte 13 .byte 0 .byte 0 .byte 0 .byte 0 .byte 32 .byte 0 .byte 49 .byte 0 .byte 0 .byte 37 .byte 0 .byte 11 .byte 171 .byte 0 .byte 50 .byte 166 .byte 31 .byte 0 .byte 0 .byte 0 .byte 0 .byte 35 .byte 0 .byte 11 .byte 0 .byte 0 .byte 0 .byte 0 .byte 31 .byte 0 .byte 0 .byte 0 .byte 0 .byte 35 .byte 0 .byte 11 .byte 0 .byte 0 .byte 0 .byte 0 .byte 31 .byte 0 .byte 0 .byte 0 .byte 0 .byte 35 .byte 0 .byte 11 .byte 0 .byte 0 .byte 50 .byte 0 .byte 31 .byte 0 .byte 49 .byte 0 .byte 0 .byte 35 .byte 47 .byte 11 .byte 0 .byte 166 .byte 50 .byte 0 .byte 30 .byte 0 .byte 0 .byte 0 .byte 0 .byte 35 .byte 0 .byte 11 .byte 0 .byte 0 .byte 0 .byte 175 .byte 30 .byte 0 .byte 0 .byte 0 .byte 0 .byte 35 .byte 0 .byte 11 .byte 0 .byte 0 .byte 0 .byte 0 .byte 30 .byte 0 .byte 0 .byte 0 .byte 0 .byte 35 .byte 52 .byte 11 .byte 0 .byte 0 .byte 0 .byte 0 .byte 30 .byte 0 .byte 54 .byte 0 .byte 0 .byte 35 .byte 0 .byte 9 .byte 173 .byte 0 .byte 52 .byte 173 .byte 28 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 9 .byte 0 .byte 0 .byte 0 .byte 0 .byte 28 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 9 .byte 0 .byte 0 .byte 0 .byte 0 .byte 28 .byte 0 .byte 0 .byte 0 .byte 0 .byte 33 .byte 0 .byte 11 .byte 166 .byte 0 .byte 52 .byte 177 .byte 30 .byte 0 .byte 50 .byte 0 .byte 0 .byte 35 .byte 49 .byte 13 .byte 168 .byte 0 .byte 52 .byte 168 .byte 32 .byte 0 .byte 0 .byte 0 .byte 0 .byte 37 .byte 0 .byte 13 .byte 0 .byte 0 .byte 0 .byte 0 .byte 32 .byte 0 .byte 0 .byte 0 .byte 0 .byte 37 .byte 0 .byte 13 .byte 0 .byte 0 .byte 49 .byte 165 .byte 32 .byte 0 .byte 0 .byte 0 .byte 0 .byte 37 .byte 52 .byte 13 .byte 0 .byte 0 .byte 0 .byte 0 .byte 32 .byte 0 .byte 49 .byte 0 .byte 0 .byte 37 .byte 0 .byte 7 .byte 171 .byte 0 .byte 50 .byte 166 .byte 26 .byte 0 .byte 0 .byte 0 .byte 0 .byte 31 .byte 0 .byte 7 .byte 0 .byte 0 .byte 0 .byte 0 .byte 26 .byte 0 .byte 0 .byte 0 .byte 0 .byte 31 .byte 0 .byte 7 .byte 0 .byte 0 .byte 0 .byte 171 .byte 26 .byte 0 .byte 0 .byte 0 .byte 0 .byte 31 .byte 47 .byte 7 .byte 0 .byte 0 .byte 45 .byte 173 .byte 26 .byte 0 .byte 43 .byte 0 .byte 0 .byte 31 .byte 45 .byte 4 .byte 0 .byte 168 .byte 47 .byte 168 .byte 20 .byte 0 .byte 0 .byte 0 .byte 180 .byte 28 .byte 0 .byte 4 .byte 0 .byte 0 .byte 0 .byte 0 .byte 20 .byte 0 .byte 0 .byte 0 .byte 0 .byte 28 .byte 0 .byte 4 .byte 0 .byte 0 .byte 0 .byte 0 .byte 20 .byte 0 .byte 0 .byte 0 .byte 0 .byte 28 .byte 0 .byte 4 .byte 0 .byte 0 .byte 0 .byte 0 .byte 20 .byte 0 .byte 0 .byte 0 .byte 0 .byte 28 .byte 35 .byte 9 .byte 21 .byte 173 .byte 37 .byte 161 .byte 168 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 17 .byte 0 .byte 169 .byte 47 .byte 0 .byte 24 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 0 .byte 17 .byte 0 .byte 0 .byte 48 .byte 0 .byte 24 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 45 .byte 17 .byte 0 .byte 0 .byte 0 .byte 0 .byte 24 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 0 .byte 17 .byte 0 .byte 0 .byte 43 .byte 0 .byte 24 .byte 0 .byte 0 .byte 0 .byte 0 .byte 29 .byte 0 .byte 14 .byte 0 .byte 0 .byte 45 .byte 0 .byte 17 .byte 169 .byte 0 .byte 0 .byte 0 .byte 26 .byte 38 .byte 14 .byte 0 .byte 0 .byte 0 .byte 0 .byte 21 .byte 0 .byte 45 .byte 0 .byte 0 .byte 26 .byte 0 .byte 19 .byte 0 .byte 171 .byte 47 .byte 0 .byte 26 .byte 0 .byte 0 .byte 0 .byte 0 .byte 31 .byte 48 .byte 19 .byte 0 .byte 0 .byte 0 .byte 0 .byte 26 .byte 0 .byte 50 .byte 0 .byte 0 .byte 31 .byte 0 trigger_points: .long 0 .long 240 .long 0 .long 168 .long 0 .long 168 .long 72 .text module_oscillator: fld1 flds 16(%rsi) flds 12(%rsi) fadd %st(2) fmulp flds _ZL8g_buffer+8 fmulp fxch %st(1) flds 0(%rbp) fadd %st(2),%st fprem1 fstps 0(%rbp) flds 20(%rsi) fmulp %st,%st(2) flds 4(%rbp) fadd %st(2),%st fprem1 fsts 4(%rbp) flds 0(%rbp) faddp fxch %st(2) fstp %st fstp %st fmuls 8(%rsi) osc_end: ret module_filter: pushq %rax pushq %rbx pushq %rcx pushq %rdx pushq %rsi pushq %rdi pushq %rbp flds 16(%rsi) flds 12(%rsi) fmuls fc1 fsubs fc2 fmulp flds 0(%rbp) flds 4(%rbp) fsubrp fmulp fsin flds 8(%rsi) flds 12(%rsi) fabs fmulp flds 0(%rbp) fld1 flds 12(%rsi) fabs fsubrp %st(1) fmulp faddp faddp fsts 0(%rbp) flds 12(%rsi) fabs fadd %st fld1 fsub %st(1),%st fmuls 4(%rbp) fxch %st(1) fmul %st(2),%st faddp fsts 4(%rbp) fxch %st(1) fstp %st filter_end: popq %rbp popq %rdi popq %rsi popq %rdx popq %rcx popq %rbx popq %rax ret module_envelope: pushq %rax pushq %rbx pushq %rcx pushq %rdx pushq %rsi pushq %rdi pushq %rbp flds 0(%rbp) movl 20(%rsi),%eax testl %eax,%eax jnz module_envelope.in_decay flds 8(%rsi) faddp flds 12(%rsi) fcomip jnc module_envelope.no_switch incl %eax movl %eax,20(%rsi) module_envelope.no_switch: jmp module_envelope.no_decay module_envelope.in_decay: flds 16(%rsi) fmulp module_envelope.no_decay: flds small faddp fsts 0(%rbp) envelope_end: popq %rbp popq %rdi popq %rsi popq %rdx popq %rcx popq %rbx popq %rax ret module_delay: pushq %rax pushq %rbx pushq %rcx pushq %rdx pushq %rsi pushq %rdi pushq %rbp flds 8(%rsi) movl 0(%rbp),%eax addl $4,%eax xorq %rbx,%rbx movl 12(%rsi),%ebx testl $4,%edi jnz module_delay.foo addl $2000,%ebx module_delay.foo: xorq %rdx,%rdx divl %ebx movl %edx,0(%rbp) addl $4,%edx flds (%rbp,%rdx) flds 16(%rsi) fmulp faddp fsts (%rbp,%rdx) delay_end: popq %rbp popq %rdi popq %rsi popq %rdx popq %rcx popq %rbx popq %rax ret synth: pushq %rax pushq %rbx pushq %rcx pushq %rdx pushq %rsi pushq %rdi pushq %rbp movq %rsi,%rcx pushq %rax pushq %rbx pushq %rcx pushq %rdx pushq %rsi pushq %rdi pushq %rbp leaq _ZL8g_buffer+20,%rdi movq $4,%rcx setup_loop: pushq %rcx leaq instr_data,%rsi xorq %rcx,%rcx movl $6*4*14,%ecx rep movsb popq %rcx loop setup_loop popq %rbp popq %rdi popq %rsi popq %rdx popq %rcx popq %rbx popq %rax xorl %edx,%edx synth_loop: pushq %rcx cmpl $0x60000,%ecx jns synth_loop.no_fade flds global_volume fmuls end_fade fstps global_volume synth_loop.no_fade: fldz leaq _ZL8g_buffer+20,%rsi leaq _ZL8g_buffer+1364,%rbp movl $4,%ecx tracks_loop: pushq %rcx testl %edx,%edx jnz notick movl _ZL8g_buffer+0,%ebx movb order(%ebx),%bl imull $96,%ebx movl _ZL8g_buffer+4,%eax addl %eax,%ebx xorl %eax,%eax movb patterns(%ebx),%al cmpb $0,%al je notrig pushq %rax pushq %rbx pushq %rcx pushq %rdx pushq %rsi pushq %rdi pushq %rbp andb $0x7f,%al movb $12,%bl divb %bl movb %ah,_ZL8g_buffer+16 fildl _ZL8g_buffer+16 fildl oct_semitones fdivrp f2xm1 fld1 faddp movl $1,%ebx movb %al,%cl shl %cl,%ebx movl %ebx,_ZL8g_buffer+16 fildl _ZL8g_buffer+16 fmulp flds main_tune fmulp popq %rbp popq %rdi popq %rsi popq %rdx popq %rcx popq %rbx popq %rax popq %rcx pushq %rcx pushq %rax pushq %rbx pushq %rcx pushq %rdx pushq %rsi pushq %rdi pushq %rbp negl %ecx addl $4,%ecx imull $8,%ecx testb $0x80,%al jz no_alt_instr addl $4,%ecx no_alt_instr: addl $trigger_points, %ecx movl (%ecx),%ecx addq %rcx,%rsi fstps 16(%rsi) movl $0,6*4+20(%rsi) popq %rbp popq %rdi popq %rsi popq %rdx popq %rcx popq %rbx popq %rax notrig: movl _ZL8g_buffer+4,%eax incl %eax cmpl $96,%eax jne no_advance movl _ZL8g_buffer+0,%eax incl %eax movl %eax,_ZL8g_buffer+0 xorl %eax,%eax no_advance: movl %eax,_ZL8g_buffer+4 notick: movl $14,%ecx element_loop: pushq %rcx movl (%rsi),%eax pushq %rbp testl $0x4,%edi fld1 jz element_loop.ch_left testb $0x80,%al jz element_loop.mono_only flds stereo_mod fmulp element_loop.mono_only: addl $40100*2,%ebp element_loop.ch_left: fstps _ZL8g_buffer+8 andb $0x7f,%al cmpb $0x00,%al jne no_osc call module_oscillator no_osc: cmpb $0x01,%al jne no_filter call module_filter no_filter: cmpb $0x02,%al jne no_envelope call module_envelope no_envelope: cmpb $0x04,%al jne no_delay call module_delay no_delay: xorq %rbx,%rbx movl 4(%rsi),%ebx testl %ebx,%ebx jnz not_master_out faddp jmp was_master_out not_master_out: addq %rsi,%rbx cmpb $0,%ah je no_op flds (%rbx) cmpb $1,%ah jne no_op_add op_add: faddp no_op_add: no_op: fstps (%ebx) was_master_out: addq $6*4,%rsi popq %rbp addl $40100*2*2,%ebp popq %rcx decl %ecx jnz element_loop popq %rcx decl %ecx jnz tracks_loop decl %edx jns was_master_out.no_newtick movl $30000,%edx was_master_out.no_newtick: fmuls global_volume fstps (%rdi) addq $4,%rdi popq %rcx decl %ecx jnz synth_loop popq %rbp popq %rdi popq %rsi popq %rdx popq %rcx popq %rbx popq %rax ret