h6. » [[OS SWI Calls|OS]] h6(. » [[OS_MMUControl]] h6((. » [[OS_MMUControl 2]] h6(((. » IMB_Range ARMop h2. IMB_Range ARMop |_<^{width:4em}. Entry | | |<^. R0 |<^. Logical address of start of range | |<^. R1 |<^. Logical address of end of range (exclusive) | |_<^{width:4em}. Exit | | |<^. R0 |<^. Corrupt | h4. Use An instruction memory barrier (IMB) is to be performed over a logical address range. h4. Notes R0 and R1 must be aligned on cache line boundaries. An IMB is an operation that should be performed after new instructions have been stored and before they are executed. It guarantees correct operation for code modification (eg. something as simple as loading code to be executed). On some ARMs, this operation may be null. On ARMs with harvard architecture this typically consists of: # Clean data cache # Drain write buffer # Invalidate instruction cache There may be other considerations such as invalidating branch prediction caches. Note that the range may be very large. The implementation of this call is typically expected to use a threshold (related to [[Cache_RangeThreshold ARMop|Cache_RangeThreshold]]) to decide when to perform [[IMB_Full ARMop|IMB_Full]] instead, being faster for large ranges. Functionally, this call is equivalent to calling [[OS_SynchroniseCodeAreas]] with bit 1 of R0 set. h4. See also * [[OS_MMUControl 2]] * [[OS_SynchroniseCodeAreas]]