TomWalker wrote:
Next time this happens, can you post the output of 'disassemble sound_cd_thread'?
Looks like it was my fault mixing up makefiles... ugh. If it matters... the -O3 -march=i686 gives the same code as -O2 -march=core2 -O3 goes crazy, I guess some unaligned access thing.
-O3 -march=i686 wrote:
(gdb) disassemble sound_cd_thread
Dump of assembler code for function sound_cd_thread:
=> 0x0052c410 <+0>: push %edi
0x0052c411 <+1>: push %esi
0x0052c412 <+2>: push %ebx
0x0052c413 <+3>: mov $0x80008001,%ebx
0x0052c418 <+8>: sub $0x10,%esp
0x0052c41b <+11>: nop
0x0052c41c <+12>: lea 0x0(%esi,%eiz,1),%esi
0x0052c420 <+16>: mov 0x16f7710,%eax
0x0052c425 <+21>: movl $0xffffffff,0x4(%esp)
0x0052c42d <+29>: mov %eax,(%esp)
0x0052c430 <+32>: call 0x5958a0 <thread_wait_event>
0x0052c435 <+37>: movl $0x2274,0x4(%esp)
0x0052c43d <+45>: movl $0x16f7720,(%esp)
0x0052c444 <+52>: call 0x4d8630 <ioctl_audio_callback>
0x0052c449 <+57>: mov 0x600b00,%edx
0x0052c44f <+63>: test %edx,%edx
0x0052c451 <+65>: je 0x52c420 <sound_cd_thread+16>
0x0052c453 <+67>: mov 0x16f770c,%edi
0x0052c459 <+73>: xor %ecx,%ecx
0x0052c45b <+75>: mov 0x16f7708,%esi
0x0052c461 <+81>: movswl 0x16f7720(%ecx,%ecx,1),%edx
0x0052c469 <+89>: imul %edi,%edx
0x0052c46c <+92>: mov %edx,%eax
0x0052c46e <+94>: mul %ebx
0x0052c470 <+96>: shr $0xf,%edx
0x0052c473 <+99>: mov %dx,0x16f7720(%ecx,%ecx,1)
0x0052c47b <+107>: movswl 0x16f7722(%ecx,%ecx,1),%edx
0x0052c483 <+115>: imul %esi,%edx
0x0052c486 <+118>: mov %edx,%eax
0x0052c488 <+120>: mul %ebx
0x0052c48a <+122>: shr $0xf,%edx
0x0052c48d <+125>: mov %dx,0x16f7722(%ecx,%ecx,1)
0x0052c495 <+133>: add $0x2,%ecx
0x0052c498 <+136>: cmp $0x2274,%ecx
0x0052c49e <+142>: jne 0x52c461 <sound_cd_thread+81>
0x0052c4a0 <+144>: movl $0x16f7720,(%esp)
0x0052c4a7 <+151>: call 0x53cf50 <givealbuffer_cd>
0x0052c4ac <+156>: jmp 0x52c420 <sound_cd_thread+16>
0x0052c4b1 <+161>: jmp 0x52c4c0 <sound_get_buffer>
0x0052c4b3 <+163>: nop
0x0052c4b4 <+164>: nop
0x0052c4b5 <+165>: nop
0x0052c4b6 <+166>: nop
0x0052c4b7 <+167>: nop
0x0052c4b8 <+168>: nop
0x0052c4b9 <+169>: nop
0x0052c4ba <+170>: nop
0x0052c4bb <+171>: nop
0x0052c4bc <+172>: nop
0x0052c4bd <+173>: nop
0x0052c4be <+174>: nop
0x0052c4bf <+175>: nop
End of assembler dump.
-O3 -march=core2 wrote:
(gdb) info registers
eax 0x5a37458 94598232
ecx 0x52c410 5424144
edx 0x0 0
ebx 0x5a37228 94597672
esp 0x10c4ff04 0x10c4ff04
ebp 0x10c4ff78 0x10c4ff78
esi 0x52c410 5424144
edi 0x778d7050 2005758032
eip 0x52c426 0x52c426 <sound_cd_thread+22>
eflags 0x10202 [ IF RF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x53 83
gs 0x2b 43
(gdb) disassemble sound_cd_thread
Dump of assembler code for function sound_cd_thread:
0x0052c410 <+0>: push %esi
0x0052c411 <+1>: push %ebx
0x0052c412 <+2>: sub $0x34,%esp
0x0052c415 <+5>: movdqa 0x667ce0,%xmm6
0x0052c41d <+13>: movdqa %xmm6,%xmm4
0x0052c421 <+17>: psrlq $0x20,%xmm4
=> 0x0052c426 <+22>: movdqa %xmm4,0x10(%esp)
0x0052c42c <+28>: lea 0x0(%esi,%eiz,1),%esi
0x0052c430 <+32>: mov 0x16f8740,%eax
0x0052c435 <+37>: movl $0xffffffff,0x4(%esp)
0x0052c43d <+45>: movdqa %xmm6,0x20(%esp)
0x0052c443 <+51>: mov %eax,(%esp)
0x0052c446 <+54>: call 0x5959f0 <thread_wait_event>
0x0052c44b <+59>: movl $0x2274,0x4(%esp)
0x0052c453 <+67>: movl $0x16f8760,(%esp)
0x0052c45a <+74>: call 0x4d8630 <ioctl_audio_callback>
0x0052c45f <+79>: mov 0x601b00,%edx
0x0052c465 <+85>: movdqa 0x20(%esp),%xmm6
0x0052c46b <+91>: test %edx,%edx
0x0052c46d <+93>: je 0x52c430 <sound_cd_thread+32>
0x0052c46f <+95>: mov 0x16f8730,%ebx
0x0052c475 <+101>: mov $0x16f8760,%eax
0x0052c47a <+106>: mov 0x16f8720,%ecx
0x0052c480 <+112>: movd %ebx,%xmm2
0x0052c484 <+116>: movd %ecx,%xmm4
0x0052c488 <+120>: punpckldq %xmm4,%xmm2
0x0052c48c <+124>: punpcklqdq %xmm2,%xmm2
0x0052c490 <+128>: movdqa %xmm2,%xmm3
0x0052c494 <+132>: psrlq $0x20,%xmm3
0x0052c499 <+137>: pxor %xmm4,%xmm4
0x0052c49d <+141>: lea 0x0(%esi),%esi
0x0052c4a0 <+144>: movdqa (%eax),%xmm1
0x0052c4a4 <+148>: movdqa %xmm4,%xmm7
0x0052c4a8 <+152>: add $0x10,%eax
0x0052c4ab <+155>: pcmpgtw %xmm1,%xmm7
0x0052c4af <+159>: movdqa %xmm1,%xmm5
0x0052c4b3 <+163>: punpcklwd %xmm7,%xmm5
0x0052c4b7 <+167>: movdqa %xmm5,%xmm0
0x0052c4bb <+171>: psrlq $0x20,%xmm5
0x0052c4c0 <+176>: pmuludq %xmm2,%xmm0
0x0052c4c4 <+180>: punpckhwd %xmm7,%xmm1
0x0052c4c8 <+184>: movdqa %xmm1,%xmm7
0x0052c4cc <+188>: pmuludq %xmm3,%xmm5
0x0052c4d0 <+192>: psrlq $0x20,%xmm1
0x0052c4d5 <+197>: pshufd $0x8,%xmm0,%xmm0
0x0052c4da <+202>: pmuludq %xmm2,%xmm7
0x0052c4de <+206>: pshufd $0x8,%xmm5,%xmm5
0x0052c4e3 <+211>: punpckldq %xmm5,%xmm0
0x0052c4e7 <+215>: movdqa %xmm0,%xmm5
0x0052c4eb <+219>: pmuludq %xmm6,%xmm5
0x0052c4ef <+223>: pmuludq %xmm3,%xmm1
0x0052c4f3 <+227>: psrlq $0x20,%xmm0
0x0052c4f8 <+232>: pshufb 0x667cf0,%xmm5
0x0052c501 <+241>: pmuludq 0x10(%esp),%xmm0
0x0052c507 <+247>: pshufb 0x667d00,%xmm0
0x0052c510 <+256>: pshufd $0x8,%xmm1,%xmm1
0x0052c515 <+261>: por %xmm0,%xmm5
0x0052c519 <+265>: pshufd $0x8,%xmm7,%xmm0
0x0052c51e <+270>: punpckldq %xmm1,%xmm0
0x0052c522 <+274>: movdqa %xmm0,%xmm7
0x0052c526 <+278>: psrlq $0x20,%xmm0
0x0052c52b <+283>: pmuludq %xmm6,%xmm7
0x0052c52f <+287>: pmuludq 0x10(%esp),%xmm0
0x0052c535 <+293>: movdqa %xmm0,%xmm1
0x0052c539 <+297>: pshufb 0x667d00,%xmm1
0x0052c542 <+306>: psrld $0xf,%xmm5
0x0052c547 <+311>: pshufb 0x667d10,%xmm5
0x0052c550 <+320>: pshufb 0x667cf0,%xmm7
0x0052c559 <+329>: por %xmm7,%xmm1
0x0052c55d <+333>: psrld $0xf,%xmm1
0x0052c562 <+338>: pshufb 0x667d20,%xmm1
0x0052c56b <+347>: por %xmm1,%xmm5
0x0052c56f <+351>: movdqa %xmm5,-0x10(%eax)
0x0052c574 <+356>: cmp $0x16fcc40,%eax
0x0052c579 <+361>: jne 0x52c4a0 <sound_cd_thread+144>
0x0052c57f <+367>: movswl 0x16fcc40,%edx
0x0052c586 <+374>: mov $0x80008001,%esi
0x0052c58b <+379>: movl $0x16f8760,(%esp)
0x0052c592 <+386>: movdqa %xmm6,0x20(%esp)
0x0052c598 <+392>: imul %ebx,%edx
0x0052c59b <+395>: mov %edx,%eax
0x0052c59d <+397>: mul %esi
0x0052c59f <+399>: shr $0xf,%edx
0x0052c5a2 <+402>: mov %dx,0x16fcc40
0x0052c5a9 <+409>: movswl 0x16fcc42,%edx
0x0052c5b0 <+416>: imul %ecx,%edx
0x0052c5b3 <+419>: mov %edx,%eax
0x0052c5b5 <+421>: mul %esi
0x0052c5b7 <+423>: shr $0xf,%edx
0x0052c5ba <+426>: mov %dx,0x16fcc42
0x0052c5c1 <+433>: movswl 0x16fcc44,%edx
0x0052c5c8 <+440>: imul %ebx,%edx
0x0052c5cb <+443>: mov %edx,%eax
0x0052c5cd <+445>: mul %esi
0x0052c5cf <+447>: shr $0xf,%edx
0x0052c5d2 <+450>: mov %dx,0x16fcc44
0x0052c5d9 <+457>: movswl 0x16fcc46,%edx
0x0052c5e0 <+464>: imul %ecx,%edx
0x0052c5e3 <+467>: mov %edx,%eax
0x0052c5e5 <+469>: mul %esi
0x0052c5e7 <+471>: shr $0xf,%edx
0x0052c5ea <+474>: mov %dx,0x16fcc46
0x0052c5f1 <+481>: call 0x53d0a0 <givealbuffer_cd>
0x0052c5f6 <+486>: movdqa 0x20(%esp),%xmm6
0x0052c5fc <+492>: jmp 0x52c430 <sound_cd_thread+32>
0x0052c601 <+497>: jmp 0x52c610 <sound_get_buffer>
0x0052c603 <+499>: nop
0x0052c604 <+500>: nop
0x0052c605 <+501>: nop
0x0052c606 <+502>: nop
0x0052c607 <+503>: nop
0x0052c608 <+504>: nop
0x0052c609 <+505>: nop
0x0052c60a <+506>: nop
0x0052c60b <+507>: nop
0x0052c60c <+508>: nop
0x0052c60d <+509>: nop
0x0052c60e <+510>: nop
0x0052c60f <+511>: nop
End of assembler dump.
Sorry for that confusion!