From patchwork Sat Apr 13 05:23:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 788574 Delivered-To: patch@linaro.org Received: by 2002:adf:e6ca:0:b0:346:15ad:a2a with SMTP id y10csp1041160wrm; Fri, 12 Apr 2024 22:25:31 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXbiFrchPu9Bfh8CJFe7ohSaTuhfRIHL36y+I3PtdWKJxuff5KtW6Gw00JI81fDvBlne0ycqMhm0ST2MZY24uqQ X-Google-Smtp-Source: AGHT+IEJfJaFbazun+L25T+3Swk63WKBpYT7w1DlMu10aZfvo9cDFe7qJ5fbC+E4vT69R5QAFgvQ X-Received: by 2002:a05:6214:3211:b0:69b:54b0:2d0c with SMTP id qj17-20020a056214321100b0069b54b02d0cmr6864781qvb.2.1712985931522; Fri, 12 Apr 2024 22:25:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712985931; cv=none; d=google.com; s=arc-20160816; b=N6mXme8ZlXDJmgv++h5uBlqDXlDeUtswYS4F/gT26y2gTPSg1T21p0fYlI7cs0Or/i Ei2yLZMXHLcTq86Pycx69faCJ0SZ2eAKUE32YAoBObSBe4vJLocp31XMfMbpBQw6Vr6A poiJEYhd6eqoX5+Ddo91NC4V4glGBxYssXAjrh82UUxt5HooEyj8amX5x6H0zhEBPCxK b9z0vbXBxn9JlVaPgpukziq5lJ44cP2mAmLZ93cbRaZ3zColqezo66v1IzCNnoxy1WOt pEdAYVeJ4IQkgtoEKVq84BpIhJxJbVOhxkE/ujXCj1HHMga+7a8FvqZCa+boJvtw7Ogd 36yA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=HtyEz9ZqG6bUxigt3H0a/+KeCYzNX8VAHbBRr96gz24=; fh=8mBO+FwhNjUD9ALhUxcYEwIlwc/hLQI6+6+QuDX34lg=; b=IZOmKj22vxfpAKqciBxnhcY5rYv8IlM0QWuBxzizMOhCqggO9vB6B3tMlzCu1mPJcI WpkzcDDIZhaZua8f+GavjM2L17jx//Jwg3vCTGH03bmkbw04WvU8tKsv2MczcZNgR3sx eKJDeoE2kH1pdTnvHCNAHPxTZQZ7kl/SAF9DGnsAu+P2xvvqIhHfI8111vIUDFXzdFMX aGzbGY+LQP4uUgkQ5F/W1f8AGbKubl5e2FQHOf/m08FKfqBLvoT3swd/DKQY8SDDjAlI /M3qXfIu+6b/bMzEC8dt4B51HqCuSecUAeNgiutSXrHDT9ifg2mPsbhmW7IZNMY6NGsU oV7g==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=GQ65+x5V; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id or26-20020a056214469a00b0069b09e8cf4fsi5761844qvb.287.2024.04.12.22.25.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Apr 2024 22:25:31 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=GQ65+x5V; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rvVre-0001tx-8c; Sat, 13 Apr 2024 01:23:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rvVrc-0001t3-C5 for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:44 -0400 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rvVrX-0001cn-P1 for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:44 -0400 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-22ed075a629so906439fac.3 for ; Fri, 12 Apr 2024 22:23:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1712985818; x=1713590618; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HtyEz9ZqG6bUxigt3H0a/+KeCYzNX8VAHbBRr96gz24=; b=GQ65+x5VKwIDuurB3w7tNV+yQn5ws/8Q9EImJOLNLJu5uteHb34VtdKIgnppaTgtgN K/aePfNTysAbXy969wj0l8fts2CEgo0nBdw5LD/9d8ezbpH3mkPDwcKmFMiB3J9ZacpJ Xmo/tJ5JYbIkoSgswdWNSRhry/yFD4Eqqa2Fy/zAar5zbzbsTrYu8TYLzZLJ/A9mAV2a ZsW2gQ22YqMRXhUQXLPj4gvXAdFT4pdi0D67c1mtydvhLB0bKsr42DX6OMsLyWLmOktF T378Jx8Q85WSOwidtfvchm27mCUHA+ASyPDnbLlATrkH+54BgoStYdXadT7eGRMVUZ5z u2TA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712985818; x=1713590618; 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=HtyEz9ZqG6bUxigt3H0a/+KeCYzNX8VAHbBRr96gz24=; b=fL9gzcQDtTTp7FtDEuEmJZGQh+uFA0QBTtdCgaFePAnt89it+Y2iVRD4g7b1ffqa3l NBBmWV/58rzHLGgdywP/OrFDgPmvL+463FKGHT2amkmG3EHzFoiixCh9Ih9CaQprtLW8 KLiEBXNXwOR80NCNCbqmG57RgdHlWnfF1O1RoR1Meft27eIh3trhTKWVMH/tggw6us5d 9WTqc4D28Q4spbCQEEBndcCweKJtE6FkrC6nRYLy9afu7QyQEexbhqOWi4LHVirF6Ml1 k6EnmcyZ1HHMD52SLp/dgv3QPofXc9h/EwiruPUDS/tHW7+5UU/PZZ3J4AXEvVnp8fu+ xMIw== X-Gm-Message-State: AOJu0Yw0lCIcRGb4se7YbPg5/EWHPHwm3Cb3WGXGQdGCHyODjDKStxsT 48cLCVwsmqG24z+cSB5SuMittLz28MSbbuof8IyprNETikOOujvtSb4qACT0CLEncCKsDynKEmU F X-Received: by 2002:a05:6358:690f:b0:186:3ae:e138 with SMTP id d15-20020a056358690f00b0018603aee138mr5060841rwh.25.1712985817107; Fri, 12 Apr 2024 22:23:37 -0700 (PDT) Received: from stoup.. (174-21-72-5.tukw.qwest.net. [174.21.72.5]) by smtp.gmail.com with ESMTPSA id v19-20020a17090abb9300b002a0544b81d6sm3564074pjr.35.2024.04.12.22.23.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Apr 2024 22:23:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: edgar.iglesias@gmail.com, philmd@linaro.org Subject: [PATCH 1/6] disas/cris: Untabify Date: Fri, 12 Apr 2024 22:23:28 -0700 Message-Id: <20240413052333.688151-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240413052333.688151-1-richard.henderson@linaro.org> References: <20240413052333.688151-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2001:4860:4864:20::2a; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Nothing but whitespace changes. Signed-off-by: Richard Henderson --- disas/cris.c | 2266 +++++++++++++++++++++++++------------------------- 1 file changed, 1133 insertions(+), 1133 deletions(-) diff --git a/disas/cris.c b/disas/cris.c index 409a224c5d..d62f9e3264 100644 --- a/disas/cris.c +++ b/disas/cris.c @@ -53,64 +53,64 @@ along with this program; if not, see . */ const struct cris_spec_reg cris_spec_regs[] = { - {"bz", 0, 1, cris_ver_v32p, NULL}, - {"p0", 0, 1, 0, NULL}, - {"vr", 1, 1, 0, NULL}, - {"p1", 1, 1, 0, NULL}, + {"bz", 0, 1, cris_ver_v32p, NULL}, + {"p0", 0, 1, 0, NULL}, + {"vr", 1, 1, 0, NULL}, + {"p1", 1, 1, 0, NULL}, {"pid", 2, 1, cris_ver_v32p, NULL}, - {"p2", 2, 1, cris_ver_v32p, NULL}, + {"p2", 2, 1, cris_ver_v32p, NULL}, {"p2", 2, 1, cris_ver_warning, NULL}, {"srs", 3, 1, cris_ver_v32p, NULL}, - {"p3", 3, 1, cris_ver_v32p, NULL}, + {"p3", 3, 1, cris_ver_v32p, NULL}, {"p3", 3, 1, cris_ver_warning, NULL}, - {"wz", 4, 2, cris_ver_v32p, NULL}, - {"p4", 4, 2, 0, NULL}, + {"wz", 4, 2, cris_ver_v32p, NULL}, + {"p4", 4, 2, 0, NULL}, {"ccr", 5, 2, cris_ver_v0_10, NULL}, - {"exs", 5, 4, cris_ver_v32p, NULL}, + {"exs", 5, 4, cris_ver_v32p, NULL}, {"p5", 5, 2, cris_ver_v0_10, NULL}, - {"p5", 5, 4, cris_ver_v32p, NULL}, - {"dcr0",6, 2, cris_ver_v0_3, NULL}, - {"eda", 6, 4, cris_ver_v32p, NULL}, - {"p6", 6, 2, cris_ver_v0_3, NULL}, - {"p6", 6, 4, cris_ver_v32p, NULL}, + {"p5", 5, 4, cris_ver_v32p, NULL}, + {"dcr0",6, 2, cris_ver_v0_3, NULL}, + {"eda", 6, 4, cris_ver_v32p, NULL}, + {"p6", 6, 2, cris_ver_v0_3, NULL}, + {"p6", 6, 4, cris_ver_v32p, NULL}, {"dcr1/mof", 7, 4, cris_ver_v10p, "Register `dcr1/mof' with ambiguous size specified. Guessing 4 bytes"}, {"dcr1/mof", 7, 2, cris_ver_v0_3, "Register `dcr1/mof' with ambiguous size specified. Guessing 2 bytes"}, - {"mof", 7, 4, cris_ver_v10p, NULL}, - {"dcr1",7, 2, cris_ver_v0_3, NULL}, - {"p7", 7, 4, cris_ver_v10p, NULL}, - {"p7", 7, 2, cris_ver_v0_3, NULL}, - {"dz", 8, 4, cris_ver_v32p, NULL}, - {"p8", 8, 4, 0, NULL}, + {"mof", 7, 4, cris_ver_v10p, NULL}, + {"dcr1",7, 2, cris_ver_v0_3, NULL}, + {"p7", 7, 4, cris_ver_v10p, NULL}, + {"p7", 7, 2, cris_ver_v0_3, NULL}, + {"dz", 8, 4, cris_ver_v32p, NULL}, + {"p8", 8, 4, 0, NULL}, {"ibr", 9, 4, cris_ver_v0_10, NULL}, - {"ebp", 9, 4, cris_ver_v32p, NULL}, - {"p9", 9, 4, 0, NULL}, + {"ebp", 9, 4, cris_ver_v32p, NULL}, + {"p9", 9, 4, 0, NULL}, {"irp", 10, 4, cris_ver_v0_10, NULL}, - {"erp", 10, 4, cris_ver_v32p, NULL}, - {"p10", 10, 4, 0, NULL}, - {"srp", 11, 4, 0, NULL}, - {"p11", 11, 4, 0, NULL}, + {"erp", 10, 4, cris_ver_v32p, NULL}, + {"p10", 10, 4, 0, NULL}, + {"srp", 11, 4, 0, NULL}, + {"p11", 11, 4, 0, NULL}, /* For disassembly use only. Accept at assembly with a warning. */ {"bar/dtp0", 12, 4, cris_ver_warning, "Ambiguous register `bar/dtp0' specified"}, - {"nrp", 12, 4, cris_ver_v32p, NULL}, + {"nrp", 12, 4, cris_ver_v32p, NULL}, {"bar", 12, 4, cris_ver_v8_10, NULL}, - {"dtp0",12, 4, cris_ver_v0_3, NULL}, - {"p12", 12, 4, 0, NULL}, + {"dtp0",12, 4, cris_ver_v0_3, NULL}, + {"p12", 12, 4, 0, NULL}, /* For disassembly use only. Accept at assembly with a warning. */ {"dccr/dtp1",13, 4, cris_ver_warning, "Ambiguous register `dccr/dtp1' specified"}, - {"ccs", 13, 4, cris_ver_v32p, NULL}, + {"ccs", 13, 4, cris_ver_v32p, NULL}, {"dccr",13, 4, cris_ver_v8_10, NULL}, - {"dtp1",13, 4, cris_ver_v0_3, NULL}, - {"p13", 13, 4, 0, NULL}, + {"dtp1",13, 4, cris_ver_v0_3, NULL}, + {"p13", 13, 4, 0, NULL}, {"brp", 14, 4, cris_ver_v3_10, NULL}, - {"usp", 14, 4, cris_ver_v32p, NULL}, - {"p14", 14, 4, cris_ver_v3p, NULL}, - {"usp", 15, 4, cris_ver_v10, NULL}, - {"spc", 15, 4, cris_ver_v32p, NULL}, - {"p15", 15, 4, cris_ver_v10p, NULL}, + {"usp", 14, 4, cris_ver_v32p, NULL}, + {"p14", 14, 4, cris_ver_v3p, NULL}, + {"usp", 15, 4, cris_ver_v10, NULL}, + {"spc", 15, 4, cris_ver_v32p, NULL}, + {"p15", 15, 4, cris_ver_v10p, NULL}, {NULL, 0, 0, cris_ver_version_all, NULL} }; @@ -151,53 +151,53 @@ const struct cris_support_reg cris_support_regs[] = Operand-matching characters: [ ] , space Verbatim. - A The string "ACR" (case-insensitive). - B Not really an operand. It causes a "BDAP -size,SP" prefix to be - output for the PUSH alias-instructions and recognizes a push- - prefix at disassembly. This letter isn't recognized for v32. - Must be followed by a R or P letter. - ! Non-match pattern, will not match if there's a prefix insn. - b Non-matching operand, used for branches with 16-bit - displacement. Only recognized by the disassembler. - c 5-bit unsigned immediate in bits <4:0>. - C 4-bit unsigned immediate in bits <3:0>. + A The string "ACR" (case-insensitive). + B Not really an operand. It causes a "BDAP -size,SP" prefix to be + output for the PUSH alias-instructions and recognizes a push- + prefix at disassembly. This letter isn't recognized for v32. + Must be followed by a R or P letter. + ! Non-match pattern, will not match if there's a prefix insn. + b Non-matching operand, used for branches with 16-bit + displacement. Only recognized by the disassembler. + c 5-bit unsigned immediate in bits <4:0>. + C 4-bit unsigned immediate in bits <3:0>. d At assembly, optionally (as in put other cases before this one) - ".d" or ".D" at the start of the operands, followed by one space - character. At disassembly, nothing. - D General register in bits <15:12> and <3:0>. - f List of flags in bits <15:12> and <3:0>. - i 6-bit signed immediate in bits <5:0>. - I 6-bit unsigned immediate in bits <5:0>. - M Size modifier (B, W or D) for CLEAR instructions. - m Size modifier (B, W or D) in bits <5:4> + ".d" or ".D" at the start of the operands, followed by one space + character. At disassembly, nothing. + D General register in bits <15:12> and <3:0>. + f List of flags in bits <15:12> and <3:0>. + i 6-bit signed immediate in bits <5:0>. + I 6-bit unsigned immediate in bits <5:0>. + M Size modifier (B, W or D) for CLEAR instructions. + m Size modifier (B, W or D) in bits <5:4> N A 32-bit dword, like in the difference between s and y. This has no effect on bits in the opcode. Can also be expressed - as "[pc+]" in input. + as "[pc+]" in input. n As N, but PC-relative (to the start of the instruction). - o [-128..127] word offset in bits <7:1> and <0>. Used by 8-bit - branch instructions. - O [-128..127] offset in bits <7:0>. Also matches a comma and a - general register after the expression, in bits <15:12>. Used - only for the BDAP prefix insn (in v32 the ADDOQ insn; same opcode). - P Special register in bits <15:12>. - p Indicates that the insn is a prefix insn. Must be first - character. + o [-128..127] word offset in bits <7:1> and <0>. Used by 8-bit + branch instructions. + O [-128..127] offset in bits <7:0>. Also matches a comma and a + general register after the expression, in bits <15:12>. Used + only for the BDAP prefix insn (in v32 the ADDOQ insn; same opcode). + P Special register in bits <15:12>. + p Indicates that the insn is a prefix insn. Must be first + character. Q As O, but don't relax; force an 8-bit offset. - R General register in bits <15:12>. - r General register in bits <3:0>. - S Source operand in bit <10> and a prefix; a 3-operand prefix - without side-effect. - s Source operand in bits <10> and <3:0>, optionally with a - side-effect prefix, except [pc] (the name, not R15 as in ACR) - isn't allowed for v32 and higher. + R General register in bits <15:12>. + r General register in bits <3:0>. + S Source operand in bit <10> and a prefix; a 3-operand prefix + without side-effect. + s Source operand in bits <10> and <3:0>, optionally with a + side-effect prefix, except [pc] (the name, not R15 as in ACR) + isn't allowed for v32 and higher. T Support register in bits <15:12>. u 4-bit (PC-relative) unsigned immediate word offset in bits <3:0>. U Relaxes to either u or n, instruction is assumed LAPCQ or LAPC. - Not recognized at disassembly. - x Register-dot-modifier, for example "r5.w" in bits <15:12> and <5:4>. - y Like 's' but do not allow an integer at assembly. - Y The difference s-y; only an integer is allowed. - z Size modifier (B or W) in bit <4>. */ + Not recognized at disassembly. + x Register-dot-modifier, for example "r5.w" in bits <15:12> and <5:4>. + y Like 's' but do not allow an integer at assembly. + Y The difference s-y; only an integer is allowed. + z Size modifier (B or W) in bit <4>. */ /* Please note the order of the opcodes in this table is significant. @@ -216,150 +216,150 @@ const struct cris_support_reg cris_support_regs[] = const struct cris_opcode cris_opcodes[] = { - {"abs", 0x06B0, 0x0940, "r,R", 0, SIZE_NONE, 0, + {"abs", 0x06B0, 0x0940, "r,R", 0, SIZE_NONE, 0, cris_abs_op}, - {"add", 0x0600, 0x09c0, "m r,R", 0, SIZE_NONE, 0, + {"add", 0x0600, 0x09c0, "m r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, - {"add", 0x0A00, 0x01c0, "m s,R", 0, SIZE_FIELD, 0, + {"add", 0x0A00, 0x01c0, "m s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"add", 0x0A00, 0x01c0, "m S,D", 0, SIZE_NONE, + {"add", 0x0A00, 0x01c0, "m S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"add", 0x0a00, 0x05c0, "m S,R,r", 0, SIZE_NONE, + {"add", 0x0a00, 0x05c0, "m S,R,r", 0, SIZE_NONE, cris_ver_v0_10, cris_three_operand_add_sub_cmp_and_or_op}, - {"add", 0x0A00, 0x01c0, "m s,R", 0, SIZE_FIELD, + {"add", 0x0A00, 0x01c0, "m s,R", 0, SIZE_FIELD, cris_ver_v32p, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"addc", 0x0570, 0x0A80, "r,R", 0, SIZE_FIX_32, + {"addc", 0x0570, 0x0A80, "r,R", 0, SIZE_FIX_32, cris_ver_v32p, cris_not_implemented_op}, - {"addc", 0x09A0, 0x0250, "s,R", 0, SIZE_FIX_32, + {"addc", 0x09A0, 0x0250, "s,R", 0, SIZE_FIX_32, cris_ver_v32p, cris_not_implemented_op}, - {"addi", 0x0540, 0x0A80, "x,r,A", 0, SIZE_NONE, + {"addi", 0x0540, 0x0A80, "x,r,A", 0, SIZE_NONE, cris_ver_v32p, cris_addi_op}, - {"addi", 0x0500, 0x0Ac0, "x,r", 0, SIZE_NONE, 0, + {"addi", 0x0500, 0x0Ac0, "x,r", 0, SIZE_NONE, 0, cris_addi_op}, /* This collates after "addo", but we want to disassemble as "addoq", not "addo". */ - {"addoq", 0x0100, 0x0E00, "Q,A", 0, SIZE_NONE, + {"addoq", 0x0100, 0x0E00, "Q,A", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"addo", 0x0940, 0x0280, "m s,R,A", 0, SIZE_FIELD_SIGNED, + {"addo", 0x0940, 0x0280, "m s,R,A", 0, SIZE_FIELD_SIGNED, cris_ver_v32p, cris_not_implemented_op}, /* This must be located after the insn above, lest we misinterpret "addo.b -1,r0,acr" as "addo .b-1,r0,acr". FIXME: Sounds like a parser bug. */ - {"addo", 0x0100, 0x0E00, "O,A", 0, SIZE_NONE, + {"addo", 0x0100, 0x0E00, "O,A", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"addq", 0x0200, 0x0Dc0, "I,R", 0, SIZE_NONE, 0, + {"addq", 0x0200, 0x0Dc0, "I,R", 0, SIZE_NONE, 0, cris_quick_mode_add_sub_op}, - {"adds", 0x0420, 0x0Bc0, "z r,R", 0, SIZE_NONE, 0, + {"adds", 0x0420, 0x0Bc0, "z r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */ - {"adds", 0x0820, 0x03c0, "z s,R", 0, SIZE_FIELD, 0, + {"adds", 0x0820, 0x03c0, "z s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"adds", 0x0820, 0x03c0, "z S,D", 0, SIZE_NONE, + {"adds", 0x0820, 0x03c0, "z S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"adds", 0x0820, 0x07c0, "z S,R,r", 0, SIZE_NONE, + {"adds", 0x0820, 0x07c0, "z S,R,r", 0, SIZE_NONE, cris_ver_v0_10, cris_three_operand_add_sub_cmp_and_or_op}, - {"addu", 0x0400, 0x0be0, "z r,R", 0, SIZE_NONE, 0, + {"addu", 0x0400, 0x0be0, "z r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ - {"addu", 0x0800, 0x03e0, "z s,R", 0, SIZE_FIELD, 0, + {"addu", 0x0800, 0x03e0, "z s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"addu", 0x0800, 0x03e0, "z S,D", 0, SIZE_NONE, + {"addu", 0x0800, 0x03e0, "z S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"addu", 0x0800, 0x07e0, "z S,R,r", 0, SIZE_NONE, + {"addu", 0x0800, 0x07e0, "z S,R,r", 0, SIZE_NONE, cris_ver_v0_10, cris_three_operand_add_sub_cmp_and_or_op}, - {"and", 0x0700, 0x08C0, "m r,R", 0, SIZE_NONE, 0, + {"and", 0x0700, 0x08C0, "m r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, - {"and", 0x0B00, 0x00C0, "m s,R", 0, SIZE_FIELD, 0, + {"and", 0x0B00, 0x00C0, "m s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"and", 0x0B00, 0x00C0, "m S,D", 0, SIZE_NONE, + {"and", 0x0B00, 0x00C0, "m S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"and", 0x0B00, 0x04C0, "m S,R,r", 0, SIZE_NONE, + {"and", 0x0B00, 0x04C0, "m S,R,r", 0, SIZE_NONE, cris_ver_v0_10, cris_three_operand_add_sub_cmp_and_or_op}, - {"andq", 0x0300, 0x0CC0, "i,R", 0, SIZE_NONE, 0, + {"andq", 0x0300, 0x0CC0, "i,R", 0, SIZE_NONE, 0, cris_quick_mode_and_cmp_move_or_op}, - {"asr", 0x0780, 0x0840, "m r,R", 0, SIZE_NONE, 0, + {"asr", 0x0780, 0x0840, "m r,R", 0, SIZE_NONE, 0, cris_asr_op}, - {"asrq", 0x03a0, 0x0c40, "c,R", 0, SIZE_NONE, 0, + {"asrq", 0x03a0, 0x0c40, "c,R", 0, SIZE_NONE, 0, cris_asrq_op}, - {"ax", 0x15B0, 0xEA4F, "", 0, SIZE_NONE, 0, + {"ax", 0x15B0, 0xEA4F, "", 0, SIZE_NONE, 0, cris_ax_ei_setf_op}, /* FIXME: Should use branch #defines. */ - {"b", 0x0dff, 0x0200, "b", 1, SIZE_NONE, 0, + {"b", 0x0dff, 0x0200, "b", 1, SIZE_NONE, 0, cris_sixteen_bit_offset_branch_op}, {"ba", BA_QUICK_OPCODE, - 0x0F00+(0xF-CC_A)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0F00+(0xF-CC_A)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, /* Needs to come after the usual "ba o", which might be relaxed to this one. */ {"ba", BA_DWORD_OPCODE, - 0xffff & (~BA_DWORD_OPCODE), "n", 0, SIZE_FIX_32, + 0xffff & (~BA_DWORD_OPCODE), "n", 0, SIZE_FIX_32, cris_ver_v32p, cris_none_reg_mode_jump_op}, - {"bas", 0x0EBF, 0x0140, "n,P", 0, SIZE_FIX_32, + {"bas", 0x0EBF, 0x0140, "n,P", 0, SIZE_FIX_32, cris_ver_v32p, cris_none_reg_mode_jump_op}, - {"basc", 0x0EFF, 0x0100, "n,P", 0, SIZE_FIX_32, + {"basc", 0x0EFF, 0x0100, "n,P", 0, SIZE_FIX_32, cris_ver_v32p, cris_none_reg_mode_jump_op}, {"bcc", BRANCH_QUICK_OPCODE+CC_CC*0x1000, - 0x0f00+(0xF-CC_CC)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_CC)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, {"bcs", BRANCH_QUICK_OPCODE+CC_CS*0x1000, - 0x0f00+(0xF-CC_CS)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_CS)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, {"bdap", @@ -368,13 +368,13 @@ cris_opcodes[] = cris_bdap_prefix}, {"bdap", - BDAP_QUICK_OPCODE, BDAP_QUICK_Z_BITS, "pO", 0, SIZE_NONE, + BDAP_QUICK_OPCODE, BDAP_QUICK_Z_BITS, "pO", 0, SIZE_NONE, cris_ver_v0_10, cris_quick_mode_bdap_prefix}, {"beq", BRANCH_QUICK_OPCODE+CC_EQ*0x1000, - 0x0f00+(0xF-CC_EQ)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_EQ)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, /* This is deliberately put before "bext" to trump it, even though not @@ -382,396 +382,396 @@ cris_opcodes[] = for v0..v10. */ {"bwf", BRANCH_QUICK_OPCODE+CC_EXT*0x1000, - 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, + 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, cris_ver_v10, cris_eight_bit_offset_branch_op}, {"bext", BRANCH_QUICK_OPCODE+CC_EXT*0x1000, - 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, + 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, cris_ver_v0_3, cris_eight_bit_offset_branch_op}, {"bge", BRANCH_QUICK_OPCODE+CC_GE*0x1000, - 0x0f00+(0xF-CC_GE)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_GE)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, {"bgt", BRANCH_QUICK_OPCODE+CC_GT*0x1000, - 0x0f00+(0xF-CC_GT)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_GT)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, {"bhi", BRANCH_QUICK_OPCODE+CC_HI*0x1000, - 0x0f00+(0xF-CC_HI)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_HI)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, {"bhs", BRANCH_QUICK_OPCODE+CC_HS*0x1000, - 0x0f00+(0xF-CC_HS)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_HS)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, - {"biap", BIAP_OPCODE, BIAP_Z_BITS, "pm r,R", 0, SIZE_NONE, + {"biap", BIAP_OPCODE, BIAP_Z_BITS, "pm r,R", 0, SIZE_NONE, cris_ver_v0_10, cris_biap_prefix}, {"ble", BRANCH_QUICK_OPCODE+CC_LE*0x1000, - 0x0f00+(0xF-CC_LE)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_LE)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, {"blo", BRANCH_QUICK_OPCODE+CC_LO*0x1000, - 0x0f00+(0xF-CC_LO)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_LO)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, {"bls", BRANCH_QUICK_OPCODE+CC_LS*0x1000, - 0x0f00+(0xF-CC_LS)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_LS)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, {"blt", BRANCH_QUICK_OPCODE+CC_LT*0x1000, - 0x0f00+(0xF-CC_LT)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_LT)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, {"bmi", BRANCH_QUICK_OPCODE+CC_MI*0x1000, - 0x0f00+(0xF-CC_MI)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_MI)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, - {"bmod", 0x0ab0, 0x0140, "s,R", 0, SIZE_FIX_32, + {"bmod", 0x0ab0, 0x0140, "s,R", 0, SIZE_FIX_32, cris_ver_sim_v0_10, cris_not_implemented_op}, - {"bmod", 0x0ab0, 0x0140, "S,D", 0, SIZE_NONE, + {"bmod", 0x0ab0, 0x0140, "S,D", 0, SIZE_NONE, cris_ver_sim_v0_10, cris_not_implemented_op}, - {"bmod", 0x0ab0, 0x0540, "S,R,r", 0, SIZE_NONE, + {"bmod", 0x0ab0, 0x0540, "S,R,r", 0, SIZE_NONE, cris_ver_sim_v0_10, cris_not_implemented_op}, {"bne", BRANCH_QUICK_OPCODE+CC_NE*0x1000, - 0x0f00+(0xF-CC_NE)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_NE)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, - {"bound", 0x05c0, 0x0A00, "m r,R", 0, SIZE_NONE, 0, + {"bound", 0x05c0, 0x0A00, "m r,R", 0, SIZE_NONE, 0, cris_two_operand_bound_op}, /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ - {"bound", 0x09c0, 0x0200, "m s,R", 0, SIZE_FIELD, + {"bound", 0x09c0, 0x0200, "m s,R", 0, SIZE_FIELD, cris_ver_v0_10, cris_two_operand_bound_op}, /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ - {"bound", 0x0dcf, 0x0200, "m Y,R", 0, SIZE_FIELD, 0, + {"bound", 0x0dcf, 0x0200, "m Y,R", 0, SIZE_FIELD, 0, cris_two_operand_bound_op}, - {"bound", 0x09c0, 0x0200, "m S,D", 0, SIZE_NONE, + {"bound", 0x09c0, 0x0200, "m S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_two_operand_bound_op}, - {"bound", 0x09c0, 0x0600, "m S,R,r", 0, SIZE_NONE, + {"bound", 0x09c0, 0x0600, "m S,R,r", 0, SIZE_NONE, cris_ver_v0_10, cris_three_operand_bound_op}, {"bpl", BRANCH_QUICK_OPCODE+CC_PL*0x1000, - 0x0f00+(0xF-CC_PL)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_PL)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, - {"break", 0xe930, 0x16c0, "C", 0, SIZE_NONE, + {"break", 0xe930, 0x16c0, "C", 0, SIZE_NONE, cris_ver_v3p, cris_break_op}, {"bsb", BRANCH_QUICK_OPCODE+CC_EXT*0x1000, - 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, + 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE, cris_ver_v32p, cris_eight_bit_offset_branch_op}, - {"bsr", 0xBEBF, 0x4140, "n", 0, SIZE_FIX_32, + {"bsr", 0xBEBF, 0x4140, "n", 0, SIZE_FIX_32, cris_ver_v32p, cris_none_reg_mode_jump_op}, - {"bsrc", 0xBEFF, 0x4100, "n", 0, SIZE_FIX_32, + {"bsrc", 0xBEFF, 0x4100, "n", 0, SIZE_FIX_32, cris_ver_v32p, cris_none_reg_mode_jump_op}, - {"bstore", 0x0af0, 0x0100, "s,R", 0, SIZE_FIX_32, + {"bstore", 0x0af0, 0x0100, "s,R", 0, SIZE_FIX_32, cris_ver_warning, cris_not_implemented_op}, - {"bstore", 0x0af0, 0x0100, "S,D", 0, SIZE_NONE, + {"bstore", 0x0af0, 0x0100, "S,D", 0, SIZE_NONE, cris_ver_warning, cris_not_implemented_op}, - {"bstore", 0x0af0, 0x0500, "S,R,r", 0, SIZE_NONE, + {"bstore", 0x0af0, 0x0500, "S,R,r", 0, SIZE_NONE, cris_ver_warning, cris_not_implemented_op}, - {"btst", 0x04F0, 0x0B00, "r,R", 0, SIZE_NONE, 0, + {"btst", 0x04F0, 0x0B00, "r,R", 0, SIZE_NONE, 0, cris_btst_nop_op}, - {"btstq", 0x0380, 0x0C60, "c,R", 0, SIZE_NONE, 0, + {"btstq", 0x0380, 0x0C60, "c,R", 0, SIZE_NONE, 0, cris_btst_nop_op}, {"bvc", BRANCH_QUICK_OPCODE+CC_VC*0x1000, - 0x0f00+(0xF-CC_VC)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_VC)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, {"bvs", BRANCH_QUICK_OPCODE+CC_VS*0x1000, - 0x0f00+(0xF-CC_VS)*0x1000, "o", 1, SIZE_NONE, 0, + 0x0f00+(0xF-CC_VS)*0x1000, "o", 1, SIZE_NONE, 0, cris_eight_bit_offset_branch_op}, - {"clear", 0x0670, 0x3980, "M r", 0, SIZE_NONE, 0, + {"clear", 0x0670, 0x3980, "M r", 0, SIZE_NONE, 0, cris_reg_mode_clear_op}, - {"clear", 0x0A70, 0x3180, "M y", 0, SIZE_NONE, 0, + {"clear", 0x0A70, 0x3180, "M y", 0, SIZE_NONE, 0, cris_none_reg_mode_clear_test_op}, - {"clear", 0x0A70, 0x3180, "M S", 0, SIZE_NONE, + {"clear", 0x0A70, 0x3180, "M S", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_clear_test_op}, - {"clearf", 0x05F0, 0x0A00, "f", 0, SIZE_NONE, 0, + {"clearf", 0x05F0, 0x0A00, "f", 0, SIZE_NONE, 0, cris_clearf_di_op}, - {"cmp", 0x06C0, 0x0900, "m r,R", 0, SIZE_NONE, 0, + {"cmp", 0x06C0, 0x0900, "m r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, - {"cmp", 0x0Ac0, 0x0100, "m s,R", 0, SIZE_FIELD, 0, + {"cmp", 0x0Ac0, 0x0100, "m s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"cmp", 0x0Ac0, 0x0100, "m S,D", 0, SIZE_NONE, + {"cmp", 0x0Ac0, 0x0100, "m S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"cmpq", 0x02C0, 0x0D00, "i,R", 0, SIZE_NONE, 0, + {"cmpq", 0x02C0, 0x0D00, "i,R", 0, SIZE_NONE, 0, cris_quick_mode_and_cmp_move_or_op}, /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */ - {"cmps", 0x08e0, 0x0300, "z s,R", 0, SIZE_FIELD, 0, + {"cmps", 0x08e0, 0x0300, "z s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"cmps", 0x08e0, 0x0300, "z S,D", 0, SIZE_NONE, + {"cmps", 0x08e0, 0x0300, "z S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ - {"cmpu", 0x08c0, 0x0320, "z s,R" , 0, SIZE_FIELD, 0, + {"cmpu", 0x08c0, 0x0320, "z s,R" , 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"cmpu", 0x08c0, 0x0320, "z S,D", 0, SIZE_NONE, + {"cmpu", 0x08c0, 0x0320, "z S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"di", 0x25F0, 0xDA0F, "", 0, SIZE_NONE, 0, + {"di", 0x25F0, 0xDA0F, "", 0, SIZE_NONE, 0, cris_clearf_di_op}, - {"dip", DIP_OPCODE, DIP_Z_BITS, "ps", 0, SIZE_FIX_32, + {"dip", DIP_OPCODE, DIP_Z_BITS, "ps", 0, SIZE_FIX_32, cris_ver_v0_10, cris_dip_prefix}, - {"div", 0x0980, 0x0640, "m R,r", 0, SIZE_FIELD, 0, + {"div", 0x0980, 0x0640, "m R,r", 0, SIZE_FIELD, 0, cris_not_implemented_op}, - {"dstep", 0x06f0, 0x0900, "r,R", 0, SIZE_NONE, 0, + {"dstep", 0x06f0, 0x0900, "r,R", 0, SIZE_NONE, 0, cris_dstep_logshift_mstep_neg_not_op}, - {"ei", 0x25B0, 0xDA4F, "", 0, SIZE_NONE, 0, + {"ei", 0x25B0, 0xDA4F, "", 0, SIZE_NONE, 0, cris_ax_ei_setf_op}, - {"fidxd", 0x0ab0, 0xf540, "[r]", 0, SIZE_NONE, + {"fidxd", 0x0ab0, 0xf540, "[r]", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"fidxi", 0x0d30, 0xF2C0, "[r]", 0, SIZE_NONE, + {"fidxi", 0x0d30, 0xF2C0, "[r]", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"ftagd", 0x1AB0, 0xE540, "[r]", 0, SIZE_NONE, + {"ftagd", 0x1AB0, 0xE540, "[r]", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"ftagi", 0x1D30, 0xE2C0, "[r]", 0, SIZE_NONE, + {"ftagi", 0x1D30, 0xE2C0, "[r]", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"halt", 0xF930, 0x06CF, "", 0, SIZE_NONE, + {"halt", 0xF930, 0x06CF, "", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"jas", 0x09B0, 0x0640, "r,P", 0, SIZE_NONE, + {"jas", 0x09B0, 0x0640, "r,P", 0, SIZE_NONE, cris_ver_v32p, cris_reg_mode_jump_op}, - {"jas", 0x0DBF, 0x0240, "N,P", 0, SIZE_FIX_32, + {"jas", 0x0DBF, 0x0240, "N,P", 0, SIZE_FIX_32, cris_ver_v32p, cris_reg_mode_jump_op}, - {"jasc", 0x0B30, 0x04C0, "r,P", 0, SIZE_NONE, + {"jasc", 0x0B30, 0x04C0, "r,P", 0, SIZE_NONE, cris_ver_v32p, cris_reg_mode_jump_op}, - {"jasc", 0x0F3F, 0x00C0, "N,P", 0, SIZE_FIX_32, + {"jasc", 0x0F3F, 0x00C0, "N,P", 0, SIZE_FIX_32, cris_ver_v32p, cris_reg_mode_jump_op}, - {"jbrc", 0x69b0, 0x9640, "r", 0, SIZE_NONE, + {"jbrc", 0x69b0, 0x9640, "r", 0, SIZE_NONE, cris_ver_v8_10, cris_reg_mode_jump_op}, - {"jbrc", 0x6930, 0x92c0, "s", 0, SIZE_FIX_32, + {"jbrc", 0x6930, 0x92c0, "s", 0, SIZE_FIX_32, cris_ver_v8_10, cris_none_reg_mode_jump_op}, - {"jbrc", 0x6930, 0x92c0, "S", 0, SIZE_NONE, + {"jbrc", 0x6930, 0x92c0, "S", 0, SIZE_NONE, cris_ver_v8_10, cris_none_reg_mode_jump_op}, - {"jir", 0xA9b0, 0x5640, "r", 0, SIZE_NONE, + {"jir", 0xA9b0, 0x5640, "r", 0, SIZE_NONE, cris_ver_v8_10, cris_reg_mode_jump_op}, - {"jir", 0xA930, 0x52c0, "s", 0, SIZE_FIX_32, + {"jir", 0xA930, 0x52c0, "s", 0, SIZE_FIX_32, cris_ver_v8_10, cris_none_reg_mode_jump_op}, - {"jir", 0xA930, 0x52c0, "S", 0, SIZE_NONE, + {"jir", 0xA930, 0x52c0, "S", 0, SIZE_NONE, cris_ver_v8_10, cris_none_reg_mode_jump_op}, - {"jirc", 0x29b0, 0xd640, "r", 0, SIZE_NONE, + {"jirc", 0x29b0, 0xd640, "r", 0, SIZE_NONE, cris_ver_v8_10, cris_reg_mode_jump_op}, - {"jirc", 0x2930, 0xd2c0, "s", 0, SIZE_FIX_32, + {"jirc", 0x2930, 0xd2c0, "s", 0, SIZE_FIX_32, cris_ver_v8_10, cris_none_reg_mode_jump_op}, - {"jirc", 0x2930, 0xd2c0, "S", 0, SIZE_NONE, + {"jirc", 0x2930, 0xd2c0, "S", 0, SIZE_NONE, cris_ver_v8_10, cris_none_reg_mode_jump_op}, - {"jsr", 0xB9b0, 0x4640, "r", 0, SIZE_NONE, 0, + {"jsr", 0xB9b0, 0x4640, "r", 0, SIZE_NONE, 0, cris_reg_mode_jump_op}, - {"jsr", 0xB930, 0x42c0, "s", 0, SIZE_FIX_32, + {"jsr", 0xB930, 0x42c0, "s", 0, SIZE_FIX_32, cris_ver_v0_10, cris_none_reg_mode_jump_op}, - {"jsr", 0xBDBF, 0x4240, "N", 0, SIZE_FIX_32, + {"jsr", 0xBDBF, 0x4240, "N", 0, SIZE_FIX_32, cris_ver_v32p, cris_none_reg_mode_jump_op}, - {"jsr", 0xB930, 0x42c0, "S", 0, SIZE_NONE, + {"jsr", 0xB930, 0x42c0, "S", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_jump_op}, - {"jsrc", 0x39b0, 0xc640, "r", 0, SIZE_NONE, + {"jsrc", 0x39b0, 0xc640, "r", 0, SIZE_NONE, cris_ver_v8_10, cris_reg_mode_jump_op}, - {"jsrc", 0x3930, 0xc2c0, "s", 0, SIZE_FIX_32, + {"jsrc", 0x3930, 0xc2c0, "s", 0, SIZE_FIX_32, cris_ver_v8_10, cris_none_reg_mode_jump_op}, - {"jsrc", 0x3930, 0xc2c0, "S", 0, SIZE_NONE, + {"jsrc", 0x3930, 0xc2c0, "S", 0, SIZE_NONE, cris_ver_v8_10, cris_none_reg_mode_jump_op}, - {"jsrc", 0xBB30, 0x44C0, "r", 0, SIZE_NONE, + {"jsrc", 0xBB30, 0x44C0, "r", 0, SIZE_NONE, cris_ver_v32p, cris_reg_mode_jump_op}, - {"jsrc", 0xBF3F, 0x40C0, "N", 0, SIZE_FIX_32, + {"jsrc", 0xBF3F, 0x40C0, "N", 0, SIZE_FIX_32, cris_ver_v32p, cris_reg_mode_jump_op}, - {"jump", 0x09b0, 0xF640, "r", 0, SIZE_NONE, 0, + {"jump", 0x09b0, 0xF640, "r", 0, SIZE_NONE, 0, cris_reg_mode_jump_op}, {"jump", - JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS, "s", 0, SIZE_FIX_32, + JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS, "s", 0, SIZE_FIX_32, cris_ver_v0_10, cris_none_reg_mode_jump_op}, {"jump", - JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS, "S", 0, SIZE_NONE, + JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS, "S", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_jump_op}, - {"jump", 0x09F0, 0x060F, "P", 0, SIZE_NONE, + {"jump", 0x09F0, 0x060F, "P", 0, SIZE_NONE, cris_ver_v32p, cris_none_reg_mode_jump_op}, {"jump", JUMP_PC_INCR_OPCODE_V32, - (0xffff & ~JUMP_PC_INCR_OPCODE_V32), "N", 0, SIZE_FIX_32, + (0xffff & ~JUMP_PC_INCR_OPCODE_V32), "N", 0, SIZE_FIX_32, cris_ver_v32p, cris_none_reg_mode_jump_op}, - {"jmpu", 0x8930, 0x72c0, "s", 0, SIZE_FIX_32, + {"jmpu", 0x8930, 0x72c0, "s", 0, SIZE_FIX_32, cris_ver_v10, cris_none_reg_mode_jump_op}, - {"jmpu", 0x8930, 0x72c0, "S", 0, SIZE_NONE, + {"jmpu", 0x8930, 0x72c0, "S", 0, SIZE_NONE, cris_ver_v10, cris_none_reg_mode_jump_op}, - {"lapc", 0x0970, 0x0680, "U,R", 0, SIZE_NONE, + {"lapc", 0x0970, 0x0680, "U,R", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"lapc", 0x0D7F, 0x0280, "dn,R", 0, SIZE_FIX_32, + {"lapc", 0x0D7F, 0x0280, "dn,R", 0, SIZE_FIX_32, cris_ver_v32p, cris_not_implemented_op}, - {"lapcq", 0x0970, 0x0680, "u,R", 0, SIZE_NONE, + {"lapcq", 0x0970, 0x0680, "u,R", 0, SIZE_NONE, cris_ver_v32p, cris_addi_op}, - {"lsl", 0x04C0, 0x0B00, "m r,R", 0, SIZE_NONE, 0, + {"lsl", 0x04C0, 0x0B00, "m r,R", 0, SIZE_NONE, 0, cris_dstep_logshift_mstep_neg_not_op}, - {"lslq", 0x03c0, 0x0C20, "c,R", 0, SIZE_NONE, 0, + {"lslq", 0x03c0, 0x0C20, "c,R", 0, SIZE_NONE, 0, cris_dstep_logshift_mstep_neg_not_op}, - {"lsr", 0x07C0, 0x0800, "m r,R", 0, SIZE_NONE, 0, + {"lsr", 0x07C0, 0x0800, "m r,R", 0, SIZE_NONE, 0, cris_dstep_logshift_mstep_neg_not_op}, - {"lsrq", 0x03e0, 0x0C00, "c,R", 0, SIZE_NONE, 0, + {"lsrq", 0x03e0, 0x0C00, "c,R", 0, SIZE_NONE, 0, cris_dstep_logshift_mstep_neg_not_op}, - {"lz", 0x0730, 0x08C0, "r,R", 0, SIZE_NONE, + {"lz", 0x0730, 0x08C0, "r,R", 0, SIZE_NONE, cris_ver_v3p, cris_not_implemented_op}, - {"mcp", 0x07f0, 0x0800, "P,r", 0, SIZE_NONE, + {"mcp", 0x07f0, 0x0800, "P,r", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"move", 0x0640, 0x0980, "m r,R", 0, SIZE_NONE, 0, + {"move", 0x0640, 0x0980, "m r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, - {"move", 0x0A40, 0x0180, "m s,R", 0, SIZE_FIELD, 0, + {"move", 0x0A40, 0x0180, "m s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"move", 0x0A40, 0x0180, "m S,D", 0, SIZE_NONE, + {"move", 0x0A40, 0x0180, "m S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"move", 0x0630, 0x09c0, "r,P", 0, SIZE_NONE, 0, + {"move", 0x0630, 0x09c0, "r,P", 0, SIZE_NONE, 0, cris_move_to_preg_op}, - {"move", 0x0670, 0x0980, "P,r", 0, SIZE_NONE, 0, + {"move", 0x0670, 0x0980, "P,r", 0, SIZE_NONE, 0, cris_reg_mode_move_from_preg_op}, - {"move", 0x0BC0, 0x0000, "m R,y", 0, SIZE_FIELD, 0, + {"move", 0x0BC0, 0x0000, "m R,y", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"move", 0x0BC0, 0x0000, "m D,S", 0, SIZE_NONE, + {"move", 0x0BC0, 0x0000, "m D,S", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, @@ -780,80 +780,80 @@ cris_opcodes[] = "s,P", 0, SIZE_SPEC_REG, 0, cris_move_to_preg_op}, - {"move", 0x0A30, 0x01c0, "S,P", 0, SIZE_NONE, + {"move", 0x0A30, 0x01c0, "S,P", 0, SIZE_NONE, cris_ver_v0_10, cris_move_to_preg_op}, - {"move", 0x0A70, 0x0180, "P,y", 0, SIZE_SPEC_REG, 0, + {"move", 0x0A70, 0x0180, "P,y", 0, SIZE_SPEC_REG, 0, cris_none_reg_mode_move_from_preg_op}, - {"move", 0x0A70, 0x0180, "P,S", 0, SIZE_NONE, + {"move", 0x0A70, 0x0180, "P,S", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_move_from_preg_op}, - {"move", 0x0B70, 0x0480, "r,T", 0, SIZE_NONE, + {"move", 0x0B70, 0x0480, "r,T", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"move", 0x0F70, 0x0080, "T,r", 0, SIZE_NONE, + {"move", 0x0F70, 0x0080, "T,r", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"movem", 0x0BF0, 0x0000, "R,y", 0, SIZE_FIX_32, 0, + {"movem", 0x0BF0, 0x0000, "R,y", 0, SIZE_FIX_32, 0, cris_move_reg_to_mem_movem_op}, - {"movem", 0x0BF0, 0x0000, "D,S", 0, SIZE_NONE, + {"movem", 0x0BF0, 0x0000, "D,S", 0, SIZE_NONE, cris_ver_v0_10, cris_move_reg_to_mem_movem_op}, - {"movem", 0x0BB0, 0x0040, "s,R", 0, SIZE_FIX_32, 0, + {"movem", 0x0BB0, 0x0040, "s,R", 0, SIZE_FIX_32, 0, cris_move_mem_to_reg_movem_op}, - {"movem", 0x0BB0, 0x0040, "S,D", 0, SIZE_NONE, + {"movem", 0x0BB0, 0x0040, "S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_move_mem_to_reg_movem_op}, - {"moveq", 0x0240, 0x0D80, "i,R", 0, SIZE_NONE, 0, + {"moveq", 0x0240, 0x0D80, "i,R", 0, SIZE_NONE, 0, cris_quick_mode_and_cmp_move_or_op}, - {"movs", 0x0460, 0x0B80, "z r,R", 0, SIZE_NONE, 0, + {"movs", 0x0460, 0x0B80, "z r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */ - {"movs", 0x0860, 0x0380, "z s,R", 0, SIZE_FIELD, 0, + {"movs", 0x0860, 0x0380, "z s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"movs", 0x0860, 0x0380, "z S,D", 0, SIZE_NONE, + {"movs", 0x0860, 0x0380, "z S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"movu", 0x0440, 0x0Ba0, "z r,R", 0, SIZE_NONE, 0, + {"movu", 0x0440, 0x0Ba0, "z r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ - {"movu", 0x0840, 0x03a0, "z s,R", 0, SIZE_FIELD, 0, + {"movu", 0x0840, 0x03a0, "z s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"movu", 0x0840, 0x03a0, "z S,D", 0, SIZE_NONE, + {"movu", 0x0840, 0x03a0, "z S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"mstep", 0x07f0, 0x0800, "r,R", 0, SIZE_NONE, + {"mstep", 0x07f0, 0x0800, "r,R", 0, SIZE_NONE, cris_ver_v0_10, cris_dstep_logshift_mstep_neg_not_op}, - {"muls", 0x0d00, 0x02c0, "m r,R", 0, SIZE_NONE, + {"muls", 0x0d00, 0x02c0, "m r,R", 0, SIZE_NONE, cris_ver_v10p, cris_muls_op}, - {"mulu", 0x0900, 0x06c0, "m r,R", 0, SIZE_NONE, + {"mulu", 0x0900, 0x06c0, "m r,R", 0, SIZE_NONE, cris_ver_v10p, cris_mulu_op}, - {"neg", 0x0580, 0x0A40, "m r,R", 0, SIZE_NONE, 0, + {"neg", 0x0580, 0x0A40, "m r,R", 0, SIZE_NONE, 0, cris_dstep_logshift_mstep_neg_not_op}, - {"nop", NOP_OPCODE, NOP_Z_BITS, "", 0, SIZE_NONE, + {"nop", NOP_OPCODE, NOP_Z_BITS, "", 0, SIZE_NONE, cris_ver_v0_10, cris_btst_nop_op}, @@ -861,124 +861,124 @@ cris_opcodes[] = cris_ver_v32p, cris_btst_nop_op}, - {"not", 0x8770, 0x7880, "r", 0, SIZE_NONE, 0, + {"not", 0x8770, 0x7880, "r", 0, SIZE_NONE, 0, cris_dstep_logshift_mstep_neg_not_op}, - {"or", 0x0740, 0x0880, "m r,R", 0, SIZE_NONE, 0, + {"or", 0x0740, 0x0880, "m r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, - {"or", 0x0B40, 0x0080, "m s,R", 0, SIZE_FIELD, 0, + {"or", 0x0B40, 0x0080, "m s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"or", 0x0B40, 0x0080, "m S,D", 0, SIZE_NONE, + {"or", 0x0B40, 0x0080, "m S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"or", 0x0B40, 0x0480, "m S,R,r", 0, SIZE_NONE, + {"or", 0x0B40, 0x0480, "m S,R,r", 0, SIZE_NONE, cris_ver_v0_10, cris_three_operand_add_sub_cmp_and_or_op}, - {"orq", 0x0340, 0x0C80, "i,R", 0, SIZE_NONE, 0, + {"orq", 0x0340, 0x0C80, "i,R", 0, SIZE_NONE, 0, cris_quick_mode_and_cmp_move_or_op}, - {"pop", 0x0E6E, 0x0191, "!R", 0, SIZE_NONE, + {"pop", 0x0E6E, 0x0191, "!R", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"pop", 0x0e3e, 0x01c1, "!P", 0, SIZE_NONE, + {"pop", 0x0e3e, 0x01c1, "!P", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_move_from_preg_op}, - {"push", 0x0FEE, 0x0011, "BR", 0, SIZE_NONE, + {"push", 0x0FEE, 0x0011, "BR", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"push", 0x0E7E, 0x0181, "BP", 0, SIZE_NONE, + {"push", 0x0E7E, 0x0181, "BP", 0, SIZE_NONE, cris_ver_v0_10, cris_move_to_preg_op}, - {"rbf", 0x3b30, 0xc0c0, "y", 0, SIZE_NONE, + {"rbf", 0x3b30, 0xc0c0, "y", 0, SIZE_NONE, cris_ver_v10, cris_not_implemented_op}, - {"rbf", 0x3b30, 0xc0c0, "S", 0, SIZE_NONE, + {"rbf", 0x3b30, 0xc0c0, "S", 0, SIZE_NONE, cris_ver_v10, cris_not_implemented_op}, - {"rfe", 0x2930, 0xD6CF, "", 0, SIZE_NONE, + {"rfe", 0x2930, 0xD6CF, "", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"rfg", 0x4930, 0xB6CF, "", 0, SIZE_NONE, + {"rfg", 0x4930, 0xB6CF, "", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"rfn", 0x5930, 0xA6CF, "", 0, SIZE_NONE, + {"rfn", 0x5930, 0xA6CF, "", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, - {"ret", 0xB67F, 0x4980, "", 1, SIZE_NONE, + {"ret", 0xB67F, 0x4980, "", 1, SIZE_NONE, cris_ver_v0_10, cris_reg_mode_move_from_preg_op}, - {"ret", 0xB9F0, 0x460F, "", 1, SIZE_NONE, + {"ret", 0xB9F0, 0x460F, "", 1, SIZE_NONE, cris_ver_v32p, cris_reg_mode_move_from_preg_op}, - {"retb", 0xe67f, 0x1980, "", 1, SIZE_NONE, + {"retb", 0xe67f, 0x1980, "", 1, SIZE_NONE, cris_ver_v0_10, cris_reg_mode_move_from_preg_op}, - {"rete", 0xA9F0, 0x560F, "", 1, SIZE_NONE, + {"rete", 0xA9F0, 0x560F, "", 1, SIZE_NONE, cris_ver_v32p, cris_reg_mode_move_from_preg_op}, - {"reti", 0xA67F, 0x5980, "", 1, SIZE_NONE, + {"reti", 0xA67F, 0x5980, "", 1, SIZE_NONE, cris_ver_v0_10, cris_reg_mode_move_from_preg_op}, - {"retn", 0xC9F0, 0x360F, "", 1, SIZE_NONE, + {"retn", 0xC9F0, 0x360F, "", 1, SIZE_NONE, cris_ver_v32p, cris_reg_mode_move_from_preg_op}, - {"sbfs", 0x3b70, 0xc080, "y", 0, SIZE_NONE, + {"sbfs", 0x3b70, 0xc080, "y", 0, SIZE_NONE, cris_ver_v10, cris_not_implemented_op}, - {"sbfs", 0x3b70, 0xc080, "S", 0, SIZE_NONE, + {"sbfs", 0x3b70, 0xc080, "S", 0, SIZE_NONE, cris_ver_v10, cris_not_implemented_op}, {"sa", 0x0530+CC_A*0x1000, - 0x0AC0+(0xf-CC_A)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_A)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"ssb", 0x0530+CC_EXT*0x1000, - 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, + 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, cris_ver_v32p, cris_scc_op}, {"scc", 0x0530+CC_CC*0x1000, - 0x0AC0+(0xf-CC_CC)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_CC)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"scs", 0x0530+CC_CS*0x1000, - 0x0AC0+(0xf-CC_CS)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_CS)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"seq", 0x0530+CC_EQ*0x1000, - 0x0AC0+(0xf-CC_EQ)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_EQ)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, - {"setf", 0x05b0, 0x0A40, "f", 0, SIZE_NONE, 0, + {"setf", 0x05b0, 0x0A40, "f", 0, SIZE_NONE, 0, cris_ax_ei_setf_op}, - {"sfe", 0x3930, 0xC6CF, "", 0, SIZE_NONE, + {"sfe", 0x3930, 0xC6CF, "", 0, SIZE_NONE, cris_ver_v32p, cris_not_implemented_op}, @@ -986,203 +986,203 @@ cris_opcodes[] = disassembly. */ {"swf", 0x0530+CC_EXT*0x1000, - 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, + 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, cris_ver_v10, cris_scc_op}, {"sext", 0x0530+CC_EXT*0x1000, - 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, + 0x0AC0+(0xf-CC_EXT)*0x1000, "r", 0, SIZE_NONE, cris_ver_v0_3, cris_scc_op}, {"sge", 0x0530+CC_GE*0x1000, - 0x0AC0+(0xf-CC_GE)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_GE)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"sgt", 0x0530+CC_GT*0x1000, - 0x0AC0+(0xf-CC_GT)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_GT)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"shi", 0x0530+CC_HI*0x1000, - 0x0AC0+(0xf-CC_HI)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_HI)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"shs", 0x0530+CC_HS*0x1000, - 0x0AC0+(0xf-CC_HS)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_HS)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"sle", 0x0530+CC_LE*0x1000, - 0x0AC0+(0xf-CC_LE)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_LE)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"slo", 0x0530+CC_LO*0x1000, - 0x0AC0+(0xf-CC_LO)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_LO)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"sls", 0x0530+CC_LS*0x1000, - 0x0AC0+(0xf-CC_LS)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_LS)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"slt", 0x0530+CC_LT*0x1000, - 0x0AC0+(0xf-CC_LT)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_LT)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"smi", 0x0530+CC_MI*0x1000, - 0x0AC0+(0xf-CC_MI)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_MI)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"sne", 0x0530+CC_NE*0x1000, - 0x0AC0+(0xf-CC_NE)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_NE)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"spl", 0x0530+CC_PL*0x1000, - 0x0AC0+(0xf-CC_PL)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_PL)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, - {"sub", 0x0680, 0x0940, "m r,R", 0, SIZE_NONE, 0, + {"sub", 0x0680, 0x0940, "m r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, - {"sub", 0x0a80, 0x0140, "m s,R", 0, SIZE_FIELD, 0, + {"sub", 0x0a80, 0x0140, "m s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"sub", 0x0a80, 0x0140, "m S,D", 0, SIZE_NONE, + {"sub", 0x0a80, 0x0140, "m S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"sub", 0x0a80, 0x0540, "m S,R,r", 0, SIZE_NONE, + {"sub", 0x0a80, 0x0540, "m S,R,r", 0, SIZE_NONE, cris_ver_v0_10, cris_three_operand_add_sub_cmp_and_or_op}, - {"subq", 0x0280, 0x0d40, "I,R", 0, SIZE_NONE, 0, + {"subq", 0x0280, 0x0d40, "I,R", 0, SIZE_NONE, 0, cris_quick_mode_add_sub_op}, - {"subs", 0x04a0, 0x0b40, "z r,R", 0, SIZE_NONE, 0, + {"subs", 0x04a0, 0x0b40, "z r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */ - {"subs", 0x08a0, 0x0340, "z s,R", 0, SIZE_FIELD, 0, + {"subs", 0x08a0, 0x0340, "z s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"subs", 0x08a0, 0x0340, "z S,D", 0, SIZE_NONE, + {"subs", 0x08a0, 0x0340, "z S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"subs", 0x08a0, 0x0740, "z S,R,r", 0, SIZE_NONE, + {"subs", 0x08a0, 0x0740, "z S,R,r", 0, SIZE_NONE, cris_ver_v0_10, cris_three_operand_add_sub_cmp_and_or_op}, - {"subu", 0x0480, 0x0b60, "z r,R", 0, SIZE_NONE, 0, + {"subu", 0x0480, 0x0b60, "z r,R", 0, SIZE_NONE, 0, cris_reg_mode_add_sub_cmp_and_or_move_op}, /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */ - {"subu", 0x0880, 0x0360, "z s,R", 0, SIZE_FIELD, 0, + {"subu", 0x0880, 0x0360, "z s,R", 0, SIZE_FIELD, 0, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"subu", 0x0880, 0x0360, "z S,D", 0, SIZE_NONE, + {"subu", 0x0880, 0x0360, "z S,D", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_add_sub_cmp_and_or_move_op}, - {"subu", 0x0880, 0x0760, "z S,R,r", 0, SIZE_NONE, + {"subu", 0x0880, 0x0760, "z S,R,r", 0, SIZE_NONE, cris_ver_v0_10, cris_three_operand_add_sub_cmp_and_or_op}, {"svc", 0x0530+CC_VC*0x1000, - 0x0AC0+(0xf-CC_VC)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_VC)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, {"svs", 0x0530+CC_VS*0x1000, - 0x0AC0+(0xf-CC_VS)*0x1000, "r", 0, SIZE_NONE, 0, + 0x0AC0+(0xf-CC_VS)*0x1000, "r", 0, SIZE_NONE, 0, cris_scc_op}, /* The insn "swapn" is the same as "not" and will be disassembled as such, but the swap* family of mnmonics are generally v8-and-higher only, so count it in. */ - {"swapn", 0x8770, 0x7880, "r", 0, SIZE_NONE, + {"swapn", 0x8770, 0x7880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapw", 0x4770, 0xb880, "r", 0, SIZE_NONE, + {"swapw", 0x4770, 0xb880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapnw", 0xc770, 0x3880, "r", 0, SIZE_NONE, + {"swapnw", 0xc770, 0x3880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapb", 0x2770, 0xd880, "r", 0, SIZE_NONE, + {"swapb", 0x2770, 0xd880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapnb", 0xA770, 0x5880, "r", 0, SIZE_NONE, + {"swapnb", 0xA770, 0x5880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapwb", 0x6770, 0x9880, "r", 0, SIZE_NONE, + {"swapwb", 0x6770, 0x9880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapnwb", 0xE770, 0x1880, "r", 0, SIZE_NONE, + {"swapnwb", 0xE770, 0x1880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapr", 0x1770, 0xe880, "r", 0, SIZE_NONE, + {"swapr", 0x1770, 0xe880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapnr", 0x9770, 0x6880, "r", 0, SIZE_NONE, + {"swapnr", 0x9770, 0x6880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapwr", 0x5770, 0xa880, "r", 0, SIZE_NONE, + {"swapwr", 0x5770, 0xa880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapnwr", 0xd770, 0x2880, "r", 0, SIZE_NONE, + {"swapnwr", 0xd770, 0x2880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapbr", 0x3770, 0xc880, "r", 0, SIZE_NONE, + {"swapbr", 0x3770, 0xc880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapnbr", 0xb770, 0x4880, "r", 0, SIZE_NONE, + {"swapnbr", 0xb770, 0x4880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapwbr", 0x7770, 0x8880, "r", 0, SIZE_NONE, + {"swapwbr", 0x7770, 0x8880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"swapnwbr", 0xf770, 0x0880, "r", 0, SIZE_NONE, + {"swapnwbr", 0xf770, 0x0880, "r", 0, SIZE_NONE, cris_ver_v8p, cris_not_implemented_op}, - {"test", 0x0640, 0x0980, "m D", 0, SIZE_NONE, + {"test", 0x0640, 0x0980, "m D", 0, SIZE_NONE, cris_ver_v0_10, cris_reg_mode_test_op}, - {"test", 0x0b80, 0xf040, "m y", 0, SIZE_FIELD, 0, + {"test", 0x0b80, 0xf040, "m y", 0, SIZE_FIELD, 0, cris_none_reg_mode_clear_test_op}, - {"test", 0x0b80, 0xf040, "m S", 0, SIZE_NONE, + {"test", 0x0b80, 0xf040, "m S", 0, SIZE_NONE, cris_ver_v0_10, cris_none_reg_mode_clear_test_op}, - {"xor", 0x07B0, 0x0840, "r,R", 0, SIZE_NONE, 0, + {"xor", 0x07B0, 0x0840, "r,R", 0, SIZE_NONE, 0, cris_xor_op}, {NULL, 0, 0, NULL, 0, 0, 0, cris_not_implemented_op} @@ -1296,8 +1296,8 @@ static int cris_constraint static void cris_parse_disassembler_options (struct cris_disasm_data *disdata, - char *disassembler_options, - enum cris_disass_family distype) + char *disassembler_options, + enum cris_disass_family distype) { /* Default true. */ disdata->trace_case @@ -1315,25 +1315,25 @@ spec_reg_info (unsigned int sreg, enum cris_disass_family distype) for (i = 0; cris_spec_regs[i].name != NULL; i++) { if (cris_spec_regs[i].number == sreg) - { - if (distype == cris_dis_v32) - switch (cris_spec_regs[i].applicable_version) - { - case cris_ver_warning: - case cris_ver_version_all: - case cris_ver_v3p: - case cris_ver_v8p: - case cris_ver_v10p: - case cris_ver_v32p: - /* No ambiguous sizes or register names with CRISv32. */ - if (cris_spec_regs[i].warning == NULL) - return &cris_spec_regs[i]; - default: - ; - } - else if (cris_spec_regs[i].applicable_version != cris_ver_v32p) - return &cris_spec_regs[i]; - } + { + if (distype == cris_dis_v32) + switch (cris_spec_regs[i].applicable_version) + { + case cris_ver_warning: + case cris_ver_version_all: + case cris_ver_v3p: + case cris_ver_v8p: + case cris_ver_v10p: + case cris_ver_v32p: + /* No ambiguous sizes or register names with CRISv32. */ + if (cris_spec_regs[i].warning == NULL) + return &cris_spec_regs[i]; + default: + ; + } + else if (cris_spec_regs[i].applicable_version != cris_ver_v32p) + return &cris_spec_regs[i]; + } } return NULL; @@ -1356,8 +1356,8 @@ number_of_bits (unsigned int val) static const struct cris_opcode * get_opcode_entry (unsigned int insn, - unsigned int prefix_insn, - struct cris_disasm_data *disdata) + unsigned int prefix_insn, + struct cris_disasm_data *disdata) { /* For non-prefixed insns, we keep a table of pointers, indexed by the insn code. Each entry is initialized when found to be NULL. */ @@ -1393,47 +1393,47 @@ get_opcode_entry (unsigned int insn, if (prefix_insn != NO_CRIS_PREFIX) { const struct cris_opcode *popcodep - = (opc_table[prefix_insn] != NULL - ? opc_table[prefix_insn] - : get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata)); + = (opc_table[prefix_insn] != NULL + ? opc_table[prefix_insn] + : get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata)); if (popcodep == NULL) - return NULL; + return NULL; if (popcodep->match == BDAP_QUICK_OPCODE) - { - /* Since some offsets are recognized with "push" macros, we - have to have different tables for them. */ - int offset = (prefix_insn & 255); + { + /* Since some offsets are recognized with "push" macros, we + have to have different tables for them. */ + int offset = (prefix_insn & 255); - if (offset > 127) - offset -= 256; + if (offset > 127) + offset -= 256; - switch (offset) - { - case -4: - prefix_opc_table = bdapq_m4_prefixes; - break; + switch (offset) + { + case -4: + prefix_opc_table = bdapq_m4_prefixes; + break; - case -2: - prefix_opc_table = bdapq_m2_prefixes; - break; + case -2: + prefix_opc_table = bdapq_m2_prefixes; + break; - case -1: - prefix_opc_table = bdapq_m1_prefixes; - break; + case -1: + prefix_opc_table = bdapq_m1_prefixes; + break; - default: - prefix_opc_table = rest_prefixes; - break; - } - } + default: + prefix_opc_table = rest_prefixes; + break; + } + } else if (popcodep->match == DIP_OPCODE) - /* We don't allow postincrement when the prefix is DIP, so use a - different table for DIP. */ - prefix_opc_table = dip_prefixes; + /* We don't allow postincrement when the prefix is DIP, so use a + different table for DIP. */ + prefix_opc_table = dip_prefixes; else - prefix_opc_table = rest_prefixes; + prefix_opc_table = rest_prefixes; } if (prefix_insn != NO_CRIS_PREFIX @@ -1447,104 +1447,104 @@ get_opcode_entry (unsigned int insn, int max_level_of_match = -1; for (opcodep = cris_opcodes; - opcodep->name != NULL; - opcodep++) - { - int level_of_match; + opcodep->name != NULL; + opcodep++) + { + int level_of_match; - if (disdata->distype == cris_dis_v32) - { - switch (opcodep->applicable_version) - { - case cris_ver_version_all: - break; + if (disdata->distype == cris_dis_v32) + { + switch (opcodep->applicable_version) + { + case cris_ver_version_all: + break; - case cris_ver_v0_3: - case cris_ver_v0_10: - case cris_ver_v3_10: - case cris_ver_sim_v0_10: - case cris_ver_v8_10: - case cris_ver_v10: - case cris_ver_warning: - continue; + case cris_ver_v0_3: + case cris_ver_v0_10: + case cris_ver_v3_10: + case cris_ver_sim_v0_10: + case cris_ver_v8_10: + case cris_ver_v10: + case cris_ver_warning: + continue; - case cris_ver_v3p: - case cris_ver_v8p: - case cris_ver_v10p: - case cris_ver_v32p: - break; + case cris_ver_v3p: + case cris_ver_v8p: + case cris_ver_v10p: + case cris_ver_v32p: + break; - case cris_ver_v8: - abort (); - default: - abort (); - } - } - else - { - switch (opcodep->applicable_version) - { - case cris_ver_version_all: - case cris_ver_v0_3: - case cris_ver_v3p: - case cris_ver_v0_10: - case cris_ver_v8p: - case cris_ver_v8_10: - case cris_ver_v10: - case cris_ver_sim_v0_10: - case cris_ver_v10p: - case cris_ver_warning: - break; + case cris_ver_v8: + abort (); + default: + abort (); + } + } + else + { + switch (opcodep->applicable_version) + { + case cris_ver_version_all: + case cris_ver_v0_3: + case cris_ver_v3p: + case cris_ver_v0_10: + case cris_ver_v8p: + case cris_ver_v8_10: + case cris_ver_v10: + case cris_ver_sim_v0_10: + case cris_ver_v10p: + case cris_ver_warning: + break; - case cris_ver_v32p: - continue; + case cris_ver_v32p: + continue; - case cris_ver_v8: - abort (); - default: - abort (); - } - } + case cris_ver_v8: + abort (); + default: + abort (); + } + } - /* We give a double lead for bits matching the template in - cris_opcodes. Not even, because then "move p8,r10" would - be given 2 bits lead over "clear.d r10". When there's a - tie, the first entry in the table wins. This is - deliberate, to avoid a more complicated recognition - formula. */ - if ((opcodep->match & insn) == opcodep->match - && (opcodep->lose & insn) == 0 - && ((level_of_match - = cris_constraint (opcodep->args, - insn, - prefix_insn, - disdata)) - >= 0) - && ((level_of_match - += 2 * number_of_bits (opcodep->match - | opcodep->lose)) - > max_level_of_match)) - { - max_matchedp = opcodep; - max_level_of_match = level_of_match; + /* We give a double lead for bits matching the template in + cris_opcodes. Not even, because then "move p8,r10" would + be given 2 bits lead over "clear.d r10". When there's a + tie, the first entry in the table wins. This is + deliberate, to avoid a more complicated recognition + formula. */ + if ((opcodep->match & insn) == opcodep->match + && (opcodep->lose & insn) == 0 + && ((level_of_match + = cris_constraint (opcodep->args, + insn, + prefix_insn, + disdata)) + >= 0) + && ((level_of_match + += 2 * number_of_bits (opcodep->match + | opcodep->lose)) + > max_level_of_match)) + { + max_matchedp = opcodep; + max_level_of_match = level_of_match; - /* If there was a full match, never mind looking - further. */ - if (level_of_match >= 2 * 16) - break; - } - } + /* If there was a full match, never mind looking + further. */ + if (level_of_match >= 2 * 16) + break; + } + } /* Fill in the new entry. - If there are changes to the opcode-table involving prefixes, and - disassembly then does not work correctly, try removing the - else-clause below that fills in the prefix-table. If that - helps, you need to change the prefix_opc_table setting above, or - something related. */ + If there are changes to the opcode-table involving prefixes, and + disassembly then does not work correctly, try removing the + else-clause below that fills in the prefix-table. If that + helps, you need to change the prefix_opc_table setting above, or + something related. */ if (prefix_insn == NO_CRIS_PREFIX) - opc_table[insn] = max_matchedp; + opc_table[insn] = max_matchedp; else - prefix_opc_table[insn] = max_matchedp; + prefix_opc_table[insn] = max_matchedp; } return max_matchedp; @@ -1556,9 +1556,9 @@ get_opcode_entry (unsigned int insn, static int cris_constraint (const char *cs, - unsigned int insn, - unsigned int prefix_insn, - struct cris_disasm_data *disdata) + unsigned int insn, + unsigned int prefix_insn, + struct cris_disasm_data *disdata) { int retval = 0; int tmp; @@ -1569,136 +1569,136 @@ cris_constraint (const char *cs, switch (*s) { case '!': - /* Do not recognize "pop" if there's a prefix and then only for + /* Do not recognize "pop" if there's a prefix and then only for v0..v10. */ - if (prefix_insn != NO_CRIS_PREFIX - || disdata->distype != cris_dis_v0_v10) - return -1; - break; + if (prefix_insn != NO_CRIS_PREFIX + || disdata->distype != cris_dis_v0_v10) + return -1; + break; case 'U': - /* Not recognized at disassembly. */ - return -1; + /* Not recognized at disassembly. */ + return -1; case 'M': - /* Size modifier for "clear", i.e. special register 0, 4 or 8. - Check that it is one of them. Only special register 12 could - be mismatched, but checking for matches is more logical than - checking for mismatches when there are only a few cases. */ - tmp = ((insn >> 12) & 0xf); - if (tmp != 0 && tmp != 4 && tmp != 8) - return -1; - break; + /* Size modifier for "clear", i.e. special register 0, 4 or 8. + Check that it is one of them. Only special register 12 could + be mismatched, but checking for matches is more logical than + checking for mismatches when there are only a few cases. */ + tmp = ((insn >> 12) & 0xf); + if (tmp != 0 && tmp != 4 && tmp != 8) + return -1; + break; case 'm': - if ((insn & 0x30) == 0x30) - return -1; - break; + if ((insn & 0x30) == 0x30) + return -1; + break; case 'S': - /* A prefix operand without side-effect. */ - if (prefix_insn != NO_CRIS_PREFIX && (insn & 0x400) == 0) - { - prefix_ok = 1; - break; - } - else - return -1; + /* A prefix operand without side-effect. */ + if (prefix_insn != NO_CRIS_PREFIX && (insn & 0x400) == 0) + { + prefix_ok = 1; + break; + } + else + return -1; case 's': case 'y': case 'Y': - /* If this is a prefixed insn with postincrement (side-effect), - the prefix must not be DIP. */ - if (prefix_insn != NO_CRIS_PREFIX) - { - if (insn & 0x400) - { - const struct cris_opcode *prefix_opcodep - = get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata); + /* If this is a prefixed insn with postincrement (side-effect), + the prefix must not be DIP. */ + if (prefix_insn != NO_CRIS_PREFIX) + { + if (insn & 0x400) + { + const struct cris_opcode *prefix_opcodep + = get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata); - if (prefix_opcodep->match == DIP_OPCODE) - return -1; - } + if (prefix_opcodep->match == DIP_OPCODE) + return -1; + } - prefix_ok = 1; - } - break; + prefix_ok = 1; + } + break; case 'B': - /* If we don't fall through, then the prefix is ok. */ - prefix_ok = 1; + /* If we don't fall through, then the prefix is ok. */ + prefix_ok = 1; - /* A "push" prefix. Check for valid "push" size. - In case of special register, it may be != 4. */ - if (prefix_insn != NO_CRIS_PREFIX) - { - /* Match the prefix insn to BDAPQ. */ - const struct cris_opcode *prefix_opcodep - = get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata); + /* A "push" prefix. Check for valid "push" size. + In case of special register, it may be != 4. */ + if (prefix_insn != NO_CRIS_PREFIX) + { + /* Match the prefix insn to BDAPQ. */ + const struct cris_opcode *prefix_opcodep + = get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata); - if (prefix_opcodep->match == BDAP_QUICK_OPCODE) - { - int pushsize = (prefix_insn & 255); + if (prefix_opcodep->match == BDAP_QUICK_OPCODE) + { + int pushsize = (prefix_insn & 255); - if (pushsize > 127) - pushsize -= 256; + if (pushsize > 127) + pushsize -= 256; - if (s[1] == 'P') - { - unsigned int spec_reg = (insn >> 12) & 15; - const struct cris_spec_reg *sregp - = spec_reg_info (spec_reg, disdata->distype); + if (s[1] == 'P') + { + unsigned int spec_reg = (insn >> 12) & 15; + const struct cris_spec_reg *sregp + = spec_reg_info (spec_reg, disdata->distype); - /* For a special-register, the "prefix size" must - match the size of the register. */ - if (sregp && sregp->reg_size == (unsigned int) -pushsize) - break; - } - else if (s[1] == 'R') - { - if ((insn & 0x30) == 0x20 && pushsize == -4) - break; - } - /* FIXME: Should abort here; next constraint letter - *must* be 'P' or 'R'. */ - } - } - return -1; + /* For a special-register, the "prefix size" must + match the size of the register. */ + if (sregp && sregp->reg_size == (unsigned int) -pushsize) + break; + } + else if (s[1] == 'R') + { + if ((insn & 0x30) == 0x20 && pushsize == -4) + break; + } + /* FIXME: Should abort here; next constraint letter + *must* be 'P' or 'R'. */ + } + } + return -1; case 'D': - retval = (((insn >> 12) & 15) == (insn & 15)); - if (!retval) - return -1; - else - retval += 4; - break; + retval = (((insn >> 12) & 15) == (insn & 15)); + if (!retval) + return -1; + else + retval += 4; + break; case 'P': - { - const struct cris_spec_reg *sregp - = spec_reg_info ((insn >> 12) & 15, disdata->distype); + { + const struct cris_spec_reg *sregp + = spec_reg_info ((insn >> 12) & 15, disdata->distype); - /* Since we match four bits, we will give a value of 4-1 = 3 - in a match. If there is a corresponding exact match of a - special register in another pattern, it will get a value of - 4, which will be higher. This should be correct in that an - exact pattern would match better than a general pattern. + /* Since we match four bits, we will give a value of 4-1 = 3 + in a match. If there is a corresponding exact match of a + special register in another pattern, it will get a value of + 4, which will be higher. This should be correct in that an + exact pattern would match better than a general pattern. - Note that there is a reason for not returning zero; the - pattern for "clear" is partly matched in the bit-pattern - (the two lower bits must be zero), while the bit-pattern - for a move from a special register is matched in the - register constraint. */ + Note that there is a reason for not returning zero; the + pattern for "clear" is partly matched in the bit-pattern + (the two lower bits must be zero), while the bit-pattern + for a move from a special register is matched in the + register constraint. */ - if (sregp != NULL) - { - retval += 3; - break; - } - else - return -1; - } + if (sregp != NULL) + { + retval += 3; + break; + } + else + return -1; + } } if (prefix_insn != NO_CRIS_PREFIX && ! prefix_ok) @@ -1711,8 +1711,8 @@ cris_constraint (const char *cs, static char * format_hex (unsigned long number, - char *outbuffer, - struct cris_disasm_data *disdata) + char *outbuffer, + struct cris_disasm_data *disdata) { /* Truncate negative numbers on >32-bit hosts. */ number &= 0xffffffff; @@ -1743,9 +1743,9 @@ format_dec (long number, char *outbuffer, size_t outsize, int signedp) static char * format_reg (struct cris_disasm_data *disdata, - int regno, - char *outbuffer_start, - bfd_boolean with_reg_prefix) + int regno, + char *outbuffer_start, + bfd_boolean with_reg_prefix) { char *outbuffer = outbuffer_start; @@ -1757,9 +1757,9 @@ format_reg (struct cris_disasm_data *disdata, case 15: /* For v32, there is no context in which we output PC. */ if (disdata->distype == cris_dis_v32) - strcpy (outbuffer, "acr"); + strcpy (outbuffer, "acr"); else - strcpy (outbuffer, "pc"); + strcpy (outbuffer, "pc"); break; case 14: @@ -1778,8 +1778,8 @@ format_reg (struct cris_disasm_data *disdata, static char * format_sup_reg (unsigned int regno, - char *outbuffer_start, - bfd_boolean with_reg_prefix) + char *outbuffer_start, + bfd_boolean with_reg_prefix) { char *outbuffer = outbuffer_start; int i; @@ -1790,8 +1790,8 @@ format_sup_reg (unsigned int regno, for (i = 0; cris_support_regs[i].name != NULL; i++) if (cris_support_regs[i].number == regno) { - sprintf (outbuffer, "%s", cris_support_regs[i].name); - return outbuffer_start + strlen (outbuffer_start); + sprintf (outbuffer, "%s", cris_support_regs[i].name); + return outbuffer_start + strlen (outbuffer_start); } /* There's supposed to be register names covering all numbers, though @@ -1804,9 +1804,9 @@ format_sup_reg (unsigned int regno, static unsigned bytes_to_skip (unsigned int insn, - const struct cris_opcode *matchedp, - enum cris_disass_family distype, - const struct cris_opcode *prefix_matchedp) + const struct cris_opcode *matchedp, + enum cris_disass_family distype, + const struct cris_opcode *prefix_matchedp) { /* Each insn is a word plus "immediate" operands. */ unsigned to_skip = 2; @@ -1815,33 +1815,33 @@ bytes_to_skip (unsigned int insn, for (s = template; *s; s++) if ((*s == 's' || *s == 'N' || *s == 'Y') - && (insn & 0x400) && (insn & 15) == 15 - && prefix_matchedp == NULL) + && (insn & 0x400) && (insn & 15) == 15 + && prefix_matchedp == NULL) { - /* Immediate via [pc+], so we have to check the size of the - operand. */ - int mode_size = 1 << ((insn >> 4) & (*template == 'z' ? 1 : 3)); + /* Immediate via [pc+], so we have to check the size of the + operand. */ + int mode_size = 1 << ((insn >> 4) & (*template == 'z' ? 1 : 3)); - if (matchedp->imm_oprnd_size == SIZE_FIX_32) - to_skip += 4; - else if (matchedp->imm_oprnd_size == SIZE_SPEC_REG) - { - const struct cris_spec_reg *sregp - = spec_reg_info ((insn >> 12) & 15, distype); + if (matchedp->imm_oprnd_size == SIZE_FIX_32) + to_skip += 4; + else if (matchedp->imm_oprnd_size == SIZE_SPEC_REG) + { + const struct cris_spec_reg *sregp + = spec_reg_info ((insn >> 12) & 15, distype); - /* FIXME: Improve error handling; should have been caught - earlier. */ - if (sregp == NULL) - return 2; + /* FIXME: Improve error handling; should have been caught + earlier. */ + if (sregp == NULL) + return 2; - /* PC is incremented by two, not one, for a byte. Except on - CRISv32, where constants are always DWORD-size for - special registers. */ - to_skip += - distype == cris_dis_v32 ? 4 : (sregp->reg_size + 1) & ~1; - } - else - to_skip += (mode_size + 1) & ~1; + /* PC is incremented by two, not one, for a byte. Except on + CRISv32, where constants are always DWORD-size for + special registers. */ + to_skip += + distype == cris_dis_v32 ? 4 : (sregp->reg_size + 1) & ~1; + } + else + to_skip += (mode_size + 1) & ~1; } else if (*s == 'n') to_skip += 4; @@ -1888,17 +1888,17 @@ print_flags (struct cris_disasm_data *disdata, unsigned int insn, char *cp) static void print_with_operands (const struct cris_opcode *opcodep, - unsigned int insn, - unsigned char *buffer, - bfd_vma addr, - disassemble_info *info, - /* If a prefix insn was before this insn (and is supposed - to be output as an address), here is a description of - it. */ - const struct cris_opcode *prefix_opcodep, - unsigned int prefix_insn, - unsigned char *prefix_buffer, - bfd_boolean with_reg_prefix) + unsigned int insn, + unsigned char *buffer, + bfd_vma addr, + disassemble_info *info, + /* If a prefix insn was before this insn (and is supposed + to be output as an address), here is a description of + it. */ + const struct cris_opcode *prefix_opcodep, + unsigned int prefix_insn, + unsigned char *prefix_buffer, + bfd_boolean with_reg_prefix) { /* Get a buffer of somewhat reasonable size where we store intermediate parts of the insn. */ @@ -1926,9 +1926,9 @@ print_with_operands (const struct cris_opcode *opcodep, /* Get the size-letter. */ *tp++ = *s == 'M' - ? (insn & 0x8000 ? 'd' - : insn & 0x4000 ? 'w' : 'b') - : mode_char[(insn >> 4) & (*s == 'z' ? 1 : 3)]; + ? (insn & 0x8000 ? 'd' + : insn & 0x4000 ? 'w' : 'b') + : mode_char[(insn >> 4) & (*s == 'z' ? 1 : 3)]; /* Ignore the size and the space character that follows. */ s += 2; @@ -1944,11 +1944,11 @@ print_with_operands (const struct cris_opcode *opcodep, if (opcodep->name[0] == 'j') { if (CONST_STRNEQ (opcodep->name, "jsr")) - /* It's "jsr" or "jsrc". */ - info->insn_type = dis_jsr; + /* It's "jsr" or "jsrc". */ + info->insn_type = dis_jsr; else - /* Any other jump-type insn is considered a branch. */ - info->insn_type = dis_branch; + /* Any other jump-type insn is considered a branch. */ + info->insn_type = dis_branch; } /* We might know some more fields right now. */ @@ -1960,475 +1960,475 @@ print_with_operands (const struct cris_opcode *opcodep, switch (*s) { case 'T': - tp = format_sup_reg ((insn >> 12) & 15, tp, with_reg_prefix); - break; + tp = format_sup_reg ((insn >> 12) & 15, tp, with_reg_prefix); + break; case 'A': - if (with_reg_prefix) - *tp++ = REGISTER_PREFIX_CHAR; - *tp++ = 'a'; - *tp++ = 'c'; - *tp++ = 'r'; - break; + if (with_reg_prefix) + *tp++ = REGISTER_PREFIX_CHAR; + *tp++ = 'a'; + *tp++ = 'c'; + *tp++ = 'r'; + break; case '[': case ']': case ',': - *tp++ = *s; - break; + *tp++ = *s; + break; case '!': - /* Ignore at this point; used at earlier stages to avoid - recognition if there's a prefix at something that in other - ways looks like a "pop". */ - break; + /* Ignore at this point; used at earlier stages to avoid + recognition if there's a prefix at something that in other + ways looks like a "pop". */ + break; case 'd': - /* Ignore. This is an optional ".d " on the large one of - relaxable insns. */ - break; + /* Ignore. This is an optional ".d " on the large one of + relaxable insns. */ + break; case 'B': - /* This was the prefix that made this a "push". We've already - handled it by recognizing it, so signal that the prefix is - handled by setting it to NULL. */ - prefix_opcodep = NULL; - break; + /* This was the prefix that made this a "push". We've already + handled it by recognizing it, so signal that the prefix is + handled by setting it to NULL. */ + prefix_opcodep = NULL; + break; case 'D': case 'r': - tp = format_reg (disdata, insn & 15, tp, with_reg_prefix); - break; + tp = format_reg (disdata, insn & 15, tp, with_reg_prefix); + break; case 'R': - tp = format_reg (disdata, (insn >> 12) & 15, tp, with_reg_prefix); - break; + tp = format_reg (disdata, (insn >> 12) & 15, tp, with_reg_prefix); + break; case 'n': - { - /* Like N but pc-relative to the start of the insn. */ - uint32_t number - = (buffer[2] + buffer[3] * 256 + buffer[4] * 65536 - + buffer[5] * 0x1000000 + addr); + { + /* Like N but pc-relative to the start of the insn. */ + uint32_t number + = (buffer[2] + buffer[3] * 256 + buffer[4] * 65536 + + buffer[5] * 0x1000000 + addr); - /* Finish off and output previous formatted bytes. */ - *tp = 0; - if (temp[0]) - (*info->fprintf_func) (info->stream, "%s", temp); - tp = temp; + /* Finish off and output previous formatted bytes. */ + *tp = 0; + if (temp[0]) + (*info->fprintf_func) (info->stream, "%s", temp); + tp = temp; - (*info->print_address_func) ((bfd_vma) number, info); - } - break; + (*info->print_address_func) ((bfd_vma) number, info); + } + break; case 'u': - { - /* Like n but the offset is bits <3:0> in the instruction. */ - unsigned long number = (buffer[0] & 0xf) * 2 + addr; + { + /* Like n but the offset is bits <3:0> in the instruction. */ + unsigned long number = (buffer[0] & 0xf) * 2 + addr; - /* Finish off and output previous formatted bytes. */ - *tp = 0; - if (temp[0]) - (*info->fprintf_func) (info->stream, "%s", temp); - tp = temp; + /* Finish off and output previous formatted bytes. */ + *tp = 0; + if (temp[0]) + (*info->fprintf_func) (info->stream, "%s", temp); + tp = temp; - (*info->print_address_func) ((bfd_vma) number, info); - } - break; + (*info->print_address_func) ((bfd_vma) number, info); + } + break; case 'N': case 'y': case 'Y': case 'S': case 's': - /* Any "normal" memory operand. */ - if ((insn & 0x400) && (insn & 15) == 15 && prefix_opcodep == NULL) - { - /* We're looking at [pc+], i.e. we need to output an immediate - number, where the size can depend on different things. */ - int32_t number; - int signedp - = ((*cs == 'z' && (insn & 0x20)) - || opcodep->match == BDAP_QUICK_OPCODE); - int nbytes; + /* Any "normal" memory operand. */ + if ((insn & 0x400) && (insn & 15) == 15 && prefix_opcodep == NULL) + { + /* We're looking at [pc+], i.e. we need to output an immediate + number, where the size can depend on different things. */ + int32_t number; + int signedp + = ((*cs == 'z' && (insn & 0x20)) + || opcodep->match == BDAP_QUICK_OPCODE); + int nbytes; - if (opcodep->imm_oprnd_size == SIZE_FIX_32) - nbytes = 4; - else if (opcodep->imm_oprnd_size == SIZE_SPEC_REG) - { - const struct cris_spec_reg *sregp - = spec_reg_info ((insn >> 12) & 15, disdata->distype); + if (opcodep->imm_oprnd_size == SIZE_FIX_32) + nbytes = 4; + else if (opcodep->imm_oprnd_size == SIZE_SPEC_REG) + { + const struct cris_spec_reg *sregp + = spec_reg_info ((insn >> 12) & 15, disdata->distype); - /* A NULL return should have been as a non-match earlier, - so catch it as an internal error in the error-case - below. */ - if (sregp == NULL) - /* Whatever non-valid size. */ - nbytes = 42; - else - /* PC is always incremented by a multiple of two. - For CRISv32, immediates are always 4 bytes for - special registers. */ - nbytes = disdata->distype == cris_dis_v32 - ? 4 : (sregp->reg_size + 1) & ~1; - } - else - { - int mode_size = 1 << ((insn >> 4) & (*cs == 'z' ? 1 : 3)); + /* A NULL return should have been as a non-match earlier, + so catch it as an internal error in the error-case + below. */ + if (sregp == NULL) + /* Whatever non-valid size. */ + nbytes = 42; + else + /* PC is always incremented by a multiple of two. + For CRISv32, immediates are always 4 bytes for + special registers. */ + nbytes = disdata->distype == cris_dis_v32 + ? 4 : (sregp->reg_size + 1) & ~1; + } + else + { + int mode_size = 1 << ((insn >> 4) & (*cs == 'z' ? 1 : 3)); - if (mode_size == 1) - nbytes = 2; - else - nbytes = mode_size; - } + if (mode_size == 1) + nbytes = 2; + else + nbytes = mode_size; + } - switch (nbytes) - { - case 1: - number = buffer[2]; - if (signedp && number > 127) - number -= 256; - break; + switch (nbytes) + { + case 1: + number = buffer[2]; + if (signedp && number > 127) + number -= 256; + break; - case 2: - number = buffer[2] + buffer[3] * 256; - if (signedp && number > 32767) - number -= 65536; - break; + case 2: + number = buffer[2] + buffer[3] * 256; + if (signedp && number > 32767) + number -= 65536; + break; - case 4: - number - = buffer[2] + buffer[3] * 256 + buffer[4] * 65536 - + buffer[5] * 0x1000000; - break; + case 4: + number + = buffer[2] + buffer[3] * 256 + buffer[4] * 65536 + + buffer[5] * 0x1000000; + break; - default: - strcpy (tp, "bug"); - tp += 3; - number = 42; - } + default: + strcpy (tp, "bug"); + tp += 3; + number = 42; + } - if ((*cs == 'z' && (insn & 0x20)) - || (opcodep->match == BDAP_QUICK_OPCODE - && (nbytes <= 2 || buffer[1 + nbytes] == 0))) - tp = FORMAT_DEC (number, tp, signedp); - else - { - unsigned int highbyte = (number >> 24) & 0xff; + if ((*cs == 'z' && (insn & 0x20)) + || (opcodep->match == BDAP_QUICK_OPCODE + && (nbytes <= 2 || buffer[1 + nbytes] == 0))) + tp = FORMAT_DEC (number, tp, signedp); + else + { + unsigned int highbyte = (number >> 24) & 0xff; - /* Either output this as an address or as a number. If it's - a dword with the same high-byte as the address of the - insn, assume it's an address, and also if it's a non-zero - non-0xff high-byte. If this is a jsr or a jump, then - it's definitely an address. */ - if (nbytes == 4 - && (highbyte == ((addr >> 24) & 0xff) - || (highbyte != 0 && highbyte != 0xff) - || info->insn_type == dis_branch - || info->insn_type == dis_jsr)) - { - /* Finish off and output previous formatted bytes. */ - *tp = 0; - tp = temp; - if (temp[0]) - (*info->fprintf_func) (info->stream, "%s", temp); + /* Either output this as an address or as a number. If it's + a dword with the same high-byte as the address of the + insn, assume it's an address, and also if it's a non-zero + non-0xff high-byte. If this is a jsr or a jump, then + it's definitely an address. */ + if (nbytes == 4 + && (highbyte == ((addr >> 24) & 0xff) + || (highbyte != 0 && highbyte != 0xff) + || info->insn_type == dis_branch + || info->insn_type == dis_jsr)) + { + /* Finish off and output previous formatted bytes. */ + *tp = 0; + tp = temp; + if (temp[0]) + (*info->fprintf_func) (info->stream, "%s", temp); - (*info->print_address_func) ((bfd_vma) number, info); + (*info->print_address_func) ((bfd_vma) number, info); - info->target = number; - } - else - tp = format_hex (number, tp, disdata); - } - } - else - { - /* Not an immediate number. Then this is a (possibly - prefixed) memory operand. */ - if (info->insn_type != dis_nonbranch) - { - int mode_size - = 1 << ((insn >> 4) - & (opcodep->args[0] == 'z' ? 1 : 3)); - int size; - info->insn_type = dis_dref; - info->flags |= CRIS_DIS_FLAG_MEMREF; + info->target = number; + } + else + tp = format_hex (number, tp, disdata); + } + } + else + { + /* Not an immediate number. Then this is a (possibly + prefixed) memory operand. */ + if (info->insn_type != dis_nonbranch) + { + int mode_size + = 1 << ((insn >> 4) + & (opcodep->args[0] == 'z' ? 1 : 3)); + int size; + info->insn_type = dis_dref; + info->flags |= CRIS_DIS_FLAG_MEMREF; - if (opcodep->imm_oprnd_size == SIZE_FIX_32) - size = 4; - else if (opcodep->imm_oprnd_size == SIZE_SPEC_REG) - { - const struct cris_spec_reg *sregp - = spec_reg_info ((insn >> 12) & 15, disdata->distype); + if (opcodep->imm_oprnd_size == SIZE_FIX_32) + size = 4; + else if (opcodep->imm_oprnd_size == SIZE_SPEC_REG) + { + const struct cris_spec_reg *sregp + = spec_reg_info ((insn >> 12) & 15, disdata->distype); - /* FIXME: Improve error handling; should have been caught - earlier. */ - if (sregp == NULL) - size = 4; - else - size = sregp->reg_size; - } - else - size = mode_size; + /* FIXME: Improve error handling; should have been caught + earlier. */ + if (sregp == NULL) + size = 4; + else + size = sregp->reg_size; + } + else + size = mode_size; - info->data_size = size; - } + info->data_size = size; + } - *tp++ = '['; + *tp++ = '['; - if (prefix_opcodep - /* We don't match dip with a postincremented field - as a side-effect address mode. */ - && ((insn & 0x400) == 0 - || prefix_opcodep->match != DIP_OPCODE)) - { - if (insn & 0x400) - { - tp = format_reg (disdata, insn & 15, tp, with_reg_prefix); - *tp++ = '='; - } + if (prefix_opcodep + /* We don't match dip with a postincremented field + as a side-effect address mode. */ + && ((insn & 0x400) == 0 + || prefix_opcodep->match != DIP_OPCODE)) + { + if (insn & 0x400) + { + tp = format_reg (disdata, insn & 15, tp, with_reg_prefix); + *tp++ = '='; + } - /* We mainly ignore the prefix format string when the - address-mode syntax is output. */ - switch (prefix_opcodep->match) - { - case DIP_OPCODE: - /* It's [r], [r+] or [pc+]. */ - if ((prefix_insn & 0x400) && (prefix_insn & 15) == 15) - { - /* It's [pc+]. This cannot possibly be anything - but an address. */ - uint32_t number - = prefix_buffer[2] + prefix_buffer[3] * 256 - + prefix_buffer[4] * 65536 - + prefix_buffer[5] * 0x1000000; + /* We mainly ignore the prefix format string when the + address-mode syntax is output. */ + switch (prefix_opcodep->match) + { + case DIP_OPCODE: + /* It's [r], [r+] or [pc+]. */ + if ((prefix_insn & 0x400) && (prefix_insn & 15) == 15) + { + /* It's [pc+]. This cannot possibly be anything + but an address. */ + uint32_t number + = prefix_buffer[2] + prefix_buffer[3] * 256 + + prefix_buffer[4] * 65536 + + prefix_buffer[5] * 0x1000000; - info->target = (bfd_vma) number; + info->target = (bfd_vma) number; - /* Finish off and output previous formatted - data. */ - *tp = 0; - tp = temp; - if (temp[0]) - (*info->fprintf_func) (info->stream, "%s", temp); + /* Finish off and output previous formatted + data. */ + *tp = 0; + tp = temp; + if (temp[0]) + (*info->fprintf_func) (info->stream, "%s", temp); - (*info->print_address_func) ((bfd_vma) number, info); - } - else - { - /* For a memref in an address, we use target2. - In this case, target is zero. */ - info->flags - |= (CRIS_DIS_FLAG_MEM_TARGET2_IS_REG - | CRIS_DIS_FLAG_MEM_TARGET2_MEM); + (*info->print_address_func) ((bfd_vma) number, info); + } + else + { + /* For a memref in an address, we use target2. + In this case, target is zero. */ + info->flags + |= (CRIS_DIS_FLAG_MEM_TARGET2_IS_REG + | CRIS_DIS_FLAG_MEM_TARGET2_MEM); - info->target2 = prefix_insn & 15; + info->target2 = prefix_insn & 15; - *tp++ = '['; - tp = format_reg (disdata, prefix_insn & 15, tp, - with_reg_prefix); - if (prefix_insn & 0x400) - *tp++ = '+'; - *tp++ = ']'; - } - break; + *tp++ = '['; + tp = format_reg (disdata, prefix_insn & 15, tp, + with_reg_prefix); + if (prefix_insn & 0x400) + *tp++ = '+'; + *tp++ = ']'; + } + break; - case BDAP_QUICK_OPCODE: - { - int number; + case BDAP_QUICK_OPCODE: + { + int number; - number = prefix_buffer[0]; - if (number > 127) - number -= 256; + number = prefix_buffer[0]; + if (number > 127) + number -= 256; - /* Output "reg+num" or, if num < 0, "reg-num". */ - tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp, - with_reg_prefix); - if (number >= 0) - *tp++ = '+'; - tp = FORMAT_DEC (number, tp, 1); + /* Output "reg+num" or, if num < 0, "reg-num". */ + tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp, + with_reg_prefix); + if (number >= 0) + *tp++ = '+'; + tp = FORMAT_DEC (number, tp, 1); - info->flags |= CRIS_DIS_FLAG_MEM_TARGET_IS_REG; - info->target = (prefix_insn >> 12) & 15; - info->target2 = (bfd_vma) number; - break; - } + info->flags |= CRIS_DIS_FLAG_MEM_TARGET_IS_REG; + info->target = (prefix_insn >> 12) & 15; + info->target2 = (bfd_vma) number; + break; + } - case BIAP_OPCODE: - /* Output "r+R.m". */ - tp = format_reg (disdata, prefix_insn & 15, tp, - with_reg_prefix); - *tp++ = '+'; - tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp, - with_reg_prefix); - *tp++ = '.'; - *tp++ = mode_char[(prefix_insn >> 4) & 3]; + case BIAP_OPCODE: + /* Output "r+R.m". */ + tp = format_reg (disdata, prefix_insn & 15, tp, + with_reg_prefix); + *tp++ = '+'; + tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp, + with_reg_prefix); + *tp++ = '.'; + *tp++ = mode_char[(prefix_insn >> 4) & 3]; - info->flags - |= (CRIS_DIS_FLAG_MEM_TARGET2_IS_REG - | CRIS_DIS_FLAG_MEM_TARGET_IS_REG + info->flags + |= (CRIS_DIS_FLAG_MEM_TARGET2_IS_REG + | CRIS_DIS_FLAG_MEM_TARGET_IS_REG - | ((prefix_insn & 0x8000) - ? CRIS_DIS_FLAG_MEM_TARGET2_MULT4 - : ((prefix_insn & 0x8000) - ? CRIS_DIS_FLAG_MEM_TARGET2_MULT2 : 0))); + | ((prefix_insn & 0x8000) + ? CRIS_DIS_FLAG_MEM_TARGET2_MULT4 + : ((prefix_insn & 0x8000) + ? CRIS_DIS_FLAG_MEM_TARGET2_MULT2 : 0))); - /* Is it the casejump? It's a "adds.w [pc+r%d.w],pc". */ - if (insn == 0xf83f && (prefix_insn & ~0xf000) == 0x55f) - /* Then start interpreting data as offsets. */ - case_offset_counter = no_of_case_offsets; - break; + /* Is it the casejump? It's a "adds.w [pc+r%d.w],pc". */ + if (insn == 0xf83f && (prefix_insn & ~0xf000) == 0x55f) + /* Then start interpreting data as offsets. */ + case_offset_counter = no_of_case_offsets; + break; - case BDAP_INDIR_OPCODE: - /* Output "r+s.m", or, if "s" is [pc+], "r+s" or - "r-s". */ - tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp, - with_reg_prefix); + case BDAP_INDIR_OPCODE: + /* Output "r+s.m", or, if "s" is [pc+], "r+s" or + "r-s". */ + tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp, + with_reg_prefix); - if ((prefix_insn & 0x400) && (prefix_insn & 15) == 15) - { - int32_t number; - unsigned int nbytes; + if ((prefix_insn & 0x400) && (prefix_insn & 15) == 15) + { + int32_t number; + unsigned int nbytes; - /* It's a value. Get its size. */ - int mode_size = 1 << ((prefix_insn >> 4) & 3); + /* It's a value. Get its size. */ + int mode_size = 1 << ((prefix_insn >> 4) & 3); - if (mode_size == 1) - nbytes = 2; - else - nbytes = mode_size; + if (mode_size == 1) + nbytes = 2; + else + nbytes = mode_size; - switch (nbytes) - { - case 1: - number = prefix_buffer[2]; - if (number > 127) - number -= 256; - break; + switch (nbytes) + { + case 1: + number = prefix_buffer[2]; + if (number > 127) + number -= 256; + break; - case 2: - number = prefix_buffer[2] + prefix_buffer[3] * 256; - if (number > 32767) - number -= 65536; - break; + case 2: + number = prefix_buffer[2] + prefix_buffer[3] * 256; + if (number > 32767) + number -= 65536; + break; - case 4: - number - = prefix_buffer[2] + prefix_buffer[3] * 256 - + prefix_buffer[4] * 65536 - + prefix_buffer[5] * 0x1000000; - break; + case 4: + number + = prefix_buffer[2] + prefix_buffer[3] * 256 + + prefix_buffer[4] * 65536 + + prefix_buffer[5] * 0x1000000; + break; - default: - strcpy (tp, "bug"); - tp += 3; - number = 42; - } + default: + strcpy (tp, "bug"); + tp += 3; + number = 42; + } - info->flags |= CRIS_DIS_FLAG_MEM_TARGET_IS_REG; - info->target2 = (bfd_vma) number; + info->flags |= CRIS_DIS_FLAG_MEM_TARGET_IS_REG; + info->target2 = (bfd_vma) number; - /* If the size is dword, then assume it's an - address. */ - if (nbytes == 4) - { - /* Finish off and output previous formatted - bytes. */ - *tp++ = '+'; - *tp = 0; - tp = temp; - (*info->fprintf_func) (info->stream, "%s", temp); + /* If the size is dword, then assume it's an + address. */ + if (nbytes == 4) + { + /* Finish off and output previous formatted + bytes. */ + *tp++ = '+'; + *tp = 0; + tp = temp; + (*info->fprintf_func) (info->stream, "%s", temp); - (*info->print_address_func) ((bfd_vma) number, info); - } - else - { - if (number >= 0) - *tp++ = '+'; - tp = FORMAT_DEC (number, tp, 1); - } - } - else - { - /* Output "r+[R].m" or "r+[R+].m". */ - *tp++ = '+'; - *tp++ = '['; - tp = format_reg (disdata, prefix_insn & 15, tp, - with_reg_prefix); - if (prefix_insn & 0x400) - *tp++ = '+'; - *tp++ = ']'; - *tp++ = '.'; - *tp++ = mode_char[(prefix_insn >> 4) & 3]; + (*info->print_address_func) ((bfd_vma) number, info); + } + else + { + if (number >= 0) + *tp++ = '+'; + tp = FORMAT_DEC (number, tp, 1); + } + } + else + { + /* Output "r+[R].m" or "r+[R+].m". */ + *tp++ = '+'; + *tp++ = '['; + tp = format_reg (disdata, prefix_insn & 15, tp, + with_reg_prefix); + if (prefix_insn & 0x400) + *tp++ = '+'; + *tp++ = ']'; + *tp++ = '.'; + *tp++ = mode_char[(prefix_insn >> 4) & 3]; - info->flags - |= (CRIS_DIS_FLAG_MEM_TARGET2_IS_REG - | CRIS_DIS_FLAG_MEM_TARGET2_MEM - | CRIS_DIS_FLAG_MEM_TARGET_IS_REG + info->flags + |= (CRIS_DIS_FLAG_MEM_TARGET2_IS_REG + | CRIS_DIS_FLAG_MEM_TARGET2_MEM + | CRIS_DIS_FLAG_MEM_TARGET_IS_REG - | (((prefix_insn >> 4) == 2) - ? 0 - : (((prefix_insn >> 4) & 3) == 1 - ? CRIS_DIS_FLAG_MEM_TARGET2_MEM_WORD - : CRIS_DIS_FLAG_MEM_TARGET2_MEM_BYTE))); - } - break; + | (((prefix_insn >> 4) == 2) + ? 0 + : (((prefix_insn >> 4) & 3) == 1 + ? CRIS_DIS_FLAG_MEM_TARGET2_MEM_WORD + : CRIS_DIS_FLAG_MEM_TARGET2_MEM_BYTE))); + } + break; - default: - (*info->fprintf_func) (info->stream, "?prefix-bug"); - } + default: + (*info->fprintf_func) (info->stream, "?prefix-bug"); + } - /* To mark that the prefix is used, reset it. */ - prefix_opcodep = NULL; - } - else - { - tp = format_reg (disdata, insn & 15, tp, with_reg_prefix); + /* To mark that the prefix is used, reset it. */ + prefix_opcodep = NULL; + } + else + { + tp = format_reg (disdata, insn & 15, tp, with_reg_prefix); - info->flags |= CRIS_DIS_FLAG_MEM_TARGET_IS_REG; - info->target = insn & 15; + info->flags |= CRIS_DIS_FLAG_MEM_TARGET_IS_REG; + info->target = insn & 15; - if (insn & 0x400) - *tp++ = '+'; - } - *tp++ = ']'; - } - break; + if (insn & 0x400) + *tp++ = '+'; + } + *tp++ = ']'; + } + break; case 'x': - tp = format_reg (disdata, (insn >> 12) & 15, tp, with_reg_prefix); - *tp++ = '.'; - *tp++ = mode_char[(insn >> 4) & 3]; - break; + tp = format_reg (disdata, (insn >> 12) & 15, tp, with_reg_prefix); + *tp++ = '.'; + *tp++ = mode_char[(insn >> 4) & 3]; + break; case 'I': - tp = FORMAT_DEC (insn & 63, tp, 0); - break; + tp = FORMAT_DEC (insn & 63, tp, 0); + break; case 'b': - { - int where = buffer[2] + buffer[3] * 256; + { + int where = buffer[2] + buffer[3] * 256; - if (where > 32767) - where -= 65536; + if (where > 32767) + where -= 65536; - where += addr + ((disdata->distype == cris_dis_v32) ? 0 : 4); + where += addr + ((disdata->distype == cris_dis_v32) ? 0 : 4); - if (insn == BA_PC_INCR_OPCODE) - info->insn_type = dis_branch; - else - info->insn_type = dis_condbranch; + if (insn == BA_PC_INCR_OPCODE) + info->insn_type = dis_branch; + else + info->insn_type = dis_condbranch; - info->target = (bfd_vma) where; + info->target = (bfd_vma) where; - *tp = 0; - tp = temp; - (*info->fprintf_func) (info->stream, "%s%s ", - temp, cris_cc_strings[insn >> 12]); + *tp = 0; + tp = temp; + (*info->fprintf_func) (info->stream, "%s%s ", + temp, cris_cc_strings[insn >> 12]); - (*info->print_address_func) ((bfd_vma) where, info); - } + (*info->print_address_func) ((bfd_vma) where, info); + } break; case 'c': @@ -2441,37 +2441,37 @@ print_with_operands (const struct cris_opcode *opcodep, case 'o': { - long offset = insn & 0xfe; - bfd_vma target; + long offset = insn & 0xfe; + bfd_vma target; - if (insn & 1) - offset |= ~0xff; + if (insn & 1) + offset |= ~0xff; - if (opcodep->match == BA_QUICK_OPCODE) - info->insn_type = dis_branch; - else - info->insn_type = dis_condbranch; + if (opcodep->match == BA_QUICK_OPCODE) + info->insn_type = dis_branch; + else + info->insn_type = dis_condbranch; - target = addr + ((disdata->distype == cris_dis_v32) ? 0 : 2) + offset; - info->target = target; - *tp = 0; - tp = temp; - (*info->fprintf_func) (info->stream, "%s", temp); - (*info->print_address_func) (target, info); + target = addr + ((disdata->distype == cris_dis_v32) ? 0 : 2) + offset; + info->target = target; + *tp = 0; + tp = temp; + (*info->fprintf_func) (info->stream, "%s", temp); + (*info->print_address_func) (target, info); } break; case 'Q': case 'O': { - long number = buffer[0]; + long number = buffer[0]; - if (number > 127) - number = number - 256; + if (number > 127) + number = number - 256; - tp = FORMAT_DEC (number, tp, 1); - *tp++ = ','; - tp = format_reg (disdata, (insn >> 12) & 15, tp, with_reg_prefix); + tp = FORMAT_DEC (number, tp, 1); + *tp++ = ','; + tp = format_reg (disdata, (insn >> 12) & 15, tp, with_reg_prefix); } break; @@ -2485,19 +2485,19 @@ print_with_operands (const struct cris_opcode *opcodep, case 'P': { - const struct cris_spec_reg *sregp - = spec_reg_info ((insn >> 12) & 15, disdata->distype); + const struct cris_spec_reg *sregp + = spec_reg_info ((insn >> 12) & 15, disdata->distype); - if (sregp == NULL || sregp->name == NULL) - /* Should have been caught as a non-match earlier. */ - *tp++ = '?'; - else - { - if (with_reg_prefix) - *tp++ = REGISTER_PREFIX_CHAR; - strcpy (tp, sregp->name); - tp += strlen (tp); - } + if (sregp == NULL || sregp->name == NULL) + /* Should have been caught as a non-match earlier. */ + *tp++ = '?'; + else + { + if (with_reg_prefix) + *tp++ = REGISTER_PREFIX_CHAR; + strcpy (tp, sregp->name); + tp += strlen (tp); + } } break; @@ -2511,7 +2511,7 @@ print_with_operands (const struct cris_opcode *opcodep, if (prefix_opcodep) (*info->fprintf_func) (info->stream, " (OOPS unused prefix \"%s: %s\")", - prefix_opcodep->name, prefix_opcodep->args); + prefix_opcodep->name, prefix_opcodep->args); (*info->fprintf_func) (info->stream, "%s", temp); @@ -2521,23 +2521,23 @@ print_with_operands (const struct cris_opcode *opcodep, if (TRACE_CASE && case_offset_counter == 0) { if (CONST_STRNEQ (opcodep->name, "sub")) - case_offset = last_immediate; + case_offset = last_immediate; /* It could also be an "add", if there are negative case-values. */ else if (CONST_STRNEQ (opcodep->name, "add")) - /* The first case is the negated operand to the add. */ - case_offset = -last_immediate; + /* The first case is the negated operand to the add. */ + case_offset = -last_immediate; /* A bound insn will tell us the number of cases. */ else if (CONST_STRNEQ (opcodep->name, "bound")) - no_of_case_offsets = last_immediate + 1; + no_of_case_offsets = last_immediate + 1; /* A jump or jsr or branch breaks the chain of insns for a - case-table, so assume default first-case again. */ + case-table, so assume default first-case again. */ else if (info->insn_type == dis_jsr - || info->insn_type == dis_branch - || info->insn_type == dis_condbranch) - case_offset = 0; + || info->insn_type == dis_branch + || info->insn_type == dis_condbranch) + case_offset = 0; } } @@ -2548,8 +2548,8 @@ print_with_operands (const struct cris_opcode *opcodep, static int print_insn_cris_generic (bfd_vma memaddr, - disassemble_info *info, - bfd_boolean with_reg_prefix) + disassemble_info *info, + bfd_boolean with_reg_prefix) { int nbytes; unsigned int insn; @@ -2575,7 +2575,7 @@ print_insn_cris_generic (bfd_vma memaddr, nbytes = info->buffer_length ? info->buffer_length : MAX_BYTES_PER_CRIS_INSN; nbytes = MIN(nbytes, MAX_BYTES_PER_CRIS_INSN); - status = (*info->read_memory_func) (memaddr, buffer, nbytes, info); + status = (*info->read_memory_func) (memaddr, buffer, nbytes, info); /* If we did not get all we asked for, then clear the rest. Hopefully this makes a reproducible result in case of errors. */ @@ -2603,101 +2603,101 @@ print_insn_cris_generic (bfd_vma memaddr, /* If we're in a case-table, don't disassemble the offsets. */ if (TRACE_CASE && case_offset_counter != 0) - { - info->insn_type = dis_noninsn; - advance += 2; + { + info->insn_type = dis_noninsn; + advance += 2; - /* If to print data as offsets, then shortcut here. */ - (*info->fprintf_func) (info->stream, "case %ld%s: -> ", - case_offset + no_of_case_offsets - - case_offset_counter, - case_offset_counter == 1 ? "/default" : - ""); + /* If to print data as offsets, then shortcut here. */ + (*info->fprintf_func) (info->stream, "case %ld%s: -> ", + case_offset + no_of_case_offsets + - case_offset_counter, + case_offset_counter == 1 ? "/default" : + ""); - (*info->print_address_func) ((bfd_vma) - ((short) (insn) - + (long) (addr - - (no_of_case_offsets - - case_offset_counter) - * 2)), info); - case_offset_counter--; + (*info->print_address_func) ((bfd_vma) + ((short) (insn) + + (long) (addr + - (no_of_case_offsets + - case_offset_counter) + * 2)), info); + case_offset_counter--; - /* The default case start (without a "sub" or "add") must be - zero. */ - if (case_offset_counter == 0) - case_offset = 0; - } + /* The default case start (without a "sub" or "add") must be + zero. */ + if (case_offset_counter == 0) + case_offset = 0; + } else if (insn == 0) - { - /* We're often called to disassemble zeroes. While this is a - valid "bcc .+2" insn, it is also useless enough and enough - of a nuiscance that we will just output "bcc .+2" for it - and signal it as a noninsn. */ - (*info->fprintf_func) (info->stream, - disdata->distype == cris_dis_v32 - ? "bcc ." : "bcc .+2"); - info->insn_type = dis_noninsn; - advance += 2; - } + { + /* We're often called to disassemble zeroes. While this is a + valid "bcc .+2" insn, it is also useless enough and enough + of a nuiscance that we will just output "bcc .+2" for it + and signal it as a noninsn. */ + (*info->fprintf_func) (info->stream, + disdata->distype == cris_dis_v32 + ? "bcc ." : "bcc .+2"); + info->insn_type = dis_noninsn; + advance += 2; + } else - { - const struct cris_opcode *prefix_opcodep = NULL; - unsigned char *prefix_buffer = bufp; - unsigned int prefix_insn = insn; - int prefix_size = 0; + { + const struct cris_opcode *prefix_opcodep = NULL; + unsigned char *prefix_buffer = bufp; + unsigned int prefix_insn = insn; + int prefix_size = 0; - matchedp = get_opcode_entry (insn, NO_CRIS_PREFIX, disdata); + matchedp = get_opcode_entry (insn, NO_CRIS_PREFIX, disdata); - /* Check if we're supposed to write out prefixes as address - modes and if this was a prefix. */ - if (matchedp != NULL && PARSE_PREFIX && matchedp->args[0] == 'p') - { - /* If it's a prefix, put it into the prefix vars and get the - main insn. */ - prefix_size = bytes_to_skip (prefix_insn, matchedp, - disdata->distype, NULL); - prefix_opcodep = matchedp; + /* Check if we're supposed to write out prefixes as address + modes and if this was a prefix. */ + if (matchedp != NULL && PARSE_PREFIX && matchedp->args[0] == 'p') + { + /* If it's a prefix, put it into the prefix vars and get the + main insn. */ + prefix_size = bytes_to_skip (prefix_insn, matchedp, + disdata->distype, NULL); + prefix_opcodep = matchedp; - insn = bufp[prefix_size] + bufp[prefix_size + 1] * 256; - matchedp = get_opcode_entry (insn, prefix_insn, disdata); + insn = bufp[prefix_size] + bufp[prefix_size + 1] * 256; + matchedp = get_opcode_entry (insn, prefix_insn, disdata); - if (matchedp != NULL) - { - addr += prefix_size; - bufp += prefix_size; - advance += prefix_size; - } - else - { - /* The "main" insn wasn't valid, at least not when - prefixed. Put back things enough to output the - prefix insn only, as a normal insn. */ - matchedp = prefix_opcodep; - insn = prefix_insn; - prefix_opcodep = NULL; - } - } + if (matchedp != NULL) + { + addr += prefix_size; + bufp += prefix_size; + advance += prefix_size; + } + else + { + /* The "main" insn wasn't valid, at least not when + prefixed. Put back things enough to output the + prefix insn only, as a normal insn. */ + matchedp = prefix_opcodep; + insn = prefix_insn; + prefix_opcodep = NULL; + } + } - if (matchedp == NULL) - { - (*info->fprintf_func) (info->stream, "??0x%x", insn); - advance += 2; + if (matchedp == NULL) + { + (*info->fprintf_func) (info->stream, "??0x%x", insn); + advance += 2; - info->insn_type = dis_noninsn; - } - else - { - advance - += bytes_to_skip (insn, matchedp, disdata->distype, - prefix_opcodep); + info->insn_type = dis_noninsn; + } + else + { + advance + += bytes_to_skip (insn, matchedp, disdata->distype, + prefix_opcodep); - /* The info_type and assorted fields will be set according - to the operands. */ - print_with_operands (matchedp, insn, bufp, addr, info, - prefix_opcodep, prefix_insn, - prefix_buffer, with_reg_prefix); - } - } + /* The info_type and assorted fields will be set according + to the operands. */ + print_with_operands (matchedp, insn, bufp, addr, info, + prefix_opcodep, prefix_insn, + prefix_buffer, with_reg_prefix); + } + } } else info->insn_type = dis_noninsn; @@ -2733,24 +2733,24 @@ print_insn_cris_generic (bfd_vma memaddr, /* Disassemble, prefixing register names with `$'. CRIS v0..v10. */ static int print_insn_cris_with_register_prefix (bfd_vma vma, - disassemble_info *info) + disassemble_info *info) { struct cris_disasm_data disdata; info->private_data = &disdata; cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_v0_v10); + cris_dis_v0_v10); return print_insn_cris_generic (vma, info, true); } /* Disassemble, prefixing register names with `$'. CRIS v32. */ static int print_insn_crisv32_with_register_prefix (bfd_vma vma, - disassemble_info *info) + disassemble_info *info) { struct cris_disasm_data disdata; info->private_data = &disdata; cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_v32); + cris_dis_v32); return print_insn_cris_generic (vma, info, true); } @@ -2760,12 +2760,12 @@ print_insn_crisv32_with_register_prefix (bfd_vma vma, static int print_insn_crisv10_v32_with_register_prefix (bfd_vma vma, - disassemble_info *info) + disassemble_info *info) { struct cris_disasm_data disdata; info->private_data = &disdata; cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_common_v10_v32); + cris_dis_common_v10_v32); return print_insn_cris_generic (vma, info, true); } @@ -2773,12 +2773,12 @@ print_insn_crisv10_v32_with_register_prefix (bfd_vma vma, static int print_insn_cris_without_register_prefix (bfd_vma vma, - disassemble_info *info) + disassemble_info *info) { struct cris_disasm_data disdata; info->private_data = &disdata; cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_v0_v10); + cris_dis_v0_v10); return print_insn_cris_generic (vma, info, false); } @@ -2786,12 +2786,12 @@ print_insn_cris_without_register_prefix (bfd_vma vma, static int print_insn_crisv32_without_register_prefix (bfd_vma vma, - disassemble_info *info) + disassemble_info *info) { struct cris_disasm_data disdata; info->private_data = &disdata; cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_v32); + cris_dis_v32); return print_insn_cris_generic (vma, info, false); } @@ -2800,26 +2800,26 @@ print_insn_crisv32_without_register_prefix (bfd_vma vma, static int print_insn_crisv10_v32_without_register_prefix (bfd_vma vma, - disassemble_info *info) + disassemble_info *info) { struct cris_disasm_data disdata; info->private_data = &disdata; cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_common_v10_v32); + cris_dis_common_v10_v32); return print_insn_cris_generic (vma, info, false); } #endif int print_insn_crisv10 (bfd_vma vma, - disassemble_info *info) + disassemble_info *info) { return print_insn_cris_with_register_prefix(vma, info); } int print_insn_crisv32 (bfd_vma vma, - disassemble_info *info) + disassemble_info *info) { return print_insn_crisv32_with_register_prefix(vma, info); } @@ -2841,12 +2841,12 @@ cris_get_disassembler (bfd *abfd) if (bfd_get_symbol_leading_char (abfd) == 0) { if (bfd_get_mach (abfd) == bfd_mach_cris_v32) - return print_insn_crisv32_with_register_prefix; + return print_insn_crisv32_with_register_prefix; if (bfd_get_mach (abfd) == bfd_mach_cris_v10_v32) - return print_insn_crisv10_v32_with_register_prefix; + return print_insn_crisv10_v32_with_register_prefix; /* We default to v10. This may be specifically specified in the - bfd mach, but is also the default setting. */ + bfd mach, but is also the default setting. */ return print_insn_cris_with_register_prefix; } From patchwork Sat Apr 13 05:23:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 788571 Delivered-To: patch@linaro.org Received: by 2002:adf:e6ca:0:b0:346:15ad:a2a with SMTP id y10csp1041163wrm; Fri, 12 Apr 2024 22:25:31 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW1HUrYnxUDqE/36rJ1TfGDhFOE09cIoILW/1OXJwE/5gS21/7jqA5eOJJnmWo2v6p4+HuFeuK7PoM7gWIXQi4p X-Google-Smtp-Source: AGHT+IFpMY6NN1b43j96xD8t4TTtsq7/qLy5dvpUu7CfJt/mtN9tnMTLMl6aSwHbTf9xPY33dhQz X-Received: by 2002:a9d:6e02:0:b0:6eb:5a07:521a with SMTP id e2-20020a9d6e02000000b006eb5a07521amr4757858otr.9.1712985931595; Fri, 12 Apr 2024 22:25:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712985931; cv=none; d=google.com; s=arc-20160816; b=xKblt7qD2rWqw4xERfdukmOui6brTJJmjg52dQBYcDnu8k4n4AO1PMz7nG9OdfyYrZ zNGsM0UPJeYI2XRyryN6jp/WF5RhrW6wG7l4/HbgFdcbZJoLB2uzVDgFr0n/bIN4J/x9 rYBQ4VGcFhLPbOdsO3jCNy5vfW2vgNoCT5iBUHPblZHkhShrqwioiU7Imjtr334/pMzV SA22OM8EYRdSAZ2g/glMoFfzruLZ7V6JiIXdgJ9CKu0kNs3nUpjsXFM6asYEZLcKkGBD Q4sKQ/LAFXFSgMjaVILjMv+deo4OoSLAruAwTAhvCPIzgoQzBDKqwZbzS23RwlNVzGaN bDwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=WeAW3psO2a4Q9h7sQeQJixxfk9X81dmTMFMwdx2gcGw=; fh=8mBO+FwhNjUD9ALhUxcYEwIlwc/hLQI6+6+QuDX34lg=; b=QiHCwzKQhm5Belr7Z1hay2Gs5q/B2AV8KTSUf0pT/yMgaZwFDK0xRKR+LXNokiZkMM C/7KTZFx90feQ4ligAROa988oUqF8UXtwAFZigdE0PxfhxOHnUB5szv3Lm/8def50ePq /yNREE8FVmQe1UF9vAnWWglzQO5oFCUiP6fmMegr/8Fht9ipyOMcp6jLcbhwBkjZq07p RSO1SQIMSMdWtFMYOQeg7APNlRUNaZZwnexfRrYpJfu2cF5wUkFvo6V3Fu8Ff3OAYolr 69CqwQFW23Kg+ynKSuslR4r19rmoHkJgJfeP2XgkGcauF1G+IYmm8l+FBt1coW5TQak5 3D7A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="zfaZ/kBT"; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id j14-20020a0cc34e000000b0069b56012ef8si3177246qvi.447.2024.04.12.22.25.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Apr 2024 22:25:31 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="zfaZ/kBT"; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rvVra-0001sd-Mq; Sat, 13 Apr 2024 01:23:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rvVrZ-0001sF-8p for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:41 -0400 Received: from mail-oo1-xc2f.google.com ([2607:f8b0:4864:20::c2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rvVrX-0001co-BB for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:40 -0400 Received: by mail-oo1-xc2f.google.com with SMTP id 006d021491bc7-5aa1bf6cb40so947148eaf.1 for ; Fri, 12 Apr 2024 22:23:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1712985818; x=1713590618; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WeAW3psO2a4Q9h7sQeQJixxfk9X81dmTMFMwdx2gcGw=; b=zfaZ/kBTLeex2K2c4ktcVBbA/r6HdFpyQrpOnxWtoUrH1pG/8RVZwmlmLwD6FyL+gz oYYgrAu+0/5/A5WBrMjukpZ9Wv/mK65pqEn1lTuULNFg+Wqyyhei8MtM8yYYWbyvkQzq hsgd4CQXYk8HvD2/muYgECEBtP7+O8TarK8pEPV6JmO0p37I8ZL0ukHenKoTrJAgpWAe gnGUV0ef/39aS9kiPjx7gdTA5TaBsHwEWdwGBhzLw1CQ/zqee5m4uKMYgGMJSw2mAe+L 2B46cWuz2KHYkxImLAkMAKpCKPWGtDs5JjXbEaBYx7K6KmfrDe50GwibIEAjJIdYxp8G a0Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712985818; x=1713590618; 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=WeAW3psO2a4Q9h7sQeQJixxfk9X81dmTMFMwdx2gcGw=; b=PV1dxWX99MIlS1BGO33UCDSgtjpDWxJLEz3BluSw8bMxR3J5TZPKCX9oyXiQRELEYg BqJJjPOruiiXfONq+mLQmvrZRM5xKzi1fISnFrc3WdgECkRkRv5XkfcLBLklp+uyOt3h GNWtbbbP+K61hnJBmwN/CHWMR4/R2vHh7/WFqgpu4dtwo1yjXouWKRMFZHOgDpxJFwgc SGQnXEL1emftS2OXndJnjeqOdRX6KsymjbdLDZyzyd5SJrT0ybHe0rEOD2wfdFRHAtc7 oQi5yWMhPDS6/KDKetyWbdHQzLpnW6Vw8fqxaQ1VZ563yPYfU7rTPueTveDVw0n/m09c me4A== X-Gm-Message-State: AOJu0Yw+t05E+QTAvUAOHFGJjuZHHjL70Mq5D62Wios5iw1cBKRxkggm ySxYKC/thQWvR/ToxiVTQxllTtdWXNiKEl5bY5d3cYfW4ThpHFCSZGvfApFxS+BmFNHJQqmFKNe Q X-Received: by 2002:a05:6359:4246:b0:183:ddb0:eb03 with SMTP id ko6-20020a056359424600b00183ddb0eb03mr6777500rwb.21.1712985818096; Fri, 12 Apr 2024 22:23:38 -0700 (PDT) Received: from stoup.. (174-21-72-5.tukw.qwest.net. [174.21.72.5]) by smtp.gmail.com with ESMTPSA id v19-20020a17090abb9300b002a0544b81d6sm3564074pjr.35.2024.04.12.22.23.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Apr 2024 22:23:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: edgar.iglesias@gmail.com, philmd@linaro.org Subject: [PATCH 2/6] disas/cris: Remove TRACE_CASE and related code Date: Fri, 12 Apr 2024 22:23:29 -0700 Message-Id: <20240413052333.688151-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240413052333.688151-1-richard.henderson@linaro.org> References: <20240413052333.688151-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::c2f; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org The disassembler_options variable is never set within QEMU, so this code is never enabled. Remove it all. Signed-off-by: Richard Henderson --- disas/cris.c | 114 ++------------------------------------------------- 1 file changed, 3 insertions(+), 111 deletions(-) diff --git a/disas/cris.c b/disas/cris.c index d62f9e3264..1cc8752104 100644 --- a/disas/cris.c +++ b/disas/cris.c @@ -1236,58 +1236,17 @@ cris_cc_strings[] = /* Sometimes we prefix all registers with this character. */ #define REGISTER_PREFIX_CHAR '$' -/* Whether or not to trace the following sequence: - sub* X,r%d - bound* Y,r%d - adds.w [pc+r%d.w],pc - - This is the assembly form of a switch-statement in C. - The "sub is optional. If there is none, then X will be zero. - X is the value of the first case, - Y is the number of cases (including default). - - This results in case offsets printed on the form: - case N: -> case_address - where N is an estimation on the corresponding 'case' operand in C, - and case_address is where execution of that case continues after the - sequence presented above. - - The old style of output was to print the offsets as instructions, - which made it hard to follow "case"-constructs in the disassembly, - and caused a lot of annoying warnings about undefined instructions. - - FIXME: Make this optional later. */ -#ifndef TRACE_CASE -#define TRACE_CASE (disdata->trace_case) -#endif - enum cris_disass_family { cris_dis_v0_v10, cris_dis_common_v10_v32, cris_dis_v32 }; /* Stored in the disasm_info->private_data member. */ struct cris_disasm_data { - /* Whether to print something less confusing if we find something - matching a switch-construct. */ - bfd_boolean trace_case; - /* Whether this code is flagged as crisv32. FIXME: Should be an enum that includes "compatible". */ enum cris_disass_family distype; }; -/* Value of first element in switch. */ -static long case_offset = 0; - -/* How many more case-offsets to print. */ -static long case_offset_counter = 0; - -/* Number of case offsets. */ -static long no_of_case_offsets = 0; - -/* Candidate for next case_offset. */ -static long last_immediate = 0; - static int cris_constraint (const char *, unsigned, unsigned, struct cris_disasm_data *); @@ -1299,11 +1258,6 @@ cris_parse_disassembler_options (struct cris_disasm_data *disdata, char *disassembler_options, enum cris_disass_family distype) { - /* Default true. */ - disdata->trace_case - = (disassembler_options == NULL - || (strcmp (disassembler_options, "nocase") != 0)); - disdata->distype = distype; } @@ -1711,18 +1665,13 @@ cris_constraint (const char *cs, static char * format_hex (unsigned long number, - char *outbuffer, - struct cris_disasm_data *disdata) + char *outbuffer) { /* Truncate negative numbers on >32-bit hosts. */ number &= 0xffffffff; sprintf (outbuffer, "0x%lx", number); - /* Save this value for the "case" support. */ - if (TRACE_CASE) - last_immediate = number; - return outbuffer + strlen (outbuffer); } @@ -1733,7 +1682,6 @@ format_hex (unsigned long number, static char * format_dec (long number, char *outbuffer, size_t outsize, int signedp) { - last_immediate = number; snprintf (outbuffer, outsize, signedp ? "%ld" : "%lu", number); return outbuffer + strlen (outbuffer); @@ -2138,7 +2086,7 @@ print_with_operands (const struct cris_opcode *opcodep, info->target = number; } else - tp = format_hex (number, tp, disdata); + tp = format_hex (number, tp); } } else @@ -2273,11 +2221,6 @@ print_with_operands (const struct cris_opcode *opcodep, ? CRIS_DIS_FLAG_MEM_TARGET2_MULT4 : ((prefix_insn & 0x8000) ? CRIS_DIS_FLAG_MEM_TARGET2_MULT2 : 0))); - - /* Is it the casejump? It's a "adds.w [pc+r%d.w],pc". */ - if (insn == 0xf83f && (prefix_insn & ~0xf000) == 0x55f) - /* Then start interpreting data as offsets. */ - case_offset_counter = no_of_case_offsets; break; case BDAP_INDIR_OPCODE: @@ -2514,31 +2457,6 @@ print_with_operands (const struct cris_opcode *opcodep, prefix_opcodep->name, prefix_opcodep->args); (*info->fprintf_func) (info->stream, "%s", temp); - - /* Get info for matching case-tables, if we don't have any active. - We assume that the last constant seen is used; either in the insn - itself or in a "move.d const,rN, sub.d rN,rM"-like sequence. */ - if (TRACE_CASE && case_offset_counter == 0) - { - if (CONST_STRNEQ (opcodep->name, "sub")) - case_offset = last_immediate; - - /* It could also be an "add", if there are negative case-values. */ - else if (CONST_STRNEQ (opcodep->name, "add")) - /* The first case is the negated operand to the add. */ - case_offset = -last_immediate; - - /* A bound insn will tell us the number of cases. */ - else if (CONST_STRNEQ (opcodep->name, "bound")) - no_of_case_offsets = last_immediate + 1; - - /* A jump or jsr or branch breaks the chain of insns for a - case-table, so assume default first-case again. */ - else if (info->insn_type == dis_jsr - || info->insn_type == dis_branch - || info->insn_type == dis_condbranch) - case_offset = 0; - } } @@ -2601,33 +2519,7 @@ print_insn_cris_generic (bfd_vma memaddr, insn = bufp[0] + bufp[1] * 256; - /* If we're in a case-table, don't disassemble the offsets. */ - if (TRACE_CASE && case_offset_counter != 0) - { - info->insn_type = dis_noninsn; - advance += 2; - - /* If to print data as offsets, then shortcut here. */ - (*info->fprintf_func) (info->stream, "case %ld%s: -> ", - case_offset + no_of_case_offsets - - case_offset_counter, - case_offset_counter == 1 ? "/default" : - ""); - - (*info->print_address_func) ((bfd_vma) - ((short) (insn) - + (long) (addr - - (no_of_case_offsets - - case_offset_counter) - * 2)), info); - case_offset_counter--; - - /* The default case start (without a "sub" or "add") must be - zero. */ - if (case_offset_counter == 0) - case_offset = 0; - } - else if (insn == 0) + if (insn == 0) { /* We're often called to disassemble zeroes. While this is a valid "bcc .+2" insn, it is also useless enough and enough From patchwork Sat Apr 13 05:23:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 788570 Delivered-To: patch@linaro.org Received: by 2002:adf:e6ca:0:b0:346:15ad:a2a with SMTP id y10csp1041161wrm; Fri, 12 Apr 2024 22:25:31 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUL6wYgXReh1dulq2X8wJ9IGKMqnr5sDftDlQvOrfDH0TaRoVLtSCKFP1jDmHfM+3g2Y5UygFet+REmTrbbC10a X-Google-Smtp-Source: AGHT+IHTWavSzSSPSxIzbmL/UdlViO8FAnYkJhJaXOZMm7CxkB3hR966VuTB6KzRQOI2tpbO9oMn X-Received: by 2002:a05:620a:1199:b0:78a:3d2a:e0c with SMTP id b25-20020a05620a119900b0078a3d2a0e0cmr5521856qkk.8.1712985931498; Fri, 12 Apr 2024 22:25:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712985931; cv=none; d=google.com; s=arc-20160816; b=Gqd14vufmlKUVOOuntHE+tYPP1QNXU1UuDU8ewwE/Ij1sQm9ZddGd671g4xzcCjD78 mK5sowjmeL0vVAjMITSI6EoNYvacrYqBrUIUa4of4UwO4HGbZsjkz4RmvzsindGDidK5 SNzYs3BySGIugLFVXST2pIAgfs/+BXwXGpr7ZM3Z4t4GnHxKBgibWWGvTOuewZU0q5kl 544L+hf5MYydqd3G50GrPUKfurG251EEwtCU+6/HZ4m9xj58upR2zCIZ4a5xoh+XhPvZ OgxhIQmqx7BIYDb794CVDAV1tjKkHVanP1Sv1vfhMf0fF25mY7OLQcsEzkFSvfqOESS0 5QBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=nGlcb0FOsVrtW/loWoknwOL1pthHdADUVw02ahp2qOs=; fh=8mBO+FwhNjUD9ALhUxcYEwIlwc/hLQI6+6+QuDX34lg=; b=xIWkHtkzrqDLZmx8ZJ4i9rJsjbuuIGOUQ6y33sGacYERvnyNRwqo/zB3fxhholtMb7 UWO+JFFmgkuktfoTf/I908eXa69UDnxvUloyDDqzKu1MV+AcceslMnUg4mibVJbREPww gwJZO+Hdc5+OOHM8gTI9OtSmR1mqfWrWqZdZuQZWtxzw2F9nb3Z/FEWdpQ5CptvHxztm L7JC9X1wQEkC548ZUMyxCOmdvXUWyxmLXd9R7bncp217aS6qH/4YDEyzsKujw9Tqun6a UrfBQqaioIRO3p/Q8XXzinhUPFjqArNQFnaWrlobn7GArxRql97d2hk+iNeBEY5ATQNO Mowg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=eTxDeJKH; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id z3-20020a05622a028300b004368dea3523si3048510qtw.716.2024.04.12.22.25.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Apr 2024 22:25:31 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=eTxDeJKH; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rvVrc-0001t2-Ao; Sat, 13 Apr 2024 01:23:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rvVrb-0001ss-4l for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:43 -0400 Received: from mail-oo1-xc32.google.com ([2607:f8b0:4864:20::c32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rvVrY-0001dC-Mc for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:42 -0400 Received: by mail-oo1-xc32.google.com with SMTP id 006d021491bc7-5aa4204bacdso1222922eaf.2 for ; Fri, 12 Apr 2024 22:23:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1712985819; x=1713590619; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nGlcb0FOsVrtW/loWoknwOL1pthHdADUVw02ahp2qOs=; b=eTxDeJKHK5jWg78ggzI05M8cZUleNlmYKPZbnzABr/wg6DQnb+Vke7uz/QsN2kJ0TC iQy9MtDiDf418EcWnvYwvOrYzFqavT4xkFSngc4k+tQBm6k2h8KTVW/2yE4l9UB3P2L3 thgJiW2jjogV8i2kKwApWyiowcXaB9oGOuVlUfWsGkF4iqojcf/JMUxHC6I7zGCu3yRH iYtitqCS1gPKEzCatRFaoiaXNyrxwBJntgL+Xju+GdS9ph5kRYYc8HKQnGI37rYJXiqV gQROfFiohT8WheePZLRJvFt0VDeUuosha4V0UWX2g5Ig1eHAdyjtAFkHK6T+Nv//4JDy 3aHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712985819; x=1713590619; 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=nGlcb0FOsVrtW/loWoknwOL1pthHdADUVw02ahp2qOs=; b=rJniLkQTeeOGS/2gatNTWVRDr2BnffZyshHZJCA8VStNOfYuDGevGz5+bT6TWwQlJ/ ApIVuWHPN6x6eYSmX3f+LTQc2aM2UbAot6nwiQiA9jz2AvbO9k6ywzpaGWpfQXk0KxaO skMUNJLC/faaTVq5RxqZwCnu4U8HhsuidWDdkJ7K2bJihlH2Ouy8mzUUQjGKJYuf3R7X bGHxj2M1SYbe8xe8u+CJHKEhzqoPXa51JGeibZy+KTZUbYUCA7nWHQ6EBIraL7hBOpNv iC30HrlH6L0zx8jpzXpZJUi+ngHrpx01FdQZyPLcnav33WO4rfJL3K+t4FpCZd4e9CH9 06Qg== X-Gm-Message-State: AOJu0YwimAIk7gteuw37S51bvjsHj+U1mgbI3aCmHIrqfoy5hEPKrI/q /psna19wQJx5VVcSBlUoiIva+7reohj4GrYUTTx9cMiXzYwo9u9DqTen8uEHIqWi89S0izgOM7X X X-Received: by 2002:a05:6358:7c13:b0:181:6575:1b22 with SMTP id p19-20020a0563587c1300b0018165751b22mr4657754rwf.6.1712985819025; Fri, 12 Apr 2024 22:23:39 -0700 (PDT) Received: from stoup.. (174-21-72-5.tukw.qwest.net. [174.21.72.5]) by smtp.gmail.com with ESMTPSA id v19-20020a17090abb9300b002a0544b81d6sm3564074pjr.35.2024.04.12.22.23.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Apr 2024 22:23:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: edgar.iglesias@gmail.com, philmd@linaro.org Subject: [PATCH 3/6] disas/cris: Drop with_reg_prefix Date: Fri, 12 Apr 2024 22:23:30 -0700 Message-Id: <20240413052333.688151-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240413052333.688151-1-richard.henderson@linaro.org> References: <20240413052333.688151-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::c32; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc32.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org The *_without_reg_prefix functions are all commented out. Remove them, remove all 'with_reg_prefix' parameters, and remove all of the conditions that test them. Signed-off-by: Richard Henderson --- disas/cris.c | 188 +++++++++------------------------------------------ 1 file changed, 32 insertions(+), 156 deletions(-) diff --git a/disas/cris.c b/disas/cris.c index 1cc8752104..27f71a8257 100644 --- a/disas/cris.c +++ b/disas/cris.c @@ -1692,13 +1692,11 @@ format_dec (long number, char *outbuffer, size_t outsize, int signedp) static char * format_reg (struct cris_disasm_data *disdata, int regno, - char *outbuffer_start, - bfd_boolean with_reg_prefix) + char *outbuffer_start) { char *outbuffer = outbuffer_start; - if (with_reg_prefix) - *outbuffer++ = REGISTER_PREFIX_CHAR; + *outbuffer++ = REGISTER_PREFIX_CHAR; switch (regno) { @@ -1726,14 +1724,12 @@ format_reg (struct cris_disasm_data *disdata, static char * format_sup_reg (unsigned int regno, - char *outbuffer_start, - bfd_boolean with_reg_prefix) + char *outbuffer_start) { char *outbuffer = outbuffer_start; int i; - if (with_reg_prefix) - *outbuffer++ = REGISTER_PREFIX_CHAR; + *outbuffer++ = REGISTER_PREFIX_CHAR; for (i = 0; cris_support_regs[i].name != NULL; i++) if (cris_support_regs[i].number == regno) @@ -1845,8 +1841,7 @@ print_with_operands (const struct cris_opcode *opcodep, it. */ const struct cris_opcode *prefix_opcodep, unsigned int prefix_insn, - unsigned char *prefix_buffer, - bfd_boolean with_reg_prefix) + unsigned char *prefix_buffer) { /* Get a buffer of somewhat reasonable size where we store intermediate parts of the insn. */ @@ -1908,12 +1903,11 @@ print_with_operands (const struct cris_opcode *opcodep, switch (*s) { case 'T': - tp = format_sup_reg ((insn >> 12) & 15, tp, with_reg_prefix); + tp = format_sup_reg ((insn >> 12) & 15, tp); break; case 'A': - if (with_reg_prefix) - *tp++ = REGISTER_PREFIX_CHAR; + *tp++ = REGISTER_PREFIX_CHAR; *tp++ = 'a'; *tp++ = 'c'; *tp++ = 'r'; @@ -1945,11 +1939,11 @@ print_with_operands (const struct cris_opcode *opcodep, case 'D': case 'r': - tp = format_reg (disdata, insn & 15, tp, with_reg_prefix); + tp = format_reg (disdata, insn & 15, tp); break; case 'R': - tp = format_reg (disdata, (insn >> 12) & 15, tp, with_reg_prefix); + tp = format_reg (disdata, (insn >> 12) & 15, tp); break; case 'n': @@ -2132,7 +2126,7 @@ print_with_operands (const struct cris_opcode *opcodep, { if (insn & 0x400) { - tp = format_reg (disdata, insn & 15, tp, with_reg_prefix); + tp = format_reg (disdata, insn & 15, tp); *tp++ = '='; } @@ -2174,8 +2168,7 @@ print_with_operands (const struct cris_opcode *opcodep, info->target2 = prefix_insn & 15; *tp++ = '['; - tp = format_reg (disdata, prefix_insn & 15, tp, - with_reg_prefix); + tp = format_reg (disdata, prefix_insn & 15, tp); if (prefix_insn & 0x400) *tp++ = '+'; *tp++ = ']'; @@ -2191,8 +2184,7 @@ print_with_operands (const struct cris_opcode *opcodep, number -= 256; /* Output "reg+num" or, if num < 0, "reg-num". */ - tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp, - with_reg_prefix); + tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp); if (number >= 0) *tp++ = '+'; tp = FORMAT_DEC (number, tp, 1); @@ -2205,11 +2197,9 @@ print_with_operands (const struct cris_opcode *opcodep, case BIAP_OPCODE: /* Output "r+R.m". */ - tp = format_reg (disdata, prefix_insn & 15, tp, - with_reg_prefix); + tp = format_reg (disdata, prefix_insn & 15, tp); *tp++ = '+'; - tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp, - with_reg_prefix); + tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp); *tp++ = '.'; *tp++ = mode_char[(prefix_insn >> 4) & 3]; @@ -2226,8 +2216,7 @@ print_with_operands (const struct cris_opcode *opcodep, case BDAP_INDIR_OPCODE: /* Output "r+s.m", or, if "s" is [pc+], "r+s" or "r-s". */ - tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp, - with_reg_prefix); + tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp); if ((prefix_insn & 0x400) && (prefix_insn & 15) == 15) { @@ -2297,8 +2286,7 @@ print_with_operands (const struct cris_opcode *opcodep, /* Output "r+[R].m" or "r+[R+].m". */ *tp++ = '+'; *tp++ = '['; - tp = format_reg (disdata, prefix_insn & 15, tp, - with_reg_prefix); + tp = format_reg (disdata, prefix_insn & 15, tp); if (prefix_insn & 0x400) *tp++ = '+'; *tp++ = ']'; @@ -2327,7 +2315,7 @@ print_with_operands (const struct cris_opcode *opcodep, } else { - tp = format_reg (disdata, insn & 15, tp, with_reg_prefix); + tp = format_reg (disdata, insn & 15, tp); info->flags |= CRIS_DIS_FLAG_MEM_TARGET_IS_REG; info->target = insn & 15; @@ -2340,7 +2328,7 @@ print_with_operands (const struct cris_opcode *opcodep, break; case 'x': - tp = format_reg (disdata, (insn >> 12) & 15, tp, with_reg_prefix); + tp = format_reg (disdata, (insn >> 12) & 15, tp); *tp++ = '.'; *tp++ = mode_char[(insn >> 4) & 3]; break; @@ -2414,7 +2402,7 @@ print_with_operands (const struct cris_opcode *opcodep, tp = FORMAT_DEC (number, tp, 1); *tp++ = ','; - tp = format_reg (disdata, (insn >> 12) & 15, tp, with_reg_prefix); + tp = format_reg (disdata, (insn >> 12) & 15, tp); } break; @@ -2436,8 +2424,7 @@ print_with_operands (const struct cris_opcode *opcodep, *tp++ = '?'; else { - if (with_reg_prefix) - *tp++ = REGISTER_PREFIX_CHAR; + *tp++ = REGISTER_PREFIX_CHAR; strcpy (tp, sregp->name); tp += strlen (tp); } @@ -2466,8 +2453,7 @@ print_with_operands (const struct cris_opcode *opcodep, static int print_insn_cris_generic (bfd_vma memaddr, - disassemble_info *info, - bfd_boolean with_reg_prefix) + disassemble_info *info) { int nbytes; unsigned int insn; @@ -2587,7 +2573,7 @@ print_insn_cris_generic (bfd_vma memaddr, to the operands. */ print_with_operands (matchedp, insn, bufp, addr, info, prefix_opcodep, prefix_insn, - prefix_buffer, with_reg_prefix); + prefix_buffer); } } } @@ -2622,134 +2608,24 @@ print_insn_cris_generic (bfd_vma memaddr, return advance; } -/* Disassemble, prefixing register names with `$'. CRIS v0..v10. */ -static int -print_insn_cris_with_register_prefix (bfd_vma vma, - disassemble_info *info) -{ - struct cris_disasm_data disdata; - info->private_data = &disdata; - cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_v0_v10); - return print_insn_cris_generic (vma, info, true); -} -/* Disassemble, prefixing register names with `$'. CRIS v32. */ - -static int -print_insn_crisv32_with_register_prefix (bfd_vma vma, - disassemble_info *info) -{ - struct cris_disasm_data disdata; - info->private_data = &disdata; - cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_v32); - return print_insn_cris_generic (vma, info, true); -} - -#if 0 -/* Disassemble, prefixing register names with `$'. - Common v10 and v32 subset. */ - -static int -print_insn_crisv10_v32_with_register_prefix (bfd_vma vma, - disassemble_info *info) -{ - struct cris_disasm_data disdata; - info->private_data = &disdata; - cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_common_v10_v32); - return print_insn_cris_generic (vma, info, true); -} - -/* Disassemble, no prefixes on register names. CRIS v0..v10. */ - -static int -print_insn_cris_without_register_prefix (bfd_vma vma, - disassemble_info *info) -{ - struct cris_disasm_data disdata; - info->private_data = &disdata; - cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_v0_v10); - return print_insn_cris_generic (vma, info, false); -} - -/* Disassemble, no prefixes on register names. CRIS v32. */ - -static int -print_insn_crisv32_without_register_prefix (bfd_vma vma, - disassemble_info *info) -{ - struct cris_disasm_data disdata; - info->private_data = &disdata; - cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_v32); - return print_insn_cris_generic (vma, info, false); -} - -/* Disassemble, no prefixes on register names. - Common v10 and v32 subset. */ - -static int -print_insn_crisv10_v32_without_register_prefix (bfd_vma vma, - disassemble_info *info) -{ - struct cris_disasm_data disdata; - info->private_data = &disdata; - cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_common_v10_v32); - return print_insn_cris_generic (vma, info, false); -} -#endif - int print_insn_crisv10 (bfd_vma vma, disassemble_info *info) { - return print_insn_cris_with_register_prefix(vma, info); + struct cris_disasm_data disdata; + info->private_data = &disdata; + cris_parse_disassembler_options (&disdata, info->disassembler_options, + cris_dis_v0_v10); + return print_insn_cris_generic (vma, info); } int print_insn_crisv32 (bfd_vma vma, disassemble_info *info) { - return print_insn_crisv32_with_register_prefix(vma, info); + struct cris_disasm_data disdata; + info->private_data = &disdata; + cris_parse_disassembler_options (&disdata, info->disassembler_options, + cris_dis_v32); + return print_insn_cris_generic (vma, info); } - -/* Return a disassembler-function that prints registers with a `$' prefix, - or one that prints registers without a prefix. - FIXME: We should improve the solution to avoid the multitude of - functions seen above. */ -#if 0 -disassembler_ftype -cris_get_disassembler (bfd *abfd) -{ - /* If there's no bfd in sight, we return what is valid as input in all - contexts if fed back to the assembler: disassembly *with* register - prefix. Unfortunately this will be totally wrong for v32. */ - if (abfd == NULL) - return print_insn_cris_with_register_prefix; - - if (bfd_get_symbol_leading_char (abfd) == 0) - { - if (bfd_get_mach (abfd) == bfd_mach_cris_v32) - return print_insn_crisv32_with_register_prefix; - if (bfd_get_mach (abfd) == bfd_mach_cris_v10_v32) - return print_insn_crisv10_v32_with_register_prefix; - - /* We default to v10. This may be specifically specified in the - bfd mach, but is also the default setting. */ - return print_insn_cris_with_register_prefix; - } - - if (bfd_get_mach (abfd) == bfd_mach_cris_v32) - return print_insn_crisv32_without_register_prefix; - if (bfd_get_mach (abfd) == bfd_mach_cris_v10_v32) - return print_insn_crisv10_v32_without_register_prefix; - return print_insn_cris_without_register_prefix; -} -#endif -/* Local variables: - eval: (c-set-style "gnu") - indent-tabs-mode: t - End: */ From patchwork Sat Apr 13 05:23:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 788573 Delivered-To: patch@linaro.org Received: by 2002:adf:e6ca:0:b0:346:15ad:a2a with SMTP id y10csp1041166wrm; Fri, 12 Apr 2024 22:25:32 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWW0K5qwOHvT3nK+eV0dPlSqhRJDkP9SPZBxkcjJSQ4M+V7Oh2e+b3N56VDi1SrXLg4I6e9t5jLyV99c94xsqFu X-Google-Smtp-Source: AGHT+IHVQEneXPCuPTSSX3p65X1c1IN/DGCnuqjrjn5Ls7KgIf5Rc5a+ipq2UuEvcn5Mja5s2PnW X-Received: by 2002:a05:622a:198c:b0:436:a38b:707a with SMTP id u12-20020a05622a198c00b00436a38b707amr3437663qtc.26.1712985931924; Fri, 12 Apr 2024 22:25:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712985931; cv=none; d=google.com; s=arc-20160816; b=hjay56yy+bjwBzH2LD3Gf3ohIRU1fODu0Ovzy227v/5QvsKU3J46hP5zhgEZmp0wv+ REPlPXsDfUzreFR8or/ziBrZSNS+EMO2nhOScg2x0RqvtHj/xdzoVoR4xaDCCNO7h82y de91SSrsAabN/lxUCCJeYLjw31VavkzRMRQbXJ5VQwXOARF47r77AK03wd/mrUOfb3gA DtJLDuFnHa/Svu/r4CuYTnCdVgoDQqwnsoM1dDUEVrk1G7O7PpcrByNxnv2kZZQ/e4CJ LGQL6WqzusrRVOlhOtLE/u9nNDYn24v6NF6mQczilMzPQ1cn7zatt6OzBpMTy/9Kw4++ Q+BA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=xHXdGb2Ykd1dojWJmRnTDjJcr6qyUR/mTTLDcFT9woA=; fh=8mBO+FwhNjUD9ALhUxcYEwIlwc/hLQI6+6+QuDX34lg=; b=OQGmvMBrgaMHhnXF76uPBnOUCJNKKlNqye1IIhtC/uxQbJkoOyZ2FuQXSSy8EvTwPS 3uF2ZuIHCJoYtP+E77AQEgMyH6cCpDSOkmE4cQFuuWQyKjxne+XYd+Cq+0UFc6epKJSQ b22cK4h4un0SXRalvuEu+mxtV13MJZlog00JKZEn5O30SIMwvwgBTY6s+Iyqic3CQuAq Qs89fIgGBjjJBFTHHamSe1mIkZ9mVcSAGQC/1VlkAX1z0hxndm4FRjKxfGTz7+VVqgCg yZ4nCZJ1bIJYSB2ahFLa2L00t97BQf0LhqWqATucma0GzsOk8sKlFYSLPYNZ1BAL12ea CTOw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=PxT3eqVV; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id f10-20020ac859ca000000b004368ac46e3csi3146210qtf.81.2024.04.12.22.25.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Apr 2024 22:25:31 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=PxT3eqVV; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rvVre-0001u0-Ti; Sat, 13 Apr 2024 01:23:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rvVrc-0001tF-O0 for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:44 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rvVrZ-0001dJ-Oy for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:44 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-29e0229d6b5so1221372a91.3 for ; Fri, 12 Apr 2024 22:23:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1712985820; x=1713590620; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xHXdGb2Ykd1dojWJmRnTDjJcr6qyUR/mTTLDcFT9woA=; b=PxT3eqVVdogAFSg8rpgi3tzyDcTomyOOSk5h/GiehWNZaD0JpAHI9VJVEhS58c8xb9 oEFAEL/aBCalkJVazdUdNpH/XPtxpzuVccp/aT7BfnTpVxH9lxaQ+qNcwZFo8LQIXI2e xGICXDLvDvWQYv/VFSabKRkxOCAKP1gdVf3RA+S4WAFoIfN0z9U+qvg/H3z76cvWt5to mLcfP9RoNlpfD/ku7fJssQ8qNfAeIbpxRcetIHq2MXKhQCDWd790zSPyZVn2x2nh19xB jvPXmZK4rjzsTEcWRX8n7Is9XzEwYJTeswGUImc4JOSP4bWV+9PQUyv474caqDyOmMs6 TJhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712985820; x=1713590620; 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=xHXdGb2Ykd1dojWJmRnTDjJcr6qyUR/mTTLDcFT9woA=; b=JefcyCtcc/yjI8vCDorji4bTJe0mdcywu3Iza2fk6D2j/d3GaejrlI5sIl1gSqy/LL TeD+6Lq+ecA3ltQL4oQM4doeFwypbz6BjagqocULgDtgq+vwUntfqoxj9KabfH9cLEuN wVFMjrP3mkuVeLaxCyN7BJxqasjzG1/my1+R1MyWe8J481aF/ldBHzWTYGOpfDpaKOBf z5dBjwHnUwy2aRQdEayUCRUNan1/qnYMP57XDf2eBH5ZYaqv2fLInq8jldIkEQZdV9o7 QzxqitmdSM1KN1DJKJohGuts80e7Kj+RRDLMvj0j96nFLk07wD0UlD+gTNEhWuoFf6Mk ZzKQ== X-Gm-Message-State: AOJu0Yxd2w7ZVrFUrQO7kklJrWoYIYpiR1evKVK8lpsCEEWRs+67i4HF dOJqXxqPeyjfJu2uuATqVb9/W6HgVbD7oTFdn4sCmGEGxOjscFOTNcW9zn1xf7607YjEjymAJoJ n X-Received: by 2002:a17:90a:db0a:b0:29b:c9ac:c563 with SMTP id g10-20020a17090adb0a00b0029bc9acc563mr3911941pjv.19.1712985819985; Fri, 12 Apr 2024 22:23:39 -0700 (PDT) Received: from stoup.. (174-21-72-5.tukw.qwest.net. [174.21.72.5]) by smtp.gmail.com with ESMTPSA id v19-20020a17090abb9300b002a0544b81d6sm3564074pjr.35.2024.04.12.22.23.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Apr 2024 22:23:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: edgar.iglesias@gmail.com, philmd@linaro.org Subject: [PATCH 4/6] disas/cris: Use GString in print_with_operands and subroutines Date: Fri, 12 Apr 2024 22:23:31 -0700 Message-Id: <20240413052333.688151-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240413052333.688151-1-richard.henderson@linaro.org> References: <20240413052333.688151-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org sprintf() is deprecated on Darwin since macOS 13.0 / XCode 14.1. Use GString in the core of the disassembler instead of buffering the string locally. Instead of info->print_address_func, use format_hex for addresses. Printing a hex number is what print_address_func does, and using format_hex properly truncates the 32-bit bit address. E.g. -0x00080988: move.d 0xfffffffffeda49ff,$r4 +0x00080988: move.d 0xfeda49ff,$r4 Signed-off-by: Richard Henderson --- disas/cris.c | 288 +++++++++++++++++---------------------------------- 1 file changed, 96 insertions(+), 192 deletions(-) diff --git a/disas/cris.c b/disas/cris.c index 27f71a8257..692cd4d163 100644 --- a/disas/cris.c +++ b/disas/cris.c @@ -1663,85 +1663,74 @@ cris_constraint (const char *cs, /* Format number as hex with a leading "0x" into outbuffer. */ -static char * -format_hex (unsigned long number, - char *outbuffer) +static void +format_hex(unsigned long number, GString *str) { /* Truncate negative numbers on >32-bit hosts. */ number &= 0xffffffff; - sprintf (outbuffer, "0x%lx", number); - - return outbuffer + strlen (outbuffer); + g_string_append_printf(str, "0x%lx", number); } /* Format number as decimal into outbuffer. Parameter signedp says whether the number should be formatted as signed (!= 0) or unsigned (== 0). */ -static char * -format_dec (long number, char *outbuffer, size_t outsize, int signedp) +static void +format_dec(long number, GString *str, int signedp) { - snprintf (outbuffer, outsize, signedp ? "%ld" : "%lu", number); - - return outbuffer + strlen (outbuffer); + if (signedp) + g_string_append_printf(str, "%ld", number); + else + g_string_append_printf(str, "%lu", number); } /* Format the name of the general register regno into outbuffer. */ -static char * -format_reg (struct cris_disasm_data *disdata, - int regno, - char *outbuffer_start) +static void +format_reg(struct cris_disasm_data *disdata, int regno, GString *str) { - char *outbuffer = outbuffer_start; - - *outbuffer++ = REGISTER_PREFIX_CHAR; + g_string_append_c(str, REGISTER_PREFIX_CHAR); switch (regno) { case 15: /* For v32, there is no context in which we output PC. */ if (disdata->distype == cris_dis_v32) - strcpy (outbuffer, "acr"); + g_string_append(str, "acr"); else - strcpy (outbuffer, "pc"); + g_string_append(str, "pc"); break; case 14: - strcpy (outbuffer, "sp"); + g_string_append(str, "sp"); break; default: - sprintf (outbuffer, "r%d", regno); + g_string_append_printf(str, "r%d", regno); break; } - - return outbuffer_start + strlen (outbuffer_start); } /* Format the name of a support register into outbuffer. */ -static char * -format_sup_reg (unsigned int regno, - char *outbuffer_start) +static void +format_sup_reg(unsigned int regno, GString *str) { - char *outbuffer = outbuffer_start; int i; - *outbuffer++ = REGISTER_PREFIX_CHAR; + g_string_append_c(str, REGISTER_PREFIX_CHAR); for (i = 0; cris_support_regs[i].name != NULL; i++) if (cris_support_regs[i].number == regno) { - sprintf (outbuffer, "%s", cris_support_regs[i].name); - return outbuffer_start + strlen (outbuffer_start); + g_string_append(str, cris_support_regs[i].name); + return; } /* There's supposed to be register names covering all numbers, though some may be generic names. */ - sprintf (outbuffer, "format_sup_reg-BUG"); - return outbuffer_start + strlen (outbuffer_start); + g_string_append(str, "format_sup_reg-BUG"); } /* Return the length of an instruction. */ @@ -1797,8 +1786,8 @@ bytes_to_skip (unsigned int insn, /* Print condition code flags. */ -static char * -print_flags (struct cris_disasm_data *disdata, unsigned int insn, char *cp) +static void +print_flags(struct cris_disasm_data *disdata, unsigned int insn, GString *str) { /* Use the v8 (Etrax 100) flag definitions for disassembly. The differences with v0 (Etrax 1..4) vs. Svinto are: @@ -1815,17 +1804,9 @@ print_flags (struct cris_disasm_data *disdata, unsigned int insn, char *cp) for (i = 0; i < 8; i++) if (flagbits & (1 << i)) - *cp++ = fnames[i]; - - return cp; + g_string_append_c(str, fnames[i]); } -#define FORMAT_DEC(number, tp, signedp) \ - format_dec (number, tp, ({ \ - assert(tp >= temp && tp <= temp + sizeof(temp)); \ - temp + sizeof(temp) - tp; \ - }), signedp) - /* Print out an insn with its operands, and update the info->insn_type fields. The prefix_opcodep and the rest hold a prefix insn that is supposed to be output as an address mode. */ @@ -1843,19 +1824,13 @@ print_with_operands (const struct cris_opcode *opcodep, unsigned int prefix_insn, unsigned char *prefix_buffer) { - /* Get a buffer of somewhat reasonable size where we store - intermediate parts of the insn. */ - char temp[sizeof (".d [$r13=$r12-2147483648],$r10") * 2]; - char *tp = temp; + g_autoptr(GString) str = g_string_new(opcodep->name); static const char mode_char[] = "bwd?"; const char *s; const char *cs; struct cris_disasm_data *disdata = (struct cris_disasm_data *) info->private_data; - /* Print out the name first thing we do. */ - (*info->fprintf_func) (info->stream, "%s", opcodep->name); - cs = opcodep->args; s = cs; @@ -1865,13 +1840,13 @@ print_with_operands (const struct cris_opcode *opcodep, if (*s == 'm' || *s == 'M' || *s == 'z') { - *tp++ = '.'; + g_string_append_c(str, '.'); /* Get the size-letter. */ - *tp++ = *s == 'M' - ? (insn & 0x8000 ? 'd' - : insn & 0x4000 ? 'w' : 'b') - : mode_char[(insn >> 4) & (*s == 'z' ? 1 : 3)]; + if (*s == 'M') + g_string_append_c(str, insn & 0x8000 ? 'd' : insn & 0x4000 ? 'w' : 'b'); + else + g_string_append_c(str, mode_char[(insn >> 4) & (*s == 'z' ? 1 : 3)]); /* Ignore the size and the space character that follows. */ s += 2; @@ -1880,7 +1855,7 @@ print_with_operands (const struct cris_opcode *opcodep, /* Add a space if this isn't a long-branch, because for those will add the condition part of the name later. */ if (opcodep->match != (BRANCH_PC_LOW + BRANCH_INCR_HIGH * 256)) - *tp++ = ' '; + g_string_append_c(str, ' '); /* Fill in the insn-type if deducible from the name (and there's no better way). */ @@ -1903,20 +1878,18 @@ print_with_operands (const struct cris_opcode *opcodep, switch (*s) { case 'T': - tp = format_sup_reg ((insn >> 12) & 15, tp); + format_sup_reg((insn >> 12) & 15, str); break; case 'A': - *tp++ = REGISTER_PREFIX_CHAR; - *tp++ = 'a'; - *tp++ = 'c'; - *tp++ = 'r'; + g_string_append_c(str, REGISTER_PREFIX_CHAR); + g_string_append(str, "acr"); break; case '[': case ']': case ',': - *tp++ = *s; + g_string_append_c(str, *s); break; case '!': @@ -1939,11 +1912,11 @@ print_with_operands (const struct cris_opcode *opcodep, case 'D': case 'r': - tp = format_reg (disdata, insn & 15, tp); + format_reg(disdata, insn & 15, str); break; case 'R': - tp = format_reg (disdata, (insn >> 12) & 15, tp); + format_reg(disdata, (insn >> 12) & 15, str); break; case 'n': @@ -1953,13 +1926,7 @@ print_with_operands (const struct cris_opcode *opcodep, = (buffer[2] + buffer[3] * 256 + buffer[4] * 65536 + buffer[5] * 0x1000000 + addr); - /* Finish off and output previous formatted bytes. */ - *tp = 0; - if (temp[0]) - (*info->fprintf_func) (info->stream, "%s", temp); - tp = temp; - - (*info->print_address_func) ((bfd_vma) number, info); + format_hex(number, str); } break; @@ -1968,13 +1935,7 @@ print_with_operands (const struct cris_opcode *opcodep, /* Like n but the offset is bits <3:0> in the instruction. */ unsigned long number = (buffer[0] & 0xf) * 2 + addr; - /* Finish off and output previous formatted bytes. */ - *tp = 0; - if (temp[0]) - (*info->fprintf_func) (info->stream, "%s", temp); - tp = temp; - - (*info->print_address_func) ((bfd_vma) number, info); + format_hex(number, str); } break; @@ -2045,43 +2006,16 @@ print_with_operands (const struct cris_opcode *opcodep, break; default: - strcpy (tp, "bug"); - tp += 3; + g_string_append(str, "bug"); number = 42; } if ((*cs == 'z' && (insn & 0x20)) || (opcodep->match == BDAP_QUICK_OPCODE && (nbytes <= 2 || buffer[1 + nbytes] == 0))) - tp = FORMAT_DEC (number, tp, signedp); + format_dec(number, str, signedp); else - { - unsigned int highbyte = (number >> 24) & 0xff; - - /* Either output this as an address or as a number. If it's - a dword with the same high-byte as the address of the - insn, assume it's an address, and also if it's a non-zero - non-0xff high-byte. If this is a jsr or a jump, then - it's definitely an address. */ - if (nbytes == 4 - && (highbyte == ((addr >> 24) & 0xff) - || (highbyte != 0 && highbyte != 0xff) - || info->insn_type == dis_branch - || info->insn_type == dis_jsr)) - { - /* Finish off and output previous formatted bytes. */ - *tp = 0; - tp = temp; - if (temp[0]) - (*info->fprintf_func) (info->stream, "%s", temp); - - (*info->print_address_func) ((bfd_vma) number, info); - - info->target = number; - } - else - tp = format_hex (number, tp); - } + format_hex(number, str); } else { @@ -2116,7 +2050,7 @@ print_with_operands (const struct cris_opcode *opcodep, info->data_size = size; } - *tp++ = '['; + g_string_append_c(str, '['); if (prefix_opcodep /* We don't match dip with a postincremented field @@ -2126,8 +2060,8 @@ print_with_operands (const struct cris_opcode *opcodep, { if (insn & 0x400) { - tp = format_reg (disdata, insn & 15, tp); - *tp++ = '='; + format_reg(disdata, insn & 15, str); + g_string_append_c(str, '='); } @@ -2146,16 +2080,7 @@ print_with_operands (const struct cris_opcode *opcodep, + prefix_buffer[4] * 65536 + prefix_buffer[5] * 0x1000000; - info->target = (bfd_vma) number; - - /* Finish off and output previous formatted - data. */ - *tp = 0; - tp = temp; - if (temp[0]) - (*info->fprintf_func) (info->stream, "%s", temp); - - (*info->print_address_func) ((bfd_vma) number, info); + format_hex(number, str); } else { @@ -2167,11 +2092,11 @@ print_with_operands (const struct cris_opcode *opcodep, info->target2 = prefix_insn & 15; - *tp++ = '['; - tp = format_reg (disdata, prefix_insn & 15, tp); + g_string_append_c(str, '['); + format_reg(disdata, prefix_insn & 15, str); if (prefix_insn & 0x400) - *tp++ = '+'; - *tp++ = ']'; + g_string_append_c(str, '+'); + g_string_append_c(str, ']'); } break; @@ -2184,10 +2109,10 @@ print_with_operands (const struct cris_opcode *opcodep, number -= 256; /* Output "reg+num" or, if num < 0, "reg-num". */ - tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp); + format_reg(disdata, (prefix_insn >> 12) & 15, str); if (number >= 0) - *tp++ = '+'; - tp = FORMAT_DEC (number, tp, 1); + g_string_append_c(str, '+'); + format_dec(number, str, 1); info->flags |= CRIS_DIS_FLAG_MEM_TARGET_IS_REG; info->target = (prefix_insn >> 12) & 15; @@ -2197,16 +2122,15 @@ print_with_operands (const struct cris_opcode *opcodep, case BIAP_OPCODE: /* Output "r+R.m". */ - tp = format_reg (disdata, prefix_insn & 15, tp); - *tp++ = '+'; - tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp); - *tp++ = '.'; - *tp++ = mode_char[(prefix_insn >> 4) & 3]; + format_reg(disdata, prefix_insn & 15, str); + g_string_append_c(str, '+'); + format_reg(disdata, (prefix_insn >> 12) & 15, str); + g_string_append_c(str, '.'); + g_string_append_c(str, mode_char[(prefix_insn >> 4) & 3]); info->flags |= (CRIS_DIS_FLAG_MEM_TARGET2_IS_REG | CRIS_DIS_FLAG_MEM_TARGET_IS_REG - | ((prefix_insn & 0x8000) ? CRIS_DIS_FLAG_MEM_TARGET2_MULT4 : ((prefix_insn & 0x8000) @@ -2214,9 +2138,8 @@ print_with_operands (const struct cris_opcode *opcodep, break; case BDAP_INDIR_OPCODE: - /* Output "r+s.m", or, if "s" is [pc+], "r+s" or - "r-s". */ - tp = format_reg (disdata, (prefix_insn >> 12) & 15, tp); + /* Output "r+s.m", or, if "s" is [pc+], "r+s" or "r-s". */ + format_reg(disdata, (prefix_insn >> 12) & 15, str); if ((prefix_insn & 0x400) && (prefix_insn & 15) == 15) { @@ -2253,8 +2176,7 @@ print_with_operands (const struct cris_opcode *opcodep, break; default: - strcpy (tp, "bug"); - tp += 3; + g_string_append(str, "bug"); number = 42; } @@ -2265,39 +2187,32 @@ print_with_operands (const struct cris_opcode *opcodep, address. */ if (nbytes == 4) { - /* Finish off and output previous formatted - bytes. */ - *tp++ = '+'; - *tp = 0; - tp = temp; - (*info->fprintf_func) (info->stream, "%s", temp); - - (*info->print_address_func) ((bfd_vma) number, info); + g_string_append_c(str, '+'); + format_hex(number, str); } else { if (number >= 0) - *tp++ = '+'; - tp = FORMAT_DEC (number, tp, 1); + g_string_append_c(str, '+'); + format_dec(number, str, 1); } } else { /* Output "r+[R].m" or "r+[R+].m". */ - *tp++ = '+'; - *tp++ = '['; - tp = format_reg (disdata, prefix_insn & 15, tp); + g_string_append_c(str, '+'); + g_string_append_c(str, '['); + format_reg(disdata, prefix_insn & 15, str); if (prefix_insn & 0x400) - *tp++ = '+'; - *tp++ = ']'; - *tp++ = '.'; - *tp++ = mode_char[(prefix_insn >> 4) & 3]; + g_string_append_c(str, '+'); + g_string_append_c(str, ']'); + g_string_append_c(str, '.'); + g_string_append_c(str, mode_char[(prefix_insn >> 4) & 3]); info->flags |= (CRIS_DIS_FLAG_MEM_TARGET2_IS_REG | CRIS_DIS_FLAG_MEM_TARGET2_MEM | CRIS_DIS_FLAG_MEM_TARGET_IS_REG - | (((prefix_insn >> 4) == 2) ? 0 : (((prefix_insn >> 4) & 3) == 1 @@ -2315,26 +2230,26 @@ print_with_operands (const struct cris_opcode *opcodep, } else { - tp = format_reg (disdata, insn & 15, tp); + format_reg(disdata, insn & 15, str); info->flags |= CRIS_DIS_FLAG_MEM_TARGET_IS_REG; info->target = insn & 15; if (insn & 0x400) - *tp++ = '+'; + g_string_append_c(str, '+'); } - *tp++ = ']'; + g_string_append_c(str, ']'); } break; case 'x': - tp = format_reg (disdata, (insn >> 12) & 15, tp); - *tp++ = '.'; - *tp++ = mode_char[(insn >> 4) & 3]; + format_reg(disdata, (insn >> 12) & 15, str); + g_string_append_c(str, '.'); + g_string_append_c(str, mode_char[(insn >> 4) & 3]); break; case 'I': - tp = FORMAT_DEC (insn & 63, tp, 0); + format_dec(insn & 63, str, 0); break; case 'b': @@ -2353,21 +2268,17 @@ print_with_operands (const struct cris_opcode *opcodep, info->target = (bfd_vma) where; - *tp = 0; - tp = temp; - (*info->fprintf_func) (info->stream, "%s%s ", - temp, cris_cc_strings[insn >> 12]); - - (*info->print_address_func) ((bfd_vma) where, info); + g_string_append(str, cris_cc_strings[insn >> 12]); + format_hex(where, str); } break; case 'c': - tp = FORMAT_DEC (insn & 31, tp, 0); + format_dec(insn & 31, str, 0); break; case 'C': - tp = FORMAT_DEC (insn & 15, tp, 0); + format_dec(insn & 15, str, 0); break; case 'o': @@ -2385,10 +2296,7 @@ print_with_operands (const struct cris_opcode *opcodep, target = addr + ((disdata->distype == cris_dis_v32) ? 0 : 2) + offset; info->target = target; - *tp = 0; - tp = temp; - (*info->fprintf_func) (info->stream, "%s", temp); - (*info->print_address_func) (target, info); + format_hex(target, str); } break; @@ -2400,18 +2308,18 @@ print_with_operands (const struct cris_opcode *opcodep, if (number > 127) number = number - 256; - tp = FORMAT_DEC (number, tp, 1); - *tp++ = ','; - tp = format_reg (disdata, (insn >> 12) & 15, tp); + format_dec(number, str, 1); + g_string_append_c(str, ','); + format_reg(disdata, (insn >> 12) & 15, str); } break; case 'f': - tp = print_flags (disdata, insn, tp); + print_flags(disdata, insn, str); break; case 'i': - tp = FORMAT_DEC ((insn & 32) ? (insn & 31) | ~31L : insn & 31, tp, 1); + format_dec((insn & 32) ? (insn & 31) | ~31L : insn & 31, str, 1); break; case 'P': @@ -2421,29 +2329,25 @@ print_with_operands (const struct cris_opcode *opcodep, if (sregp == NULL || sregp->name == NULL) /* Should have been caught as a non-match earlier. */ - *tp++ = '?'; + g_string_append_c(str, '?'); else { - *tp++ = REGISTER_PREFIX_CHAR; - strcpy (tp, sregp->name); - tp += strlen (tp); + g_string_append_c(str, REGISTER_PREFIX_CHAR); + g_string_append(str, sregp->name); } } break; default: - strcpy (tp, "???"); - tp += 3; + g_string_append(str, "???"); } } - *tp = 0; - if (prefix_opcodep) - (*info->fprintf_func) (info->stream, " (OOPS unused prefix \"%s: %s\")", + (*info->fprintf_func) (info->stream, "(OOPS unused prefix \"%s: %s\") ", prefix_opcodep->name, prefix_opcodep->args); - (*info->fprintf_func) (info->stream, "%s", temp); + (*info->fprintf_func) (info->stream, "%s", str->str); } From patchwork Sat Apr 13 05:23:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 788572 Delivered-To: patch@linaro.org Received: by 2002:adf:e6ca:0:b0:346:15ad:a2a with SMTP id y10csp1041167wrm; Fri, 12 Apr 2024 22:25:32 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUbuN/Qv/FVZiGFsORtpA1n3FleMGrTSQTqYBalbpTwNHy1NKvvZ3kDBjdCJQKhUNNskEJDgLyDQ3gB5uqT11Au X-Google-Smtp-Source: AGHT+IE9CNk7xZpvR90t062WL9COakL9xWpB/n8uTy8xGH/qA2V5AIO5jV9TkuAk4sTzNNFG9rlu X-Received: by 2002:ac8:468a:0:b0:436:87b8:61b with SMTP id g10-20020ac8468a000000b0043687b8061bmr3604765qto.7.1712985931924; Fri, 12 Apr 2024 22:25:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712985931; cv=none; d=google.com; s=arc-20160816; b=glzeMixZ2qmZp+j7r7evPB1NFdWmhDb2kJ/e+g2/qYQmXxhKoKEWY8/dCxlxgc4khH jr1eAYfUFdqDBkKFW9ID6kG+YIvFSjcth7mFhx7fCY+bCb2oCSAJIQjtnzDz/hxMoRR+ a0h/+VX0gwg3kt8lieovnzKU7JJnRUKVL+rf5EUv4jDNFko53cer99hkR4zMTpj4noce bKxrg7IYyFMc80zIdARvE+94fceQmYyrD0IeSenHwIIC/iwV0fRgecdyMx9drxtFamko HjT+kd0oLDXYJS1bW/Ta27Mi49w6vsurNDLbrbdKhp+SiJw4AnO/GyzfvOtJXXd4l7e8 rOWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=pF9Q6sT8QWcjaBZdy/z96I4yqBVj9yrUa4QsuaKPwaQ=; fh=8mBO+FwhNjUD9ALhUxcYEwIlwc/hLQI6+6+QuDX34lg=; b=I68H3gmpvNtVcYoRe9vJwOCACDQgsL3voqrw88xyNBnVnCtWAWJMj7zc02J53dc1m/ iSmhdR2WYd60KyYhYf6rfb3/AHjwEZMGPdjslzc7bQxgw1rx3LqepDPiiE+WxIGKvniq soejDT1vLHq3GVQ6tNowT9Jt/+q134XPjDjE5gVOHML4vaZ1absYjsgrk2DZoEqPlU9E bjXi7fw1JFVduo/t5lBmODQ1I6C6jx9HfehNUEEmCSzSTihHS18t1sGA5GaFxHyI6sD+ 7trT7Vd42AQJM8y7NPo4iQWzAZt7YyUUEHD22y7qN77Hbhx1VBU8hN9LXMWzqaB5eSsS UdYg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=QPo3Khdj; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id eh25-20020a05622a579900b00432c49655ccsi4815813qtb.77.2024.04.12.22.25.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Apr 2024 22:25:31 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=QPo3Khdj; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rvVre-0001tz-Rk; Sat, 13 Apr 2024 01:23:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rvVrd-0001tb-As for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:45 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rvVra-0001dT-DB for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:45 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-2a526803fccso904135a91.1 for ; Fri, 12 Apr 2024 22:23:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1712985821; x=1713590621; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pF9Q6sT8QWcjaBZdy/z96I4yqBVj9yrUa4QsuaKPwaQ=; b=QPo3Khdj1My1L00CDFnB45MqqE0xgVk3NvX09InE+z9LkqmTsv6HvoEbVrQOPB4KHO SFvNU5TAB7RcE9/1WSsroyqfqxOsAuSEy6mTOrxzUIBpFmON18tL+ni5XdLXldIID5bA WgEvTlzZRVKfouKw+aicU30MgMOtbLFgwBuo69fGKyqRCL3N9CGRUPRs90W6WyrimtYI 8xtj4YfCJ0Pd0v8mihQ4Qzf8ZzEYYWk1spm3bbd0K0od85gp/9NZSLyOFHOe/bMK1e+Z 2I+ftX1fzJC9g6+8Z54s1doflodMgjgug5f5f0c5TgqdfsoDojDg/apCVsYCAb6fOy96 YrEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712985821; x=1713590621; 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=pF9Q6sT8QWcjaBZdy/z96I4yqBVj9yrUa4QsuaKPwaQ=; b=RL76l4QpFM9OXCeht7oYlAoqiZZJ2LOQoXXpHHg7AscZ6qHeJqnvsP1PK8hROdjbj7 a7ldGbKploYjm3Vj2PnHeY2XRI9JYw0PENtGbThV0viQaVl3yBec6DgXEP5XeYA6RtUr P2mf2gF3OTvrqyzQygxO6BPEAv0gCRKM61FROSqf+ZjP+eyEEyGgan2zEKr4jqOKxuEy t239U9NF/Q6PJi5HRb5lSZ3vBXlBdzx/EqC5+qa8zJl4gZb/ltNbjSX2/q6Lp2HiIUlI O37Q7aY3xG/vUFMLld0kxlPOmH1JIDPAfbMI6+WlaBSKIdKd8pX0IS7MF2GR7abnwSvk yfQA== X-Gm-Message-State: AOJu0YxpH+d3M1oUf1GGEkg4O08tJkLvRxxZBp/i+0G0GCMabPBzWSrc xcfZgc0g64mJZNSEonJpB4kJ5s2BYaWVIB4Of0NwRYlW0Jq+OVVRQF57UqSHXty75/iWAN5/WT6 4 X-Received: by 2002:a17:90b:46c8:b0:2a2:50ef:ece2 with SMTP id jx8-20020a17090b46c800b002a250efece2mr4154763pjb.17.1712985821014; Fri, 12 Apr 2024 22:23:41 -0700 (PDT) Received: from stoup.. (174-21-72-5.tukw.qwest.net. [174.21.72.5]) by smtp.gmail.com with ESMTPSA id v19-20020a17090abb9300b002a0544b81d6sm3564074pjr.35.2024.04.12.22.23.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Apr 2024 22:23:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: edgar.iglesias@gmail.com, philmd@linaro.org Subject: [PATCH 5/6] disas/cris: Remove struct cris_disasm_data Date: Fri, 12 Apr 2024 22:23:32 -0700 Message-Id: <20240413052333.688151-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240413052333.688151-1-richard.henderson@linaro.org> References: <20240413052333.688151-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org As the structure contains one element, pass the element around instead of the structure. Signed-off-by: Richard Henderson --- disas/cris.c | 187 +++++++++++++++++++++------------------------------ 1 file changed, 76 insertions(+), 111 deletions(-) diff --git a/disas/cris.c b/disas/cris.c index 692cd4d163..71c292188a 100644 --- a/disas/cris.c +++ b/disas/cris.c @@ -1239,30 +1239,11 @@ cris_cc_strings[] = enum cris_disass_family { cris_dis_v0_v10, cris_dis_common_v10_v32, cris_dis_v32 }; -/* Stored in the disasm_info->private_data member. */ -struct cris_disasm_data -{ - /* Whether this code is flagged as crisv32. FIXME: Should be an enum - that includes "compatible". */ - enum cris_disass_family distype; -}; - -static int cris_constraint - (const char *, unsigned, unsigned, struct cris_disasm_data *); - -/* Parse disassembler options and store state in info. FIXME: For the - time being, we abuse static variables. */ - -static void -cris_parse_disassembler_options (struct cris_disasm_data *disdata, - char *disassembler_options, - enum cris_disass_family distype) -{ - disdata->distype = distype; -} +static int cris_constraint(const char *, unsigned, unsigned, + enum cris_disass_family); static const struct cris_spec_reg * -spec_reg_info (unsigned int sreg, enum cris_disass_family distype) +spec_reg_info(unsigned int sreg, enum cris_disass_family distype) { int i; @@ -1309,9 +1290,9 @@ number_of_bits (unsigned int val) /* Get an entry in the opcode-table. */ static const struct cris_opcode * -get_opcode_entry (unsigned int insn, - unsigned int prefix_insn, - struct cris_disasm_data *disdata) +get_opcode_entry(unsigned int insn, + unsigned int prefix_insn, + enum cris_disass_family distype) { /* For non-prefixed insns, we keep a table of pointers, indexed by the insn code. Each entry is initialized when found to be NULL. */ @@ -1349,7 +1330,7 @@ get_opcode_entry (unsigned int insn, const struct cris_opcode *popcodep = (opc_table[prefix_insn] != NULL ? opc_table[prefix_insn] - : get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata)); + : get_opcode_entry(prefix_insn, NO_CRIS_PREFIX, distype)); if (popcodep == NULL) return NULL; @@ -1406,7 +1387,7 @@ get_opcode_entry (unsigned int insn, { int level_of_match; - if (disdata->distype == cris_dis_v32) + if (distype == cris_dis_v32) { switch (opcodep->applicable_version) { @@ -1469,10 +1450,8 @@ get_opcode_entry (unsigned int insn, if ((opcodep->match & insn) == opcodep->match && (opcodep->lose & insn) == 0 && ((level_of_match - = cris_constraint (opcodep->args, - insn, - prefix_insn, - disdata)) + = cris_constraint(opcodep->args, insn, + prefix_insn, distype)) >= 0) && ((level_of_match += 2 * number_of_bits (opcodep->match @@ -1509,10 +1488,10 @@ get_opcode_entry (unsigned int insn, indicating the confidence in the match (higher is better). */ static int -cris_constraint (const char *cs, - unsigned int insn, - unsigned int prefix_insn, - struct cris_disasm_data *disdata) +cris_constraint(const char *cs, + unsigned int insn, + unsigned int prefix_insn, + enum cris_disass_family distype) { int retval = 0; int tmp; @@ -1526,7 +1505,7 @@ cris_constraint (const char *cs, /* Do not recognize "pop" if there's a prefix and then only for v0..v10. */ if (prefix_insn != NO_CRIS_PREFIX - || disdata->distype != cris_dis_v0_v10) + || distype != cris_dis_v0_v10) return -1; break; @@ -1569,7 +1548,7 @@ cris_constraint (const char *cs, if (insn & 0x400) { const struct cris_opcode *prefix_opcodep - = get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata); + = get_opcode_entry(prefix_insn, NO_CRIS_PREFIX, distype); if (prefix_opcodep->match == DIP_OPCODE) return -1; @@ -1589,7 +1568,7 @@ cris_constraint (const char *cs, { /* Match the prefix insn to BDAPQ. */ const struct cris_opcode *prefix_opcodep - = get_opcode_entry (prefix_insn, NO_CRIS_PREFIX, disdata); + = get_opcode_entry(prefix_insn, NO_CRIS_PREFIX, distype); if (prefix_opcodep->match == BDAP_QUICK_OPCODE) { @@ -1602,7 +1581,7 @@ cris_constraint (const char *cs, { unsigned int spec_reg = (insn >> 12) & 15; const struct cris_spec_reg *sregp - = spec_reg_info (spec_reg, disdata->distype); + = spec_reg_info(spec_reg, distype); /* For a special-register, the "prefix size" must match the size of the register. */ @@ -1631,7 +1610,7 @@ cris_constraint (const char *cs, case 'P': { const struct cris_spec_reg *sregp - = spec_reg_info ((insn >> 12) & 15, disdata->distype); + = spec_reg_info((insn >> 12) & 15, distype); /* Since we match four bits, we will give a value of 4-1 = 3 in a match. If there is a corresponding exact match of a @@ -1688,7 +1667,7 @@ format_dec(long number, GString *str, int signedp) /* Format the name of the general register regno into outbuffer. */ static void -format_reg(struct cris_disasm_data *disdata, int regno, GString *str) +format_reg(enum cris_disass_family distype, int regno, GString *str) { g_string_append_c(str, REGISTER_PREFIX_CHAR); @@ -1696,7 +1675,7 @@ format_reg(struct cris_disasm_data *disdata, int regno, GString *str) { case 15: /* For v32, there is no context in which we output PC. */ - if (disdata->distype == cris_dis_v32) + if (distype == cris_dis_v32) g_string_append(str, "acr"); else g_string_append(str, "pc"); @@ -1736,10 +1715,10 @@ format_sup_reg(unsigned int regno, GString *str) /* Return the length of an instruction. */ static unsigned -bytes_to_skip (unsigned int insn, - const struct cris_opcode *matchedp, - enum cris_disass_family distype, - const struct cris_opcode *prefix_matchedp) +bytes_to_skip(unsigned int insn, + const struct cris_opcode *matchedp, + enum cris_disass_family distype, + const struct cris_opcode *prefix_matchedp) { /* Each insn is a word plus "immediate" operands. */ unsigned to_skip = 2; @@ -1760,7 +1739,7 @@ bytes_to_skip (unsigned int insn, else if (matchedp->imm_oprnd_size == SIZE_SPEC_REG) { const struct cris_spec_reg *sregp - = spec_reg_info ((insn >> 12) & 15, distype); + = spec_reg_info((insn >> 12) & 15, distype); /* FIXME: Improve error handling; should have been caught earlier. */ @@ -1787,7 +1766,7 @@ bytes_to_skip (unsigned int insn, /* Print condition code flags. */ static void -print_flags(struct cris_disasm_data *disdata, unsigned int insn, GString *str) +print_flags(enum cris_disass_family distype, unsigned int insn, GString *str) { /* Use the v8 (Etrax 100) flag definitions for disassembly. The differences with v0 (Etrax 1..4) vs. Svinto are: @@ -1796,8 +1775,7 @@ print_flags(struct cris_disasm_data *disdata, unsigned int insn, GString *str) FIXME: Emit v0..v3 flag names somehow. */ static const char v8_fnames[] = "cvznxibm"; static const char v32_fnames[] = "cvznxiup"; - const char *fnames - = disdata->distype == cris_dis_v32 ? v32_fnames : v8_fnames; + const char *fnames = distype == cris_dis_v32 ? v32_fnames : v8_fnames; unsigned char flagbits = (((insn >> 8) & 0xf0) | (insn & 15)); int i; @@ -1812,24 +1790,25 @@ print_flags(struct cris_disasm_data *disdata, unsigned int insn, GString *str) supposed to be output as an address mode. */ static void -print_with_operands (const struct cris_opcode *opcodep, - unsigned int insn, - unsigned char *buffer, - bfd_vma addr, - disassemble_info *info, - /* If a prefix insn was before this insn (and is supposed - to be output as an address), here is a description of - it. */ - const struct cris_opcode *prefix_opcodep, - unsigned int prefix_insn, - unsigned char *prefix_buffer) +print_with_operands(const struct cris_opcode *opcodep, + unsigned int insn, + unsigned char *buffer, + bfd_vma addr, + disassemble_info *info, + /* + * If a prefix insn was before this insn + * (and is supposed to be output as an address), + * here is a description of it. + */ + const struct cris_opcode *prefix_opcodep, + unsigned int prefix_insn, + unsigned char *prefix_buffer, + enum cris_disass_family distype) { g_autoptr(GString) str = g_string_new(opcodep->name); static const char mode_char[] = "bwd?"; const char *s; const char *cs; - struct cris_disasm_data *disdata - = (struct cris_disasm_data *) info->private_data; cs = opcodep->args; s = cs; @@ -1912,11 +1891,11 @@ print_with_operands (const struct cris_opcode *opcodep, case 'D': case 'r': - format_reg(disdata, insn & 15, str); + format_reg(distype, insn & 15, str); break; case 'R': - format_reg(disdata, (insn >> 12) & 15, str); + format_reg(distype, (insn >> 12) & 15, str); break; case 'n': @@ -1960,7 +1939,7 @@ print_with_operands (const struct cris_opcode *opcodep, else if (opcodep->imm_oprnd_size == SIZE_SPEC_REG) { const struct cris_spec_reg *sregp - = spec_reg_info ((insn >> 12) & 15, disdata->distype); + = spec_reg_info((insn >> 12) & 15, distype); /* A NULL return should have been as a non-match earlier, so catch it as an internal error in the error-case @@ -1972,7 +1951,7 @@ print_with_operands (const struct cris_opcode *opcodep, /* PC is always incremented by a multiple of two. For CRISv32, immediates are always 4 bytes for special registers. */ - nbytes = disdata->distype == cris_dis_v32 + nbytes = distype == cris_dis_v32 ? 4 : (sregp->reg_size + 1) & ~1; } else @@ -2035,7 +2014,7 @@ print_with_operands (const struct cris_opcode *opcodep, else if (opcodep->imm_oprnd_size == SIZE_SPEC_REG) { const struct cris_spec_reg *sregp - = spec_reg_info ((insn >> 12) & 15, disdata->distype); + = spec_reg_info((insn >> 12) & 15, distype); /* FIXME: Improve error handling; should have been caught earlier. */ @@ -2060,7 +2039,7 @@ print_with_operands (const struct cris_opcode *opcodep, { if (insn & 0x400) { - format_reg(disdata, insn & 15, str); + format_reg(distype, insn & 15, str); g_string_append_c(str, '='); } @@ -2093,7 +2072,7 @@ print_with_operands (const struct cris_opcode *opcodep, info->target2 = prefix_insn & 15; g_string_append_c(str, '['); - format_reg(disdata, prefix_insn & 15, str); + format_reg(distype, prefix_insn & 15, str); if (prefix_insn & 0x400) g_string_append_c(str, '+'); g_string_append_c(str, ']'); @@ -2109,7 +2088,7 @@ print_with_operands (const struct cris_opcode *opcodep, number -= 256; /* Output "reg+num" or, if num < 0, "reg-num". */ - format_reg(disdata, (prefix_insn >> 12) & 15, str); + format_reg(distype, (prefix_insn >> 12) & 15, str); if (number >= 0) g_string_append_c(str, '+'); format_dec(number, str, 1); @@ -2122,9 +2101,9 @@ print_with_operands (const struct cris_opcode *opcodep, case BIAP_OPCODE: /* Output "r+R.m". */ - format_reg(disdata, prefix_insn & 15, str); + format_reg(distype, prefix_insn & 15, str); g_string_append_c(str, '+'); - format_reg(disdata, (prefix_insn >> 12) & 15, str); + format_reg(distype, (prefix_insn >> 12) & 15, str); g_string_append_c(str, '.'); g_string_append_c(str, mode_char[(prefix_insn >> 4) & 3]); @@ -2139,7 +2118,7 @@ print_with_operands (const struct cris_opcode *opcodep, case BDAP_INDIR_OPCODE: /* Output "r+s.m", or, if "s" is [pc+], "r+s" or "r-s". */ - format_reg(disdata, (prefix_insn >> 12) & 15, str); + format_reg(distype, (prefix_insn >> 12) & 15, str); if ((prefix_insn & 0x400) && (prefix_insn & 15) == 15) { @@ -2202,7 +2181,7 @@ print_with_operands (const struct cris_opcode *opcodep, /* Output "r+[R].m" or "r+[R+].m". */ g_string_append_c(str, '+'); g_string_append_c(str, '['); - format_reg(disdata, prefix_insn & 15, str); + format_reg(distype, prefix_insn & 15, str); if (prefix_insn & 0x400) g_string_append_c(str, '+'); g_string_append_c(str, ']'); @@ -2230,7 +2209,7 @@ print_with_operands (const struct cris_opcode *opcodep, } else { - format_reg(disdata, insn & 15, str); + format_reg(distype, insn & 15, str); info->flags |= CRIS_DIS_FLAG_MEM_TARGET_IS_REG; info->target = insn & 15; @@ -2243,7 +2222,7 @@ print_with_operands (const struct cris_opcode *opcodep, break; case 'x': - format_reg(disdata, (insn >> 12) & 15, str); + format_reg(distype, (insn >> 12) & 15, str); g_string_append_c(str, '.'); g_string_append_c(str, mode_char[(insn >> 4) & 3]); break; @@ -2259,7 +2238,7 @@ print_with_operands (const struct cris_opcode *opcodep, if (where > 32767) where -= 65536; - where += addr + ((disdata->distype == cris_dis_v32) ? 0 : 4); + where += addr + ((distype == cris_dis_v32) ? 0 : 4); if (insn == BA_PC_INCR_OPCODE) info->insn_type = dis_branch; @@ -2294,7 +2273,7 @@ print_with_operands (const struct cris_opcode *opcodep, else info->insn_type = dis_condbranch; - target = addr + ((disdata->distype == cris_dis_v32) ? 0 : 2) + offset; + target = addr + (distype == cris_dis_v32 ? 0 : 2) + offset; info->target = target; format_hex(target, str); } @@ -2310,12 +2289,12 @@ print_with_operands (const struct cris_opcode *opcodep, format_dec(number, str, 1); g_string_append_c(str, ','); - format_reg(disdata, (insn >> 12) & 15, str); + format_reg(distype, (insn >> 12) & 15, str); } break; case 'f': - print_flags(disdata, insn, str); + print_flags(distype, insn, str); break; case 'i': @@ -2325,7 +2304,7 @@ print_with_operands (const struct cris_opcode *opcodep, case 'P': { const struct cris_spec_reg *sregp - = spec_reg_info ((insn >> 12) & 15, disdata->distype); + = spec_reg_info((insn >> 12) & 15, distype); if (sregp == NULL || sregp->name == NULL) /* Should have been caught as a non-match earlier. */ @@ -2356,15 +2335,14 @@ print_with_operands (const struct cris_opcode *opcodep, WITH_REG_PREFIX. */ static int -print_insn_cris_generic (bfd_vma memaddr, - disassemble_info *info) +print_insn_cris_generic(bfd_vma memaddr, + disassemble_info *info, + enum cris_disass_family distype) { int nbytes; unsigned int insn; const struct cris_opcode *matchedp; int advance = 0; - struct cris_disasm_data *disdata - = (struct cris_disasm_data *) info->private_data; /* No instruction will be disassembled as longer than this number of bytes; stacked prefixes will not be expanded. */ @@ -2416,7 +2394,7 @@ print_insn_cris_generic (bfd_vma memaddr, of a nuiscance that we will just output "bcc .+2" for it and signal it as a noninsn. */ (*info->fprintf_func) (info->stream, - disdata->distype == cris_dis_v32 + distype == cris_dis_v32 ? "bcc ." : "bcc .+2"); info->insn_type = dis_noninsn; advance += 2; @@ -2428,7 +2406,7 @@ print_insn_cris_generic (bfd_vma memaddr, unsigned int prefix_insn = insn; int prefix_size = 0; - matchedp = get_opcode_entry (insn, NO_CRIS_PREFIX, disdata); + matchedp = get_opcode_entry(insn, NO_CRIS_PREFIX, distype); /* Check if we're supposed to write out prefixes as address modes and if this was a prefix. */ @@ -2436,12 +2414,11 @@ print_insn_cris_generic (bfd_vma memaddr, { /* If it's a prefix, put it into the prefix vars and get the main insn. */ - prefix_size = bytes_to_skip (prefix_insn, matchedp, - disdata->distype, NULL); + prefix_size = bytes_to_skip(prefix_insn, matchedp, distype, NULL); prefix_opcodep = matchedp; insn = bufp[prefix_size] + bufp[prefix_size + 1] * 256; - matchedp = get_opcode_entry (insn, prefix_insn, disdata); + matchedp = get_opcode_entry(insn, prefix_insn, distype); if (matchedp != NULL) { @@ -2469,15 +2446,13 @@ print_insn_cris_generic (bfd_vma memaddr, } else { - advance - += bytes_to_skip (insn, matchedp, disdata->distype, - prefix_opcodep); + advance += bytes_to_skip(insn, matchedp, distype, prefix_opcodep); /* The info_type and assorted fields will be set according to the operands. */ - print_with_operands (matchedp, insn, bufp, addr, info, - prefix_opcodep, prefix_insn, - prefix_buffer); + print_with_operands(matchedp, insn, bufp, addr, info, + prefix_opcodep, prefix_insn, + prefix_buffer, distype); } } } @@ -2513,23 +2488,13 @@ print_insn_cris_generic (bfd_vma memaddr, } int -print_insn_crisv10 (bfd_vma vma, - disassemble_info *info) +print_insn_crisv10(bfd_vma vma, disassemble_info *info) { - struct cris_disasm_data disdata; - info->private_data = &disdata; - cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_v0_v10); - return print_insn_cris_generic (vma, info); + return print_insn_cris_generic(vma, info, cris_dis_v0_v10); } int -print_insn_crisv32 (bfd_vma vma, - disassemble_info *info) +print_insn_crisv32(bfd_vma vma, disassemble_info *info) { - struct cris_disasm_data disdata; - info->private_data = &disdata; - cris_parse_disassembler_options (&disdata, info->disassembler_options, - cris_dis_v32); - return print_insn_cris_generic (vma, info); + return print_insn_cris_generic(vma, info, cris_dis_v32); } From patchwork Sat Apr 13 05:23:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 788569 Delivered-To: patch@linaro.org Received: by 2002:adf:e6ca:0:b0:346:15ad:a2a with SMTP id y10csp1041155wrm; Fri, 12 Apr 2024 22:25:31 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUqXVHCNnVREarbCB86wr/aZ4gocieFXU8STWA5lq7djZcHb3WIFG+DE2ZNdb24YKvY+0TI9Vidxictx83qmeUH X-Google-Smtp-Source: AGHT+IHaKjFFuF4/mMcXDtKTTXMgQclyudECIO6EsYUsStDbnRuz/fAut3SSdYbbhUWMbQzgutPa X-Received: by 2002:a05:620a:45a4:b0:78e:a3d3:eec1 with SMTP id bp36-20020a05620a45a400b0078ea3d3eec1mr5843281qkb.47.1712985931178; Fri, 12 Apr 2024 22:25:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712985931; cv=none; d=google.com; s=arc-20160816; b=vhzvyiVqj1TJSQmr8Ry+y9UgX0COOOR8iJdeXGFAIejlWqM5VMP75XY76WJqU3SPqC aCEEt7JwT8X0jZ6H/dGr/U/PI+Ma7GandK1CIo3fr58Lnbk5AhDnBQ1iU3QgrqTNwOFA 5Gn3iU8hPd/dYs5n6ad4CBfSGxKuT71qmRPP4r1i760B0Xninmjp/yPMGcKvbdbANNVX leJNeXOn8rGJGY6bKR5DxBUVw69Fj6qDb8Vu9utiHkhcp0apUWfWCimsGohsn0/gAK74 dVkSoUj1EgaIOxuWB2cQy+TAFldH1NPRIg0uNEmOFm0SnNzeavrvheyI6QlSZYrRWEzU Fc7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=1i3GYPODdGEunG05Dn7518COsozxbeHPzw45fI5pR1c=; fh=8mBO+FwhNjUD9ALhUxcYEwIlwc/hLQI6+6+QuDX34lg=; b=MQ3c7M2uRwOuhJdeePSbQnBA66zHkffwH8idq24wQcnJAhDVyXuXgT28bWDEvINsCB EzXVmMHnjZWTCSPUNIH1IadU3WfRbccKEJJNfxowo9hZQOEu76AqCkHXwV0bQ4CeJmbM 5LCSUyvFKKRChRDTfe9lzBL73b6FYZ1GSfU1SAW7WS6hsjsSeIU9mlPKaPPZWb0P8VdD xOR+YhiwnTVZKLCthYbu39r8DeFF7uX9r6nT7NwkN04Qi42CEQZjbtjsnUP9bq/SWiTm PdpqTEWgYaLyCPCH29nE3XPx4usH8Auo8AVI2Uas/7OwKjbsOUvGnyILWq3CggfKftMz 4cDg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="VNApF3/h"; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id c17-20020ac87d91000000b0043693c05699si2833956qtd.129.2024.04.12.22.25.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Apr 2024 22:25:31 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="VNApF3/h"; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rvVrf-0001u5-H9; Sat, 13 Apr 2024 01:23:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rvVrd-0001ta-8i for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:45 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rvVrb-0001da-HA for qemu-devel@nongnu.org; Sat, 13 Apr 2024 01:23:44 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-1e2bbc2048eso13204925ad.3 for ; Fri, 12 Apr 2024 22:23:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1712985822; x=1713590622; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1i3GYPODdGEunG05Dn7518COsozxbeHPzw45fI5pR1c=; b=VNApF3/hWFHop3H4G2rHERoXM7b22zAN6+1OnAOZSUQ0vRmBA/EKJ0FYfQmd39EmXK WPlU4MeOg1m16VCrA/TiWrfjLVzdcwj01kPA8rkSI9CaVId1ISjHHXh9JRIxz7pUCEA7 +tGhoIjSEwRZitRXpcFyWjjqQTwrD+19UdfMTrGq5eQdDUZxSj2BBdoyGAPuMgad21Qt M6RQRDltUMtZXWDJtxpPVeCKiNH9jBN3USdPMdqkFXY0Pk4tcIaKvdaDU9zkZmWzdn44 Pzb2ngOXNYJdJfu3a8KrfFeZmBZV8LEMFoIlk7r9yjB0dti4Pcm8lEVByyqWl9AAz35O 5hcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712985822; x=1713590622; 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=1i3GYPODdGEunG05Dn7518COsozxbeHPzw45fI5pR1c=; b=vbgVlLd5RhgKcWYsRt3gzrsSewWTqO55QRN2PomGmbeekU/8YCgJ/hWLOqXwr4HNTn OBiOZl19lwVIWD+44r0Dyw5tvWiH/t4uwtMQzelZB4zGSRSZsj41eDqRaEfBhMzUWpkz NDPz7vDoIP9R4HRhAO8r32PYqfJtlSc71hy9tFbMwrxqsVnHFjRsQIj/v3c51VLJ1Hn1 HeSSlxvdddF0B0n+Rs7ucYf9UPougIpUKh0gQ8w2fkwGeTmwiuEpmne+37eAcJHfWGr1 IsMSyeFn9eVOcoCsJ+h4/XyloJ8U2J+842rGaUMZyDan6J6JDivKPbNYHjep0+7jvbL1 b9ng== X-Gm-Message-State: AOJu0YwU6cOBZW6XuRenl5JyNdPo/QB4a8UfK3ialSqw9EHnm8aje1BA YQMyv6EtRgLna7fW6EoU7Tz9kRTkNMrscCkZwBHwXVeetRXds5l3cUPSvg7/FijkAQHD2ixTpHB t X-Received: by 2002:a05:6a20:5648:b0:1a7:47ff:5f3e with SMTP id is8-20020a056a20564800b001a747ff5f3emr4370168pzc.9.1712985821960; Fri, 12 Apr 2024 22:23:41 -0700 (PDT) Received: from stoup.. (174-21-72-5.tukw.qwest.net. [174.21.72.5]) by smtp.gmail.com with ESMTPSA id v19-20020a17090abb9300b002a0544b81d6sm3564074pjr.35.2024.04.12.22.23.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Apr 2024 22:23:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: edgar.iglesias@gmail.com, philmd@linaro.org Subject: [PATCH 6/6] disas/cris: Improve output of register names Date: Fri, 12 Apr 2024 22:23:33 -0700 Message-Id: <20240413052333.688151-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240413052333.688151-1-richard.henderson@linaro.org> References: <20240413052333.688151-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::633; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x633.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Add REGISTER_PREFIX as a string literal that may be concatenated with other string literals. Use a table of the 16 register names instead of using g_string_append_printf. Signed-off-by: Richard Henderson --- disas/cris.c | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/disas/cris.c b/disas/cris.c index 71c292188a..01ea63c428 100644 --- a/disas/cris.c +++ b/disas/cris.c @@ -1234,6 +1234,7 @@ cris_cc_strings[] = #endif /* Sometimes we prefix all registers with this character. */ +#define REGISTER_PREFIX "$" #define REGISTER_PREFIX_CHAR '$' enum cris_disass_family @@ -1669,26 +1670,31 @@ format_dec(long number, GString *str, int signedp) static void format_reg(enum cris_disass_family distype, int regno, GString *str) { - g_string_append_c(str, REGISTER_PREFIX_CHAR); + static const char reg_names[16][5] = { + REGISTER_PREFIX "r0", + REGISTER_PREFIX "r1", + REGISTER_PREFIX "r2", + REGISTER_PREFIX "r3", + REGISTER_PREFIX "r4", + REGISTER_PREFIX "r5", + REGISTER_PREFIX "r6", + REGISTER_PREFIX "r7", + REGISTER_PREFIX "r8", + REGISTER_PREFIX "r9", + REGISTER_PREFIX "r10", + REGISTER_PREFIX "r11", + REGISTER_PREFIX "r12", + REGISTER_PREFIX "r13", + REGISTER_PREFIX "sp", + REGISTER_PREFIX "pc", + }; + const char *name = reg_names[regno]; - switch (regno) - { - case 15: - /* For v32, there is no context in which we output PC. */ - if (distype == cris_dis_v32) - g_string_append(str, "acr"); - else - g_string_append(str, "pc"); - break; + /* For v32, there is no context in which we output PC. */ + if (regno == 15 && distype == cris_dis_v32) + name = REGISTER_PREFIX "acr"; - case 14: - g_string_append(str, "sp"); - break; - - default: - g_string_append_printf(str, "r%d", regno); - break; - } + g_string_append(str, name); } /* Format the name of a support register into outbuffer. */ @@ -1861,8 +1867,7 @@ print_with_operands(const struct cris_opcode *opcodep, break; case 'A': - g_string_append_c(str, REGISTER_PREFIX_CHAR); - g_string_append(str, "acr"); + g_string_append(str, REGISTER_PREFIX "acr"); break; case '[':