1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -mcpu=mips32r5 -mattr=+msa,+fp64,+nan2008 -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=P5600
3
4define void @fadd_v4f32(<4 x float>* %a, <4 x float>* %b, <4 x float>* %c) {
5; P5600-LABEL: fadd_v4f32:
6; P5600:       # %bb.0: # %entry
7; P5600-NEXT:    ld.w $w0, 0($4)
8; P5600-NEXT:    ld.w $w1, 0($5)
9; P5600-NEXT:    fadd.w $w0, $w0, $w1
10; P5600-NEXT:    st.w $w0, 0($6)
11; P5600-NEXT:    jr $ra
12; P5600-NEXT:    nop
13entry:
14  %0 = load <4 x float>, <4 x float>* %a, align 16
15  %1 = load <4 x float>, <4 x float>* %b, align 16
16  %add = fadd <4 x float> %0, %1
17  store <4 x float> %add, <4 x float>* %c, align 16
18  ret void
19}
20
21
22define void @fadd_v2f64(<2 x double>* %a, <2 x double>* %b, <2 x double>* %c) {
23; P5600-LABEL: fadd_v2f64:
24; P5600:       # %bb.0: # %entry
25; P5600-NEXT:    ld.d $w0, 0($4)
26; P5600-NEXT:    ld.d $w1, 0($5)
27; P5600-NEXT:    fadd.d $w0, $w0, $w1
28; P5600-NEXT:    st.d $w0, 0($6)
29; P5600-NEXT:    jr $ra
30; P5600-NEXT:    nop
31entry:
32  %0 = load <2 x double>, <2 x double>* %a, align 16
33  %1 = load <2 x double>, <2 x double>* %b, align 16
34  %add = fadd <2 x double> %0, %1
35  store <2 x double> %add, <2 x double>* %c, align 16
36  ret void
37}
38
39
40define void @fsub_v4f32(<4 x float>* %a, <4 x float>* %b, <4 x float>* %c) {
41; P5600-LABEL: fsub_v4f32:
42; P5600:       # %bb.0: # %entry
43; P5600-NEXT:    ld.w $w0, 0($4)
44; P5600-NEXT:    ld.w $w1, 0($5)
45; P5600-NEXT:    fsub.w $w0, $w0, $w1
46; P5600-NEXT:    st.w $w0, 0($6)
47; P5600-NEXT:    jr $ra
48; P5600-NEXT:    nop
49entry:
50  %0 = load <4 x float>, <4 x float>* %a, align 16
51  %1 = load <4 x float>, <4 x float>* %b, align 16
52  %sub = fsub <4 x float> %0, %1
53  store <4 x float> %sub, <4 x float>* %c, align 16
54  ret void
55}
56
57
58define void @fsub_v2f64(<2 x double>* %a, <2 x double>* %b, <2 x double>* %c) {
59; P5600-LABEL: fsub_v2f64:
60; P5600:       # %bb.0: # %entry
61; P5600-NEXT:    ld.d $w0, 0($4)
62; P5600-NEXT:    ld.d $w1, 0($5)
63; P5600-NEXT:    fsub.d $w0, $w0, $w1
64; P5600-NEXT:    st.d $w0, 0($6)
65; P5600-NEXT:    jr $ra
66; P5600-NEXT:    nop
67entry:
68  %0 = load <2 x double>, <2 x double>* %a, align 16
69  %1 = load <2 x double>, <2 x double>* %b, align 16
70  %sub = fsub <2 x double> %0, %1
71  store <2 x double> %sub, <2 x double>* %c, align 16
72  ret void
73}
74
75
76define void @fmul_v4f32(<4 x float>* %a, <4 x float>* %b, <4 x float>* %c) {
77; P5600-LABEL: fmul_v4f32:
78; P5600:       # %bb.0: # %entry
79; P5600-NEXT:    ld.w $w0, 0($4)
80; P5600-NEXT:    ld.w $w1, 0($5)
81; P5600-NEXT:    fmul.w $w0, $w0, $w1
82; P5600-NEXT:    st.w $w0, 0($6)
83; P5600-NEXT:    jr $ra
84; P5600-NEXT:    nop
85entry:
86  %0 = load <4 x float>, <4 x float>* %a, align 16
87  %1 = load <4 x float>, <4 x float>* %b, align 16
88  %mul = fmul <4 x float> %0, %1
89  store <4 x float> %mul, <4 x float>* %c, align 16
90  ret void
91}
92
93
94define void @fmul_v2f64(<2 x double>* %a, <2 x double>* %b, <2 x double>* %c) {
95; P5600-LABEL: fmul_v2f64:
96; P5600:       # %bb.0: # %entry
97; P5600-NEXT:    ld.d $w0, 0($4)
98; P5600-NEXT:    ld.d $w1, 0($5)
99; P5600-NEXT:    fmul.d $w0, $w0, $w1
100; P5600-NEXT:    st.d $w0, 0($6)
101; P5600-NEXT:    jr $ra
102; P5600-NEXT:    nop
103entry:
104  %0 = load <2 x double>, <2 x double>* %a, align 16
105  %1 = load <2 x double>, <2 x double>* %b, align 16
106  %mul = fmul <2 x double> %0, %1
107  store <2 x double> %mul, <2 x double>* %c, align 16
108  ret void
109}
110
111
112define void @fdiv_v4f32(<4 x float>* %a, <4 x float>* %b, <4 x float>* %c) {
113; P5600-LABEL: fdiv_v4f32:
114; P5600:       # %bb.0: # %entry
115; P5600-NEXT:    ld.w $w0, 0($4)
116; P5600-NEXT:    ld.w $w1, 0($5)
117; P5600-NEXT:    fdiv.w $w0, $w0, $w1
118; P5600-NEXT:    st.w $w0, 0($6)
119; P5600-NEXT:    jr $ra
120; P5600-NEXT:    nop
121entry:
122  %0 = load <4 x float>, <4 x float>* %a, align 16
123  %1 = load <4 x float>, <4 x float>* %b, align 16
124  %div = fdiv <4 x float> %0, %1
125  store <4 x float> %div, <4 x float>* %c, align 16
126  ret void
127}
128
129
130define void @fdiv_v2f64(<2 x double>* %a, <2 x double>* %b, <2 x double>* %c) {
131; P5600-LABEL: fdiv_v2f64:
132; P5600:       # %bb.0: # %entry
133; P5600-NEXT:    ld.d $w0, 0($4)
134; P5600-NEXT:    ld.d $w1, 0($5)
135; P5600-NEXT:    fdiv.d $w0, $w0, $w1
136; P5600-NEXT:    st.d $w0, 0($6)
137; P5600-NEXT:    jr $ra
138; P5600-NEXT:    nop
139entry:
140  %0 = load <2 x double>, <2 x double>* %a, align 16
141  %1 = load <2 x double>, <2 x double>* %b, align 16
142  %div = fdiv <2 x double> %0, %1
143  store <2 x double> %div, <2 x double>* %c, align 16
144  ret void
145}
146