142
Development Tools User’s Manual
IXP2400/IXP2800 Network Processors
Developer Workbench
Note:
The Workbench will only display a data value for a register being watched when it is in range. If
the physical register associated with a symbolic register gets re-used and goes out of range, the
Workbench will display a data value along with
(?)
. If the register is not assigned to a physical
register at the currently executing instruction, the symbolic register cannot be read and the message
“out of live range”
will appear.
Aggregate Register Support:
The Assembler supports the declaration and use of registers using array notation. The Workbench
handles the square brackets in register names:
•
The user can establish a data watch on a single register or on the entire “array” of registers that
share the same aggregate name. When the watch is for a single register, the only change is that
the array index notation now appears as part of the register name. When the watch is for the
entire “array” of registers, then an expandable item with the aggregate name (e.g. “a”) is added
along with some number of register sub-items with indexed names (e.g. “a[0]”). Sub-items are
added for register array elements zero through the highest referenced register name. In the
above example, there would be three sub-items created (0, 1, 2), not four sub-items, since the
register named “a[3]” was never referenced in the source code. And since “a[0]” was also
never referenced in the source code, it’s data watch value always shows “out of scope”.
•
When the user hovers (using mouse in the thread window list view) over a register name with
array notation, the resultant datatip always shows the value of the individual register. If the
user hovers over the register declaration, no value is shown since the declaration itself does not
match a valid register name (i.e. “a[3]” is the highest valid indexed register for the declaration
“.reg a[4]”).
•
When the user right clicks the mouse on a register name with array notation, there are two data
watch options shown; one to add a data watch on the individual register and another to add a
data watch on the entire “array” of registers that share the same aggregate name (e.g. “a”) as
described in item 1 above.
•
The Add Data Watch dialog’s Microengine Registers page shows all referenced registers that
use array notation (e.g. “a[1]”, “a[2]”) as well as an entry that represents the entire register
array (e.g. “a”). The user can add a data watch on the individual registers and on the entire
array of registers that share the same aggregate name as described in item 1 above.
The above description uses relative GPRs in the examples. The description applies equally to
absolute GPRs and neighbor registers. Although transfer registers can also include array notation in
their names, there is no support for adding a data watch on an array of transfer registers. Instead,
the transfer order directive establishes the relationship between transfer registers, whether or not
their names include array notation. A data watch added on a transfer register that is a member of a
transfer order shows the associated registers in the transfer order as an expandable sub-item of the
read and/or write side of the transfer register.
2.13.12.5
Deleting a Data Watch
To delete a data watch:
•
Right-click the watch to be deleted in the
Data Watch
window, and click
Delete Watch
from
the shortcut menu, or
Select the watch to be deleted, then, on the
Debug
menu, click
Data Watch
, then click
Delete
,
or
Select the watch to be deleted and press DELETE.