; Show that we know how to translate move (immediate) ARM instruction. ; REQUIRES: allow_dump ; Compile using standalone assembler. ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -O2 \ ; RUN: | FileCheck %s --check-prefix=ASM ; Show bytes in assembled standalone code. ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \ ; RUN: --args -O2 | FileCheck %s --check-prefix=DIS ; Compile using integrated assembler. ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -O2 \ ; RUN: | FileCheck %s --check-prefix=IASM ; Show bytes in assembled integrated code. ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \ ; RUN: --args -O2 | FileCheck %s --check-prefix=DIS define internal i32 @Imm1() { ret i32 1 } ; ASM-LABEL: Imm1: ; ASM: mov r0, #1 ; DIS-LABEL:00000000 : ; DIS-NEXT: 0: e3a00001 ; IASM-LABEL: Imm1: ; IASM: .byte 0x1 ; IASM: .byte 0x0 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotateFImmAA() { ; immediate = 0x000002a8 = b 0000 0000 0000 0000 0000 0010 1010 1000 ret i32 680 } ; ASM-LABEL: rotateFImmAA: ; ASM: mov r0, #680 ; DIS-LABEL:00000010 : ; DIS-NEXT: 10: e3a00faa ; IASM-LABEL: rotateFImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0xf ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotateEImmAA() { ; immediate = 0x00000aa0 = b 0000 0000 0000 0000 0000 1010 1010 0000 ret i32 2720 } ; ASM-LABEL: rotateEImmAA: ; ASM: mov r0, #2720 ; DIS-LABEL:00000020 : ; DIS-NEXT: 20: e3a00eaa ; IASM-LABEL: rotateEImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0xe ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotateDImmAA() { ; immediate = 0x00002a80 = b 0000 0000 0000 0000 0010 1010 1000 0000 ret i32 10880 } ; ASM-LABEL: rotateDImmAA: ; ASM: mov r0, #10880 ; DIS-LABEL:00000030 : ; DIS-NEXT: 30: e3a00daa ; IASM-LABEL: rotateDImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0xd ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotateCImmAA() { ; immediate = 0x0000aa00 = b 0000 0000 0000 0000 1010 1010 0000 0000 ret i32 43520 } ; ASM-LABEL: rotateCImmAA: ; ASM: mov r0, #43520 ; DIS-LABEL:00000040 : ; DIS-NEXT: 40: e3a00caa ; IASM-LABEL: rotateCImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0xc ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotateBImmAA() { ; immediate = 0x0002a800 = b 0000 0000 0000 0010 1010 1000 0000 0000 ret i32 174080 } ; ASM-LABEL: rotateBImmAA: ; ASM: mov r0, #174080 ; DIS-LABEL:00000050 : ; DIS-NEXT: 50: e3a00baa ; IASM-LABEL: rotateBImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0xb ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotateAImmAA() { ; immediate = 0x000aa000 = b 0000 0000 0000 1010 1010 0000 0000 0000 ret i32 696320 } ; ASM-LABEL: rotateAImmAA: ; ASM: mov r0, #696320 ; DIS-LABEL:00000060 : ; DIS-NEXT: 60: e3a00aaa ; IASM-LABEL: rotateAImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0xa ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotate9ImmAA() { ; immediate = 0x002a8000 = b 0000 0000 0010 1010 1000 0000 0000 0000 ret i32 2785280 } ; ASM-LABEL: rotate9ImmAA: ; ASM: mov r0, #2785280 ; DIS-LABEL:00000070 : ; DIS-NEXT: 70: e3a009aa ; IASM-LABEL: rotate9ImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0x9 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotate8ImmAA() { ; immediate = 0x00aa0000 = b 0000 0000 1010 1010 0000 0000 0000 0000 ret i32 11141120 } ; ASM-LABEL: rotate8ImmAA: ; ASM: mov r0, #11141120 ; DIS-LABEL:00000080 : ; DIS-NEXT: 80: e3a008aa ; IASM-LABEL: rotate8ImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0x8 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotate7ImmAA() { ; immediate = 0x02a80000 = b 0000 0010 1010 1000 0000 0000 0000 0000 ret i32 44564480 } ; ASM-LABEL: rotate7ImmAA: ; ASM: mov r0, #44564480 ; DIS-LABEL:00000090 : ; DIS-NEXT: 90: e3a007aa ; IASM-LABEL: rotate7ImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0x7 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotate6ImmAA() { ; immediate = 0x0aa00000 = b 0000 1010 1010 0000 0000 0000 0000 0000 ret i32 178257920 } ; ASM-LABEL: rotate6ImmAA: ; ASM: mov r0, #178257920 ; DIS-LABEL:000000a0 : ; DIS-NEXT: a0: e3a006aa ; IASM-LABEL: rotate6ImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0x6 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotate5ImmAA() { ; immediate = 0x2a800000 = b 0010 1010 1000 0000 0000 0000 0000 0000 ret i32 713031680 } ; ASM-LABEL: rotate5ImmAA: ; ASM: mov r0, #713031680 ; DIS-LABEL:000000b0 : ; DIS-NEXT: b0: e3a005aa ; IASM-LABEL: rotate5ImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0x5 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotate4ImmAA() { ; immediate = 0xaa000000 = b 1010 1010 0000 0000 0000 0000 0000 0000 ret i32 2852126720 } ; ASM-LABEL: rotate4ImmAA: ; ASM: mov r0, #2852126720 ; DIS-LABEL:000000c0 : ; DIS-NEXT: c0: e3a004aa ; IASM-LABEL: rotate4ImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0x4 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotate3ImmAA() { ; immediate = 0xa8000002 = b 1010 1000 0000 0000 0000 0000 0000 0010 ret i32 2818572290 } ; ASM-LABEL: rotate3ImmAA: ; ASM: mov r0, #2818572290 ; DIS-LABEL:000000d0 : ; DIS-NEXT: d0: e3a003aa ; IASM-LABEL: rotate3ImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0x3 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotate2ImmAA() { ; immediate = 0xa000000a = b 1010 0000 0000 0000 0000 0000 0000 1010 ret i32 2684354570 } ; ASM-LABEL: rotate2ImmAA: ; ASM: mov r0, #2684354570 ; DIS-LABEL:000000e0 : ; DIS-NEXT: e0: e3a002aa ; IASM-LABEL: rotate2ImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0x2 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotate1ImmAA() { ; immediate = 0x8000002a = b 1000 1000 0000 0000 0000 0000 0010 1010 ret i32 2147483690 } ; ASM-LABEL: rotate1ImmAA: ; ASM: mov r0, #2147483690 ; DIS-LABEL:000000f0 : ; DIS-NEXT: f0: e3a001aa ; IASM-LABEL: rotate1ImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0x1 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3 define internal i32 @rotate0ImmAA() { ; immediate = 0x000000aa = b 0000 0000 0000 0000 0000 0000 1010 1010 ret i32 170 } ; ASM-LABEL: rotate0ImmAA: ; ASM: mov r0, #170 ; DIS-LABEL:00000100 : ; DIS-NEXT: 100: e3a000aa ; IASM-LABEL: rotate0ImmAA: ; IASM: .byte 0xaa ; IASM: .byte 0x0 ; IASM: .byte 0xa0 ; IASM: .byte 0xe3