Date: Wed, 03 Oct 2012 16:06:36 +0300 From: Andriy Gapon <avg@FreeBSD.org> To: freebsd-arch@FreeBSD.org Subject: x86 boot code build Message-ID: <506C385C.3020400@FreeBSD.org>
next in thread | raw e-mail | index | archive | help
Currently we produce "slightly" different binaries for x86 boot code depending whether MACHINE_CPUARCH is i386 or amd64. I think that there is no good reason for this, since in both cases we use exactly the same code and target the same classes of machines. In other words, the binaries should be interchangeable[*]. The difference boils down to using -march=i386 on amd64 while i386 uses default compiler flags, which are equivalent to -march=i486 -mtune=generic. If my analysis is correct, the only thing affected by the flags in the boot code is use of leave instruction when -Os is _not_ specified. For -march=i386 our gcc prefers using leave. For -march=i486 it thinks that movs+pops are faster than leave and so prefers to not use it. If -Os is specified, then leave is always used because it results in smaller machine code. So, as it is now, on amd64 we produce slightly smaller boot binaries where size doesn't matter. Where size really matters (-Os) we produce identical binaries. If we decide that it makes sense to converge i386 and amd64 boot build options, which should we pick? [*] It is the current state of matter, but it is not necessary that it will always be the same. -- Andriy Gapon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?506C385C.3020400>