From patchwork Sun May 4 20:57:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 887213 Delivered-To: patch@linaro.org Received: by 2002:a5d:430f:0:b0:38f:210b:807b with SMTP id h15csp1753437wrq; Sun, 4 May 2025 13:59:23 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVaf1RHQSlRE9nNY1VIomxJZx6BhTqjMllHdHKOrzL7qiacziJ5HOqFv6n9BdRasQuwZbVpHg==@linaro.org X-Google-Smtp-Source: AGHT+IHIScWAxnq2oY5W9J8BkFRcdVpfkVAOWhyAt2XLeLi8mz4Rs3YiSXQwhZZtgvVjAIe3R6oe X-Received: by 2002:a05:622a:148f:b0:48d:2fa6:3876 with SMTP id d75a77b69052e-48d2fb57da8mr105612991cf.8.1746392362889; Sun, 04 May 2025 13:59:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1746392362; cv=none; d=google.com; s=arc-20240605; b=TTwgdn8Ahz78n4m2SxSkNuckd6gt4OKF1Y01arpTca3OpJsQcZ02H5MkrjqMB6DAoK EtBTpJxDFLnftquVzIO5T4M14Dk67SLeuXNqhONX+rm3eBoNbkTDDUUqeovv6FbzFbQX oQBixibdwdGoWa3OiLHtZW04fAi4oE8PbuLHlF/QMYjVIZJVm/vb9AOSQUrmUxxTANxy sEIjl7rlfxsMLG5Ir/DZULNhK197Kavipe0y4cMBgDQXyaGucwA6ePkGTitHV3DSOZmY ygL72L6Ym2mGHU9ggQ790Y7YR2VMYY6u7M11OeWc28e6PAeC1dk9mQ8HLFMg/dtVnPB5 ukFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=LsdvHpchZn7w+VdOLQ7CzBJ1Jp1aOUnFam9iiXyOn7g=; fh=KKi5kdl2ce1gsRtKYofhHcLmopdh5TnBxK9HgNIJWWM=; b=bjc7D4d2na0YK+If+6gHRVkCg0xCQGZWku0m3zHynnMnMy5Rl2HuRuU37J92ZRLrks HnM0DIELRsyVvZlI9nk0B0Re8yudmO5okws+WLgyTOab2wC2QWOOZsm+KkgE7fWEEeYe 3mBgqzx6ARiQfkVNERYVyvFk0XZAfqdgrm5Vtoan+SOanAJUsM9SToPTZM+7GQwLYu8y HaLABet60EI12wqTurc0/B4tXvvS5pm9RmPFH/9BDrhFrCixfCT38oIzObw/mxqSH1gi qe7E9dcM9TGOHevzc9lXJQ5bOb6D3C9Dd5EgnZqtgXn/QZPZQVcY7Km18MDvXzJPJelp vMCA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=yoErwMQI; 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; dara=neutral header.i=@linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id d75a77b69052e-48ed9957869si15702121cf.476.2025.05.04.13.59.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 04 May 2025 13:59:22 -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=yoErwMQI; 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; dara=neutral header.i=@linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uBgP2-0008Sf-M8; Sun, 04 May 2025 16:57:36 -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 1uBgOo-0008LT-Bq for qemu-devel@nongnu.org; Sun, 04 May 2025 16:57:23 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uBgOl-0006w1-M8 for qemu-devel@nongnu.org; Sun, 04 May 2025 16:57:21 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-22e09f57ed4so33323475ad.0 for ; Sun, 04 May 2025 13:57:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1746392238; x=1746997038; 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=LsdvHpchZn7w+VdOLQ7CzBJ1Jp1aOUnFam9iiXyOn7g=; b=yoErwMQIiiP/vNND36mfQn3JfwLhfPuM4W7LuOE0IeSfICkUcm5KMqrfXSXO97MInO pdPOoJMnZ5W+uugm4xSiOmhelUiWtamdkFkCQWAVaDGfQlMFmegKQXl44DKcLvghQo9V VkG4PHRLS1CzFr1CwkZpedD3NWWGqObzZMuiqf1Is2Mr5iBCp9aIqi4oldmgdZGQufXi LD8Y1ELcLGiM2KEZUYtFTr7k3BdZ4K/0YyrVVTFji77PxzTLb1KiEt37e7/dgM1s3yty EtijlnpcloKS6XXOmRMAUDXndT6c4gQkXbnYG9ilMk63EShcwaw/TYISNb/pUvzogZOd o/kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746392238; x=1746997038; 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=LsdvHpchZn7w+VdOLQ7CzBJ1Jp1aOUnFam9iiXyOn7g=; b=Ghs/nDFqxPfG+RIVIQv9y5SVjDyfEwFp1o27AICphJ1m8+ho6iseZuPGd7Sk12oC5L +1L2RXHBYuODGu+4l5LbOibU4F35F1bzSjsntxpIRew/t6FGBGfXqIsyPXKDn+xM8/Je CsCv/Kuw/9F4GpsBiC4A61DDL4UWc89swHhWMtIT3+VjeiyVTBlfSpMqlU3xvpY8loZ9 cmhQA6K9Ibjo2r0PcBK9TVwn9rLj4rzwl8DaA256GgY59Xsnl1j8O/WpQDlp+eV6p6c2 NBv0irBNNTHM1472uv2mRZNeTFOY3aGpPPpLAzOpqB9oe7AuutBlswKCVLw6ucgtbIP1 037g== X-Gm-Message-State: AOJu0Yx0+7uW/9zrTvehQ3ymPvJWzTerZyPpYpLSXwdc7ag42d1PmfmN XCwYHgJIxxwAPUWovb8v2GSO+frGxyiU63Vq9KrNd0P5HT7034SqsYAgCq/MrXtpQT5evJ2Dbxx F X-Gm-Gg: ASbGnctmChcNrtE9omDULnTiJNyHfdctGHXSskwKUlpcpvhpgmmtsM9QzUlBYzpjtcA d6Zaal+2AU4MGmOSxOpM9c9N6uJzXw//kMUa+DlM7UnmdjFWH1xUth1zXPbiFGLZW5FCmfXbqlx qnewE1y45i/o9kuG/UT3IcSCJaxOlL8N/45cQh38RSr+85NOMZDbNg0guHwcPLV6KlVJwYKrn7A rfCoQH6wAZvOPNqmaYxkvaQAoaOqXhvX3nDszSFjJ0RiQWH8CkECXnjR8qpYnSGmnzRKSg8DHK+ MybsDXBrDAprNRFCGHeHLCYznKCg3kHRxQ+xoccsx61q0H+Q9FASZIa/TLpP4ZSqsqmvzTbk2yY = X-Received: by 2002:a17:903:98d:b0:226:3392:3704 with SMTP id d9443c01a7336-22e1007aa81mr169779475ad.12.1746392238175; Sun, 04 May 2025 13:57:18 -0700 (PDT) Received: from stoup.. (71-212-47-143.tukw.qwest.net. [71.212.47.143]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22e150eadfcsm41346425ad.32.2025.05.04.13.57.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 May 2025 13:57:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: foss@percivaleng.com, Michael Rolnik , Laurent Vivier , "Edgar E . Iglesias" , Stafford Horne , Yoshinori Sato , Bastian Koppelmann , Max Filippov Subject: [PATCH 03/12] target: Use cpu_pointer_wrap_uint32 for 32-bit targets Date: Sun, 4 May 2025 13:57:04 -0700 Message-ID: <20250504205714.3432096-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250504205714.3432096-1-richard.henderson@linaro.org> References: <20250504205714.3432096-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::636; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x636.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 M68K, MicroBlaze, OpenRISC, RX, TriCore and Xtensa are all 32-bit targets. AVR is more complicated, but using a 32-bit wrap preserves current behaviour. Cc: Michael Rolnik Cc: Laurent Vivier Cc: Edgar E. Iglesias Cc: Stafford Horne Cc: Yoshinori Sato Cc: Bastian Koppelmann Cc: Max Filippov Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Edgar E. Iglesias --- include/accel/tcg/cpu-ops.h | 1 + accel/tcg/cputlb.c | 6 ++++++ target/avr/cpu.c | 6 ++++++ target/m68k/cpu.c | 1 + target/microblaze/cpu.c | 1 + target/openrisc/cpu.c | 1 + target/rx/cpu.c | 1 + target/tricore/cpu.c | 1 + target/xtensa/cpu.c | 1 + 9 files changed, 19 insertions(+) diff --git a/include/accel/tcg/cpu-ops.h b/include/accel/tcg/cpu-ops.h index 4f3b4fd3bc..dd8ea30016 100644 --- a/include/accel/tcg/cpu-ops.h +++ b/include/accel/tcg/cpu-ops.h @@ -326,6 +326,7 @@ int cpu_watchpoint_address_matches(CPUState *cpu, vaddr addr, vaddr len); * Common pointer_wrap implementations. */ vaddr cpu_pointer_wrap_notreached(CPUState *, int, vaddr, vaddr); +vaddr cpu_pointer_wrap_uint32(CPUState *, int, vaddr, vaddr); #endif diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index 75cd875948..022d555f48 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -2945,3 +2945,9 @@ vaddr cpu_pointer_wrap_notreached(CPUState *cs, int idx, vaddr res, vaddr base) { g_assert_not_reached(); } + +/* To be used for strict 32-bit targets. */ +vaddr cpu_pointer_wrap_uint32(CPUState *cs, int idx, vaddr res, vaddr base) +{ + return (uint32_t)res; +} diff --git a/target/avr/cpu.c b/target/avr/cpu.c index 250241541b..6995de6a12 100644 --- a/target/avr/cpu.c +++ b/target/avr/cpu.c @@ -250,6 +250,12 @@ static const TCGCPUOps avr_tcg_ops = { .cpu_exec_reset = cpu_reset, .tlb_fill = avr_cpu_tlb_fill, .do_interrupt = avr_cpu_do_interrupt, + /* + * TODO: code and data wrapping are different, but for the most part + * AVR only references bytes or aligned code fetches. But we use + * non-aligned MO_16 accesses for stack push/pop. + */ + .pointer_wrap = cpu_pointer_wrap_uint32, }; static void avr_cpu_class_init(ObjectClass *oc, const void *data) diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c index c5196a612e..6a09db3a6f 100644 --- a/target/m68k/cpu.c +++ b/target/m68k/cpu.c @@ -619,6 +619,7 @@ static const TCGCPUOps m68k_tcg_ops = { #ifndef CONFIG_USER_ONLY .tlb_fill = m68k_cpu_tlb_fill, + .pointer_wrap = cpu_pointer_wrap_uint32, .cpu_exec_interrupt = m68k_cpu_exec_interrupt, .cpu_exec_halt = m68k_cpu_has_work, .cpu_exec_reset = cpu_reset, diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c index d069e40e70..5eff1610c2 100644 --- a/target/microblaze/cpu.c +++ b/target/microblaze/cpu.c @@ -449,6 +449,7 @@ static const TCGCPUOps mb_tcg_ops = { #ifndef CONFIG_USER_ONLY .tlb_fill = mb_cpu_tlb_fill, + .pointer_wrap = cpu_pointer_wrap_uint32, .cpu_exec_interrupt = mb_cpu_exec_interrupt, .cpu_exec_halt = mb_cpu_has_work, .cpu_exec_reset = cpu_reset, diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c index 054ad33360..dfbb2df643 100644 --- a/target/openrisc/cpu.c +++ b/target/openrisc/cpu.c @@ -265,6 +265,7 @@ static const TCGCPUOps openrisc_tcg_ops = { #ifndef CONFIG_USER_ONLY .tlb_fill = openrisc_cpu_tlb_fill, + .pointer_wrap = cpu_pointer_wrap_uint32, .cpu_exec_interrupt = openrisc_cpu_exec_interrupt, .cpu_exec_halt = openrisc_cpu_has_work, .cpu_exec_reset = cpu_reset, diff --git a/target/rx/cpu.c b/target/rx/cpu.c index 36eba75545..c6dd5d6f83 100644 --- a/target/rx/cpu.c +++ b/target/rx/cpu.c @@ -225,6 +225,7 @@ static const TCGCPUOps rx_tcg_ops = { .restore_state_to_opc = rx_restore_state_to_opc, .mmu_index = rx_cpu_mmu_index, .tlb_fill = rx_cpu_tlb_fill, + .pointer_wrap = cpu_pointer_wrap_uint32, .cpu_exec_interrupt = rx_cpu_exec_interrupt, .cpu_exec_halt = rx_cpu_has_work, diff --git a/target/tricore/cpu.c b/target/tricore/cpu.c index e56f90fde9..4f035b6f76 100644 --- a/target/tricore/cpu.c +++ b/target/tricore/cpu.c @@ -190,6 +190,7 @@ static const TCGCPUOps tricore_tcg_ops = { .restore_state_to_opc = tricore_restore_state_to_opc, .mmu_index = tricore_cpu_mmu_index, .tlb_fill = tricore_cpu_tlb_fill, + .pointer_wrap = cpu_pointer_wrap_uint32, .cpu_exec_interrupt = tricore_cpu_exec_interrupt, .cpu_exec_halt = tricore_cpu_has_work, .cpu_exec_reset = cpu_reset, diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c index 91b71b6caa..ea9b6df3aa 100644 --- a/target/xtensa/cpu.c +++ b/target/xtensa/cpu.c @@ -318,6 +318,7 @@ static const TCGCPUOps xtensa_tcg_ops = { #ifndef CONFIG_USER_ONLY .tlb_fill = xtensa_cpu_tlb_fill, + .pointer_wrap = cpu_pointer_wrap_uint32, .cpu_exec_interrupt = xtensa_cpu_exec_interrupt, .cpu_exec_halt = xtensa_cpu_has_work, .cpu_exec_reset = cpu_reset,