From patchwork Wed Nov 9 20:01:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Frysinger X-Patchwork-Id: 60300 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 9A008388457A for ; Wed, 9 Nov 2022 20:02:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9A008388457A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1668024146; bh=7TcormqpFJxtaY7C+cR0YBsLudA68zwhzu9wd19PBA8=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=sBA3MS25hkcmFXbxI/+wcAhR9I2iiI5r+wvQ64/cmWef+Wg3JBKRUMJIC366Zml// 75wRuSEFR21l2HRmSwJg9icFzy+P7BGbEKS3IagLolJdQnpFVMCdrotJLefL/TUCtx tikkjnG+jFyXGrduQboynjR025Hmt3WQzTFCAkFw= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp.gentoo.org (smtp.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) by sourceware.org (Postfix) with ESMTP id 8922E3858D38 for ; Wed, 9 Nov 2022 20:01:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8922E3858D38 Received: by smtp.gentoo.org (Postfix, from userid 559) id 27A03340E7F; Wed, 9 Nov 2022 20:01:38 +0000 (UTC) To: gdb-patches@sourceware.org Subject: [PATCH 4/7] sim: ppc: collapse is_readonly & length switch tables heavily Date: Thu, 10 Nov 2022 03:01:23 +0700 Message-Id: <20221109200126.21090-4-vapier@gentoo.org> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221109200126.21090-1-vapier@gentoo.org> References: <20221109200126.21090-1-vapier@gentoo.org> MIME-Version: 1.0 X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, SPF_HELO_PASS, 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: Mike Frysinger via Gdb-patches From: Mike Frysinger Reply-To: Mike Frysinger Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" Since we know we'll return 0 by default, we don't have to output case statements for readonly or length fields whose values are also zero. This is the most common case by far and thus generates a much smaller switch table in the end. --- sim/ppc/dgen.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/sim/ppc/dgen.c b/sim/ppc/dgen.c index d2ea922ffc91..d772771b9fa7 100644 --- a/sim/ppc/dgen.c +++ b/sim/ppc/dgen.c @@ -238,14 +238,22 @@ gen_spreg_c(spreg_table *table, lf *file) spreg_table_entry *entry; lf_printf(file, " switch (spr) {\n"); for (entry = table->sprs; entry != NULL; entry = entry->next) { - lf_printf(file, " case %d:\n", entry->spreg_nr); - if (strcmp(*attribute, "is_valid") == 0) + if (strcmp(*attribute, "is_valid") == 0) { + lf_printf(file, " case %d:\n", entry->spreg_nr); /* No return -- see below. */; - else if (strcmp(*attribute, "is_readonly") == 0) - lf_printf(file, " return %d;\n", entry->is_readonly); - else if (strcmp(*attribute, "length") == 0) - lf_printf(file, " return %d;\n", entry->length); - else + } else if (strcmp(*attribute, "is_readonly") == 0) { + /* Since we return 0 by default, only output non-zero entries. */ + if (entry->is_readonly) { + lf_printf(file, " case %d:\n", entry->spreg_nr); + lf_printf(file, " return %d;\n", entry->is_readonly); + } + } else if (strcmp(*attribute, "length") == 0) { + /* Since we return 0 by default, only output non-zero entries. */ + if (entry->length) { + lf_printf(file, " case %d:\n", entry->spreg_nr); + lf_printf(file, " return %d;\n", entry->length); + } + } else ASSERT(0); } /* Output a single return for is_valid. */