> let's look around: > > gdb build/util/x86emu/vm86.o > > Dump of assembler code for function biosint: > 0x000004f3 <biosint+0>: push %esi > 0x000004f4 <biosint+1>: mov %eax,%esi > 0x000004f6 <biosint+3>: push %ebx > 0x000004f7 <biosint+4>: sub $0x4,%esp > 0x000004fa <biosint+7>: movzwl 0x34(%esp),%eax > 0x000004ff <biosint+12>: mov 0x30(%esp),%ebx > 0x00000503 <biosint+16>: mov %eax,(%esp) > 0x00000506 <biosint+19>: push %esi > 0x00000507 <biosint+20>: push $0x86 > 0x0000050c <biosint+25>: push $0x7 > 0x0000050e <biosint+27>: call 0x50f <biosint+28> > > We are passing arg 1 in eax. How could this be? > > Simple. We got Clever in v3: > > -mregparm=3 > > A nice optimization that utterly destroys the bios interrupt support. > > Myles, try setting -mregparm=0 and see if life is better.
I'll try it when I get back to that machine. My laptop isn't AMD64, so I can't run SimNOW on it. Thanks for finding that. > I vote we get rid of this type of Cleverness. It's just not > performance critical in a bios. We're not an OS and we should keep it > simple. I don't think we'll live or die on 3 on-stack variables. I'll be interested to see how much faster v3 is when it's not set to SPEW. Right now it seems a lot slower than v2dsr on SimNOW. Myles -- coreboot mailing list: [email protected] http://www.coreboot.org/mailman/listinfo/coreboot

