Skip site navigation (1)Skip section navigation (2)
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>