Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=i386-unknown | FileCheck %s --check-prefixes=X86
      3 ; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefixes=X64
      4 
      5 ;
      6 ; FADD
      7 ;
      8 
      9 define x86_fp80 @fiadd_fp80_i16(x86_fp80 %a0, i16 %a1) {
     10 ; X86-LABEL: fiadd_fp80_i16:
     11 ; X86:       # %bb.0:
     12 ; X86-NEXT:    pushl %eax
     13 ; X86-NEXT:    .cfi_def_cfa_offset 8
     14 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
     15 ; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
     16 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
     17 ; X86-NEXT:    fiadds {{[0-9]+}}(%esp)
     18 ; X86-NEXT:    popl %eax
     19 ; X86-NEXT:    .cfi_def_cfa_offset 4
     20 ; X86-NEXT:    retl
     21 ;
     22 ; X64-LABEL: fiadd_fp80_i16:
     23 ; X64:       # %bb.0:
     24 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
     25 ; X64-NEXT:    movswl %di, %eax
     26 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
     27 ; X64-NEXT:    fiaddl -{{[0-9]+}}(%rsp)
     28 ; X64-NEXT:    retq
     29   %1 = sitofp i16 %a1 to x86_fp80
     30   %2 = fadd x86_fp80 %a0, %1
     31   ret x86_fp80 %2
     32 }
     33 
     34 define x86_fp80 @fiadd_fp80_i16_ld(x86_fp80 %a0, i16 *%a1) {
     35 ; X86-LABEL: fiadd_fp80_i16_ld:
     36 ; X86:       # %bb.0:
     37 ; X86-NEXT:    pushl %eax
     38 ; X86-NEXT:    .cfi_def_cfa_offset 8
     39 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
     40 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
     41 ; X86-NEXT:    movzwl (%eax), %eax
     42 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
     43 ; X86-NEXT:    fiadds {{[0-9]+}}(%esp)
     44 ; X86-NEXT:    popl %eax
     45 ; X86-NEXT:    .cfi_def_cfa_offset 4
     46 ; X86-NEXT:    retl
     47 ;
     48 ; X64-LABEL: fiadd_fp80_i16_ld:
     49 ; X64:       # %bb.0:
     50 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
     51 ; X64-NEXT:    movswl (%rdi), %eax
     52 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
     53 ; X64-NEXT:    fiaddl -{{[0-9]+}}(%rsp)
     54 ; X64-NEXT:    retq
     55   %1 = load i16, i16 *%a1
     56   %2 = sitofp i16 %1 to x86_fp80
     57   %3 = fadd x86_fp80 %a0, %2
     58   ret x86_fp80 %3
     59 }
     60 
     61 define x86_fp80 @fiadd_fp80_i32(x86_fp80 %a0, i32 %a1) {
     62 ; X86-LABEL: fiadd_fp80_i32:
     63 ; X86:       # %bb.0:
     64 ; X86-NEXT:    pushl %eax
     65 ; X86-NEXT:    .cfi_def_cfa_offset 8
     66 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
     67 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
     68 ; X86-NEXT:    movl %eax, (%esp)
     69 ; X86-NEXT:    fiaddl (%esp)
     70 ; X86-NEXT:    popl %eax
     71 ; X86-NEXT:    .cfi_def_cfa_offset 4
     72 ; X86-NEXT:    retl
     73 ;
     74 ; X64-LABEL: fiadd_fp80_i32:
     75 ; X64:       # %bb.0:
     76 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
     77 ; X64-NEXT:    movl %edi, -{{[0-9]+}}(%rsp)
     78 ; X64-NEXT:    fiaddl -{{[0-9]+}}(%rsp)
     79 ; X64-NEXT:    retq
     80   %1 = sitofp i32 %a1 to x86_fp80
     81   %2 = fadd x86_fp80 %a0, %1
     82   ret x86_fp80 %2
     83 }
     84 
     85 define x86_fp80 @fiadd_fp80_i32_ld(x86_fp80 %a0, i32 *%a1) {
     86 ; X86-LABEL: fiadd_fp80_i32_ld:
     87 ; X86:       # %bb.0:
     88 ; X86-NEXT:    pushl %eax
     89 ; X86-NEXT:    .cfi_def_cfa_offset 8
     90 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
     91 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
     92 ; X86-NEXT:    movl (%eax), %eax
     93 ; X86-NEXT:    movl %eax, (%esp)
     94 ; X86-NEXT:    fiaddl (%esp)
     95 ; X86-NEXT:    popl %eax
     96 ; X86-NEXT:    .cfi_def_cfa_offset 4
     97 ; X86-NEXT:    retl
     98 ;
     99 ; X64-LABEL: fiadd_fp80_i32_ld:
    100 ; X64:       # %bb.0:
    101 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    102 ; X64-NEXT:    movl (%rdi), %eax
    103 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    104 ; X64-NEXT:    fiaddl -{{[0-9]+}}(%rsp)
    105 ; X64-NEXT:    retq
    106   %1 = load i32, i32 *%a1
    107   %2 = sitofp i32 %1 to x86_fp80
    108   %3 = fadd x86_fp80 %a0, %2
    109   ret x86_fp80 %3
    110 }
    111 
    112 ;
    113 ; FSUB
    114 ;
    115 
    116 define x86_fp80 @fisub_fp80_i16(x86_fp80 %a0, i16 %a1) {
    117 ; X86-LABEL: fisub_fp80_i16:
    118 ; X86:       # %bb.0:
    119 ; X86-NEXT:    pushl %eax
    120 ; X86-NEXT:    .cfi_def_cfa_offset 8
    121 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    122 ; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
    123 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
    124 ; X86-NEXT:    fisubs {{[0-9]+}}(%esp)
    125 ; X86-NEXT:    popl %eax
    126 ; X86-NEXT:    .cfi_def_cfa_offset 4
    127 ; X86-NEXT:    retl
    128 ;
    129 ; X64-LABEL: fisub_fp80_i16:
    130 ; X64:       # %bb.0:
    131 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    132 ; X64-NEXT:    movswl %di, %eax
    133 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    134 ; X64-NEXT:    fisubl -{{[0-9]+}}(%rsp)
    135 ; X64-NEXT:    retq
    136   %1 = sitofp i16 %a1 to x86_fp80
    137   %2 = fsub x86_fp80 %a0, %1
    138   ret x86_fp80 %2
    139 }
    140 
    141 define x86_fp80 @fisub_fp80_i16_ld(x86_fp80 %a0, i16 *%a1) {
    142 ; X86-LABEL: fisub_fp80_i16_ld:
    143 ; X86:       # %bb.0:
    144 ; X86-NEXT:    pushl %eax
    145 ; X86-NEXT:    .cfi_def_cfa_offset 8
    146 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    147 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    148 ; X86-NEXT:    movzwl (%eax), %eax
    149 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
    150 ; X86-NEXT:    fisubs {{[0-9]+}}(%esp)
    151 ; X86-NEXT:    popl %eax
    152 ; X86-NEXT:    .cfi_def_cfa_offset 4
    153 ; X86-NEXT:    retl
    154 ;
    155 ; X64-LABEL: fisub_fp80_i16_ld:
    156 ; X64:       # %bb.0:
    157 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    158 ; X64-NEXT:    movswl (%rdi), %eax
    159 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    160 ; X64-NEXT:    fisubl -{{[0-9]+}}(%rsp)
    161 ; X64-NEXT:    retq
    162   %1 = load i16, i16 *%a1
    163   %2 = sitofp i16 %1 to x86_fp80
    164   %3 = fsub x86_fp80 %a0, %2
    165   ret x86_fp80 %3
    166 }
    167 
    168 define x86_fp80 @fisub_fp80_i32(x86_fp80 %a0, i32 %a1) {
    169 ; X86-LABEL: fisub_fp80_i32:
    170 ; X86:       # %bb.0:
    171 ; X86-NEXT:    pushl %eax
    172 ; X86-NEXT:    .cfi_def_cfa_offset 8
    173 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    174 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    175 ; X86-NEXT:    movl %eax, (%esp)
    176 ; X86-NEXT:    fisubl (%esp)
    177 ; X86-NEXT:    popl %eax
    178 ; X86-NEXT:    .cfi_def_cfa_offset 4
    179 ; X86-NEXT:    retl
    180 ;
    181 ; X64-LABEL: fisub_fp80_i32:
    182 ; X64:       # %bb.0:
    183 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    184 ; X64-NEXT:    movl %edi, -{{[0-9]+}}(%rsp)
    185 ; X64-NEXT:    fisubl -{{[0-9]+}}(%rsp)
    186 ; X64-NEXT:    retq
    187   %1 = sitofp i32 %a1 to x86_fp80
    188   %2 = fsub x86_fp80 %a0, %1
    189   ret x86_fp80 %2
    190 }
    191 
    192 define x86_fp80 @fisub_fp80_i32_ld(x86_fp80 %a0, i32 *%a1) {
    193 ; X86-LABEL: fisub_fp80_i32_ld:
    194 ; X86:       # %bb.0:
    195 ; X86-NEXT:    pushl %eax
    196 ; X86-NEXT:    .cfi_def_cfa_offset 8
    197 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    198 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    199 ; X86-NEXT:    movl (%eax), %eax
    200 ; X86-NEXT:    movl %eax, (%esp)
    201 ; X86-NEXT:    fisubl (%esp)
    202 ; X86-NEXT:    popl %eax
    203 ; X86-NEXT:    .cfi_def_cfa_offset 4
    204 ; X86-NEXT:    retl
    205 ;
    206 ; X64-LABEL: fisub_fp80_i32_ld:
    207 ; X64:       # %bb.0:
    208 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    209 ; X64-NEXT:    movl (%rdi), %eax
    210 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    211 ; X64-NEXT:    fisubl -{{[0-9]+}}(%rsp)
    212 ; X64-NEXT:    retq
    213   %1 = load i32, i32 *%a1
    214   %2 = sitofp i32 %1 to x86_fp80
    215   %3 = fsub x86_fp80 %a0, %2
    216   ret x86_fp80 %3
    217 }
    218 
    219 ;
    220 ; FSUBR
    221 ;
    222 
    223 define x86_fp80 @fisubr_fp80_i16(x86_fp80 %a0, i16 %a1) {
    224 ; X86-LABEL: fisubr_fp80_i16:
    225 ; X86:       # %bb.0:
    226 ; X86-NEXT:    pushl %eax
    227 ; X86-NEXT:    .cfi_def_cfa_offset 8
    228 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    229 ; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
    230 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
    231 ; X86-NEXT:    fisubrs {{[0-9]+}}(%esp)
    232 ; X86-NEXT:    popl %eax
    233 ; X86-NEXT:    .cfi_def_cfa_offset 4
    234 ; X86-NEXT:    retl
    235 ;
    236 ; X64-LABEL: fisubr_fp80_i16:
    237 ; X64:       # %bb.0:
    238 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    239 ; X64-NEXT:    movswl %di, %eax
    240 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    241 ; X64-NEXT:    fisubrl -{{[0-9]+}}(%rsp)
    242 ; X64-NEXT:    retq
    243   %1 = sitofp i16 %a1 to x86_fp80
    244   %2 = fsub x86_fp80 %1, %a0
    245   ret x86_fp80 %2
    246 }
    247 
    248 define x86_fp80 @fisubr_fp80_i16_ld(x86_fp80 %a0, i16 *%a1) {
    249 ; X86-LABEL: fisubr_fp80_i16_ld:
    250 ; X86:       # %bb.0:
    251 ; X86-NEXT:    pushl %eax
    252 ; X86-NEXT:    .cfi_def_cfa_offset 8
    253 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    254 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    255 ; X86-NEXT:    movzwl (%eax), %eax
    256 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
    257 ; X86-NEXT:    fisubrs {{[0-9]+}}(%esp)
    258 ; X86-NEXT:    popl %eax
    259 ; X86-NEXT:    .cfi_def_cfa_offset 4
    260 ; X86-NEXT:    retl
    261 ;
    262 ; X64-LABEL: fisubr_fp80_i16_ld:
    263 ; X64:       # %bb.0:
    264 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    265 ; X64-NEXT:    movswl (%rdi), %eax
    266 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    267 ; X64-NEXT:    fisubrl -{{[0-9]+}}(%rsp)
    268 ; X64-NEXT:    retq
    269   %1 = load i16, i16 *%a1
    270   %2 = sitofp i16 %1 to x86_fp80
    271   %3 = fsub x86_fp80 %2, %a0
    272   ret x86_fp80 %3
    273 }
    274 
    275 define x86_fp80 @fisubr_fp80_i32(x86_fp80 %a0, i32 %a1) {
    276 ; X86-LABEL: fisubr_fp80_i32:
    277 ; X86:       # %bb.0:
    278 ; X86-NEXT:    pushl %eax
    279 ; X86-NEXT:    .cfi_def_cfa_offset 8
    280 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    281 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    282 ; X86-NEXT:    movl %eax, (%esp)
    283 ; X86-NEXT:    fisubrl (%esp)
    284 ; X86-NEXT:    popl %eax
    285 ; X86-NEXT:    .cfi_def_cfa_offset 4
    286 ; X86-NEXT:    retl
    287 ;
    288 ; X64-LABEL: fisubr_fp80_i32:
    289 ; X64:       # %bb.0:
    290 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    291 ; X64-NEXT:    movl %edi, -{{[0-9]+}}(%rsp)
    292 ; X64-NEXT:    fisubrl -{{[0-9]+}}(%rsp)
    293 ; X64-NEXT:    retq
    294   %1 = sitofp i32 %a1 to x86_fp80
    295   %2 = fsub x86_fp80 %1, %a0
    296   ret x86_fp80 %2
    297 }
    298 
    299 define x86_fp80 @fisubr_fp80_i32_ld(x86_fp80 %a0, i32 *%a1) {
    300 ; X86-LABEL: fisubr_fp80_i32_ld:
    301 ; X86:       # %bb.0:
    302 ; X86-NEXT:    pushl %eax
    303 ; X86-NEXT:    .cfi_def_cfa_offset 8
    304 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    305 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    306 ; X86-NEXT:    movl (%eax), %eax
    307 ; X86-NEXT:    movl %eax, (%esp)
    308 ; X86-NEXT:    fisubrl (%esp)
    309 ; X86-NEXT:    popl %eax
    310 ; X86-NEXT:    .cfi_def_cfa_offset 4
    311 ; X86-NEXT:    retl
    312 ;
    313 ; X64-LABEL: fisubr_fp80_i32_ld:
    314 ; X64:       # %bb.0:
    315 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    316 ; X64-NEXT:    movl (%rdi), %eax
    317 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    318 ; X64-NEXT:    fisubrl -{{[0-9]+}}(%rsp)
    319 ; X64-NEXT:    retq
    320   %1 = load i32, i32 *%a1
    321   %2 = sitofp i32 %1 to x86_fp80
    322   %3 = fsub x86_fp80 %2, %a0
    323   ret x86_fp80 %3
    324 }
    325 
    326 ;
    327 ; FMUL
    328 ;
    329 
    330 define x86_fp80 @fimul_fp80_i16(x86_fp80 %a0, i16 %a1) {
    331 ; X86-LABEL: fimul_fp80_i16:
    332 ; X86:       # %bb.0:
    333 ; X86-NEXT:    pushl %eax
    334 ; X86-NEXT:    .cfi_def_cfa_offset 8
    335 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    336 ; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
    337 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
    338 ; X86-NEXT:    fimuls {{[0-9]+}}(%esp)
    339 ; X86-NEXT:    popl %eax
    340 ; X86-NEXT:    .cfi_def_cfa_offset 4
    341 ; X86-NEXT:    retl
    342 ;
    343 ; X64-LABEL: fimul_fp80_i16:
    344 ; X64:       # %bb.0:
    345 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    346 ; X64-NEXT:    movswl %di, %eax
    347 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    348 ; X64-NEXT:    fimull -{{[0-9]+}}(%rsp)
    349 ; X64-NEXT:    retq
    350   %1 = sitofp i16 %a1 to x86_fp80
    351   %2 = fmul x86_fp80 %a0, %1
    352   ret x86_fp80 %2
    353 }
    354 
    355 define x86_fp80 @fimul_fp80_i16_ld(x86_fp80 %a0, i16 *%a1) {
    356 ; X86-LABEL: fimul_fp80_i16_ld:
    357 ; X86:       # %bb.0:
    358 ; X86-NEXT:    pushl %eax
    359 ; X86-NEXT:    .cfi_def_cfa_offset 8
    360 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    361 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    362 ; X86-NEXT:    movzwl (%eax), %eax
    363 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
    364 ; X86-NEXT:    fimuls {{[0-9]+}}(%esp)
    365 ; X86-NEXT:    popl %eax
    366 ; X86-NEXT:    .cfi_def_cfa_offset 4
    367 ; X86-NEXT:    retl
    368 ;
    369 ; X64-LABEL: fimul_fp80_i16_ld:
    370 ; X64:       # %bb.0:
    371 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    372 ; X64-NEXT:    movswl (%rdi), %eax
    373 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    374 ; X64-NEXT:    fimull -{{[0-9]+}}(%rsp)
    375 ; X64-NEXT:    retq
    376   %1 = load i16, i16 *%a1
    377   %2 = sitofp i16 %1 to x86_fp80
    378   %3 = fmul x86_fp80 %a0, %2
    379   ret x86_fp80 %3
    380 }
    381 
    382 define x86_fp80 @fimul_fp80_i32(x86_fp80 %a0, i32 %a1) {
    383 ; X86-LABEL: fimul_fp80_i32:
    384 ; X86:       # %bb.0:
    385 ; X86-NEXT:    pushl %eax
    386 ; X86-NEXT:    .cfi_def_cfa_offset 8
    387 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    388 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    389 ; X86-NEXT:    movl %eax, (%esp)
    390 ; X86-NEXT:    fimull (%esp)
    391 ; X86-NEXT:    popl %eax
    392 ; X86-NEXT:    .cfi_def_cfa_offset 4
    393 ; X86-NEXT:    retl
    394 ;
    395 ; X64-LABEL: fimul_fp80_i32:
    396 ; X64:       # %bb.0:
    397 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    398 ; X64-NEXT:    movl %edi, -{{[0-9]+}}(%rsp)
    399 ; X64-NEXT:    fimull -{{[0-9]+}}(%rsp)
    400 ; X64-NEXT:    retq
    401   %1 = sitofp i32 %a1 to x86_fp80
    402   %2 = fmul x86_fp80 %a0, %1
    403   ret x86_fp80 %2
    404 }
    405 
    406 define x86_fp80 @fimul_fp80_i32_ld(x86_fp80 %a0, i32 *%a1) {
    407 ; X86-LABEL: fimul_fp80_i32_ld:
    408 ; X86:       # %bb.0:
    409 ; X86-NEXT:    pushl %eax
    410 ; X86-NEXT:    .cfi_def_cfa_offset 8
    411 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    412 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    413 ; X86-NEXT:    movl (%eax), %eax
    414 ; X86-NEXT:    movl %eax, (%esp)
    415 ; X86-NEXT:    fimull (%esp)
    416 ; X86-NEXT:    popl %eax
    417 ; X86-NEXT:    .cfi_def_cfa_offset 4
    418 ; X86-NEXT:    retl
    419 ;
    420 ; X64-LABEL: fimul_fp80_i32_ld:
    421 ; X64:       # %bb.0:
    422 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    423 ; X64-NEXT:    movl (%rdi), %eax
    424 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    425 ; X64-NEXT:    fimull -{{[0-9]+}}(%rsp)
    426 ; X64-NEXT:    retq
    427   %1 = load i32, i32 *%a1
    428   %2 = sitofp i32 %1 to x86_fp80
    429   %3 = fmul x86_fp80 %a0, %2
    430   ret x86_fp80 %3
    431 }
    432 
    433 ;
    434 ; FDIV
    435 ;
    436 
    437 define x86_fp80 @fidiv_fp80_i16(x86_fp80 %a0, i16 %a1) {
    438 ; X86-LABEL: fidiv_fp80_i16:
    439 ; X86:       # %bb.0:
    440 ; X86-NEXT:    pushl %eax
    441 ; X86-NEXT:    .cfi_def_cfa_offset 8
    442 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    443 ; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
    444 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
    445 ; X86-NEXT:    fidivs {{[0-9]+}}(%esp)
    446 ; X86-NEXT:    popl %eax
    447 ; X86-NEXT:    .cfi_def_cfa_offset 4
    448 ; X86-NEXT:    retl
    449 ;
    450 ; X64-LABEL: fidiv_fp80_i16:
    451 ; X64:       # %bb.0:
    452 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    453 ; X64-NEXT:    movswl %di, %eax
    454 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    455 ; X64-NEXT:    fidivl -{{[0-9]+}}(%rsp)
    456 ; X64-NEXT:    retq
    457   %1 = sitofp i16 %a1 to x86_fp80
    458   %2 = fdiv x86_fp80 %a0, %1
    459   ret x86_fp80 %2
    460 }
    461 
    462 define x86_fp80 @fidiv_fp80_i16_ld(x86_fp80 %a0, i16 *%a1) {
    463 ; X86-LABEL: fidiv_fp80_i16_ld:
    464 ; X86:       # %bb.0:
    465 ; X86-NEXT:    pushl %eax
    466 ; X86-NEXT:    .cfi_def_cfa_offset 8
    467 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    468 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    469 ; X86-NEXT:    movzwl (%eax), %eax
    470 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
    471 ; X86-NEXT:    fidivs {{[0-9]+}}(%esp)
    472 ; X86-NEXT:    popl %eax
    473 ; X86-NEXT:    .cfi_def_cfa_offset 4
    474 ; X86-NEXT:    retl
    475 ;
    476 ; X64-LABEL: fidiv_fp80_i16_ld:
    477 ; X64:       # %bb.0:
    478 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    479 ; X64-NEXT:    movswl (%rdi), %eax
    480 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    481 ; X64-NEXT:    fidivl -{{[0-9]+}}(%rsp)
    482 ; X64-NEXT:    retq
    483   %1 = load i16, i16 *%a1
    484   %2 = sitofp i16 %1 to x86_fp80
    485   %3 = fdiv x86_fp80 %a0, %2
    486   ret x86_fp80 %3
    487 }
    488 
    489 define x86_fp80 @fidiv_fp80_i32(x86_fp80 %a0, i32 %a1) {
    490 ; X86-LABEL: fidiv_fp80_i32:
    491 ; X86:       # %bb.0:
    492 ; X86-NEXT:    pushl %eax
    493 ; X86-NEXT:    .cfi_def_cfa_offset 8
    494 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    495 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    496 ; X86-NEXT:    movl %eax, (%esp)
    497 ; X86-NEXT:    fidivl (%esp)
    498 ; X86-NEXT:    popl %eax
    499 ; X86-NEXT:    .cfi_def_cfa_offset 4
    500 ; X86-NEXT:    retl
    501 ;
    502 ; X64-LABEL: fidiv_fp80_i32:
    503 ; X64:       # %bb.0:
    504 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    505 ; X64-NEXT:    movl %edi, -{{[0-9]+}}(%rsp)
    506 ; X64-NEXT:    fidivl -{{[0-9]+}}(%rsp)
    507 ; X64-NEXT:    retq
    508   %1 = sitofp i32 %a1 to x86_fp80
    509   %2 = fdiv x86_fp80 %a0, %1
    510   ret x86_fp80 %2
    511 }
    512 
    513 define x86_fp80 @fidiv_fp80_i32_ld(x86_fp80 %a0, i32 *%a1) {
    514 ; X86-LABEL: fidiv_fp80_i32_ld:
    515 ; X86:       # %bb.0:
    516 ; X86-NEXT:    pushl %eax
    517 ; X86-NEXT:    .cfi_def_cfa_offset 8
    518 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    519 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    520 ; X86-NEXT:    movl (%eax), %eax
    521 ; X86-NEXT:    movl %eax, (%esp)
    522 ; X86-NEXT:    fidivl (%esp)
    523 ; X86-NEXT:    popl %eax
    524 ; X86-NEXT:    .cfi_def_cfa_offset 4
    525 ; X86-NEXT:    retl
    526 ;
    527 ; X64-LABEL: fidiv_fp80_i32_ld:
    528 ; X64:       # %bb.0:
    529 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    530 ; X64-NEXT:    movl (%rdi), %eax
    531 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    532 ; X64-NEXT:    fidivl -{{[0-9]+}}(%rsp)
    533 ; X64-NEXT:    retq
    534   %1 = load i32, i32 *%a1
    535   %2 = sitofp i32 %1 to x86_fp80
    536   %3 = fdiv x86_fp80 %a0, %2
    537   ret x86_fp80 %3
    538 }
    539 
    540 ;
    541 ; FDIVR
    542 ;
    543 
    544 define x86_fp80 @fidivr_fp80_i16(x86_fp80 %a0, i16 %a1) {
    545 ; X86-LABEL: fidivr_fp80_i16:
    546 ; X86:       # %bb.0:
    547 ; X86-NEXT:    pushl %eax
    548 ; X86-NEXT:    .cfi_def_cfa_offset 8
    549 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    550 ; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
    551 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
    552 ; X86-NEXT:    fidivrs {{[0-9]+}}(%esp)
    553 ; X86-NEXT:    popl %eax
    554 ; X86-NEXT:    .cfi_def_cfa_offset 4
    555 ; X86-NEXT:    retl
    556 ;
    557 ; X64-LABEL: fidivr_fp80_i16:
    558 ; X64:       # %bb.0:
    559 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    560 ; X64-NEXT:    movswl %di, %eax
    561 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    562 ; X64-NEXT:    fidivrl -{{[0-9]+}}(%rsp)
    563 ; X64-NEXT:    retq
    564   %1 = sitofp i16 %a1 to x86_fp80
    565   %2 = fdiv x86_fp80 %1, %a0
    566   ret x86_fp80 %2
    567 }
    568 
    569 define x86_fp80 @fidivr_fp80_i16_ld(x86_fp80 %a0, i16 *%a1) {
    570 ; X86-LABEL: fidivr_fp80_i16_ld:
    571 ; X86:       # %bb.0:
    572 ; X86-NEXT:    pushl %eax
    573 ; X86-NEXT:    .cfi_def_cfa_offset 8
    574 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    575 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    576 ; X86-NEXT:    movzwl (%eax), %eax
    577 ; X86-NEXT:    movw %ax, {{[0-9]+}}(%esp)
    578 ; X86-NEXT:    fidivrs {{[0-9]+}}(%esp)
    579 ; X86-NEXT:    popl %eax
    580 ; X86-NEXT:    .cfi_def_cfa_offset 4
    581 ; X86-NEXT:    retl
    582 ;
    583 ; X64-LABEL: fidivr_fp80_i16_ld:
    584 ; X64:       # %bb.0:
    585 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    586 ; X64-NEXT:    movswl (%rdi), %eax
    587 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    588 ; X64-NEXT:    fidivrl -{{[0-9]+}}(%rsp)
    589 ; X64-NEXT:    retq
    590   %1 = load i16, i16 *%a1
    591   %2 = sitofp i16 %1 to x86_fp80
    592   %3 = fdiv x86_fp80 %2, %a0
    593   ret x86_fp80 %3
    594 }
    595 
    596 define x86_fp80 @fidivr_fp80_i32(x86_fp80 %a0, i32 %a1) {
    597 ; X86-LABEL: fidivr_fp80_i32:
    598 ; X86:       # %bb.0:
    599 ; X86-NEXT:    pushl %eax
    600 ; X86-NEXT:    .cfi_def_cfa_offset 8
    601 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    602 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    603 ; X86-NEXT:    movl %eax, (%esp)
    604 ; X86-NEXT:    fidivrl (%esp)
    605 ; X86-NEXT:    popl %eax
    606 ; X86-NEXT:    .cfi_def_cfa_offset 4
    607 ; X86-NEXT:    retl
    608 ;
    609 ; X64-LABEL: fidivr_fp80_i32:
    610 ; X64:       # %bb.0:
    611 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    612 ; X64-NEXT:    movl %edi, -{{[0-9]+}}(%rsp)
    613 ; X64-NEXT:    fidivrl -{{[0-9]+}}(%rsp)
    614 ; X64-NEXT:    retq
    615   %1 = sitofp i32 %a1 to x86_fp80
    616   %2 = fdiv x86_fp80 %1, %a0
    617   ret x86_fp80 %2
    618 }
    619 
    620 define x86_fp80 @fidivr_fp80_i32_ld(x86_fp80 %a0, i32 *%a1) {
    621 ; X86-LABEL: fidivr_fp80_i32_ld:
    622 ; X86:       # %bb.0:
    623 ; X86-NEXT:    pushl %eax
    624 ; X86-NEXT:    .cfi_def_cfa_offset 8
    625 ; X86-NEXT:    fldt {{[0-9]+}}(%esp)
    626 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
    627 ; X86-NEXT:    movl (%eax), %eax
    628 ; X86-NEXT:    movl %eax, (%esp)
    629 ; X86-NEXT:    fidivrl (%esp)
    630 ; X86-NEXT:    popl %eax
    631 ; X86-NEXT:    .cfi_def_cfa_offset 4
    632 ; X86-NEXT:    retl
    633 ;
    634 ; X64-LABEL: fidivr_fp80_i32_ld:
    635 ; X64:       # %bb.0:
    636 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
    637 ; X64-NEXT:    movl (%rdi), %eax
    638 ; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
    639 ; X64-NEXT:    fidivrl -{{[0-9]+}}(%rsp)
    640 ; X64-NEXT:    retq
    641   %1 = load i32, i32 *%a1
    642   %2 = sitofp i32 %1 to x86_fp80
    643   %3 = fdiv x86_fp80 %2, %a0
    644   ret x86_fp80 %3
    645 }
    646