[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 05/14] target-i386: Enable control registers for
From: |
Richard Henderson |
Subject: |
Re: [Qemu-devel] [PATCH 05/14] target-i386: Enable control registers for MPX |
Date: |
Wed, 10 Feb 2016 06:08:47 +1100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 |
On 02/10/2016 12:28 AM, Paolo Bonzini wrote:
On 09/07/2015 10:17, Richard Henderson wrote:
+ /* Disallow enabling only half of MPX. */
+ if ((mask ^ (mask * (XSTATE_BNDCSR / XSTATE_BNDREGS))) & XSTATE_BNDCSR) {
I'm refreshing patches 1-4 to add PKE support, and this caught my eye...
What about just
if (!!(mask & XSTATE_BNDCSR) != !!(mask & XSTATE_BNDREGS))
?
Hmph. Missed optimization for your version.
It is a bit more readable though, I admit...
r~
void bar();
void foo(unsigned mask)
{
if ((mask ^ (mask * 4)) & 8) {
bar();
}
}
void baz(unsigned mask)
{
if (!!(mask & 8) != !!(mask & 2)) {
bar();
}
}
foo:
leal 0(,%rdi,4), %eax
xorl %eax, %edi
andl $8, %edi
jne .L4
...
baz:
movl %edi, %eax
shrl %edi
shrl $3, %eax
andl $1, %edi
andl $1, %eax
cmpb %dil, %al
je .L5
...
clang_baz:
movl %edi, %eax
shrl $3, %eax
shrl %edi
xorl %eax, %edi
testb $1, %dil
jne .LBB1_2