qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]