From owner-freebsd-arch@FreeBSD.ORG Wed Oct 3 13:06:45 2012 Return-Path: Delivered-To: freebsd-arch@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E2AEC106564A for ; Wed, 3 Oct 2012 13:06:45 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 415198FC12 for ; Wed, 3 Oct 2012 13:06:44 +0000 (UTC) Received: from odyssey.starpoint.kiev.ua (alpha-e.starpoint.kiev.ua [212.40.38.101]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id QAA06150 for ; Wed, 03 Oct 2012 16:06:37 +0300 (EEST) (envelope-from avg@FreeBSD.org) Message-ID: <506C385C.3020400@FreeBSD.org> Date: Wed, 03 Oct 2012 16:06:36 +0300 From: Andriy Gapon User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1 MIME-Version: 1.0 To: freebsd-arch@FreeBSD.org X-Enigmail-Version: 1.4.3 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: Subject: x86 boot code build X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Oct 2012 13:06:46 -0000 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