1f79470583759d20c20268711e6111461aefa8461Jim Grosbach// REQUIRES: mips-registered-target 2cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// RUN: %clang_cc1 -triple mips-unknown-linux-gnu -emit-llvm %s -o - \ 3cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// RUN: | FileCheck %s 4fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 5fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyantypedef int q31; 6fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyantypedef int i32; 7fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyantypedef unsigned int ui32; 8fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyantypedef long long a64; 9fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 10fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyantypedef signed char v4i8 __attribute__ ((vector_size(4))); 11be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyantypedef signed char v4q7 __attribute__ ((vector_size(4))); 12be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyantypedef short v2i16 __attribute__ ((vector_size(4))); 13fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyantypedef short v2q15 __attribute__ ((vector_size(4))); 14fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 15fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyanvoid foo() { 16fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15 v2q15_r, v2q15_a, v2q15_b, v2q15_c; 17be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16 v2i16_r, v2i16_a, v2i16_b, v2i16_c; 18be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4q7 v4q7_r, v4q7_a, v4q7_b; 19fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8 v4i8_r, v4i8_a, v4i8_b, v4i8_c; 20fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31 q31_r, q31_a, q31_b, q31_c; 21fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32 i32_r, i32_a, i32_b, i32_c; 22fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan ui32 ui32_r, ui32_a, ui32_b, ui32_c; 23fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64 a64_r, a64_a, a64_b; 24fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 25fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan // MIPS DSP Rev 1 26fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 27fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_a = (v4i8) {1, 2, 3, 0xFF}; 28fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_b = (v4i8) {2, 4, 6, 8}; 29fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_r = __builtin_mips_addu_qb(v4i8_a, v4i8_b); 30cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <4 x i8> @llvm.mips.addu.qb 31fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_r = __builtin_mips_addu_s_qb(v4i8_a, v4i8_b); 32cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <4 x i8> @llvm.mips.addu.s.qb 33fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_r = __builtin_mips_subu_qb(v4i8_a, v4i8_b); 34cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <4 x i8> @llvm.mips.subu.qb 35fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_r = __builtin_mips_subu_s_qb(v4i8_a, v4i8_b); 36cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <4 x i8> @llvm.mips.subu.s.qb 37fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 38fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x0000, 0x8000}; 39fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x8000, 0x8000}; 40fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_addq_ph(v2q15_a, v2q15_b); 41cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.addq.ph 42fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_addq_s_ph(v2q15_a, v2q15_b); 43cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.addq.s.ph 44fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_subq_ph(v2q15_a, v2q15_b); 45cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.subq.ph 46fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_subq_s_ph(v2q15_a, v2q15_b); 47cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.subq.s.ph 48fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 49fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0x12345678; 50fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_b = 0x80000000; 51fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_c = 0x11112222; 52fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_madd(a64_a, i32_b, i32_c); 53cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.madd 54fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0x12345678; 55fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan ui32_b = 0x80000000; 56fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan ui32_c = 0x11112222; 57fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_maddu(a64_a, ui32_b, ui32_c); 58cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.maddu 59fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0x12345678; 60fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_b = 0x80000000; 61fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_c = 0x11112222; 62fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_msub(a64_a, i32_b, i32_c); 63cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.msub 64fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0x12345678; 65fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan ui32_b = 0x80000000; 66fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan ui32_c = 0x11112222; 67fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_msubu(a64_a, ui32_b, ui32_c); 68cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.msubu 69fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 70fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_a = 0x12345678; 71fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_b = 0x7FFFFFFF; 72fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_r = __builtin_mips_addq_s_w(q31_a, q31_b); 73cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.addq.s.w 74fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_r = __builtin_mips_subq_s_w(q31_a, q31_b); 75cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.subq.s.w 76fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 77fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_a = 0xFFFFFFFF; 78fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_b = 1; 79fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_addsc(i32_a, i32_b); 80cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.addsc 81fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_a = 0; 82fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_b = 1; 83fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_addwc(i32_a, i32_b); 84cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.addwc 85fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 86fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_a = 20; 87fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_b = 0x1402; 88fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_modsub(i32_a, i32_b); 89cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.modsub 90fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 91fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_a = (v4i8) {1, 2, 3, 4}; 92fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_raddu_w_qb(v4i8_a); 93cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.raddu.w.qb 94fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 95fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0xFFFF, 0x8000}; 96fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_absq_s_ph(v2q15_a); 97cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.absq.s.ph 98fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_a = 0x80000000; 99fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_r = __builtin_mips_absq_s_w(q31_a); 100cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.absq.s.w 101fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 102fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x1234, 0x5678}; 103fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x1111, 0x2222}; 104fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_r = __builtin_mips_precrq_qb_ph(v2q15_a, v2q15_b); 105cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <4 x i8> @llvm.mips.precrq.qb.ph 106fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 107fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x7F79, 0xFFFF}; 108fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x7F81, 0x2000}; 109fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_r = __builtin_mips_precrqu_s_qb_ph(v2q15_a, v2q15_b); 110cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <4 x i8> @llvm.mips.precrqu.s.qb.ph 111fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_a = 0x12345678; 112fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_b = 0x11112222; 113fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_precrq_ph_w(q31_a, q31_b); 114cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.precrq.ph.w 115fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_a = 0x7000FFFF; 116fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_b = 0x80000000; 117fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_precrq_rs_ph_w(q31_a, q31_b); 118cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.precrq.rs.ph.w 119fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x1234, 0x5678}; 120fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_r = __builtin_mips_preceq_w_phl(v2q15_a); 121cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.preceq.w.phl 122fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_r = __builtin_mips_preceq_w_phr(v2q15_a); 123cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.preceq.w.phr 124fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78}; 125fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_precequ_ph_qbl(v4i8_a); 126cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.precequ.ph.qbl 127fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_precequ_ph_qbr(v4i8_a); 128cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.precequ.ph.qbr 129fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_precequ_ph_qbla(v4i8_a); 130cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.precequ.ph.qbla 131fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_precequ_ph_qbra(v4i8_a); 132cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.precequ.ph.qbra 133fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_preceu_ph_qbl(v4i8_a); 134cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.preceu.ph.qbl 135fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_preceu_ph_qbr(v4i8_a); 136cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.preceu.ph.qbr 137fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_preceu_ph_qbla(v4i8_a); 138cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.preceu.ph.qbla 139fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_preceu_ph_qbra(v4i8_a); 140cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.preceu.ph.qbra 141fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 142fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_a = (v4i8) {1, 2, 3, 4}; 143fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_r = __builtin_mips_shll_qb(v4i8_a, 2); 144cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <4 x i8> @llvm.mips.shll.qb 145fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_a = (v4i8) {128, 64, 32, 16}; 146fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_r = __builtin_mips_shrl_qb(v4i8_a, 2); 147cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <4 x i8> @llvm.mips.shrl.qb 148fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x0001, 0x8000}; 149fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_shll_ph(v2q15_a, 2); 150cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.shll.ph 151fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_shll_s_ph(v2q15_a, 2); 152cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.shll.s.ph 153fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x7FFF, 0x8000}; 154fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_shra_ph(v2q15_a, 2); 155cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.shra.ph 156fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_shra_r_ph(v2q15_a, 2); 157cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.shra.r.ph 158fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_a = 0x70000000; 159fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_r = __builtin_mips_shll_s_w(q31_a, 2); 160cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.shll.s.w 161fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_a = 0x7FFFFFFF; 162fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_r = __builtin_mips_shra_r_w(q31_a, 2); 163cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.shra.r.w 164fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0x1234567887654321LL; 165fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_shilo(a64_a, -8); 166cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.shilo 167fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 168fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_a = (v4i8) {0x1, 0x3, 0x5, 0x7}; 169fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x1234, 0x5678}; 170fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_muleu_s_ph_qbl(v4i8_a, v2q15_b); 171cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.muleu.s.ph.qbl 172fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_muleu_s_ph_qbr(v4i8_a, v2q15_b); 173cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.muleu.s.ph.qbr 174fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x7FFF, 0x8000}; 175fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x7FFF, 0x8000}; 176fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_mulq_rs_ph(v2q15_a, v2q15_b); 177cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.mulq.rs.ph 178fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x1234, 0x8000}; 179fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x5678, 0x8000}; 180fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_r = __builtin_mips_muleq_s_w_phl(v2q15_a, v2q15_b); 181cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.muleq.s.w.phl 182fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_r = __builtin_mips_muleq_s_w_phr(v2q15_a, v2q15_b); 183cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.muleq.s.w.phr 184fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0; 185fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x0001, 0x8000}; 186fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x0002, 0x8000}; 187fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_mulsaq_s_w_ph(a64_a, v2q15_b, v2q15_c); 188cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.mulsaq.s.w.ph 189fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0; 190fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x0001, 0x8000}; 191fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_c = (v2q15) {0x0002, 0x8000}; 192fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_maq_s_w_phl(a64_a, v2q15_b, v2q15_c); 193cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.maq.s.w.phl 194fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_maq_s_w_phr(a64_a, v2q15_b, v2q15_c); 195cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.maq.s.w.phr 196fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0x7FFFFFF0; 197fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_maq_sa_w_phl(a64_a, v2q15_b, v2q15_c); 198cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.maq.sa.w.phl 199fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_maq_sa_w_phr(a64_a, v2q15_b, v2q15_c); 200cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.maq.sa.w.phr 201fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_a = 0x80000000; 202fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_b = 0x11112222; 203fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_mult(i32_a, i32_b); 204cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.mult 205fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan ui32_a = 0x80000000; 206fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan ui32_b = 0x11112222; 207fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_multu(ui32_a, ui32_b); 208cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.multu 209fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 210fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0; 211fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_b = (v4i8) {1, 2, 3, 4}; 212fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_c = (v4i8) {4, 5, 6, 7}; 213fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_dpau_h_qbl(a64_a, v4i8_b, v4i8_c); 214cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.dpau.h.qbl 215fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_dpau_h_qbr(a64_a, v4i8_b, v4i8_c); 216cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.dpau.h.qbr 217fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_dpsu_h_qbl(a64_a, v4i8_b, v4i8_c); 218cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.dpsu.h.qbl 219fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_dpsu_h_qbr(a64_a, v4i8_b, v4i8_c); 220cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.dpsu.h.qbr 221fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0; 222fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x0001, 0x8000}; 223fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_c = (v2q15) {0x0002, 0x8000}; 224fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_dpaq_s_w_ph(a64_a, v2q15_b, v2q15_c); 225cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.dpaq.s.w.ph 226fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_dpsq_s_w_ph(a64_a, v2q15_b, v2q15_c); 227cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.dpsq.s.w.ph 228fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0; 229fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_b = 0x80000000; 230fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan q31_c = 0x80000000; 231fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_dpaq_sa_l_w(a64_a, q31_b, q31_c); 232cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.dpaq.sa.l.w 233fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_dpsq_sa_l_w(a64_a, q31_b, q31_c); 234cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.dpsq.sa.l.w 235fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 236fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_a = (v4i8) {1, 4, 10, 8}; 237fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_b = (v4i8) {1, 2, 100, 8}; 238fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_cmpu_eq_qb(v4i8_a, v4i8_b); 239cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.cmpu.eq.qb 240fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_cmpu_lt_qb(v4i8_a, v4i8_b); 241cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.cmpu.lt.qb 242fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_cmpu_le_qb(v4i8_a, v4i8_b); 243cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.cmpu.le.qb 244fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_cmpgu_eq_qb(v4i8_a, v4i8_b); 245cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.cmpgu.eq.qb 246fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_cmpgu_lt_qb(v4i8_a, v4i8_b); 247cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.cmpgu.lt.qb 248fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_cmpgu_le_qb(v4i8_a, v4i8_b); 249cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.cmpgu.le.qb 250fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x1111, 0x1234}; 251fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x4444, 0x1234}; 252fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_cmp_eq_ph(v2q15_a, v2q15_b); 253cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.cmp.eq.ph 254fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_cmp_lt_ph(v2q15_a, v2q15_b); 255cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.cmp.lt.ph 256fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_cmp_le_ph(v2q15_a, v2q15_b); 257cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.cmp.le.ph 258fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 259fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0xFFFFF81230000000LL; 260fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_extr_s_h(a64_a, 4); 261cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.extr.s.h 262fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0x8123456712345678LL; 263fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_extr_w(a64_a, 31); 264cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.extr.w 265fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_extr_rs_w(a64_a, 31); 266cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.extr.rs.w 267fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_extr_r_w(a64_a, 31); 268cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.extr.r.w 269fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0x1234567887654321LL; 270fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_extp(a64_a, 3); 271cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.extp 272fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0x123456789ABCDEF0LL; 273fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_extpdp(a64_a, 7); 274cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.extpdp 275fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 276fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_wrdsp(2052, 3); 277cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.wrdsp 278fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_rddsp(3); 279cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.rddsp 280fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_a = 0xFFFFFFFF; 281fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_b = 0x12345678; 282fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_wrdsp((16<<7) + 4, 3); 283cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.wrdsp 284fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_insv(i32_a, i32_b); 285cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.insv 286fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_a = 0x1234; 287fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_bitrev(i32_a); 288cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.bitrev 289fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x1111, 0x2222}; 290fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x3333, 0x4444}; 291fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_packrl_ph(v2q15_a, v2q15_b); 292cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.packrl.ph 293fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_a = 100; 294fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_r = __builtin_mips_repl_qb(i32_a); 295cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <4 x i8> @llvm.mips.repl.qb 296fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_a = 0x1234; 297fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_repl_ph(i32_a); 298cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.repl.ph 299fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_a = (v4i8) {1, 4, 10, 8}; 300fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_b = (v4i8) {1, 2, 100, 8}; 301fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_cmpu_eq_qb(v4i8_a, v4i8_b); 302cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.cmpu.eq.qb 303fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v4i8_r = __builtin_mips_pick_qb(v4i8_a, v4i8_b); 304cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <4 x i8> @llvm.mips.pick.qb 305fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_a = (v2q15) {0x1111, 0x1234}; 306fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_b = (v2q15) {0x4444, 0x1234}; 307fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_cmp_eq_ph(v2q15_a, v2q15_b); 308cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.cmp.eq.ph 309fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan v2q15_r = __builtin_mips_pick_ph(v2q15_a, v2q15_b); 310cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call <2 x i16> @llvm.mips.pick.ph 311fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_a = 0x1234567887654321LL; 312fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_b = 0x11112222; 313fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan __builtin_mips_wrdsp(0, 1); 314cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call void @llvm.mips.wrdsp 315fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan a64_r = __builtin_mips_mthlip(a64_a, i32_b); 316cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i64 @llvm.mips.mthlip 317fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_bposge32(); 318cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.bposge32 319fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan char array_a[100]; 320fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_lbux(array_a, 20); 321cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.lbux 322fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan short array_b[100]; 323fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_lhx(array_b, 20); 324cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.lhx 325fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan int array_c[100]; 326fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan i32_r = __builtin_mips_lwx(array_c, 20); 327cc83f26c48dfdc99ea5fbc3c28c9c9653bd71e8cSimon Atanasyan// CHECK: call i32 @llvm.mips.lwx 328be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 329be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan // MIPS DSP Rev 2 330be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 331be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4q7_a = (v4q7) {0x81, 0xff, 0x80, 0x23}; 332be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4q7_r = __builtin_mips_absq_s_qb (v4q7_a); 333be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <4 x i8> @llvm.mips.absq.s.qb 334be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 335be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_a = (v2q15) {0x3334, 0x4444}; 336be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_b = (v2q15) {0x1111, 0x2222}; 337be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_r = __builtin_mips_addqh_ph(v2q15_a, v2q15_b); 338be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.addqh.ph 339be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_a = (v2q15) {0x3334, 0x4444}; 340be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_b = (v2q15) {0x1111, 0x2222}; 341be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_r = __builtin_mips_addqh_r_ph(v2q15_a, v2q15_b); 342be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.addqh.r.ph 343be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_a = 0x11111112; 344be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_b = 0x99999999; 345be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_r = __builtin_mips_addqh_w(q31_a, q31_b); 346be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.addqh.w 347be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_a = 0x11111112; 348be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_b = 0x99999999; 349be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_r = __builtin_mips_addqh_r_w(q31_a, q31_b); 350be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.addqh.r.w 351be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 352be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_a = (v2i16) {0xffff, 0x2468}; 353be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0x1234, 0x1111}; 354be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_r = __builtin_mips_addu_ph(v2i16_a, v2i16_b); 355be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.addu.ph 356be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_a = (v2i16) {0xffff, 0x2468}; 357be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0x1234, 0x1111}; 358be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_r = __builtin_mips_addu_s_ph(v2i16_a, v2i16_b); 359be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.addu.s.ph 360be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x11, 0x22, 0x33, 0xff}; 361be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_b = (v4i8) {0x11, 0x33, 0x99, 0xff}; 362be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_r = __builtin_mips_adduh_qb(v4i8_a, v4i8_b); 363be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <4 x i8> @llvm.mips.adduh.qb 364be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x11, 0x22, 0x33, 0xff}; 365be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_b = (v4i8) {0x11, 0x33, 0x99, 0xff}; 366be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_r = __builtin_mips_adduh_r_qb(v4i8_a, v4i8_b); 367be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <4 x i8> @llvm.mips.adduh.r.qb 368be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 369be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_a = 0x12345678; 370be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_b = 0x87654321; 371be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_r = __builtin_mips_append(i32_a, i32_b, 16); 372be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.append 373be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_a = 0x12345678; 374be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_b = 0x87654321; 375be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_r = __builtin_mips_balign(i32_a, i32_b, 3); 376be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.balign 377be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 378be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x11, 0x22, 0x33, 0x44}; 379be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_b = (v4i8) {0x11, 0x33, 0x33, 0x44}; 380be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_r = __builtin_mips_cmpgdu_eq_qb(v4i8_a, v4i8_b); 381be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.cmpgdu.eq.qb 382be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x11, 0x22, 0x33, 0x44}; 383be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_b = (v4i8) {0x11, 0x33, 0x33, 0x44}; 384be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_r = __builtin_mips_cmpgdu_lt_qb(v4i8_a, v4i8_b); 385be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.cmpgdu.lt.qb 386be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x11, 0x22, 0x33, 0x54}; 387be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_b = (v4i8) {0x11, 0x33, 0x33, 0x44}; 388be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_r = __builtin_mips_cmpgdu_le_qb(v4i8_a, v4i8_b); 389be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.cmpgdu.le.qb 390be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 391be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_a = 0x12345678; 392be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0xffff, 0x1555}; 393be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_c = (v2i16) {0x1234, 0x3322}; 394be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_r = __builtin_mips_dpa_w_ph(a64_a, v2i16_b, v2i16_c); 395be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i64 @llvm.mips.dpa.w.ph 396be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_a = 0x12345678; 397be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0xffff, 0x1555}; 398be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_c = (v2i16) {0x1234, 0x3322}; 399be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_r = __builtin_mips_dps_w_ph(a64_a, v2i16_b, v2i16_c); 400be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i64 @llvm.mips.dps.w.ph 401be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 402be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_a = 0x70000000; 403be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_b = (v2q15) {0x4000, 0x2000}; 404be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_c = (v2q15) {0x2000, 0x4000}; 405be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_r = __builtin_mips_dpaqx_s_w_ph(a64_a, v2q15_b, v2q15_c); 406be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i64 @llvm.mips.dpaqx.s.w.ph 407be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_a = 0x70000000; 408be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_b = (v2q15) {0x4000, 0x2000}; 409be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_c = (v2q15) {0x2000, 0x4000}; 410be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_r = __builtin_mips_dpaqx_sa_w_ph(a64_a, v2q15_b, v2q15_c); 411be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i64 @llvm.mips.dpaqx.sa.w.ph 412be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_a = 0x1111222212345678LL; 413be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0x1, 0x2}; 414be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_c = (v2i16) {0x3, 0x4}; 415be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_r = __builtin_mips_dpax_w_ph(a64_a, v2i16_b, v2i16_c); 416be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i64 @llvm.mips.dpax.w.ph 417be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_a = 0x9999111112345678LL; 418be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0x1, 0x2}; 419be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_c = (v2i16) {0x3, 0x4}; 420be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_r = __builtin_mips_dpsx_w_ph(a64_a, v2i16_b, v2i16_c); 421be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i64 @llvm.mips.dpsx.w.ph 422be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_a = 0x70000000; 423be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_b = (v2q15) {0x4000, 0x2000}; 424be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_c = (v2q15) {0x2000, 0x4000}; 425be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_r = __builtin_mips_dpsqx_s_w_ph(a64_a, v2q15_b, v2q15_c); 426be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i64 @llvm.mips.dpsqx.s.w.ph 427be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_a = 0xFFFFFFFF80000000LL; 428be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_b = (v2q15) {0x4000, 0x2000}; 429be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_c = (v2q15) {0x2000, 0x4000}; 430be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_r = __builtin_mips_dpsqx_sa_w_ph(a64_a, v2q15_b, v2q15_c); 431be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i64 @llvm.mips.dpsqx.sa.w.ph 432be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 433be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_a = (v2i16) {0xffff, 0x2468}; 434be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0x1234, 0x1111}; 435be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_r = __builtin_mips_mul_ph(v2i16_a, v2i16_b); 436be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.mul.ph 437be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_a = (v2i16) {0x8000, 0x7fff}; 438be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0x1234, 0x1111}; 439be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_r = __builtin_mips_mul_s_ph(v2i16_a, v2i16_b); 440be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.mul.s.ph 441be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 442be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_a = 0x80000000; 443be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_b = 0x80000000; 444be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_r = __builtin_mips_mulq_rs_w(q31_a, q31_b); 445be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.mulq.rs.w 446be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_a = (v2q15) {0xffff, 0x8000}; 447be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_b = (v2q15) {0x1111, 0x8000}; 448be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_r = __builtin_mips_mulq_s_ph(v2q15_a, v2q15_b); 449be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.mulq.s.ph 450be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_a = 0x00000002; 451be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_b = 0x80000000; 452be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_r = __builtin_mips_mulq_s_w(q31_a, q31_b); 453be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.mulq.s.w 454be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_a = 0x19848419; 455be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0xffff, 0x8000}; 456be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_c = (v2i16) {0x1111, 0x8000}; 457be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan a64_r = __builtin_mips_mulsa_w_ph(a64_a, v2i16_b, v2i16_c); 458be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i64 @llvm.mips.mulsa.w.ph 459be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 460be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_a = (v2i16) {0x1234, 0x5678}; 461be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0x2233, 0x5566}; 462be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_r = __builtin_mips_precr_qb_ph(v2i16_a, v2i16_b); 463be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <4 x i8> @llvm.mips.precr.qb.ph 464be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_a = 0x12345678; 465be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_b = 0x33334444; 466be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_r = __builtin_mips_precr_sra_ph_w(i32_a, i32_b, 4); 467be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.precr.sra.ph.w 468be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_a = 0x12345678; 469be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_b = 0x33334444; 470be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_r = __builtin_mips_precr_sra_r_ph_w(i32_a, i32_b, 4); 471be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.precr.sra.r.ph.w 472be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 473be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_a = 0x12345678; 474be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_b = 0x87654321; 475be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_r = __builtin_mips_prepend(i32_a, i32_b, 16); 476be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.prepend 477be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 478be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x12, 0x45, 0x77, 0x99}; 479be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_r = __builtin_mips_shra_qb(v4i8_a, 1); 480be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <4 x i8> @llvm.mips.shra.qb 481be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x12, 0x45, 0x77, 0x99}; 482be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_b = 1; 483be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_r = __builtin_mips_shra_qb(v4i8_a, i32_b); 484be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <4 x i8> @llvm.mips.shra.qb 485be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x12, 0x45, 0x77, 0x99}; 486be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_r = __builtin_mips_shra_r_qb(v4i8_a, 1); 487be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <4 x i8> @llvm.mips.shra.r.qb 488be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x12, 0x45, 0x77, 0x99}; 489be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_b = 1; 490be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_r = __builtin_mips_shra_r_qb(v4i8_a, i32_b); 491be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <4 x i8> @llvm.mips.shra.r.qb 492be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_a = (v2i16) {0x1357, 0x2468}; 493be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_r = __builtin_mips_shrl_ph(v2i16_a, 4); 494be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.shrl.ph 495be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_a = (v2i16) {0x1357, 0x2468}; 496be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan i32_b = 8; 497be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_r = __builtin_mips_shrl_ph (v2i16_a, i32_b); 498be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.shrl.ph 499be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 500be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_a = (v2q15) {0x3334, 0x4444}; 501be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_b = (v2q15) {0x1111, 0x2222}; 502be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_r = __builtin_mips_subqh_ph(v2q15_a, v2q15_b); 503be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.subqh.ph 504be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_a = (v2q15) {0x3334, 0x4444}; 505be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_b = (v2q15) {0x1111, 0x2222}; 506be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2q15_r = __builtin_mips_subqh_r_ph(v2q15_a, v2q15_b); 507be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.subqh.r.ph 508be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_a = 0x11111112; 509be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_b = 0x99999999; 510be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_r = __builtin_mips_subqh_w(q31_a, q31_b); 511be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.subqh.w 512be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_a = 0x11111112; 513be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_b = 0x99999999; 514be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan q31_r = __builtin_mips_subqh_r_w(q31_a, q31_b); 515be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call i32 @llvm.mips.subqh.r.w 516be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 517be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_a = (v2i16) {0x1357, 0x4455}; 518be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0x3333, 0x4444}; 519be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_r = __builtin_mips_subu_ph(v2i16_a, v2i16_b); 520be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.subu.ph 521be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_a = (v2i16) {0x1357, 0x4455}; 522be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_b = (v2i16) {0x3333, 0x4444}; 523be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v2i16_r = __builtin_mips_subu_s_ph(v2i16_a, v2i16_b); 524be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <2 x i16> @llvm.mips.subu.s.ph 525be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan 526be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x33 ,0x44, 0x55, 0x66}; 527be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_b = (v4i8) {0x99 ,0x15, 0x85, 0xff}; 528be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_r = __builtin_mips_subuh_qb(v4i8_a, v4i8_b); 529be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <4 x i8> @llvm.mips.subuh.qb 530be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_a = (v4i8) {0x33 ,0x44, 0x55, 0x66}; 531be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_b = (v4i8) {0x99 ,0x15, 0x85, 0xff}; 532be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan v4i8_r = __builtin_mips_subuh_r_qb(v4i8_a, v4i8_b); 533be22cb84f32cfa6cf0b6bdaf523288b747bb0f18Simon Atanasyan// CHECK: call <4 x i8> @llvm.mips.subuh.r.qb 534fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan} 535