summaryrefslogtreecommitdiff
path: root/docs/reference/asm_thumb2_compare.rst
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2018-02-27 22:03:52 -0500
committerGitHub <noreply@github.com>2018-02-27 22:03:52 -0500
commit568c04e6afa8016062f685b2198c0209f62827f4 (patch)
treed07b76119f715add462983b335797adf64b61249 /docs/reference/asm_thumb2_compare.rst
parent6a2379fd0bfe10017d8abc5c36ef1d470c0d9b27 (diff)
parentea633117d01d94e8d56ed94344e4b3e46b4eef03 (diff)
Merge pull request #650 from tannewt/merge_2x3.0.0-alpha.2
Merge in commits from 2.x branch.
Diffstat (limited to 'docs/reference/asm_thumb2_compare.rst')
-rw-r--r--docs/reference/asm_thumb2_compare.rst90
1 files changed, 0 insertions, 90 deletions
diff --git a/docs/reference/asm_thumb2_compare.rst b/docs/reference/asm_thumb2_compare.rst
deleted file mode 100644
index 521af69da..000000000
--- a/docs/reference/asm_thumb2_compare.rst
+++ /dev/null
@@ -1,90 +0,0 @@
-Comparison instructions
-=======================
-
-These perform an arithmetic or logical instruction on two arguments, discarding the result
-but setting the condition flags. Typically these are used to test data values without changing
-them prior to executing a conditional branch.
-
-Document conventions
---------------------
-
-Notation: ``Rd, Rm, Rn`` denote ARM registers R0-R7. ``imm8`` denotes an immediate
-value having a width of 8 bits.
-
-The Application Program Status Register (APSR)
-----------------------------------------------
-
-This contains four bits which are tested by the conditional branch instructions. Typically a
-conditional branch will test multiple bits, for example ``bge(LABEL)``. The meaning of
-condition codes can depend on whether the operands of an arithmetic instruction are viewed as
-signed or unsigned integers. Thus ``bhi(LABEL)`` assumes unsigned numbers were processed while
-``bgt(LABEL)`` assumes signed operands.
-
-APSR Bits
----------
-
-* Z (zero)
-
-This is set if the result of an operation is zero or the operands of a comparison are equal.
-
-* N (negative)
-
-Set if the result is negative.
-
-* C (carry)
-
-An addition sets the carry flag when the result overflows out of the MSB, for example adding
-0x80000000 and 0x80000000. By the nature of two's complement arithmetic this behaviour is reversed
-on subtraction, with a borrow indicated by the carry bit being clear. Thus 0x10 - 0x01 is executed
-as 0x10 + 0xffffffff which will set the carry bit.
-
-* V (overflow)
-
-The overflow flag is set if the result, viewed as a two's compliment number, has the "wrong" sign
-in relation to the operands. For example adding 1 to 0x7fffffff will set the overflow bit because
-the result (0x8000000), viewed as a two's complement integer, is negative. Note that in this instance
-the carry bit is not set.
-
-Comparison instructions
------------------------
-
-These set the APSR (Application Program Status Register) N (negative), Z (zero), C (carry) and V
-(overflow) flags.
-
-* cmp(Rn, imm8) ``Rn - imm8``
-* cmp(Rn, Rm) ``Rn - Rm``
-* cmn(Rn, Rm) ``Rn + Rm``
-* tst(Rn, Rm) ``Rn & Rm``
-
-Conditional execution
----------------------
-
-The ``it`` and ``ite`` instructions provide a means of conditionally executing from one to four subsequent
-instructions without the need for a label.
-
-* it(<condition>) If then
-
-Execute the next instruction if <condition> is true:
-
-::
-
- cmp(r0, r1)
- it(eq)
- mov(r0, 100) # runs if r0 == r1
- # execution continues here
-
-* ite(<condition>) If then else
-
-If <condtion> is true, execute the next instruction, otherwise execute the
-subsequent one. Thus:
-
-::
-
- cmp(r0, r1)
- ite(eq)
- mov(r0, 100) # runs if r0 == r1
- mov(r0, 200) # runs if r0 != r1
- # execution continues here
-
-This may be extended to control the execution of upto four subsequent instructions: it[x[y[z]]]
-where x,y,z=t/e; e.g. itt, itee, itete, ittte, itttt, iteee, etc.