Add additional memory operators per request (NW) (#3067)

* Add additional memory operators per request and further cleanups to expressions (NW)

* Requested adjustments to expressions. (NW)
This commit is contained in:
Firehawke 2018-01-14 21:25:23 -07:00 committed by Vas Crabb
parent 8420d338a7
commit 88c8b5b0c7

View File

@ -30,15 +30,19 @@ Differences from C Behaviors
----------------------------
- First, all math is performed on full 64-bit unsigned values, so things like a < 0 won't work as expected.
- First, all math is performed on full 64-bit unsigned values, so things like **a < 0** won't work as expected.
- Second, the logical operators && and || do not have short-circuit properties -- both halves are always evaluated.
- Second, the logical operators **&&** and **||** do not have short-circuit properties -- both halves are always evaluated.
- Finally, the new memory operators work like this:
- b@<addr> refers to the byte read from <addr>.
- **b!<addr>** refers to the byte at <addr> but does *NOT* suppress side effects such as reading a mailbox clearing the pending flag, or reading a FIFO removing an item.
- Similarly, w@ refers to a word in memory, d@ refers to a dword in memory, and q@ refers to a qword in memory.
The memory operators can be used as both lvalues and rvalues, so you can write b\@100 = ff to store a byte in memory. By default these operators read from the program memory space, but you can override that by prefixing them with a 'd' or an 'i'. So dw\@300 refers to data memory word at address 300 and id\@400 refers to an I/O memory dword at address 400.
- **b@<addr>** refers to the byte at <addr> while suppressing side effects.
- Similarly, **w@** and **w!** refer to a *word* in memory, **d@** and **d!** refer to a *dword* in memory, and **q@** and **q!** refer to a *qword* in memory.
The memory operators can be used as both lvalues and rvalues, so you can write b\@100 = ff to store a byte in memory. By default these operators read from the program memory space, but you can override that by prefixing them with a 'd' or an 'i'.
As such, **dw\@300** refers to data memory word at address 300 and **id\@400** refers to an I/O memory dword at address 400.