On Tue, May 16, 2023 at 2:46 AM gaoliming via groups.io <[email protected]> wrote: > > Pedro: > > > -----邮件原件----- > > 发件人: [email protected] <[email protected]> 代表 Pedro Falcato > > 发送时间: 2023年5月15日 23:15 > > 收件人: [email protected] > > 抄送: Pedro Falcato <[email protected]>; Michael D Kinney > > <[email protected]>; Liming Gao <[email protected]>; > > Zhiguang Liu <[email protected]>; Marvin Häuser > > <[email protected]> > > 主题: [edk2-devel] [PATCH v2 1/1] MdePkg/Base.h: Simply alignment > > expressions > > > > 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 > > > > > ~15 & (16 - 1) = 1 > Its value should be zero, not 1. I also verify the updated ALIGN_VALUE_ADDEND. > Its value is incorrect. Please double check.
Hi Liming, you're 100% right. There was a mixup when we were discussing this optimization, and I got the mental calculations wrong there. Two's complement is definitely what we want, as one's complement is always off by one (from what we want). So negation (-) works beautifully, as seen in the old codegen (we figured this out from the compiler's output). Sent a v3. -- Pedro -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104910): https://edk2.groups.io/g/devel/message/104910 Mute This Topic: https://groups.io/mt/98918981/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
