[PATCH] b43-asm, b43-dasm: Add 5 new instructions.

francesco.gringoli at ing.unibs.it francesco.gringoli at ing.unibs.it
Mon Sep 12 09:16:40 EDT 2011


On Sep 12, 2011, at 1:19 PM, Michael Büsch wrote:

> On Mon, 12 Sep 2011 12:58:52 +0200
> francesco.gringoli at ing.unibs.it wrote:
> 
>> On Sep 12, 2011, at 12:35 PM, Michael Büsch wrote:
>> 
>>> On Mon, 12 Sep 2011 12:09:01 +0200
>>> francesco.gringoli at ing.unibs.it wrote:
>>> 
>>>> but trying on a = 0x8000 and b = 0x7fff helped me understanding. a - b = 0x8000 + 2'(0x7fff) = 0x0001 > 0. While 0x8000 < 0x7fff.
>>> 
>>> I don't get it.
>>> Can you write simple pseudocode for your instruction?
>> Will try for jdn.
>> 
>>> For example, for jls, we have this pseudocode:
>>> 
>>> if (xxx < yyy)
>>>   pc := jjj
>>> (where xxx and yyy are two's complement)
>>> 
>> 
>> ** jump if difference is negative
>> 
>> 0d6 xxx yyy jjj
>> 
>> if ( xxx - yyy < 0 )
>> 	pc := jjj
>> 
>> C-pseudocode for jdn
>> 
>> 	short c = xxx - yyy;
>> 	if ( c < 0 )
>> 		goto jjj;
> 
> Ok. So the existing signed-compare jumps look at the carry of the subtraction
> operation, but the new jdX instructions look at bit 0x8000 of the subtraction
> result. (if set -> negative, otherwise positive). jdX ignores the carry.
Exactly. For instance for jdn we have

0d6 xxx yyy jjj
	tmp := xxx - yyy;
	if( tmp & 0x8000 )
		pc := jjj

	or alternatively

	tmp := xxx - yyy;
	if( tmp < 0 )
		pc := jjj

Tested both in the firmware and they are the same.

Do you agree with those names?

Thanks,
-Francesco


More information about the b43-dev mailing list