1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs < %s -mtriple=arm64-apple-ios7.0 | FileCheck --check-prefix=CHECK-LE %s 3; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64_be-none-linux-gnu | FileCheck --check-prefix=CHECK-BE %s 4 5define i128 @test_simple(i128 %a, i128 %b, i128 %c) { 6; CHECK-LE-LABEL: test_simple: 7; CHECK-LE: ; %bb.0: 8; CHECK-LE-NEXT: adds x8, x0, x2 9; CHECK-LE-NEXT: adc x9, x1, x3 10; CHECK-LE-NEXT: subs x0, x8, x4 11; CHECK-LE-NEXT: sbc x1, x9, x5 12; CHECK-LE-NEXT: ret 13; 14; CHECK-BE-LABEL: test_simple: 15; CHECK-BE: // %bb.0: 16; CHECK-BE-NEXT: adds x8, x1, x3 17; CHECK-BE-NEXT: adc x9, x0, x2 18; CHECK-BE-NEXT: subs x1, x8, x5 19; CHECK-BE-NEXT: sbc x0, x9, x4 20; CHECK-BE-NEXT: ret 21 22 %valadd = add i128 %a, %b 23 24 %valsub = sub i128 %valadd, %c 25 26 ret i128 %valsub 27} 28 29define i128 @test_imm(i128 %a) { 30; CHECK-LE-LABEL: test_imm: 31; CHECK-LE: ; %bb.0: 32; CHECK-LE-NEXT: adds x0, x0, #12 33; CHECK-LE-NEXT: cinc x1, x1, hs 34; CHECK-LE-NEXT: ret 35; 36; CHECK-BE-LABEL: test_imm: 37; CHECK-BE: // %bb.0: 38; CHECK-BE-NEXT: adds x1, x1, #12 39; CHECK-BE-NEXT: cinc x0, x0, hs 40; CHECK-BE-NEXT: ret 41 42 %val = add i128 %a, 12 43 44 ret i128 %val 45} 46 47define i128 @test_shifted(i128 %a, i128 %b) { 48; CHECK-LE-LABEL: test_shifted: 49; CHECK-LE: ; %bb.0: 50; CHECK-LE-NEXT: extr x8, x3, x2, #19 51; CHECK-LE-NEXT: adds x0, x0, x2, lsl #45 52; CHECK-LE-NEXT: adc x1, x1, x8 53; CHECK-LE-NEXT: ret 54; 55; CHECK-BE-LABEL: test_shifted: 56; CHECK-BE: // %bb.0: 57; CHECK-BE-NEXT: extr x8, x2, x3, #19 58; CHECK-BE-NEXT: adds x1, x1, x3, lsl #45 59; CHECK-BE-NEXT: adc x0, x0, x8 60; CHECK-BE-NEXT: ret 61 62 %rhs = shl i128 %b, 45 63 64 %val = add i128 %a, %rhs 65 66 ret i128 %val 67} 68 69define i128 @test_extended(i128 %a, i16 %b) { 70; CHECK-LE-LABEL: test_extended: 71; CHECK-LE: ; %bb.0: 72; CHECK-LE-NEXT: ; kill: def $w2 killed $w2 def $x2 73; CHECK-LE-NEXT: sxth x8, w2 74; CHECK-LE-NEXT: adds x0, x0, w2, sxth #3 75; CHECK-LE-NEXT: asr x9, x8, #63 76; CHECK-LE-NEXT: extr x8, x9, x8, #61 77; CHECK-LE-NEXT: adc x1, x1, x8 78; CHECK-LE-NEXT: ret 79; 80; CHECK-BE-LABEL: test_extended: 81; CHECK-BE: // %bb.0: 82; CHECK-BE-NEXT: // kill: def $w2 killed $w2 def $x2 83; CHECK-BE-NEXT: sxth x8, w2 84; CHECK-BE-NEXT: adds x1, x1, w2, sxth #3 85; CHECK-BE-NEXT: asr x9, x8, #63 86; CHECK-BE-NEXT: extr x8, x9, x8, #61 87; CHECK-BE-NEXT: adc x0, x0, x8 88; CHECK-BE-NEXT: ret 89 90 %ext = sext i16 %b to i128 91 %rhs = shl i128 %ext, 3 92 93 %val = add i128 %a, %rhs 94 95 ret i128 %val 96} 97