[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] bitops.h: Add field32() and field64() functi
From: |
Avi Kivity |
Subject: |
Re: [Qemu-devel] [PATCH v2] bitops.h: Add field32() and field64() functions to extract bitfields |
Date: |
Wed, 27 Jun 2012 16:30:43 +0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120605 Thunderbird/13.0 |
On 06/27/2012 04:22 PM, Peter Maydell wrote:
> On 27 June 2012 14:15, Avi Kivity <address@hidden> wrote:
>> I suggest adding the analogous functions for writing. I believe the
>> common naming is extract/deposit.
>>
>> static inline uint64_t deposit64(uint64_t *pvalue, unsigned start,
>> unsigned length, uint64_t fieldval)
>> {
>> uint64_t mask = (((uint64_t)1 << length) - 1) << start;
>> *pvalue = (*pvalue & ~mask) | ((fieldval << start) & mask);
>> }
>>
>> Useful for setting a bit to a specific value.
>
> Do you have a use case in mind for this one?
A fast grep:
hw/alpha_typhoon.c- if (level) {
hw/alpha_typhoon.c: drir |= 1ull << irq;
hw/alpha_typhoon.c- } else {
hw/alpha_typhoon.c: drir &= ~(1ull << irq);
hw/alpha_typhoon.c- }
hw/cbus.c- if (state)
hw/cbus.c: s->status &= ~(1 << 5);
hw/cbus.c- else
hw/cbus.c: s->status |= 1 << 5;
hw/dma.c- case 0x09:
hw/dma.c- ichan = data & 3;
hw/dma.c- if (data & 4) {
hw/dma.c: d->status |= 1 << (ichan + 4);
hw/dma.c- }
hw/dma.c- else {
hw/dma.c: d->status &= ~(1 << (ichan + 4));
hw/dma.c- }
hw/dma.c: d->status &= ~(1 << ichan);
hw/dma.c- DMA_run();
hw/dma.c- break;
hw/dma.c-
hw/dma.c- case 0x0a: /* single mask */
hw/dma.c- if (data & 4)
hw/dma.c: d->mask |= 1 << (data & 3);
hw/dma.c- else
hw/dma.c: d->mask &= ~(1 << (data & 3));
hw/dma.c- DMA_run();
hw/exynos4210_combiner.c- if (level) {
hw/exynos4210_combiner.c: s->group[group_n].src_pending |= 1 << bit_n;
hw/exynos4210_combiner.c- } else {
hw/exynos4210_combiner.c: s->group[group_n].src_pending &= ~(1 << bit_n);
hw/exynos4210_combiner.c- }
hw/exynos4210_combiner.c-
I stopped here, but I'm sure there are plenty others. Bitfields are common in
hardware.
--
error compiling committee.c: too many arguments to function