From patchwork Fri Mar 3 21:12:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 65990 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EFC5D3857C55 for ; Fri, 3 Mar 2023 21:12:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EFC5D3857C55 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1677877972; bh=tGe8mtBhieYS86P7T55DZHW8fV2TWpZQ79ygP2AgI/4=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=o4ZqszzxBgnWoBDccCJ2MObWVfTSnXL2xeqO5LqoWswZNxsqW8aPGTw2NuT7DSpfI jCwklat4hUFRxGX4xwyJ87useWZTwPC7jXNswxyKgDq8HClN+zQPMWwdRfc3Y3oSr3 U2KDOxtl7Wl2u+L5gcnWeeQNQiQKmcH5p4D16sDU= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x132.google.com (mail-il1-x132.google.com [IPv6:2607:f8b0:4864:20::132]) by sourceware.org (Postfix) with ESMTPS id 9FD153858CDB for ; Fri, 3 Mar 2023 21:12:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9FD153858CDB Received: by mail-il1-x132.google.com with SMTP id k9so2061487ilu.13 for ; Fri, 03 Mar 2023 13:12:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1677877940; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tGe8mtBhieYS86P7T55DZHW8fV2TWpZQ79ygP2AgI/4=; b=VhngNbc2idtvzZr078Qq0yBG07Dcy+P9lLPIWw0NToW+6pkRAT7pEGzGxw7qmWV7pA H1DqB55lR5wB2jQVNRo9Ntsv+zOfynbOPJVndtrESBwHnjK2opeXd6MmXVESIV83+rUA G7SsOD4dgz+GkmBoMN7ecG/4zO/zd0MF3/lLcJ+QmIrJ6gF1sHocVfmeWuXrsQlpA2L5 EFwfFttL0sg+0o767lvQgawOqJMw+g+me700qs5ONU4i/D4YjoHdFIISQZdzndjAjRps Z979+p5IlijSJBRW2ZcX0Fp2t7x9YsrZ/Tj9A+Nmpx6F2Fmqkp583sX+uwtuJ1jDn78V TsNA== X-Gm-Message-State: AO0yUKV/eBHW1BhY09dCUxQkYIVVcCHkhD3eOCTrYFBQPXwIRmE7yZ36 1bXO4+8HfmEcbaYr/sBwNx/KLtLDx1rrJHmsWKY= X-Google-Smtp-Source: AK7set/J5x5Zgjy6C2s+XrAf9tpc2AFnKj0Ux3/OXk9C/hjQbpdcbxMyx7++XLZS5wt05ZCBPhRnbg== X-Received: by 2002:a92:c546:0:b0:30f:3d9e:f80 with SMTP id a6-20020a92c546000000b0030f3d9e0f80mr2867632ilj.25.1677877939988; Fri, 03 Mar 2023 13:12:19 -0800 (PST) Received: from localhost.localdomain (75-166-130-93.hlrn.qwest.net. [75.166.130.93]) by smtp.gmail.com with ESMTPSA id g8-20020a925208000000b00313b281ecd2sm867988ilb.70.2023.03.03.13.12.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Mar 2023 13:12:19 -0800 (PST) To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 2/8] Avoid a copy in gdb_mpz::safe_export Date: Fri, 3 Mar 2023 14:12:01 -0700 Message-Id: <20230303211207.1053037-3-tromey@adacore.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230303211207.1053037-1-tromey@adacore.com> References: <20230303211207.1053037-1-tromey@adacore.com> MIME-Version: 1.0 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Tom Tromey via Gdb-patches From: Tom Tromey Reply-To: Tom Tromey Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" Currently, gdb_mpz::safe_export will always make a copy of *this. However, this copy isn't always needed. This patch makes this code slightly more efficient, by avoiding the copy when possible. --- gdb/gmp-utils.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/gdb/gmp-utils.c b/gdb/gmp-utils.c index d134bc32a1d..57f5f9766b9 100644 --- a/gdb/gmp-utils.c +++ b/gdb/gmp-utils.c @@ -81,7 +81,8 @@ gdb_mpz::safe_export (gdb::array_view buf, { gdb_assert (buf.size () > 0); - if (mpz_sgn (m_val) == 0) + int sign = mpz_sgn (m_val); + if (sign == 0) { /* Our value is zero, so no need to call mpz_export to do the work, especially since mpz_export's documentation explicitly says @@ -121,17 +122,16 @@ gdb_mpz::safe_export (gdb::array_view buf, lo.str ().c_str (), hi.str ().c_str ()); - gdb_mpz exported_val (m_val); - - if (mpz_cmp_ui (exported_val.m_val, 0) < 0) + const gdb_mpz *exported_val = this; + gdb_mpz un_signed; + if (sign < 0) { /* mpz_export does not handle signed values, so create a positive value whose bit representation as an unsigned of the same length would be the same as our negative value. */ - gdb_mpz neg_offset; - - mpz_ui_pow_ui (neg_offset.m_val, 2, buf.size () * HOST_CHAR_BIT); - mpz_add (exported_val.m_val, exported_val.m_val, neg_offset.m_val); + gdb_mpz neg_offset = gdb_mpz::pow (2, buf.size () * HOST_CHAR_BIT); + un_signed = *exported_val + neg_offset; + exported_val = &un_signed; } /* Do the export into a buffer allocated by GMP itself; that way, @@ -147,7 +147,7 @@ gdb_mpz::safe_export (gdb::array_view buf, size_t word_countp; gdb::unique_xmalloc_ptr exported (mpz_export (NULL, &word_countp, -1 /* order */, buf.size () /* size */, - endian, 0 /* nails */, exported_val.m_val)); + endian, 0 /* nails */, exported_val->m_val)); gdb_assert (word_countp == 1);