From nobody Mon Dec 1 22:03:56 2025 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 461DA139D0A for ; Thu, 27 Nov 2025 00:05:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764201925; cv=none; b=ST8VsZYSMrxY0MXCNVJHj8mMhTkX3UvqLEEGiwBj8tLcIkMQITV5fm9DPGjjCu3EvTDVIUjbyXeTuDxXlC8nx3umXs7wDuWxtlVeY2vmFF5fytFqeKZWBfnV2dMxAMIyMhL7O9I2CSzU09CiWOdIb6rZXfM6c3hFbXxhYRvntxA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764201925; c=relaxed/simple; bh=fm31LYr+r1Mk6eOmL2mUFR1pHlPClurZTUfRYmKhjXw=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=ZfCAKJs9womitqFpKp/qDsZ8NCHn977zaWLd0y3tA1nj6HFGR+QSEmoGqsvbvJhNwmjEPHdlmFoPlCBfAVB3fByOnFa7u/LcDuzPHTGpnc/QTO38sO13Yv6oft4dQ8DDiwgxSarvrUHHVGoAI4xpF+p+rZQYy0GQwdyZm6Bxkag= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=hK+9wa/1; arc=none smtp.client-ip=209.85.210.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="hK+9wa/1" Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-7aae5f2633dso271345b3a.3 for ; Wed, 26 Nov 2025 16:05:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1764201922; x=1764806722; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=AbgYeXRX1tpSa+fMkqPhu1VxNciITZms7StEKaxjxLQ=; b=hK+9wa/1tgBhEv670hsmBajKVqSR2dMleqytQeE0K76QBTwL/ZH3C+VnvaImnZYoNx y0y3RR7DCZCFZirRnQ3x14EEOYN/LKtpR756NiW4NE8GFSo87ppWCtdtQZTnYvdmq3zT ty7CALcKQTHB2ZK/6BEFOix9QlDzjiLIhzDnU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764201922; x=1764806722; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=AbgYeXRX1tpSa+fMkqPhu1VxNciITZms7StEKaxjxLQ=; b=OgtDrtmQAvCjDmVwlg+POqJ1df2YYHvFS6yj/TOFjhK1d4fcP3pFNeU0QhyG462rJ9 tO3XLll5xxxssjCC/qvvGmoarCp3HexDr1vFYK/K80MiK0+mtBzXW3h4z1XHmJwOw3Uc 4TvXbFxmxwNOfePdaObR/thO9QqWICXFASOjpUBLhnwBF71Q/gHDaU4/6vG9PStrst9K A3y8b7iuvnIIn0DMyNUO1fRCwSk8z7crtUPT4/5qNB23RtDFY+drQ5Z12L/5tk3484iF MOrCM0C92NRiFWOTKwDFaw5Ixbmh2x1RRg28wiL4i6Hi9QdNRxKMyhDIbqXFqzHiyfzy WzPw== X-Forwarded-Encrypted: i=1; AJvYcCXiGjm+7UP1F2jecGtc5BF/rGaOvfqaRXTdV+C8YkbOotlfDiGBgQfzLO6CovhU95IDD4Dge+pwp021YZM=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3zXXI7vYsLvna6hMo766NhrSLiO53gXH3n1Pymi/e3hkLtSwY pvwJEwXTa0psMJyQOGJaMGODjBfv/fgQ1App7lk6xYJXq01lRJCPLq7emh6VaZ+dysQ= X-Gm-Gg: ASbGnctvGihFGh0o1oEM2diAS2z3beNURbMUwTP6AHvnORp3wmQRbdI1D6a7SNR2rsY incdWclq39ynt3eIMTxWNbsPJaGZMmQEQi2AOvTWLOGEe8v1+Qzpv9BlfaK54zvPxQV3GikmIun 1vRSje7pTp4Yr/C8gTWQJyjtxyKYf4E5VM9m76cSh0Bz4IGOXu/juuPwSHWk/EzXHFLcj1EV46z H8tE3jhWJfm/6yBqhxLO47YR/LPJe62zLJzd9EIqHsBNu3yLFgb+XJpaDIC6cJrQ8Fyf2a+05ld 8zg6v2fuEyahuPnWIRrTZRPgCqdD9CKp613ON4rpVi/pTWSs90oWPvi7huNymV7pBbfd3dxFAOS EPB7stqsSSWprdig7fWSlF8r+vFXKblJgMcdBgi2lGMUYwGO6JTF7BWme1hMRiRxDaTkfL27ckY PmXYvummMG3zip14FBXyZjKeHzXNSEa8BB2MYSWrvWiZpsMq5J3geIq2OQK3BBbym7UECkaNd6P g== X-Google-Smtp-Source: AGHT+IFN5aVvaTObkYMnMTFfGGpIzE1DEzwUB8tuClZa/6aKwhPO8ooP00iIWtMSm2wPzadATDS/7g== X-Received: by 2002:a05:6a20:7d9e:b0:342:5249:83b5 with SMTP id adf61e73a8af0-3614eb18216mr21887038637.11.1764201922462; Wed, 26 Nov 2025 16:05:22 -0800 (PST) Received: from kinako.work.home.arpa (p1352012-ipxg00a01sizuokaden.shizuoka.ocn.ne.jp. [114.145.28.12]) by smtp.googlemail.com with ESMTPSA id d2e1a72fcca58-7c3f0d65682sm22865797b3a.56.2025.11.26.16.05.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Nov 2025 16:05:21 -0800 (PST) From: Daniel Palmer To: geert@linux-m68k.org Cc: kas@kernel.org, mingo@kernel.org, seanjc@google.com, bp@alien8.de, linux-m68k@lists.linux-m68k.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [PATCH] m68k: implement runtime consts Date: Thu, 27 Nov 2025 09:05:04 +0900 Message-ID: <20251127000505.2117956-1-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This implements runtime consts for m68k which hopefully improves performance a tiny bit, maybe, hopefully... going downhill with the wind behind us. Constant pointers are just a register load with an immediate that is fixed up. Constant shifts are a very small register load with an immediate that is fixed up and then the val is shifted by the register. Putting the shift amount in a register is needed as the shift instruction can only encode a maximum of shift by 8 with an immediate. Before: 0013c6ea <__d_lookup_rcu_op_compare>: ... 13c6fc: 2003 movel %d3,%d0 13c6fe: 2239 0069 a980 movel 69a980 ,%d1 13c704: e2a8 lsrl %d1,%d0 13c706: e588 lsll #2,%d0 13c708: d0b9 0069 a97c addl 69a97c ,%d0 ... After: 0013c6c0 <__d_lookup_rcu_op_compare>: ... 13c6d2: 207c cafe f00d moveal #-889262067,%a0 13c6d8: 2003 movel %d3,%d0 13c6da: 720c moveq #12,%d1 13c6dc: e2a8 lsrl %d1,%d0 13c6de: e588 lsll #2,%d0 13c6e0: d1c0 addal %d0,%a0 ... Signed-off-by: Daniel Palmer --- arch/m68k/include/asm/runtime-const.h | 76 +++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 arch/m68k/include/asm/runtime-const.h diff --git a/arch/m68k/include/asm/runtime-const.h b/arch/m68k/include/asm/= runtime-const.h new file mode 100644 index 000000000000..576031c5b808 --- /dev/null +++ b/arch/m68k/include/asm/runtime-const.h @@ -0,0 +1,76 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * runtime const implementation for m68k + * Copyright (C) 2025 Daniel Palmer + * + * Based on arm64 version. + */ +#ifndef _ASM_RUNTIME_CONST_H +#define _ASM_RUNTIME_CONST_H + +#include +#include + +#define runtime_const_ptr(sym) ({ \ + typeof(sym) __ret; \ + asm_inline("1:\t" \ + "mov.l #0xcafef00d,%0\n\t" \ + ".pushsection runtime_ptr_" #sym ",\"a\"\n\t" \ + ".long 1b - .\n\t" \ + ".popsection" \ + : "=3Da" (__ret)); \ + __ret; }) + +static inline void __runtime_fixup_ptr(void *where, unsigned long val) +{ + u32 *value =3D where + 2; + const unsigned long start =3D ((unsigned long) where) + 2; + const unsigned long end =3D start + sizeof(*value); + + *value =3D val; + + flush_icache_range(start, end); +} + +#define runtime_const_shift_right_32(val, sym) ({ \ + u32 __tmp; \ + asm_inline("1:\t" \ + "moveq #12, %0\n\t" \ + "lsr.l %0, %1\n\t" \ + ".pushsection runtime_shift_" #sym ",\"a\"\n\t" \ + ".long 1b - .\n\t" \ + ".popsection" \ + : "=3D&d" (__tmp), "+d" (val)); \ + val; }) + +#define MOVEQ_DATA GENMASK(7, 0) +static inline void __runtime_fixup_shift(void *where, unsigned long val) +{ + u16 *insn =3D where; + const unsigned long start =3D (unsigned long) where; + const unsigned long end =3D start + sizeof(*insn); + + FIELD_MODIFY(MOVEQ_DATA, insn, val); + + flush_icache_range(start, end); +} + +#define runtime_const_init(type, sym) do { \ + extern s32 __start_runtime_##type##_##sym[]; \ + extern s32 __stop_runtime_##type##_##sym[]; \ + runtime_const_fixup(__runtime_fixup_##type, \ + (unsigned long)(sym), \ + __start_runtime_##type##_##sym, \ + __stop_runtime_##type##_##sym); \ +} while (0) + +static inline void runtime_const_fixup(void (*fn)(void *, unsigned long), + unsigned long val, s32 *start, s32 *end) +{ + while (start < end) { + fn(*start + (void *)start, val); + start++; + } +} + +#endif --=20 2.51.0