x86 boot code build

John Baldwin jhb at freebsd.org
Wed Oct 3 20:43:14 UTC 2012


On Wednesday, October 03, 2012 9:06:36 am Andriy Gapon wrote:
> 
> 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.

Go for smaller binaries.

-- 
John Baldwin


More information about the freebsd-arch mailing list