@@ -73,6 +73,121 @@ define void @call_v1i32(ptr %p) nounwind {
7373 ret void
7474}
7575
76+ define void @arg_v1i80 (<1 x i80 > %vec , ptr %p ) {
77+ ; MIPS64-LABEL: arg_v1i80:
78+ ; MIPS64: # %bb.0:
79+ ; MIPS64-NEXT: sh $5, 8($6)
80+ ; MIPS64-NEXT: dsrl $1, $5, 16
81+ ; MIPS64-NEXT: dsll $2, $4, 48
82+ ; MIPS64-NEXT: or $1, $2, $1
83+ ; MIPS64-NEXT: jr $ra
84+ ; MIPS64-NEXT: sd $1, 0($6)
85+ ;
86+ ; MIPS32-LABEL: arg_v1i80:
87+ ; MIPS32: # %bb.0:
88+ ; MIPS32-NEXT: sll $1, $5, 16
89+ ; MIPS32-NEXT: srl $2, $6, 16
90+ ; MIPS32-NEXT: sh $6, 8($7)
91+ ; MIPS32-NEXT: or $1, $2, $1
92+ ; MIPS32-NEXT: sw $1, 4($7)
93+ ; MIPS32-NEXT: srl $1, $5, 16
94+ ; MIPS32-NEXT: sll $2, $4, 16
95+ ; MIPS32-NEXT: or $1, $2, $1
96+ ; MIPS32-NEXT: jr $ra
97+ ; MIPS32-NEXT: sw $1, 0($7)
98+ store <1 x i80 > %vec , ptr %p
99+ ret void
100+ }
101+
102+ define <1 x i80 > @ret_v1i80 (ptr %p ) {
103+ ; MIPS64-LABEL: ret_v1i80:
104+ ; MIPS64: # %bb.0:
105+ ; MIPS64-NEXT: lhu $1, 8($4)
106+ ; MIPS64-NEXT: ld $2, 0($4)
107+ ; MIPS64-NEXT: dsll $3, $2, 16
108+ ; MIPS64-NEXT: or $3, $1, $3
109+ ; MIPS64-NEXT: jr $ra
110+ ; MIPS64-NEXT: dsrl $2, $2, 48
111+ ;
112+ ; MIPS32-LABEL: ret_v1i80:
113+ ; MIPS32: # %bb.0:
114+ ; MIPS32-NEXT: lw $1, 4($4)
115+ ; MIPS32-NEXT: srl $2, $1, 16
116+ ; MIPS32-NEXT: lw $5, 0($4)
117+ ; MIPS32-NEXT: sll $3, $5, 16
118+ ; MIPS32-NEXT: or $3, $3, $2
119+ ; MIPS32-NEXT: lhu $2, 8($4)
120+ ; MIPS32-NEXT: sll $1, $1, 16
121+ ; MIPS32-NEXT: or $4, $2, $1
122+ ; MIPS32-NEXT: jr $ra
123+ ; MIPS32-NEXT: srl $2, $5, 16
124+ %v = load <1 x i80 >, ptr %p
125+ ret <1 x i80 > %v
126+ }
127+
128+ define void @call_v1i80 (ptr %p ) nounwind {
129+ ; MIPS64-LABEL: call_v1i80:
130+ ; MIPS64: # %bb.0:
131+ ; MIPS64-NEXT: daddiu $sp, $sp, -16
132+ ; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
133+ ; MIPS64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
134+ ; MIPS64-NEXT: move $16, $4
135+ ; MIPS64-NEXT: lhu $1, 8($4)
136+ ; MIPS64-NEXT: ld $2, 0($4)
137+ ; MIPS64-NEXT: dsll $3, $2, 16
138+ ; MIPS64-NEXT: or $5, $1, $3
139+ ; MIPS64-NEXT: jal arg_v1i80
140+ ; MIPS64-NEXT: dsrl $4, $2, 48
141+ ; MIPS64-NEXT: jal ret_v1i80
142+ ; MIPS64-NEXT: nop
143+ ; MIPS64-NEXT: sh $3, 8($16)
144+ ; MIPS64-NEXT: dsrl $1, $3, 16
145+ ; MIPS64-NEXT: dsll $2, $2, 48
146+ ; MIPS64-NEXT: or $1, $2, $1
147+ ; MIPS64-NEXT: sd $1, 0($16)
148+ ; MIPS64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
149+ ; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
150+ ; MIPS64-NEXT: jr $ra
151+ ; MIPS64-NEXT: daddiu $sp, $sp, 16
152+ ;
153+ ; MIPS32-LABEL: call_v1i80:
154+ ; MIPS32: # %bb.0:
155+ ; MIPS32-NEXT: addiu $sp, $sp, -24
156+ ; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
157+ ; MIPS32-NEXT: sw $16, 16($sp) # 4-byte Folded Spill
158+ ; MIPS32-NEXT: move $16, $4
159+ ; MIPS32-NEXT: lw $1, 4($4)
160+ ; MIPS32-NEXT: srl $2, $1, 16
161+ ; MIPS32-NEXT: lw $3, 0($4)
162+ ; MIPS32-NEXT: sll $4, $3, 16
163+ ; MIPS32-NEXT: or $5, $4, $2
164+ ; MIPS32-NEXT: lhu $2, 8($16)
165+ ; MIPS32-NEXT: sll $1, $1, 16
166+ ; MIPS32-NEXT: or $6, $2, $1
167+ ; MIPS32-NEXT: jal arg_v1i80
168+ ; MIPS32-NEXT: srl $4, $3, 16
169+ ; MIPS32-NEXT: jal ret_v1i80
170+ ; MIPS32-NEXT: nop
171+ ; MIPS32-NEXT: sh $4, 8($16)
172+ ; MIPS32-NEXT: sll $1, $3, 16
173+ ; MIPS32-NEXT: srl $4, $4, 16
174+ ; MIPS32-NEXT: or $1, $4, $1
175+ ; MIPS32-NEXT: sw $1, 4($16)
176+ ; MIPS32-NEXT: srl $1, $3, 16
177+ ; MIPS32-NEXT: sll $2, $2, 16
178+ ; MIPS32-NEXT: or $1, $2, $1
179+ ; MIPS32-NEXT: sw $1, 0($16)
180+ ; MIPS32-NEXT: lw $16, 16($sp) # 4-byte Folded Reload
181+ ; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
182+ ; MIPS32-NEXT: jr $ra
183+ ; MIPS32-NEXT: addiu $sp, $sp, 24
184+ %v1 = load <1 x i80 >, ptr %p
185+ call void @arg_v1i80 (<1 x i80 > %v1 )
186+ %v2 = call <1 x i80 > @ret_v1i80 ()
187+ store <1 x i80 > %v2 , ptr %p
188+ ret void
189+ }
190+
76191define void @arg_v2i32 (<2 x i32 > %vec , ptr %p ) {
77192; MIPS64-LABEL: arg_v2i32:
78193; MIPS64: # %bb.0:
0 commit comments