@@ -2403,3 +2403,112 @@ define fp128 @Test128Tanh(fp128 %a) nounwind {
2403
2403
%x = call fp128 @llvm.tanh.f128 (fp128 %a )
2404
2404
ret fp128 %x
2405
2405
}
2406
+
2407
+ define { fp128 , fp128 } @Test128Modf (fp128 %a ) nounwind {
2408
+ ; ANDROID-LABEL: Test128Modf:
2409
+ ; ANDROID: # %bb.0:
2410
+ ; ANDROID-NEXT: subq $24, %rsp
2411
+ ; ANDROID-NEXT: movq %rsp, %rdi
2412
+ ; ANDROID-NEXT: callq modfl@PLT
2413
+ ; ANDROID-NEXT: movaps (%rsp), %xmm1
2414
+ ; ANDROID-NEXT: addq $24, %rsp
2415
+ ; ANDROID-NEXT: retq
2416
+ ;
2417
+ ; GNU-LABEL: Test128Modf:
2418
+ ; GNU: # %bb.0:
2419
+ ; GNU-NEXT: subq $24, %rsp
2420
+ ; GNU-NEXT: movq %rsp, %rdi
2421
+ ; GNU-NEXT: callq modfl@PLT
2422
+ ; GNU-NEXT: movaps (%rsp), %xmm1
2423
+ ; GNU-NEXT: addq $24, %rsp
2424
+ ; GNU-NEXT: retq
2425
+ ;
2426
+ ; X86-LABEL: Test128Modf:
2427
+ ; X86: # %bb.0:
2428
+ ; X86-NEXT: pushl %esi
2429
+ ; X86-NEXT: subl $40, %esp
2430
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
2431
+ ; X86-NEXT: subl $8, %esp
2432
+ ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax
2433
+ ; X86-NEXT: leal {{[0-9]+}}(%esp), %ecx
2434
+ ; X86-NEXT: pushl %eax
2435
+ ; X86-NEXT: pushl {{[0-9]+}}(%esp)
2436
+ ; X86-NEXT: pushl {{[0-9]+}}(%esp)
2437
+ ; X86-NEXT: pushl {{[0-9]+}}(%esp)
2438
+ ; X86-NEXT: pushl {{[0-9]+}}(%esp)
2439
+ ; X86-NEXT: pushl %ecx
2440
+ ; X86-NEXT: calll modfl
2441
+ ; X86-NEXT: addl $28, %esp
2442
+ ; X86-NEXT: movaps (%esp), %xmm0
2443
+ ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm1
2444
+ ; X86-NEXT: movaps %xmm1, 16(%esi)
2445
+ ; X86-NEXT: movaps %xmm0, (%esi)
2446
+ ; X86-NEXT: movl %esi, %eax
2447
+ ; X86-NEXT: addl $40, %esp
2448
+ ; X86-NEXT: popl %esi
2449
+ ; X86-NEXT: retl $4
2450
+ ;
2451
+ ; WIN-LABEL: Test128Modf:
2452
+ ; WIN: # %bb.0:
2453
+ ; WIN-NEXT: subq $72, %rsp
2454
+ ; WIN-NEXT: movaps (%rcx), %xmm0
2455
+ ; WIN-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp)
2456
+ ; WIN-NEXT: leaq {{[0-9]+}}(%rsp), %rcx
2457
+ ; WIN-NEXT: leaq {{[0-9]+}}(%rsp), %rdx
2458
+ ; WIN-NEXT: callq modfl
2459
+ ; WIN-NEXT: movaps {{[0-9]+}}(%rsp), %xmm1
2460
+ ; WIN-NEXT: addq $72, %rsp
2461
+ ; WIN-NEXT: retq
2462
+ ;
2463
+ ; WIN-X86-LABEL: Test128Modf:
2464
+ ; WIN-X86: # %bb.0:
2465
+ ; WIN-X86-NEXT: pushl %ebp
2466
+ ; WIN-X86-NEXT: movl %esp, %ebp
2467
+ ; WIN-X86-NEXT: pushl %ebx
2468
+ ; WIN-X86-NEXT: pushl %edi
2469
+ ; WIN-X86-NEXT: pushl %esi
2470
+ ; WIN-X86-NEXT: andl $-16, %esp
2471
+ ; WIN-X86-NEXT: subl $64, %esp
2472
+ ; WIN-X86-NEXT: movl 8(%ebp), %esi
2473
+ ; WIN-X86-NEXT: leal {{[0-9]+}}(%esp), %eax
2474
+ ; WIN-X86-NEXT: leal {{[0-9]+}}(%esp), %ecx
2475
+ ; WIN-X86-NEXT: pushl %eax
2476
+ ; WIN-X86-NEXT: pushl 24(%ebp)
2477
+ ; WIN-X86-NEXT: pushl 20(%ebp)
2478
+ ; WIN-X86-NEXT: pushl 16(%ebp)
2479
+ ; WIN-X86-NEXT: pushl 12(%ebp)
2480
+ ; WIN-X86-NEXT: pushl %ecx
2481
+ ; WIN-X86-NEXT: calll _modfl
2482
+ ; WIN-X86-NEXT: addl $24, %esp
2483
+ ; WIN-X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2484
+ ; WIN-X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2485
+ ; WIN-X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2486
+ ; WIN-X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2487
+ ; WIN-X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2488
+ ; WIN-X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2489
+ ; WIN-X86-NEXT: movl {{[0-9]+}}(%esp), %edi
2490
+ ; WIN-X86-NEXT: movl {{[0-9]+}}(%esp), %ebx
2491
+ ; WIN-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
2492
+ ; WIN-X86-NEXT: movl {{[0-9]+}}(%esp), %eax
2493
+ ; WIN-X86-NEXT: movl {{[0-9]+}}(%esp), %edx
2494
+ ; WIN-X86-NEXT: movl %edx, 28(%esi)
2495
+ ; WIN-X86-NEXT: movl %eax, 24(%esi)
2496
+ ; WIN-X86-NEXT: movl %ecx, 20(%esi)
2497
+ ; WIN-X86-NEXT: movl %ebx, 16(%esi)
2498
+ ; WIN-X86-NEXT: movl %edi, 12(%esi)
2499
+ ; WIN-X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2500
+ ; WIN-X86-NEXT: movl %eax, 8(%esi)
2501
+ ; WIN-X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2502
+ ; WIN-X86-NEXT: movl %eax, 4(%esi)
2503
+ ; WIN-X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2504
+ ; WIN-X86-NEXT: movl %eax, (%esi)
2505
+ ; WIN-X86-NEXT: movl %esi, %eax
2506
+ ; WIN-X86-NEXT: leal -12(%ebp), %esp
2507
+ ; WIN-X86-NEXT: popl %esi
2508
+ ; WIN-X86-NEXT: popl %edi
2509
+ ; WIN-X86-NEXT: popl %ebx
2510
+ ; WIN-X86-NEXT: popl %ebp
2511
+ ; WIN-X86-NEXT: retl
2512
+ %x = call { fp128 , fp128 } @llvm.modf.f128 (fp128 %a )
2513
+ ret { fp128 , fp128 } %x
2514
+ }
0 commit comments