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