Home | History | Annotate | Download | only in arm32
      1 ; Show that we handle constants in movw and mvt, when it isn't represented as
      2 ; ConstantRelocatable (see mov-imm.ll for the ConstantRelocatable case).
      3 
      4 ; REQUIRES: allow_dump
      5 
      6 ; Compile using standalone assembler.
      7 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -Om1 \
      8 ; RUN:   --test-stack-extra 4084 | FileCheck %s --check-prefix=ASM
      9 
     10 ; Show bytes in assembled standalone code.
     11 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \
     12 ; RUN:   --args -Om1 --test-stack-extra 4084 | FileCheck %s --check-prefix=DIS
     13 
     14 ; Compile using integrated assembler.
     15 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -Om1 \
     16 ; RUN:   --test-stack-extra 4084 | FileCheck %s --check-prefix=IASM
     17 
     18 ; Show bytes in assembled integrated code.
     19 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \
     20 ; RUN:   --args -Om1 --test-stack-extra 4084 \
     21 ; RUN:   | FileCheck %s --check-prefix=DIS
     22 
     23 define internal i32 @foo(i32 %x) {
     24 entry:
     25 
     26 ; ASM-LABEL: foo:
     27 ; DIS-LABEL: 00000000 <foo>:
     28 ; IASM-LABEL: foo:
     29 
     30 ; ASM-NEXT: .Lfoo$entry:
     31 ; IASM-NEXT: .Lfoo$entry:
     32 
     33 ; ASM-NEXT:     movw    ip, #4092
     34 ; DIS-NEXT:    0:       e300cffc
     35 ; IASM-NEXT:    .byte 0xfc
     36 ; IASM-NEXT:    .byte 0xcf
     37 ; IASM-NEXT:    .byte 0x0
     38 ; IASM-NEXT:    .byte 0xe3
     39 
     40 ; ASM-NEXT:     sub     sp, sp, ip
     41 ; DIS-NEXT:    4:       e04dd00c
     42 ; IASM-NEXT:    .byte 0xc
     43 ; IASM-NEXT:    .byte 0xd0
     44 ; IASM-NEXT:    .byte 0x4d
     45 ; IASM-NEXT:    .byte 0xe0
     46 
     47 ; ASM-NEXT:     str     r0, [sp, #4088]
     48 ; DIS-NEXT:    8:       e58d0ff8
     49 ; IASM-NEXT:    .byte 0xf8
     50 ; IASM-NEXT:    .byte 0xf
     51 ; IASM-NEXT:    .byte 0x8d
     52 ; IASM-NEXT:    .byte 0xe5
     53 
     54 ; ASM-NEXT:     # [sp, #4088] = def.pseudo
     55 
     56   %mul = mul i32 %x, %x
     57 
     58 ; ASM-NEXT:     ldr     r0, [sp, #4088]
     59 ; DIS-NEXT:    c:       e59d0ff8
     60 ; IASM-NEXT:    .byte 0xf8
     61 ; IASM-NEXT:    .byte 0xf
     62 ; IASM-NEXT:    .byte 0x9d
     63 ; IASM-NEXT:    .byte 0xe5
     64 
     65 ; ASM-NEXT:     ldr     r1, [sp, #4088]
     66 ; DIS-NEXT:   10:       e59d1ff8
     67 ; IASM-NEXT:    .byte 0xf8
     68 ; IASM-NEXT:    .byte 0x1f
     69 ; IASM-NEXT:    .byte 0x9d
     70 ; IASM-NEXT:    .byte 0xe5
     71 
     72 ; ASM-NEXT:     mul     r0, r0, r1
     73 ; DIS-NEXT:   14:       e0000190
     74 ; IASM-NEXT:    .byte 0x90
     75 ; IASM-NEXT:    .byte 0x1
     76 ; IASM-NEXT:    .byte 0x0
     77 ; IASM-NEXT:    .byte 0xe0
     78 
     79 ; ASM-NEXT:     str     r0, [sp, #4084]
     80 ; DIS-NEXT:   18:       e58d0ff4
     81 ; IASM-NEXT:    .byte 0xf4
     82 ; IASM-NEXT:    .byte 0xf
     83 ; IASM-NEXT:    .byte 0x8d
     84 ; IASM-NEXT:    .byte 0xe5
     85 
     86 ; ASM-NEXT:     # [sp, #4084] = def.pseudo
     87 
     88   ret i32 %mul
     89 
     90 ; ASM-NEXT:     ldr     r0, [sp, #4084]
     91 ; DIS-NEXT:   1c:       e59d0ff4
     92 ; IASM-NEXT:    .byte 0xf4
     93 ; IASM-NEXT:    .byte 0xf
     94 ; IASM-NEXT:    .byte 0x9d
     95 ; IASM-NEXT:    .byte 0xe5
     96 
     97 ; ASM-NEXT:     movw    ip, #4092
     98 ; DIS-NEXT:   20:       e300cffc
     99 ; IASM-NEXT:    .byte 0xfc
    100 ; IASM-NEXT:    .byte 0xcf
    101 ; IASM-NEXT:    .byte 0x0
    102 ; IASM-NEXT:    .byte 0xe3
    103 
    104 ; ASM-NEXT:     add     sp, sp, ip
    105 ; DIS-NEXT:   24:       e08dd00c
    106 ; IASM-NEXT:    .byte 0xc
    107 ; IASM-NEXT:    .byte 0xd0
    108 ; IASM-NEXT:    .byte 0x8d
    109 ; IASM-NEXT:    .byte 0xe0
    110 
    111 ; ASM-NEXT:     bx      lr
    112 ; DIS-NEXT:   28:       e12fff1e
    113 ; IASM-NEXT:    .byte 0x1e
    114 ; IASM-NEXT:    .byte 0xff
    115 ; IASM-NEXT:    .byte 0x2f
    116 ; IASM-NEXT:    .byte 0xe1
    117 
    118 }
    119 
    120 define internal void @saveConstI32(i32 %loc) {
    121 ; ASM-LABEL:saveConstI32:
    122 ; DIS-LABEL:00000030 <saveConstI32>:
    123 ; IASM-LABEL:saveConstI32:
    124 
    125 entry:
    126 ; ASM-NEXT:.LsaveConstI32$entry:
    127 ; IASM-NEXT:.LsaveConstI32$entry:
    128 
    129 ; ASM-NEXT:     movw    ip, #4088
    130 ; DIS-NEXT:  30:        e300cff8
    131 ; IASM-NEXT:    .byte 0xf8
    132 ; IASM-NEXT:    .byte 0xcf
    133 ; IASM-NEXT:    .byte 0x0
    134 ; IASM-NEXT:    .byte 0xe3
    135 
    136 ; ASM-NEXT:     sub     sp, sp, ip
    137 ; DIS-NEXT:  34:        e04dd00c
    138 ; IASM-NEXT:    .byte 0xc
    139 ; IASM-NEXT:    .byte 0xd0
    140 ; IASM-NEXT:    .byte 0x4d
    141 ; IASM-NEXT:    .byte 0xe0
    142 
    143 ; ASM-NEXT:     str     r0, [sp, #4084]
    144 ; ASM-NEXT:     # [sp, #4084] = def.pseudo
    145 ; DIS-NEXT:  38:        e58d0ff4
    146 ; IASM-NEXT:    .byte 0xf4
    147 ; IASM-NEXT:    .byte 0xf
    148 ; IASM-NEXT:    .byte 0x8d
    149 ; IASM-NEXT:    .byte 0xe5
    150 
    151   %loc.asptr = inttoptr i32 %loc to i32*
    152   store i32 524289, i32* %loc.asptr, align 1
    153 
    154 ; ASM-NEXT:     ldr     r0, [sp, #4084]
    155 ; DIS-NEXT:  3c:        e59d0ff4
    156 ; IASM-NEXT:    .byte 0xf4
    157 ; IASM-NEXT:    .byte 0xf
    158 ; IASM-NEXT:    .byte 0x9d
    159 ; IASM-NEXT:    .byte 0xe5
    160 
    161 ; ASM-NEXT:     movw     r1, #1
    162 ; DIS-NEXT:  40:        e3001001
    163 ; IASM-NEXT:    .byte 0x1
    164 ; IASM-NEXT:    .byte 0x10
    165 ; IASM-NEXT:    .byte 0x0
    166 ; IASM-NEXT:    .byte 0xe3
    167 
    168 ; ASM-NEXT:     movt    r1, #8
    169 ; DIS-NEXT:  44:        e3401008
    170 ; IASM-NEXT:    .byte 0x8
    171 ; IASM-NEXT:    .byte 0x10
    172 ; IASM-NEXT:    .byte 0x40
    173 ; IASM-NEXT:    .byte 0xe3
    174 
    175 ; ASM-NEXT:     str     r1, [r0]
    176 ; DIS-NEXT:  48:        e5801000
    177 ; IASM-NEXT:    .byte 0x0
    178 ; IASM-NEXT:    .byte 0x10
    179 ; IASM-NEXT:    .byte 0x80
    180 ; IASM-NEXT:    .byte 0xe5
    181 
    182   ret void
    183 
    184 ; ASM-NEXT:     movw    ip, #4088
    185 ; DIS-NEXT:  4c:        e300cff8
    186 ; IASM-NEXT:    .byte 0xf8
    187 ; IASM-NEXT:    .byte 0xcf
    188 ; IASM-NEXT:    .byte 0x0
    189 ; IASM-NEXT:    .byte 0xe3
    190 
    191 ; ASM-NEXT:     add     sp, sp, ip
    192 ; DIS-NEXT:  50:        e08dd00c
    193 ; IASM-NEXT:    .byte 0xc
    194 ; IASM-NEXT:    .byte 0xd0
    195 ; IASM-NEXT:    .byte 0x8d
    196 ; IASM-NEXT:    .byte 0xe0
    197 
    198 ; ASM-NEXT:     bx      lr
    199 ; DIS-NEXT:  54:        e12fff1e
    200 ; IASM-NEXT:    .byte 0x1e
    201 ; IASM-NEXT:    .byte 0xff
    202 ; IASM-NEXT:    .byte 0x2f
    203 ; IASM-NEXT:    .byte 0xe1
    204 }
    205