projects
/
b43-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
b43-asm, b43-dasm: Add 5 new instructions.
[b43-tools.git]
/
assembler
/
test.asm
diff --git
a/assembler/test.asm
b/assembler/test.asm
index 599ca8eb1900c62e92b5f592bd39b30953206dcc..cea8724e682606a6b46971ffe21a01007df8a3d3 100644
(file)
--- a/
assembler/test.asm
+++ b/
assembler/test.asm
@@
-1,14
+1,13
@@
/* This is a bcm43xx microcode assembly example.
/* This is a bcm43xx microcode assembly example.
- *
- * In this example file, r0 and r1 are always input
- * registers and r2 is output.
- * For input we can always have constant values or (one) memory
- * operand instead of the input registers shown here.
*
* Registers:
*
* Registers:
- * GPRs: r0 - r63
+ * GPRs: r0 - r63
(General Purpose Register)
* Offset Registers: off0 - off5
* Offset Registers: off0 - off5
- * SPRs: spr000
+ * SPRs: spr000 (Special Purpose Register)
+ *
+ * SPRs map to the driver-side IHR registers.
+ * An SPR offset is converted to an IHR offset by the following
+ * calculation: IHR = (SPR + 0x400) * 2
*
* To access memory, two methods can be used. Examples follow.
* Direct linear:
*
* To access memory, two methods can be used. Examples follow.
* Direct linear:
@@
-28,10
+27,21
@@
#define ECOND_MAC_ON (0x20 | 4)
#define ECOND_MAC_ON (0x20 | 4)
+%assert ((((1))) == ((((2 - 1) & 0xFF))))
+%assert ((1 == 2) || (1 == (0xFF & 1)))
+%assert (1 != (~1))
+%assert ((1 == (2 - 1)) && (2 == 2))
.text
.text
+ /* Inline assertion inside of a complex immediate.
+ * The %assert() expression will always return zero. */
+ mov (1 + (%assert(1 == ((1 + 2) - 2)))), r0
+
label:
label:
+ /* MUL instruction */
+ mul r0,r1,r2 /* mul, r2 := msb, spr6d := lsb */
+
/* ADD instructions */
add r0,r1,r2 /* add */
add. r0,r1,r2 /* add, set carry */
/* ADD instructions */
add r0,r1,r2 /* add */
add. r0,r1,r2 /* add, set carry */
@@
-82,6
+92,10
@@
testlabel:
jge r0,r1,label /* jump if greater or equal */
jg r0,r1,label /* jump if greater */
jle r0,r1,label /* jump if less or equal */
jge r0,r1,label /* jump if greater or equal */
jg r0,r1,label /* jump if greater */
jle r0,r1,label /* jump if less or equal */
+ jdn r0,r1,label /* jump if difference is negative */
+ jdpz r0,r1,label /* jump if difference is non negative */
+ jdp r0,r1,label /* jump if difference is positive */
+ jdnz r0,r1,label /* jump if difference is non positive */
jzx 7,8,r0,r1,label /* Jump if zero after shift and mask */
jnzx 7,8,r0,r1,label /* Jump if nonzero after shift and mask */
jzx 7,8,r0,r1,label /* Jump if zero after shift and mask */
jnzx 7,8,r0,r1,label /* Jump if nonzero after shift and mask */
@@
-122,6
+136,7
@@
function_a:
nap
jmp loop-
out:
nap
jmp loop-
out:
+ mov r0, r0
ret lr0, lr1
function_b:
ret lr0, lr1
function_b:
@@
-130,6
+145,7
@@
function_b:
nap
jmp loop-
out:
nap
jmp loop-
out:
+ mov r0, r0
ret lr0, lr1
ret lr0, lr1
@@
-167,6
+183,7
@@
function_b:
mov testlabel, r0 /* Can use label as immediate value */
mov r0,r1;mov r2, r3 /* ; does split instructions */
mov [(1+1)],[(2+2),off0] /* Can use complex immediates as memory offsets */
mov testlabel, r0 /* Can use label as immediate value */
mov r0,r1;mov r2, r3 /* ; does split instructions */
mov [(1+1)],[(2+2),off0] /* Can use complex immediates as memory offsets */
+ orx (0 + 1), (1 * 2), 0, 0, r0 /* Allow complex immediates as M or S */
/* The .initvals section generates an "Initial Values" file
/* The .initvals section generates an "Initial Values" file
@@
-183,6
+200,7
@@
function_b:
radio 0x1234, 0xABC /* Write 0x1234 to RADIO register 0xABC */
shm16 0x1234, 0x0001, 0x0002 /* Write 0x1234 to SHM routing 0x0001, register 0x0002 */
shm32 0x12345678, 0x0001, 0x0002 /* Write 0x12345678 to SHM routing 0x0001, register 0x0002 */
radio 0x1234, 0xABC /* Write 0x1234 to RADIO register 0xABC */
shm16 0x1234, 0x0001, 0x0002 /* Write 0x1234 to SHM routing 0x0001, register 0x0002 */
shm32 0x12345678, 0x0001, 0x0002 /* Write 0x12345678 to SHM routing 0x0001, register 0x0002 */
+ tram 0x12345678, 0x1234 /* Write 0x12345678 to Template Ram offset 0x1234 */
// vim: syntax=b43 ts=8
// vim: syntax=b43 ts=8