From patchwork Wed May 16 15:52:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 136019 Delivered-To: patch@linaro.org Received: by 2002:a2e:9706:0:0:0:0:0 with SMTP id r6-v6csp1104336lji; Wed, 16 May 2018 08:59:06 -0700 (PDT) X-Google-Smtp-Source: AB8JxZplMZ7EanKmXXlKDiSka2r3hlaFvJeb//QrKhqsFmUVFgIoLTt6Ni590jWuBUrWOobs2Gfv X-Received: by 2002:ac8:1663:: with SMTP id x32-v6mr1450316qtk.326.1526486346480; Wed, 16 May 2018 08:59:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526486346; cv=none; d=google.com; s=arc-20160816; b=x++IyWp2tbDcc68o/QPUJg25yIpOx4d3WcFRQRrG/uQohjTiBnofDvQ5fOVgF8D0ZY msy6CDcuzDl1nocjCFtEjdaJnm54emOPuEUhseer1moPZIKoKZEPs6lSexgz+8+upYvr nXWMfTWuQ2gYTZbWPsy5ooN/OJmGaDdPwFv4XE2eXztGbNwDssDGmm5Xy8yL++D6wjZQ 68oNAsweDsv7VTBusrq2Mdslr3F4lH8MxV1vc30bFv58SwkqkINiPLL4VZWWh6/lr8Nz AiiIrNkVKbAKTc3FmZz7nOrEoEXR4k+JjYXOwSoVovPA0KILrTBeoS1XLNdLvJrQtC5R HGew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=AwjiM5r4GwDBOEYqDQfDwjPqxnxEcPVFlhKq+cNRwBA=; b=NeOXV534QnkWgPVqPbHW0zookEwQQovAOKsrg6zHAjemVi0XVIc7NvrmG7kwh9UEws hs16ClzewTguc9n4x6qyczZYQLlPhbftSb99bC0qSF9YEoIXnG6YwxqxqjnhT2ZG18fe A3QRaTYkAIUzIOLKbV0weqZYngb/5+UHVNAv/qkXTmsyFCnXiQYLpKoVhf5NMuLQxSwF qa3hfqNTwnxEyM6vnK2UhcGgiL7qG/y1pxZNz47kXxAPC5zEwpYeOD5XKi9gax5V4AxM 3cjpAbgc+DwgKxucSr4W/3ZpV/2Ps+o1ENXDG5fxoBKhJ+brUOGYesdIcxk2zQy+1CvS IAsg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=I1le5JaD; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id w13-v6si2893087qto.314.2018.05.16.08.59.06 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 16 May 2018 08:59:06 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=I1le5JaD; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:53017 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fIypV-00080e-UF for patch@linaro.org; Wed, 16 May 2018 11:59:05 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41919) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fIyji-0004SQ-6q for qemu-devel@nongnu.org; Wed, 16 May 2018 11:53:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fIyje-00053g-8k for qemu-devel@nongnu.org; Wed, 16 May 2018 11:53:06 -0400 Received: from mail-pl0-x236.google.com ([2607:f8b0:400e:c01::236]:40732) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fIyje-00053O-2g for qemu-devel@nongnu.org; Wed, 16 May 2018 11:53:02 -0400 Received: by mail-pl0-x236.google.com with SMTP id t12-v6so667281plo.7 for ; Wed, 16 May 2018 08:53:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=AwjiM5r4GwDBOEYqDQfDwjPqxnxEcPVFlhKq+cNRwBA=; b=I1le5JaD0d7zxjiJ9JY3ZO6o/yyn1cYCUPNIL0aP4zD0fXVuYchru73hKxIk0a7OtB 66n9HZBtJnFtNwoX0d8cLdqGM6nO8RfnEktoSruesIaaiGkAiSh0eNoEZmZIAwijXmOh XbJcJpiFcwPDMio2wZahMlu+yz+9O+CKLhRi4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AwjiM5r4GwDBOEYqDQfDwjPqxnxEcPVFlhKq+cNRwBA=; b=TDPnqceE8uUhEA7GJs1onwH7YPRe9OM7Sl5hvUZEqsYWXvdItPvfQeqJHcnlr6cbuT j0uN2QjHV6Aoq0tsFTQBhygVdE88TYdlD9kID0Geer69j6yubhQYVBF7ssD6ZUcYGiof iBYFKDTcFAygn/L/+FnJqBgEfSar+mZ3+KOT/GRsuTSYOfaVf0pfgGG84C56dSUn0+Hq Hvozbx7mcs+MwoAT5WlBc1ifckQ7iyzebzluruOn4w2Z6YqU4MC+dhXs5amaw0Dq0DWq +XGcqv7eme+mtJAezXfe5G04GLOExXToQVWnPkUZpMQvduBLRmb69Necg35MQBbtUgkG EQ/Q== X-Gm-Message-State: ALKqPweVNLJNmfNkF/5tZ+N/pL7/es53JI/k0LI7ZH4KgH7ZSFTuhzN4 eQUmSEPrahYga1o5OJ9Mc+tQ/eMG6Sw= X-Received: by 2002:a17:902:d681:: with SMTP id v1-v6mr1467232ply.16.1526485980638; Wed, 16 May 2018 08:53:00 -0700 (PDT) Received: from cloudburst.twiddle.net (97-113-2-170.tukw.qwest.net. [97.113.2.170]) by smtp.gmail.com with ESMTPSA id c3-v6sm4966632pfn.62.2018.05.16.08.52.59 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 16 May 2018 08:52:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 16 May 2018 08:52:25 -0700 Message-Id: <20180516155243.16937-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180516155243.16937-1-richard.henderson@linaro.org> References: <20180516155243.16937-1-richard.henderson@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c01::236 Subject: [Qemu-devel] [PULL 10/28] target/arm: squash FZ16 behaviour for conversions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Alex Bennée The ARM ARM specifies FZ16 is suppressed for conversions. Rather than pushing this logic into the softfloat code we can simply save the FZ state and temporarily disable it for the softfloat call. Reviewed-by: Peter Maydell Signed-off-by: Alex Bennée Signed-off-by: Richard Henderson --- target/arm/helper.c | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) -- 2.17.0 diff --git a/target/arm/helper.c b/target/arm/helper.c index 1762042fc7..238a3ceba8 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -11542,22 +11542,54 @@ uint32_t HELPER(set_neon_rmode)(uint32_t rmode, CPUARMState *env) /* Half precision conversions. */ float32 HELPER(vfp_fcvt_f16_to_f32)(float16 a, void *fpstp, uint32_t ahp_mode) { - return float16_to_float32(a, !ahp_mode, fpstp); + /* Squash FZ16 to 0 for the duration of conversion. In this case, + * it would affect flushing input denormals. + */ + float_status *fpst = fpstp; + flag save = get_flush_inputs_to_zero(fpst); + set_flush_inputs_to_zero(false, fpst); + float32 r = float16_to_float32(a, !ahp_mode, fpst); + set_flush_inputs_to_zero(save, fpst); + return r; } float16 HELPER(vfp_fcvt_f32_to_f16)(float32 a, void *fpstp, uint32_t ahp_mode) { - return float32_to_float16(a, !ahp_mode, fpstp); + /* Squash FZ16 to 0 for the duration of conversion. In this case, + * it would affect flushing output denormals. + */ + float_status *fpst = fpstp; + flag save = get_flush_to_zero(fpst); + set_flush_to_zero(false, fpst); + float16 r = float32_to_float16(a, !ahp_mode, fpst); + set_flush_to_zero(save, fpst); + return r; } float64 HELPER(vfp_fcvt_f16_to_f64)(float16 a, void *fpstp, uint32_t ahp_mode) { - return float16_to_float64(a, !ahp_mode, fpstp); + /* Squash FZ16 to 0 for the duration of conversion. In this case, + * it would affect flushing input denormals. + */ + float_status *fpst = fpstp; + flag save = get_flush_inputs_to_zero(fpst); + set_flush_inputs_to_zero(false, fpst); + float64 r = float16_to_float64(a, !ahp_mode, fpst); + set_flush_inputs_to_zero(save, fpst); + return r; } float16 HELPER(vfp_fcvt_f64_to_f16)(float64 a, void *fpstp, uint32_t ahp_mode) { - return float64_to_float16(a, !ahp_mode, fpstp); + /* Squash FZ16 to 0 for the duration of conversion. In this case, + * it would affect flushing output denormals. + */ + float_status *fpst = fpstp; + flag save = get_flush_to_zero(fpst); + set_flush_to_zero(false, fpst); + float16 r = float64_to_float16(a, !ahp_mode, fpst); + set_flush_to_zero(save, fpst); + return r; } #define float32_two make_float32(0x40000000)