Program Flow Prediction
ARM DDI 0301H
Copyright © 2004-2009 ARM Limited. All rights reserved.
5-9
ID012310
Non-Confidential, Unrestricted Access
void IMB(void);
The SVC
0xF00001
call uses similar calling conventions to those used by a call to a C function
with prototype:
void IMB_Range(unsigned long start_addr, unsigned long end_addr);
Where the address range runs from
start_addr (inclusive)
to
end_addr (exclusive)
. When the
standard ARM Procedure Call Standard is used, this means that
start_addr
is passed in R0 and
end_addr
in R1.
The execution time cost of an IMB can be very large, many thousands of clock cycles, even
when a small address range is specified. For small scale uses of self-modifying code, this is
likely to lead to a major loss of performance. It is therefore recommended that self-modifying
code is only used where it is unavoidable and/or it produces sufficiently large execution time
benefits to offset the cost of the IMB.