signed nibble
Patrick Schluter
Patrick.Schluter at bbox.fr
Mon Jan 7 20:41:32 UTC 2019
On Monday, 7 January 2019 at 20:28:21 UTC, H. S. Teoh wrote:
> On Mon, Jan 07, 2019 at 08:06:17PM +0000, Patrick Schluter via
> Digitalmars-d-learn wrote:
>> On Monday, 7 January 2019 at 18:56:17 UTC, H. S. Teoh wrote:
>> > On Mon, Jan 07, 2019 at 06:42:13PM +0000, Patrick Schluter
>> > via Digitalmars-d-learn wrote:
> [...]
>> > > byte b = nibble | ((nibble & 0x40)?0xF0:0);
>> >
>> > This is equivalent to doing a bit comparison (implied by the
>> > ? operator). You can do it without a branch:
>> >
>> > cast(byte)(nibble << 4) >> 4
>> >
>> > will use the natural sign extension of a (signed) byte to
>> > "stretch" the upper bit. It just takes 2-3 CPU instructions.
>> >
>>
>> Yeah, my bit-fiddle-fu goes back to pre-barrel-shifter days.
>> Up to 32 bit processors, shifting was more expensive than
>> branching.
>
> Really? Haha, never knew that, even though I date all the way
> back to writing assembly on 8-bit processors. :-D
>
Most of my career was programming for 80186. Shifting by one was
2 cycles in register and 15 in memory. Shifting by 4, 9 cycles
for regs/21 for mem. And 80186 was a fast shifter compared to
8088/86 or 68000 (8+2n cycles).
More information about the Digitalmars-d-learn
mailing list