diff options
Diffstat (limited to 'llvm/test/MC/ARM/ldr-pseudo-darwin.s')
-rw-r--r-- | llvm/test/MC/ARM/ldr-pseudo-darwin.s | 101 |
1 files changed, 97 insertions, 4 deletions
diff --git a/llvm/test/MC/ARM/ldr-pseudo-darwin.s b/llvm/test/MC/ARM/ldr-pseudo-darwin.s index 2395e1ad2c9..4972cf389e0 100644 --- a/llvm/test/MC/ARM/ldr-pseudo-darwin.s +++ b/llvm/test/MC/ARM/ldr-pseudo-darwin.s @@ -4,10 +4,11 @@ @ between darwin and linux. Any tests added here should have a matching @ test added there. -@RUN: llvm-mc -triple armv7-apple-darwin %s | FileCheck %s -@RUN: llvm-mc -triple thumbv5-apple-darwin %s | FileCheck %s -@RUN: llvm-mc -triple thumbv7-apple-darwin %s | FileCheck %s - +@RUN: llvm-mc -triple armv7-base-apple-darwin %s | FileCheck --check-prefix=CHECK-ARM --check-prefix=CHECK %s +@RUN: llvm-mc -triple armv5-base-apple-darwin %s | FileCheck --check-prefix=CHECK-ARMV5 --check-prefix=CHECK %s +@RUN: llvm-mc -triple thumbv5-base-apple-darwin %s | FileCheck --check-prefix=CHECK-THUMB --check-prefix=CHECK %s +@RUN: llvm-mc -triple thumbv7-base-apple-darwin %s | FileCheck --check-prefix=CHECK-THUMB2 --check-prefix=CHECK %s +@RUN: llvm-mc -triple thumbv8m.base-base-apple-darwin %s | FileCheck --check-prefix=CHECK-BASELINE --check-prefix=CHECK %s @ @ Check that large constants are converted to ldr from constant pool @ @@ -152,6 +153,98 @@ f15: @ CHECK: ldr r0, Ltmp15 adds r0, r0, #1 +@ transformation to mov +.section __TEXT,m,regular,pure_instructions +@ CHECK-LABEL: f16: +f16: + +@ Representable in ARM, and Thumb with support mov.w or movw + ldr r1, =0x1 +@ CHECK-ARM: mov r1, #1 +@ CHECK-ARMV5: mov r1, #1 +@ CHECK-THUMB: ldr r1, Ltmp16 +@ CHECK-THUMB2: mov.w r1, #1 +@ CHECK-BASELINE: movw r1, #1 + +@ Immediate is representable in A1 and T2 modified immediate only not movw + ldr r2, =0x120000 +@ CHECK-ARM: mov r2, #1179648 +@ CHECK-ARMV5: mov r2, #1179648 +@ CHECK-THUMB: ldr r2, Ltmp17 +@ CHECK-THUMB2: mov.w r2, #1179648 +@ CHECK-BASELINE: ldr r2, Ltmp16 + +@ Immediate can be represented only with movw instruction + ldr r3, =0x1234 +@ CHECK-ARM: movw r3, #4660 +@ CHECK-ARMV5: ldr r3, Ltmp16 +@ CHECK-THUMB: ldr r3, Ltmp18 +@ CHECK-THUMB2: movw r3, #4660 +@ CHECK-BASELINE: movw r3, #4660 + +@ Immediate can be represented only with T2 modified immediate + ldr r4, =0xabababab +@ CHECK-ARM: ldr r4, Ltmp16 +@ CHECK-ARMV5: ldr r4, Ltmp17 +@ CHECK-THUMB: ldr r4, Ltmp19 +@ CHECK-THUMB2: mov.w r4, #2880154539 +@ CHECK-BASELINE: ldr r4, Ltmp17 + +@ Immediate can be represented only with A1 modified immediate + ldr r5, =0x1000000b +@ CHECK-ARM: mov r5, #268435467 +@ CHECK-ARMV5: mov r5, #268435467 +@ CHECK-THUMB: ldr r5, Ltmp20 +@ CHECK-THUMB2: ldr r5, Ltmp16 +@ CHECK-BASELINE: ldr r5, Ltmp18 + +@ Negative numbers can be used with MVN or in Thumb2 with modified immediate + ldr r6, =-1 +@ CHECK-ARM: mvn r6, #0 +@ CHECK-ARMV5: mvn r6, #0 +@ CHECK-THUMB: ldr r6, Ltmp21 +@ CHECK-THUMB2: mov.w r6, #-1 +@ CHECK-BASELINE: ldr r6, Ltmp19 + ldr r7, =-0x100 +@ CHECK-ARM: mvn r7, #255 +@ CHECK-ARMV5: mvn r7, #255 +@ CHECK-THUMB: ldr r7, Ltmp22 +@ CHECK-THUMB2: mvn r7, #255 +@ CHECK-BASELINE: ldr r7, Ltmp20 + +@ Constant expressions can be used + .equ expr, 0x10 + 0x10 + ldr r0, = expr +@ CHECK-ARM: mov r0, #32 +@ CHECK-ARMV5: mov r0, #32 +@ CHECK-THUMB: ldr r0, Ltmp23 +@ CHECK-THUMB2: mov.w r0, #32 +@ CHECK-BASELINE: movw r0, #32 + ldr r1, = expr - 0x10 +@ CHECK-ARM: mov r1, #16 +@ CHECK-ARMV5: mov r1, #16 +@ CHECK-THUMB: ldr r1, Ltmp24 +@ CHECK-THUMB2: mov.w r1, #16 +@ CHECK-BASELINE: movw r1, #16 + +@ usage of translation in macro +.macro usemov_in_a_macro + ldr r2, =0x3 + ldr r3, =expr +.endm +@ CHECK-LABEL: f17: +f17: + usemov_in_a_macro +@ CHECK-ARM: mov r2, #3 +@ CHECK-ARM: mov r3, #32 +@ CHECK-ARMV5: mov r2, #3 +@ CHECK-ARMV5: mov r3, #32 +@ CHECK-THUMB: ldr r2, Ltmp25 +@ CHECK-THUMB: ldr r3, Ltmp26 +@ CHECK-THUMB2: mov.w r2, #3 +@ CHECK-THUMB2: mov.w r3, #32 +@ CHECK-BASELINE: movw r2, #3 +@ CHECK-BASELINE: movw r3, #32 @ @ Constant Pools @ |