From patchwork Wed Feb 13 15:53:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Palmer Dabbelt X-Patchwork-Id: 10810239 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D9D06139A for ; Wed, 13 Feb 2019 15:59:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C77722D430 for ; Wed, 13 Feb 2019 15:59:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB7252DABD; Wed, 13 Feb 2019 15:59:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5880A2D430 for ; Wed, 13 Feb 2019 15:59:21 +0000 (UTC) Received: from localhost ([127.0.0.1]:59100 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gtwwS-0004rH-Ku for patchwork-qemu-devel@patchwork.kernel.org; Wed, 13 Feb 2019 10:59:20 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59315) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gtwso-0001PA-Js for qemu-devel@nongnu.org; Wed, 13 Feb 2019 10:55:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gtwsc-0001v1-CZ for qemu-devel@nongnu.org; Wed, 13 Feb 2019 10:55:26 -0500 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]:39802) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gtwsU-0000qW-L1 for qemu-devel@nongnu.org; Wed, 13 Feb 2019 10:55:16 -0500 Received: by mail-pf1-x432.google.com with SMTP id f132so1323377pfa.6 for ; Wed, 13 Feb 2019 07:54:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=subject:date:message-id:cc:from:to; bh=smx3OqeB2JTeh9mGnu95iZWpQffS83tmuMIb87jUJtU=; b=F4dR0H1h58Zed9CMiwyTLHTiMHl0+VnWOZxOMju7wEz3L5xHFgwLzD5knnMbXNsrC6 xqskz1wrNCyGOSqWI8nB/V7PLyQXgQFsWqBaTbdduIlk7l/zKuZF75hkdN4zobxcpq1z qGPUjpMrEnkgS2JYoxLtPs59fj47fRhpZymPP7uKmOXeIGAIMSdukSqWRj6J9u8Gmj1C GJECpEgHVA28n3Ce9TZY7p6VmNmLQJZsf6sKuHzTKnX/pjv8esI4s3jC6ETnwa0RypNt p9JOxohrJZ0ybjKW2K3PM2OVgRZxYX/tfgUlG3xpg31dvq0V2iHT1EXVXXxc8NBplScK sO1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:date:message-id:cc:from:to; bh=smx3OqeB2JTeh9mGnu95iZWpQffS83tmuMIb87jUJtU=; b=RKAO388wmdzTMvVlYGcIqf2whsZjzgAcjO+GkZFgG8m/EZ5Znzp/vcByXQmOR2Q0GE ZusmX2mE4M6RDC313ElYj9PXqaGL5UxzvnFukiooQu/z3Fq8VkuUEY+d8r/hRsL21tnt rdRmVyRYo/N5CWxCK9xjVFd1l++XHoPfJt+2Wx3emlwvRa8xfO5/KqmauJq2jtiXw8E/ 9tcRDX/pARGM17pmOSitPbyU6pi6OGLEZcUnayS0jMxr1vJVdZ8Bcy9LXpCfkpvzgqsn U3pDFvGQpi1kZgcceV2s8MhlTOwxlDw56RnRJyYzpC7sAVccgEy404Th/uAeH/fJLzPl Hd4A== X-Gm-Message-State: AHQUAubfSigcvm0PaRjwgkR9i0Lfpjyei5hz0G1f8oztSZDtcA1qo3Dk DqzrY24dCIv7ay785ElP3BaNDSDl+7k= X-Google-Smtp-Source: AHgI3IZXliVQTlX1Oy3LR4XQPBbXGIHI7kFqLOwOzGHrCVEiddBebmCKQ24phP4Xw6pHBUAeCPTOQg== X-Received: by 2002:a63:5518:: with SMTP id j24mr1058334pgb.208.1550073276519; Wed, 13 Feb 2019 07:54:36 -0800 (PST) Received: from localhost ([12.206.222.5]) by smtp.gmail.com with ESMTPSA id 125sm21327883pfg.39.2019.02.13.07.54.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 13 Feb 2019 07:54:35 -0800 (PST) Date: Wed, 13 Feb 2019 07:53:39 -0800 Message-Id: <20190213155414.22285-1-palmer@sifive.com> X-Mailer: git-send-email 2.18.1 From: Palmer Dabbelt To: qemu-riscv@nongnu.org X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::432 Subject: [Qemu-devel] [PATCH v7 00/35] target/riscv: Convert to decodetree 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: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Palmer: I caused some merge conflicts in Bastian's patch set so I figured I'd attempt to clean these up. As far as I'm concerned v6 was good to go, but since the merge conflicts were fairly extensive (if somewhat mechanical) I'd like to pass the baton back to Bastian here for at least a sanity check. Hi, this patchset converts the RISC-V decoder to decodetree in four major steps: 1) Convert 32-bit instructions to decodetree [Patch 1-16]: Many of the gen_* functions are called by the decode functions for 16-bit and 32-bit functions. If we move translation code from the gen_* functions to the generated trans_* functions of decode-tree, we get a lot of duplication. Therefore, we mostly generate calls to the old gen_* function which are properly replaced after step 2). Each of the trans_ functions are grouped into files corresponding to their ISA extension, e.g. addi which is in RV32I is translated in the file 'trans_rvi.inc.c'. 2) Convert 16-bit instructions to decodetree [Patch 17-19]: All 16 bit instructions have a direct mapping to a 32 bit instruction. Thus, we convert the arguments in the 16 bit trans_ function to the arguments of the corresponding 32 bit instruction and call the 32 bit trans_ function. 3) Remove old manual decoding in gen_* function [Patch 20-30]: this move all manual translation code into the trans_* instructions of decode tree, such that we can remove the old decode_* functions. 4) Simplify RVC by reusing as much as possible from the RVG decoder as suggested by Richard. [Patch 31-35] full tree available at https://github.com/palmer-dabbelt/qemu/tree/riscv-dt-v7 Cheers, Bastian v6 -> v7: - Rebased on top of riscv-for-master-4.0-sf1, which contains a refactoring of the original translation code. - Added handling of mstatus.fs to the floating-point routines. v5 -> v6: - fixed funky indentation Tested-by: Bastian Koppelmann