Instruction Set Examples; Multiplication By A Constant Using Shifts And Adds - Samsung S3C2500B User Manual

Table of Contents

Advertisement

S3C2500B

3.39 INSTRUCTION SET EXAMPLES

The following examples show ways in which the THUMB instructions may be used to generate small and efficient
code. Each example also shows the ARM equivalent so these may be compared.

3.39.1 MULTIPLICATION BY A CONSTANT USING SHIFTS AND ADDS

The following shows code to multiply by various constants using 1, 2 or 3 Thumb instructions alongside the ARM
equivalents. For other constants it is generally better to use the built-in MUL instruction rather than using a
sequence of 4 or more instructions.
Thumb
1. Multiplication by 2^n (1,2,4,8,...)
LSL
2. Multiplication by 2^n+1 (3,5,9,17,...)
LSL
ADD
3. Multiplication by 2^n-1 (3,7,15,...)
LSL
SUB
4. Multiplication by -2^n (-2, -4, -8, ...)
LSL
MVN
5. Multiplication by -2^n-1 (-3, -7, -15, ...)
LSL
SUB
Multiplication by any C = {2^n+1, 2^n-1, -2^n or -2^n-1} * 2^n
Effectively this is any of the multiplications in 2 to 5 followed by a final shift. This allows the following additional
constants to be multiplied. 6, 10, 12, 14, 18, 20, 24, 28, 30, 34, 36, 40, 48, 56, 60, 62 .....
(2..5)
LSL
Ra, Rb, LSL #n
Rt, Rb, #n
Ra, Rt, Rb
Rt, Rb, #n
Ra, Rt, Rb
Ra, Rb, #n
Ra, Ra
Rt, Rb, #n
Ra, Rb, Rt
Ra, Ra, #n
ARM
; MOV Ra, Rb, LSL #n
; ADD Ra, Rb, Rb, LSL #n
; RSB Ra, Rb, Rb, LSL #n
; MOV Ra, Rb, LSL #n
; RSB Ra, Ra, #0
; SUB Ra, Rb, Rb, LSL #n
; (2..5)
; MOV Ra, Ra, LSL #n
INSTRUCTION SET
3-97

Advertisement

Table of Contents
loading

Table of Contents