From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CB706C433E0 for ; Fri, 12 Mar 2021 19:26:25 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 25ACC64F4F for ; Fri, 12 Mar 2021 19:26:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 25ACC64F4F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=nocrew.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:40338 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lKnQW-0005qm-86 for qemu-devel@archiver.kernel.org; Fri, 12 Mar 2021 14:26:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:45756) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKmSP-0006cb-6O for qemu-devel@nongnu.org; Fri, 12 Mar 2021 13:24:17 -0500 Received: from pio-pvt-msa1.bahnhof.se ([79.136.2.40]:60226) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKmSM-00028w-MV for qemu-devel@nongnu.org; Fri, 12 Mar 2021 13:24:16 -0500 Received: from localhost (localhost [127.0.0.1]) by pio-pvt-msa1.bahnhof.se (Postfix) with ESMTP id 9D0CC3F969; Fri, 12 Mar 2021 19:24:11 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at bahnhof.se Received: from pio-pvt-msa1.bahnhof.se ([127.0.0.1]) by localhost (pio-pvt-msa1.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NFOSDUQj2EDf; Fri, 12 Mar 2021 19:24:10 +0100 (CET) Received: by pio-pvt-msa1.bahnhof.se (Postfix) with ESMTPA id 0744C3F88C; Fri, 12 Mar 2021 19:24:08 +0100 (CET) Date: Fri, 12 Mar 2021 19:24:08 +0100 From: Fredrik Noring To: "Maciej W. Rozycki" Subject: Re: [RFC PATCH 32/42] docker: Add gentoo-mipsr5900el-cross image Message-ID: References: <20210214175912.732946-1-f4bug@amsat.org> <20210214175912.732946-33-f4bug@amsat.org> <20210215115957.GG1542881@redhat.com> <21217ef4-91d8-6877-5d78-bb78e00773d8@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Received-SPF: softfail client-ip=79.136.2.40; envelope-from=noring@nocrew.org; helo=pio-pvt-msa1.bahnhof.se X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Aleksandar Rikalo , Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= , Richard Henderson , Philippe =?utf-8?Q?Mathieu-Daud=C3=A9?= , qemu-devel@nongnu.org, Thomas Huth , Alex =?utf-8?Q?Benn=C3=A9e?= , Aurelien Jarno , Laurent Vivier Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" On Friday, 12 March 2021, Maciej W. Rozycki wrote: > On Fri, 12 Mar 2021, Philippe Mathieu-Daudé wrote: > > > >>> Is there any way we can do this with a distro that isn't Gentoo > > >>> so that we can get a container build that is fast enough to be > > >>> useful for CI ? > > > > Using the Debian cross image I get: > > > > /home/phil/source/qemu/tests/docker/docker.py --engine auto cc --cc > > mips64el-linux-gnuabi64-gcc -i qemu/debian-mips64el-cross -s > > /home/phil/source/qemu -- -Wall -Werror -O0 -g -fno-strict-aliasing > > -mabi=n32 -march=r5900 > > /home/phil/source/qemu/tests/tcg/mips/test-r5900-dmult.c -o > > test-r5900-dmult -static > > cc1: error: unsupported combination: -march=r5900 -mhard-float > > -mdouble-float > > > > No clue what is setting '-mhard-float -mdouble-float' yet. > > The R5900 has an FPU that only supports the single floating-point format. > It's also not an IEEE 754 format. The Linux kernel ABI does support the > double and also the single floating-point format, both compliant with IEEE > 754. > > In the absence of a suitable FPU emulation code included with the kernel > will handle the missing instructions (you can use the `nofpu' kernel > parameter to force that in the presence of an FPU too). Beware however > that a recent change to the Linux kernel made FPU emulation code optional > to suit some deeply embedded applications known never to use FPU machine > instructions. > > NB the presence of emulation is always required for MIPS ISA compliance > if FPU machine instructions are ever to be used in a given application, > because operations are allowed to trap regardless and rely on emulation. > > I don't know what you are trying to achieve, I believe Philippe is trying to compile https://lists.gnu.org/archive/html/qemu-devel/2021-03/msg04565.html testing this: The R5900 reports itself as MIPS III but does not implement DMULT. Verify that DMULT is emulated properly in user mode by multiplying two 64-bit numbers to produce a 128-bit number. with this piece of code (notice the mips3 ISA directive for DMULT): /* * Test DMULT. */ #include #include #include struct hi_lo { int64_t hi; uint64_t lo; }; static struct hi_lo dmult(int64_t rs, int64_t rt) { int64_t hi; uint64_t lo; /* * The R5900 reports itself as MIPS III but does not implement DMULT. * Verify that DMULT is emulated properly in user mode. */ __asm__ __volatile__ ( " .set mips3\n" " dmult %2, %3\n" " mfhi %0\n" " mflo %1\n" : "=r" (hi), "=r" (lo) : "r" (rs), "r" (rt)); return (struct hi_lo) { .hi = hi, .lo = lo }; } int main() { /* Verify that multiplying two 64-bit numbers yields a 128-bit number. */ struct hi_lo r = dmult(2760727302517, 5665449960167); assert(r.hi == 847887); assert(r.lo == 7893651516417804947); return 0; } > but your two options to choose from are: > > 1. Build for the soft-float ABI (`-msoft-float') where any FP calculations > are compiled such as to be made by the CPU using integer arithmetic. > > 2. Build for a generic MIPS ISA, for the R5900/n32 that would be MIPS III > (`-march=mips3'), and rely on the kernel FPU emulation. Note that some > integer MIPS III operations are missing too from the R5900 and have to > be emulated by the kernel for MIPS/Linux n32 psABI compliance (an > implementation can be pinched from an old libgcc version that was still > under GNU GPLv2 or another algorithm reused, e.g. my `__div64_32' piece > easily adapted). So qemu/tests/tcg/mips/Makefile.target is patched with # r5900 is only 64 bit little-endian ifneq ($(findstring 64el,$(TARGET_NAME)),) MIPS_TESTS += test-r5900-dmult test-r5900-dmult: CFLAGS += -mabi=n32 -march=r5900 endif I didn't have issues with the -mhard-float -mdouble-float flags at the time, and I didn't use mips64el-linux-gnuabi64-gcc for Debian. Fredrik