From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by mx.groups.io with SMTP id smtpd.web11.91260.1684163690178396120 for ; Mon, 15 May 2023 08:14:50 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="signature has expired" header.i=@gmail.com header.s=20221208 header.b=Y3kGarJS; spf=pass (domain: gmail.com, ip: 209.85.221.51, mailfrom: pedro.falcato@gmail.com) Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-30796c0cbcaso9232585f8f.1 for ; Mon, 15 May 2023 08:14:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684163688; x=1686755688; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=GO3RFz2IXbc24NuGjowaQiO1Jafexk6A3oHNFoYJRTI=; b=Y3kGarJSWjbrzjZs/tqJ8Kx7DmAPEOjUXy1Olmv1QJjIhcR0r6IApF5TVI4Aai8Itv hpEKmRl7YMcvIdRsPZdKgYgQb2lULoMOh++PZtCOHscWDMrfmlErf/SwusUSrVfibMa2 JtsGhxaPq3TJHcBNZJcZ2u/WYis5HG2wdfTv/ecj6IiIq/6gGMgeQYdZaA8dWrFpKhxk x4e+IGuA0cwKt5pffTOItlLVjXF/NB3pQz5vL3hB3QYS/msQGm3EyWrvweiKymIin6XR UTKqfefO1YFLo6tOZbQoiSULm6MB+cGQLDcFXsOkgBDdkB9FCwjikmNZc6o3fkhF1ysa U1SA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684163688; x=1686755688; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=GO3RFz2IXbc24NuGjowaQiO1Jafexk6A3oHNFoYJRTI=; b=YXj3VFzAPWwkm/G/uklhLOcJ4bWBh2SMEpqDMntr2zq39izQGuJxtVYpSx4KYZCfp5 FvVyZbt0p0h1MrLPbG0gHNwKIi6BSBF5K0JLQAuCRjlLA0d3F0fuOpbHUw/DtwRFdFfK pAIb65SUDeXfe5h/wlccBdj8Mc0ON8RWYC9HlApW/MzEmNsPF7ESwZaVgVlcZxXNZc+z muzbD8Mt6iC5YQAVwtPxOb1PhmWmZKBi9v1AkuDDw48GQtbvFeF2cI4WdmC24b1nKhVr ZwE6TV793UDKkJVGJDA4YYntgpccIz4YS8mjVytQDkeEp2gyZACfOuWlsxdlYJrRAGFw Q5ZA== X-Gm-Message-State: AC+VfDxaR0pfM2ZsfBwQJ33VRUU+52+7EUp+ueA+3fS5v1KbTJFHDVXO V68bX3QZeV5A1+FSiUrPGqL0ZFYCMVU= X-Google-Smtp-Source: ACHHUZ7dMet1380IWmByTyvF5D11HDJilV8truHwoTRIRLVGaWGkklEpJiqRFYaNE9Sz40b5vM6l6A== X-Received: by 2002:a5d:6a10:0:b0:306:2d36:c6d4 with SMTP id m16-20020a5d6a10000000b003062d36c6d4mr21074621wru.31.1684163688155; Mon, 15 May 2023 08:14:48 -0700 (PDT) Return-Path: Received: from PC-PEDRO-ARCH.lan ([2001:8a0:7280:5801:9441:3dce:686c:bfc7]) by smtp.gmail.com with ESMTPSA id n6-20020a5d4206000000b003047ae72b14sm32254wrq.82.2023.05.15.08.14.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 May 2023 08:14:47 -0700 (PDT) From: "Pedro Falcato" To: devel@edk2.groups.io Cc: Pedro Falcato , Michael D Kinney , Liming Gao , Zhiguang Liu , =?UTF-8?q?Marvin=20H=C3=A4user?= Subject: [PATCH v2 1/1] MdePkg/Base.h: Simply alignment expressions Date: Mon, 15 May 2023 16:14:37 +0100 Message-Id: <20230515151437.179924-1-pedro.falcato@gmail.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Simplify ALIGN_VALUE and ALIGN_VALUE_ADDEND into simpler expressions. ALIGN_VALUE can simply be a (value + (align - 1)) & ~align expression, which works for any power of 2 alignment and generates smaller code sequences. For instance: ALIGN_VALUE(15, 16) = (15 + 15) & ~16 = 16 ALIGN_VALUE(16, 16) = (16 + 15) & ~16 = 16 Old codegen: movq %rdi, %rax negq %rax andl $15, %eax addq %rdi, %rax New codegen: leaq 15(%rdi), %rax andq $-16, %rax ALIGN_VALUE_ADDEND can simply use a bitwise NOT of Value to get the addend for alignment, as, for instance: ~15 & (16 - 1) = 1 15 + 1 = 16 This change does not necessarily affect the end result, as the GCC and clang compilers were already able to see through things and optimize them into optimal instruction sequences, in the ALIGN_VALUE_ADDEND case. Cc: Michael D Kinney Cc: Liming Gao Cc: Zhiguang Liu Cc: Marvin Häuser Signed-off-by: Pedro Falcato --- v2: Addressed concerns expressed on Discord by Marvin - Added missing parens around Alignment in ALIGN_VALUE - Replaced -1 with -1U, as in the other macros. MdePkg/Include/Base.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MdePkg/Include/Base.h b/MdePkg/Include/Base.h index 6597e441a6e2..422f80aff53d 100644 --- a/MdePkg/Include/Base.h +++ b/MdePkg/Include/Base.h @@ -931,7 +931,7 @@ STATIC_ASSERT (ALIGNOF (__VERIFY_INT32_ENUM_SIZE) == sizeof (__VERIFY_INT32_ENUM @return Addend to round Value up to alignment boundary Alignment. **/ -#define ALIGN_VALUE_ADDEND(Value, Alignment) (((Alignment) - (Value)) & ((Alignment) - 1U)) +#define ALIGN_VALUE_ADDEND(Value, Alignment) ((~(Value)) & ((Alignment) - 1U)) /** Rounds a value up to the next boundary using a specified alignment. @@ -945,7 +945,7 @@ STATIC_ASSERT (ALIGNOF (__VERIFY_INT32_ENUM_SIZE) == sizeof (__VERIFY_INT32_ENUM @return A value up to the next boundary. **/ -#define ALIGN_VALUE(Value, Alignment) ((Value) + ALIGN_VALUE_ADDEND (Value, Alignment)) +#define ALIGN_VALUE(Value, Alignment) (((Value) + ((Alignment) - 1U)) & ~(Alignment)) /** Adjust a pointer by adding the minimum offset required for it to be aligned on -- 2.40.1