4.22 Test-and-branch macro example

You can use a macro to perform a test-and-branch operation.

In ARM code in any processor and in Thumb code in processors before ARMv6T2, a test-and-branch operation requires two instructions to implement.
You can define a macro such as this:
        MACRO
$label  TestAndBranch  $dest, $reg, $cc
$label  CMP     $reg, #0
        B$cc    $dest
        MEND
The line after the MACRO directive is the macro prototype statement. This defines the name (TestAndBranch) you use to invoke the macro. It also defines parameters ($label, $dest, $reg, and $cc). Unspecified parameters are substituted with an empty string. For this macro you must give values for $dest, $reg and $cc to avoid syntax errors. The assembler substitutes the values you give into the code.
This macro can be invoked as follows:
test    TestAndBranch    NonZero, r0, NE
         ...
         ...
NonZero
After substitution this becomes:
test    CMP     r0, #0
        BNE     NonZero
         ...
         ...
NonZero
Related concepts
4.21 Use of macros
4.23 Unsigned integer division macro example
7.10 Numeric local labels
Non-ConfidentialPDF file icon PDF versionARM DUI0379G
Copyright © 2007, 2008, 2011, 2012, 2014, 2015 ARM. All rights reserved.