Setting up repository
[linux-libre-firmware.git] / b43-tools / assembler / README
1 ===============================================================================
2 ==        Instruction Set Summary for the core revision >= 5 microcode       ==
3 ===============================================================================
4
5
6 ===============================================================================
7 Mnemonics | Operands   | Description                     | Operation
8 ===============================================================================
9
10 Arithmetic and logic instructions:
11 add       | A,B,rD     | Add                             | rD=A+B
12 add.      | A,B,rD     | Add, set Carry                  | rD=A+B SaveCarry
13 addc      | A,B,rD     | Add with Carry                  | rD=A+B+Carry
14 addc.     | A,B,rD     | Add with Carry, set Carry       | rD=A+B+C SaveCarry
15 sub       | A,B,rD     | Subtract                        | rD=A-B
16 sub.      | A,B,rD     | Sub, set Carry                  | rD=A-B SaveCarry
17 subc      | A,B,rD     | Sub with Carry                  | rD=A-B-Carry
18 subc.     | A,B,rD     | Sub with Carry, set Carry       | rD=A-B-C SaveCarry
19 mul       | A,B,rD     | multiply (rev 11+ only)         | spr06d=lsb; rD=msb
20
21 Branch instructions:
22 jmp       | l          | Uncond. jump (virtual instr.)   | PC=l
23 jand      | A,B,l      | Jump if binary AND              | if(A&B) PC=l
24 jnand     | A,B,l      | Jump if not binary AND          | if(!(A&B)) PC=l
25 js        | A,B,l      | Jump if all bits set            | if((A&B)==A) PC=l
26 jns       | A,B,l      | Jump if not all bits set        | if((A&B)!=A) PC=l
27 je        | A,B,l      | Jump if equal                   | if(A==B) PC=l
28 jne       | A,B,l      | Jump if not equal               | if(A!=B) PC=l
29 jls       | A,B,l      | Jump if less (signed)           | if(A<B) PC=l
30 jges      | A,B,l      | Jump if greater or equal (sign.)| if(A>=B) PC=l
31 jgs       | A,B,l      | Jump if greater (signed)        | if(A>B) PC=l
32 jles      | A,B,l      | Jump if less or equal (signed)  | if(A<=B) PC=l
33 jl        | A,B,l      | Jump if less                    | if(A<B) PC=l
34 jge       | A,B,l      | Jump if greater or equal        | if(A>=B) PC=l
35 jg        | A,B,l      | Jump if greater                 | if(A>B) PC=l
36 jle       | A,B,l      | Jump if less or equal           | if(A<=B) PC=l
37 jdn       | A,B,l      | Jump if diff is < 0, no carry   | if(nc(A-B)<0) PC=l
38 jdpz      | A,B,l      | Jump if diff is >= 0, no carry  | if(nc(A-B)>=0) PC=l
39 jdp       | A,B,l      | Jump if diff is > 0, no carry   | if(nc(A-B)>0) PC=l
40 jdnz      | A,B,l      | Jump if diff is <= 0, no carry  | if(nc(A-B)<=0) PC=l
41 call      | lrX,l      | Store PC, call function         | lrX=PC; PC=l
42 calls     | l          | Store PC, call function         | PC->stack; PC=l
43 ret       | lrX,lrY    | Store PC, ret from func         | lrX=PC; PC=lrY
44 rets      |            | ret from function               | stack->PC
45 jzx       | M,S,A,B,l  | Jump if zero after shift + mask |
46 jnzx      | M,S,A,B,l  | Jump if nonzero after shift+msk |
47 jext      | E,A,B,l    | Jump if External Condition true | if(E) PC=l
48 jnext     | E,A,B,l    | Jump if External Condition false| if(!E) PC=l
49
50 Data transfer instructions:
51 mov       | A,rD       | Copy data (virtual instruction) | rD=A
52 tkiph     | A,rD       | TKIP S-Box lookup high          | rD=SBOX[hi8(A)]
53 tkiphs    | A,rD       | TKIP S-Box lkup hi swap'd       | rD=byteswap(tkiph)
54 tkipl     | A,rD       | TKIP S-Box lookup low           | rD=SBOX[lo8(A)]
55 tkipls    | A,rD       | TKIP S-Box lkup lo swap'd       | rD=byteswap(tkipl)
56
57 Bitwise instructions:
58 sra       | A,B,rD     | Arithmetic rightshift           | rD=A>>B fillup sign
59 or        | A,B,rD     | Bitwise OR                      | rD=A|B
60 and       | A,B,rD     | Bitwise AND                     | rD=A&B
61 xor       | A,B,rD     | Bitwise XOR                     | rD=A^B
62 sr        | A,B,rD     | Rightshift                      | rD=A>>B
63 sl        | A,B,rD     | Leftshift                       | rD=A<<B
64 srx       | M,S,A,B,rD | Shift right over two registers  | See detailed docs
65 rl        | A,B,rD     | Rotate left                     | rD=lrot(A, B bits)
66 rr        | A,B,rD     | Rotate right                    | rD=rrot(A, B bits)
67 nand      | A,B,rD     | Clear bits (notmask+and)        | rD=A&(~B)
68 orx       | M,S,A,B,rD | OR with shift and select        | See detailed docs
69
70 Other instructions:
71 nap       | none       | Sleep until event               | See detailed docs
72
73
74
75 Description of Operands:
76
77 rD      = Destination Register (GPR or SPR)
78 A       = Source Register (GPR or SPR) or Immediate
79 B       = Source Register (GPR or SPR) or Immediate
80 M       = Mask
81 S       = Shift
82 E       = External Condition
83 l       = Branch label or address
84 lrX     = Link Register (lr0 - lr3)
85 lrY     = Link Register (lr0 - lr3)
86
87
88 Raw instruction format:
89 @bitcode_in_hexadecimal
90 Example: @1C0 @C11,@C22,r3
91
92
93 Virtual instructions are translated by the assembler to other
94 lowlevel instructions.
95
96
97 Please also see the detailed microcode documentation at:
98 http://bcm-v4.sipsolutions.net/802.11/Microcode
99