Re: [PATCH v2 6/6] ARM: KVM: move away from VCPU_*_MODE in register manipulation code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 16/10/12 14:46, Christoffer Dall wrote:
> On Mon, Oct 15, 2012 at 11:19 AM, Marc Zyngier <marc.zyngier@xxxxxxx> wrote:
>> The use of VCPU_*_MODE in register manipulation code is not really
>> necessary, and possibly costly (table lookup doesn't come for free).
> 
> the reason why the table is there is that previous reviewers felt the
> series of branches with a lot of room for misprediction wold be
> harmfully slow and therefore suggested the lookup table. I'm curious,
> do you feel otherwise?

You shouldn't be so pessimistic about the compiler:

c0020824 <vcpu_reg>:
c0020824:       b410            push    {r4}
c0020826:       f8d0 20d0       ldr.w   r2, [r0, #208]  ; 0xd0
c002082a:       f002 021f       and.w   r2, r2, #31
c002082e:       f1a2 0310       sub.w   r3, r2, #16
c0020832:       2b0f            cmp     r3, #15
c0020834:       d81b            bhi.n   c002086e <vcpu_reg+0x4a>
c0020836:       e8df f003       tbb     [pc, r3]
c002083a:       1717            .short  0x1717
c002083c:       1a1a1717        .word   0x1a1a1717
c0020840:       1a1a151a        .word   0x1a1a151a
c0020844:       1a1a131a        .word   0x1a1a131a
c0020848:       081a            .short  0x081a
c002084a:       2200            movs    r2, #0
c002084c:       4b08            ldr     r3, [pc, #32]   ; (c0020870
<vcpu_reg+0x4c>)
c002084e:       eb01 1102       add.w   r1, r1, r2, lsl #4
c0020852:       3090            adds    r0, #144        ; 0x90
c0020854:       f853 3021       ldr.w   r3, [r3, r1, lsl #2]
c0020858:       eb00 0083       add.w   r0, r0, r3, lsl #2
c002085c:       bc10            pop     {r4}
c002085e:       4770            bx      lr
c0020860:       2205            movs    r2, #5
c0020862:       e7f3            b.n     c002084c <vcpu_reg+0x28>
c0020864:       2204            movs    r2, #4
c0020866:       e7f1            b.n     c002084c <vcpu_reg+0x28>
c0020868:       f022 0210       bic.w   r2, r2, #16
c002086c:       e7ee            b.n     c002084c <vcpu_reg+0x28>
c002086e:       de02            .short  0xde02
c0020870:       c027b358        .word   0xc027b358

So I was actually lying through my teeth: There *is* a table lookup,
using the lovely TBB instruction. And just for that, this patch deserves
to be merged : the table is smaller and the code more readable. What
else do you want? ;-)

>>
>> Just use the normal *_MODE defines and some case statements. Also,
>> merge USR and SYS registers, which are architecturally indentical.
> 
> otherwise this looks ok.
> 
> I will find time to apply and test this probably at the end of the week.
> 
> (note the subject of this patch is unreasonably long)

Feel free to truncate it to an arbitrary length of your choice.

	M.
-- 
Jazz is not dead. It just smells funny...


_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux