The ARM-THUMB Procedure Call Standard
The ARM-THUMB Procedure Call Standard
The ARM-THUMB Procedure Call Standard
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>The</strong> <strong>ARM</strong>-<strong>THUMB</strong> <strong>Procedure</strong> <strong>Call</strong> <strong>Standard</strong>8.5 Derivation of library variant costsShape of the ANSI-C subset of the <strong>ARM</strong> C LibraryMeasure <strong>ARM</strong>-state Thumb-state Comment#(C-derived object files) 161 161#(functions) 230 229#(functions calling functions) 132 153 Tail continuation reduces the <strong>ARM</strong> count.No tail continuation in Thumb-state.#(address constants) 278 354#(data address constants) 249 283#(functions using data address constants) 120 120#(non-leaf functions using static data) 75 75Total code bytes 42524 31160Total data bytes 892 888Sort of functionNumber of functions(<strong>ARM</strong>)Number of functions(Thumb)No static data Leaf function 53 31Static data-using Leaf function 45 45No static data Non-leaf function 57 78Static data-using Non-leaf function 75 75TOTAL 230 229(So, in <strong>ARM</strong>-state, about 22 functions become leaf functions because all their calls are tail-continued).Number of arguments to publicly visible functions #(functions)0, 1, or 2, arguments 1193 arguments 214, or more, or a variable number of, arguments 12TOTAL 152Cost of inter-working between <strong>ARM</strong>-state and Thumb-stateCodeSizeinlinedataInlineStringsconstdataRWdata0-Initdataarmlib.32l 61892 1072 1896 1544 1200 1360armlib_i.32l 63208 1072 1896 1544 1200 1360armlib.16l 42248 1756 1564 1428 1216 1616armlib_i.16l 43044 1756 1564 1428 1216 1616<strong>The</strong> code bloat for <strong>ARM</strong> is 63208/61892 = 1.0213 = +2%. For Thumb the bloat is 43044/42248 = 1.0188 = +2%.<strong>The</strong> impact on performance is likely to be considerably less than this.SWS ESPC 0002 A-05 Page 34 of 37