From owner-freebsd-arch@FreeBSD.ORG Sun Oct 14 09:53:54 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 9F2DFA5C; Sun, 14 Oct 2012 09:53:54 +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 9C1408FC08; Sun, 14 Oct 2012 09:53:53 +0000 (UTC) Received: from porto.starpoint.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id MAA28687; Sun, 14 Oct 2012 12:53:51 +0300 (EEST) (envelope-from avg@FreeBSD.org) Received: from localhost ([127.0.0.1]) by porto.starpoint.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1TNKtL-000Cbi-Dv; Sun, 14 Oct 2012 12:53:51 +0300 Message-ID: <507A8BAE.5060304@FreeBSD.org> Date: Sun, 14 Oct 2012 12:53:50 +0300 From: Andriy Gapon User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:16.0) Gecko/20121013 Thunderbird/16.0.1 MIME-Version: 1.0 To: freebsd-arch@FreeBSD.org Subject: Re: x86 boot code build References: <506C385C.3020400@FreeBSD.org> <506DEB4C.5020508@andric.com> In-Reply-To: <506DEB4C.5020508@andric.com> X-Enigmail-Version: 1.4.5 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Dimitry Andric X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Oct 2012 09:53:54 -0000 on 04/10/2012 23:02 Dimitry Andric said the following: > On 2012-10-03 15:06, 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. > > Yes, I also noticed this inconsistency during some other work in > sys/boot, and I ended up with this diff in my backlog: > > Index: sys/boot/i386/Makefile.inc > =================================================================== > --- sys/boot/i386/Makefile.inc (revision 241194) > +++ sys/boot/i386/Makefile.inc (working copy) > @@ -5,12 +5,13 @@ > BINDIR?= /boot > > LOADER_ADDRESS?=0x200000 > -CFLAGS+= -ffreestanding -mpreferred-stack-boundary=2 \ > +CFLAGS+= -march=i386 -ffreestanding -mpreferred-stack-boundary=2 \ > -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -msoft-float > +NO_CPU_CFLAGS= > LDFLAGS+= -nostdlib > > .if ${MACHINE_CPUARCH} == "amd64" > -CFLAGS+= -m32 -march=i386 > +CFLAGS+= -m32 > ACFLAGS+= -m32 > LDFLAGS+= -m elf_i386_fbsd > AFLAGS+= --32 > > >> 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? > > Well, do we still officially support any real i386 machines? If so, we > should still use -march=i386 for the boot code. Otherwise, let's start > using -march=i486 explicitly. So like: Thank you for the patch! Here is a slightly larger one (including some commented out changes in userboot): http://people.freebsd.org/~avg/boot-march%3di386.diff > Index: sys/boot/i386/Makefile.inc > =================================================================== > --- sys/boot/i386/Makefile.inc (revision 241194) > +++ sys/boot/i386/Makefile.inc (working copy) > @@ -5,12 +5,13 @@ > BINDIR?= /boot > > LOADER_ADDRESS?=0x200000 > -CFLAGS+= -ffreestanding -mpreferred-stack-boundary=2 \ > +CFLAGS+= -march=i486 -ffreestanding -mpreferred-stack-boundary=2 \ > -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -msoft-float > +NO_CPU_CFLAGS= > LDFLAGS+= -nostdlib > > .if ${MACHINE_CPUARCH} == "amd64" > -CFLAGS+= -m32 -march=i386 > +CFLAGS+= -m32 > ACFLAGS+= -m32 > LDFLAGS+= -m elf_i386_fbsd > AFLAGS+= --32 -- Andriy Gapon