diff --git a/xml/hwbp_registers.xml b/xml/hwbp_registers.xml index bf1e28d9..f2b6aa92 100755 --- a/xml/hwbp_registers.xml +++ b/xml/hwbp_registers.xml @@ -378,6 +378,10 @@ though the load will not update its destination register. Debuggers should consider this when setting such breakpoints on, for example, memory-mapped I/O addresses. + + If an instruction matches this trigger and the instruction performs + multiple memory accesses, it is \unspecified which memory accesses + have completed before the trigger fires. @@ -741,15 +745,23 @@ - The trigger fired just before the instruction that triggered it was - retired, but after all preceding instructions are retired. + The trigger fired before the instruction that matched it was + retired, but after all preceding instructions are retired. This + explicitly allows for instructions partially executing. \Rxepc or \RcsrDpc (depending on \FcsrMcontrolSixAction) must be set to the virtual address of the instruction that matched. - If a load operation matched and \FcsrMcontrolSixSelect=1 then a - memory access has been performed (including any side effects of - performing such an access) even though the load has not updated its - destination register. + An instruction that caused a trigger to fire might be executed + partially. In that case not all memory accesses may have been + performed, and some registers may not have been updated. Executing + that instruction again must have the same result as fully executing + it the first time would have, except for any effects due to + non-idempotent memory. Implementations should avoid partial + instruction execution, but it might be unavoidable for instructions + that perform a large number of operations. + + For vector instructions, the vstart mechanism can be used to handle + partial execution without duplicating memory accesses. @@ -766,6 +778,9 @@ \Rxepc or \RcsrDpc (depending on \FcsrMcontrolSixAction) must be set to the virtual address of the next instruction that must be executed to preserve the program flow. + + If the instruction performed multiple memory accesses, all of them + have been completed.