1 1.1 mrg ;; Arm M-profile Vector Extension Machine Description 2 1.1.1.2 mrg ;; Copyright (C) 2019-2022 Free Software Foundation, Inc. 3 1.1 mrg ;; 4 1.1 mrg ;; This file is part of GCC. 5 1.1 mrg ;; 6 1.1 mrg ;; GCC is free software; you can redistribute it and/or modify it 7 1.1 mrg ;; under the terms of the GNU General Public License as published by 8 1.1 mrg ;; the Free Software Foundation; either version 3, or (at your option) 9 1.1 mrg ;; any later version. 10 1.1 mrg ;; 11 1.1 mrg ;; GCC is distributed in the hope that it will be useful, but 12 1.1 mrg ;; WITHOUT ANY WARRANTY; without even the implied warranty of 13 1.1 mrg ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 1.1 mrg ;; General Public License for more details. 15 1.1 mrg ;; 16 1.1 mrg ;; You should have received a copy of the GNU General Public License 17 1.1 mrg ;; along with GCC; see the file COPYING3. If not see 18 1.1 mrg ;; <http://www.gnu.org/licenses/>. 19 1.1 mrg 20 1.1 mrg (define_insn "*mve_mov<mode>" 21 1.1 mrg [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w,w,r,w,Ux,w") 22 1.1 mrg (match_operand:MVE_types 1 "general_operand" "w,r,w,Dn,UxUi,r,Dm,w,Ul"))] 23 1.1 mrg "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT" 24 1.1 mrg { 25 1.1 mrg if (which_alternative == 3 || which_alternative == 6) 26 1.1 mrg { 27 1.1 mrg int width, is_valid; 28 1.1 mrg static char templ[40]; 29 1.1 mrg 30 1.1 mrg is_valid = simd_immediate_valid_for_move (operands[1], <MODE>mode, 31 1.1 mrg &operands[1], &width); 32 1.1 mrg 33 1.1 mrg gcc_assert (is_valid != 0); 34 1.1 mrg 35 1.1 mrg if (width == 0) 36 1.1 mrg return "vmov.f32\t%q0, %1 @ <mode>"; 37 1.1 mrg else 38 1.1 mrg sprintf (templ, "vmov.i%d\t%%q0, %%x1 @ <mode>", width); 39 1.1 mrg return templ; 40 1.1 mrg } 41 1.1 mrg 42 1.1 mrg if (which_alternative == 4 || which_alternative == 7) 43 1.1 mrg { 44 1.1 mrg if (<MODE>mode == V2DFmode || <MODE>mode == V2DImode || <MODE>mode == TImode) 45 1.1 mrg { 46 1.1 mrg if (which_alternative == 7) 47 1.1 mrg output_asm_insn ("vstrw.32\t%q1, %E0", operands); 48 1.1 mrg else 49 1.1 mrg output_asm_insn ("vldrw.u32\t%q0, %E1",operands); 50 1.1 mrg } 51 1.1 mrg else 52 1.1 mrg { 53 1.1 mrg if (which_alternative == 7) 54 1.1 mrg output_asm_insn ("vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0", operands); 55 1.1 mrg else 56 1.1 mrg output_asm_insn ("vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1", operands); 57 1.1 mrg } 58 1.1 mrg return ""; 59 1.1 mrg } 60 1.1 mrg switch (which_alternative) 61 1.1 mrg { 62 1.1 mrg case 0: 63 1.1 mrg return "vmov\t%q0, %q1"; 64 1.1 mrg case 1: 65 1.1 mrg return "vmov\t%e0, %Q1, %R1 @ <mode>\;vmov\t%f0, %J1, %K1"; 66 1.1 mrg case 2: 67 1.1 mrg return "vmov\t%Q0, %R0, %e1 @ <mode>\;vmov\t%J0, %K0, %f1"; 68 1.1 mrg case 5: 69 1.1 mrg return output_move_quad (operands); 70 1.1 mrg case 8: 71 1.1 mrg return output_move_neon (operands); 72 1.1 mrg default: 73 1.1 mrg gcc_unreachable (); 74 1.1 mrg return ""; 75 1.1 mrg } 76 1.1 mrg } 77 1.1 mrg [(set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_move,mve_store,mve_load") 78 1.1 mrg (set_attr "length" "4,8,8,4,8,8,4,4,4") 79 1.1 mrg (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*,*") 80 1.1 mrg (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*,*")]) 81 1.1 mrg 82 1.1 mrg (define_insn "*mve_vdup<mode>" 83 1.1 mrg [(set (match_operand:MVE_vecs 0 "s_register_operand" "=w") 84 1.1 mrg (vec_duplicate:MVE_vecs 85 1.1 mrg (match_operand:<V_elem> 1 "s_register_operand" "r")))] 86 1.1 mrg "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT" 87 1.1 mrg "vdup.<V_sz_elem>\t%q0, %1" 88 1.1 mrg [(set_attr "length" "4") 89 1.1 mrg (set_attr "type" "mve_move")]) 90 1.1 mrg 91 1.1 mrg ;; 92 1.1 mrg ;; [vst4q]) 93 1.1 mrg ;; 94 1.1 mrg (define_insn "mve_vst4q<mode>" 95 1.1.1.2 mrg [(set (match_operand:XI 0 "mve_struct_operand" "=Ug") 96 1.1 mrg (unspec:XI [(match_operand:XI 1 "s_register_operand" "w") 97 1.1 mrg (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 98 1.1 mrg VST4Q)) 99 1.1 mrg ] 100 1.1 mrg "TARGET_HAVE_MVE" 101 1.1 mrg { 102 1.1 mrg rtx ops[6]; 103 1.1 mrg int regno = REGNO (operands[1]); 104 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 105 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno+4); 106 1.1 mrg ops[2] = gen_rtx_REG (TImode, regno+8); 107 1.1 mrg ops[3] = gen_rtx_REG (TImode, regno+12); 108 1.1 mrg rtx reg = operands[0]; 109 1.1 mrg while (reg && !REG_P (reg)) 110 1.1 mrg reg = XEXP (reg, 0); 111 1.1 mrg gcc_assert (REG_P (reg)); 112 1.1 mrg ops[4] = reg; 113 1.1 mrg ops[5] = operands[0]; 114 1.1 mrg /* Here in first three instructions data is stored to ops[4]'s location but 115 1.1 mrg in the fourth instruction data is stored to operands[0], this is to 116 1.1 mrg support the writeback. */ 117 1.1 mrg output_asm_insn ("vst40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 118 1.1 mrg "vst41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 119 1.1 mrg "vst42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 120 1.1 mrg "vst43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops); 121 1.1 mrg return ""; 122 1.1 mrg } 123 1.1 mrg [(set_attr "length" "16")]) 124 1.1 mrg 125 1.1 mrg ;; 126 1.1 mrg ;; [vrndq_m_f]) 127 1.1 mrg ;; 128 1.1 mrg (define_insn "mve_vrndq_m_f<mode>" 129 1.1 mrg [ 130 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 131 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 132 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 133 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 134 1.1 mrg VRNDQ_M_F)) 135 1.1 mrg ] 136 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 137 1.1.1.2 mrg "vpst\;vrintzt.f%#<V_sz_elem>\t%q0, %q2" 138 1.1 mrg [(set_attr "type" "mve_move") 139 1.1 mrg (set_attr "length""8")]) 140 1.1 mrg 141 1.1 mrg ;; 142 1.1 mrg ;; [vrndxq_f]) 143 1.1 mrg ;; 144 1.1 mrg (define_insn "mve_vrndxq_f<mode>" 145 1.1 mrg [ 146 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 147 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 148 1.1 mrg VRNDXQ_F)) 149 1.1 mrg ] 150 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 151 1.1 mrg "vrintx.f%#<V_sz_elem> %q0, %q1" 152 1.1 mrg [(set_attr "type" "mve_move") 153 1.1 mrg ]) 154 1.1 mrg 155 1.1 mrg ;; 156 1.1 mrg ;; [vrndq_f]) 157 1.1 mrg ;; 158 1.1 mrg (define_insn "mve_vrndq_f<mode>" 159 1.1 mrg [ 160 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 161 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 162 1.1 mrg VRNDQ_F)) 163 1.1 mrg ] 164 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 165 1.1 mrg "vrintz.f%#<V_sz_elem> %q0, %q1" 166 1.1 mrg [(set_attr "type" "mve_move") 167 1.1 mrg ]) 168 1.1 mrg 169 1.1 mrg ;; 170 1.1 mrg ;; [vrndpq_f]) 171 1.1 mrg ;; 172 1.1 mrg (define_insn "mve_vrndpq_f<mode>" 173 1.1 mrg [ 174 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 175 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 176 1.1 mrg VRNDPQ_F)) 177 1.1 mrg ] 178 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 179 1.1 mrg "vrintp.f%#<V_sz_elem> %q0, %q1" 180 1.1 mrg [(set_attr "type" "mve_move") 181 1.1 mrg ]) 182 1.1 mrg 183 1.1 mrg ;; 184 1.1 mrg ;; [vrndnq_f]) 185 1.1 mrg ;; 186 1.1 mrg (define_insn "mve_vrndnq_f<mode>" 187 1.1 mrg [ 188 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 189 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 190 1.1 mrg VRNDNQ_F)) 191 1.1 mrg ] 192 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 193 1.1 mrg "vrintn.f%#<V_sz_elem> %q0, %q1" 194 1.1 mrg [(set_attr "type" "mve_move") 195 1.1 mrg ]) 196 1.1 mrg 197 1.1 mrg ;; 198 1.1 mrg ;; [vrndmq_f]) 199 1.1 mrg ;; 200 1.1 mrg (define_insn "mve_vrndmq_f<mode>" 201 1.1 mrg [ 202 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 203 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 204 1.1 mrg VRNDMQ_F)) 205 1.1 mrg ] 206 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 207 1.1 mrg "vrintm.f%#<V_sz_elem> %q0, %q1" 208 1.1 mrg [(set_attr "type" "mve_move") 209 1.1 mrg ]) 210 1.1 mrg 211 1.1 mrg ;; 212 1.1 mrg ;; [vrndaq_f]) 213 1.1 mrg ;; 214 1.1 mrg (define_insn "mve_vrndaq_f<mode>" 215 1.1 mrg [ 216 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 217 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 218 1.1 mrg VRNDAQ_F)) 219 1.1 mrg ] 220 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 221 1.1 mrg "vrinta.f%#<V_sz_elem> %q0, %q1" 222 1.1 mrg [(set_attr "type" "mve_move") 223 1.1 mrg ]) 224 1.1 mrg 225 1.1 mrg ;; 226 1.1 mrg ;; [vrev64q_f]) 227 1.1 mrg ;; 228 1.1 mrg (define_insn "mve_vrev64q_f<mode>" 229 1.1 mrg [ 230 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=&w") 231 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w")] 232 1.1 mrg VREV64Q_F)) 233 1.1 mrg ] 234 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 235 1.1.1.2 mrg "vrev64.%#<V_sz_elem>\t%q0, %q1" 236 1.1 mrg [(set_attr "type" "mve_move") 237 1.1 mrg ]) 238 1.1 mrg 239 1.1 mrg ;; 240 1.1 mrg ;; [vnegq_f]) 241 1.1 mrg ;; 242 1.1 mrg (define_insn "mve_vnegq_f<mode>" 243 1.1 mrg [ 244 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 245 1.1.1.2 mrg (neg:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))) 246 1.1 mrg ] 247 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 248 1.1.1.2 mrg "vneg.f%#<V_sz_elem>\t%q0, %q1" 249 1.1 mrg [(set_attr "type" "mve_move") 250 1.1 mrg ]) 251 1.1 mrg 252 1.1 mrg ;; 253 1.1 mrg ;; [vdupq_n_f]) 254 1.1 mrg ;; 255 1.1 mrg (define_insn "mve_vdupq_n_f<mode>" 256 1.1 mrg [ 257 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 258 1.1 mrg (unspec:MVE_0 [(match_operand:<V_elem> 1 "s_register_operand" "r")] 259 1.1 mrg VDUPQ_N_F)) 260 1.1 mrg ] 261 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 262 1.1.1.2 mrg "vdup.%#<V_sz_elem>\t%q0, %1" 263 1.1 mrg [(set_attr "type" "mve_move") 264 1.1 mrg ]) 265 1.1 mrg 266 1.1 mrg ;; 267 1.1 mrg ;; [vabsq_f]) 268 1.1 mrg ;; 269 1.1 mrg (define_insn "mve_vabsq_f<mode>" 270 1.1 mrg [ 271 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 272 1.1.1.2 mrg (abs:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w"))) 273 1.1 mrg ] 274 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 275 1.1.1.2 mrg "vabs.f%#<V_sz_elem>\t%q0, %q1" 276 1.1 mrg [(set_attr "type" "mve_move") 277 1.1 mrg ]) 278 1.1 mrg 279 1.1 mrg ;; 280 1.1 mrg ;; [vrev32q_f]) 281 1.1 mrg ;; 282 1.1 mrg (define_insn "mve_vrev32q_fv8hf" 283 1.1 mrg [ 284 1.1 mrg (set (match_operand:V8HF 0 "s_register_operand" "=w") 285 1.1 mrg (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "w")] 286 1.1 mrg VREV32Q_F)) 287 1.1 mrg ] 288 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 289 1.1.1.2 mrg "vrev32.16\t%q0, %q1" 290 1.1 mrg [(set_attr "type" "mve_move") 291 1.1 mrg ]) 292 1.1 mrg ;; 293 1.1 mrg ;; [vcvttq_f32_f16]) 294 1.1 mrg ;; 295 1.1 mrg (define_insn "mve_vcvttq_f32_f16v4sf" 296 1.1 mrg [ 297 1.1 mrg (set (match_operand:V4SF 0 "s_register_operand" "=w") 298 1.1 mrg (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")] 299 1.1 mrg VCVTTQ_F32_F16)) 300 1.1 mrg ] 301 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 302 1.1.1.2 mrg "vcvtt.f32.f16\t%q0, %q1" 303 1.1 mrg [(set_attr "type" "mve_move") 304 1.1 mrg ]) 305 1.1 mrg 306 1.1 mrg ;; 307 1.1 mrg ;; [vcvtbq_f32_f16]) 308 1.1 mrg ;; 309 1.1 mrg (define_insn "mve_vcvtbq_f32_f16v4sf" 310 1.1 mrg [ 311 1.1 mrg (set (match_operand:V4SF 0 "s_register_operand" "=w") 312 1.1 mrg (unspec:V4SF [(match_operand:V8HF 1 "s_register_operand" "w")] 313 1.1 mrg VCVTBQ_F32_F16)) 314 1.1 mrg ] 315 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 316 1.1.1.2 mrg "vcvtb.f32.f16\t%q0, %q1" 317 1.1 mrg [(set_attr "type" "mve_move") 318 1.1 mrg ]) 319 1.1 mrg 320 1.1 mrg ;; 321 1.1 mrg ;; [vcvtq_to_f_s, vcvtq_to_f_u]) 322 1.1 mrg ;; 323 1.1 mrg (define_insn "mve_vcvtq_to_f_<supf><mode>" 324 1.1 mrg [ 325 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 326 1.1 mrg (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 327 1.1 mrg VCVTQ_TO_F)) 328 1.1 mrg ] 329 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 330 1.1.1.2 mrg "vcvt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q1" 331 1.1 mrg [(set_attr "type" "mve_move") 332 1.1 mrg ]) 333 1.1 mrg 334 1.1 mrg ;; 335 1.1 mrg ;; [vrev64q_u, vrev64q_s]) 336 1.1 mrg ;; 337 1.1 mrg (define_insn "mve_vrev64q_<supf><mode>" 338 1.1 mrg [ 339 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=&w") 340 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")] 341 1.1 mrg VREV64Q)) 342 1.1 mrg ] 343 1.1 mrg "TARGET_HAVE_MVE" 344 1.1.1.2 mrg "vrev64.%#<V_sz_elem>\t%q0, %q1" 345 1.1 mrg [(set_attr "type" "mve_move") 346 1.1 mrg ]) 347 1.1 mrg 348 1.1 mrg ;; 349 1.1 mrg ;; [vcvtq_from_f_s, vcvtq_from_f_u]) 350 1.1 mrg ;; 351 1.1 mrg (define_insn "mve_vcvtq_from_f_<supf><mode>" 352 1.1 mrg [ 353 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 354 1.1 mrg (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 355 1.1 mrg VCVTQ_FROM_F)) 356 1.1 mrg ] 357 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 358 1.1.1.2 mrg "vcvt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q1" 359 1.1 mrg [(set_attr "type" "mve_move") 360 1.1 mrg ]) 361 1.1 mrg ;; [vqnegq_s]) 362 1.1 mrg ;; 363 1.1 mrg (define_insn "mve_vqnegq_s<mode>" 364 1.1 mrg [ 365 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 366 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")] 367 1.1 mrg VQNEGQ_S)) 368 1.1 mrg ] 369 1.1 mrg "TARGET_HAVE_MVE" 370 1.1.1.2 mrg "vqneg.s%#<V_sz_elem>\t%q0, %q1" 371 1.1 mrg [(set_attr "type" "mve_move") 372 1.1 mrg ]) 373 1.1 mrg 374 1.1 mrg ;; 375 1.1 mrg ;; [vqabsq_s]) 376 1.1 mrg ;; 377 1.1 mrg (define_insn "mve_vqabsq_s<mode>" 378 1.1 mrg [ 379 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 380 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")] 381 1.1 mrg VQABSQ_S)) 382 1.1 mrg ] 383 1.1 mrg "TARGET_HAVE_MVE" 384 1.1.1.2 mrg "vqabs.s%#<V_sz_elem>\t%q0, %q1" 385 1.1 mrg [(set_attr "type" "mve_move") 386 1.1 mrg ]) 387 1.1 mrg 388 1.1 mrg ;; 389 1.1 mrg ;; [vnegq_s]) 390 1.1 mrg ;; 391 1.1 mrg (define_insn "mve_vnegq_s<mode>" 392 1.1 mrg [ 393 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 394 1.1.1.2 mrg (neg:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) 395 1.1 mrg ] 396 1.1 mrg "TARGET_HAVE_MVE" 397 1.1.1.2 mrg "vneg.s%#<V_sz_elem>\t%q0, %q1" 398 1.1 mrg [(set_attr "type" "mve_move") 399 1.1 mrg ]) 400 1.1 mrg 401 1.1 mrg ;; 402 1.1 mrg ;; [vmvnq_u, vmvnq_s]) 403 1.1 mrg ;; 404 1.1.1.2 mrg (define_insn "mve_vmvnq_u<mode>" 405 1.1 mrg [ 406 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 407 1.1.1.2 mrg (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) 408 1.1 mrg ] 409 1.1 mrg "TARGET_HAVE_MVE" 410 1.1.1.2 mrg "vmvn\t%q0, %q1" 411 1.1 mrg [(set_attr "type" "mve_move") 412 1.1 mrg ]) 413 1.1.1.2 mrg (define_expand "mve_vmvnq_s<mode>" 414 1.1.1.2 mrg [ 415 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand") 416 1.1.1.2 mrg (not:MVE_2 (match_operand:MVE_2 1 "s_register_operand"))) 417 1.1.1.2 mrg ] 418 1.1.1.2 mrg "TARGET_HAVE_MVE" 419 1.1.1.2 mrg ) 420 1.1 mrg 421 1.1 mrg ;; 422 1.1 mrg ;; [vdupq_n_u, vdupq_n_s]) 423 1.1 mrg ;; 424 1.1 mrg (define_insn "mve_vdupq_n_<supf><mode>" 425 1.1 mrg [ 426 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 427 1.1 mrg (unspec:MVE_2 [(match_operand:<V_elem> 1 "s_register_operand" "r")] 428 1.1 mrg VDUPQ_N)) 429 1.1 mrg ] 430 1.1 mrg "TARGET_HAVE_MVE" 431 1.1.1.2 mrg "vdup.%#<V_sz_elem>\t%q0, %1" 432 1.1 mrg [(set_attr "type" "mve_move") 433 1.1 mrg ]) 434 1.1 mrg 435 1.1 mrg ;; 436 1.1 mrg ;; [vclzq_u, vclzq_s]) 437 1.1 mrg ;; 438 1.1.1.2 mrg (define_insn "@mve_vclzq_s<mode>" 439 1.1 mrg [ 440 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 441 1.1.1.2 mrg (clz:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) 442 1.1 mrg ] 443 1.1 mrg "TARGET_HAVE_MVE" 444 1.1.1.2 mrg "vclz.i%#<V_sz_elem>\t%q0, %q1" 445 1.1 mrg [(set_attr "type" "mve_move") 446 1.1 mrg ]) 447 1.1.1.2 mrg (define_expand "mve_vclzq_u<mode>" 448 1.1.1.2 mrg [ 449 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand") 450 1.1.1.2 mrg (clz:MVE_2 (match_operand:MVE_2 1 "s_register_operand"))) 451 1.1.1.2 mrg ] 452 1.1.1.2 mrg "TARGET_HAVE_MVE" 453 1.1.1.2 mrg ) 454 1.1 mrg 455 1.1 mrg ;; 456 1.1 mrg ;; [vclsq_s]) 457 1.1 mrg ;; 458 1.1 mrg (define_insn "mve_vclsq_s<mode>" 459 1.1 mrg [ 460 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 461 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w")] 462 1.1 mrg VCLSQ_S)) 463 1.1 mrg ] 464 1.1 mrg "TARGET_HAVE_MVE" 465 1.1.1.2 mrg "vcls.s%#<V_sz_elem>\t%q0, %q1" 466 1.1 mrg [(set_attr "type" "mve_move") 467 1.1 mrg ]) 468 1.1 mrg 469 1.1 mrg ;; 470 1.1 mrg ;; [vaddvq_s, vaddvq_u]) 471 1.1 mrg ;; 472 1.1.1.2 mrg (define_insn "@mve_vaddvq_<supf><mode>" 473 1.1 mrg [ 474 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 475 1.1 mrg (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w")] 476 1.1 mrg VADDVQ)) 477 1.1 mrg ] 478 1.1 mrg "TARGET_HAVE_MVE" 479 1.1 mrg "vaddv.<supf>%#<V_sz_elem>\t%0, %q1" 480 1.1 mrg [(set_attr "type" "mve_move") 481 1.1 mrg ]) 482 1.1 mrg 483 1.1 mrg ;; 484 1.1 mrg ;; [vabsq_s]) 485 1.1 mrg ;; 486 1.1 mrg (define_insn "mve_vabsq_s<mode>" 487 1.1 mrg [ 488 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 489 1.1.1.2 mrg (abs:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w"))) 490 1.1 mrg ] 491 1.1 mrg "TARGET_HAVE_MVE" 492 1.1 mrg "vabs.s%#<V_sz_elem>\t%q0, %q1" 493 1.1 mrg [(set_attr "type" "mve_move") 494 1.1 mrg ]) 495 1.1 mrg 496 1.1 mrg ;; 497 1.1 mrg ;; [vrev32q_u, vrev32q_s]) 498 1.1 mrg ;; 499 1.1 mrg (define_insn "mve_vrev32q_<supf><mode>" 500 1.1 mrg [ 501 1.1 mrg (set (match_operand:MVE_3 0 "s_register_operand" "=w") 502 1.1 mrg (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "w")] 503 1.1 mrg VREV32Q)) 504 1.1 mrg ] 505 1.1 mrg "TARGET_HAVE_MVE" 506 1.1 mrg "vrev32.%#<V_sz_elem>\t%q0, %q1" 507 1.1 mrg [(set_attr "type" "mve_move") 508 1.1 mrg ]) 509 1.1 mrg 510 1.1 mrg ;; 511 1.1 mrg ;; [vmovltq_u, vmovltq_s]) 512 1.1 mrg ;; 513 1.1 mrg (define_insn "mve_vmovltq_<supf><mode>" 514 1.1 mrg [ 515 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 516 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")] 517 1.1 mrg VMOVLTQ)) 518 1.1 mrg ] 519 1.1 mrg "TARGET_HAVE_MVE" 520 1.1.1.2 mrg "vmovlt.<supf>%#<V_sz_elem>\t%q0, %q1" 521 1.1 mrg [(set_attr "type" "mve_move") 522 1.1 mrg ]) 523 1.1 mrg 524 1.1 mrg ;; 525 1.1 mrg ;; [vmovlbq_s, vmovlbq_u]) 526 1.1 mrg ;; 527 1.1 mrg (define_insn "mve_vmovlbq_<supf><mode>" 528 1.1 mrg [ 529 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 530 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w")] 531 1.1 mrg VMOVLBQ)) 532 1.1 mrg ] 533 1.1 mrg "TARGET_HAVE_MVE" 534 1.1.1.2 mrg "vmovlb.<supf>%#<V_sz_elem>\t%q0, %q1" 535 1.1 mrg [(set_attr "type" "mve_move") 536 1.1 mrg ]) 537 1.1 mrg 538 1.1 mrg ;; 539 1.1 mrg ;; [vcvtpq_s, vcvtpq_u]) 540 1.1 mrg ;; 541 1.1 mrg (define_insn "mve_vcvtpq_<supf><mode>" 542 1.1 mrg [ 543 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 544 1.1 mrg (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 545 1.1 mrg VCVTPQ)) 546 1.1 mrg ] 547 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 548 1.1.1.2 mrg "vcvtp.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q1" 549 1.1 mrg [(set_attr "type" "mve_move") 550 1.1 mrg ]) 551 1.1 mrg 552 1.1 mrg ;; 553 1.1 mrg ;; [vcvtnq_s, vcvtnq_u]) 554 1.1 mrg ;; 555 1.1 mrg (define_insn "mve_vcvtnq_<supf><mode>" 556 1.1 mrg [ 557 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 558 1.1 mrg (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 559 1.1 mrg VCVTNQ)) 560 1.1 mrg ] 561 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 562 1.1.1.2 mrg "vcvtn.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q1" 563 1.1 mrg [(set_attr "type" "mve_move") 564 1.1 mrg ]) 565 1.1 mrg 566 1.1 mrg ;; 567 1.1 mrg ;; [vcvtmq_s, vcvtmq_u]) 568 1.1 mrg ;; 569 1.1 mrg (define_insn "mve_vcvtmq_<supf><mode>" 570 1.1 mrg [ 571 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 572 1.1 mrg (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 573 1.1 mrg VCVTMQ)) 574 1.1 mrg ] 575 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 576 1.1.1.2 mrg "vcvtm.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q1" 577 1.1 mrg [(set_attr "type" "mve_move") 578 1.1 mrg ]) 579 1.1 mrg 580 1.1 mrg ;; 581 1.1 mrg ;; [vcvtaq_u, vcvtaq_s]) 582 1.1 mrg ;; 583 1.1 mrg (define_insn "mve_vcvtaq_<supf><mode>" 584 1.1 mrg [ 585 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 586 1.1 mrg (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w")] 587 1.1 mrg VCVTAQ)) 588 1.1 mrg ] 589 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 590 1.1.1.2 mrg "vcvta.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q1" 591 1.1 mrg [(set_attr "type" "mve_move") 592 1.1 mrg ]) 593 1.1 mrg 594 1.1 mrg ;; 595 1.1 mrg ;; [vmvnq_n_u, vmvnq_n_s]) 596 1.1 mrg ;; 597 1.1 mrg (define_insn "mve_vmvnq_n_<supf><mode>" 598 1.1 mrg [ 599 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 600 1.1.1.2 mrg (unspec:MVE_5 [(match_operand:<V_elem> 1 "immediate_operand" "i")] 601 1.1 mrg VMVNQ_N)) 602 1.1 mrg ] 603 1.1 mrg "TARGET_HAVE_MVE" 604 1.1.1.2 mrg "vmvn.i%#<V_sz_elem>\t%q0, %1" 605 1.1 mrg [(set_attr "type" "mve_move") 606 1.1 mrg ]) 607 1.1 mrg 608 1.1 mrg ;; 609 1.1 mrg ;; [vrev16q_u, vrev16q_s]) 610 1.1 mrg ;; 611 1.1 mrg (define_insn "mve_vrev16q_<supf>v16qi" 612 1.1 mrg [ 613 1.1 mrg (set (match_operand:V16QI 0 "s_register_operand" "=w") 614 1.1 mrg (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "w")] 615 1.1 mrg VREV16Q)) 616 1.1 mrg ] 617 1.1 mrg "TARGET_HAVE_MVE" 618 1.1.1.2 mrg "vrev16.8\t%q0, %q1" 619 1.1 mrg [(set_attr "type" "mve_move") 620 1.1 mrg ]) 621 1.1 mrg 622 1.1 mrg ;; 623 1.1 mrg ;; [vaddlvq_s vaddlvq_u]) 624 1.1 mrg ;; 625 1.1 mrg (define_insn "mve_vaddlvq_<supf>v4si" 626 1.1 mrg [ 627 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 628 1.1 mrg (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w")] 629 1.1 mrg VADDLVQ)) 630 1.1 mrg ] 631 1.1 mrg "TARGET_HAVE_MVE" 632 1.1.1.2 mrg "vaddlv.<supf>32\t%Q0, %R0, %q1" 633 1.1 mrg [(set_attr "type" "mve_move") 634 1.1 mrg ]) 635 1.1 mrg 636 1.1 mrg ;; 637 1.1 mrg ;; [vctp8q vctp16q vctp32q vctp64q]) 638 1.1 mrg ;; 639 1.1 mrg (define_insn "mve_vctp<mode1>qhi" 640 1.1 mrg [ 641 1.1 mrg (set (match_operand:HI 0 "vpr_register_operand" "=Up") 642 1.1 mrg (unspec:HI [(match_operand:SI 1 "s_register_operand" "r")] 643 1.1 mrg VCTPQ)) 644 1.1 mrg ] 645 1.1 mrg "TARGET_HAVE_MVE" 646 1.1.1.2 mrg "vctp.<mode1>\t%1" 647 1.1 mrg [(set_attr "type" "mve_move") 648 1.1 mrg ]) 649 1.1 mrg 650 1.1 mrg ;; 651 1.1 mrg ;; [vpnot]) 652 1.1 mrg ;; 653 1.1 mrg (define_insn "mve_vpnothi" 654 1.1 mrg [ 655 1.1 mrg (set (match_operand:HI 0 "vpr_register_operand" "=Up") 656 1.1 mrg (unspec:HI [(match_operand:HI 1 "vpr_register_operand" "0")] 657 1.1 mrg VPNOT)) 658 1.1 mrg ] 659 1.1 mrg "TARGET_HAVE_MVE" 660 1.1 mrg "vpnot" 661 1.1 mrg [(set_attr "type" "mve_move") 662 1.1 mrg ]) 663 1.1 mrg 664 1.1 mrg ;; 665 1.1 mrg ;; [vsubq_n_f]) 666 1.1 mrg ;; 667 1.1 mrg (define_insn "mve_vsubq_n_f<mode>" 668 1.1 mrg [ 669 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 670 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 671 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 672 1.1 mrg VSUBQ_N_F)) 673 1.1 mrg ] 674 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 675 1.1.1.2 mrg "vsub.f<V_sz_elem>\t%q0, %q1, %2" 676 1.1 mrg [(set_attr "type" "mve_move") 677 1.1 mrg ]) 678 1.1 mrg 679 1.1 mrg ;; 680 1.1 mrg ;; [vbrsrq_n_f]) 681 1.1 mrg ;; 682 1.1 mrg (define_insn "mve_vbrsrq_n_f<mode>" 683 1.1 mrg [ 684 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 685 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 686 1.1 mrg (match_operand:SI 2 "s_register_operand" "r")] 687 1.1 mrg VBRSRQ_N_F)) 688 1.1 mrg ] 689 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 690 1.1.1.2 mrg "vbrsr.<V_sz_elem>\t%q0, %q1, %2" 691 1.1 mrg [(set_attr "type" "mve_move") 692 1.1 mrg ]) 693 1.1 mrg 694 1.1 mrg ;; 695 1.1 mrg ;; [vcvtq_n_to_f_s, vcvtq_n_to_f_u]) 696 1.1 mrg ;; 697 1.1 mrg (define_insn "mve_vcvtq_n_to_f_<supf><mode>" 698 1.1 mrg [ 699 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 700 1.1 mrg (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w") 701 1.1 mrg (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")] 702 1.1 mrg VCVTQ_N_TO_F)) 703 1.1 mrg ] 704 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 705 1.1 mrg "vcvt.f<V_sz_elem>.<supf><V_sz_elem>\t%q0, %q1, %2" 706 1.1 mrg [(set_attr "type" "mve_move") 707 1.1 mrg ]) 708 1.1 mrg 709 1.1 mrg ;; [vcreateq_f]) 710 1.1 mrg ;; 711 1.1 mrg (define_insn "mve_vcreateq_f<mode>" 712 1.1 mrg [ 713 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 714 1.1 mrg (unspec:MVE_0 [(match_operand:DI 1 "s_register_operand" "r") 715 1.1 mrg (match_operand:DI 2 "s_register_operand" "r")] 716 1.1 mrg VCREATEQ_F)) 717 1.1 mrg ] 718 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 719 1.1.1.2 mrg "vmov %q0[2], %q0[0], %Q1, %Q2\;vmov %q0[3], %q0[1], %R1, %R2" 720 1.1 mrg [(set_attr "type" "mve_move") 721 1.1 mrg (set_attr "length""8")]) 722 1.1 mrg 723 1.1 mrg ;; 724 1.1 mrg ;; [vcreateq_u, vcreateq_s]) 725 1.1 mrg ;; 726 1.1 mrg (define_insn "mve_vcreateq_<supf><mode>" 727 1.1 mrg [ 728 1.1 mrg (set (match_operand:MVE_1 0 "s_register_operand" "=w") 729 1.1 mrg (unspec:MVE_1 [(match_operand:DI 1 "s_register_operand" "r") 730 1.1 mrg (match_operand:DI 2 "s_register_operand" "r")] 731 1.1 mrg VCREATEQ)) 732 1.1 mrg ] 733 1.1 mrg "TARGET_HAVE_MVE" 734 1.1.1.2 mrg "vmov %q0[2], %q0[0], %Q1, %Q2\;vmov %q0[3], %q0[1], %R1, %R2" 735 1.1 mrg [(set_attr "type" "mve_move") 736 1.1 mrg (set_attr "length""8")]) 737 1.1 mrg 738 1.1 mrg ;; 739 1.1 mrg ;; [vshrq_n_s, vshrq_n_u]) 740 1.1 mrg ;; 741 1.1.1.2 mrg ;; Version that takes an immediate as operand 2. 742 1.1 mrg (define_insn "mve_vshrq_n_<supf><mode>" 743 1.1 mrg [ 744 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 745 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 746 1.1 mrg (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")] 747 1.1 mrg VSHRQ_N)) 748 1.1 mrg ] 749 1.1 mrg "TARGET_HAVE_MVE" 750 1.1 mrg "vshr.<supf><V_sz_elem>\t%q0, %q1, %2" 751 1.1 mrg [(set_attr "type" "mve_move") 752 1.1 mrg ]) 753 1.1 mrg 754 1.1.1.2 mrg ;; Versions that take constant vectors as operand 2 (with all elements 755 1.1.1.2 mrg ;; equal). 756 1.1.1.2 mrg (define_insn "mve_vshrq_n_s<mode>_imm" 757 1.1.1.2 mrg [ 758 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 759 1.1.1.2 mrg (ashiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 760 1.1.1.2 mrg (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i"))) 761 1.1.1.2 mrg ] 762 1.1.1.2 mrg "TARGET_HAVE_MVE" 763 1.1.1.2 mrg { 764 1.1.1.2 mrg return neon_output_shift_immediate ("vshr", 's', &operands[2], 765 1.1.1.2 mrg <MODE>mode, 766 1.1.1.2 mrg VALID_NEON_QREG_MODE (<MODE>mode), 767 1.1.1.2 mrg true); 768 1.1.1.2 mrg } 769 1.1.1.2 mrg [(set_attr "type" "mve_move") 770 1.1.1.2 mrg ]) 771 1.1.1.2 mrg (define_insn "mve_vshrq_n_u<mode>_imm" 772 1.1.1.2 mrg [ 773 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 774 1.1.1.2 mrg (lshiftrt:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 775 1.1.1.2 mrg (match_operand:MVE_2 2 "imm_for_neon_rshift_operand" "i"))) 776 1.1.1.2 mrg ] 777 1.1.1.2 mrg "TARGET_HAVE_MVE" 778 1.1.1.2 mrg { 779 1.1.1.2 mrg return neon_output_shift_immediate ("vshr", 'u', &operands[2], 780 1.1.1.2 mrg <MODE>mode, 781 1.1.1.2 mrg VALID_NEON_QREG_MODE (<MODE>mode), 782 1.1.1.2 mrg true); 783 1.1.1.2 mrg } 784 1.1.1.2 mrg [(set_attr "type" "mve_move") 785 1.1.1.2 mrg ]) 786 1.1.1.2 mrg 787 1.1 mrg ;; 788 1.1 mrg ;; [vcvtq_n_from_f_s, vcvtq_n_from_f_u]) 789 1.1 mrg ;; 790 1.1 mrg (define_insn "mve_vcvtq_n_from_f_<supf><mode>" 791 1.1 mrg [ 792 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 793 1.1 mrg (unspec:MVE_5 [(match_operand:<MVE_CNVT> 1 "s_register_operand" "w") 794 1.1 mrg (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")] 795 1.1 mrg VCVTQ_N_FROM_F)) 796 1.1 mrg ] 797 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 798 1.1 mrg "vcvt.<supf><V_sz_elem>.f<V_sz_elem>\t%q0, %q1, %2" 799 1.1 mrg [(set_attr "type" "mve_move") 800 1.1 mrg ]) 801 1.1 mrg 802 1.1 mrg ;; 803 1.1 mrg ;; [vaddlvq_p_s]) 804 1.1 mrg ;; 805 1.1 mrg (define_insn "mve_vaddlvq_p_<supf>v4si" 806 1.1 mrg [ 807 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 808 1.1 mrg (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 809 1.1.1.2 mrg (match_operand:V4BI 2 "vpr_register_operand" "Up")] 810 1.1 mrg VADDLVQ_P)) 811 1.1 mrg ] 812 1.1 mrg "TARGET_HAVE_MVE" 813 1.1.1.2 mrg "vpst\;vaddlvt.<supf>32\t%Q0, %R0, %q1" 814 1.1 mrg [(set_attr "type" "mve_move") 815 1.1 mrg (set_attr "length""8")]) 816 1.1 mrg 817 1.1 mrg ;; 818 1.1.1.2 mrg ;; [vcmpneq_, vcmpcsq_, vcmpeqq_, vcmpgeq_, vcmpgtq_, vcmphiq_, vcmpleq_, vcmpltq_]) 819 1.1 mrg ;; 820 1.1.1.2 mrg (define_insn "@mve_vcmp<mve_cmp_op>q_<mode>" 821 1.1 mrg [ 822 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 823 1.1.1.2 mrg (MVE_COMPARISONS:<MVE_VPRED> (match_operand:MVE_2 1 "s_register_operand" "w") 824 1.1.1.2 mrg (match_operand:MVE_2 2 "s_register_operand" "w"))) 825 1.1 mrg ] 826 1.1 mrg "TARGET_HAVE_MVE" 827 1.1.1.2 mrg "vcmp.<mve_cmp_type>%#<V_sz_elem>\t<mve_cmp_op>, %q1, %q2" 828 1.1 mrg [(set_attr "type" "mve_move") 829 1.1 mrg ]) 830 1.1 mrg 831 1.1 mrg ;; 832 1.1.1.2 mrg ;; [vcmpcsq_n_, vcmpeqq_n_, vcmpgeq_n_, vcmpgtq_n_, vcmphiq_n_, vcmpleq_n_, vcmpltq_n_, vcmpneq_n_]) 833 1.1 mrg ;; 834 1.1.1.2 mrg (define_insn "mve_vcmp<mve_cmp_op>q_n_<mode>" 835 1.1 mrg [ 836 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 837 1.1.1.2 mrg (MVE_COMPARISONS:<MVE_VPRED> 838 1.1.1.2 mrg (match_operand:MVE_2 1 "s_register_operand" "w") 839 1.1.1.2 mrg (vec_duplicate:MVE_2 (match_operand:<V_elem> 2 "s_register_operand" "r")))) 840 1.1 mrg ] 841 1.1 mrg "TARGET_HAVE_MVE" 842 1.1.1.2 mrg "vcmp.<mve_cmp_type>%#<V_sz_elem> <mve_cmp_op>, %q1, %2" 843 1.1 mrg [(set_attr "type" "mve_move") 844 1.1 mrg ]) 845 1.1 mrg 846 1.1 mrg ;; 847 1.1.1.2 mrg ;; [vshlq_s, vshlq_u]) 848 1.1.1.2 mrg ;; See vec-common.md 849 1.1.1.2 mrg 850 1.1.1.2 mrg ;; 851 1.1 mrg ;; [vabdq_s, vabdq_u]) 852 1.1 mrg ;; 853 1.1 mrg (define_insn "mve_vabdq_<supf><mode>" 854 1.1 mrg [ 855 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 856 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 857 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 858 1.1 mrg VABDQ)) 859 1.1 mrg ] 860 1.1 mrg "TARGET_HAVE_MVE" 861 1.1 mrg "vabd.<supf>%#<V_sz_elem> %q0, %q1, %q2" 862 1.1 mrg [(set_attr "type" "mve_move") 863 1.1 mrg ]) 864 1.1 mrg 865 1.1 mrg ;; 866 1.1 mrg ;; [vaddq_n_s, vaddq_n_u]) 867 1.1 mrg ;; 868 1.1 mrg (define_insn "mve_vaddq_n_<supf><mode>" 869 1.1 mrg [ 870 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 871 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 872 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 873 1.1 mrg VADDQ_N)) 874 1.1 mrg ] 875 1.1 mrg "TARGET_HAVE_MVE" 876 1.1.1.2 mrg "vadd.i%#<V_sz_elem>\t%q0, %q1, %2" 877 1.1 mrg [(set_attr "type" "mve_move") 878 1.1 mrg ]) 879 1.1 mrg 880 1.1 mrg ;; 881 1.1 mrg ;; [vaddvaq_s, vaddvaq_u]) 882 1.1 mrg ;; 883 1.1 mrg (define_insn "mve_vaddvaq_<supf><mode>" 884 1.1 mrg [ 885 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 886 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 887 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 888 1.1 mrg VADDVAQ)) 889 1.1 mrg ] 890 1.1 mrg "TARGET_HAVE_MVE" 891 1.1.1.2 mrg "vaddva.<supf>%#<V_sz_elem>\t%0, %q2" 892 1.1 mrg [(set_attr "type" "mve_move") 893 1.1 mrg ]) 894 1.1 mrg 895 1.1 mrg ;; 896 1.1 mrg ;; [vaddvq_p_u, vaddvq_p_s]) 897 1.1 mrg ;; 898 1.1 mrg (define_insn "mve_vaddvq_p_<supf><mode>" 899 1.1 mrg [ 900 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 901 1.1 mrg (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 902 1.1.1.2 mrg (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up")] 903 1.1 mrg VADDVQ_P)) 904 1.1 mrg ] 905 1.1 mrg "TARGET_HAVE_MVE" 906 1.1 mrg "vpst\;vaddvt.<supf>%#<V_sz_elem> %0, %q1" 907 1.1 mrg [(set_attr "type" "mve_move") 908 1.1 mrg (set_attr "length""8")]) 909 1.1 mrg 910 1.1 mrg ;; 911 1.1 mrg ;; [vandq_u, vandq_s]) 912 1.1 mrg ;; 913 1.1.1.2 mrg ;; signed and unsigned versions are the same: define the unsigned 914 1.1.1.2 mrg ;; insn, and use an expander for the signed one as we still reference 915 1.1.1.2 mrg ;; both names from arm_mve.h. 916 1.1.1.2 mrg ;; We use the same code as in neon.md (TODO: avoid this duplication). 917 1.1.1.2 mrg (define_insn "mve_vandq_u<mode>" 918 1.1 mrg [ 919 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w,w") 920 1.1.1.2 mrg (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0") 921 1.1.1.2 mrg (match_operand:MVE_2 2 "neon_inv_logic_op2" "w,DL"))) 922 1.1 mrg ] 923 1.1 mrg "TARGET_HAVE_MVE" 924 1.1.1.2 mrg "@ 925 1.1.1.2 mrg vand\t%q0, %q1, %q2 926 1.1.1.2 mrg * return neon_output_logic_immediate (\"vand\", &operands[2], <MODE>mode, 1, VALID_NEON_QREG_MODE (<MODE>mode));" 927 1.1 mrg [(set_attr "type" "mve_move") 928 1.1 mrg ]) 929 1.1.1.2 mrg (define_expand "mve_vandq_s<mode>" 930 1.1.1.2 mrg [ 931 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand") 932 1.1.1.2 mrg (and:MVE_2 (match_operand:MVE_2 1 "s_register_operand") 933 1.1.1.2 mrg (match_operand:MVE_2 2 "neon_inv_logic_op2"))) 934 1.1.1.2 mrg ] 935 1.1.1.2 mrg "TARGET_HAVE_MVE" 936 1.1.1.2 mrg ) 937 1.1 mrg 938 1.1 mrg ;; 939 1.1 mrg ;; [vbicq_s, vbicq_u]) 940 1.1 mrg ;; 941 1.1.1.2 mrg (define_insn "mve_vbicq_u<mode>" 942 1.1 mrg [ 943 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 944 1.1.1.2 mrg (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w")) 945 1.1.1.2 mrg (match_operand:MVE_2 1 "s_register_operand" "w"))) 946 1.1 mrg ] 947 1.1 mrg "TARGET_HAVE_MVE" 948 1.1.1.2 mrg "vbic\t%q0, %q1, %q2" 949 1.1 mrg [(set_attr "type" "mve_move") 950 1.1 mrg ]) 951 1.1 mrg 952 1.1.1.2 mrg (define_expand "mve_vbicq_s<mode>" 953 1.1.1.2 mrg [ 954 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand") 955 1.1.1.2 mrg (and:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand")) 956 1.1.1.2 mrg (match_operand:MVE_2 1 "s_register_operand"))) 957 1.1.1.2 mrg ] 958 1.1.1.2 mrg "TARGET_HAVE_MVE" 959 1.1.1.2 mrg ) 960 1.1.1.2 mrg 961 1.1 mrg ;; 962 1.1 mrg ;; [vbrsrq_n_u, vbrsrq_n_s]) 963 1.1 mrg ;; 964 1.1 mrg (define_insn "mve_vbrsrq_n_<supf><mode>" 965 1.1 mrg [ 966 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 967 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 968 1.1 mrg (match_operand:SI 2 "s_register_operand" "r")] 969 1.1 mrg VBRSRQ_N)) 970 1.1 mrg ] 971 1.1 mrg "TARGET_HAVE_MVE" 972 1.1.1.2 mrg "vbrsr.%#<V_sz_elem>\t%q0, %q1, %2" 973 1.1 mrg [(set_attr "type" "mve_move") 974 1.1 mrg ]) 975 1.1 mrg 976 1.1 mrg ;; 977 1.1.1.2 mrg ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270]) 978 1.1 mrg ;; 979 1.1.1.2 mrg (define_insn "mve_vcaddq<mve_rot><mode>" 980 1.1 mrg [ 981 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 982 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 983 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 984 1.1.1.2 mrg VCADD)) 985 1.1 mrg ] 986 1.1 mrg "TARGET_HAVE_MVE" 987 1.1.1.2 mrg "vcadd.i%#<V_sz_elem> %q0, %q1, %q2, #<rot>" 988 1.1 mrg [(set_attr "type" "mve_move") 989 1.1 mrg ]) 990 1.1 mrg 991 1.1.1.2 mrg ;; Auto vectorizer pattern for int vcadd 992 1.1.1.2 mrg (define_expand "cadd<rot><mode>3" 993 1.1.1.2 mrg [(set (match_operand:MVE_2 0 "register_operand") 994 1.1.1.2 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "register_operand") 995 1.1.1.2 mrg (match_operand:MVE_2 2 "register_operand")] 996 1.1.1.2 mrg VCADD))] 997 1.1.1.2 mrg "TARGET_HAVE_MVE && !BYTES_BIG_ENDIAN" 998 1.1.1.2 mrg ) 999 1.1 mrg 1000 1.1 mrg ;; 1001 1.1.1.2 mrg ;; [veorq_u, veorq_s]) 1002 1.1 mrg ;; 1003 1.1.1.2 mrg (define_insn "mve_veorq_u<mode>" 1004 1.1 mrg [ 1005 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1006 1.1.1.2 mrg (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1007 1.1.1.2 mrg (match_operand:MVE_2 2 "s_register_operand" "w"))) 1008 1.1 mrg ] 1009 1.1 mrg "TARGET_HAVE_MVE" 1010 1.1.1.2 mrg "veor\t%q0, %q1, %q2" 1011 1.1 mrg [(set_attr "type" "mve_move") 1012 1.1 mrg ]) 1013 1.1.1.2 mrg (define_expand "mve_veorq_s<mode>" 1014 1.1 mrg [ 1015 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand") 1016 1.1.1.2 mrg (xor:MVE_2 (match_operand:MVE_2 1 "s_register_operand") 1017 1.1.1.2 mrg (match_operand:MVE_2 2 "s_register_operand"))) 1018 1.1 mrg ] 1019 1.1 mrg "TARGET_HAVE_MVE" 1020 1.1.1.2 mrg ) 1021 1.1 mrg 1022 1.1 mrg ;; 1023 1.1 mrg ;; [vhaddq_n_u, vhaddq_n_s]) 1024 1.1 mrg ;; 1025 1.1 mrg (define_insn "mve_vhaddq_n_<supf><mode>" 1026 1.1 mrg [ 1027 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1028 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1029 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 1030 1.1 mrg VHADDQ_N)) 1031 1.1 mrg ] 1032 1.1 mrg "TARGET_HAVE_MVE" 1033 1.1 mrg "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1034 1.1 mrg [(set_attr "type" "mve_move") 1035 1.1 mrg ]) 1036 1.1 mrg 1037 1.1 mrg ;; 1038 1.1 mrg ;; [vhaddq_s, vhaddq_u]) 1039 1.1 mrg ;; 1040 1.1.1.2 mrg (define_insn "@mve_vhaddq_<supf><mode>" 1041 1.1 mrg [ 1042 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1043 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1044 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1045 1.1 mrg VHADDQ)) 1046 1.1 mrg ] 1047 1.1 mrg "TARGET_HAVE_MVE" 1048 1.1 mrg "vhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1049 1.1 mrg [(set_attr "type" "mve_move") 1050 1.1 mrg ]) 1051 1.1 mrg 1052 1.1 mrg ;; 1053 1.1 mrg ;; [vhcaddq_rot270_s]) 1054 1.1 mrg ;; 1055 1.1 mrg (define_insn "mve_vhcaddq_rot270_s<mode>" 1056 1.1 mrg [ 1057 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 1058 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1059 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1060 1.1 mrg VHCADDQ_ROT270_S)) 1061 1.1 mrg ] 1062 1.1 mrg "TARGET_HAVE_MVE" 1063 1.1 mrg "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #270" 1064 1.1 mrg [(set_attr "type" "mve_move") 1065 1.1 mrg ]) 1066 1.1 mrg 1067 1.1 mrg ;; 1068 1.1 mrg ;; [vhcaddq_rot90_s]) 1069 1.1 mrg ;; 1070 1.1 mrg (define_insn "mve_vhcaddq_rot90_s<mode>" 1071 1.1 mrg [ 1072 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 1073 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1074 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1075 1.1 mrg VHCADDQ_ROT90_S)) 1076 1.1 mrg ] 1077 1.1 mrg "TARGET_HAVE_MVE" 1078 1.1 mrg "vhcadd.s%#<V_sz_elem>\t%q0, %q1, %q2, #90" 1079 1.1 mrg [(set_attr "type" "mve_move") 1080 1.1 mrg ]) 1081 1.1 mrg 1082 1.1 mrg ;; 1083 1.1 mrg ;; [vhsubq_n_u, vhsubq_n_s]) 1084 1.1 mrg ;; 1085 1.1 mrg (define_insn "mve_vhsubq_n_<supf><mode>" 1086 1.1 mrg [ 1087 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1088 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1089 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 1090 1.1 mrg VHSUBQ_N)) 1091 1.1 mrg ] 1092 1.1 mrg "TARGET_HAVE_MVE" 1093 1.1 mrg "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1094 1.1 mrg [(set_attr "type" "mve_move") 1095 1.1 mrg ]) 1096 1.1 mrg 1097 1.1 mrg ;; 1098 1.1 mrg ;; [vhsubq_s, vhsubq_u]) 1099 1.1 mrg ;; 1100 1.1 mrg (define_insn "mve_vhsubq_<supf><mode>" 1101 1.1 mrg [ 1102 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1103 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1104 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1105 1.1 mrg VHSUBQ)) 1106 1.1 mrg ] 1107 1.1 mrg "TARGET_HAVE_MVE" 1108 1.1 mrg "vhsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1109 1.1 mrg [(set_attr "type" "mve_move") 1110 1.1 mrg ]) 1111 1.1 mrg 1112 1.1 mrg ;; 1113 1.1 mrg ;; [vmaxaq_s]) 1114 1.1 mrg ;; 1115 1.1 mrg (define_insn "mve_vmaxaq_s<mode>" 1116 1.1 mrg [ 1117 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1118 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1119 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1120 1.1 mrg VMAXAQ_S)) 1121 1.1 mrg ] 1122 1.1 mrg "TARGET_HAVE_MVE" 1123 1.1 mrg "vmaxa.s%#<V_sz_elem> %q0, %q2" 1124 1.1 mrg [(set_attr "type" "mve_move") 1125 1.1 mrg ]) 1126 1.1 mrg 1127 1.1 mrg ;; 1128 1.1 mrg ;; [vmaxavq_s]) 1129 1.1 mrg ;; 1130 1.1 mrg (define_insn "mve_vmaxavq_s<mode>" 1131 1.1 mrg [ 1132 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 1133 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 1134 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1135 1.1 mrg VMAXAVQ_S)) 1136 1.1 mrg ] 1137 1.1 mrg "TARGET_HAVE_MVE" 1138 1.1 mrg "vmaxav.s%#<V_sz_elem>\t%0, %q2" 1139 1.1 mrg [(set_attr "type" "mve_move") 1140 1.1 mrg ]) 1141 1.1 mrg 1142 1.1 mrg ;; 1143 1.1 mrg ;; [vmaxq_u, vmaxq_s]) 1144 1.1 mrg ;; 1145 1.1.1.2 mrg (define_insn "mve_vmaxq_s<mode>" 1146 1.1 mrg [ 1147 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1148 1.1.1.2 mrg (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1149 1.1.1.2 mrg (match_operand:MVE_2 2 "s_register_operand" "w"))) 1150 1.1.1.2 mrg ] 1151 1.1.1.2 mrg "TARGET_HAVE_MVE" 1152 1.1.1.2 mrg "vmax.%#<V_s_elem>\t%q0, %q1, %q2" 1153 1.1.1.2 mrg [(set_attr "type" "mve_move") 1154 1.1.1.2 mrg ]) 1155 1.1.1.2 mrg 1156 1.1.1.2 mrg (define_insn "mve_vmaxq_u<mode>" 1157 1.1.1.2 mrg [ 1158 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1159 1.1.1.2 mrg (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1160 1.1.1.2 mrg (match_operand:MVE_2 2 "s_register_operand" "w"))) 1161 1.1 mrg ] 1162 1.1 mrg "TARGET_HAVE_MVE" 1163 1.1.1.2 mrg "vmax.%#<V_u_elem>\t%q0, %q1, %q2" 1164 1.1 mrg [(set_attr "type" "mve_move") 1165 1.1 mrg ]) 1166 1.1 mrg 1167 1.1 mrg ;; 1168 1.1 mrg ;; [vmaxvq_u, vmaxvq_s]) 1169 1.1 mrg ;; 1170 1.1 mrg (define_insn "mve_vmaxvq_<supf><mode>" 1171 1.1 mrg [ 1172 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 1173 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 1174 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1175 1.1 mrg VMAXVQ)) 1176 1.1 mrg ] 1177 1.1 mrg "TARGET_HAVE_MVE" 1178 1.1 mrg "vmaxv.<supf>%#<V_sz_elem>\t%0, %q2" 1179 1.1 mrg [(set_attr "type" "mve_move") 1180 1.1 mrg ]) 1181 1.1 mrg 1182 1.1 mrg ;; 1183 1.1 mrg ;; [vminaq_s]) 1184 1.1 mrg ;; 1185 1.1 mrg (define_insn "mve_vminaq_s<mode>" 1186 1.1 mrg [ 1187 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1188 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1189 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1190 1.1 mrg VMINAQ_S)) 1191 1.1 mrg ] 1192 1.1 mrg "TARGET_HAVE_MVE" 1193 1.1 mrg "vmina.s%#<V_sz_elem>\t%q0, %q2" 1194 1.1 mrg [(set_attr "type" "mve_move") 1195 1.1 mrg ]) 1196 1.1 mrg 1197 1.1 mrg ;; 1198 1.1 mrg ;; [vminavq_s]) 1199 1.1 mrg ;; 1200 1.1 mrg (define_insn "mve_vminavq_s<mode>" 1201 1.1 mrg [ 1202 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 1203 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 1204 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1205 1.1 mrg VMINAVQ_S)) 1206 1.1 mrg ] 1207 1.1 mrg "TARGET_HAVE_MVE" 1208 1.1 mrg "vminav.s%#<V_sz_elem>\t%0, %q2" 1209 1.1 mrg [(set_attr "type" "mve_move") 1210 1.1 mrg ]) 1211 1.1 mrg 1212 1.1 mrg ;; 1213 1.1 mrg ;; [vminq_s, vminq_u]) 1214 1.1 mrg ;; 1215 1.1.1.2 mrg (define_insn "mve_vminq_s<mode>" 1216 1.1 mrg [ 1217 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1218 1.1.1.2 mrg (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1219 1.1.1.2 mrg (match_operand:MVE_2 2 "s_register_operand" "w"))) 1220 1.1 mrg ] 1221 1.1 mrg "TARGET_HAVE_MVE" 1222 1.1.1.2 mrg "vmin.%#<V_s_elem>\t%q0, %q1, %q2" 1223 1.1.1.2 mrg [(set_attr "type" "mve_move") 1224 1.1.1.2 mrg ]) 1225 1.1.1.2 mrg 1226 1.1.1.2 mrg (define_insn "mve_vminq_u<mode>" 1227 1.1.1.2 mrg [ 1228 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1229 1.1.1.2 mrg (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1230 1.1.1.2 mrg (match_operand:MVE_2 2 "s_register_operand" "w"))) 1231 1.1.1.2 mrg ] 1232 1.1.1.2 mrg "TARGET_HAVE_MVE" 1233 1.1.1.2 mrg "vmin.%#<V_u_elem>\t%q0, %q1, %q2" 1234 1.1 mrg [(set_attr "type" "mve_move") 1235 1.1 mrg ]) 1236 1.1 mrg 1237 1.1 mrg ;; 1238 1.1 mrg ;; [vminvq_u, vminvq_s]) 1239 1.1 mrg ;; 1240 1.1 mrg (define_insn "mve_vminvq_<supf><mode>" 1241 1.1 mrg [ 1242 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 1243 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 1244 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1245 1.1 mrg VMINVQ)) 1246 1.1 mrg ] 1247 1.1 mrg "TARGET_HAVE_MVE" 1248 1.1 mrg "vminv.<supf>%#<V_sz_elem>\t%0, %q2" 1249 1.1 mrg [(set_attr "type" "mve_move") 1250 1.1 mrg ]) 1251 1.1 mrg 1252 1.1 mrg ;; 1253 1.1 mrg ;; [vmladavq_u, vmladavq_s]) 1254 1.1 mrg ;; 1255 1.1 mrg (define_insn "mve_vmladavq_<supf><mode>" 1256 1.1 mrg [ 1257 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 1258 1.1 mrg (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 1259 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1260 1.1 mrg VMLADAVQ)) 1261 1.1 mrg ] 1262 1.1 mrg "TARGET_HAVE_MVE" 1263 1.1 mrg "vmladav.<supf>%#<V_sz_elem>\t%0, %q1, %q2" 1264 1.1 mrg [(set_attr "type" "mve_move") 1265 1.1 mrg ]) 1266 1.1 mrg 1267 1.1 mrg ;; 1268 1.1 mrg ;; [vmladavxq_s]) 1269 1.1 mrg ;; 1270 1.1 mrg (define_insn "mve_vmladavxq_s<mode>" 1271 1.1 mrg [ 1272 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 1273 1.1 mrg (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 1274 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1275 1.1 mrg VMLADAVXQ_S)) 1276 1.1 mrg ] 1277 1.1 mrg "TARGET_HAVE_MVE" 1278 1.1 mrg "vmladavx.s%#<V_sz_elem>\t%0, %q1, %q2" 1279 1.1 mrg [(set_attr "type" "mve_move") 1280 1.1 mrg ]) 1281 1.1 mrg 1282 1.1 mrg ;; 1283 1.1 mrg ;; [vmlsdavq_s]) 1284 1.1 mrg ;; 1285 1.1 mrg (define_insn "mve_vmlsdavq_s<mode>" 1286 1.1 mrg [ 1287 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 1288 1.1 mrg (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 1289 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1290 1.1 mrg VMLSDAVQ_S)) 1291 1.1 mrg ] 1292 1.1 mrg "TARGET_HAVE_MVE" 1293 1.1 mrg "vmlsdav.s%#<V_sz_elem>\t%0, %q1, %q2" 1294 1.1 mrg [(set_attr "type" "mve_move") 1295 1.1 mrg ]) 1296 1.1 mrg 1297 1.1 mrg ;; 1298 1.1 mrg ;; [vmlsdavxq_s]) 1299 1.1 mrg ;; 1300 1.1 mrg (define_insn "mve_vmlsdavxq_s<mode>" 1301 1.1 mrg [ 1302 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 1303 1.1 mrg (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 1304 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1305 1.1 mrg VMLSDAVXQ_S)) 1306 1.1 mrg ] 1307 1.1 mrg "TARGET_HAVE_MVE" 1308 1.1 mrg "vmlsdavx.s%#<V_sz_elem>\t%0, %q1, %q2" 1309 1.1 mrg [(set_attr "type" "mve_move") 1310 1.1 mrg ]) 1311 1.1 mrg 1312 1.1 mrg ;; 1313 1.1 mrg ;; [vmulhq_s, vmulhq_u]) 1314 1.1 mrg ;; 1315 1.1 mrg (define_insn "mve_vmulhq_<supf><mode>" 1316 1.1 mrg [ 1317 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1318 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1319 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1320 1.1 mrg VMULHQ)) 1321 1.1 mrg ] 1322 1.1 mrg "TARGET_HAVE_MVE" 1323 1.1 mrg "vmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1324 1.1 mrg [(set_attr "type" "mve_move") 1325 1.1 mrg ]) 1326 1.1 mrg 1327 1.1 mrg ;; 1328 1.1 mrg ;; [vmullbq_int_u, vmullbq_int_s]) 1329 1.1 mrg ;; 1330 1.1 mrg (define_insn "mve_vmullbq_int_<supf><mode>" 1331 1.1 mrg [ 1332 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 1333 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w") 1334 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1335 1.1 mrg VMULLBQ_INT)) 1336 1.1 mrg ] 1337 1.1 mrg "TARGET_HAVE_MVE" 1338 1.1 mrg "vmullb.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1339 1.1 mrg [(set_attr "type" "mve_move") 1340 1.1 mrg ]) 1341 1.1 mrg 1342 1.1 mrg ;; 1343 1.1 mrg ;; [vmulltq_int_u, vmulltq_int_s]) 1344 1.1 mrg ;; 1345 1.1 mrg (define_insn "mve_vmulltq_int_<supf><mode>" 1346 1.1 mrg [ 1347 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 1348 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_2 1 "s_register_operand" "w") 1349 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1350 1.1 mrg VMULLTQ_INT)) 1351 1.1 mrg ] 1352 1.1 mrg "TARGET_HAVE_MVE" 1353 1.1 mrg "vmullt.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1354 1.1 mrg [(set_attr "type" "mve_move") 1355 1.1 mrg ]) 1356 1.1 mrg 1357 1.1 mrg ;; 1358 1.1 mrg ;; [vmulq_n_u, vmulq_n_s]) 1359 1.1 mrg ;; 1360 1.1 mrg (define_insn "mve_vmulq_n_<supf><mode>" 1361 1.1 mrg [ 1362 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1363 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1364 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 1365 1.1 mrg VMULQ_N)) 1366 1.1 mrg ] 1367 1.1 mrg "TARGET_HAVE_MVE" 1368 1.1 mrg "vmul.i%#<V_sz_elem>\t%q0, %q1, %2" 1369 1.1 mrg [(set_attr "type" "mve_move") 1370 1.1 mrg ]) 1371 1.1 mrg 1372 1.1 mrg ;; 1373 1.1 mrg ;; [vmulq_u, vmulq_s]) 1374 1.1 mrg ;; 1375 1.1 mrg (define_insn "mve_vmulq_<supf><mode>" 1376 1.1 mrg [ 1377 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1378 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1379 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1380 1.1 mrg VMULQ)) 1381 1.1 mrg ] 1382 1.1 mrg "TARGET_HAVE_MVE" 1383 1.1 mrg "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2" 1384 1.1 mrg [(set_attr "type" "mve_move") 1385 1.1 mrg ]) 1386 1.1 mrg 1387 1.1.1.2 mrg (define_insn "mve_vmulq<mode>" 1388 1.1.1.2 mrg [ 1389 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1390 1.1.1.2 mrg (mult:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1391 1.1.1.2 mrg (match_operand:MVE_2 2 "s_register_operand" "w"))) 1392 1.1.1.2 mrg ] 1393 1.1.1.2 mrg "TARGET_HAVE_MVE" 1394 1.1.1.2 mrg "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2" 1395 1.1.1.2 mrg [(set_attr "type" "mve_move") 1396 1.1.1.2 mrg ]) 1397 1.1.1.2 mrg 1398 1.1 mrg ;; 1399 1.1 mrg ;; [vornq_u, vornq_s]) 1400 1.1 mrg ;; 1401 1.1.1.2 mrg (define_insn "mve_vornq_s<mode>" 1402 1.1 mrg [ 1403 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1404 1.1.1.2 mrg (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand" "w")) 1405 1.1.1.2 mrg (match_operand:MVE_2 1 "s_register_operand" "w"))) 1406 1.1 mrg ] 1407 1.1 mrg "TARGET_HAVE_MVE" 1408 1.1.1.2 mrg "vorn\t%q0, %q1, %q2" 1409 1.1 mrg [(set_attr "type" "mve_move") 1410 1.1 mrg ]) 1411 1.1 mrg 1412 1.1.1.2 mrg (define_expand "mve_vornq_u<mode>" 1413 1.1.1.2 mrg [ 1414 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand") 1415 1.1.1.2 mrg (ior:MVE_2 (not:MVE_2 (match_operand:MVE_2 2 "s_register_operand")) 1416 1.1.1.2 mrg (match_operand:MVE_2 1 "s_register_operand"))) 1417 1.1.1.2 mrg ] 1418 1.1.1.2 mrg "TARGET_HAVE_MVE" 1419 1.1.1.2 mrg ) 1420 1.1.1.2 mrg 1421 1.1 mrg ;; 1422 1.1 mrg ;; [vorrq_s, vorrq_u]) 1423 1.1 mrg ;; 1424 1.1.1.2 mrg ;; signed and unsigned versions are the same: define the unsigned 1425 1.1.1.2 mrg ;; insn, and use an expander for the signed one as we still reference 1426 1.1.1.2 mrg ;; both names from arm_mve.h. 1427 1.1.1.2 mrg ;; We use the same code as in neon.md (TODO: avoid this duplication). 1428 1.1.1.2 mrg (define_insn "mve_vorrq_s<mode>" 1429 1.1 mrg [ 1430 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w,w") 1431 1.1.1.2 mrg (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w,0") 1432 1.1.1.2 mrg (match_operand:MVE_2 2 "neon_logic_op2" "w,Dl"))) 1433 1.1 mrg ] 1434 1.1 mrg "TARGET_HAVE_MVE" 1435 1.1.1.2 mrg "@ 1436 1.1.1.2 mrg vorr\t%q0, %q1, %q2 1437 1.1.1.2 mrg * return neon_output_logic_immediate (\"vorr\", &operands[2], <MODE>mode, 0, VALID_NEON_QREG_MODE (<MODE>mode));" 1438 1.1 mrg [(set_attr "type" "mve_move") 1439 1.1 mrg ]) 1440 1.1.1.2 mrg (define_expand "mve_vorrq_u<mode>" 1441 1.1.1.2 mrg [ 1442 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand") 1443 1.1.1.2 mrg (ior:MVE_2 (match_operand:MVE_2 1 "s_register_operand") 1444 1.1.1.2 mrg (match_operand:MVE_2 2 "neon_logic_op2"))) 1445 1.1.1.2 mrg ] 1446 1.1.1.2 mrg "TARGET_HAVE_MVE" 1447 1.1.1.2 mrg ) 1448 1.1 mrg 1449 1.1 mrg ;; 1450 1.1 mrg ;; [vqaddq_n_s, vqaddq_n_u]) 1451 1.1 mrg ;; 1452 1.1 mrg (define_insn "mve_vqaddq_n_<supf><mode>" 1453 1.1 mrg [ 1454 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1455 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1456 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 1457 1.1 mrg VQADDQ_N)) 1458 1.1 mrg ] 1459 1.1 mrg "TARGET_HAVE_MVE" 1460 1.1 mrg "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1461 1.1 mrg [(set_attr "type" "mve_move") 1462 1.1 mrg ]) 1463 1.1 mrg 1464 1.1 mrg ;; 1465 1.1 mrg ;; [vqaddq_u, vqaddq_s]) 1466 1.1 mrg ;; 1467 1.1 mrg (define_insn "mve_vqaddq_<supf><mode>" 1468 1.1 mrg [ 1469 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1470 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1471 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1472 1.1 mrg VQADDQ)) 1473 1.1 mrg ] 1474 1.1 mrg "TARGET_HAVE_MVE" 1475 1.1 mrg "vqadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1476 1.1 mrg [(set_attr "type" "mve_move") 1477 1.1 mrg ]) 1478 1.1 mrg 1479 1.1 mrg ;; 1480 1.1 mrg ;; [vqdmulhq_n_s]) 1481 1.1 mrg ;; 1482 1.1 mrg (define_insn "mve_vqdmulhq_n_s<mode>" 1483 1.1 mrg [ 1484 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1485 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1486 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 1487 1.1 mrg VQDMULHQ_N_S)) 1488 1.1 mrg ] 1489 1.1 mrg "TARGET_HAVE_MVE" 1490 1.1 mrg "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %2" 1491 1.1 mrg [(set_attr "type" "mve_move") 1492 1.1 mrg ]) 1493 1.1 mrg 1494 1.1 mrg ;; 1495 1.1 mrg ;; [vqdmulhq_s]) 1496 1.1 mrg ;; 1497 1.1 mrg (define_insn "mve_vqdmulhq_s<mode>" 1498 1.1 mrg [ 1499 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1500 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1501 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1502 1.1 mrg VQDMULHQ_S)) 1503 1.1 mrg ] 1504 1.1 mrg "TARGET_HAVE_MVE" 1505 1.1 mrg "vqdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2" 1506 1.1 mrg [(set_attr "type" "mve_move") 1507 1.1 mrg ]) 1508 1.1 mrg 1509 1.1 mrg ;; 1510 1.1 mrg ;; [vqrdmulhq_n_s]) 1511 1.1 mrg ;; 1512 1.1 mrg (define_insn "mve_vqrdmulhq_n_s<mode>" 1513 1.1 mrg [ 1514 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1515 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1516 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 1517 1.1 mrg VQRDMULHQ_N_S)) 1518 1.1 mrg ] 1519 1.1 mrg "TARGET_HAVE_MVE" 1520 1.1 mrg "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %2" 1521 1.1 mrg [(set_attr "type" "mve_move") 1522 1.1 mrg ]) 1523 1.1 mrg 1524 1.1 mrg ;; 1525 1.1 mrg ;; [vqrdmulhq_s]) 1526 1.1 mrg ;; 1527 1.1 mrg (define_insn "mve_vqrdmulhq_s<mode>" 1528 1.1 mrg [ 1529 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1530 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1531 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1532 1.1 mrg VQRDMULHQ_S)) 1533 1.1 mrg ] 1534 1.1 mrg "TARGET_HAVE_MVE" 1535 1.1 mrg "vqrdmulh.s%#<V_sz_elem>\t%q0, %q1, %q2" 1536 1.1 mrg [(set_attr "type" "mve_move") 1537 1.1 mrg ]) 1538 1.1 mrg 1539 1.1 mrg ;; 1540 1.1 mrg ;; [vqrshlq_n_s, vqrshlq_n_u]) 1541 1.1 mrg ;; 1542 1.1 mrg (define_insn "mve_vqrshlq_n_<supf><mode>" 1543 1.1 mrg [ 1544 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1545 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1546 1.1 mrg (match_operand:SI 2 "s_register_operand" "r")] 1547 1.1 mrg VQRSHLQ_N)) 1548 1.1 mrg ] 1549 1.1 mrg "TARGET_HAVE_MVE" 1550 1.1 mrg "vqrshl.<supf>%#<V_sz_elem>\t%q0, %2" 1551 1.1 mrg [(set_attr "type" "mve_move") 1552 1.1 mrg ]) 1553 1.1 mrg 1554 1.1 mrg ;; 1555 1.1 mrg ;; [vqrshlq_s, vqrshlq_u]) 1556 1.1 mrg ;; 1557 1.1 mrg (define_insn "mve_vqrshlq_<supf><mode>" 1558 1.1 mrg [ 1559 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1560 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1561 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1562 1.1 mrg VQRSHLQ)) 1563 1.1 mrg ] 1564 1.1 mrg "TARGET_HAVE_MVE" 1565 1.1 mrg "vqrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1566 1.1 mrg [(set_attr "type" "mve_move") 1567 1.1 mrg ]) 1568 1.1 mrg 1569 1.1 mrg ;; 1570 1.1 mrg ;; [vqshlq_n_s, vqshlq_n_u]) 1571 1.1 mrg ;; 1572 1.1 mrg (define_insn "mve_vqshlq_n_<supf><mode>" 1573 1.1 mrg [ 1574 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1575 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1576 1.1 mrg (match_operand:SI 2 "immediate_operand" "i")] 1577 1.1 mrg VQSHLQ_N)) 1578 1.1 mrg ] 1579 1.1 mrg "TARGET_HAVE_MVE" 1580 1.1 mrg "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1581 1.1 mrg [(set_attr "type" "mve_move") 1582 1.1 mrg ]) 1583 1.1 mrg 1584 1.1 mrg ;; 1585 1.1 mrg ;; [vqshlq_r_u, vqshlq_r_s]) 1586 1.1 mrg ;; 1587 1.1 mrg (define_insn "mve_vqshlq_r_<supf><mode>" 1588 1.1 mrg [ 1589 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1590 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1591 1.1 mrg (match_operand:SI 2 "s_register_operand" "r")] 1592 1.1 mrg VQSHLQ_R)) 1593 1.1 mrg ] 1594 1.1 mrg "TARGET_HAVE_MVE" 1595 1.1 mrg "vqshl.<supf>%#<V_sz_elem>\t%q0, %2" 1596 1.1 mrg [(set_attr "type" "mve_move") 1597 1.1 mrg ]) 1598 1.1 mrg 1599 1.1 mrg ;; 1600 1.1 mrg ;; [vqshlq_s, vqshlq_u]) 1601 1.1 mrg ;; 1602 1.1 mrg (define_insn "mve_vqshlq_<supf><mode>" 1603 1.1 mrg [ 1604 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1605 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1606 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1607 1.1 mrg VQSHLQ)) 1608 1.1 mrg ] 1609 1.1 mrg "TARGET_HAVE_MVE" 1610 1.1 mrg "vqshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1611 1.1 mrg [(set_attr "type" "mve_move") 1612 1.1 mrg ]) 1613 1.1 mrg 1614 1.1 mrg ;; 1615 1.1 mrg ;; [vqshluq_n_s]) 1616 1.1 mrg ;; 1617 1.1 mrg (define_insn "mve_vqshluq_n_s<mode>" 1618 1.1 mrg [ 1619 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1620 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1621 1.1.1.2 mrg (match_operand:SI 2 "<MVE_pred>" "<MVE_constraint>")] 1622 1.1 mrg VQSHLUQ_N_S)) 1623 1.1 mrg ] 1624 1.1 mrg "TARGET_HAVE_MVE" 1625 1.1 mrg "vqshlu.s%#<V_sz_elem>\t%q0, %q1, %2" 1626 1.1 mrg [(set_attr "type" "mve_move") 1627 1.1 mrg ]) 1628 1.1 mrg 1629 1.1 mrg ;; 1630 1.1 mrg ;; [vqsubq_n_s, vqsubq_n_u]) 1631 1.1 mrg ;; 1632 1.1 mrg (define_insn "mve_vqsubq_n_<supf><mode>" 1633 1.1 mrg [ 1634 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1635 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1636 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 1637 1.1 mrg VQSUBQ_N)) 1638 1.1 mrg ] 1639 1.1 mrg "TARGET_HAVE_MVE" 1640 1.1 mrg "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1641 1.1 mrg [(set_attr "type" "mve_move") 1642 1.1 mrg ]) 1643 1.1 mrg 1644 1.1 mrg ;; 1645 1.1 mrg ;; [vqsubq_u, vqsubq_s]) 1646 1.1 mrg ;; 1647 1.1 mrg (define_insn "mve_vqsubq_<supf><mode>" 1648 1.1 mrg [ 1649 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1650 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1651 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1652 1.1 mrg VQSUBQ)) 1653 1.1 mrg ] 1654 1.1 mrg "TARGET_HAVE_MVE" 1655 1.1 mrg "vqsub.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1656 1.1 mrg [(set_attr "type" "mve_move") 1657 1.1 mrg ]) 1658 1.1 mrg 1659 1.1 mrg ;; 1660 1.1 mrg ;; [vrhaddq_s, vrhaddq_u]) 1661 1.1 mrg ;; 1662 1.1.1.2 mrg (define_insn "@mve_vrhaddq_<supf><mode>" 1663 1.1 mrg [ 1664 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1665 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1666 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1667 1.1 mrg VRHADDQ)) 1668 1.1 mrg ] 1669 1.1 mrg "TARGET_HAVE_MVE" 1670 1.1 mrg "vrhadd.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1671 1.1 mrg [(set_attr "type" "mve_move") 1672 1.1 mrg ]) 1673 1.1 mrg 1674 1.1 mrg ;; 1675 1.1 mrg ;; [vrmulhq_s, vrmulhq_u]) 1676 1.1 mrg ;; 1677 1.1 mrg (define_insn "mve_vrmulhq_<supf><mode>" 1678 1.1 mrg [ 1679 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1680 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1681 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1682 1.1 mrg VRMULHQ)) 1683 1.1 mrg ] 1684 1.1 mrg "TARGET_HAVE_MVE" 1685 1.1 mrg "vrmulh.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1686 1.1 mrg [(set_attr "type" "mve_move") 1687 1.1 mrg ]) 1688 1.1 mrg 1689 1.1 mrg ;; 1690 1.1 mrg ;; [vrshlq_n_u, vrshlq_n_s]) 1691 1.1 mrg ;; 1692 1.1 mrg (define_insn "mve_vrshlq_n_<supf><mode>" 1693 1.1 mrg [ 1694 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1695 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1696 1.1 mrg (match_operand:SI 2 "s_register_operand" "r")] 1697 1.1 mrg VRSHLQ_N)) 1698 1.1 mrg ] 1699 1.1 mrg "TARGET_HAVE_MVE" 1700 1.1 mrg "vrshl.<supf>%#<V_sz_elem>\t%q0, %2" 1701 1.1 mrg [(set_attr "type" "mve_move") 1702 1.1 mrg ]) 1703 1.1 mrg 1704 1.1 mrg ;; 1705 1.1 mrg ;; [vrshlq_s, vrshlq_u]) 1706 1.1 mrg ;; 1707 1.1 mrg (define_insn "mve_vrshlq_<supf><mode>" 1708 1.1 mrg [ 1709 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1710 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1711 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1712 1.1 mrg VRSHLQ)) 1713 1.1 mrg ] 1714 1.1 mrg "TARGET_HAVE_MVE" 1715 1.1 mrg "vrshl.<supf>%#<V_sz_elem>\t%q0, %q1, %q2" 1716 1.1 mrg [(set_attr "type" "mve_move") 1717 1.1 mrg ]) 1718 1.1 mrg 1719 1.1 mrg ;; 1720 1.1 mrg ;; [vrshrq_n_s, vrshrq_n_u]) 1721 1.1 mrg ;; 1722 1.1 mrg (define_insn "mve_vrshrq_n_<supf><mode>" 1723 1.1 mrg [ 1724 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1725 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1726 1.1 mrg (match_operand:SI 2 "<MVE_pred2>" "<MVE_constraint2>")] 1727 1.1 mrg VRSHRQ_N)) 1728 1.1 mrg ] 1729 1.1 mrg "TARGET_HAVE_MVE" 1730 1.1 mrg "vrshr.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1731 1.1 mrg [(set_attr "type" "mve_move") 1732 1.1 mrg ]) 1733 1.1 mrg 1734 1.1 mrg ;; 1735 1.1 mrg ;; [vshlq_n_u, vshlq_n_s]) 1736 1.1 mrg ;; 1737 1.1 mrg (define_insn "mve_vshlq_n_<supf><mode>" 1738 1.1 mrg [ 1739 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1740 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1741 1.1 mrg (match_operand:SI 2 "immediate_operand" "i")] 1742 1.1 mrg VSHLQ_N)) 1743 1.1 mrg ] 1744 1.1 mrg "TARGET_HAVE_MVE" 1745 1.1 mrg "vshl.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 1746 1.1 mrg [(set_attr "type" "mve_move") 1747 1.1 mrg ]) 1748 1.1 mrg 1749 1.1 mrg ;; 1750 1.1 mrg ;; [vshlq_r_s, vshlq_r_u]) 1751 1.1 mrg ;; 1752 1.1 mrg (define_insn "mve_vshlq_r_<supf><mode>" 1753 1.1 mrg [ 1754 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1755 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 1756 1.1 mrg (match_operand:SI 2 "s_register_operand" "r")] 1757 1.1 mrg VSHLQ_R)) 1758 1.1 mrg ] 1759 1.1 mrg "TARGET_HAVE_MVE" 1760 1.1 mrg "vshl.<supf>%#<V_sz_elem>\t%q0, %2" 1761 1.1 mrg [(set_attr "type" "mve_move") 1762 1.1 mrg ]) 1763 1.1 mrg 1764 1.1 mrg ;; 1765 1.1 mrg ;; [vsubq_n_s, vsubq_n_u]) 1766 1.1 mrg ;; 1767 1.1 mrg (define_insn "mve_vsubq_n_<supf><mode>" 1768 1.1 mrg [ 1769 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1770 1.1.1.2 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1771 1.1.1.2 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 1772 1.1.1.2 mrg VSUBQ_N)) 1773 1.1 mrg ] 1774 1.1.1.2 mrg "TARGET_HAVE_MVE" 1775 1.1.1.2 mrg "vsub.i%#<V_sz_elem>\t%q0, %q1, %2" 1776 1.1 mrg [(set_attr "type" "mve_move") 1777 1.1 mrg ]) 1778 1.1 mrg 1779 1.1 mrg ;; 1780 1.1.1.2 mrg ;; [vsubq_s, vsubq_u]) 1781 1.1 mrg ;; 1782 1.1.1.2 mrg (define_insn "mve_vsubq_<supf><mode>" 1783 1.1 mrg [ 1784 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1785 1.1.1.2 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "w") 1786 1.1.1.2 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 1787 1.1.1.2 mrg VSUBQ)) 1788 1.1 mrg ] 1789 1.1.1.2 mrg "TARGET_HAVE_MVE" 1790 1.1.1.2 mrg "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2" 1791 1.1 mrg [(set_attr "type" "mve_move") 1792 1.1 mrg ]) 1793 1.1 mrg 1794 1.1.1.2 mrg (define_insn "mve_vsubq<mode>" 1795 1.1 mrg [ 1796 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 1797 1.1.1.2 mrg (minus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 1798 1.1.1.2 mrg (match_operand:MVE_2 2 "s_register_operand" "w"))) 1799 1.1 mrg ] 1800 1.1.1.2 mrg "TARGET_HAVE_MVE" 1801 1.1.1.2 mrg "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2" 1802 1.1 mrg [(set_attr "type" "mve_move") 1803 1.1 mrg ]) 1804 1.1 mrg 1805 1.1 mrg ;; 1806 1.1.1.2 mrg ;; [vabdq_f]) 1807 1.1 mrg ;; 1808 1.1.1.2 mrg (define_insn "mve_vabdq_f<mode>" 1809 1.1 mrg [ 1810 1.1.1.2 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 1811 1.1.1.2 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 1812 1.1.1.2 mrg (match_operand:MVE_0 2 "s_register_operand" "w")] 1813 1.1.1.2 mrg VABDQ_F)) 1814 1.1 mrg ] 1815 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1816 1.1.1.2 mrg "vabd.f%#<V_sz_elem> %q0, %q1, %q2" 1817 1.1 mrg [(set_attr "type" "mve_move") 1818 1.1 mrg ]) 1819 1.1 mrg 1820 1.1 mrg ;; 1821 1.1.1.2 mrg ;; [vaddlvaq_s vaddlvaq_u]) 1822 1.1 mrg ;; 1823 1.1.1.2 mrg (define_insn "mve_vaddlvaq_<supf>v4si" 1824 1.1 mrg [ 1825 1.1.1.2 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 1826 1.1.1.2 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 1827 1.1.1.2 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 1828 1.1.1.2 mrg VADDLVAQ)) 1829 1.1 mrg ] 1830 1.1.1.2 mrg "TARGET_HAVE_MVE" 1831 1.1.1.2 mrg "vaddlva.<supf>32\t%Q0, %R0, %q2" 1832 1.1 mrg [(set_attr "type" "mve_move") 1833 1.1 mrg ]) 1834 1.1 mrg 1835 1.1 mrg ;; 1836 1.1.1.2 mrg ;; [vaddq_n_f]) 1837 1.1 mrg ;; 1838 1.1.1.2 mrg (define_insn "mve_vaddq_n_f<mode>" 1839 1.1 mrg [ 1840 1.1.1.2 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 1841 1.1.1.2 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 1842 1.1.1.2 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 1843 1.1.1.2 mrg VADDQ_N_F)) 1844 1.1 mrg ] 1845 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1846 1.1.1.2 mrg "vadd.f%#<V_sz_elem>\t%q0, %q1, %2" 1847 1.1 mrg [(set_attr "type" "mve_move") 1848 1.1 mrg ]) 1849 1.1 mrg 1850 1.1 mrg ;; 1851 1.1.1.2 mrg ;; [vandq_f]) 1852 1.1 mrg ;; 1853 1.1.1.2 mrg (define_insn "mve_vandq_f<mode>" 1854 1.1 mrg [ 1855 1.1.1.2 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 1856 1.1.1.2 mrg (and:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 1857 1.1.1.2 mrg (match_operand:MVE_0 2 "s_register_operand" "w"))) 1858 1.1 mrg ] 1859 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1860 1.1.1.2 mrg "vand\t%q0, %q1, %q2" 1861 1.1 mrg [(set_attr "type" "mve_move") 1862 1.1 mrg ]) 1863 1.1 mrg 1864 1.1 mrg ;; 1865 1.1.1.2 mrg ;; [vbicq_f]) 1866 1.1 mrg ;; 1867 1.1.1.2 mrg (define_insn "mve_vbicq_f<mode>" 1868 1.1 mrg [ 1869 1.1.1.2 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 1870 1.1.1.2 mrg (and:MVE_0 (not:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w")) 1871 1.1.1.2 mrg (match_operand:MVE_0 2 "s_register_operand" "w"))) 1872 1.1 mrg ] 1873 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1874 1.1.1.2 mrg "vbic\t%q0, %q1, %q2" 1875 1.1 mrg [(set_attr "type" "mve_move") 1876 1.1 mrg ]) 1877 1.1 mrg 1878 1.1 mrg ;; 1879 1.1.1.2 mrg ;; [vbicq_n_s, vbicq_n_u]) 1880 1.1 mrg ;; 1881 1.1.1.2 mrg (define_insn "mve_vbicq_n_<supf><mode>" 1882 1.1 mrg [ 1883 1.1.1.2 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 1884 1.1.1.2 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 1885 1.1.1.2 mrg (match_operand:SI 2 "immediate_operand" "i")] 1886 1.1.1.2 mrg VBICQ_N)) 1887 1.1 mrg ] 1888 1.1.1.2 mrg "TARGET_HAVE_MVE" 1889 1.1.1.2 mrg "vbic.i%#<V_sz_elem>\t%q0, %2" 1890 1.1 mrg [(set_attr "type" "mve_move") 1891 1.1 mrg ]) 1892 1.1 mrg 1893 1.1 mrg ;; 1894 1.1.1.2 mrg ;; [vcaddq, vcaddq_rot90, vcadd_rot180, vcadd_rot270]) 1895 1.1 mrg ;; 1896 1.1.1.2 mrg (define_insn "mve_vcaddq<mve_rot><mode>" 1897 1.1 mrg [ 1898 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 1899 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 1900 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w")] 1901 1.1.1.2 mrg VCADD)) 1902 1.1 mrg ] 1903 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1904 1.1.1.2 mrg "vcadd.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>" 1905 1.1 mrg [(set_attr "type" "mve_move") 1906 1.1 mrg ]) 1907 1.1 mrg 1908 1.1 mrg ;; 1909 1.1.1.2 mrg ;; [vcmpeqq_f, vcmpgeq_f, vcmpgtq_f, vcmpleq_f, vcmpltq_f, vcmpneq_f]) 1910 1.1 mrg ;; 1911 1.1.1.2 mrg (define_insn "@mve_vcmp<mve_cmp_op>q_f<mode>" 1912 1.1 mrg [ 1913 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 1914 1.1.1.2 mrg (MVE_FP_COMPARISONS:<MVE_VPRED> (match_operand:MVE_0 1 "s_register_operand" "w") 1915 1.1.1.2 mrg (match_operand:MVE_0 2 "s_register_operand" "w"))) 1916 1.1 mrg ] 1917 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1918 1.1.1.2 mrg "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %q2" 1919 1.1 mrg [(set_attr "type" "mve_move") 1920 1.1 mrg ]) 1921 1.1 mrg 1922 1.1 mrg ;; 1923 1.1.1.2 mrg ;; [vcmpeqq_n_f, vcmpgeq_n_f, vcmpgtq_n_f, vcmpleq_n_f, vcmpltq_n_f, vcmpneq_n_f]) 1924 1.1 mrg ;; 1925 1.1.1.2 mrg (define_insn "@mve_vcmp<mve_cmp_op>q_n_f<mode>" 1926 1.1 mrg [ 1927 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 1928 1.1.1.2 mrg (MVE_FP_COMPARISONS:<MVE_VPRED> 1929 1.1.1.2 mrg (match_operand:MVE_0 1 "s_register_operand" "w") 1930 1.1.1.2 mrg (vec_duplicate:MVE_0 (match_operand:<V_elem> 2 "s_register_operand" "r")))) 1931 1.1 mrg ] 1932 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1933 1.1.1.2 mrg "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %2" 1934 1.1 mrg [(set_attr "type" "mve_move") 1935 1.1 mrg ]) 1936 1.1 mrg 1937 1.1 mrg ;; 1938 1.1.1.2 mrg ;; [vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270]) 1939 1.1 mrg ;; 1940 1.1.1.2 mrg (define_insn "mve_vcmulq<mve_rot><mode>" 1941 1.1 mrg [ 1942 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 1943 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 1944 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w")] 1945 1.1.1.2 mrg VCMUL)) 1946 1.1 mrg ] 1947 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1948 1.1.1.2 mrg "vcmul.f%#<V_sz_elem> %q0, %q1, %q2, #<rot>" 1949 1.1 mrg [(set_attr "type" "mve_move") 1950 1.1 mrg ]) 1951 1.1 mrg 1952 1.1 mrg ;; 1953 1.1 mrg ;; [vctp8q_m vctp16q_m vctp32q_m vctp64q_m]) 1954 1.1 mrg ;; 1955 1.1 mrg (define_insn "mve_vctp<mode1>q_mhi" 1956 1.1 mrg [ 1957 1.1 mrg (set (match_operand:HI 0 "vpr_register_operand" "=Up") 1958 1.1 mrg (unspec:HI [(match_operand:SI 1 "s_register_operand" "r") 1959 1.1 mrg (match_operand:HI 2 "vpr_register_operand" "Up")] 1960 1.1 mrg VCTPQ_M)) 1961 1.1 mrg ] 1962 1.1 mrg "TARGET_HAVE_MVE" 1963 1.1.1.2 mrg "vpst\;vctpt.<mode1>\t%1" 1964 1.1 mrg [(set_attr "type" "mve_move") 1965 1.1 mrg (set_attr "length""8")]) 1966 1.1 mrg 1967 1.1 mrg ;; 1968 1.1 mrg ;; [vcvtbq_f16_f32]) 1969 1.1 mrg ;; 1970 1.1 mrg (define_insn "mve_vcvtbq_f16_f32v8hf" 1971 1.1 mrg [ 1972 1.1 mrg (set (match_operand:V8HF 0 "s_register_operand" "=w") 1973 1.1 mrg (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0") 1974 1.1 mrg (match_operand:V4SF 2 "s_register_operand" "w")] 1975 1.1 mrg VCVTBQ_F16_F32)) 1976 1.1 mrg ] 1977 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1978 1.1.1.2 mrg "vcvtb.f16.f32\t%q0, %q2" 1979 1.1 mrg [(set_attr "type" "mve_move") 1980 1.1 mrg ]) 1981 1.1 mrg 1982 1.1 mrg ;; 1983 1.1 mrg ;; [vcvttq_f16_f32]) 1984 1.1 mrg ;; 1985 1.1 mrg (define_insn "mve_vcvttq_f16_f32v8hf" 1986 1.1 mrg [ 1987 1.1 mrg (set (match_operand:V8HF 0 "s_register_operand" "=w") 1988 1.1 mrg (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0") 1989 1.1 mrg (match_operand:V4SF 2 "s_register_operand" "w")] 1990 1.1 mrg VCVTTQ_F16_F32)) 1991 1.1 mrg ] 1992 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 1993 1.1.1.2 mrg "vcvtt.f16.f32\t%q0, %q2" 1994 1.1 mrg [(set_attr "type" "mve_move") 1995 1.1 mrg ]) 1996 1.1 mrg 1997 1.1 mrg ;; 1998 1.1 mrg ;; [veorq_f]) 1999 1.1 mrg ;; 2000 1.1 mrg (define_insn "mve_veorq_f<mode>" 2001 1.1 mrg [ 2002 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2003 1.1.1.2 mrg (xor:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2004 1.1.1.2 mrg (match_operand:MVE_0 2 "s_register_operand" "w"))) 2005 1.1 mrg ] 2006 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2007 1.1.1.2 mrg "veor\t%q0, %q1, %q2" 2008 1.1 mrg [(set_attr "type" "mve_move") 2009 1.1 mrg ]) 2010 1.1 mrg 2011 1.1 mrg ;; 2012 1.1 mrg ;; [vmaxnmaq_f]) 2013 1.1 mrg ;; 2014 1.1 mrg (define_insn "mve_vmaxnmaq_f<mode>" 2015 1.1 mrg [ 2016 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2017 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 2018 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w")] 2019 1.1 mrg VMAXNMAQ_F)) 2020 1.1 mrg ] 2021 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2022 1.1 mrg "vmaxnma.f%#<V_sz_elem> %q0, %q2" 2023 1.1 mrg [(set_attr "type" "mve_move") 2024 1.1 mrg ]) 2025 1.1 mrg 2026 1.1 mrg ;; 2027 1.1 mrg ;; [vmaxnmavq_f]) 2028 1.1 mrg ;; 2029 1.1 mrg (define_insn "mve_vmaxnmavq_f<mode>" 2030 1.1 mrg [ 2031 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 2032 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 2033 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w")] 2034 1.1 mrg VMAXNMAVQ_F)) 2035 1.1 mrg ] 2036 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2037 1.1 mrg "vmaxnmav.f%#<V_sz_elem> %0, %q2" 2038 1.1 mrg [(set_attr "type" "mve_move") 2039 1.1 mrg ]) 2040 1.1 mrg 2041 1.1 mrg ;; 2042 1.1 mrg ;; [vmaxnmq_f]) 2043 1.1 mrg ;; 2044 1.1 mrg (define_insn "mve_vmaxnmq_f<mode>" 2045 1.1 mrg [ 2046 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2047 1.1.1.2 mrg (smax:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2048 1.1.1.2 mrg (match_operand:MVE_0 2 "s_register_operand" "w"))) 2049 1.1 mrg ] 2050 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2051 1.1 mrg "vmaxnm.f%#<V_sz_elem> %q0, %q1, %q2" 2052 1.1 mrg [(set_attr "type" "mve_move") 2053 1.1 mrg ]) 2054 1.1 mrg 2055 1.1 mrg ;; 2056 1.1 mrg ;; [vmaxnmvq_f]) 2057 1.1 mrg ;; 2058 1.1 mrg (define_insn "mve_vmaxnmvq_f<mode>" 2059 1.1 mrg [ 2060 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 2061 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 2062 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w")] 2063 1.1 mrg VMAXNMVQ_F)) 2064 1.1 mrg ] 2065 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2066 1.1 mrg "vmaxnmv.f%#<V_sz_elem> %0, %q2" 2067 1.1 mrg [(set_attr "type" "mve_move") 2068 1.1 mrg ]) 2069 1.1 mrg 2070 1.1 mrg ;; 2071 1.1 mrg ;; [vminnmaq_f]) 2072 1.1 mrg ;; 2073 1.1 mrg (define_insn "mve_vminnmaq_f<mode>" 2074 1.1 mrg [ 2075 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2076 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 2077 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w")] 2078 1.1 mrg VMINNMAQ_F)) 2079 1.1 mrg ] 2080 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2081 1.1 mrg "vminnma.f%#<V_sz_elem> %q0, %q2" 2082 1.1 mrg [(set_attr "type" "mve_move") 2083 1.1 mrg ]) 2084 1.1 mrg 2085 1.1 mrg ;; 2086 1.1 mrg ;; [vminnmavq_f]) 2087 1.1 mrg ;; 2088 1.1 mrg (define_insn "mve_vminnmavq_f<mode>" 2089 1.1 mrg [ 2090 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 2091 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 2092 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w")] 2093 1.1 mrg VMINNMAVQ_F)) 2094 1.1 mrg ] 2095 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2096 1.1 mrg "vminnmav.f%#<V_sz_elem> %0, %q2" 2097 1.1 mrg [(set_attr "type" "mve_move") 2098 1.1 mrg ]) 2099 1.1 mrg 2100 1.1 mrg ;; 2101 1.1 mrg ;; [vminnmq_f]) 2102 1.1 mrg ;; 2103 1.1 mrg (define_insn "mve_vminnmq_f<mode>" 2104 1.1 mrg [ 2105 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2106 1.1.1.2 mrg (smin:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2107 1.1.1.2 mrg (match_operand:MVE_0 2 "s_register_operand" "w"))) 2108 1.1 mrg ] 2109 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2110 1.1 mrg "vminnm.f%#<V_sz_elem> %q0, %q1, %q2" 2111 1.1 mrg [(set_attr "type" "mve_move") 2112 1.1 mrg ]) 2113 1.1 mrg 2114 1.1 mrg ;; 2115 1.1 mrg ;; [vminnmvq_f]) 2116 1.1 mrg ;; 2117 1.1 mrg (define_insn "mve_vminnmvq_f<mode>" 2118 1.1 mrg [ 2119 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 2120 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 2121 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w")] 2122 1.1 mrg VMINNMVQ_F)) 2123 1.1 mrg ] 2124 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2125 1.1 mrg "vminnmv.f%#<V_sz_elem> %0, %q2" 2126 1.1 mrg [(set_attr "type" "mve_move") 2127 1.1 mrg ]) 2128 1.1 mrg 2129 1.1 mrg ;; 2130 1.1 mrg ;; [vmlaldavq_u, vmlaldavq_s]) 2131 1.1 mrg ;; 2132 1.1 mrg (define_insn "mve_vmlaldavq_<supf><mode>" 2133 1.1 mrg [ 2134 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 2135 1.1 mrg (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 2136 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2137 1.1 mrg VMLALDAVQ)) 2138 1.1 mrg ] 2139 1.1 mrg "TARGET_HAVE_MVE" 2140 1.1 mrg "vmlaldav.<supf>%#<V_sz_elem> %Q0, %R0, %q1, %q2" 2141 1.1 mrg [(set_attr "type" "mve_move") 2142 1.1 mrg ]) 2143 1.1 mrg 2144 1.1 mrg ;; 2145 1.1 mrg ;; [vmlaldavxq_s]) 2146 1.1 mrg ;; 2147 1.1 mrg (define_insn "mve_vmlaldavxq_s<mode>" 2148 1.1 mrg [ 2149 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 2150 1.1 mrg (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 2151 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2152 1.1 mrg VMLALDAVXQ_S)) 2153 1.1 mrg ] 2154 1.1 mrg "TARGET_HAVE_MVE" 2155 1.1.1.2 mrg "vmlaldavx.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 2156 1.1 mrg [(set_attr "type" "mve_move") 2157 1.1 mrg ]) 2158 1.1 mrg 2159 1.1 mrg ;; 2160 1.1 mrg ;; [vmlsldavq_s]) 2161 1.1 mrg ;; 2162 1.1 mrg (define_insn "mve_vmlsldavq_s<mode>" 2163 1.1 mrg [ 2164 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 2165 1.1 mrg (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 2166 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2167 1.1 mrg VMLSLDAVQ_S)) 2168 1.1 mrg ] 2169 1.1 mrg "TARGET_HAVE_MVE" 2170 1.1.1.2 mrg "vmlsldav.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 2171 1.1 mrg [(set_attr "type" "mve_move") 2172 1.1 mrg ]) 2173 1.1 mrg 2174 1.1 mrg ;; 2175 1.1 mrg ;; [vmlsldavxq_s]) 2176 1.1 mrg ;; 2177 1.1 mrg (define_insn "mve_vmlsldavxq_s<mode>" 2178 1.1 mrg [ 2179 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 2180 1.1 mrg (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 2181 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2182 1.1 mrg VMLSLDAVXQ_S)) 2183 1.1 mrg ] 2184 1.1 mrg "TARGET_HAVE_MVE" 2185 1.1.1.2 mrg "vmlsldavx.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 2186 1.1 mrg [(set_attr "type" "mve_move") 2187 1.1 mrg ]) 2188 1.1 mrg 2189 1.1 mrg ;; 2190 1.1 mrg ;; [vmovnbq_u, vmovnbq_s]) 2191 1.1 mrg ;; 2192 1.1 mrg (define_insn "mve_vmovnbq_<supf><mode>" 2193 1.1 mrg [ 2194 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2195 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2196 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2197 1.1 mrg VMOVNBQ)) 2198 1.1 mrg ] 2199 1.1 mrg "TARGET_HAVE_MVE" 2200 1.1 mrg "vmovnb.i%#<V_sz_elem> %q0, %q2" 2201 1.1 mrg [(set_attr "type" "mve_move") 2202 1.1 mrg ]) 2203 1.1 mrg 2204 1.1 mrg ;; 2205 1.1 mrg ;; [vmovntq_s, vmovntq_u]) 2206 1.1 mrg ;; 2207 1.1 mrg (define_insn "mve_vmovntq_<supf><mode>" 2208 1.1 mrg [ 2209 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2210 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2211 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2212 1.1 mrg VMOVNTQ)) 2213 1.1 mrg ] 2214 1.1 mrg "TARGET_HAVE_MVE" 2215 1.1 mrg "vmovnt.i%#<V_sz_elem> %q0, %q2" 2216 1.1 mrg [(set_attr "type" "mve_move") 2217 1.1 mrg ]) 2218 1.1 mrg 2219 1.1 mrg ;; 2220 1.1 mrg ;; [vmulq_f]) 2221 1.1 mrg ;; 2222 1.1 mrg (define_insn "mve_vmulq_f<mode>" 2223 1.1 mrg [ 2224 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2225 1.1.1.2 mrg (mult:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2226 1.1.1.2 mrg (match_operand:MVE_0 2 "s_register_operand" "w"))) 2227 1.1 mrg ] 2228 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2229 1.1 mrg "vmul.f%#<V_sz_elem> %q0, %q1, %q2" 2230 1.1 mrg [(set_attr "type" "mve_move") 2231 1.1 mrg ]) 2232 1.1 mrg 2233 1.1 mrg ;; 2234 1.1 mrg ;; [vmulq_n_f]) 2235 1.1 mrg ;; 2236 1.1 mrg (define_insn "mve_vmulq_n_f<mode>" 2237 1.1 mrg [ 2238 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2239 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 2240 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 2241 1.1 mrg VMULQ_N_F)) 2242 1.1 mrg ] 2243 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2244 1.1 mrg "vmul.f%#<V_sz_elem> %q0, %q1, %2" 2245 1.1 mrg [(set_attr "type" "mve_move") 2246 1.1 mrg ]) 2247 1.1 mrg 2248 1.1 mrg ;; 2249 1.1 mrg ;; [vornq_f]) 2250 1.1 mrg ;; 2251 1.1 mrg (define_insn "mve_vornq_f<mode>" 2252 1.1 mrg [ 2253 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2254 1.1.1.2 mrg (ior:MVE_0 (not:MVE_0 (match_operand:MVE_0 2 "s_register_operand" "w")) 2255 1.1.1.2 mrg (match_operand:MVE_0 1 "s_register_operand" "w"))) 2256 1.1 mrg ] 2257 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2258 1.1.1.2 mrg "vorn\t%q0, %q1, %q2" 2259 1.1 mrg [(set_attr "type" "mve_move") 2260 1.1 mrg ]) 2261 1.1 mrg 2262 1.1 mrg ;; 2263 1.1 mrg ;; [vorrq_f]) 2264 1.1 mrg ;; 2265 1.1 mrg (define_insn "mve_vorrq_f<mode>" 2266 1.1 mrg [ 2267 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2268 1.1.1.2 mrg (ior:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2269 1.1.1.2 mrg (match_operand:MVE_0 2 "s_register_operand" "w"))) 2270 1.1 mrg ] 2271 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2272 1.1.1.2 mrg "vorr\t%q0, %q1, %q2" 2273 1.1 mrg [(set_attr "type" "mve_move") 2274 1.1 mrg ]) 2275 1.1 mrg 2276 1.1 mrg ;; 2277 1.1 mrg ;; [vorrq_n_u, vorrq_n_s]) 2278 1.1 mrg ;; 2279 1.1 mrg (define_insn "mve_vorrq_n_<supf><mode>" 2280 1.1 mrg [ 2281 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 2282 1.1 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 2283 1.1 mrg (match_operand:SI 2 "immediate_operand" "i")] 2284 1.1 mrg VORRQ_N)) 2285 1.1 mrg ] 2286 1.1 mrg "TARGET_HAVE_MVE" 2287 1.1 mrg "vorr.i%#<V_sz_elem> %q0, %2" 2288 1.1 mrg [(set_attr "type" "mve_move") 2289 1.1 mrg ]) 2290 1.1 mrg 2291 1.1 mrg ;; 2292 1.1 mrg ;; [vqdmullbq_n_s]) 2293 1.1 mrg ;; 2294 1.1 mrg (define_insn "mve_vqdmullbq_n_s<mode>" 2295 1.1 mrg [ 2296 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 2297 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w") 2298 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 2299 1.1 mrg VQDMULLBQ_N_S)) 2300 1.1 mrg ] 2301 1.1 mrg "TARGET_HAVE_MVE" 2302 1.1 mrg "vqdmullb.s%#<V_sz_elem> %q0, %q1, %2" 2303 1.1 mrg [(set_attr "type" "mve_move") 2304 1.1 mrg ]) 2305 1.1 mrg 2306 1.1 mrg ;; 2307 1.1 mrg ;; [vqdmullbq_s]) 2308 1.1 mrg ;; 2309 1.1 mrg (define_insn "mve_vqdmullbq_s<mode>" 2310 1.1 mrg [ 2311 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 2312 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w") 2313 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2314 1.1 mrg VQDMULLBQ_S)) 2315 1.1 mrg ] 2316 1.1 mrg "TARGET_HAVE_MVE" 2317 1.1 mrg "vqdmullb.s%#<V_sz_elem> %q0, %q1, %q2" 2318 1.1 mrg [(set_attr "type" "mve_move") 2319 1.1 mrg ]) 2320 1.1 mrg 2321 1.1 mrg ;; 2322 1.1 mrg ;; [vqdmulltq_n_s]) 2323 1.1 mrg ;; 2324 1.1 mrg (define_insn "mve_vqdmulltq_n_s<mode>" 2325 1.1 mrg [ 2326 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 2327 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w") 2328 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r")] 2329 1.1 mrg VQDMULLTQ_N_S)) 2330 1.1 mrg ] 2331 1.1 mrg "TARGET_HAVE_MVE" 2332 1.1 mrg "vqdmullt.s%#<V_sz_elem> %q0, %q1, %2" 2333 1.1 mrg [(set_attr "type" "mve_move") 2334 1.1 mrg ]) 2335 1.1 mrg 2336 1.1 mrg ;; 2337 1.1 mrg ;; [vqdmulltq_s]) 2338 1.1 mrg ;; 2339 1.1 mrg (define_insn "mve_vqdmulltq_s<mode>" 2340 1.1 mrg [ 2341 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 2342 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_5 1 "s_register_operand" "w") 2343 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2344 1.1 mrg VQDMULLTQ_S)) 2345 1.1 mrg ] 2346 1.1 mrg "TARGET_HAVE_MVE" 2347 1.1 mrg "vqdmullt.s%#<V_sz_elem> %q0, %q1, %q2" 2348 1.1 mrg [(set_attr "type" "mve_move") 2349 1.1 mrg ]) 2350 1.1 mrg 2351 1.1 mrg ;; 2352 1.1 mrg ;; [vqmovnbq_u, vqmovnbq_s]) 2353 1.1 mrg ;; 2354 1.1 mrg (define_insn "mve_vqmovnbq_<supf><mode>" 2355 1.1 mrg [ 2356 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2357 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2358 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2359 1.1 mrg VQMOVNBQ)) 2360 1.1 mrg ] 2361 1.1 mrg "TARGET_HAVE_MVE" 2362 1.1 mrg "vqmovnb.<supf>%#<V_sz_elem> %q0, %q2" 2363 1.1 mrg [(set_attr "type" "mve_move") 2364 1.1 mrg ]) 2365 1.1 mrg 2366 1.1 mrg ;; 2367 1.1 mrg ;; [vqmovntq_u, vqmovntq_s]) 2368 1.1 mrg ;; 2369 1.1 mrg (define_insn "mve_vqmovntq_<supf><mode>" 2370 1.1 mrg [ 2371 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2372 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2373 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2374 1.1 mrg VQMOVNTQ)) 2375 1.1 mrg ] 2376 1.1 mrg "TARGET_HAVE_MVE" 2377 1.1 mrg "vqmovnt.<supf>%#<V_sz_elem> %q0, %q2" 2378 1.1 mrg [(set_attr "type" "mve_move") 2379 1.1 mrg ]) 2380 1.1 mrg 2381 1.1 mrg ;; 2382 1.1 mrg ;; [vqmovunbq_s]) 2383 1.1 mrg ;; 2384 1.1 mrg (define_insn "mve_vqmovunbq_s<mode>" 2385 1.1 mrg [ 2386 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2387 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2388 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2389 1.1 mrg VQMOVUNBQ_S)) 2390 1.1 mrg ] 2391 1.1 mrg "TARGET_HAVE_MVE" 2392 1.1 mrg "vqmovunb.s%#<V_sz_elem> %q0, %q2" 2393 1.1 mrg [(set_attr "type" "mve_move") 2394 1.1 mrg ]) 2395 1.1 mrg 2396 1.1 mrg ;; 2397 1.1 mrg ;; [vqmovuntq_s]) 2398 1.1 mrg ;; 2399 1.1 mrg (define_insn "mve_vqmovuntq_s<mode>" 2400 1.1 mrg [ 2401 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2402 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2403 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w")] 2404 1.1 mrg VQMOVUNTQ_S)) 2405 1.1 mrg ] 2406 1.1 mrg "TARGET_HAVE_MVE" 2407 1.1 mrg "vqmovunt.s%#<V_sz_elem> %q0, %q2" 2408 1.1 mrg [(set_attr "type" "mve_move") 2409 1.1 mrg ]) 2410 1.1 mrg 2411 1.1 mrg ;; 2412 1.1 mrg ;; [vrmlaldavhxq_s]) 2413 1.1 mrg ;; 2414 1.1 mrg (define_insn "mve_vrmlaldavhxq_sv4si" 2415 1.1 mrg [ 2416 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 2417 1.1 mrg (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 2418 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 2419 1.1 mrg VRMLALDAVHXQ_S)) 2420 1.1 mrg ] 2421 1.1 mrg "TARGET_HAVE_MVE" 2422 1.1.1.2 mrg "vrmlaldavhx.s32\t%Q0, %R0, %q1, %q2" 2423 1.1 mrg [(set_attr "type" "mve_move") 2424 1.1 mrg ]) 2425 1.1 mrg 2426 1.1 mrg ;; 2427 1.1 mrg ;; [vrmlsldavhq_s]) 2428 1.1 mrg ;; 2429 1.1 mrg (define_insn "mve_vrmlsldavhq_sv4si" 2430 1.1 mrg [ 2431 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 2432 1.1 mrg (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 2433 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 2434 1.1 mrg VRMLSLDAVHQ_S)) 2435 1.1 mrg ] 2436 1.1 mrg "TARGET_HAVE_MVE" 2437 1.1 mrg "vrmlsldavh.s32\t%Q0, %R0, %q1, %q2" 2438 1.1 mrg [(set_attr "type" "mve_move") 2439 1.1 mrg ]) 2440 1.1 mrg 2441 1.1 mrg ;; 2442 1.1 mrg ;; [vrmlsldavhxq_s]) 2443 1.1 mrg ;; 2444 1.1 mrg (define_insn "mve_vrmlsldavhxq_sv4si" 2445 1.1 mrg [ 2446 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 2447 1.1 mrg (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 2448 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 2449 1.1 mrg VRMLSLDAVHXQ_S)) 2450 1.1 mrg ] 2451 1.1 mrg "TARGET_HAVE_MVE" 2452 1.1 mrg "vrmlsldavhx.s32\t%Q0, %R0, %q1, %q2" 2453 1.1 mrg [(set_attr "type" "mve_move") 2454 1.1 mrg ]) 2455 1.1 mrg 2456 1.1 mrg ;; 2457 1.1 mrg ;; [vshllbq_n_s, vshllbq_n_u]) 2458 1.1 mrg ;; 2459 1.1 mrg (define_insn "mve_vshllbq_n_<supf><mode>" 2460 1.1 mrg [ 2461 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 2462 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w") 2463 1.1 mrg (match_operand:SI 2 "immediate_operand" "i")] 2464 1.1 mrg VSHLLBQ_N)) 2465 1.1 mrg ] 2466 1.1 mrg "TARGET_HAVE_MVE" 2467 1.1 mrg "vshllb.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 2468 1.1 mrg [(set_attr "type" "mve_move") 2469 1.1 mrg ]) 2470 1.1 mrg 2471 1.1 mrg ;; 2472 1.1 mrg ;; [vshlltq_n_u, vshlltq_n_s]) 2473 1.1 mrg ;; 2474 1.1 mrg (define_insn "mve_vshlltq_n_<supf><mode>" 2475 1.1 mrg [ 2476 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 2477 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w") 2478 1.1 mrg (match_operand:SI 2 "immediate_operand" "i")] 2479 1.1 mrg VSHLLTQ_N)) 2480 1.1 mrg ] 2481 1.1 mrg "TARGET_HAVE_MVE" 2482 1.1 mrg "vshllt.<supf>%#<V_sz_elem>\t%q0, %q1, %2" 2483 1.1 mrg [(set_attr "type" "mve_move") 2484 1.1 mrg ]) 2485 1.1 mrg 2486 1.1 mrg ;; 2487 1.1 mrg ;; [vsubq_f]) 2488 1.1 mrg ;; 2489 1.1 mrg (define_insn "mve_vsubq_f<mode>" 2490 1.1 mrg [ 2491 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2492 1.1.1.2 mrg (minus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 2493 1.1.1.2 mrg (match_operand:MVE_0 2 "s_register_operand" "w"))) 2494 1.1 mrg ] 2495 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2496 1.1 mrg "vsub.f%#<V_sz_elem>\t%q0, %q1, %q2" 2497 1.1 mrg [(set_attr "type" "mve_move") 2498 1.1 mrg ]) 2499 1.1 mrg 2500 1.1 mrg ;; 2501 1.1 mrg ;; [vmulltq_poly_p]) 2502 1.1 mrg ;; 2503 1.1 mrg (define_insn "mve_vmulltq_poly_p<mode>" 2504 1.1 mrg [ 2505 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 2506 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w") 2507 1.1 mrg (match_operand:MVE_3 2 "s_register_operand" "w")] 2508 1.1 mrg VMULLTQ_POLY_P)) 2509 1.1 mrg ] 2510 1.1 mrg "TARGET_HAVE_MVE" 2511 1.1 mrg "vmullt.p%#<V_sz_elem>\t%q0, %q1, %q2" 2512 1.1 mrg [(set_attr "type" "mve_move") 2513 1.1 mrg ]) 2514 1.1 mrg 2515 1.1 mrg ;; 2516 1.1 mrg ;; [vmullbq_poly_p]) 2517 1.1 mrg ;; 2518 1.1 mrg (define_insn "mve_vmullbq_poly_p<mode>" 2519 1.1 mrg [ 2520 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 2521 1.1 mrg (unspec:<V_double_width> [(match_operand:MVE_3 1 "s_register_operand" "w") 2522 1.1 mrg (match_operand:MVE_3 2 "s_register_operand" "w")] 2523 1.1 mrg VMULLBQ_POLY_P)) 2524 1.1 mrg ] 2525 1.1 mrg "TARGET_HAVE_MVE" 2526 1.1 mrg "vmullb.p%#<V_sz_elem>\t%q0, %q1, %q2" 2527 1.1 mrg [(set_attr "type" "mve_move") 2528 1.1 mrg ]) 2529 1.1 mrg 2530 1.1 mrg ;; 2531 1.1 mrg ;; [vrmlaldavhq_u vrmlaldavhq_s]) 2532 1.1 mrg ;; 2533 1.1 mrg (define_insn "mve_vrmlaldavhq_<supf>v4si" 2534 1.1 mrg [ 2535 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 2536 1.1 mrg (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 2537 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 2538 1.1 mrg VRMLALDAVHQ)) 2539 1.1 mrg ] 2540 1.1 mrg "TARGET_HAVE_MVE" 2541 1.1.1.2 mrg "vrmlaldavh.<supf>32\t%Q0, %R0, %q1, %q2" 2542 1.1 mrg [(set_attr "type" "mve_move") 2543 1.1 mrg ]) 2544 1.1 mrg 2545 1.1 mrg ;; 2546 1.1 mrg ;; [vbicq_m_n_s, vbicq_m_n_u]) 2547 1.1 mrg ;; 2548 1.1 mrg (define_insn "mve_vbicq_m_n_<supf><mode>" 2549 1.1 mrg [ 2550 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 2551 1.1 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 2552 1.1 mrg (match_operand:SI 2 "immediate_operand" "i") 2553 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2554 1.1 mrg VBICQ_M_N)) 2555 1.1 mrg ] 2556 1.1 mrg "TARGET_HAVE_MVE" 2557 1.1.1.2 mrg "vpst\;vbict.i%#<V_sz_elem>\t%q0, %2" 2558 1.1 mrg [(set_attr "type" "mve_move") 2559 1.1 mrg (set_attr "length""8")]) 2560 1.1 mrg ;; 2561 1.1 mrg ;; [vcmpeqq_m_f]) 2562 1.1 mrg ;; 2563 1.1 mrg (define_insn "mve_vcmpeqq_m_f<mode>" 2564 1.1 mrg [ 2565 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2566 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 2567 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 2568 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2569 1.1 mrg VCMPEQQ_M_F)) 2570 1.1 mrg ] 2571 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2572 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %q2" 2573 1.1 mrg [(set_attr "type" "mve_move") 2574 1.1 mrg (set_attr "length""8")]) 2575 1.1 mrg ;; 2576 1.1 mrg ;; [vcvtaq_m_u, vcvtaq_m_s]) 2577 1.1 mrg ;; 2578 1.1 mrg (define_insn "mve_vcvtaq_m_<supf><mode>" 2579 1.1 mrg [ 2580 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 2581 1.1 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 2582 1.1 mrg (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 2583 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2584 1.1 mrg VCVTAQ_M)) 2585 1.1 mrg ] 2586 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2587 1.1 mrg "vpst\;vcvtat.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2" 2588 1.1 mrg [(set_attr "type" "mve_move") 2589 1.1 mrg (set_attr "length""8")]) 2590 1.1 mrg ;; 2591 1.1 mrg ;; [vcvtq_m_to_f_s, vcvtq_m_to_f_u]) 2592 1.1 mrg ;; 2593 1.1 mrg (define_insn "mve_vcvtq_m_to_f_<supf><mode>" 2594 1.1 mrg [ 2595 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 2596 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 2597 1.1 mrg (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 2598 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2599 1.1 mrg VCVTQ_M_TO_F)) 2600 1.1 mrg ] 2601 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 2602 1.1.1.2 mrg "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2" 2603 1.1 mrg [(set_attr "type" "mve_move") 2604 1.1 mrg (set_attr "length""8")]) 2605 1.1 mrg ;; 2606 1.1 mrg ;; [vqrshrnbq_n_u, vqrshrnbq_n_s]) 2607 1.1 mrg ;; 2608 1.1 mrg (define_insn "mve_vqrshrnbq_n_<supf><mode>" 2609 1.1 mrg [ 2610 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2611 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2612 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 2613 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 2614 1.1 mrg VQRSHRNBQ_N)) 2615 1.1 mrg ] 2616 1.1 mrg "TARGET_HAVE_MVE" 2617 1.1 mrg "vqrshrnb.<supf>%#<V_sz_elem> %q0, %q2, %3" 2618 1.1 mrg [(set_attr "type" "mve_move") 2619 1.1 mrg ]) 2620 1.1 mrg ;; 2621 1.1 mrg ;; [vqrshrunbq_n_s]) 2622 1.1 mrg ;; 2623 1.1 mrg (define_insn "mve_vqrshrunbq_n_s<mode>" 2624 1.1 mrg [ 2625 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 2626 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 2627 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 2628 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 2629 1.1 mrg VQRSHRUNBQ_N_S)) 2630 1.1 mrg ] 2631 1.1 mrg "TARGET_HAVE_MVE" 2632 1.1 mrg "vqrshrunb.s%#<V_sz_elem>\t%q0, %q2, %3" 2633 1.1 mrg [(set_attr "type" "mve_move") 2634 1.1 mrg ]) 2635 1.1 mrg ;; 2636 1.1 mrg ;; [vrmlaldavhaq_s vrmlaldavhaq_u]) 2637 1.1 mrg ;; 2638 1.1 mrg (define_insn "mve_vrmlaldavhaq_<supf>v4si" 2639 1.1 mrg [ 2640 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 2641 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 2642 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 2643 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w")] 2644 1.1 mrg VRMLALDAVHAQ)) 2645 1.1 mrg ] 2646 1.1 mrg "TARGET_HAVE_MVE" 2647 1.1.1.2 mrg "vrmlaldavha.<supf>32\t%Q0, %R0, %q2, %q3" 2648 1.1 mrg [(set_attr "type" "mve_move") 2649 1.1 mrg ]) 2650 1.1 mrg 2651 1.1 mrg ;; 2652 1.1 mrg ;; [vabavq_s, vabavq_u]) 2653 1.1 mrg ;; 2654 1.1 mrg (define_insn "mve_vabavq_<supf><mode>" 2655 1.1 mrg [ 2656 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=r") 2657 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 2658 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2659 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 2660 1.1 mrg VABAVQ)) 2661 1.1 mrg ] 2662 1.1 mrg "TARGET_HAVE_MVE" 2663 1.1 mrg "vabav.<supf>%#<V_sz_elem>\t%0, %q2, %q3" 2664 1.1 mrg [(set_attr "type" "mve_move") 2665 1.1 mrg ]) 2666 1.1 mrg 2667 1.1 mrg ;; 2668 1.1 mrg ;; [vshlcq_u vshlcq_s] 2669 1.1 mrg ;; 2670 1.1 mrg (define_expand "mve_vshlcq_vec_<supf><mode>" 2671 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 2672 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 2673 1.1 mrg (match_operand:SI 2 "s_register_operand") 2674 1.1 mrg (match_operand:SI 3 "mve_imm_32") 2675 1.1 mrg (unspec:MVE_2 [(const_int 0)] VSHLCQ)] 2676 1.1 mrg "TARGET_HAVE_MVE" 2677 1.1 mrg { 2678 1.1 mrg rtx ignore_wb = gen_reg_rtx (SImode); 2679 1.1 mrg emit_insn(gen_mve_vshlcq_<supf><mode>(operands[0], ignore_wb, operands[1], 2680 1.1 mrg operands[2], operands[3])); 2681 1.1 mrg DONE; 2682 1.1 mrg }) 2683 1.1 mrg 2684 1.1 mrg (define_expand "mve_vshlcq_carry_<supf><mode>" 2685 1.1 mrg [(match_operand:SI 0 "s_register_operand") 2686 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 2687 1.1 mrg (match_operand:SI 2 "s_register_operand") 2688 1.1 mrg (match_operand:SI 3 "mve_imm_32") 2689 1.1 mrg (unspec:MVE_2 [(const_int 0)] VSHLCQ)] 2690 1.1 mrg "TARGET_HAVE_MVE" 2691 1.1 mrg { 2692 1.1 mrg rtx ignore_vec = gen_reg_rtx (<MODE>mode); 2693 1.1 mrg emit_insn(gen_mve_vshlcq_<supf><mode>(ignore_vec, operands[0], operands[1], 2694 1.1 mrg operands[2], operands[3])); 2695 1.1 mrg DONE; 2696 1.1 mrg }) 2697 1.1 mrg 2698 1.1 mrg (define_insn "mve_vshlcq_<supf><mode>" 2699 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 2700 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0") 2701 1.1 mrg (match_operand:SI 3 "s_register_operand" "1") 2702 1.1 mrg (match_operand:SI 4 "mve_imm_32" "Rf")] 2703 1.1 mrg VSHLCQ)) 2704 1.1 mrg (set (match_operand:SI 1 "s_register_operand" "=r") 2705 1.1 mrg (unspec:SI [(match_dup 2) 2706 1.1 mrg (match_dup 3) 2707 1.1 mrg (match_dup 4)] 2708 1.1 mrg VSHLCQ))] 2709 1.1 mrg "TARGET_HAVE_MVE" 2710 1.1.1.2 mrg "vshlc\t%q0, %1, %4") 2711 1.1 mrg 2712 1.1 mrg ;; 2713 1.1 mrg ;; [vabsq_m_s]) 2714 1.1 mrg ;; 2715 1.1 mrg (define_insn "mve_vabsq_m_s<mode>" 2716 1.1 mrg [ 2717 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 2718 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 2719 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2720 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2721 1.1 mrg VABSQ_M_S)) 2722 1.1 mrg ] 2723 1.1 mrg "TARGET_HAVE_MVE" 2724 1.1 mrg "vpst\;vabst.s%#<V_sz_elem> %q0, %q2" 2725 1.1 mrg [(set_attr "type" "mve_move") 2726 1.1 mrg (set_attr "length""8")]) 2727 1.1 mrg 2728 1.1 mrg ;; 2729 1.1 mrg ;; [vaddvaq_p_u, vaddvaq_p_s]) 2730 1.1 mrg ;; 2731 1.1 mrg (define_insn "mve_vaddvaq_p_<supf><mode>" 2732 1.1 mrg [ 2733 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 2734 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 2735 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2736 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2737 1.1 mrg VADDVAQ_P)) 2738 1.1 mrg ] 2739 1.1 mrg "TARGET_HAVE_MVE" 2740 1.1 mrg "vpst\;vaddvat.<supf>%#<V_sz_elem> %0, %q2" 2741 1.1 mrg [(set_attr "type" "mve_move") 2742 1.1 mrg (set_attr "length""8")]) 2743 1.1 mrg 2744 1.1 mrg ;; 2745 1.1 mrg ;; [vclsq_m_s]) 2746 1.1 mrg ;; 2747 1.1 mrg (define_insn "mve_vclsq_m_s<mode>" 2748 1.1 mrg [ 2749 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 2750 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 2751 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2752 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2753 1.1 mrg VCLSQ_M_S)) 2754 1.1 mrg ] 2755 1.1 mrg "TARGET_HAVE_MVE" 2756 1.1 mrg "vpst\;vclst.s%#<V_sz_elem> %q0, %q2" 2757 1.1 mrg [(set_attr "type" "mve_move") 2758 1.1 mrg (set_attr "length""8")]) 2759 1.1 mrg 2760 1.1 mrg ;; 2761 1.1 mrg ;; [vclzq_m_s, vclzq_m_u]) 2762 1.1 mrg ;; 2763 1.1 mrg (define_insn "mve_vclzq_m_<supf><mode>" 2764 1.1 mrg [ 2765 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 2766 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 2767 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2768 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2769 1.1 mrg VCLZQ_M)) 2770 1.1 mrg ] 2771 1.1 mrg "TARGET_HAVE_MVE" 2772 1.1 mrg "vpst\;vclzt.i%#<V_sz_elem> %q0, %q2" 2773 1.1 mrg [(set_attr "type" "mve_move") 2774 1.1 mrg (set_attr "length""8")]) 2775 1.1 mrg 2776 1.1 mrg ;; 2777 1.1 mrg ;; [vcmpcsq_m_n_u]) 2778 1.1 mrg ;; 2779 1.1 mrg (define_insn "mve_vcmpcsq_m_n_u<mode>" 2780 1.1 mrg [ 2781 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2782 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2783 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 2784 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2785 1.1 mrg VCMPCSQ_M_N_U)) 2786 1.1 mrg ] 2787 1.1 mrg "TARGET_HAVE_MVE" 2788 1.1 mrg "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %2" 2789 1.1 mrg [(set_attr "type" "mve_move") 2790 1.1 mrg (set_attr "length""8")]) 2791 1.1 mrg 2792 1.1 mrg ;; 2793 1.1 mrg ;; [vcmpcsq_m_u]) 2794 1.1 mrg ;; 2795 1.1 mrg (define_insn "mve_vcmpcsq_m_u<mode>" 2796 1.1 mrg [ 2797 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2798 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2799 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2800 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2801 1.1 mrg VCMPCSQ_M_U)) 2802 1.1 mrg ] 2803 1.1 mrg "TARGET_HAVE_MVE" 2804 1.1 mrg "vpst\;vcmpt.u%#<V_sz_elem> cs, %q1, %q2" 2805 1.1 mrg [(set_attr "type" "mve_move") 2806 1.1 mrg (set_attr "length""8")]) 2807 1.1 mrg 2808 1.1 mrg ;; 2809 1.1 mrg ;; [vcmpeqq_m_n_u, vcmpeqq_m_n_s]) 2810 1.1 mrg ;; 2811 1.1 mrg (define_insn "mve_vcmpeqq_m_n_<supf><mode>" 2812 1.1 mrg [ 2813 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2814 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2815 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 2816 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2817 1.1 mrg VCMPEQQ_M_N)) 2818 1.1 mrg ] 2819 1.1 mrg "TARGET_HAVE_MVE" 2820 1.1 mrg "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %2" 2821 1.1 mrg [(set_attr "type" "mve_move") 2822 1.1 mrg (set_attr "length""8")]) 2823 1.1 mrg 2824 1.1 mrg ;; 2825 1.1 mrg ;; [vcmpeqq_m_u, vcmpeqq_m_s]) 2826 1.1 mrg ;; 2827 1.1 mrg (define_insn "mve_vcmpeqq_m_<supf><mode>" 2828 1.1 mrg [ 2829 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2830 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2831 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2832 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2833 1.1 mrg VCMPEQQ_M)) 2834 1.1 mrg ] 2835 1.1 mrg "TARGET_HAVE_MVE" 2836 1.1 mrg "vpst\;vcmpt.i%#<V_sz_elem> eq, %q1, %q2" 2837 1.1 mrg [(set_attr "type" "mve_move") 2838 1.1 mrg (set_attr "length""8")]) 2839 1.1 mrg 2840 1.1 mrg ;; 2841 1.1 mrg ;; [vcmpgeq_m_n_s]) 2842 1.1 mrg ;; 2843 1.1 mrg (define_insn "mve_vcmpgeq_m_n_s<mode>" 2844 1.1 mrg [ 2845 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2846 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2847 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 2848 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2849 1.1 mrg VCMPGEQ_M_N_S)) 2850 1.1 mrg ] 2851 1.1 mrg "TARGET_HAVE_MVE" 2852 1.1 mrg "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %2" 2853 1.1 mrg [(set_attr "type" "mve_move") 2854 1.1 mrg (set_attr "length""8")]) 2855 1.1 mrg 2856 1.1 mrg ;; 2857 1.1 mrg ;; [vcmpgeq_m_s]) 2858 1.1 mrg ;; 2859 1.1 mrg (define_insn "mve_vcmpgeq_m_s<mode>" 2860 1.1 mrg [ 2861 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2862 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2863 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2864 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2865 1.1 mrg VCMPGEQ_M_S)) 2866 1.1 mrg ] 2867 1.1 mrg "TARGET_HAVE_MVE" 2868 1.1 mrg "vpst\;vcmpt.s%#<V_sz_elem> ge, %q1, %q2" 2869 1.1 mrg [(set_attr "type" "mve_move") 2870 1.1 mrg (set_attr "length""8")]) 2871 1.1 mrg 2872 1.1 mrg ;; 2873 1.1 mrg ;; [vcmpgtq_m_n_s]) 2874 1.1 mrg ;; 2875 1.1 mrg (define_insn "mve_vcmpgtq_m_n_s<mode>" 2876 1.1 mrg [ 2877 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2878 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2879 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 2880 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2881 1.1 mrg VCMPGTQ_M_N_S)) 2882 1.1 mrg ] 2883 1.1 mrg "TARGET_HAVE_MVE" 2884 1.1 mrg "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %2" 2885 1.1 mrg [(set_attr "type" "mve_move") 2886 1.1 mrg (set_attr "length""8")]) 2887 1.1 mrg 2888 1.1 mrg ;; 2889 1.1 mrg ;; [vcmpgtq_m_s]) 2890 1.1 mrg ;; 2891 1.1 mrg (define_insn "mve_vcmpgtq_m_s<mode>" 2892 1.1 mrg [ 2893 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2894 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2895 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2896 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2897 1.1 mrg VCMPGTQ_M_S)) 2898 1.1 mrg ] 2899 1.1 mrg "TARGET_HAVE_MVE" 2900 1.1 mrg "vpst\;vcmpt.s%#<V_sz_elem> gt, %q1, %q2" 2901 1.1 mrg [(set_attr "type" "mve_move") 2902 1.1 mrg (set_attr "length""8")]) 2903 1.1 mrg 2904 1.1 mrg ;; 2905 1.1 mrg ;; [vcmphiq_m_n_u]) 2906 1.1 mrg ;; 2907 1.1 mrg (define_insn "mve_vcmphiq_m_n_u<mode>" 2908 1.1 mrg [ 2909 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2910 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2911 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 2912 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2913 1.1 mrg VCMPHIQ_M_N_U)) 2914 1.1 mrg ] 2915 1.1 mrg "TARGET_HAVE_MVE" 2916 1.1 mrg "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %2" 2917 1.1 mrg [(set_attr "type" "mve_move") 2918 1.1 mrg (set_attr "length""8")]) 2919 1.1 mrg 2920 1.1 mrg ;; 2921 1.1 mrg ;; [vcmphiq_m_u]) 2922 1.1 mrg ;; 2923 1.1 mrg (define_insn "mve_vcmphiq_m_u<mode>" 2924 1.1 mrg [ 2925 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2926 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2927 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2928 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2929 1.1 mrg VCMPHIQ_M_U)) 2930 1.1 mrg ] 2931 1.1 mrg "TARGET_HAVE_MVE" 2932 1.1 mrg "vpst\;vcmpt.u%#<V_sz_elem> hi, %q1, %q2" 2933 1.1 mrg [(set_attr "type" "mve_move") 2934 1.1 mrg (set_attr "length""8")]) 2935 1.1 mrg 2936 1.1 mrg ;; 2937 1.1 mrg ;; [vcmpleq_m_n_s]) 2938 1.1 mrg ;; 2939 1.1 mrg (define_insn "mve_vcmpleq_m_n_s<mode>" 2940 1.1 mrg [ 2941 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2942 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2943 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 2944 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2945 1.1 mrg VCMPLEQ_M_N_S)) 2946 1.1 mrg ] 2947 1.1 mrg "TARGET_HAVE_MVE" 2948 1.1 mrg "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %2" 2949 1.1 mrg [(set_attr "type" "mve_move") 2950 1.1 mrg (set_attr "length""8")]) 2951 1.1 mrg 2952 1.1 mrg ;; 2953 1.1 mrg ;; [vcmpleq_m_s]) 2954 1.1 mrg ;; 2955 1.1 mrg (define_insn "mve_vcmpleq_m_s<mode>" 2956 1.1 mrg [ 2957 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2958 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2959 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2960 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2961 1.1 mrg VCMPLEQ_M_S)) 2962 1.1 mrg ] 2963 1.1 mrg "TARGET_HAVE_MVE" 2964 1.1 mrg "vpst\;vcmpt.s%#<V_sz_elem> le, %q1, %q2" 2965 1.1 mrg [(set_attr "type" "mve_move") 2966 1.1 mrg (set_attr "length""8")]) 2967 1.1 mrg 2968 1.1 mrg ;; 2969 1.1 mrg ;; [vcmpltq_m_n_s]) 2970 1.1 mrg ;; 2971 1.1 mrg (define_insn "mve_vcmpltq_m_n_s<mode>" 2972 1.1 mrg [ 2973 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2974 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2975 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 2976 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2977 1.1 mrg VCMPLTQ_M_N_S)) 2978 1.1 mrg ] 2979 1.1 mrg "TARGET_HAVE_MVE" 2980 1.1 mrg "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %2" 2981 1.1 mrg [(set_attr "type" "mve_move") 2982 1.1 mrg (set_attr "length""8")]) 2983 1.1 mrg 2984 1.1 mrg ;; 2985 1.1 mrg ;; [vcmpltq_m_s]) 2986 1.1 mrg ;; 2987 1.1 mrg (define_insn "mve_vcmpltq_m_s<mode>" 2988 1.1 mrg [ 2989 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 2990 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 2991 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 2992 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 2993 1.1 mrg VCMPLTQ_M_S)) 2994 1.1 mrg ] 2995 1.1 mrg "TARGET_HAVE_MVE" 2996 1.1 mrg "vpst\;vcmpt.s%#<V_sz_elem> lt, %q1, %q2" 2997 1.1 mrg [(set_attr "type" "mve_move") 2998 1.1 mrg (set_attr "length""8")]) 2999 1.1 mrg 3000 1.1 mrg ;; 3001 1.1 mrg ;; [vcmpneq_m_n_u, vcmpneq_m_n_s]) 3002 1.1 mrg ;; 3003 1.1 mrg (define_insn "mve_vcmpneq_m_n_<supf><mode>" 3004 1.1 mrg [ 3005 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3006 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 3007 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 3008 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3009 1.1 mrg VCMPNEQ_M_N)) 3010 1.1 mrg ] 3011 1.1 mrg "TARGET_HAVE_MVE" 3012 1.1 mrg "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %2" 3013 1.1 mrg [(set_attr "type" "mve_move") 3014 1.1 mrg (set_attr "length""8")]) 3015 1.1 mrg 3016 1.1 mrg ;; 3017 1.1 mrg ;; [vcmpneq_m_s, vcmpneq_m_u]) 3018 1.1 mrg ;; 3019 1.1 mrg (define_insn "mve_vcmpneq_m_<supf><mode>" 3020 1.1 mrg [ 3021 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3022 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_2 1 "s_register_operand" "w") 3023 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3024 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3025 1.1 mrg VCMPNEQ_M)) 3026 1.1 mrg ] 3027 1.1 mrg "TARGET_HAVE_MVE" 3028 1.1 mrg "vpst\;vcmpt.i%#<V_sz_elem> ne, %q1, %q2" 3029 1.1 mrg [(set_attr "type" "mve_move") 3030 1.1 mrg (set_attr "length""8")]) 3031 1.1 mrg 3032 1.1 mrg ;; 3033 1.1 mrg ;; [vdupq_m_n_s, vdupq_m_n_u]) 3034 1.1 mrg ;; 3035 1.1 mrg (define_insn "mve_vdupq_m_n_<supf><mode>" 3036 1.1 mrg [ 3037 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3038 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3039 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 3040 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3041 1.1 mrg VDUPQ_M_N)) 3042 1.1 mrg ] 3043 1.1 mrg "TARGET_HAVE_MVE" 3044 1.1.1.2 mrg "vpst\;vdupt.%#<V_sz_elem>\t%q0, %2" 3045 1.1 mrg [(set_attr "type" "mve_move") 3046 1.1 mrg (set_attr "length""8")]) 3047 1.1 mrg 3048 1.1 mrg ;; 3049 1.1 mrg ;; [vmaxaq_m_s]) 3050 1.1 mrg ;; 3051 1.1 mrg (define_insn "mve_vmaxaq_m_s<mode>" 3052 1.1 mrg [ 3053 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3054 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3055 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3056 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3057 1.1 mrg VMAXAQ_M_S)) 3058 1.1 mrg ] 3059 1.1 mrg "TARGET_HAVE_MVE" 3060 1.1 mrg "vpst\;vmaxat.s%#<V_sz_elem> %q0, %q2" 3061 1.1 mrg [(set_attr "type" "mve_move") 3062 1.1 mrg (set_attr "length""8")]) 3063 1.1 mrg 3064 1.1 mrg ;; 3065 1.1 mrg ;; [vmaxavq_p_s]) 3066 1.1 mrg ;; 3067 1.1 mrg (define_insn "mve_vmaxavq_p_s<mode>" 3068 1.1 mrg [ 3069 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 3070 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 3071 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3072 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3073 1.1 mrg VMAXAVQ_P_S)) 3074 1.1 mrg ] 3075 1.1 mrg "TARGET_HAVE_MVE" 3076 1.1 mrg "vpst\;vmaxavt.s%#<V_sz_elem> %0, %q2" 3077 1.1 mrg [(set_attr "type" "mve_move") 3078 1.1 mrg (set_attr "length""8")]) 3079 1.1 mrg 3080 1.1 mrg ;; 3081 1.1 mrg ;; [vmaxvq_p_u, vmaxvq_p_s]) 3082 1.1 mrg ;; 3083 1.1 mrg (define_insn "mve_vmaxvq_p_<supf><mode>" 3084 1.1 mrg [ 3085 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 3086 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 3087 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3088 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3089 1.1 mrg VMAXVQ_P)) 3090 1.1 mrg ] 3091 1.1 mrg "TARGET_HAVE_MVE" 3092 1.1 mrg "vpst\;vmaxvt.<supf>%#<V_sz_elem> %0, %q2" 3093 1.1 mrg [(set_attr "type" "mve_move") 3094 1.1 mrg (set_attr "length""8")]) 3095 1.1 mrg 3096 1.1 mrg ;; 3097 1.1 mrg ;; [vminaq_m_s]) 3098 1.1 mrg ;; 3099 1.1 mrg (define_insn "mve_vminaq_m_s<mode>" 3100 1.1 mrg [ 3101 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3102 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3103 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3104 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3105 1.1 mrg VMINAQ_M_S)) 3106 1.1 mrg ] 3107 1.1 mrg "TARGET_HAVE_MVE" 3108 1.1 mrg "vpst\;vminat.s%#<V_sz_elem> %q0, %q2" 3109 1.1 mrg [(set_attr "type" "mve_move") 3110 1.1 mrg (set_attr "length""8")]) 3111 1.1 mrg 3112 1.1 mrg ;; 3113 1.1 mrg ;; [vminavq_p_s]) 3114 1.1 mrg ;; 3115 1.1 mrg (define_insn "mve_vminavq_p_s<mode>" 3116 1.1 mrg [ 3117 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 3118 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 3119 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3120 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3121 1.1 mrg VMINAVQ_P_S)) 3122 1.1 mrg ] 3123 1.1 mrg "TARGET_HAVE_MVE" 3124 1.1 mrg "vpst\;vminavt.s%#<V_sz_elem> %0, %q2" 3125 1.1 mrg [(set_attr "type" "mve_move") 3126 1.1 mrg (set_attr "length""8")]) 3127 1.1 mrg 3128 1.1 mrg ;; 3129 1.1 mrg ;; [vminvq_p_s, vminvq_p_u]) 3130 1.1 mrg ;; 3131 1.1 mrg (define_insn "mve_vminvq_p_<supf><mode>" 3132 1.1 mrg [ 3133 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 3134 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 3135 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3136 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3137 1.1 mrg VMINVQ_P)) 3138 1.1 mrg ] 3139 1.1 mrg "TARGET_HAVE_MVE" 3140 1.1 mrg "vpst\;vminvt.<supf>%#<V_sz_elem>\t%0, %q2" 3141 1.1 mrg [(set_attr "type" "mve_move") 3142 1.1 mrg (set_attr "length""8")]) 3143 1.1 mrg 3144 1.1 mrg ;; 3145 1.1 mrg ;; [vmladavaq_u, vmladavaq_s]) 3146 1.1 mrg ;; 3147 1.1 mrg (define_insn "mve_vmladavaq_<supf><mode>" 3148 1.1 mrg [ 3149 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 3150 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 3151 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3152 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3153 1.1 mrg VMLADAVAQ)) 3154 1.1 mrg ] 3155 1.1 mrg "TARGET_HAVE_MVE" 3156 1.1 mrg "vmladava.<supf>%#<V_sz_elem> %0, %q2, %q3" 3157 1.1 mrg [(set_attr "type" "mve_move") 3158 1.1 mrg ]) 3159 1.1 mrg 3160 1.1 mrg ;; 3161 1.1 mrg ;; [vmladavq_p_u, vmladavq_p_s]) 3162 1.1 mrg ;; 3163 1.1 mrg (define_insn "mve_vmladavq_p_<supf><mode>" 3164 1.1 mrg [ 3165 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 3166 1.1 mrg (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 3167 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3168 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3169 1.1 mrg VMLADAVQ_P)) 3170 1.1 mrg ] 3171 1.1 mrg "TARGET_HAVE_MVE" 3172 1.1 mrg "vpst\;vmladavt.<supf>%#<V_sz_elem>\t%0, %q1, %q2" 3173 1.1 mrg [(set_attr "type" "mve_move") 3174 1.1 mrg (set_attr "length""8")]) 3175 1.1 mrg 3176 1.1 mrg ;; 3177 1.1 mrg ;; [vmladavxq_p_s]) 3178 1.1 mrg ;; 3179 1.1 mrg (define_insn "mve_vmladavxq_p_s<mode>" 3180 1.1 mrg [ 3181 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 3182 1.1 mrg (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 3183 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3184 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3185 1.1 mrg VMLADAVXQ_P_S)) 3186 1.1 mrg ] 3187 1.1 mrg "TARGET_HAVE_MVE" 3188 1.1 mrg "vpst\;vmladavxt.s%#<V_sz_elem>\t%0, %q1, %q2" 3189 1.1 mrg [(set_attr "type" "mve_move") 3190 1.1 mrg (set_attr "length""8")]) 3191 1.1 mrg 3192 1.1 mrg ;; 3193 1.1 mrg ;; [vmlaq_n_u, vmlaq_n_s]) 3194 1.1 mrg ;; 3195 1.1 mrg (define_insn "mve_vmlaq_n_<supf><mode>" 3196 1.1 mrg [ 3197 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3198 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3199 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3200 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r")] 3201 1.1 mrg VMLAQ_N)) 3202 1.1 mrg ] 3203 1.1 mrg "TARGET_HAVE_MVE" 3204 1.1 mrg "vmla.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 3205 1.1 mrg [(set_attr "type" "mve_move") 3206 1.1 mrg ]) 3207 1.1 mrg 3208 1.1 mrg ;; 3209 1.1 mrg ;; [vmlasq_n_u, vmlasq_n_s]) 3210 1.1 mrg ;; 3211 1.1 mrg (define_insn "mve_vmlasq_n_<supf><mode>" 3212 1.1 mrg [ 3213 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3214 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3215 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3216 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r")] 3217 1.1 mrg VMLASQ_N)) 3218 1.1 mrg ] 3219 1.1 mrg "TARGET_HAVE_MVE" 3220 1.1 mrg "vmlas.<supf>%#<V_sz_elem> %q0, %q2, %3" 3221 1.1 mrg [(set_attr "type" "mve_move") 3222 1.1 mrg ]) 3223 1.1 mrg 3224 1.1 mrg ;; 3225 1.1 mrg ;; [vmlsdavq_p_s]) 3226 1.1 mrg ;; 3227 1.1 mrg (define_insn "mve_vmlsdavq_p_s<mode>" 3228 1.1 mrg [ 3229 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 3230 1.1 mrg (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 3231 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3232 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3233 1.1 mrg VMLSDAVQ_P_S)) 3234 1.1 mrg ] 3235 1.1 mrg "TARGET_HAVE_MVE" 3236 1.1 mrg "vpst\;vmlsdavt.s%#<V_sz_elem> %0, %q1, %q2" 3237 1.1 mrg [(set_attr "type" "mve_move") 3238 1.1 mrg (set_attr "length""8")]) 3239 1.1 mrg 3240 1.1 mrg ;; 3241 1.1 mrg ;; [vmlsdavxq_p_s]) 3242 1.1 mrg ;; 3243 1.1 mrg (define_insn "mve_vmlsdavxq_p_s<mode>" 3244 1.1 mrg [ 3245 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 3246 1.1 mrg (unspec:SI [(match_operand:MVE_2 1 "s_register_operand" "w") 3247 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3248 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3249 1.1 mrg VMLSDAVXQ_P_S)) 3250 1.1 mrg ] 3251 1.1 mrg "TARGET_HAVE_MVE" 3252 1.1 mrg "vpst\;vmlsdavxt.s%#<V_sz_elem> %0, %q1, %q2" 3253 1.1 mrg [(set_attr "type" "mve_move") 3254 1.1 mrg (set_attr "length""8")]) 3255 1.1 mrg 3256 1.1 mrg ;; 3257 1.1 mrg ;; [vmvnq_m_s, vmvnq_m_u]) 3258 1.1 mrg ;; 3259 1.1 mrg (define_insn "mve_vmvnq_m_<supf><mode>" 3260 1.1 mrg [ 3261 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3262 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3263 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3264 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3265 1.1 mrg VMVNQ_M)) 3266 1.1 mrg ] 3267 1.1 mrg "TARGET_HAVE_MVE" 3268 1.1.1.2 mrg "vpst\;vmvnt\t%q0, %q2" 3269 1.1 mrg [(set_attr "type" "mve_move") 3270 1.1 mrg (set_attr "length""8")]) 3271 1.1 mrg 3272 1.1 mrg ;; 3273 1.1 mrg ;; [vnegq_m_s]) 3274 1.1 mrg ;; 3275 1.1 mrg (define_insn "mve_vnegq_m_s<mode>" 3276 1.1 mrg [ 3277 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3278 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3279 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3280 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3281 1.1 mrg VNEGQ_M_S)) 3282 1.1 mrg ] 3283 1.1 mrg "TARGET_HAVE_MVE" 3284 1.1 mrg "vpst\;vnegt.s%#<V_sz_elem>\t%q0, %q2" 3285 1.1 mrg [(set_attr "type" "mve_move") 3286 1.1 mrg (set_attr "length""8")]) 3287 1.1 mrg 3288 1.1 mrg ;; 3289 1.1 mrg ;; [vpselq_u, vpselq_s]) 3290 1.1 mrg ;; 3291 1.1.1.2 mrg (define_insn "@mve_vpselq_<supf><mode>" 3292 1.1 mrg [ 3293 1.1 mrg (set (match_operand:MVE_1 0 "s_register_operand" "=w") 3294 1.1 mrg (unspec:MVE_1 [(match_operand:MVE_1 1 "s_register_operand" "w") 3295 1.1 mrg (match_operand:MVE_1 2 "s_register_operand" "w") 3296 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3297 1.1 mrg VPSELQ)) 3298 1.1 mrg ] 3299 1.1 mrg "TARGET_HAVE_MVE" 3300 1.1.1.2 mrg "vpsel\t%q0, %q1, %q2" 3301 1.1 mrg [(set_attr "type" "mve_move") 3302 1.1 mrg ]) 3303 1.1 mrg 3304 1.1 mrg ;; 3305 1.1 mrg ;; [vqabsq_m_s]) 3306 1.1 mrg ;; 3307 1.1 mrg (define_insn "mve_vqabsq_m_s<mode>" 3308 1.1 mrg [ 3309 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3310 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3311 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3312 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3313 1.1 mrg VQABSQ_M_S)) 3314 1.1 mrg ] 3315 1.1 mrg "TARGET_HAVE_MVE" 3316 1.1 mrg "vpst\;vqabst.s%#<V_sz_elem>\t%q0, %q2" 3317 1.1 mrg [(set_attr "type" "mve_move") 3318 1.1 mrg (set_attr "length""8")]) 3319 1.1 mrg 3320 1.1 mrg ;; 3321 1.1 mrg ;; [vqdmlahq_n_s]) 3322 1.1 mrg ;; 3323 1.1 mrg (define_insn "mve_vqdmlahq_n_<supf><mode>" 3324 1.1 mrg [ 3325 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3326 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3327 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3328 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r")] 3329 1.1 mrg VQDMLAHQ_N)) 3330 1.1 mrg ] 3331 1.1 mrg "TARGET_HAVE_MVE" 3332 1.1 mrg "vqdmlah.s%#<V_sz_elem>\t%q0, %q2, %3" 3333 1.1 mrg [(set_attr "type" "mve_move") 3334 1.1 mrg ]) 3335 1.1 mrg 3336 1.1 mrg ;; 3337 1.1 mrg ;; [vqdmlashq_n_s]) 3338 1.1 mrg ;; 3339 1.1 mrg (define_insn "mve_vqdmlashq_n_<supf><mode>" 3340 1.1 mrg [ 3341 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3342 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3343 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3344 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r")] 3345 1.1 mrg VQDMLASHQ_N)) 3346 1.1 mrg ] 3347 1.1 mrg "TARGET_HAVE_MVE" 3348 1.1 mrg "vqdmlash.s%#<V_sz_elem>\t%q0, %q2, %3" 3349 1.1 mrg [(set_attr "type" "mve_move") 3350 1.1 mrg ]) 3351 1.1 mrg 3352 1.1 mrg ;; 3353 1.1 mrg ;; [vqnegq_m_s]) 3354 1.1 mrg ;; 3355 1.1 mrg (define_insn "mve_vqnegq_m_s<mode>" 3356 1.1 mrg [ 3357 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3358 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3359 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3360 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3361 1.1 mrg VQNEGQ_M_S)) 3362 1.1 mrg ] 3363 1.1 mrg "TARGET_HAVE_MVE" 3364 1.1 mrg "vpst\;vqnegt.s%#<V_sz_elem> %q0, %q2" 3365 1.1 mrg [(set_attr "type" "mve_move") 3366 1.1 mrg (set_attr "length""8")]) 3367 1.1 mrg 3368 1.1 mrg ;; 3369 1.1 mrg ;; [vqrdmladhq_s]) 3370 1.1 mrg ;; 3371 1.1 mrg (define_insn "mve_vqrdmladhq_s<mode>" 3372 1.1 mrg [ 3373 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3374 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3375 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3376 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3377 1.1 mrg VQRDMLADHQ_S)) 3378 1.1 mrg ] 3379 1.1 mrg "TARGET_HAVE_MVE" 3380 1.1 mrg "vqrdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3" 3381 1.1 mrg [(set_attr "type" "mve_move") 3382 1.1 mrg ]) 3383 1.1 mrg 3384 1.1 mrg ;; 3385 1.1 mrg ;; [vqrdmladhxq_s]) 3386 1.1 mrg ;; 3387 1.1 mrg (define_insn "mve_vqrdmladhxq_s<mode>" 3388 1.1 mrg [ 3389 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3390 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3391 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3392 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3393 1.1 mrg VQRDMLADHXQ_S)) 3394 1.1 mrg ] 3395 1.1 mrg "TARGET_HAVE_MVE" 3396 1.1 mrg "vqrdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3" 3397 1.1 mrg [(set_attr "type" "mve_move") 3398 1.1 mrg ]) 3399 1.1 mrg 3400 1.1 mrg ;; 3401 1.1 mrg ;; [vqrdmlahq_n_s]) 3402 1.1 mrg ;; 3403 1.1 mrg (define_insn "mve_vqrdmlahq_n_<supf><mode>" 3404 1.1 mrg [ 3405 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3406 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3407 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3408 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r")] 3409 1.1 mrg VQRDMLAHQ_N)) 3410 1.1 mrg ] 3411 1.1 mrg "TARGET_HAVE_MVE" 3412 1.1 mrg "vqrdmlah.s%#<V_sz_elem>\t%q0, %q2, %3" 3413 1.1 mrg [(set_attr "type" "mve_move") 3414 1.1 mrg ]) 3415 1.1 mrg 3416 1.1 mrg ;; 3417 1.1 mrg ;; [vqrdmlashq_n_s]) 3418 1.1 mrg ;; 3419 1.1 mrg (define_insn "mve_vqrdmlashq_n_<supf><mode>" 3420 1.1 mrg [ 3421 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3422 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3423 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3424 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r")] 3425 1.1 mrg VQRDMLASHQ_N)) 3426 1.1 mrg ] 3427 1.1 mrg "TARGET_HAVE_MVE" 3428 1.1 mrg "vqrdmlash.s%#<V_sz_elem>\t%q0, %q2, %3" 3429 1.1 mrg [(set_attr "type" "mve_move") 3430 1.1 mrg ]) 3431 1.1 mrg 3432 1.1 mrg ;; 3433 1.1 mrg ;; [vqrdmlsdhq_s]) 3434 1.1 mrg ;; 3435 1.1 mrg (define_insn "mve_vqrdmlsdhq_s<mode>" 3436 1.1 mrg [ 3437 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3438 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3439 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3440 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3441 1.1 mrg VQRDMLSDHQ_S)) 3442 1.1 mrg ] 3443 1.1 mrg "TARGET_HAVE_MVE" 3444 1.1 mrg "vqrdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3" 3445 1.1 mrg [(set_attr "type" "mve_move") 3446 1.1 mrg ]) 3447 1.1 mrg 3448 1.1 mrg ;; 3449 1.1 mrg ;; [vqrdmlsdhxq_s]) 3450 1.1 mrg ;; 3451 1.1 mrg (define_insn "mve_vqrdmlsdhxq_s<mode>" 3452 1.1 mrg [ 3453 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3454 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3455 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3456 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3457 1.1 mrg VQRDMLSDHXQ_S)) 3458 1.1 mrg ] 3459 1.1 mrg "TARGET_HAVE_MVE" 3460 1.1 mrg "vqrdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3" 3461 1.1 mrg [(set_attr "type" "mve_move") 3462 1.1 mrg ]) 3463 1.1 mrg 3464 1.1 mrg ;; 3465 1.1 mrg ;; [vqrshlq_m_n_s, vqrshlq_m_n_u]) 3466 1.1 mrg ;; 3467 1.1 mrg (define_insn "mve_vqrshlq_m_n_<supf><mode>" 3468 1.1 mrg [ 3469 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3470 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3471 1.1 mrg (match_operand:SI 2 "s_register_operand" "r") 3472 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3473 1.1 mrg VQRSHLQ_M_N)) 3474 1.1 mrg ] 3475 1.1 mrg "TARGET_HAVE_MVE" 3476 1.1 mrg "vpst\;vqrshlt.<supf>%#<V_sz_elem> %q0, %2" 3477 1.1 mrg [(set_attr "type" "mve_move") 3478 1.1 mrg (set_attr "length""8")]) 3479 1.1 mrg 3480 1.1 mrg ;; 3481 1.1 mrg ;; [vqshlq_m_r_u, vqshlq_m_r_s]) 3482 1.1 mrg ;; 3483 1.1 mrg (define_insn "mve_vqshlq_m_r_<supf><mode>" 3484 1.1 mrg [ 3485 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3486 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3487 1.1 mrg (match_operand:SI 2 "s_register_operand" "r") 3488 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3489 1.1 mrg VQSHLQ_M_R)) 3490 1.1 mrg ] 3491 1.1 mrg "TARGET_HAVE_MVE" 3492 1.1 mrg "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %2" 3493 1.1 mrg [(set_attr "type" "mve_move") 3494 1.1 mrg (set_attr "length""8")]) 3495 1.1 mrg 3496 1.1 mrg ;; 3497 1.1 mrg ;; [vrev64q_m_u, vrev64q_m_s]) 3498 1.1 mrg ;; 3499 1.1 mrg (define_insn "mve_vrev64q_m_<supf><mode>" 3500 1.1 mrg [ 3501 1.1.1.2 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=&w") 3502 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3503 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3504 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3505 1.1 mrg VREV64Q_M)) 3506 1.1 mrg ] 3507 1.1 mrg "TARGET_HAVE_MVE" 3508 1.1 mrg "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2" 3509 1.1 mrg [(set_attr "type" "mve_move") 3510 1.1 mrg (set_attr "length""8")]) 3511 1.1 mrg 3512 1.1 mrg ;; 3513 1.1 mrg ;; [vrshlq_m_n_s, vrshlq_m_n_u]) 3514 1.1 mrg ;; 3515 1.1 mrg (define_insn "mve_vrshlq_m_n_<supf><mode>" 3516 1.1 mrg [ 3517 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3518 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3519 1.1 mrg (match_operand:SI 2 "s_register_operand" "r") 3520 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3521 1.1 mrg VRSHLQ_M_N)) 3522 1.1 mrg ] 3523 1.1 mrg "TARGET_HAVE_MVE" 3524 1.1 mrg "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %2" 3525 1.1 mrg [(set_attr "type" "mve_move") 3526 1.1 mrg (set_attr "length""8")]) 3527 1.1 mrg 3528 1.1 mrg ;; 3529 1.1 mrg ;; [vshlq_m_r_u, vshlq_m_r_s]) 3530 1.1 mrg ;; 3531 1.1 mrg (define_insn "mve_vshlq_m_r_<supf><mode>" 3532 1.1 mrg [ 3533 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3534 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3535 1.1 mrg (match_operand:SI 2 "s_register_operand" "r") 3536 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3537 1.1 mrg VSHLQ_M_R)) 3538 1.1 mrg ] 3539 1.1 mrg "TARGET_HAVE_MVE" 3540 1.1 mrg "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %2" 3541 1.1 mrg [(set_attr "type" "mve_move") 3542 1.1 mrg (set_attr "length""8")]) 3543 1.1 mrg 3544 1.1 mrg ;; 3545 1.1 mrg ;; [vsliq_n_u, vsliq_n_s]) 3546 1.1 mrg ;; 3547 1.1 mrg (define_insn "mve_vsliq_n_<supf><mode>" 3548 1.1 mrg [ 3549 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3550 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3551 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3552 1.1 mrg (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>")] 3553 1.1 mrg VSLIQ_N)) 3554 1.1 mrg ] 3555 1.1 mrg "TARGET_HAVE_MVE" 3556 1.1 mrg "vsli.%#<V_sz_elem>\t%q0, %q2, %3" 3557 1.1 mrg [(set_attr "type" "mve_move") 3558 1.1 mrg ]) 3559 1.1 mrg 3560 1.1 mrg ;; 3561 1.1 mrg ;; [vsriq_n_u, vsriq_n_s]) 3562 1.1 mrg ;; 3563 1.1 mrg (define_insn "mve_vsriq_n_<supf><mode>" 3564 1.1 mrg [ 3565 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3566 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3567 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3568 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>")] 3569 1.1 mrg VSRIQ_N)) 3570 1.1 mrg ] 3571 1.1 mrg "TARGET_HAVE_MVE" 3572 1.1 mrg "vsri.%#<V_sz_elem>\t%q0, %q2, %3" 3573 1.1 mrg [(set_attr "type" "mve_move") 3574 1.1 mrg ]) 3575 1.1 mrg 3576 1.1 mrg ;; 3577 1.1 mrg ;; [vqdmlsdhxq_s]) 3578 1.1 mrg ;; 3579 1.1 mrg (define_insn "mve_vqdmlsdhxq_s<mode>" 3580 1.1 mrg [ 3581 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3582 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3583 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3584 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3585 1.1 mrg VQDMLSDHXQ_S)) 3586 1.1 mrg ] 3587 1.1 mrg "TARGET_HAVE_MVE" 3588 1.1 mrg "vqdmlsdhx.s%#<V_sz_elem>\t%q0, %q2, %q3" 3589 1.1 mrg [(set_attr "type" "mve_move") 3590 1.1 mrg ]) 3591 1.1 mrg 3592 1.1 mrg ;; 3593 1.1 mrg ;; [vqdmlsdhq_s]) 3594 1.1 mrg ;; 3595 1.1 mrg (define_insn "mve_vqdmlsdhq_s<mode>" 3596 1.1 mrg [ 3597 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3598 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3599 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3600 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3601 1.1 mrg VQDMLSDHQ_S)) 3602 1.1 mrg ] 3603 1.1 mrg "TARGET_HAVE_MVE" 3604 1.1 mrg "vqdmlsdh.s%#<V_sz_elem>\t%q0, %q2, %q3" 3605 1.1 mrg [(set_attr "type" "mve_move") 3606 1.1 mrg ]) 3607 1.1 mrg 3608 1.1 mrg ;; 3609 1.1 mrg ;; [vqdmladhxq_s]) 3610 1.1 mrg ;; 3611 1.1 mrg (define_insn "mve_vqdmladhxq_s<mode>" 3612 1.1 mrg [ 3613 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3614 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3615 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3616 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3617 1.1 mrg VQDMLADHXQ_S)) 3618 1.1 mrg ] 3619 1.1 mrg "TARGET_HAVE_MVE" 3620 1.1 mrg "vqdmladhx.s%#<V_sz_elem>\t%q0, %q2, %q3" 3621 1.1 mrg [(set_attr "type" "mve_move") 3622 1.1 mrg ]) 3623 1.1 mrg 3624 1.1 mrg ;; 3625 1.1 mrg ;; [vqdmladhq_s]) 3626 1.1 mrg ;; 3627 1.1 mrg (define_insn "mve_vqdmladhq_s<mode>" 3628 1.1 mrg [ 3629 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 3630 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 3631 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3632 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3633 1.1 mrg VQDMLADHQ_S)) 3634 1.1 mrg ] 3635 1.1 mrg "TARGET_HAVE_MVE" 3636 1.1 mrg "vqdmladh.s%#<V_sz_elem>\t%q0, %q2, %q3" 3637 1.1 mrg [(set_attr "type" "mve_move") 3638 1.1 mrg ]) 3639 1.1 mrg 3640 1.1 mrg ;; 3641 1.1 mrg ;; [vmlsdavaxq_s]) 3642 1.1 mrg ;; 3643 1.1 mrg (define_insn "mve_vmlsdavaxq_s<mode>" 3644 1.1 mrg [ 3645 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 3646 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 3647 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3648 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3649 1.1 mrg VMLSDAVAXQ_S)) 3650 1.1 mrg ] 3651 1.1 mrg "TARGET_HAVE_MVE" 3652 1.1 mrg "vmlsdavax.s%#<V_sz_elem>\t%0, %q2, %q3" 3653 1.1 mrg [(set_attr "type" "mve_move") 3654 1.1 mrg ]) 3655 1.1 mrg 3656 1.1 mrg ;; 3657 1.1 mrg ;; [vmlsdavaq_s]) 3658 1.1 mrg ;; 3659 1.1 mrg (define_insn "mve_vmlsdavaq_s<mode>" 3660 1.1 mrg [ 3661 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 3662 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 3663 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3664 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3665 1.1 mrg VMLSDAVAQ_S)) 3666 1.1 mrg ] 3667 1.1 mrg "TARGET_HAVE_MVE" 3668 1.1 mrg "vmlsdava.s%#<V_sz_elem>\t%0, %q2, %q3" 3669 1.1 mrg [(set_attr "type" "mve_move") 3670 1.1 mrg ]) 3671 1.1 mrg 3672 1.1 mrg ;; 3673 1.1 mrg ;; [vmladavaxq_s]) 3674 1.1 mrg ;; 3675 1.1 mrg (define_insn "mve_vmladavaxq_s<mode>" 3676 1.1 mrg [ 3677 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 3678 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 3679 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 3680 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w")] 3681 1.1 mrg VMLADAVAXQ_S)) 3682 1.1 mrg ] 3683 1.1 mrg "TARGET_HAVE_MVE" 3684 1.1 mrg "vmladavax.s%#<V_sz_elem>\t%0, %q2, %q3" 3685 1.1 mrg [(set_attr "type" "mve_move") 3686 1.1 mrg ]) 3687 1.1 mrg ;; 3688 1.1 mrg ;; [vabsq_m_f]) 3689 1.1 mrg ;; 3690 1.1 mrg (define_insn "mve_vabsq_m_f<mode>" 3691 1.1 mrg [ 3692 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 3693 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 3694 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 3695 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3696 1.1 mrg VABSQ_M_F)) 3697 1.1 mrg ] 3698 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3699 1.1 mrg "vpst\;vabst.f%#<V_sz_elem> %q0, %q2" 3700 1.1 mrg [(set_attr "type" "mve_move") 3701 1.1 mrg (set_attr "length""8")]) 3702 1.1 mrg 3703 1.1 mrg ;; 3704 1.1 mrg ;; [vaddlvaq_p_s vaddlvaq_p_u]) 3705 1.1 mrg ;; 3706 1.1 mrg (define_insn "mve_vaddlvaq_p_<supf>v4si" 3707 1.1 mrg [ 3708 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 3709 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 3710 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 3711 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 3712 1.1 mrg VADDLVAQ_P)) 3713 1.1 mrg ] 3714 1.1 mrg "TARGET_HAVE_MVE" 3715 1.1.1.2 mrg "vpst\;vaddlvat.<supf>32\t%Q0, %R0, %q2" 3716 1.1 mrg [(set_attr "type" "mve_move") 3717 1.1 mrg (set_attr "length""8")]) 3718 1.1 mrg ;; 3719 1.1.1.2 mrg ;; [vcmlaq, vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270]) 3720 1.1 mrg ;; 3721 1.1.1.2 mrg (define_insn "mve_vcmlaq<mve_rot><mode>" 3722 1.1 mrg [ 3723 1.1.1.2 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w,w") 3724 1.1.1.2 mrg (plus:MVE_0 (match_operand:MVE_0 1 "reg_or_zero_operand" "Dz,0") 3725 1.1.1.2 mrg (unspec:MVE_0 3726 1.1.1.2 mrg [(match_operand:MVE_0 2 "s_register_operand" "w,w") 3727 1.1.1.2 mrg (match_operand:MVE_0 3 "s_register_operand" "w,w")] 3728 1.1.1.2 mrg VCMLA))) 3729 1.1 mrg ] 3730 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3731 1.1.1.2 mrg "@ 3732 1.1.1.2 mrg vcmul.f%#<V_sz_elem> %q0, %q2, %q3, #<rot> 3733 1.1.1.2 mrg vcmla.f%#<V_sz_elem> %q0, %q2, %q3, #<rot>" 3734 1.1 mrg [(set_attr "type" "mve_move") 3735 1.1 mrg ]) 3736 1.1 mrg 3737 1.1 mrg ;; 3738 1.1 mrg ;; [vcmpeqq_m_n_f]) 3739 1.1 mrg ;; 3740 1.1 mrg (define_insn "mve_vcmpeqq_m_n_f<mode>" 3741 1.1 mrg [ 3742 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3743 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3744 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 3745 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3746 1.1 mrg VCMPEQQ_M_N_F)) 3747 1.1 mrg ] 3748 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3749 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> eq, %q1, %2" 3750 1.1 mrg [(set_attr "type" "mve_move") 3751 1.1 mrg (set_attr "length""8")]) 3752 1.1 mrg 3753 1.1 mrg ;; 3754 1.1 mrg ;; [vcmpgeq_m_f]) 3755 1.1 mrg ;; 3756 1.1 mrg (define_insn "mve_vcmpgeq_m_f<mode>" 3757 1.1 mrg [ 3758 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3759 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3760 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 3761 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3762 1.1 mrg VCMPGEQ_M_F)) 3763 1.1 mrg ] 3764 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3765 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %q2" 3766 1.1 mrg [(set_attr "type" "mve_move") 3767 1.1 mrg (set_attr "length""8")]) 3768 1.1 mrg 3769 1.1 mrg ;; 3770 1.1 mrg ;; [vcmpgeq_m_n_f]) 3771 1.1 mrg ;; 3772 1.1 mrg (define_insn "mve_vcmpgeq_m_n_f<mode>" 3773 1.1 mrg [ 3774 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3775 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3776 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 3777 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3778 1.1 mrg VCMPGEQ_M_N_F)) 3779 1.1 mrg ] 3780 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3781 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> ge, %q1, %2" 3782 1.1 mrg [(set_attr "type" "mve_move") 3783 1.1 mrg (set_attr "length""8")]) 3784 1.1 mrg 3785 1.1 mrg ;; 3786 1.1 mrg ;; [vcmpgtq_m_f]) 3787 1.1 mrg ;; 3788 1.1 mrg (define_insn "mve_vcmpgtq_m_f<mode>" 3789 1.1 mrg [ 3790 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3791 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3792 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 3793 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3794 1.1 mrg VCMPGTQ_M_F)) 3795 1.1 mrg ] 3796 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3797 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %q2" 3798 1.1 mrg [(set_attr "type" "mve_move") 3799 1.1 mrg (set_attr "length""8")]) 3800 1.1 mrg 3801 1.1 mrg ;; 3802 1.1 mrg ;; [vcmpgtq_m_n_f]) 3803 1.1 mrg ;; 3804 1.1 mrg (define_insn "mve_vcmpgtq_m_n_f<mode>" 3805 1.1 mrg [ 3806 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3807 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3808 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 3809 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3810 1.1 mrg VCMPGTQ_M_N_F)) 3811 1.1 mrg ] 3812 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3813 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> gt, %q1, %2" 3814 1.1 mrg [(set_attr "type" "mve_move") 3815 1.1 mrg (set_attr "length""8")]) 3816 1.1 mrg 3817 1.1 mrg ;; 3818 1.1 mrg ;; [vcmpleq_m_f]) 3819 1.1 mrg ;; 3820 1.1 mrg (define_insn "mve_vcmpleq_m_f<mode>" 3821 1.1 mrg [ 3822 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3823 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3824 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 3825 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3826 1.1 mrg VCMPLEQ_M_F)) 3827 1.1 mrg ] 3828 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3829 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %q2" 3830 1.1 mrg [(set_attr "type" "mve_move") 3831 1.1 mrg (set_attr "length""8")]) 3832 1.1 mrg 3833 1.1 mrg ;; 3834 1.1 mrg ;; [vcmpleq_m_n_f]) 3835 1.1 mrg ;; 3836 1.1 mrg (define_insn "mve_vcmpleq_m_n_f<mode>" 3837 1.1 mrg [ 3838 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3839 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3840 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 3841 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3842 1.1 mrg VCMPLEQ_M_N_F)) 3843 1.1 mrg ] 3844 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3845 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> le, %q1, %2" 3846 1.1 mrg [(set_attr "type" "mve_move") 3847 1.1 mrg (set_attr "length""8")]) 3848 1.1 mrg 3849 1.1 mrg ;; 3850 1.1 mrg ;; [vcmpltq_m_f]) 3851 1.1 mrg ;; 3852 1.1 mrg (define_insn "mve_vcmpltq_m_f<mode>" 3853 1.1 mrg [ 3854 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3855 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3856 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 3857 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3858 1.1 mrg VCMPLTQ_M_F)) 3859 1.1 mrg ] 3860 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3861 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %q2" 3862 1.1 mrg [(set_attr "type" "mve_move") 3863 1.1 mrg (set_attr "length""8")]) 3864 1.1 mrg 3865 1.1 mrg ;; 3866 1.1 mrg ;; [vcmpltq_m_n_f]) 3867 1.1 mrg ;; 3868 1.1 mrg (define_insn "mve_vcmpltq_m_n_f<mode>" 3869 1.1 mrg [ 3870 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3871 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3872 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 3873 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3874 1.1 mrg VCMPLTQ_M_N_F)) 3875 1.1 mrg ] 3876 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3877 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> lt, %q1, %2" 3878 1.1 mrg [(set_attr "type" "mve_move") 3879 1.1 mrg (set_attr "length""8")]) 3880 1.1 mrg 3881 1.1 mrg ;; 3882 1.1 mrg ;; [vcmpneq_m_f]) 3883 1.1 mrg ;; 3884 1.1 mrg (define_insn "mve_vcmpneq_m_f<mode>" 3885 1.1 mrg [ 3886 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3887 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3888 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 3889 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3890 1.1 mrg VCMPNEQ_M_F)) 3891 1.1 mrg ] 3892 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3893 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %q2" 3894 1.1 mrg [(set_attr "type" "mve_move") 3895 1.1 mrg (set_attr "length""8")]) 3896 1.1 mrg 3897 1.1 mrg ;; 3898 1.1 mrg ;; [vcmpneq_m_n_f]) 3899 1.1 mrg ;; 3900 1.1 mrg (define_insn "mve_vcmpneq_m_n_f<mode>" 3901 1.1 mrg [ 3902 1.1.1.2 mrg (set (match_operand:<MVE_VPRED> 0 "vpr_register_operand" "=Up") 3903 1.1.1.2 mrg (unspec:<MVE_VPRED> [(match_operand:MVE_0 1 "s_register_operand" "w") 3904 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 3905 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3906 1.1 mrg VCMPNEQ_M_N_F)) 3907 1.1 mrg ] 3908 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3909 1.1 mrg "vpst\;vcmpt.f%#<V_sz_elem> ne, %q1, %2" 3910 1.1 mrg [(set_attr "type" "mve_move") 3911 1.1 mrg (set_attr "length""8")]) 3912 1.1 mrg 3913 1.1 mrg ;; 3914 1.1 mrg ;; [vcvtbq_m_f16_f32]) 3915 1.1 mrg ;; 3916 1.1 mrg (define_insn "mve_vcvtbq_m_f16_f32v8hf" 3917 1.1 mrg [ 3918 1.1 mrg (set (match_operand:V8HF 0 "s_register_operand" "=w") 3919 1.1 mrg (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0") 3920 1.1 mrg (match_operand:V4SF 2 "s_register_operand" "w") 3921 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3922 1.1 mrg VCVTBQ_M_F16_F32)) 3923 1.1 mrg ] 3924 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3925 1.1.1.2 mrg "vpst\;vcvtbt.f16.f32\t%q0, %q2" 3926 1.1 mrg [(set_attr "type" "mve_move") 3927 1.1 mrg (set_attr "length""8")]) 3928 1.1 mrg 3929 1.1 mrg ;; 3930 1.1 mrg ;; [vcvtbq_m_f32_f16]) 3931 1.1 mrg ;; 3932 1.1 mrg (define_insn "mve_vcvtbq_m_f32_f16v4sf" 3933 1.1 mrg [ 3934 1.1 mrg (set (match_operand:V4SF 0 "s_register_operand" "=w") 3935 1.1 mrg (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0") 3936 1.1 mrg (match_operand:V8HF 2 "s_register_operand" "w") 3937 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3938 1.1 mrg VCVTBQ_M_F32_F16)) 3939 1.1 mrg ] 3940 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3941 1.1.1.2 mrg "vpst\;vcvtbt.f32.f16\t%q0, %q2" 3942 1.1 mrg [(set_attr "type" "mve_move") 3943 1.1 mrg (set_attr "length""8")]) 3944 1.1 mrg 3945 1.1 mrg ;; 3946 1.1 mrg ;; [vcvttq_m_f16_f32]) 3947 1.1 mrg ;; 3948 1.1 mrg (define_insn "mve_vcvttq_m_f16_f32v8hf" 3949 1.1 mrg [ 3950 1.1 mrg (set (match_operand:V8HF 0 "s_register_operand" "=w") 3951 1.1 mrg (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0") 3952 1.1 mrg (match_operand:V4SF 2 "s_register_operand" "w") 3953 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3954 1.1 mrg VCVTTQ_M_F16_F32)) 3955 1.1 mrg ] 3956 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3957 1.1.1.2 mrg "vpst\;vcvttt.f16.f32\t%q0, %q2" 3958 1.1 mrg [(set_attr "type" "mve_move") 3959 1.1 mrg (set_attr "length""8")]) 3960 1.1 mrg 3961 1.1 mrg ;; 3962 1.1 mrg ;; [vcvttq_m_f32_f16]) 3963 1.1 mrg ;; 3964 1.1 mrg (define_insn "mve_vcvttq_m_f32_f16v4sf" 3965 1.1 mrg [ 3966 1.1 mrg (set (match_operand:V4SF 0 "s_register_operand" "=w") 3967 1.1 mrg (unspec:V4SF [(match_operand:V4SF 1 "s_register_operand" "0") 3968 1.1 mrg (match_operand:V8HF 2 "s_register_operand" "w") 3969 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3970 1.1 mrg VCVTTQ_M_F32_F16)) 3971 1.1 mrg ] 3972 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3973 1.1.1.2 mrg "vpst\;vcvttt.f32.f16\t%q0, %q2" 3974 1.1 mrg [(set_attr "type" "mve_move") 3975 1.1 mrg (set_attr "length""8")]) 3976 1.1 mrg 3977 1.1 mrg ;; 3978 1.1 mrg ;; [vdupq_m_n_f]) 3979 1.1 mrg ;; 3980 1.1 mrg (define_insn "mve_vdupq_m_n_f<mode>" 3981 1.1 mrg [ 3982 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 3983 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 3984 1.1 mrg (match_operand:<V_elem> 2 "s_register_operand" "r") 3985 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 3986 1.1 mrg VDUPQ_M_N_F)) 3987 1.1 mrg ] 3988 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 3989 1.1.1.2 mrg "vpst\;vdupt.%#<V_sz_elem>\t%q0, %2" 3990 1.1 mrg [(set_attr "type" "mve_move") 3991 1.1 mrg (set_attr "length""8")]) 3992 1.1 mrg 3993 1.1 mrg ;; 3994 1.1 mrg ;; [vfmaq_f]) 3995 1.1 mrg ;; 3996 1.1 mrg (define_insn "mve_vfmaq_f<mode>" 3997 1.1 mrg [ 3998 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 3999 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4000 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4001 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w")] 4002 1.1 mrg VFMAQ_F)) 4003 1.1 mrg ] 4004 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4005 1.1 mrg "vfma.f%#<V_sz_elem> %q0, %q2, %q3" 4006 1.1 mrg [(set_attr "type" "mve_move") 4007 1.1 mrg ]) 4008 1.1 mrg 4009 1.1 mrg ;; 4010 1.1 mrg ;; [vfmaq_n_f]) 4011 1.1 mrg ;; 4012 1.1 mrg (define_insn "mve_vfmaq_n_f<mode>" 4013 1.1 mrg [ 4014 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4015 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4016 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4017 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r")] 4018 1.1 mrg VFMAQ_N_F)) 4019 1.1 mrg ] 4020 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4021 1.1 mrg "vfma.f%#<V_sz_elem> %q0, %q2, %3" 4022 1.1 mrg [(set_attr "type" "mve_move") 4023 1.1 mrg ]) 4024 1.1 mrg 4025 1.1 mrg ;; 4026 1.1 mrg ;; [vfmasq_n_f]) 4027 1.1 mrg ;; 4028 1.1 mrg (define_insn "mve_vfmasq_n_f<mode>" 4029 1.1 mrg [ 4030 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4031 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4032 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4033 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r")] 4034 1.1 mrg VFMASQ_N_F)) 4035 1.1 mrg ] 4036 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4037 1.1 mrg "vfmas.f%#<V_sz_elem> %q0, %q2, %3" 4038 1.1 mrg [(set_attr "type" "mve_move") 4039 1.1 mrg ]) 4040 1.1 mrg ;; 4041 1.1 mrg ;; [vfmsq_f]) 4042 1.1 mrg ;; 4043 1.1 mrg (define_insn "mve_vfmsq_f<mode>" 4044 1.1 mrg [ 4045 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4046 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4047 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4048 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w")] 4049 1.1 mrg VFMSQ_F)) 4050 1.1 mrg ] 4051 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4052 1.1 mrg "vfms.f%#<V_sz_elem> %q0, %q2, %q3" 4053 1.1 mrg [(set_attr "type" "mve_move") 4054 1.1 mrg ]) 4055 1.1 mrg 4056 1.1 mrg ;; 4057 1.1 mrg ;; [vmaxnmaq_m_f]) 4058 1.1 mrg ;; 4059 1.1 mrg (define_insn "mve_vmaxnmaq_m_f<mode>" 4060 1.1 mrg [ 4061 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4062 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4063 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4064 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4065 1.1 mrg VMAXNMAQ_M_F)) 4066 1.1 mrg ] 4067 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4068 1.1 mrg "vpst\;vmaxnmat.f%#<V_sz_elem> %q0, %q2" 4069 1.1 mrg [(set_attr "type" "mve_move") 4070 1.1 mrg (set_attr "length""8")]) 4071 1.1 mrg ;; 4072 1.1 mrg ;; [vmaxnmavq_p_f]) 4073 1.1 mrg ;; 4074 1.1 mrg (define_insn "mve_vmaxnmavq_p_f<mode>" 4075 1.1 mrg [ 4076 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 4077 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 4078 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4079 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4080 1.1 mrg VMAXNMAVQ_P_F)) 4081 1.1 mrg ] 4082 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4083 1.1 mrg "vpst\;vmaxnmavt.f%#<V_sz_elem> %0, %q2" 4084 1.1 mrg [(set_attr "type" "mve_move") 4085 1.1 mrg (set_attr "length""8")]) 4086 1.1 mrg 4087 1.1 mrg ;; 4088 1.1 mrg ;; [vmaxnmvq_p_f]) 4089 1.1 mrg ;; 4090 1.1 mrg (define_insn "mve_vmaxnmvq_p_f<mode>" 4091 1.1 mrg [ 4092 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 4093 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 4094 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4095 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4096 1.1 mrg VMAXNMVQ_P_F)) 4097 1.1 mrg ] 4098 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4099 1.1 mrg "vpst\;vmaxnmvt.f%#<V_sz_elem> %0, %q2" 4100 1.1 mrg [(set_attr "type" "mve_move") 4101 1.1 mrg (set_attr "length""8")]) 4102 1.1 mrg ;; 4103 1.1 mrg ;; [vminnmaq_m_f]) 4104 1.1 mrg ;; 4105 1.1 mrg (define_insn "mve_vminnmaq_m_f<mode>" 4106 1.1 mrg [ 4107 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4108 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4109 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4110 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4111 1.1 mrg VMINNMAQ_M_F)) 4112 1.1 mrg ] 4113 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4114 1.1 mrg "vpst\;vminnmat.f%#<V_sz_elem> %q0, %q2" 4115 1.1 mrg [(set_attr "type" "mve_move") 4116 1.1 mrg (set_attr "length""8")]) 4117 1.1 mrg 4118 1.1 mrg ;; 4119 1.1 mrg ;; [vminnmavq_p_f]) 4120 1.1 mrg ;; 4121 1.1 mrg (define_insn "mve_vminnmavq_p_f<mode>" 4122 1.1 mrg [ 4123 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 4124 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 4125 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4126 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4127 1.1 mrg VMINNMAVQ_P_F)) 4128 1.1 mrg ] 4129 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4130 1.1 mrg "vpst\;vminnmavt.f%#<V_sz_elem> %0, %q2" 4131 1.1 mrg [(set_attr "type" "mve_move") 4132 1.1 mrg (set_attr "length""8")]) 4133 1.1 mrg ;; 4134 1.1 mrg ;; [vminnmvq_p_f]) 4135 1.1 mrg ;; 4136 1.1 mrg (define_insn "mve_vminnmvq_p_f<mode>" 4137 1.1 mrg [ 4138 1.1 mrg (set (match_operand:<V_elem> 0 "s_register_operand" "=r") 4139 1.1 mrg (unspec:<V_elem> [(match_operand:<V_elem> 1 "s_register_operand" "0") 4140 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4141 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4142 1.1 mrg VMINNMVQ_P_F)) 4143 1.1 mrg ] 4144 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4145 1.1 mrg "vpst\;vminnmvt.f%#<V_sz_elem> %0, %q2" 4146 1.1 mrg [(set_attr "type" "mve_move") 4147 1.1 mrg (set_attr "length""8")]) 4148 1.1 mrg 4149 1.1 mrg ;; 4150 1.1 mrg ;; [vmlaldavaq_s, vmlaldavaq_u]) 4151 1.1 mrg ;; 4152 1.1 mrg (define_insn "mve_vmlaldavaq_<supf><mode>" 4153 1.1 mrg [ 4154 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4155 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4156 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4157 1.1 mrg (match_operand:MVE_5 3 "s_register_operand" "w")] 4158 1.1 mrg VMLALDAVAQ)) 4159 1.1 mrg ] 4160 1.1 mrg "TARGET_HAVE_MVE" 4161 1.1.1.2 mrg "vmlaldava.<supf>%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 4162 1.1 mrg [(set_attr "type" "mve_move") 4163 1.1 mrg ]) 4164 1.1 mrg 4165 1.1 mrg ;; 4166 1.1 mrg ;; [vmlaldavaxq_s]) 4167 1.1 mrg ;; 4168 1.1 mrg (define_insn "mve_vmlaldavaxq_s<mode>" 4169 1.1 mrg [ 4170 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4171 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4172 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4173 1.1 mrg (match_operand:MVE_5 3 "s_register_operand" "w")] 4174 1.1 mrg VMLALDAVAXQ_S)) 4175 1.1 mrg ] 4176 1.1 mrg "TARGET_HAVE_MVE" 4177 1.1.1.2 mrg "vmlaldavax.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 4178 1.1 mrg [(set_attr "type" "mve_move") 4179 1.1 mrg ]) 4180 1.1 mrg 4181 1.1 mrg ;; 4182 1.1 mrg ;; [vmlaldavq_p_u, vmlaldavq_p_s]) 4183 1.1 mrg ;; 4184 1.1 mrg (define_insn "mve_vmlaldavq_p_<supf><mode>" 4185 1.1 mrg [ 4186 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4187 1.1 mrg (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 4188 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4189 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4190 1.1 mrg VMLALDAVQ_P)) 4191 1.1 mrg ] 4192 1.1 mrg "TARGET_HAVE_MVE" 4193 1.1.1.2 mrg "vpst\;vmlaldavt.<supf>%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 4194 1.1 mrg [(set_attr "type" "mve_move") 4195 1.1 mrg (set_attr "length""8")]) 4196 1.1 mrg 4197 1.1 mrg ;; 4198 1.1 mrg ;; [vmlaldavxq_p_s]) 4199 1.1 mrg ;; 4200 1.1 mrg (define_insn "mve_vmlaldavxq_p_s<mode>" 4201 1.1 mrg [ 4202 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4203 1.1 mrg (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 4204 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4205 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4206 1.1 mrg VMLALDAVXQ_P_S)) 4207 1.1 mrg ] 4208 1.1 mrg "TARGET_HAVE_MVE" 4209 1.1 mrg "vpst\;vmlaldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 4210 1.1 mrg [(set_attr "type" "mve_move") 4211 1.1 mrg (set_attr "length""8")]) 4212 1.1 mrg ;; 4213 1.1 mrg ;; [vmlsldavaq_s]) 4214 1.1 mrg ;; 4215 1.1 mrg (define_insn "mve_vmlsldavaq_s<mode>" 4216 1.1 mrg [ 4217 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4218 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4219 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4220 1.1 mrg (match_operand:MVE_5 3 "s_register_operand" "w")] 4221 1.1 mrg VMLSLDAVAQ_S)) 4222 1.1 mrg ] 4223 1.1 mrg "TARGET_HAVE_MVE" 4224 1.1.1.2 mrg "vmlsldava.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 4225 1.1 mrg [(set_attr "type" "mve_move") 4226 1.1 mrg ]) 4227 1.1 mrg 4228 1.1 mrg ;; 4229 1.1 mrg ;; [vmlsldavaxq_s]) 4230 1.1 mrg ;; 4231 1.1 mrg (define_insn "mve_vmlsldavaxq_s<mode>" 4232 1.1 mrg [ 4233 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4234 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4235 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4236 1.1 mrg (match_operand:MVE_5 3 "s_register_operand" "w")] 4237 1.1 mrg VMLSLDAVAXQ_S)) 4238 1.1 mrg ] 4239 1.1 mrg "TARGET_HAVE_MVE" 4240 1.1.1.2 mrg "vmlsldavax.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 4241 1.1 mrg [(set_attr "type" "mve_move") 4242 1.1 mrg ]) 4243 1.1 mrg 4244 1.1 mrg ;; 4245 1.1 mrg ;; [vmlsldavq_p_s]) 4246 1.1 mrg ;; 4247 1.1 mrg (define_insn "mve_vmlsldavq_p_s<mode>" 4248 1.1 mrg [ 4249 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4250 1.1 mrg (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 4251 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4252 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4253 1.1 mrg VMLSLDAVQ_P_S)) 4254 1.1 mrg ] 4255 1.1 mrg "TARGET_HAVE_MVE" 4256 1.1.1.2 mrg "vpst\;vmlsldavt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 4257 1.1 mrg [(set_attr "type" "mve_move") 4258 1.1 mrg (set_attr "length""8")]) 4259 1.1 mrg 4260 1.1 mrg ;; 4261 1.1 mrg ;; [vmlsldavxq_p_s]) 4262 1.1 mrg ;; 4263 1.1 mrg (define_insn "mve_vmlsldavxq_p_s<mode>" 4264 1.1 mrg [ 4265 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4266 1.1 mrg (unspec:DI [(match_operand:MVE_5 1 "s_register_operand" "w") 4267 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4268 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4269 1.1 mrg VMLSLDAVXQ_P_S)) 4270 1.1 mrg ] 4271 1.1 mrg "TARGET_HAVE_MVE" 4272 1.1.1.2 mrg "vpst\;vmlsldavxt.s%#<V_sz_elem>\t%Q0, %R0, %q1, %q2" 4273 1.1 mrg [(set_attr "type" "mve_move") 4274 1.1 mrg (set_attr "length""8")]) 4275 1.1 mrg ;; 4276 1.1 mrg ;; [vmovlbq_m_u, vmovlbq_m_s]) 4277 1.1 mrg ;; 4278 1.1 mrg (define_insn "mve_vmovlbq_m_<supf><mode>" 4279 1.1 mrg [ 4280 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 4281 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 4282 1.1 mrg (match_operand:MVE_3 2 "s_register_operand" "w") 4283 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4284 1.1 mrg VMOVLBQ_M)) 4285 1.1 mrg ] 4286 1.1 mrg "TARGET_HAVE_MVE" 4287 1.1 mrg "vpst\;vmovlbt.<supf>%#<V_sz_elem> %q0, %q2" 4288 1.1 mrg [(set_attr "type" "mve_move") 4289 1.1 mrg (set_attr "length""8")]) 4290 1.1 mrg ;; 4291 1.1 mrg ;; [vmovltq_m_u, vmovltq_m_s]) 4292 1.1 mrg ;; 4293 1.1 mrg (define_insn "mve_vmovltq_m_<supf><mode>" 4294 1.1 mrg [ 4295 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 4296 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 4297 1.1 mrg (match_operand:MVE_3 2 "s_register_operand" "w") 4298 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4299 1.1 mrg VMOVLTQ_M)) 4300 1.1 mrg ] 4301 1.1 mrg "TARGET_HAVE_MVE" 4302 1.1 mrg "vpst\;vmovltt.<supf>%#<V_sz_elem> %q0, %q2" 4303 1.1 mrg [(set_attr "type" "mve_move") 4304 1.1 mrg (set_attr "length""8")]) 4305 1.1 mrg ;; 4306 1.1 mrg ;; [vmovnbq_m_u, vmovnbq_m_s]) 4307 1.1 mrg ;; 4308 1.1 mrg (define_insn "mve_vmovnbq_m_<supf><mode>" 4309 1.1 mrg [ 4310 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4311 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4312 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4313 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4314 1.1 mrg VMOVNBQ_M)) 4315 1.1 mrg ] 4316 1.1 mrg "TARGET_HAVE_MVE" 4317 1.1 mrg "vpst\;vmovnbt.i%#<V_sz_elem> %q0, %q2" 4318 1.1 mrg [(set_attr "type" "mve_move") 4319 1.1 mrg (set_attr "length""8")]) 4320 1.1 mrg 4321 1.1 mrg ;; 4322 1.1 mrg ;; [vmovntq_m_u, vmovntq_m_s]) 4323 1.1 mrg ;; 4324 1.1 mrg (define_insn "mve_vmovntq_m_<supf><mode>" 4325 1.1 mrg [ 4326 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4327 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4328 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4329 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4330 1.1 mrg VMOVNTQ_M)) 4331 1.1 mrg ] 4332 1.1 mrg "TARGET_HAVE_MVE" 4333 1.1 mrg "vpst\;vmovntt.i%#<V_sz_elem> %q0, %q2" 4334 1.1 mrg [(set_attr "type" "mve_move") 4335 1.1 mrg (set_attr "length""8")]) 4336 1.1 mrg 4337 1.1 mrg ;; 4338 1.1 mrg ;; [vmvnq_m_n_u, vmvnq_m_n_s]) 4339 1.1 mrg ;; 4340 1.1 mrg (define_insn "mve_vmvnq_m_n_<supf><mode>" 4341 1.1 mrg [ 4342 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4343 1.1 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4344 1.1 mrg (match_operand:SI 2 "immediate_operand" "i") 4345 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4346 1.1 mrg VMVNQ_M_N)) 4347 1.1 mrg ] 4348 1.1 mrg "TARGET_HAVE_MVE" 4349 1.1.1.2 mrg "vpst\;vmvnt.i%#<V_sz_elem>\t%q0, %2" 4350 1.1 mrg [(set_attr "type" "mve_move") 4351 1.1 mrg (set_attr "length""8")]) 4352 1.1 mrg ;; 4353 1.1 mrg ;; [vnegq_m_f]) 4354 1.1 mrg ;; 4355 1.1 mrg (define_insn "mve_vnegq_m_f<mode>" 4356 1.1 mrg [ 4357 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4358 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4359 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4360 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4361 1.1 mrg VNEGQ_M_F)) 4362 1.1 mrg ] 4363 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4364 1.1 mrg "vpst\;vnegt.f%#<V_sz_elem> %q0, %q2" 4365 1.1 mrg [(set_attr "type" "mve_move") 4366 1.1 mrg (set_attr "length""8")]) 4367 1.1 mrg 4368 1.1 mrg ;; 4369 1.1 mrg ;; [vorrq_m_n_s, vorrq_m_n_u]) 4370 1.1 mrg ;; 4371 1.1 mrg (define_insn "mve_vorrq_m_n_<supf><mode>" 4372 1.1 mrg [ 4373 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4374 1.1 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4375 1.1 mrg (match_operand:SI 2 "immediate_operand" "i") 4376 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4377 1.1 mrg VORRQ_M_N)) 4378 1.1 mrg ] 4379 1.1 mrg "TARGET_HAVE_MVE" 4380 1.1.1.2 mrg "vpst\;vorrt.i%#<V_sz_elem>\t%q0, %2" 4381 1.1 mrg [(set_attr "type" "mve_move") 4382 1.1 mrg (set_attr "length""8")]) 4383 1.1 mrg ;; 4384 1.1 mrg ;; [vpselq_f]) 4385 1.1 mrg ;; 4386 1.1.1.2 mrg (define_insn "@mve_vpselq_f<mode>" 4387 1.1 mrg [ 4388 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4389 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "w") 4390 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4391 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4392 1.1 mrg VPSELQ_F)) 4393 1.1 mrg ] 4394 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4395 1.1.1.2 mrg "vpsel\t%q0, %q1, %q2" 4396 1.1 mrg [(set_attr "type" "mve_move") 4397 1.1 mrg ]) 4398 1.1 mrg 4399 1.1 mrg ;; 4400 1.1 mrg ;; [vqmovnbq_m_s, vqmovnbq_m_u]) 4401 1.1 mrg ;; 4402 1.1 mrg (define_insn "mve_vqmovnbq_m_<supf><mode>" 4403 1.1 mrg [ 4404 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4405 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4406 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4407 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4408 1.1 mrg VQMOVNBQ_M)) 4409 1.1 mrg ] 4410 1.1 mrg "TARGET_HAVE_MVE" 4411 1.1 mrg "vpst\;vqmovnbt.<supf>%#<V_sz_elem> %q0, %q2" 4412 1.1 mrg [(set_attr "type" "mve_move") 4413 1.1 mrg (set_attr "length""8")]) 4414 1.1 mrg 4415 1.1 mrg ;; 4416 1.1 mrg ;; [vqmovntq_m_u, vqmovntq_m_s]) 4417 1.1 mrg ;; 4418 1.1 mrg (define_insn "mve_vqmovntq_m_<supf><mode>" 4419 1.1 mrg [ 4420 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4421 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4422 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4423 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4424 1.1 mrg VQMOVNTQ_M)) 4425 1.1 mrg ] 4426 1.1 mrg "TARGET_HAVE_MVE" 4427 1.1 mrg "vpst\;vqmovntt.<supf>%#<V_sz_elem> %q0, %q2" 4428 1.1 mrg [(set_attr "type" "mve_move") 4429 1.1 mrg (set_attr "length""8")]) 4430 1.1 mrg 4431 1.1 mrg ;; 4432 1.1 mrg ;; [vqmovunbq_m_s]) 4433 1.1 mrg ;; 4434 1.1 mrg (define_insn "mve_vqmovunbq_m_s<mode>" 4435 1.1 mrg [ 4436 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4437 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4438 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4439 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4440 1.1 mrg VQMOVUNBQ_M_S)) 4441 1.1 mrg ] 4442 1.1 mrg "TARGET_HAVE_MVE" 4443 1.1 mrg "vpst\;vqmovunbt.s%#<V_sz_elem> %q0, %q2" 4444 1.1 mrg [(set_attr "type" "mve_move") 4445 1.1 mrg (set_attr "length""8")]) 4446 1.1 mrg 4447 1.1 mrg ;; 4448 1.1 mrg ;; [vqmovuntq_m_s]) 4449 1.1 mrg ;; 4450 1.1 mrg (define_insn "mve_vqmovuntq_m_s<mode>" 4451 1.1 mrg [ 4452 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4453 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4454 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4455 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4456 1.1 mrg VQMOVUNTQ_M_S)) 4457 1.1 mrg ] 4458 1.1 mrg "TARGET_HAVE_MVE" 4459 1.1 mrg "vpst\;vqmovuntt.s%#<V_sz_elem> %q0, %q2" 4460 1.1 mrg [(set_attr "type" "mve_move") 4461 1.1 mrg (set_attr "length""8")]) 4462 1.1 mrg 4463 1.1 mrg ;; 4464 1.1 mrg ;; [vqrshrntq_n_u, vqrshrntq_n_s]) 4465 1.1 mrg ;; 4466 1.1 mrg (define_insn "mve_vqrshrntq_n_<supf><mode>" 4467 1.1 mrg [ 4468 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4469 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4470 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4471 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4472 1.1 mrg VQRSHRNTQ_N)) 4473 1.1 mrg ] 4474 1.1 mrg "TARGET_HAVE_MVE" 4475 1.1 mrg "vqrshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3" 4476 1.1 mrg [(set_attr "type" "mve_move") 4477 1.1 mrg ]) 4478 1.1 mrg 4479 1.1 mrg ;; 4480 1.1 mrg ;; [vqrshruntq_n_s]) 4481 1.1 mrg ;; 4482 1.1 mrg (define_insn "mve_vqrshruntq_n_s<mode>" 4483 1.1 mrg [ 4484 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4485 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4486 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4487 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4488 1.1 mrg VQRSHRUNTQ_N_S)) 4489 1.1 mrg ] 4490 1.1 mrg "TARGET_HAVE_MVE" 4491 1.1 mrg "vqrshrunt.s%#<V_sz_elem> %q0, %q2, %3" 4492 1.1 mrg [(set_attr "type" "mve_move") 4493 1.1 mrg ]) 4494 1.1 mrg 4495 1.1 mrg ;; 4496 1.1 mrg ;; [vqshrnbq_n_u, vqshrnbq_n_s]) 4497 1.1 mrg ;; 4498 1.1 mrg (define_insn "mve_vqshrnbq_n_<supf><mode>" 4499 1.1 mrg [ 4500 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4501 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4502 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4503 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4504 1.1 mrg VQSHRNBQ_N)) 4505 1.1 mrg ] 4506 1.1 mrg "TARGET_HAVE_MVE" 4507 1.1 mrg "vqshrnb.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 4508 1.1 mrg [(set_attr "type" "mve_move") 4509 1.1 mrg ]) 4510 1.1 mrg 4511 1.1 mrg ;; 4512 1.1 mrg ;; [vqshrntq_n_u, vqshrntq_n_s]) 4513 1.1 mrg ;; 4514 1.1 mrg (define_insn "mve_vqshrntq_n_<supf><mode>" 4515 1.1 mrg [ 4516 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4517 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4518 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4519 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4520 1.1 mrg VQSHRNTQ_N)) 4521 1.1 mrg ] 4522 1.1 mrg "TARGET_HAVE_MVE" 4523 1.1 mrg "vqshrnt.<supf>%#<V_sz_elem> %q0, %q2, %3" 4524 1.1 mrg [(set_attr "type" "mve_move") 4525 1.1 mrg ]) 4526 1.1 mrg 4527 1.1 mrg ;; 4528 1.1 mrg ;; [vqshrunbq_n_s]) 4529 1.1 mrg ;; 4530 1.1 mrg (define_insn "mve_vqshrunbq_n_s<mode>" 4531 1.1 mrg [ 4532 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4533 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4534 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4535 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4536 1.1 mrg VQSHRUNBQ_N_S)) 4537 1.1 mrg ] 4538 1.1 mrg "TARGET_HAVE_MVE" 4539 1.1 mrg "vqshrunb.s%#<V_sz_elem> %q0, %q2, %3" 4540 1.1 mrg [(set_attr "type" "mve_move") 4541 1.1 mrg ]) 4542 1.1 mrg 4543 1.1 mrg ;; 4544 1.1 mrg ;; [vqshruntq_n_s]) 4545 1.1 mrg ;; 4546 1.1 mrg (define_insn "mve_vqshruntq_n_s<mode>" 4547 1.1 mrg [ 4548 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4549 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4550 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4551 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4552 1.1 mrg VQSHRUNTQ_N_S)) 4553 1.1 mrg ] 4554 1.1 mrg "TARGET_HAVE_MVE" 4555 1.1 mrg "vqshrunt.s%#<V_sz_elem> %q0, %q2, %3" 4556 1.1 mrg [(set_attr "type" "mve_move") 4557 1.1 mrg ]) 4558 1.1 mrg 4559 1.1 mrg ;; 4560 1.1 mrg ;; [vrev32q_m_f]) 4561 1.1 mrg ;; 4562 1.1 mrg (define_insn "mve_vrev32q_m_fv8hf" 4563 1.1 mrg [ 4564 1.1 mrg (set (match_operand:V8HF 0 "s_register_operand" "=w") 4565 1.1 mrg (unspec:V8HF [(match_operand:V8HF 1 "s_register_operand" "0") 4566 1.1 mrg (match_operand:V8HF 2 "s_register_operand" "w") 4567 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4568 1.1 mrg VREV32Q_M_F)) 4569 1.1 mrg ] 4570 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4571 1.1.1.2 mrg "vpst\;vrev32t.16\t%q0, %q2" 4572 1.1 mrg [(set_attr "type" "mve_move") 4573 1.1 mrg (set_attr "length""8")]) 4574 1.1 mrg 4575 1.1 mrg ;; 4576 1.1 mrg ;; [vrev32q_m_s, vrev32q_m_u]) 4577 1.1 mrg ;; 4578 1.1 mrg (define_insn "mve_vrev32q_m_<supf><mode>" 4579 1.1 mrg [ 4580 1.1 mrg (set (match_operand:MVE_3 0 "s_register_operand" "=w") 4581 1.1 mrg (unspec:MVE_3 [(match_operand:MVE_3 1 "s_register_operand" "0") 4582 1.1 mrg (match_operand:MVE_3 2 "s_register_operand" "w") 4583 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4584 1.1 mrg VREV32Q_M)) 4585 1.1 mrg ] 4586 1.1 mrg "TARGET_HAVE_MVE" 4587 1.1.1.2 mrg "vpst\;vrev32t.%#<V_sz_elem>\t%q0, %q2" 4588 1.1 mrg [(set_attr "type" "mve_move") 4589 1.1 mrg (set_attr "length""8")]) 4590 1.1 mrg 4591 1.1 mrg ;; 4592 1.1 mrg ;; [vrev64q_m_f]) 4593 1.1 mrg ;; 4594 1.1 mrg (define_insn "mve_vrev64q_m_f<mode>" 4595 1.1 mrg [ 4596 1.1.1.2 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=&w") 4597 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4598 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4599 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4600 1.1 mrg VREV64Q_M_F)) 4601 1.1 mrg ] 4602 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4603 1.1.1.2 mrg "vpst\;vrev64t.%#<V_sz_elem>\t%q0, %q2" 4604 1.1 mrg [(set_attr "type" "mve_move") 4605 1.1 mrg (set_attr "length""8")]) 4606 1.1 mrg 4607 1.1 mrg ;; 4608 1.1 mrg ;; [vrmlaldavhaxq_s]) 4609 1.1 mrg ;; 4610 1.1 mrg (define_insn "mve_vrmlaldavhaxq_sv4si" 4611 1.1 mrg [ 4612 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4613 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4614 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 4615 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w")] 4616 1.1 mrg VRMLALDAVHAXQ_S)) 4617 1.1 mrg ] 4618 1.1 mrg "TARGET_HAVE_MVE" 4619 1.1.1.2 mrg "vrmlaldavhax.s32\t%Q0, %R0, %q2, %q3" 4620 1.1 mrg [(set_attr "type" "mve_move") 4621 1.1 mrg ]) 4622 1.1 mrg 4623 1.1 mrg ;; 4624 1.1 mrg ;; [vrmlaldavhxq_p_s]) 4625 1.1 mrg ;; 4626 1.1 mrg (define_insn "mve_vrmlaldavhxq_p_sv4si" 4627 1.1 mrg [ 4628 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4629 1.1 mrg (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 4630 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 4631 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4632 1.1 mrg VRMLALDAVHXQ_P_S)) 4633 1.1 mrg ] 4634 1.1 mrg "TARGET_HAVE_MVE" 4635 1.1.1.2 mrg "vpst\;vrmlaldavhxt.s32\t%Q0, %R0, %q1, %q2" 4636 1.1 mrg [(set_attr "type" "mve_move") 4637 1.1 mrg (set_attr "length""8")]) 4638 1.1 mrg 4639 1.1 mrg ;; 4640 1.1 mrg ;; [vrmlsldavhaxq_s]) 4641 1.1 mrg ;; 4642 1.1 mrg (define_insn "mve_vrmlsldavhaxq_sv4si" 4643 1.1 mrg [ 4644 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4645 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4646 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 4647 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w")] 4648 1.1 mrg VRMLSLDAVHAXQ_S)) 4649 1.1 mrg ] 4650 1.1 mrg "TARGET_HAVE_MVE" 4651 1.1.1.2 mrg "vrmlsldavhax.s32\t%Q0, %R0, %q2, %q3" 4652 1.1 mrg [(set_attr "type" "mve_move") 4653 1.1 mrg ]) 4654 1.1 mrg 4655 1.1 mrg ;; 4656 1.1 mrg ;; [vrmlsldavhq_p_s]) 4657 1.1 mrg ;; 4658 1.1 mrg (define_insn "mve_vrmlsldavhq_p_sv4si" 4659 1.1 mrg [ 4660 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4661 1.1 mrg (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 4662 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 4663 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4664 1.1 mrg VRMLSLDAVHQ_P_S)) 4665 1.1 mrg ] 4666 1.1 mrg "TARGET_HAVE_MVE" 4667 1.1.1.2 mrg "vpst\;vrmlsldavht.s32\t%Q0, %R0, %q1, %q2" 4668 1.1 mrg [(set_attr "type" "mve_move") 4669 1.1 mrg (set_attr "length""8")]) 4670 1.1 mrg 4671 1.1 mrg ;; 4672 1.1 mrg ;; [vrmlsldavhxq_p_s]) 4673 1.1 mrg ;; 4674 1.1 mrg (define_insn "mve_vrmlsldavhxq_p_sv4si" 4675 1.1 mrg [ 4676 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4677 1.1 mrg (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 4678 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 4679 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4680 1.1 mrg VRMLSLDAVHXQ_P_S)) 4681 1.1 mrg ] 4682 1.1 mrg "TARGET_HAVE_MVE" 4683 1.1.1.2 mrg "vpst\;vrmlsldavhxt.s32\t%Q0, %R0, %q1, %q2" 4684 1.1 mrg [(set_attr "type" "mve_move") 4685 1.1 mrg (set_attr "length""8")]) 4686 1.1 mrg 4687 1.1 mrg ;; 4688 1.1 mrg ;; [vrndaq_m_f]) 4689 1.1 mrg ;; 4690 1.1 mrg (define_insn "mve_vrndaq_m_f<mode>" 4691 1.1 mrg [ 4692 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4693 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4694 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4695 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4696 1.1 mrg VRNDAQ_M_F)) 4697 1.1 mrg ] 4698 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4699 1.1 mrg "vpst\;vrintat.f%#<V_sz_elem> %q0, %q2" 4700 1.1 mrg [(set_attr "type" "mve_move") 4701 1.1 mrg (set_attr "length""8")]) 4702 1.1 mrg 4703 1.1 mrg ;; 4704 1.1 mrg ;; [vrndmq_m_f]) 4705 1.1 mrg ;; 4706 1.1 mrg (define_insn "mve_vrndmq_m_f<mode>" 4707 1.1 mrg [ 4708 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4709 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4710 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4711 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4712 1.1 mrg VRNDMQ_M_F)) 4713 1.1 mrg ] 4714 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4715 1.1 mrg "vpst\;vrintmt.f%#<V_sz_elem> %q0, %q2" 4716 1.1 mrg [(set_attr "type" "mve_move") 4717 1.1 mrg (set_attr "length""8")]) 4718 1.1 mrg 4719 1.1 mrg ;; 4720 1.1 mrg ;; [vrndnq_m_f]) 4721 1.1 mrg ;; 4722 1.1 mrg (define_insn "mve_vrndnq_m_f<mode>" 4723 1.1 mrg [ 4724 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4725 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4726 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4727 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4728 1.1 mrg VRNDNQ_M_F)) 4729 1.1 mrg ] 4730 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4731 1.1 mrg "vpst\;vrintnt.f%#<V_sz_elem> %q0, %q2" 4732 1.1 mrg [(set_attr "type" "mve_move") 4733 1.1 mrg (set_attr "length""8")]) 4734 1.1 mrg 4735 1.1 mrg ;; 4736 1.1 mrg ;; [vrndpq_m_f]) 4737 1.1 mrg ;; 4738 1.1 mrg (define_insn "mve_vrndpq_m_f<mode>" 4739 1.1 mrg [ 4740 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4741 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4742 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4743 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4744 1.1 mrg VRNDPQ_M_F)) 4745 1.1 mrg ] 4746 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4747 1.1 mrg "vpst\;vrintpt.f%#<V_sz_elem> %q0, %q2" 4748 1.1 mrg [(set_attr "type" "mve_move") 4749 1.1 mrg (set_attr "length""8")]) 4750 1.1 mrg 4751 1.1 mrg ;; 4752 1.1 mrg ;; [vrndxq_m_f]) 4753 1.1 mrg ;; 4754 1.1 mrg (define_insn "mve_vrndxq_m_f<mode>" 4755 1.1 mrg [ 4756 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 4757 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 4758 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 4759 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4760 1.1 mrg VRNDXQ_M_F)) 4761 1.1 mrg ] 4762 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4763 1.1 mrg "vpst\;vrintxt.f%#<V_sz_elem> %q0, %q2" 4764 1.1 mrg [(set_attr "type" "mve_move") 4765 1.1 mrg (set_attr "length""8")]) 4766 1.1 mrg 4767 1.1 mrg ;; 4768 1.1 mrg ;; [vrshrnbq_n_s, vrshrnbq_n_u]) 4769 1.1 mrg ;; 4770 1.1 mrg (define_insn "mve_vrshrnbq_n_<supf><mode>" 4771 1.1 mrg [ 4772 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4773 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4774 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4775 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4776 1.1 mrg VRSHRNBQ_N)) 4777 1.1 mrg ] 4778 1.1 mrg "TARGET_HAVE_MVE" 4779 1.1 mrg "vrshrnb.i%#<V_sz_elem> %q0, %q2, %3" 4780 1.1 mrg [(set_attr "type" "mve_move") 4781 1.1 mrg ]) 4782 1.1 mrg 4783 1.1 mrg ;; 4784 1.1 mrg ;; [vrshrntq_n_u, vrshrntq_n_s]) 4785 1.1 mrg ;; 4786 1.1 mrg (define_insn "mve_vrshrntq_n_<supf><mode>" 4787 1.1 mrg [ 4788 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4789 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4790 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4791 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4792 1.1 mrg VRSHRNTQ_N)) 4793 1.1 mrg ] 4794 1.1 mrg "TARGET_HAVE_MVE" 4795 1.1 mrg "vrshrnt.i%#<V_sz_elem> %q0, %q2, %3" 4796 1.1 mrg [(set_attr "type" "mve_move") 4797 1.1 mrg ]) 4798 1.1 mrg 4799 1.1 mrg ;; 4800 1.1 mrg ;; [vshrnbq_n_u, vshrnbq_n_s]) 4801 1.1 mrg ;; 4802 1.1 mrg (define_insn "mve_vshrnbq_n_<supf><mode>" 4803 1.1 mrg [ 4804 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4805 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4806 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4807 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4808 1.1 mrg VSHRNBQ_N)) 4809 1.1 mrg ] 4810 1.1 mrg "TARGET_HAVE_MVE" 4811 1.1 mrg "vshrnb.i%#<V_sz_elem> %q0, %q2, %3" 4812 1.1 mrg [(set_attr "type" "mve_move") 4813 1.1 mrg ]) 4814 1.1 mrg 4815 1.1 mrg ;; 4816 1.1 mrg ;; [vshrntq_n_s, vshrntq_n_u]) 4817 1.1 mrg ;; 4818 1.1 mrg (define_insn "mve_vshrntq_n_<supf><mode>" 4819 1.1 mrg [ 4820 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 4821 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 4822 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 4823 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>")] 4824 1.1 mrg VSHRNTQ_N)) 4825 1.1 mrg ] 4826 1.1 mrg "TARGET_HAVE_MVE" 4827 1.1 mrg "vshrnt.i%#<V_sz_elem>\t%q0, %q2, %3" 4828 1.1 mrg [(set_attr "type" "mve_move") 4829 1.1 mrg ]) 4830 1.1 mrg 4831 1.1 mrg ;; 4832 1.1 mrg ;; [vcvtmq_m_s, vcvtmq_m_u]) 4833 1.1 mrg ;; 4834 1.1 mrg (define_insn "mve_vcvtmq_m_<supf><mode>" 4835 1.1 mrg [ 4836 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4837 1.1 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4838 1.1 mrg (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 4839 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4840 1.1 mrg VCVTMQ_M)) 4841 1.1 mrg ] 4842 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4843 1.1 mrg "vpst\;vcvtmt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2" 4844 1.1 mrg [(set_attr "type" "mve_move") 4845 1.1 mrg (set_attr "length""8")]) 4846 1.1 mrg 4847 1.1 mrg ;; 4848 1.1 mrg ;; [vcvtpq_m_u, vcvtpq_m_s]) 4849 1.1 mrg ;; 4850 1.1 mrg (define_insn "mve_vcvtpq_m_<supf><mode>" 4851 1.1 mrg [ 4852 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4853 1.1 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4854 1.1 mrg (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 4855 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4856 1.1 mrg VCVTPQ_M)) 4857 1.1 mrg ] 4858 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4859 1.1 mrg "vpst\;vcvtpt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2" 4860 1.1 mrg [(set_attr "type" "mve_move") 4861 1.1 mrg (set_attr "length""8")]) 4862 1.1 mrg 4863 1.1 mrg ;; 4864 1.1 mrg ;; [vcvtnq_m_s, vcvtnq_m_u]) 4865 1.1 mrg ;; 4866 1.1 mrg (define_insn "mve_vcvtnq_m_<supf><mode>" 4867 1.1 mrg [ 4868 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4869 1.1 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4870 1.1 mrg (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 4871 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4872 1.1 mrg VCVTNQ_M)) 4873 1.1 mrg ] 4874 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4875 1.1 mrg "vpst\;vcvtnt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2" 4876 1.1 mrg [(set_attr "type" "mve_move") 4877 1.1 mrg (set_attr "length""8")]) 4878 1.1 mrg 4879 1.1 mrg ;; 4880 1.1 mrg ;; [vcvtq_m_n_from_f_s, vcvtq_m_n_from_f_u]) 4881 1.1 mrg ;; 4882 1.1 mrg (define_insn "mve_vcvtq_m_n_from_f_<supf><mode>" 4883 1.1 mrg [ 4884 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4885 1.1 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4886 1.1 mrg (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 4887 1.1 mrg (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>") 4888 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 4889 1.1 mrg VCVTQ_M_N_FROM_F)) 4890 1.1 mrg ] 4891 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4892 1.1 mrg "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2, %3" 4893 1.1 mrg [(set_attr "type" "mve_move") 4894 1.1 mrg (set_attr "length""8")]) 4895 1.1 mrg 4896 1.1 mrg ;; 4897 1.1 mrg ;; [vrev16q_m_u, vrev16q_m_s]) 4898 1.1 mrg ;; 4899 1.1 mrg (define_insn "mve_vrev16q_m_<supf>v16qi" 4900 1.1 mrg [ 4901 1.1 mrg (set (match_operand:V16QI 0 "s_register_operand" "=w") 4902 1.1 mrg (unspec:V16QI [(match_operand:V16QI 1 "s_register_operand" "0") 4903 1.1 mrg (match_operand:V16QI 2 "s_register_operand" "w") 4904 1.1.1.2 mrg (match_operand:V16BI 3 "vpr_register_operand" "Up")] 4905 1.1 mrg VREV16Q_M)) 4906 1.1 mrg ] 4907 1.1 mrg "TARGET_HAVE_MVE" 4908 1.1.1.2 mrg "vpst\;vrev16t.8\t%q0, %q2" 4909 1.1 mrg [(set_attr "type" "mve_move") 4910 1.1 mrg (set_attr "length""8")]) 4911 1.1 mrg 4912 1.1 mrg ;; 4913 1.1 mrg ;; [vcvtq_m_from_f_u, vcvtq_m_from_f_s]) 4914 1.1 mrg ;; 4915 1.1 mrg (define_insn "mve_vcvtq_m_from_f_<supf><mode>" 4916 1.1 mrg [ 4917 1.1 mrg (set (match_operand:MVE_5 0 "s_register_operand" "=w") 4918 1.1 mrg (unspec:MVE_5 [(match_operand:MVE_5 1 "s_register_operand" "0") 4919 1.1 mrg (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 4920 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 4921 1.1 mrg VCVTQ_M_FROM_F)) 4922 1.1 mrg ] 4923 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 4924 1.1 mrg "vpst\;vcvtt.<supf>%#<V_sz_elem>.f%#<V_sz_elem>\t%q0, %q2" 4925 1.1 mrg [(set_attr "type" "mve_move") 4926 1.1 mrg (set_attr "length""8")]) 4927 1.1 mrg 4928 1.1 mrg ;; 4929 1.1 mrg ;; [vrmlaldavhq_p_u vrmlaldavhq_p_s]) 4930 1.1 mrg ;; 4931 1.1 mrg (define_insn "mve_vrmlaldavhq_p_<supf>v4si" 4932 1.1 mrg [ 4933 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4934 1.1 mrg (unspec:DI [(match_operand:V4SI 1 "s_register_operand" "w") 4935 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 4936 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 4937 1.1 mrg VRMLALDAVHQ_P)) 4938 1.1 mrg ] 4939 1.1 mrg "TARGET_HAVE_MVE" 4940 1.1.1.2 mrg "vpst\;vrmlaldavht.<supf>32\t%Q0, %R0, %q1, %q2" 4941 1.1 mrg [(set_attr "type" "mve_move") 4942 1.1 mrg (set_attr "length""8")]) 4943 1.1 mrg 4944 1.1 mrg ;; 4945 1.1 mrg ;; [vrmlsldavhaq_s]) 4946 1.1 mrg ;; 4947 1.1 mrg (define_insn "mve_vrmlsldavhaq_sv4si" 4948 1.1 mrg [ 4949 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 4950 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 4951 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 4952 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w")] 4953 1.1 mrg VRMLSLDAVHAQ_S)) 4954 1.1 mrg ] 4955 1.1 mrg "TARGET_HAVE_MVE" 4956 1.1.1.2 mrg "vrmlsldavha.s32\t%Q0, %R0, %q2, %q3" 4957 1.1 mrg [(set_attr "type" "mve_move") 4958 1.1 mrg ]) 4959 1.1 mrg 4960 1.1 mrg ;; 4961 1.1 mrg ;; [vabavq_p_s, vabavq_p_u]) 4962 1.1 mrg ;; 4963 1.1 mrg (define_insn "mve_vabavq_p_<supf><mode>" 4964 1.1 mrg [ 4965 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=r") 4966 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 4967 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 4968 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 4969 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 4970 1.1 mrg VABAVQ_P)) 4971 1.1 mrg ] 4972 1.1 mrg "TARGET_HAVE_MVE" 4973 1.1 mrg "vpst\;vabavt.<supf>%#<V_sz_elem>\t%0, %q2, %q3" 4974 1.1 mrg [(set_attr "type" "mve_move") 4975 1.1.1.2 mrg (set_attr "length" "8")]) 4976 1.1 mrg 4977 1.1 mrg ;; 4978 1.1 mrg ;; [vqshluq_m_n_s]) 4979 1.1 mrg ;; 4980 1.1 mrg (define_insn "mve_vqshluq_m_n_s<mode>" 4981 1.1 mrg [ 4982 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 4983 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 4984 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 4985 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>") 4986 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 4987 1.1 mrg VQSHLUQ_M_N_S)) 4988 1.1 mrg ] 4989 1.1 mrg "TARGET_HAVE_MVE" 4990 1.1 mrg "vpst\n\tvqshlut.s%#<V_sz_elem>\t%q0, %q2, %3" 4991 1.1.1.2 mrg [(set_attr "type" "mve_move") 4992 1.1.1.2 mrg (set_attr "length" "8")]) 4993 1.1 mrg 4994 1.1 mrg ;; 4995 1.1 mrg ;; [vshlq_m_s, vshlq_m_u]) 4996 1.1 mrg ;; 4997 1.1 mrg (define_insn "mve_vshlq_m_<supf><mode>" 4998 1.1 mrg [ 4999 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5000 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5001 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5002 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5003 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5004 1.1 mrg VSHLQ_M)) 5005 1.1 mrg ] 5006 1.1 mrg "TARGET_HAVE_MVE" 5007 1.1 mrg "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5008 1.1.1.2 mrg [(set_attr "type" "mve_move") 5009 1.1.1.2 mrg (set_attr "length" "8")]) 5010 1.1 mrg 5011 1.1 mrg ;; 5012 1.1 mrg ;; [vsriq_m_n_s, vsriq_m_n_u]) 5013 1.1 mrg ;; 5014 1.1 mrg (define_insn "mve_vsriq_m_n_<supf><mode>" 5015 1.1 mrg [ 5016 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5017 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5018 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5019 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>") 5020 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5021 1.1 mrg VSRIQ_M_N)) 5022 1.1 mrg ] 5023 1.1 mrg "TARGET_HAVE_MVE" 5024 1.1 mrg "vpst\;vsrit.%#<V_sz_elem>\t%q0, %q2, %3" 5025 1.1.1.2 mrg [(set_attr "type" "mve_move") 5026 1.1.1.2 mrg (set_attr "length" "8")]) 5027 1.1 mrg 5028 1.1 mrg ;; 5029 1.1 mrg ;; [vsubq_m_u, vsubq_m_s]) 5030 1.1 mrg ;; 5031 1.1 mrg (define_insn "mve_vsubq_m_<supf><mode>" 5032 1.1 mrg [ 5033 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5034 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5035 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5036 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5037 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5038 1.1 mrg VSUBQ_M)) 5039 1.1 mrg ] 5040 1.1 mrg "TARGET_HAVE_MVE" 5041 1.1 mrg "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %q3" 5042 1.1.1.2 mrg [(set_attr "type" "mve_move") 5043 1.1.1.2 mrg (set_attr "length" "8")]) 5044 1.1 mrg 5045 1.1 mrg ;; 5046 1.1 mrg ;; [vcvtq_m_n_to_f_u, vcvtq_m_n_to_f_s]) 5047 1.1 mrg ;; 5048 1.1 mrg (define_insn "mve_vcvtq_m_n_to_f_<supf><mode>" 5049 1.1 mrg [ 5050 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 5051 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 5052 1.1 mrg (match_operand:<MVE_CNVT> 2 "s_register_operand" "w") 5053 1.1 mrg (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>") 5054 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5055 1.1 mrg VCVTQ_M_N_TO_F)) 5056 1.1 mrg ] 5057 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 5058 1.1 mrg "vpst\;vcvtt.f%#<V_sz_elem>.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5059 1.1 mrg [(set_attr "type" "mve_move") 5060 1.1 mrg (set_attr "length""8")]) 5061 1.1 mrg ;; 5062 1.1 mrg ;; [vabdq_m_s, vabdq_m_u]) 5063 1.1 mrg ;; 5064 1.1 mrg (define_insn "mve_vabdq_m_<supf><mode>" 5065 1.1 mrg [ 5066 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5067 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5068 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5069 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5070 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5071 1.1 mrg VABDQ_M)) 5072 1.1 mrg ] 5073 1.1 mrg "TARGET_HAVE_MVE" 5074 1.1 mrg "vpst\;vabdt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5075 1.1 mrg [(set_attr "type" "mve_move") 5076 1.1 mrg (set_attr "length""8")]) 5077 1.1 mrg 5078 1.1 mrg ;; 5079 1.1 mrg ;; [vaddq_m_n_s, vaddq_m_n_u]) 5080 1.1 mrg ;; 5081 1.1 mrg (define_insn "mve_vaddq_m_n_<supf><mode>" 5082 1.1 mrg [ 5083 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5084 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5085 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5086 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5087 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5088 1.1 mrg VADDQ_M_N)) 5089 1.1 mrg ] 5090 1.1 mrg "TARGET_HAVE_MVE" 5091 1.1 mrg "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %3" 5092 1.1 mrg [(set_attr "type" "mve_move") 5093 1.1 mrg (set_attr "length""8")]) 5094 1.1 mrg 5095 1.1 mrg ;; 5096 1.1 mrg ;; [vaddq_m_u, vaddq_m_s]) 5097 1.1 mrg ;; 5098 1.1 mrg (define_insn "mve_vaddq_m_<supf><mode>" 5099 1.1 mrg [ 5100 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5101 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5102 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5103 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5104 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5105 1.1 mrg VADDQ_M)) 5106 1.1 mrg ] 5107 1.1 mrg "TARGET_HAVE_MVE" 5108 1.1 mrg "vpst\;vaddt.i%#<V_sz_elem> %q0, %q2, %q3" 5109 1.1 mrg [(set_attr "type" "mve_move") 5110 1.1 mrg (set_attr "length""8")]) 5111 1.1 mrg 5112 1.1 mrg ;; 5113 1.1 mrg ;; [vandq_m_u, vandq_m_s]) 5114 1.1 mrg ;; 5115 1.1 mrg (define_insn "mve_vandq_m_<supf><mode>" 5116 1.1 mrg [ 5117 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5118 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5119 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5120 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5121 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5122 1.1 mrg VANDQ_M)) 5123 1.1 mrg ] 5124 1.1 mrg "TARGET_HAVE_MVE" 5125 1.1.1.2 mrg "vpst\;vandt\t%q0, %q2, %q3" 5126 1.1 mrg [(set_attr "type" "mve_move") 5127 1.1 mrg (set_attr "length""8")]) 5128 1.1 mrg 5129 1.1 mrg ;; 5130 1.1 mrg ;; [vbicq_m_u, vbicq_m_s]) 5131 1.1 mrg ;; 5132 1.1 mrg (define_insn "mve_vbicq_m_<supf><mode>" 5133 1.1 mrg [ 5134 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5135 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5136 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5137 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5138 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5139 1.1 mrg VBICQ_M)) 5140 1.1 mrg ] 5141 1.1 mrg "TARGET_HAVE_MVE" 5142 1.1.1.2 mrg "vpst\;vbict\t%q0, %q2, %q3" 5143 1.1 mrg [(set_attr "type" "mve_move") 5144 1.1 mrg (set_attr "length""8")]) 5145 1.1 mrg 5146 1.1 mrg ;; 5147 1.1 mrg ;; [vbrsrq_m_n_u, vbrsrq_m_n_s]) 5148 1.1 mrg ;; 5149 1.1 mrg (define_insn "mve_vbrsrq_m_n_<supf><mode>" 5150 1.1 mrg [ 5151 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5152 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5153 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5154 1.1 mrg (match_operand:SI 3 "s_register_operand" "r") 5155 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5156 1.1 mrg VBRSRQ_M_N)) 5157 1.1 mrg ] 5158 1.1 mrg "TARGET_HAVE_MVE" 5159 1.1 mrg "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3" 5160 1.1 mrg [(set_attr "type" "mve_move") 5161 1.1 mrg (set_attr "length""8")]) 5162 1.1 mrg 5163 1.1 mrg ;; 5164 1.1 mrg ;; [vcaddq_rot270_m_u, vcaddq_rot270_m_s]) 5165 1.1 mrg ;; 5166 1.1 mrg (define_insn "mve_vcaddq_rot270_m_<supf><mode>" 5167 1.1 mrg [ 5168 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 5169 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5170 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5171 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5172 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5173 1.1 mrg VCADDQ_ROT270_M)) 5174 1.1 mrg ] 5175 1.1 mrg "TARGET_HAVE_MVE" 5176 1.1 mrg "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #270" 5177 1.1 mrg [(set_attr "type" "mve_move") 5178 1.1 mrg (set_attr "length""8")]) 5179 1.1 mrg 5180 1.1 mrg ;; 5181 1.1 mrg ;; [vcaddq_rot90_m_u, vcaddq_rot90_m_s]) 5182 1.1 mrg ;; 5183 1.1 mrg (define_insn "mve_vcaddq_rot90_m_<supf><mode>" 5184 1.1 mrg [ 5185 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 5186 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5187 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5188 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5189 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5190 1.1 mrg VCADDQ_ROT90_M)) 5191 1.1 mrg ] 5192 1.1 mrg "TARGET_HAVE_MVE" 5193 1.1 mrg "vpst\;vcaddt.i%#<V_sz_elem> %q0, %q2, %q3, #90" 5194 1.1 mrg [(set_attr "type" "mve_move") 5195 1.1 mrg (set_attr "length""8")]) 5196 1.1 mrg 5197 1.1 mrg ;; 5198 1.1 mrg ;; [veorq_m_s, veorq_m_u]) 5199 1.1 mrg ;; 5200 1.1 mrg (define_insn "mve_veorq_m_<supf><mode>" 5201 1.1 mrg [ 5202 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5203 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5204 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5205 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5206 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5207 1.1 mrg VEORQ_M)) 5208 1.1 mrg ] 5209 1.1 mrg "TARGET_HAVE_MVE" 5210 1.1.1.2 mrg "vpst\;veort\t%q0, %q2, %q3" 5211 1.1 mrg [(set_attr "type" "mve_move") 5212 1.1 mrg (set_attr "length""8")]) 5213 1.1 mrg 5214 1.1 mrg ;; 5215 1.1 mrg ;; [vhaddq_m_n_s, vhaddq_m_n_u]) 5216 1.1 mrg ;; 5217 1.1 mrg (define_insn "mve_vhaddq_m_n_<supf><mode>" 5218 1.1 mrg [ 5219 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5220 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5221 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5222 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5223 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5224 1.1 mrg VHADDQ_M_N)) 5225 1.1 mrg ] 5226 1.1 mrg "TARGET_HAVE_MVE" 5227 1.1 mrg "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %3" 5228 1.1 mrg [(set_attr "type" "mve_move") 5229 1.1 mrg (set_attr "length""8")]) 5230 1.1 mrg 5231 1.1 mrg ;; 5232 1.1 mrg ;; [vhaddq_m_s, vhaddq_m_u]) 5233 1.1 mrg ;; 5234 1.1 mrg (define_insn "mve_vhaddq_m_<supf><mode>" 5235 1.1 mrg [ 5236 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5237 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5238 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5239 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5240 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5241 1.1 mrg VHADDQ_M)) 5242 1.1 mrg ] 5243 1.1 mrg "TARGET_HAVE_MVE" 5244 1.1 mrg "vpst\;vhaddt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5245 1.1 mrg [(set_attr "type" "mve_move") 5246 1.1 mrg (set_attr "length""8")]) 5247 1.1 mrg 5248 1.1 mrg ;; 5249 1.1 mrg ;; [vhsubq_m_n_s, vhsubq_m_n_u]) 5250 1.1 mrg ;; 5251 1.1 mrg (define_insn "mve_vhsubq_m_n_<supf><mode>" 5252 1.1 mrg [ 5253 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5254 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5255 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5256 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5257 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5258 1.1 mrg VHSUBQ_M_N)) 5259 1.1 mrg ] 5260 1.1 mrg "TARGET_HAVE_MVE" 5261 1.1 mrg "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %3" 5262 1.1 mrg [(set_attr "type" "mve_move") 5263 1.1 mrg (set_attr "length""8")]) 5264 1.1 mrg 5265 1.1 mrg ;; 5266 1.1 mrg ;; [vhsubq_m_s, vhsubq_m_u]) 5267 1.1 mrg ;; 5268 1.1 mrg (define_insn "mve_vhsubq_m_<supf><mode>" 5269 1.1 mrg [ 5270 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5271 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5272 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5273 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5274 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5275 1.1 mrg VHSUBQ_M)) 5276 1.1 mrg ] 5277 1.1 mrg "TARGET_HAVE_MVE" 5278 1.1 mrg "vpst\;vhsubt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5279 1.1 mrg [(set_attr "type" "mve_move") 5280 1.1 mrg (set_attr "length""8")]) 5281 1.1 mrg 5282 1.1 mrg ;; 5283 1.1 mrg ;; [vmaxq_m_s, vmaxq_m_u]) 5284 1.1 mrg ;; 5285 1.1 mrg (define_insn "mve_vmaxq_m_<supf><mode>" 5286 1.1 mrg [ 5287 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5288 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5289 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5290 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5291 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5292 1.1 mrg VMAXQ_M)) 5293 1.1 mrg ] 5294 1.1 mrg "TARGET_HAVE_MVE" 5295 1.1 mrg "vpst\;vmaxt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5296 1.1 mrg [(set_attr "type" "mve_move") 5297 1.1 mrg (set_attr "length""8")]) 5298 1.1 mrg 5299 1.1 mrg ;; 5300 1.1 mrg ;; [vminq_m_s, vminq_m_u]) 5301 1.1 mrg ;; 5302 1.1 mrg (define_insn "mve_vminq_m_<supf><mode>" 5303 1.1 mrg [ 5304 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5305 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5306 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5307 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5308 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5309 1.1 mrg VMINQ_M)) 5310 1.1 mrg ] 5311 1.1 mrg "TARGET_HAVE_MVE" 5312 1.1 mrg "vpst\;vmint.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5313 1.1 mrg [(set_attr "type" "mve_move") 5314 1.1 mrg (set_attr "length""8")]) 5315 1.1 mrg 5316 1.1 mrg ;; 5317 1.1 mrg ;; [vmladavaq_p_u, vmladavaq_p_s]) 5318 1.1 mrg ;; 5319 1.1 mrg (define_insn "mve_vmladavaq_p_<supf><mode>" 5320 1.1 mrg [ 5321 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 5322 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 5323 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5324 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5325 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5326 1.1 mrg VMLADAVAQ_P)) 5327 1.1 mrg ] 5328 1.1 mrg "TARGET_HAVE_MVE" 5329 1.1 mrg "vpst\;vmladavat.<supf>%#<V_sz_elem> %0, %q2, %q3" 5330 1.1 mrg [(set_attr "type" "mve_move") 5331 1.1 mrg (set_attr "length""8")]) 5332 1.1 mrg 5333 1.1 mrg ;; 5334 1.1 mrg ;; [vmlaq_m_n_s, vmlaq_m_n_u]) 5335 1.1 mrg ;; 5336 1.1 mrg (define_insn "mve_vmlaq_m_n_<supf><mode>" 5337 1.1 mrg [ 5338 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5339 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5340 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5341 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5342 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5343 1.1 mrg VMLAQ_M_N)) 5344 1.1 mrg ] 5345 1.1 mrg "TARGET_HAVE_MVE" 5346 1.1 mrg "vpst\;vmlat.<supf>%#<V_sz_elem> %q0, %q2, %3" 5347 1.1 mrg [(set_attr "type" "mve_move") 5348 1.1 mrg (set_attr "length""8")]) 5349 1.1 mrg 5350 1.1 mrg ;; 5351 1.1 mrg ;; [vmlasq_m_n_u, vmlasq_m_n_s]) 5352 1.1 mrg ;; 5353 1.1 mrg (define_insn "mve_vmlasq_m_n_<supf><mode>" 5354 1.1 mrg [ 5355 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5356 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5357 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5358 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5359 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5360 1.1 mrg VMLASQ_M_N)) 5361 1.1 mrg ] 5362 1.1 mrg "TARGET_HAVE_MVE" 5363 1.1 mrg "vpst\;vmlast.<supf>%#<V_sz_elem> %q0, %q2, %3" 5364 1.1 mrg [(set_attr "type" "mve_move") 5365 1.1 mrg (set_attr "length""8")]) 5366 1.1 mrg 5367 1.1 mrg ;; 5368 1.1 mrg ;; [vmulhq_m_s, vmulhq_m_u]) 5369 1.1 mrg ;; 5370 1.1 mrg (define_insn "mve_vmulhq_m_<supf><mode>" 5371 1.1 mrg [ 5372 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5373 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5374 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5375 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5376 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5377 1.1 mrg VMULHQ_M)) 5378 1.1 mrg ] 5379 1.1 mrg "TARGET_HAVE_MVE" 5380 1.1 mrg "vpst\;vmulht.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5381 1.1 mrg [(set_attr "type" "mve_move") 5382 1.1 mrg (set_attr "length""8")]) 5383 1.1 mrg 5384 1.1 mrg ;; 5385 1.1 mrg ;; [vmullbq_int_m_u, vmullbq_int_m_s]) 5386 1.1 mrg ;; 5387 1.1 mrg (define_insn "mve_vmullbq_int_m_<supf><mode>" 5388 1.1 mrg [ 5389 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 5390 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 5391 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5392 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5393 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5394 1.1 mrg VMULLBQ_INT_M)) 5395 1.1 mrg ] 5396 1.1 mrg "TARGET_HAVE_MVE" 5397 1.1 mrg "vpst\;vmullbt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5398 1.1 mrg [(set_attr "type" "mve_move") 5399 1.1 mrg (set_attr "length""8")]) 5400 1.1 mrg 5401 1.1 mrg ;; 5402 1.1 mrg ;; [vmulltq_int_m_s, vmulltq_int_m_u]) 5403 1.1 mrg ;; 5404 1.1 mrg (define_insn "mve_vmulltq_int_m_<supf><mode>" 5405 1.1 mrg [ 5406 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 5407 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 5408 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5409 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5410 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5411 1.1 mrg VMULLTQ_INT_M)) 5412 1.1 mrg ] 5413 1.1 mrg "TARGET_HAVE_MVE" 5414 1.1 mrg "vpst\;vmulltt.<supf>%#<V_sz_elem> %q0, %q2, %q3" 5415 1.1 mrg [(set_attr "type" "mve_move") 5416 1.1 mrg (set_attr "length""8")]) 5417 1.1 mrg 5418 1.1 mrg ;; 5419 1.1 mrg ;; [vmulq_m_n_u, vmulq_m_n_s]) 5420 1.1 mrg ;; 5421 1.1 mrg (define_insn "mve_vmulq_m_n_<supf><mode>" 5422 1.1 mrg [ 5423 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5424 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5425 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5426 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5427 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5428 1.1 mrg VMULQ_M_N)) 5429 1.1 mrg ] 5430 1.1 mrg "TARGET_HAVE_MVE" 5431 1.1 mrg "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %3" 5432 1.1 mrg [(set_attr "type" "mve_move") 5433 1.1 mrg (set_attr "length""8")]) 5434 1.1 mrg 5435 1.1 mrg ;; 5436 1.1 mrg ;; [vmulq_m_s, vmulq_m_u]) 5437 1.1 mrg ;; 5438 1.1 mrg (define_insn "mve_vmulq_m_<supf><mode>" 5439 1.1 mrg [ 5440 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5441 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5442 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5443 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5444 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5445 1.1 mrg VMULQ_M)) 5446 1.1 mrg ] 5447 1.1 mrg "TARGET_HAVE_MVE" 5448 1.1 mrg "vpst\;vmult.i%#<V_sz_elem> %q0, %q2, %q3" 5449 1.1 mrg [(set_attr "type" "mve_move") 5450 1.1 mrg (set_attr "length""8")]) 5451 1.1 mrg 5452 1.1 mrg ;; 5453 1.1 mrg ;; [vornq_m_u, vornq_m_s]) 5454 1.1 mrg ;; 5455 1.1 mrg (define_insn "mve_vornq_m_<supf><mode>" 5456 1.1 mrg [ 5457 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5458 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5459 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5460 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5461 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5462 1.1 mrg VORNQ_M)) 5463 1.1 mrg ] 5464 1.1 mrg "TARGET_HAVE_MVE" 5465 1.1.1.2 mrg "vpst\;vornt\t%q0, %q2, %q3" 5466 1.1 mrg [(set_attr "type" "mve_move") 5467 1.1 mrg (set_attr "length""8")]) 5468 1.1 mrg 5469 1.1 mrg ;; 5470 1.1 mrg ;; [vorrq_m_s, vorrq_m_u]) 5471 1.1 mrg ;; 5472 1.1 mrg (define_insn "mve_vorrq_m_<supf><mode>" 5473 1.1 mrg [ 5474 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5475 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5476 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5477 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5478 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5479 1.1 mrg VORRQ_M)) 5480 1.1 mrg ] 5481 1.1 mrg "TARGET_HAVE_MVE" 5482 1.1.1.2 mrg "vpst\;vorrt\t%q0, %q2, %q3" 5483 1.1 mrg [(set_attr "type" "mve_move") 5484 1.1 mrg (set_attr "length""8")]) 5485 1.1 mrg 5486 1.1 mrg ;; 5487 1.1 mrg ;; [vqaddq_m_n_u, vqaddq_m_n_s]) 5488 1.1 mrg ;; 5489 1.1 mrg (define_insn "mve_vqaddq_m_n_<supf><mode>" 5490 1.1 mrg [ 5491 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5492 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5493 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5494 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5495 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5496 1.1 mrg VQADDQ_M_N)) 5497 1.1 mrg ] 5498 1.1 mrg "TARGET_HAVE_MVE" 5499 1.1 mrg "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5500 1.1 mrg [(set_attr "type" "mve_move") 5501 1.1 mrg (set_attr "length""8")]) 5502 1.1 mrg 5503 1.1 mrg ;; 5504 1.1 mrg ;; [vqaddq_m_u, vqaddq_m_s]) 5505 1.1 mrg ;; 5506 1.1 mrg (define_insn "mve_vqaddq_m_<supf><mode>" 5507 1.1 mrg [ 5508 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5509 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5510 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5511 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5512 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5513 1.1 mrg VQADDQ_M)) 5514 1.1 mrg ] 5515 1.1 mrg "TARGET_HAVE_MVE" 5516 1.1 mrg "vpst\;vqaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5517 1.1 mrg [(set_attr "type" "mve_move") 5518 1.1 mrg (set_attr "length""8")]) 5519 1.1 mrg 5520 1.1 mrg ;; 5521 1.1 mrg ;; [vqdmlahq_m_n_s]) 5522 1.1 mrg ;; 5523 1.1 mrg (define_insn "mve_vqdmlahq_m_n_s<mode>" 5524 1.1 mrg [ 5525 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5526 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5527 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5528 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5529 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5530 1.1 mrg VQDMLAHQ_M_N_S)) 5531 1.1 mrg ] 5532 1.1 mrg "TARGET_HAVE_MVE" 5533 1.1 mrg "vpst\;vqdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3" 5534 1.1 mrg [(set_attr "type" "mve_move") 5535 1.1 mrg (set_attr "length""8")]) 5536 1.1 mrg 5537 1.1 mrg ;; 5538 1.1 mrg ;; [vqdmlashq_m_n_s]) 5539 1.1 mrg ;; 5540 1.1 mrg (define_insn "mve_vqdmlashq_m_n_s<mode>" 5541 1.1 mrg [ 5542 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5543 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5544 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5545 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5546 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5547 1.1 mrg VQDMLASHQ_M_N_S)) 5548 1.1 mrg ] 5549 1.1 mrg "TARGET_HAVE_MVE" 5550 1.1 mrg "vpst\;vqdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3" 5551 1.1 mrg [(set_attr "type" "mve_move") 5552 1.1 mrg (set_attr "length""8")]) 5553 1.1 mrg 5554 1.1 mrg ;; 5555 1.1 mrg ;; [vqrdmlahq_m_n_s]) 5556 1.1 mrg ;; 5557 1.1 mrg (define_insn "mve_vqrdmlahq_m_n_s<mode>" 5558 1.1 mrg [ 5559 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5560 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5561 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5562 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5563 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5564 1.1 mrg VQRDMLAHQ_M_N_S)) 5565 1.1 mrg ] 5566 1.1 mrg "TARGET_HAVE_MVE" 5567 1.1 mrg "vpst\;vqrdmlaht.s%#<V_sz_elem>\t%q0, %q2, %3" 5568 1.1 mrg [(set_attr "type" "mve_move") 5569 1.1 mrg (set_attr "length""8")]) 5570 1.1 mrg 5571 1.1 mrg ;; 5572 1.1 mrg ;; [vqrdmlashq_m_n_s]) 5573 1.1 mrg ;; 5574 1.1 mrg (define_insn "mve_vqrdmlashq_m_n_s<mode>" 5575 1.1 mrg [ 5576 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5577 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5578 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5579 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5580 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5581 1.1 mrg VQRDMLASHQ_M_N_S)) 5582 1.1 mrg ] 5583 1.1 mrg "TARGET_HAVE_MVE" 5584 1.1 mrg "vpst\;vqrdmlasht.s%#<V_sz_elem>\t%q0, %q2, %3" 5585 1.1 mrg [(set_attr "type" "mve_move") 5586 1.1 mrg (set_attr "length""8")]) 5587 1.1 mrg 5588 1.1 mrg ;; 5589 1.1 mrg ;; [vqrshlq_m_u, vqrshlq_m_s]) 5590 1.1 mrg ;; 5591 1.1 mrg (define_insn "mve_vqrshlq_m_<supf><mode>" 5592 1.1 mrg [ 5593 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5594 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5595 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5596 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5597 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5598 1.1 mrg VQRSHLQ_M)) 5599 1.1 mrg ] 5600 1.1 mrg "TARGET_HAVE_MVE" 5601 1.1 mrg "vpst\;vqrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5602 1.1 mrg [(set_attr "type" "mve_move") 5603 1.1 mrg (set_attr "length""8")]) 5604 1.1 mrg 5605 1.1 mrg ;; 5606 1.1 mrg ;; [vqshlq_m_n_s, vqshlq_m_n_u]) 5607 1.1 mrg ;; 5608 1.1 mrg (define_insn "mve_vqshlq_m_n_<supf><mode>" 5609 1.1 mrg [ 5610 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5611 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5612 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5613 1.1 mrg (match_operand:SI 3 "immediate_operand" "i") 5614 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5615 1.1 mrg VQSHLQ_M_N)) 5616 1.1 mrg ] 5617 1.1 mrg "TARGET_HAVE_MVE" 5618 1.1 mrg "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5619 1.1 mrg [(set_attr "type" "mve_move") 5620 1.1 mrg (set_attr "length""8")]) 5621 1.1 mrg 5622 1.1 mrg ;; 5623 1.1 mrg ;; [vqshlq_m_u, vqshlq_m_s]) 5624 1.1 mrg ;; 5625 1.1 mrg (define_insn "mve_vqshlq_m_<supf><mode>" 5626 1.1 mrg [ 5627 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5628 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5629 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5630 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5631 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5632 1.1 mrg VQSHLQ_M)) 5633 1.1 mrg ] 5634 1.1 mrg "TARGET_HAVE_MVE" 5635 1.1 mrg "vpst\;vqshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5636 1.1 mrg [(set_attr "type" "mve_move") 5637 1.1 mrg (set_attr "length""8")]) 5638 1.1 mrg 5639 1.1 mrg ;; 5640 1.1 mrg ;; [vqsubq_m_n_u, vqsubq_m_n_s]) 5641 1.1 mrg ;; 5642 1.1 mrg (define_insn "mve_vqsubq_m_n_<supf><mode>" 5643 1.1 mrg [ 5644 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5645 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5646 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5647 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5648 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5649 1.1 mrg VQSUBQ_M_N)) 5650 1.1 mrg ] 5651 1.1 mrg "TARGET_HAVE_MVE" 5652 1.1 mrg "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5653 1.1 mrg [(set_attr "type" "mve_move") 5654 1.1 mrg (set_attr "length""8")]) 5655 1.1 mrg 5656 1.1 mrg ;; 5657 1.1 mrg ;; [vqsubq_m_u, vqsubq_m_s]) 5658 1.1 mrg ;; 5659 1.1 mrg (define_insn "mve_vqsubq_m_<supf><mode>" 5660 1.1 mrg [ 5661 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5662 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5663 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5664 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5665 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5666 1.1 mrg VQSUBQ_M)) 5667 1.1 mrg ] 5668 1.1 mrg "TARGET_HAVE_MVE" 5669 1.1 mrg "vpst\;vqsubt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5670 1.1 mrg [(set_attr "type" "mve_move") 5671 1.1 mrg (set_attr "length""8")]) 5672 1.1 mrg 5673 1.1 mrg ;; 5674 1.1 mrg ;; [vrhaddq_m_u, vrhaddq_m_s]) 5675 1.1 mrg ;; 5676 1.1 mrg (define_insn "mve_vrhaddq_m_<supf><mode>" 5677 1.1 mrg [ 5678 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5679 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5680 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5681 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5682 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5683 1.1 mrg VRHADDQ_M)) 5684 1.1 mrg ] 5685 1.1 mrg "TARGET_HAVE_MVE" 5686 1.1 mrg "vpst\;vrhaddt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5687 1.1 mrg [(set_attr "type" "mve_move") 5688 1.1 mrg (set_attr "length""8")]) 5689 1.1 mrg 5690 1.1 mrg ;; 5691 1.1 mrg ;; [vrmulhq_m_u, vrmulhq_m_s]) 5692 1.1 mrg ;; 5693 1.1 mrg (define_insn "mve_vrmulhq_m_<supf><mode>" 5694 1.1 mrg [ 5695 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5696 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5697 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5698 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5699 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5700 1.1 mrg VRMULHQ_M)) 5701 1.1 mrg ] 5702 1.1 mrg "TARGET_HAVE_MVE" 5703 1.1 mrg "vpst\;vrmulht.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5704 1.1 mrg [(set_attr "type" "mve_move") 5705 1.1 mrg (set_attr "length""8")]) 5706 1.1 mrg 5707 1.1 mrg ;; 5708 1.1 mrg ;; [vrshlq_m_s, vrshlq_m_u]) 5709 1.1 mrg ;; 5710 1.1 mrg (define_insn "mve_vrshlq_m_<supf><mode>" 5711 1.1 mrg [ 5712 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5713 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5714 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5715 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5716 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5717 1.1 mrg VRSHLQ_M)) 5718 1.1 mrg ] 5719 1.1 mrg "TARGET_HAVE_MVE" 5720 1.1 mrg "vpst\;vrshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %q3" 5721 1.1 mrg [(set_attr "type" "mve_move") 5722 1.1 mrg (set_attr "length""8")]) 5723 1.1 mrg 5724 1.1 mrg ;; 5725 1.1 mrg ;; [vrshrq_m_n_s, vrshrq_m_n_u]) 5726 1.1 mrg ;; 5727 1.1 mrg (define_insn "mve_vrshrq_m_n_<supf><mode>" 5728 1.1 mrg [ 5729 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5730 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5731 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5732 1.1 mrg (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>") 5733 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5734 1.1 mrg VRSHRQ_M_N)) 5735 1.1 mrg ] 5736 1.1 mrg "TARGET_HAVE_MVE" 5737 1.1 mrg "vpst\;vrshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5738 1.1 mrg [(set_attr "type" "mve_move") 5739 1.1 mrg (set_attr "length""8")]) 5740 1.1 mrg 5741 1.1 mrg ;; 5742 1.1 mrg ;; [vshlq_m_n_s, vshlq_m_n_u]) 5743 1.1 mrg ;; 5744 1.1 mrg (define_insn "mve_vshlq_m_n_<supf><mode>" 5745 1.1 mrg [ 5746 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5747 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5748 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5749 1.1 mrg (match_operand:SI 3 "immediate_operand" "i") 5750 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5751 1.1 mrg VSHLQ_M_N)) 5752 1.1 mrg ] 5753 1.1 mrg "TARGET_HAVE_MVE" 5754 1.1 mrg "vpst\;vshlt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5755 1.1 mrg [(set_attr "type" "mve_move") 5756 1.1 mrg (set_attr "length""8")]) 5757 1.1 mrg 5758 1.1 mrg ;; 5759 1.1 mrg ;; [vshrq_m_n_s, vshrq_m_n_u]) 5760 1.1 mrg ;; 5761 1.1 mrg (define_insn "mve_vshrq_m_n_<supf><mode>" 5762 1.1 mrg [ 5763 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5764 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5765 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5766 1.1 mrg (match_operand:SI 3 "<MVE_pred2>" "<MVE_constraint2>") 5767 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5768 1.1 mrg VSHRQ_M_N)) 5769 1.1 mrg ] 5770 1.1 mrg "TARGET_HAVE_MVE" 5771 1.1 mrg "vpst\;vshrt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 5772 1.1 mrg [(set_attr "type" "mve_move") 5773 1.1 mrg (set_attr "length""8")]) 5774 1.1 mrg 5775 1.1 mrg ;; 5776 1.1 mrg ;; [vsliq_m_n_u, vsliq_m_n_s]) 5777 1.1 mrg ;; 5778 1.1 mrg (define_insn "mve_vsliq_m_n_<supf><mode>" 5779 1.1 mrg [ 5780 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5781 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5782 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5783 1.1 mrg (match_operand:SI 3 "<MVE_pred>" "<MVE_constraint>") 5784 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5785 1.1 mrg VSLIQ_M_N)) 5786 1.1 mrg ] 5787 1.1 mrg "TARGET_HAVE_MVE" 5788 1.1 mrg "vpst\;vslit.%#<V_sz_elem>\t%q0, %q2, %3" 5789 1.1 mrg [(set_attr "type" "mve_move") 5790 1.1 mrg (set_attr "length""8")]) 5791 1.1 mrg 5792 1.1 mrg ;; 5793 1.1 mrg ;; [vsubq_m_n_s, vsubq_m_n_u]) 5794 1.1 mrg ;; 5795 1.1 mrg (define_insn "mve_vsubq_m_n_<supf><mode>" 5796 1.1 mrg [ 5797 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5798 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5799 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5800 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5801 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5802 1.1 mrg VSUBQ_M_N)) 5803 1.1 mrg ] 5804 1.1 mrg "TARGET_HAVE_MVE" 5805 1.1 mrg "vpst\;vsubt.i%#<V_sz_elem>\t%q0, %q2, %3" 5806 1.1 mrg [(set_attr "type" "mve_move") 5807 1.1 mrg (set_attr "length""8")]) 5808 1.1 mrg 5809 1.1 mrg ;; 5810 1.1 mrg ;; [vhcaddq_rot270_m_s]) 5811 1.1 mrg ;; 5812 1.1 mrg (define_insn "mve_vhcaddq_rot270_m_s<mode>" 5813 1.1 mrg [ 5814 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 5815 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5816 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5817 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5818 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5819 1.1 mrg VHCADDQ_ROT270_M_S)) 5820 1.1 mrg ] 5821 1.1 mrg "TARGET_HAVE_MVE" 5822 1.1 mrg "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #270" 5823 1.1 mrg [(set_attr "type" "mve_move") 5824 1.1 mrg (set_attr "length""8")]) 5825 1.1 mrg 5826 1.1 mrg ;; 5827 1.1 mrg ;; [vhcaddq_rot90_m_s]) 5828 1.1 mrg ;; 5829 1.1 mrg (define_insn "mve_vhcaddq_rot90_m_s<mode>" 5830 1.1 mrg [ 5831 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "<earlyclobber_32>") 5832 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5833 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5834 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5835 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5836 1.1 mrg VHCADDQ_ROT90_M_S)) 5837 1.1 mrg ] 5838 1.1 mrg "TARGET_HAVE_MVE" 5839 1.1 mrg "vpst\;vhcaddt.s%#<V_sz_elem>\t%q0, %q2, %q3, #90" 5840 1.1 mrg [(set_attr "type" "mve_move") 5841 1.1 mrg (set_attr "length""8")]) 5842 1.1 mrg 5843 1.1 mrg ;; 5844 1.1 mrg ;; [vmladavaxq_p_s]) 5845 1.1 mrg ;; 5846 1.1 mrg (define_insn "mve_vmladavaxq_p_s<mode>" 5847 1.1 mrg [ 5848 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 5849 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 5850 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5851 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5852 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5853 1.1 mrg VMLADAVAXQ_P_S)) 5854 1.1 mrg ] 5855 1.1 mrg "TARGET_HAVE_MVE" 5856 1.1 mrg "vpst\;vmladavaxt.s%#<V_sz_elem>\t%0, %q2, %q3" 5857 1.1 mrg [(set_attr "type" "mve_move") 5858 1.1 mrg (set_attr "length""8")]) 5859 1.1 mrg 5860 1.1 mrg ;; 5861 1.1 mrg ;; [vmlsdavaq_p_s]) 5862 1.1 mrg ;; 5863 1.1 mrg (define_insn "mve_vmlsdavaq_p_s<mode>" 5864 1.1 mrg [ 5865 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 5866 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 5867 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5868 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5869 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5870 1.1 mrg VMLSDAVAQ_P_S)) 5871 1.1 mrg ] 5872 1.1 mrg "TARGET_HAVE_MVE" 5873 1.1 mrg "vpst\;vmlsdavat.s%#<V_sz_elem>\t%0, %q2, %q3" 5874 1.1 mrg [(set_attr "type" "mve_move") 5875 1.1 mrg (set_attr "length""8")]) 5876 1.1 mrg 5877 1.1 mrg ;; 5878 1.1 mrg ;; [vmlsdavaxq_p_s]) 5879 1.1 mrg ;; 5880 1.1 mrg (define_insn "mve_vmlsdavaxq_p_s<mode>" 5881 1.1 mrg [ 5882 1.1 mrg (set (match_operand:SI 0 "s_register_operand" "=Te") 5883 1.1 mrg (unspec:SI [(match_operand:SI 1 "s_register_operand" "0") 5884 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5885 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5886 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5887 1.1 mrg VMLSDAVAXQ_P_S)) 5888 1.1 mrg ] 5889 1.1 mrg "TARGET_HAVE_MVE" 5890 1.1 mrg "vpst\;vmlsdavaxt.s%#<V_sz_elem>\t%0, %q2, %q3" 5891 1.1 mrg [(set_attr "type" "mve_move") 5892 1.1 mrg (set_attr "length""8")]) 5893 1.1 mrg 5894 1.1 mrg ;; 5895 1.1 mrg ;; [vqdmladhq_m_s]) 5896 1.1 mrg ;; 5897 1.1 mrg (define_insn "mve_vqdmladhq_m_s<mode>" 5898 1.1 mrg [ 5899 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5900 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5901 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5902 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5903 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5904 1.1 mrg VQDMLADHQ_M_S)) 5905 1.1 mrg ] 5906 1.1 mrg "TARGET_HAVE_MVE" 5907 1.1 mrg "vpst\;vqdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3" 5908 1.1 mrg [(set_attr "type" "mve_move") 5909 1.1 mrg (set_attr "length""8")]) 5910 1.1 mrg 5911 1.1 mrg ;; 5912 1.1 mrg ;; [vqdmladhxq_m_s]) 5913 1.1 mrg ;; 5914 1.1 mrg (define_insn "mve_vqdmladhxq_m_s<mode>" 5915 1.1 mrg [ 5916 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5917 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5918 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5919 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5920 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5921 1.1 mrg VQDMLADHXQ_M_S)) 5922 1.1 mrg ] 5923 1.1 mrg "TARGET_HAVE_MVE" 5924 1.1 mrg "vpst\;vqdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3" 5925 1.1 mrg [(set_attr "type" "mve_move") 5926 1.1 mrg (set_attr "length""8")]) 5927 1.1 mrg 5928 1.1 mrg ;; 5929 1.1 mrg ;; [vqdmlsdhq_m_s]) 5930 1.1 mrg ;; 5931 1.1 mrg (define_insn "mve_vqdmlsdhq_m_s<mode>" 5932 1.1 mrg [ 5933 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5934 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5935 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5936 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5937 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5938 1.1 mrg VQDMLSDHQ_M_S)) 5939 1.1 mrg ] 5940 1.1 mrg "TARGET_HAVE_MVE" 5941 1.1 mrg "vpst\;vqdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3" 5942 1.1 mrg [(set_attr "type" "mve_move") 5943 1.1 mrg (set_attr "length""8")]) 5944 1.1 mrg 5945 1.1 mrg ;; 5946 1.1 mrg ;; [vqdmlsdhxq_m_s]) 5947 1.1 mrg ;; 5948 1.1 mrg (define_insn "mve_vqdmlsdhxq_m_s<mode>" 5949 1.1 mrg [ 5950 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5951 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5952 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5953 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5954 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5955 1.1 mrg VQDMLSDHXQ_M_S)) 5956 1.1 mrg ] 5957 1.1 mrg "TARGET_HAVE_MVE" 5958 1.1 mrg "vpst\;vqdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3" 5959 1.1 mrg [(set_attr "type" "mve_move") 5960 1.1 mrg (set_attr "length""8")]) 5961 1.1 mrg 5962 1.1 mrg ;; 5963 1.1 mrg ;; [vqdmulhq_m_n_s]) 5964 1.1 mrg ;; 5965 1.1 mrg (define_insn "mve_vqdmulhq_m_n_s<mode>" 5966 1.1 mrg [ 5967 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5968 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5969 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5970 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 5971 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5972 1.1 mrg VQDMULHQ_M_N_S)) 5973 1.1 mrg ] 5974 1.1 mrg "TARGET_HAVE_MVE" 5975 1.1 mrg "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %3" 5976 1.1 mrg [(set_attr "type" "mve_move") 5977 1.1 mrg (set_attr "length""8")]) 5978 1.1 mrg 5979 1.1 mrg ;; 5980 1.1 mrg ;; [vqdmulhq_m_s]) 5981 1.1 mrg ;; 5982 1.1 mrg (define_insn "mve_vqdmulhq_m_s<mode>" 5983 1.1 mrg [ 5984 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 5985 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 5986 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 5987 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 5988 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 5989 1.1 mrg VQDMULHQ_M_S)) 5990 1.1 mrg ] 5991 1.1 mrg "TARGET_HAVE_MVE" 5992 1.1 mrg "vpst\;vqdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3" 5993 1.1 mrg [(set_attr "type" "mve_move") 5994 1.1 mrg (set_attr "length""8")]) 5995 1.1 mrg 5996 1.1 mrg ;; 5997 1.1 mrg ;; [vqrdmladhq_m_s]) 5998 1.1 mrg ;; 5999 1.1 mrg (define_insn "mve_vqrdmladhq_m_s<mode>" 6000 1.1 mrg [ 6001 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6002 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6003 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 6004 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 6005 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6006 1.1 mrg VQRDMLADHQ_M_S)) 6007 1.1 mrg ] 6008 1.1 mrg "TARGET_HAVE_MVE" 6009 1.1 mrg "vpst\;vqrdmladht.s%#<V_sz_elem>\t%q0, %q2, %q3" 6010 1.1 mrg [(set_attr "type" "mve_move") 6011 1.1 mrg (set_attr "length""8")]) 6012 1.1 mrg 6013 1.1 mrg ;; 6014 1.1 mrg ;; [vqrdmladhxq_m_s]) 6015 1.1 mrg ;; 6016 1.1 mrg (define_insn "mve_vqrdmladhxq_m_s<mode>" 6017 1.1 mrg [ 6018 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6019 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6020 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 6021 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 6022 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6023 1.1 mrg VQRDMLADHXQ_M_S)) 6024 1.1 mrg ] 6025 1.1 mrg "TARGET_HAVE_MVE" 6026 1.1 mrg "vpst\;vqrdmladhxt.s%#<V_sz_elem>\t%q0, %q2, %q3" 6027 1.1 mrg [(set_attr "type" "mve_move") 6028 1.1 mrg (set_attr "length""8")]) 6029 1.1 mrg 6030 1.1 mrg ;; 6031 1.1 mrg ;; [vqrdmlsdhq_m_s]) 6032 1.1 mrg ;; 6033 1.1 mrg (define_insn "mve_vqrdmlsdhq_m_s<mode>" 6034 1.1 mrg [ 6035 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6036 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6037 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 6038 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 6039 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6040 1.1 mrg VQRDMLSDHQ_M_S)) 6041 1.1 mrg ] 6042 1.1 mrg "TARGET_HAVE_MVE" 6043 1.1 mrg "vpst\;vqrdmlsdht.s%#<V_sz_elem>\t%q0, %q2, %q3" 6044 1.1 mrg [(set_attr "type" "mve_move") 6045 1.1 mrg (set_attr "length""8")]) 6046 1.1 mrg 6047 1.1 mrg ;; 6048 1.1 mrg ;; [vqrdmlsdhxq_m_s]) 6049 1.1 mrg ;; 6050 1.1 mrg (define_insn "mve_vqrdmlsdhxq_m_s<mode>" 6051 1.1 mrg [ 6052 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6053 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6054 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 6055 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 6056 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6057 1.1 mrg VQRDMLSDHXQ_M_S)) 6058 1.1 mrg ] 6059 1.1 mrg "TARGET_HAVE_MVE" 6060 1.1 mrg "vpst\;vqrdmlsdhxt.s%#<V_sz_elem>\t%q0, %q2, %q3" 6061 1.1 mrg [(set_attr "type" "mve_move") 6062 1.1 mrg (set_attr "length""8")]) 6063 1.1 mrg 6064 1.1 mrg ;; 6065 1.1 mrg ;; [vqrdmulhq_m_n_s]) 6066 1.1 mrg ;; 6067 1.1 mrg (define_insn "mve_vqrdmulhq_m_n_s<mode>" 6068 1.1 mrg [ 6069 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6070 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6071 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 6072 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 6073 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6074 1.1 mrg VQRDMULHQ_M_N_S)) 6075 1.1 mrg ] 6076 1.1 mrg "TARGET_HAVE_MVE" 6077 1.1 mrg "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %3" 6078 1.1 mrg [(set_attr "type" "mve_move") 6079 1.1 mrg (set_attr "length""8")]) 6080 1.1 mrg 6081 1.1 mrg ;; 6082 1.1 mrg ;; [vqrdmulhq_m_s]) 6083 1.1 mrg ;; 6084 1.1 mrg (define_insn "mve_vqrdmulhq_m_s<mode>" 6085 1.1 mrg [ 6086 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 6087 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 6088 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 6089 1.1 mrg (match_operand:MVE_2 3 "s_register_operand" "w") 6090 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6091 1.1 mrg VQRDMULHQ_M_S)) 6092 1.1 mrg ] 6093 1.1 mrg "TARGET_HAVE_MVE" 6094 1.1 mrg "vpst\;vqrdmulht.s%#<V_sz_elem>\t%q0, %q2, %q3" 6095 1.1 mrg [(set_attr "type" "mve_move") 6096 1.1 mrg (set_attr "length""8")]) 6097 1.1 mrg 6098 1.1 mrg ;; 6099 1.1 mrg ;; [vmlaldavaq_p_u, vmlaldavaq_p_s]) 6100 1.1 mrg ;; 6101 1.1 mrg (define_insn "mve_vmlaldavaq_p_<supf><mode>" 6102 1.1 mrg [ 6103 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 6104 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6105 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6106 1.1 mrg (match_operand:MVE_5 3 "s_register_operand" "w") 6107 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6108 1.1 mrg VMLALDAVAQ_P)) 6109 1.1 mrg ] 6110 1.1 mrg "TARGET_HAVE_MVE" 6111 1.1 mrg "vpst\;vmlaldavat.<supf>%#<V_sz_elem> %Q0, %R0, %q2, %q3" 6112 1.1 mrg [(set_attr "type" "mve_move") 6113 1.1 mrg (set_attr "length""8")]) 6114 1.1 mrg 6115 1.1 mrg ;; 6116 1.1 mrg ;; [vmlaldavaxq_p_s]) 6117 1.1 mrg ;; 6118 1.1 mrg (define_insn "mve_vmlaldavaxq_p_<supf><mode>" 6119 1.1 mrg [ 6120 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 6121 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6122 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6123 1.1 mrg (match_operand:MVE_5 3 "s_register_operand" "w") 6124 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6125 1.1 mrg VMLALDAVAXQ_P)) 6126 1.1 mrg ] 6127 1.1 mrg "TARGET_HAVE_MVE" 6128 1.1.1.2 mrg "vpst\;vmlaldavaxt.<supf>%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 6129 1.1 mrg [(set_attr "type" "mve_move") 6130 1.1 mrg (set_attr "length""8")]) 6131 1.1 mrg 6132 1.1 mrg ;; 6133 1.1 mrg ;; [vqrshrnbq_m_n_u, vqrshrnbq_m_n_s]) 6134 1.1 mrg ;; 6135 1.1 mrg (define_insn "mve_vqrshrnbq_m_n_<supf><mode>" 6136 1.1 mrg [ 6137 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6138 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6139 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6140 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6141 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6142 1.1 mrg VQRSHRNBQ_M_N)) 6143 1.1 mrg ] 6144 1.1 mrg "TARGET_HAVE_MVE" 6145 1.1 mrg "vpst\;vqrshrnbt.<supf>%#<V_sz_elem> %q0, %q2, %3" 6146 1.1 mrg [(set_attr "type" "mve_move") 6147 1.1 mrg (set_attr "length""8")]) 6148 1.1 mrg 6149 1.1 mrg ;; 6150 1.1 mrg ;; [vqrshrntq_m_n_s, vqrshrntq_m_n_u]) 6151 1.1 mrg ;; 6152 1.1 mrg (define_insn "mve_vqrshrntq_m_n_<supf><mode>" 6153 1.1 mrg [ 6154 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6155 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6156 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6157 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6158 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6159 1.1 mrg VQRSHRNTQ_M_N)) 6160 1.1 mrg ] 6161 1.1 mrg "TARGET_HAVE_MVE" 6162 1.1 mrg "vpst\;vqrshrntt.<supf>%#<V_sz_elem> %q0, %q2, %3" 6163 1.1 mrg [(set_attr "type" "mve_move") 6164 1.1 mrg (set_attr "length""8")]) 6165 1.1 mrg 6166 1.1 mrg ;; 6167 1.1 mrg ;; [vqshrnbq_m_n_u, vqshrnbq_m_n_s]) 6168 1.1 mrg ;; 6169 1.1 mrg (define_insn "mve_vqshrnbq_m_n_<supf><mode>" 6170 1.1 mrg [ 6171 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6172 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6173 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6174 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6175 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6176 1.1 mrg VQSHRNBQ_M_N)) 6177 1.1 mrg ] 6178 1.1 mrg "TARGET_HAVE_MVE" 6179 1.1 mrg "vpst\n\tvqshrnbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 6180 1.1 mrg [(set_attr "type" "mve_move") 6181 1.1 mrg (set_attr "length""8")]) 6182 1.1 mrg 6183 1.1 mrg ;; 6184 1.1 mrg ;; [vqshrntq_m_n_s, vqshrntq_m_n_u]) 6185 1.1 mrg ;; 6186 1.1 mrg (define_insn "mve_vqshrntq_m_n_<supf><mode>" 6187 1.1 mrg [ 6188 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6189 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6190 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6191 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6192 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6193 1.1 mrg VQSHRNTQ_M_N)) 6194 1.1 mrg ] 6195 1.1 mrg "TARGET_HAVE_MVE" 6196 1.1 mrg "vpst\;vqshrntt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 6197 1.1 mrg [(set_attr "type" "mve_move") 6198 1.1 mrg (set_attr "length""8")]) 6199 1.1 mrg 6200 1.1 mrg ;; 6201 1.1 mrg ;; [vrmlaldavhaq_p_s]) 6202 1.1 mrg ;; 6203 1.1 mrg (define_insn "mve_vrmlaldavhaq_p_sv4si" 6204 1.1 mrg [ 6205 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 6206 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6207 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 6208 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w") 6209 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6210 1.1 mrg VRMLALDAVHAQ_P_S)) 6211 1.1 mrg ] 6212 1.1 mrg "TARGET_HAVE_MVE" 6213 1.1 mrg "vpst\;vrmlaldavhat.s32\t%Q0, %R0, %q2, %q3" 6214 1.1 mrg [(set_attr "type" "mve_move") 6215 1.1 mrg (set_attr "length""8")]) 6216 1.1 mrg 6217 1.1 mrg ;; 6218 1.1 mrg ;; [vrshrnbq_m_n_u, vrshrnbq_m_n_s]) 6219 1.1 mrg ;; 6220 1.1 mrg (define_insn "mve_vrshrnbq_m_n_<supf><mode>" 6221 1.1 mrg [ 6222 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6223 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6224 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6225 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6226 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6227 1.1 mrg VRSHRNBQ_M_N)) 6228 1.1 mrg ] 6229 1.1 mrg "TARGET_HAVE_MVE" 6230 1.1 mrg "vpst\;vrshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3" 6231 1.1 mrg [(set_attr "type" "mve_move") 6232 1.1 mrg (set_attr "length""8")]) 6233 1.1 mrg 6234 1.1 mrg ;; 6235 1.1 mrg ;; [vrshrntq_m_n_u, vrshrntq_m_n_s]) 6236 1.1 mrg ;; 6237 1.1 mrg (define_insn "mve_vrshrntq_m_n_<supf><mode>" 6238 1.1 mrg [ 6239 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6240 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6241 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6242 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6243 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6244 1.1 mrg VRSHRNTQ_M_N)) 6245 1.1 mrg ] 6246 1.1 mrg "TARGET_HAVE_MVE" 6247 1.1 mrg "vpst\;vrshrntt.i%#<V_sz_elem>\t%q0, %q2, %3" 6248 1.1 mrg [(set_attr "type" "mve_move") 6249 1.1 mrg (set_attr "length""8")]) 6250 1.1 mrg 6251 1.1 mrg ;; 6252 1.1 mrg ;; [vshllbq_m_n_u, vshllbq_m_n_s]) 6253 1.1 mrg ;; 6254 1.1 mrg (define_insn "mve_vshllbq_m_n_<supf><mode>" 6255 1.1 mrg [ 6256 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 6257 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6258 1.1 mrg (match_operand:MVE_3 2 "s_register_operand" "w") 6259 1.1 mrg (match_operand:SI 3 "immediate_operand" "i") 6260 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6261 1.1 mrg VSHLLBQ_M_N)) 6262 1.1 mrg ] 6263 1.1 mrg "TARGET_HAVE_MVE" 6264 1.1 mrg "vpst\;vshllbt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 6265 1.1 mrg [(set_attr "type" "mve_move") 6266 1.1 mrg (set_attr "length""8")]) 6267 1.1 mrg 6268 1.1 mrg ;; 6269 1.1 mrg ;; [vshlltq_m_n_u, vshlltq_m_n_s]) 6270 1.1 mrg ;; 6271 1.1 mrg (define_insn "mve_vshlltq_m_n_<supf><mode>" 6272 1.1 mrg [ 6273 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 6274 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6275 1.1 mrg (match_operand:MVE_3 2 "s_register_operand" "w") 6276 1.1 mrg (match_operand:SI 3 "immediate_operand" "i") 6277 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6278 1.1 mrg VSHLLTQ_M_N)) 6279 1.1 mrg ] 6280 1.1 mrg "TARGET_HAVE_MVE" 6281 1.1 mrg "vpst\;vshlltt.<supf>%#<V_sz_elem>\t%q0, %q2, %3" 6282 1.1 mrg [(set_attr "type" "mve_move") 6283 1.1 mrg (set_attr "length""8")]) 6284 1.1 mrg 6285 1.1 mrg ;; 6286 1.1 mrg ;; [vshrnbq_m_n_s, vshrnbq_m_n_u]) 6287 1.1 mrg ;; 6288 1.1 mrg (define_insn "mve_vshrnbq_m_n_<supf><mode>" 6289 1.1 mrg [ 6290 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6291 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6292 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6293 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6294 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6295 1.1 mrg VSHRNBQ_M_N)) 6296 1.1 mrg ] 6297 1.1 mrg "TARGET_HAVE_MVE" 6298 1.1 mrg "vpst\;vshrnbt.i%#<V_sz_elem>\t%q0, %q2, %3" 6299 1.1 mrg [(set_attr "type" "mve_move") 6300 1.1 mrg (set_attr "length""8")]) 6301 1.1 mrg 6302 1.1 mrg ;; 6303 1.1 mrg ;; [vshrntq_m_n_s, vshrntq_m_n_u]) 6304 1.1 mrg ;; 6305 1.1 mrg (define_insn "mve_vshrntq_m_n_<supf><mode>" 6306 1.1 mrg [ 6307 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6308 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6309 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6310 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6311 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6312 1.1 mrg VSHRNTQ_M_N)) 6313 1.1 mrg ] 6314 1.1 mrg "TARGET_HAVE_MVE" 6315 1.1 mrg "vpst\;vshrntt.i%#<V_sz_elem>\t%q0, %q2, %3" 6316 1.1 mrg [(set_attr "type" "mve_move") 6317 1.1 mrg (set_attr "length""8")]) 6318 1.1 mrg 6319 1.1 mrg ;; 6320 1.1 mrg ;; [vmlsldavaq_p_s]) 6321 1.1 mrg ;; 6322 1.1 mrg (define_insn "mve_vmlsldavaq_p_s<mode>" 6323 1.1 mrg [ 6324 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 6325 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6326 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6327 1.1 mrg (match_operand:MVE_5 3 "s_register_operand" "w") 6328 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6329 1.1 mrg VMLSLDAVAQ_P_S)) 6330 1.1 mrg ] 6331 1.1 mrg "TARGET_HAVE_MVE" 6332 1.1 mrg "vpst\;vmlsldavat.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 6333 1.1 mrg [(set_attr "type" "mve_move") 6334 1.1 mrg (set_attr "length""8")]) 6335 1.1 mrg 6336 1.1 mrg ;; 6337 1.1 mrg ;; [vmlsldavaxq_p_s]) 6338 1.1 mrg ;; 6339 1.1 mrg (define_insn "mve_vmlsldavaxq_p_s<mode>" 6340 1.1 mrg [ 6341 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 6342 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6343 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6344 1.1 mrg (match_operand:MVE_5 3 "s_register_operand" "w") 6345 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6346 1.1 mrg VMLSLDAVAXQ_P_S)) 6347 1.1 mrg ] 6348 1.1 mrg "TARGET_HAVE_MVE" 6349 1.1 mrg "vpst\;vmlsldavaxt.s%#<V_sz_elem>\t%Q0, %R0, %q2, %q3" 6350 1.1 mrg [(set_attr "type" "mve_move") 6351 1.1 mrg (set_attr "length""8")]) 6352 1.1 mrg 6353 1.1 mrg ;; 6354 1.1 mrg ;; [vmullbq_poly_m_p]) 6355 1.1 mrg ;; 6356 1.1 mrg (define_insn "mve_vmullbq_poly_m_p<mode>" 6357 1.1 mrg [ 6358 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 6359 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6360 1.1 mrg (match_operand:MVE_3 2 "s_register_operand" "w") 6361 1.1 mrg (match_operand:MVE_3 3 "s_register_operand" "w") 6362 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6363 1.1 mrg VMULLBQ_POLY_M_P)) 6364 1.1 mrg ] 6365 1.1 mrg "TARGET_HAVE_MVE" 6366 1.1 mrg "vpst\;vmullbt.p%#<V_sz_elem>\t%q0, %q2, %q3" 6367 1.1 mrg [(set_attr "type" "mve_move") 6368 1.1 mrg (set_attr "length""8")]) 6369 1.1 mrg 6370 1.1 mrg ;; 6371 1.1 mrg ;; [vmulltq_poly_m_p]) 6372 1.1 mrg ;; 6373 1.1 mrg (define_insn "mve_vmulltq_poly_m_p<mode>" 6374 1.1 mrg [ 6375 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "=w") 6376 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6377 1.1 mrg (match_operand:MVE_3 2 "s_register_operand" "w") 6378 1.1 mrg (match_operand:MVE_3 3 "s_register_operand" "w") 6379 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6380 1.1 mrg VMULLTQ_POLY_M_P)) 6381 1.1 mrg ] 6382 1.1 mrg "TARGET_HAVE_MVE" 6383 1.1 mrg "vpst\;vmulltt.p%#<V_sz_elem>\t%q0, %q2, %q3" 6384 1.1 mrg [(set_attr "type" "mve_move") 6385 1.1 mrg (set_attr "length""8")]) 6386 1.1 mrg 6387 1.1 mrg ;; 6388 1.1 mrg ;; [vqdmullbq_m_n_s]) 6389 1.1 mrg ;; 6390 1.1 mrg (define_insn "mve_vqdmullbq_m_n_s<mode>" 6391 1.1 mrg [ 6392 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 6393 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6394 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6395 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 6396 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6397 1.1 mrg VQDMULLBQ_M_N_S)) 6398 1.1 mrg ] 6399 1.1 mrg "TARGET_HAVE_MVE" 6400 1.1 mrg "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %3" 6401 1.1 mrg [(set_attr "type" "mve_move") 6402 1.1 mrg (set_attr "length""8")]) 6403 1.1 mrg 6404 1.1 mrg ;; 6405 1.1 mrg ;; [vqdmullbq_m_s]) 6406 1.1 mrg ;; 6407 1.1 mrg (define_insn "mve_vqdmullbq_m_s<mode>" 6408 1.1 mrg [ 6409 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 6410 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6411 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6412 1.1 mrg (match_operand:MVE_5 3 "s_register_operand" "w") 6413 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6414 1.1 mrg VQDMULLBQ_M_S)) 6415 1.1 mrg ] 6416 1.1 mrg "TARGET_HAVE_MVE" 6417 1.1 mrg "vpst\;vqdmullbt.s%#<V_sz_elem>\t%q0, %q2, %q3" 6418 1.1 mrg [(set_attr "type" "mve_move") 6419 1.1 mrg (set_attr "length""8")]) 6420 1.1 mrg 6421 1.1 mrg ;; 6422 1.1 mrg ;; [vqdmulltq_m_n_s]) 6423 1.1 mrg ;; 6424 1.1 mrg (define_insn "mve_vqdmulltq_m_n_s<mode>" 6425 1.1 mrg [ 6426 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 6427 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6428 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6429 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 6430 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6431 1.1 mrg VQDMULLTQ_M_N_S)) 6432 1.1 mrg ] 6433 1.1 mrg "TARGET_HAVE_MVE" 6434 1.1 mrg "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %3" 6435 1.1 mrg [(set_attr "type" "mve_move") 6436 1.1 mrg (set_attr "length""8")]) 6437 1.1 mrg 6438 1.1 mrg ;; 6439 1.1 mrg ;; [vqdmulltq_m_s]) 6440 1.1 mrg ;; 6441 1.1 mrg (define_insn "mve_vqdmulltq_m_s<mode>" 6442 1.1 mrg [ 6443 1.1 mrg (set (match_operand:<V_double_width> 0 "s_register_operand" "<earlyclobber_32>") 6444 1.1 mrg (unspec:<V_double_width> [(match_operand:<V_double_width> 1 "s_register_operand" "0") 6445 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6446 1.1 mrg (match_operand:MVE_5 3 "s_register_operand" "w") 6447 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6448 1.1 mrg VQDMULLTQ_M_S)) 6449 1.1 mrg ] 6450 1.1 mrg "TARGET_HAVE_MVE" 6451 1.1 mrg "vpst\;vqdmulltt.s%#<V_sz_elem>\t%q0, %q2, %q3" 6452 1.1 mrg [(set_attr "type" "mve_move") 6453 1.1 mrg (set_attr "length""8")]) 6454 1.1 mrg 6455 1.1 mrg ;; 6456 1.1 mrg ;; [vqrshrunbq_m_n_s]) 6457 1.1 mrg ;; 6458 1.1 mrg (define_insn "mve_vqrshrunbq_m_n_s<mode>" 6459 1.1 mrg [ 6460 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6461 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6462 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6463 1.1.1.2 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6464 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6465 1.1 mrg VQRSHRUNBQ_M_N_S)) 6466 1.1 mrg ] 6467 1.1 mrg "TARGET_HAVE_MVE" 6468 1.1 mrg "vpst\;vqrshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3" 6469 1.1 mrg [(set_attr "type" "mve_move") 6470 1.1 mrg (set_attr "length""8")]) 6471 1.1 mrg 6472 1.1 mrg ;; 6473 1.1 mrg ;; [vqrshruntq_m_n_s]) 6474 1.1 mrg ;; 6475 1.1 mrg (define_insn "mve_vqrshruntq_m_n_s<mode>" 6476 1.1 mrg [ 6477 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6478 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6479 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6480 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6481 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6482 1.1 mrg VQRSHRUNTQ_M_N_S)) 6483 1.1 mrg ] 6484 1.1 mrg "TARGET_HAVE_MVE" 6485 1.1 mrg "vpst\;vqrshruntt.s%#<V_sz_elem>\t%q0, %q2, %3" 6486 1.1 mrg [(set_attr "type" "mve_move") 6487 1.1 mrg (set_attr "length""8")]) 6488 1.1 mrg 6489 1.1 mrg ;; 6490 1.1 mrg ;; [vqshrunbq_m_n_s]) 6491 1.1 mrg ;; 6492 1.1 mrg (define_insn "mve_vqshrunbq_m_n_s<mode>" 6493 1.1 mrg [ 6494 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6495 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6496 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6497 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6498 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6499 1.1 mrg VQSHRUNBQ_M_N_S)) 6500 1.1 mrg ] 6501 1.1 mrg "TARGET_HAVE_MVE" 6502 1.1 mrg "vpst\;vqshrunbt.s%#<V_sz_elem>\t%q0, %q2, %3" 6503 1.1 mrg [(set_attr "type" "mve_move") 6504 1.1 mrg (set_attr "length""8")]) 6505 1.1 mrg 6506 1.1 mrg ;; 6507 1.1 mrg ;; [vqshruntq_m_n_s]) 6508 1.1 mrg ;; 6509 1.1 mrg (define_insn "mve_vqshruntq_m_n_s<mode>" 6510 1.1 mrg [ 6511 1.1 mrg (set (match_operand:<V_narrow_pack> 0 "s_register_operand" "=w") 6512 1.1 mrg (unspec:<V_narrow_pack> [(match_operand:<V_narrow_pack> 1 "s_register_operand" "0") 6513 1.1 mrg (match_operand:MVE_5 2 "s_register_operand" "w") 6514 1.1 mrg (match_operand:SI 3 "<MVE_pred3>" "<MVE_constraint3>") 6515 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6516 1.1 mrg VQSHRUNTQ_M_N_S)) 6517 1.1 mrg ] 6518 1.1 mrg "TARGET_HAVE_MVE" 6519 1.1 mrg "vpst\;vqshruntt.s%#<V_sz_elem>\t%q0, %q2, %3" 6520 1.1 mrg [(set_attr "type" "mve_move") 6521 1.1 mrg (set_attr "length""8")]) 6522 1.1 mrg 6523 1.1 mrg ;; 6524 1.1 mrg ;; [vrmlaldavhaq_p_u]) 6525 1.1 mrg ;; 6526 1.1 mrg (define_insn "mve_vrmlaldavhaq_p_uv4si" 6527 1.1 mrg [ 6528 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 6529 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6530 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 6531 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w") 6532 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6533 1.1 mrg VRMLALDAVHAQ_P_U)) 6534 1.1 mrg ] 6535 1.1 mrg "TARGET_HAVE_MVE" 6536 1.1 mrg "vpst\;vrmlaldavhat.u32\t%Q0, %R0, %q2, %q3" 6537 1.1 mrg [(set_attr "type" "mve_move") 6538 1.1 mrg (set_attr "length""8")]) 6539 1.1 mrg 6540 1.1 mrg ;; 6541 1.1 mrg ;; [vrmlaldavhaxq_p_s]) 6542 1.1 mrg ;; 6543 1.1 mrg (define_insn "mve_vrmlaldavhaxq_p_sv4si" 6544 1.1 mrg [ 6545 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 6546 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6547 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 6548 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w") 6549 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6550 1.1 mrg VRMLALDAVHAXQ_P_S)) 6551 1.1 mrg ] 6552 1.1 mrg "TARGET_HAVE_MVE" 6553 1.1 mrg "vpst\;vrmlaldavhaxt.s32\t%Q0, %R0, %q2, %q3" 6554 1.1 mrg [(set_attr "type" "mve_move") 6555 1.1 mrg (set_attr "length""8")]) 6556 1.1 mrg 6557 1.1 mrg ;; 6558 1.1 mrg ;; [vrmlsldavhaq_p_s]) 6559 1.1 mrg ;; 6560 1.1 mrg (define_insn "mve_vrmlsldavhaq_p_sv4si" 6561 1.1 mrg [ 6562 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 6563 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6564 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 6565 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w") 6566 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6567 1.1 mrg VRMLSLDAVHAQ_P_S)) 6568 1.1 mrg ] 6569 1.1 mrg "TARGET_HAVE_MVE" 6570 1.1 mrg "vpst\;vrmlsldavhat.s32\t%Q0, %R0, %q2, %q3" 6571 1.1 mrg [(set_attr "type" "mve_move") 6572 1.1 mrg (set_attr "length""8")]) 6573 1.1 mrg 6574 1.1 mrg ;; 6575 1.1 mrg ;; [vrmlsldavhaxq_p_s]) 6576 1.1 mrg ;; 6577 1.1 mrg (define_insn "mve_vrmlsldavhaxq_p_sv4si" 6578 1.1 mrg [ 6579 1.1 mrg (set (match_operand:DI 0 "s_register_operand" "=r") 6580 1.1 mrg (unspec:DI [(match_operand:DI 1 "s_register_operand" "0") 6581 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 6582 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w") 6583 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6584 1.1 mrg VRMLSLDAVHAXQ_P_S)) 6585 1.1 mrg ] 6586 1.1 mrg "TARGET_HAVE_MVE" 6587 1.1 mrg "vpst\;vrmlsldavhaxt.s32\t%Q0, %R0, %q2, %q3" 6588 1.1 mrg [(set_attr "type" "mve_move") 6589 1.1 mrg (set_attr "length""8")]) 6590 1.1 mrg ;; 6591 1.1 mrg ;; [vabdq_m_f]) 6592 1.1 mrg ;; 6593 1.1 mrg (define_insn "mve_vabdq_m_f<mode>" 6594 1.1 mrg [ 6595 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6596 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6597 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6598 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6599 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6600 1.1 mrg VABDQ_M_F)) 6601 1.1 mrg ] 6602 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6603 1.1 mrg "vpst\;vabdt.f%#<V_sz_elem> %q0, %q2, %q3" 6604 1.1 mrg [(set_attr "type" "mve_move") 6605 1.1 mrg (set_attr "length""8")]) 6606 1.1 mrg 6607 1.1 mrg ;; 6608 1.1 mrg ;; [vaddq_m_f]) 6609 1.1 mrg ;; 6610 1.1 mrg (define_insn "mve_vaddq_m_f<mode>" 6611 1.1 mrg [ 6612 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6613 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6614 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6615 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6616 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6617 1.1 mrg VADDQ_M_F)) 6618 1.1 mrg ] 6619 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6620 1.1 mrg "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %q3" 6621 1.1 mrg [(set_attr "type" "mve_move") 6622 1.1 mrg (set_attr "length""8")]) 6623 1.1 mrg 6624 1.1 mrg ;; 6625 1.1 mrg ;; [vaddq_m_n_f]) 6626 1.1 mrg ;; 6627 1.1 mrg (define_insn "mve_vaddq_m_n_f<mode>" 6628 1.1 mrg [ 6629 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6630 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6631 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6632 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 6633 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6634 1.1 mrg VADDQ_M_N_F)) 6635 1.1 mrg ] 6636 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6637 1.1 mrg "vpst\;vaddt.f%#<V_sz_elem> %q0, %q2, %3" 6638 1.1 mrg [(set_attr "type" "mve_move") 6639 1.1 mrg (set_attr "length""8")]) 6640 1.1 mrg 6641 1.1 mrg ;; 6642 1.1 mrg ;; [vandq_m_f]) 6643 1.1 mrg ;; 6644 1.1 mrg (define_insn "mve_vandq_m_f<mode>" 6645 1.1 mrg [ 6646 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6647 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6648 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6649 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6650 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6651 1.1 mrg VANDQ_M_F)) 6652 1.1 mrg ] 6653 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6654 1.1.1.2 mrg "vpst\;vandt\t%q0, %q2, %q3" 6655 1.1 mrg [(set_attr "type" "mve_move") 6656 1.1 mrg (set_attr "length""8")]) 6657 1.1 mrg 6658 1.1 mrg ;; 6659 1.1 mrg ;; [vbicq_m_f]) 6660 1.1 mrg ;; 6661 1.1 mrg (define_insn "mve_vbicq_m_f<mode>" 6662 1.1 mrg [ 6663 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6664 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6665 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6666 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6667 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6668 1.1 mrg VBICQ_M_F)) 6669 1.1 mrg ] 6670 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6671 1.1.1.2 mrg "vpst\;vbict\t%q0, %q2, %q3" 6672 1.1 mrg [(set_attr "type" "mve_move") 6673 1.1 mrg (set_attr "length""8")]) 6674 1.1 mrg 6675 1.1 mrg ;; 6676 1.1 mrg ;; [vbrsrq_m_n_f]) 6677 1.1 mrg ;; 6678 1.1 mrg (define_insn "mve_vbrsrq_m_n_f<mode>" 6679 1.1 mrg [ 6680 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6681 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6682 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6683 1.1 mrg (match_operand:SI 3 "s_register_operand" "r") 6684 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6685 1.1 mrg VBRSRQ_M_N_F)) 6686 1.1 mrg ] 6687 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6688 1.1 mrg "vpst\;vbrsrt.%#<V_sz_elem> %q0, %q2, %3" 6689 1.1 mrg [(set_attr "type" "mve_move") 6690 1.1 mrg (set_attr "length""8")]) 6691 1.1 mrg 6692 1.1 mrg ;; 6693 1.1 mrg ;; [vcaddq_rot270_m_f]) 6694 1.1 mrg ;; 6695 1.1 mrg (define_insn "mve_vcaddq_rot270_m_f<mode>" 6696 1.1 mrg [ 6697 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6698 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6699 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6700 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6701 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6702 1.1 mrg VCADDQ_ROT270_M_F)) 6703 1.1 mrg ] 6704 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6705 1.1 mrg "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #270" 6706 1.1 mrg [(set_attr "type" "mve_move") 6707 1.1 mrg (set_attr "length""8")]) 6708 1.1 mrg 6709 1.1 mrg ;; 6710 1.1 mrg ;; [vcaddq_rot90_m_f]) 6711 1.1 mrg ;; 6712 1.1 mrg (define_insn "mve_vcaddq_rot90_m_f<mode>" 6713 1.1 mrg [ 6714 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6715 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6716 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6717 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6718 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6719 1.1 mrg VCADDQ_ROT90_M_F)) 6720 1.1 mrg ] 6721 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6722 1.1 mrg "vpst\;vcaddt.f%#<V_sz_elem> %q0, %q2, %q3, #90" 6723 1.1 mrg [(set_attr "type" "mve_move") 6724 1.1 mrg (set_attr "length""8")]) 6725 1.1 mrg 6726 1.1 mrg ;; 6727 1.1 mrg ;; [vcmlaq_m_f]) 6728 1.1 mrg ;; 6729 1.1 mrg (define_insn "mve_vcmlaq_m_f<mode>" 6730 1.1 mrg [ 6731 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6732 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6733 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6734 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6735 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6736 1.1 mrg VCMLAQ_M_F)) 6737 1.1 mrg ] 6738 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6739 1.1 mrg "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #0" 6740 1.1 mrg [(set_attr "type" "mve_move") 6741 1.1 mrg (set_attr "length""8")]) 6742 1.1 mrg 6743 1.1 mrg ;; 6744 1.1 mrg ;; [vcmlaq_rot180_m_f]) 6745 1.1 mrg ;; 6746 1.1 mrg (define_insn "mve_vcmlaq_rot180_m_f<mode>" 6747 1.1 mrg [ 6748 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6749 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6750 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6751 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6752 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6753 1.1 mrg VCMLAQ_ROT180_M_F)) 6754 1.1 mrg ] 6755 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6756 1.1 mrg "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #180" 6757 1.1 mrg [(set_attr "type" "mve_move") 6758 1.1 mrg (set_attr "length""8")]) 6759 1.1 mrg 6760 1.1 mrg ;; 6761 1.1 mrg ;; [vcmlaq_rot270_m_f]) 6762 1.1 mrg ;; 6763 1.1 mrg (define_insn "mve_vcmlaq_rot270_m_f<mode>" 6764 1.1 mrg [ 6765 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6766 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6767 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6768 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6769 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6770 1.1 mrg VCMLAQ_ROT270_M_F)) 6771 1.1 mrg ] 6772 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6773 1.1 mrg "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #270" 6774 1.1 mrg [(set_attr "type" "mve_move") 6775 1.1 mrg (set_attr "length""8")]) 6776 1.1 mrg 6777 1.1 mrg ;; 6778 1.1 mrg ;; [vcmlaq_rot90_m_f]) 6779 1.1 mrg ;; 6780 1.1 mrg (define_insn "mve_vcmlaq_rot90_m_f<mode>" 6781 1.1 mrg [ 6782 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6783 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6784 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6785 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6786 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6787 1.1 mrg VCMLAQ_ROT90_M_F)) 6788 1.1 mrg ] 6789 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6790 1.1 mrg "vpst\;vcmlat.f%#<V_sz_elem> %q0, %q2, %q3, #90" 6791 1.1 mrg [(set_attr "type" "mve_move") 6792 1.1 mrg (set_attr "length""8")]) 6793 1.1 mrg 6794 1.1 mrg ;; 6795 1.1 mrg ;; [vcmulq_m_f]) 6796 1.1 mrg ;; 6797 1.1 mrg (define_insn "mve_vcmulq_m_f<mode>" 6798 1.1 mrg [ 6799 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6800 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6801 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6802 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6803 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6804 1.1 mrg VCMULQ_M_F)) 6805 1.1 mrg ] 6806 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6807 1.1 mrg "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #0" 6808 1.1 mrg [(set_attr "type" "mve_move") 6809 1.1 mrg (set_attr "length""8")]) 6810 1.1 mrg 6811 1.1 mrg ;; 6812 1.1 mrg ;; [vcmulq_rot180_m_f]) 6813 1.1 mrg ;; 6814 1.1 mrg (define_insn "mve_vcmulq_rot180_m_f<mode>" 6815 1.1 mrg [ 6816 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6817 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6818 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6819 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6820 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6821 1.1 mrg VCMULQ_ROT180_M_F)) 6822 1.1 mrg ] 6823 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6824 1.1 mrg "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #180" 6825 1.1 mrg [(set_attr "type" "mve_move") 6826 1.1 mrg (set_attr "length""8")]) 6827 1.1 mrg 6828 1.1 mrg ;; 6829 1.1 mrg ;; [vcmulq_rot270_m_f]) 6830 1.1 mrg ;; 6831 1.1 mrg (define_insn "mve_vcmulq_rot270_m_f<mode>" 6832 1.1 mrg [ 6833 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6834 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6835 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6836 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6837 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6838 1.1 mrg VCMULQ_ROT270_M_F)) 6839 1.1 mrg ] 6840 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6841 1.1 mrg "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #270" 6842 1.1 mrg [(set_attr "type" "mve_move") 6843 1.1 mrg (set_attr "length""8")]) 6844 1.1 mrg 6845 1.1 mrg ;; 6846 1.1 mrg ;; [vcmulq_rot90_m_f]) 6847 1.1 mrg ;; 6848 1.1 mrg (define_insn "mve_vcmulq_rot90_m_f<mode>" 6849 1.1 mrg [ 6850 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "<earlyclobber_32>") 6851 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6852 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6853 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6854 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6855 1.1 mrg VCMULQ_ROT90_M_F)) 6856 1.1 mrg ] 6857 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6858 1.1 mrg "vpst\;vcmult.f%#<V_sz_elem> %q0, %q2, %q3, #90" 6859 1.1 mrg [(set_attr "type" "mve_move") 6860 1.1 mrg (set_attr "length""8")]) 6861 1.1 mrg 6862 1.1 mrg ;; 6863 1.1 mrg ;; [veorq_m_f]) 6864 1.1 mrg ;; 6865 1.1 mrg (define_insn "mve_veorq_m_f<mode>" 6866 1.1 mrg [ 6867 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6868 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6869 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6870 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6871 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6872 1.1 mrg VEORQ_M_F)) 6873 1.1 mrg ] 6874 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6875 1.1.1.2 mrg "vpst\;veort\t%q0, %q2, %q3" 6876 1.1 mrg [(set_attr "type" "mve_move") 6877 1.1 mrg (set_attr "length""8")]) 6878 1.1 mrg 6879 1.1 mrg ;; 6880 1.1 mrg ;; [vfmaq_m_f]) 6881 1.1 mrg ;; 6882 1.1 mrg (define_insn "mve_vfmaq_m_f<mode>" 6883 1.1 mrg [ 6884 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6885 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6886 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6887 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6888 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6889 1.1 mrg VFMAQ_M_F)) 6890 1.1 mrg ] 6891 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6892 1.1 mrg "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %q3" 6893 1.1 mrg [(set_attr "type" "mve_move") 6894 1.1 mrg (set_attr "length""8")]) 6895 1.1 mrg 6896 1.1 mrg ;; 6897 1.1 mrg ;; [vfmaq_m_n_f]) 6898 1.1 mrg ;; 6899 1.1 mrg (define_insn "mve_vfmaq_m_n_f<mode>" 6900 1.1 mrg [ 6901 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6902 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6903 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6904 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 6905 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6906 1.1 mrg VFMAQ_M_N_F)) 6907 1.1 mrg ] 6908 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6909 1.1 mrg "vpst\;vfmat.f%#<V_sz_elem> %q0, %q2, %3" 6910 1.1 mrg [(set_attr "type" "mve_move") 6911 1.1 mrg (set_attr "length""8")]) 6912 1.1 mrg 6913 1.1 mrg ;; 6914 1.1 mrg ;; [vfmasq_m_n_f]) 6915 1.1 mrg ;; 6916 1.1 mrg (define_insn "mve_vfmasq_m_n_f<mode>" 6917 1.1 mrg [ 6918 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6919 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6920 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6921 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 6922 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6923 1.1 mrg VFMASQ_M_N_F)) 6924 1.1 mrg ] 6925 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6926 1.1 mrg "vpst\;vfmast.f%#<V_sz_elem> %q0, %q2, %3" 6927 1.1 mrg [(set_attr "type" "mve_move") 6928 1.1 mrg (set_attr "length""8")]) 6929 1.1 mrg 6930 1.1 mrg ;; 6931 1.1 mrg ;; [vfmsq_m_f]) 6932 1.1 mrg ;; 6933 1.1 mrg (define_insn "mve_vfmsq_m_f<mode>" 6934 1.1 mrg [ 6935 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6936 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6937 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6938 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6939 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6940 1.1 mrg VFMSQ_M_F)) 6941 1.1 mrg ] 6942 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6943 1.1 mrg "vpst\;vfmst.f%#<V_sz_elem> %q0, %q2, %q3" 6944 1.1 mrg [(set_attr "type" "mve_move") 6945 1.1 mrg (set_attr "length""8")]) 6946 1.1 mrg 6947 1.1 mrg ;; 6948 1.1 mrg ;; [vmaxnmq_m_f]) 6949 1.1 mrg ;; 6950 1.1 mrg (define_insn "mve_vmaxnmq_m_f<mode>" 6951 1.1 mrg [ 6952 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6953 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6954 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6955 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6956 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6957 1.1 mrg VMAXNMQ_M_F)) 6958 1.1 mrg ] 6959 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6960 1.1 mrg "vpst\;vmaxnmt.f%#<V_sz_elem> %q0, %q2, %q3" 6961 1.1 mrg [(set_attr "type" "mve_move") 6962 1.1 mrg (set_attr "length""8")]) 6963 1.1 mrg 6964 1.1 mrg ;; 6965 1.1 mrg ;; [vminnmq_m_f]) 6966 1.1 mrg ;; 6967 1.1 mrg (define_insn "mve_vminnmq_m_f<mode>" 6968 1.1 mrg [ 6969 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6970 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6971 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6972 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6973 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6974 1.1 mrg VMINNMQ_M_F)) 6975 1.1 mrg ] 6976 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6977 1.1 mrg "vpst\;vminnmt.f%#<V_sz_elem> %q0, %q2, %q3" 6978 1.1 mrg [(set_attr "type" "mve_move") 6979 1.1 mrg (set_attr "length""8")]) 6980 1.1 mrg 6981 1.1 mrg ;; 6982 1.1 mrg ;; [vmulq_m_f]) 6983 1.1 mrg ;; 6984 1.1 mrg (define_insn "mve_vmulq_m_f<mode>" 6985 1.1 mrg [ 6986 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 6987 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 6988 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 6989 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 6990 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 6991 1.1 mrg VMULQ_M_F)) 6992 1.1 mrg ] 6993 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 6994 1.1 mrg "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %q3" 6995 1.1 mrg [(set_attr "type" "mve_move") 6996 1.1 mrg (set_attr "length""8")]) 6997 1.1 mrg 6998 1.1 mrg ;; 6999 1.1 mrg ;; [vmulq_m_n_f]) 7000 1.1 mrg ;; 7001 1.1 mrg (define_insn "mve_vmulq_m_n_f<mode>" 7002 1.1 mrg [ 7003 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 7004 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 7005 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 7006 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 7007 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 7008 1.1 mrg VMULQ_M_N_F)) 7009 1.1 mrg ] 7010 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7011 1.1 mrg "vpst\;vmult.f%#<V_sz_elem> %q0, %q2, %3" 7012 1.1 mrg [(set_attr "type" "mve_move") 7013 1.1 mrg (set_attr "length""8")]) 7014 1.1 mrg 7015 1.1 mrg ;; 7016 1.1 mrg ;; [vornq_m_f]) 7017 1.1 mrg ;; 7018 1.1 mrg (define_insn "mve_vornq_m_f<mode>" 7019 1.1 mrg [ 7020 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 7021 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 7022 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 7023 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 7024 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 7025 1.1 mrg VORNQ_M_F)) 7026 1.1 mrg ] 7027 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7028 1.1.1.2 mrg "vpst\;vornt\t%q0, %q2, %q3" 7029 1.1 mrg [(set_attr "type" "mve_move") 7030 1.1 mrg (set_attr "length""8")]) 7031 1.1 mrg 7032 1.1 mrg ;; 7033 1.1 mrg ;; [vorrq_m_f]) 7034 1.1 mrg ;; 7035 1.1 mrg (define_insn "mve_vorrq_m_f<mode>" 7036 1.1 mrg [ 7037 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 7038 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 7039 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 7040 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 7041 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 7042 1.1 mrg VORRQ_M_F)) 7043 1.1 mrg ] 7044 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7045 1.1.1.2 mrg "vpst\;vorrt\t%q0, %q2, %q3" 7046 1.1 mrg [(set_attr "type" "mve_move") 7047 1.1 mrg (set_attr "length""8")]) 7048 1.1 mrg 7049 1.1 mrg ;; 7050 1.1 mrg ;; [vsubq_m_f]) 7051 1.1 mrg ;; 7052 1.1 mrg (define_insn "mve_vsubq_m_f<mode>" 7053 1.1 mrg [ 7054 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 7055 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 7056 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 7057 1.1 mrg (match_operand:MVE_0 3 "s_register_operand" "w") 7058 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 7059 1.1 mrg VSUBQ_M_F)) 7060 1.1 mrg ] 7061 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7062 1.1 mrg "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %q3" 7063 1.1 mrg [(set_attr "type" "mve_move") 7064 1.1 mrg (set_attr "length""8")]) 7065 1.1 mrg 7066 1.1 mrg ;; 7067 1.1 mrg ;; [vsubq_m_n_f]) 7068 1.1 mrg ;; 7069 1.1 mrg (define_insn "mve_vsubq_m_n_f<mode>" 7070 1.1 mrg [ 7071 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 7072 1.1 mrg (unspec:MVE_0 [(match_operand:MVE_0 1 "s_register_operand" "0") 7073 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w") 7074 1.1 mrg (match_operand:<V_elem> 3 "s_register_operand" "r") 7075 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand" "Up")] 7076 1.1 mrg VSUBQ_M_N_F)) 7077 1.1 mrg ] 7078 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7079 1.1 mrg "vpst\;vsubt.f%#<V_sz_elem>\t%q0, %q2, %3" 7080 1.1 mrg [(set_attr "type" "mve_move") 7081 1.1 mrg (set_attr "length""8")]) 7082 1.1 mrg 7083 1.1 mrg ;; 7084 1.1 mrg ;; [vstrbq_s vstrbq_u] 7085 1.1 mrg ;; 7086 1.1 mrg (define_insn "mve_vstrbq_<supf><mode>" 7087 1.1 mrg [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux") 7088 1.1 mrg (unspec:<MVE_B_ELEM> [(match_operand:MVE_2 1 "s_register_operand" "w")] 7089 1.1 mrg VSTRBQ)) 7090 1.1 mrg ] 7091 1.1 mrg "TARGET_HAVE_MVE" 7092 1.1 mrg { 7093 1.1 mrg rtx ops[2]; 7094 1.1 mrg int regno = REGNO (operands[1]); 7095 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno); 7096 1.1 mrg ops[0] = operands[0]; 7097 1.1 mrg output_asm_insn("vstrb.<V_sz_elem>\t%q1, %E0",ops); 7098 1.1 mrg return ""; 7099 1.1 mrg } 7100 1.1 mrg [(set_attr "length" "4")]) 7101 1.1 mrg 7102 1.1 mrg ;; 7103 1.1 mrg ;; [vstrbq_scatter_offset_s vstrbq_scatter_offset_u] 7104 1.1 mrg ;; 7105 1.1 mrg (define_expand "mve_vstrbq_scatter_offset_<supf><mode>" 7106 1.1 mrg [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory") 7107 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 7108 1.1 mrg (match_operand:MVE_2 2 "s_register_operand") 7109 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRBSOQ)] 7110 1.1 mrg "TARGET_HAVE_MVE" 7111 1.1 mrg { 7112 1.1 mrg rtx ind = XEXP (operands[0], 0); 7113 1.1 mrg gcc_assert (REG_P (ind)); 7114 1.1 mrg emit_insn (gen_mve_vstrbq_scatter_offset_<supf><mode>_insn (ind, operands[1], 7115 1.1 mrg operands[2])); 7116 1.1 mrg DONE; 7117 1.1 mrg }) 7118 1.1 mrg 7119 1.1 mrg (define_insn "mve_vstrbq_scatter_offset_<supf><mode>_insn" 7120 1.1 mrg [(set (mem:BLK (scratch)) 7121 1.1 mrg (unspec:BLK 7122 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 7123 1.1 mrg (match_operand:MVE_2 1 "s_register_operand" "w") 7124 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 7125 1.1 mrg VSTRBSOQ))] 7126 1.1 mrg "TARGET_HAVE_MVE" 7127 1.1 mrg "vstrb.<V_sz_elem>\t%q2, [%0, %q1]" 7128 1.1 mrg [(set_attr "length" "4")]) 7129 1.1 mrg 7130 1.1 mrg ;; 7131 1.1 mrg ;; [vstrwq_scatter_base_s vstrwq_scatter_base_u] 7132 1.1 mrg ;; 7133 1.1 mrg (define_insn "mve_vstrwq_scatter_base_<supf>v4si" 7134 1.1 mrg [(set (mem:BLK (scratch)) 7135 1.1 mrg (unspec:BLK 7136 1.1 mrg [(match_operand:V4SI 0 "s_register_operand" "w") 7137 1.1 mrg (match_operand:SI 1 "immediate_operand" "i") 7138 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 7139 1.1 mrg VSTRWSBQ)) 7140 1.1 mrg ] 7141 1.1 mrg "TARGET_HAVE_MVE" 7142 1.1 mrg { 7143 1.1 mrg rtx ops[3]; 7144 1.1 mrg ops[0] = operands[0]; 7145 1.1 mrg ops[1] = operands[1]; 7146 1.1 mrg ops[2] = operands[2]; 7147 1.1 mrg output_asm_insn("vstrw.u32\t%q2, [%q0, %1]",ops); 7148 1.1 mrg return ""; 7149 1.1 mrg } 7150 1.1 mrg [(set_attr "length" "4")]) 7151 1.1 mrg 7152 1.1 mrg ;; 7153 1.1 mrg ;; [vldrbq_gather_offset_s vldrbq_gather_offset_u] 7154 1.1 mrg ;; 7155 1.1 mrg (define_insn "mve_vldrbq_gather_offset_<supf><mode>" 7156 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=&w") 7157 1.1 mrg (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us") 7158 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w")] 7159 1.1 mrg VLDRBGOQ)) 7160 1.1 mrg ] 7161 1.1 mrg "TARGET_HAVE_MVE" 7162 1.1 mrg { 7163 1.1 mrg rtx ops[3]; 7164 1.1 mrg ops[0] = operands[0]; 7165 1.1 mrg ops[1] = operands[1]; 7166 1.1 mrg ops[2] = operands[2]; 7167 1.1 mrg if (!strcmp ("<supf>","s") && <V_sz_elem> == 8) 7168 1.1 mrg output_asm_insn ("vldrb.u8\t%q0, [%m1, %q2]",ops); 7169 1.1 mrg else 7170 1.1 mrg output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops); 7171 1.1 mrg return ""; 7172 1.1 mrg } 7173 1.1 mrg [(set_attr "length" "4")]) 7174 1.1 mrg 7175 1.1 mrg ;; 7176 1.1 mrg ;; [vldrbq_s vldrbq_u] 7177 1.1 mrg ;; 7178 1.1 mrg (define_insn "mve_vldrbq_<supf><mode>" 7179 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 7180 1.1 mrg (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux")] 7181 1.1 mrg VLDRBQ)) 7182 1.1 mrg ] 7183 1.1 mrg "TARGET_HAVE_MVE" 7184 1.1 mrg { 7185 1.1 mrg rtx ops[2]; 7186 1.1 mrg int regno = REGNO (operands[0]); 7187 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 7188 1.1 mrg ops[1] = operands[1]; 7189 1.1 mrg if (<V_sz_elem> == 8) 7190 1.1 mrg output_asm_insn ("vldrb.<V_sz_elem>\t%q0, %E1",ops); 7191 1.1 mrg else 7192 1.1 mrg output_asm_insn ("vldrb.<supf><V_sz_elem>\t%q0, %E1",ops); 7193 1.1 mrg return ""; 7194 1.1 mrg } 7195 1.1 mrg [(set_attr "length" "4")]) 7196 1.1 mrg 7197 1.1 mrg ;; 7198 1.1 mrg ;; [vldrwq_gather_base_s vldrwq_gather_base_u] 7199 1.1 mrg ;; 7200 1.1 mrg (define_insn "mve_vldrwq_gather_base_<supf>v4si" 7201 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 7202 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 7203 1.1 mrg (match_operand:SI 2 "immediate_operand" "i")] 7204 1.1 mrg VLDRWGBQ)) 7205 1.1 mrg ] 7206 1.1 mrg "TARGET_HAVE_MVE" 7207 1.1 mrg { 7208 1.1 mrg rtx ops[3]; 7209 1.1 mrg ops[0] = operands[0]; 7210 1.1 mrg ops[1] = operands[1]; 7211 1.1 mrg ops[2] = operands[2]; 7212 1.1 mrg output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops); 7213 1.1 mrg return ""; 7214 1.1 mrg } 7215 1.1 mrg [(set_attr "length" "4")]) 7216 1.1 mrg 7217 1.1 mrg ;; 7218 1.1 mrg ;; [vstrbq_scatter_offset_p_s vstrbq_scatter_offset_p_u] 7219 1.1 mrg ;; 7220 1.1 mrg (define_expand "mve_vstrbq_scatter_offset_p_<supf><mode>" 7221 1.1 mrg [(match_operand:<MVE_B_ELEM> 0 "mve_scatter_memory") 7222 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 7223 1.1 mrg (match_operand:MVE_2 2 "s_register_operand") 7224 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up") 7225 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRBSOQ)] 7226 1.1 mrg "TARGET_HAVE_MVE" 7227 1.1 mrg { 7228 1.1 mrg rtx ind = XEXP (operands[0], 0); 7229 1.1 mrg gcc_assert (REG_P (ind)); 7230 1.1 mrg emit_insn ( 7231 1.1 mrg gen_mve_vstrbq_scatter_offset_p_<supf><mode>_insn (ind, operands[1], 7232 1.1 mrg operands[2], 7233 1.1 mrg operands[3])); 7234 1.1 mrg DONE; 7235 1.1 mrg }) 7236 1.1 mrg 7237 1.1 mrg (define_insn "mve_vstrbq_scatter_offset_p_<supf><mode>_insn" 7238 1.1 mrg [(set (mem:BLK (scratch)) 7239 1.1 mrg (unspec:BLK 7240 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 7241 1.1 mrg (match_operand:MVE_2 1 "s_register_operand" "w") 7242 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 7243 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 7244 1.1 mrg VSTRBSOQ))] 7245 1.1 mrg "TARGET_HAVE_MVE" 7246 1.1 mrg "vpst\;vstrbt.<V_sz_elem>\t%q2, [%0, %q1]" 7247 1.1 mrg [(set_attr "length" "8")]) 7248 1.1 mrg 7249 1.1 mrg ;; 7250 1.1 mrg ;; [vstrwq_scatter_base_p_s vstrwq_scatter_base_p_u] 7251 1.1 mrg ;; 7252 1.1 mrg (define_insn "mve_vstrwq_scatter_base_p_<supf>v4si" 7253 1.1 mrg [(set (mem:BLK (scratch)) 7254 1.1 mrg (unspec:BLK 7255 1.1 mrg [(match_operand:V4SI 0 "s_register_operand" "w") 7256 1.1 mrg (match_operand:SI 1 "immediate_operand" "i") 7257 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 7258 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 7259 1.1 mrg VSTRWSBQ)) 7260 1.1 mrg ] 7261 1.1 mrg "TARGET_HAVE_MVE" 7262 1.1 mrg { 7263 1.1 mrg rtx ops[3]; 7264 1.1 mrg ops[0] = operands[0]; 7265 1.1 mrg ops[1] = operands[1]; 7266 1.1 mrg ops[2] = operands[2]; 7267 1.1 mrg output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops); 7268 1.1 mrg return ""; 7269 1.1 mrg } 7270 1.1 mrg [(set_attr "length" "8")]) 7271 1.1 mrg 7272 1.1 mrg (define_insn "mve_vstrbq_p_<supf><mode>" 7273 1.1 mrg [(set (match_operand:<MVE_B_ELEM> 0 "mve_memory_operand" "=Ux") 7274 1.1.1.2 mrg (unspec:<MVE_B_ELEM> 7275 1.1.1.2 mrg [(match_operand:MVE_2 1 "s_register_operand" "w") 7276 1.1.1.2 mrg (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up") 7277 1.1.1.2 mrg (match_dup 0)] 7278 1.1.1.2 mrg VSTRBQ))] 7279 1.1 mrg "TARGET_HAVE_MVE" 7280 1.1 mrg { 7281 1.1 mrg rtx ops[2]; 7282 1.1 mrg int regno = REGNO (operands[1]); 7283 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno); 7284 1.1 mrg ops[0] = operands[0]; 7285 1.1 mrg output_asm_insn ("vpst\;vstrbt.<V_sz_elem>\t%q1, %E0",ops); 7286 1.1 mrg return ""; 7287 1.1 mrg } 7288 1.1 mrg [(set_attr "length" "8")]) 7289 1.1 mrg 7290 1.1 mrg ;; 7291 1.1 mrg ;; [vldrbq_gather_offset_z_s vldrbq_gather_offset_z_u] 7292 1.1 mrg ;; 7293 1.1 mrg (define_insn "mve_vldrbq_gather_offset_z_<supf><mode>" 7294 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=&w") 7295 1.1 mrg (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "memory_operand" "Us") 7296 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w") 7297 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 7298 1.1 mrg VLDRBGOQ)) 7299 1.1 mrg ] 7300 1.1 mrg "TARGET_HAVE_MVE" 7301 1.1 mrg { 7302 1.1 mrg rtx ops[4]; 7303 1.1 mrg ops[0] = operands[0]; 7304 1.1 mrg ops[1] = operands[1]; 7305 1.1 mrg ops[2] = operands[2]; 7306 1.1 mrg ops[3] = operands[3]; 7307 1.1 mrg if (!strcmp ("<supf>","s") && <V_sz_elem> == 8) 7308 1.1 mrg output_asm_insn ("vpst\n\tvldrbt.u8\t%q0, [%m1, %q2]",ops); 7309 1.1 mrg else 7310 1.1 mrg output_asm_insn ("vpst\n\tvldrbt.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops); 7311 1.1 mrg return ""; 7312 1.1 mrg } 7313 1.1 mrg [(set_attr "length" "8")]) 7314 1.1 mrg 7315 1.1 mrg ;; 7316 1.1 mrg ;; [vldrbq_z_s vldrbq_z_u] 7317 1.1 mrg ;; 7318 1.1 mrg (define_insn "mve_vldrbq_z_<supf><mode>" 7319 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 7320 1.1 mrg (unspec:MVE_2 [(match_operand:<MVE_B_ELEM> 1 "mve_memory_operand" "Ux") 7321 1.1.1.2 mrg (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up")] 7322 1.1 mrg VLDRBQ)) 7323 1.1 mrg ] 7324 1.1 mrg "TARGET_HAVE_MVE" 7325 1.1 mrg { 7326 1.1 mrg rtx ops[2]; 7327 1.1 mrg int regno = REGNO (operands[0]); 7328 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 7329 1.1 mrg ops[1] = operands[1]; 7330 1.1 mrg if (<V_sz_elem> == 8) 7331 1.1 mrg output_asm_insn ("vpst\;vldrbt.<V_sz_elem>\t%q0, %E1",ops); 7332 1.1 mrg else 7333 1.1 mrg output_asm_insn ("vpst\;vldrbt.<supf><V_sz_elem>\t%q0, %E1",ops); 7334 1.1 mrg return ""; 7335 1.1 mrg } 7336 1.1 mrg [(set_attr "length" "8")]) 7337 1.1 mrg 7338 1.1 mrg ;; 7339 1.1 mrg ;; [vldrwq_gather_base_z_s vldrwq_gather_base_z_u] 7340 1.1 mrg ;; 7341 1.1 mrg (define_insn "mve_vldrwq_gather_base_z_<supf>v4si" 7342 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 7343 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 7344 1.1 mrg (match_operand:SI 2 "immediate_operand" "i") 7345 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 7346 1.1 mrg VLDRWGBQ)) 7347 1.1 mrg ] 7348 1.1 mrg "TARGET_HAVE_MVE" 7349 1.1 mrg { 7350 1.1 mrg rtx ops[3]; 7351 1.1 mrg ops[0] = operands[0]; 7352 1.1 mrg ops[1] = operands[1]; 7353 1.1 mrg ops[2] = operands[2]; 7354 1.1 mrg output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops); 7355 1.1 mrg return ""; 7356 1.1 mrg } 7357 1.1 mrg [(set_attr "length" "8")]) 7358 1.1 mrg 7359 1.1 mrg ;; 7360 1.1 mrg ;; [vldrhq_f] 7361 1.1 mrg ;; 7362 1.1 mrg (define_insn "mve_vldrhq_fv8hf" 7363 1.1 mrg [(set (match_operand:V8HF 0 "s_register_operand" "=w") 7364 1.1 mrg (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux")] 7365 1.1 mrg VLDRHQ_F)) 7366 1.1 mrg ] 7367 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7368 1.1 mrg { 7369 1.1 mrg rtx ops[2]; 7370 1.1 mrg int regno = REGNO (operands[0]); 7371 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 7372 1.1 mrg ops[1] = operands[1]; 7373 1.1 mrg output_asm_insn ("vldrh.16\t%q0, %E1",ops); 7374 1.1 mrg return ""; 7375 1.1 mrg } 7376 1.1 mrg [(set_attr "length" "4")]) 7377 1.1 mrg 7378 1.1 mrg ;; 7379 1.1 mrg ;; [vldrhq_gather_offset_s vldrhq_gather_offset_u] 7380 1.1 mrg ;; 7381 1.1 mrg (define_insn "mve_vldrhq_gather_offset_<supf><mode>" 7382 1.1 mrg [(set (match_operand:MVE_6 0 "s_register_operand" "=&w") 7383 1.1 mrg (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us") 7384 1.1 mrg (match_operand:MVE_6 2 "s_register_operand" "w")] 7385 1.1 mrg VLDRHGOQ)) 7386 1.1 mrg ] 7387 1.1 mrg "TARGET_HAVE_MVE" 7388 1.1 mrg { 7389 1.1 mrg rtx ops[3]; 7390 1.1 mrg ops[0] = operands[0]; 7391 1.1 mrg ops[1] = operands[1]; 7392 1.1 mrg ops[2] = operands[2]; 7393 1.1 mrg if (!strcmp ("<supf>","s") && <V_sz_elem> == 16) 7394 1.1 mrg output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2]",ops); 7395 1.1 mrg else 7396 1.1 mrg output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops); 7397 1.1 mrg return ""; 7398 1.1 mrg } 7399 1.1 mrg [(set_attr "length" "4")]) 7400 1.1 mrg 7401 1.1 mrg ;; 7402 1.1 mrg ;; [vldrhq_gather_offset_z_s vldrhq_gather_offset_z_u] 7403 1.1 mrg ;; 7404 1.1 mrg (define_insn "mve_vldrhq_gather_offset_z_<supf><mode>" 7405 1.1 mrg [(set (match_operand:MVE_6 0 "s_register_operand" "=&w") 7406 1.1 mrg (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us") 7407 1.1 mrg (match_operand:MVE_6 2 "s_register_operand" "w") 7408 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up") 7409 1.1 mrg ]VLDRHGOQ)) 7410 1.1 mrg ] 7411 1.1 mrg "TARGET_HAVE_MVE" 7412 1.1 mrg { 7413 1.1 mrg rtx ops[4]; 7414 1.1 mrg ops[0] = operands[0]; 7415 1.1 mrg ops[1] = operands[1]; 7416 1.1 mrg ops[2] = operands[2]; 7417 1.1 mrg ops[3] = operands[3]; 7418 1.1 mrg if (!strcmp ("<supf>","s") && <V_sz_elem> == 16) 7419 1.1 mrg output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2]",ops); 7420 1.1 mrg else 7421 1.1 mrg output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2]",ops); 7422 1.1 mrg return ""; 7423 1.1 mrg } 7424 1.1 mrg [(set_attr "length" "8")]) 7425 1.1 mrg 7426 1.1 mrg ;; 7427 1.1 mrg ;; [vldrhq_gather_shifted_offset_s vldrhq_gather_shifted_offset_u] 7428 1.1 mrg ;; 7429 1.1 mrg (define_insn "mve_vldrhq_gather_shifted_offset_<supf><mode>" 7430 1.1 mrg [(set (match_operand:MVE_6 0 "s_register_operand" "=&w") 7431 1.1 mrg (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us") 7432 1.1 mrg (match_operand:MVE_6 2 "s_register_operand" "w")] 7433 1.1 mrg VLDRHGSOQ)) 7434 1.1 mrg ] 7435 1.1 mrg "TARGET_HAVE_MVE" 7436 1.1 mrg { 7437 1.1 mrg rtx ops[3]; 7438 1.1 mrg ops[0] = operands[0]; 7439 1.1 mrg ops[1] = operands[1]; 7440 1.1 mrg ops[2] = operands[2]; 7441 1.1 mrg if (!strcmp ("<supf>","s") && <V_sz_elem> == 16) 7442 1.1 mrg output_asm_insn ("vldrh.u16\t%q0, [%m1, %q2, uxtw #1]",ops); 7443 1.1 mrg else 7444 1.1 mrg output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops); 7445 1.1 mrg return ""; 7446 1.1 mrg } 7447 1.1 mrg [(set_attr "length" "4")]) 7448 1.1 mrg 7449 1.1 mrg ;; 7450 1.1 mrg ;; [vldrhq_gather_shifted_offset_z_s vldrhq_gather_shited_offset_z_u] 7451 1.1 mrg ;; 7452 1.1 mrg (define_insn "mve_vldrhq_gather_shifted_offset_z_<supf><mode>" 7453 1.1 mrg [(set (match_operand:MVE_6 0 "s_register_operand" "=&w") 7454 1.1 mrg (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "memory_operand" "Us") 7455 1.1 mrg (match_operand:MVE_6 2 "s_register_operand" "w") 7456 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up") 7457 1.1 mrg ]VLDRHGSOQ)) 7458 1.1 mrg ] 7459 1.1 mrg "TARGET_HAVE_MVE" 7460 1.1 mrg { 7461 1.1 mrg rtx ops[4]; 7462 1.1 mrg ops[0] = operands[0]; 7463 1.1 mrg ops[1] = operands[1]; 7464 1.1 mrg ops[2] = operands[2]; 7465 1.1 mrg ops[3] = operands[3]; 7466 1.1 mrg if (!strcmp ("<supf>","s") && <V_sz_elem> == 16) 7467 1.1 mrg output_asm_insn ("vpst\n\tvldrht.u16\t%q0, [%m1, %q2, uxtw #1]",ops); 7468 1.1 mrg else 7469 1.1 mrg output_asm_insn ("vpst\n\tvldrht.<supf><V_sz_elem>\t%q0, [%m1, %q2, uxtw #1]",ops); 7470 1.1 mrg return ""; 7471 1.1 mrg } 7472 1.1 mrg [(set_attr "length" "8")]) 7473 1.1 mrg 7474 1.1 mrg ;; 7475 1.1 mrg ;; [vldrhq_s, vldrhq_u] 7476 1.1 mrg ;; 7477 1.1 mrg (define_insn "mve_vldrhq_<supf><mode>" 7478 1.1 mrg [(set (match_operand:MVE_6 0 "s_register_operand" "=w") 7479 1.1 mrg (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux")] 7480 1.1 mrg VLDRHQ)) 7481 1.1 mrg ] 7482 1.1 mrg "TARGET_HAVE_MVE" 7483 1.1 mrg { 7484 1.1 mrg rtx ops[2]; 7485 1.1 mrg int regno = REGNO (operands[0]); 7486 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 7487 1.1 mrg ops[1] = operands[1]; 7488 1.1 mrg if (<V_sz_elem> == 16) 7489 1.1 mrg output_asm_insn ("vldrh.16\t%q0, %E1",ops); 7490 1.1 mrg else 7491 1.1 mrg output_asm_insn ("vldrh.<supf><V_sz_elem>\t%q0, %E1",ops); 7492 1.1 mrg return ""; 7493 1.1 mrg } 7494 1.1 mrg [(set_attr "length" "4")]) 7495 1.1 mrg 7496 1.1 mrg ;; 7497 1.1 mrg ;; [vldrhq_z_f] 7498 1.1 mrg ;; 7499 1.1 mrg (define_insn "mve_vldrhq_z_fv8hf" 7500 1.1 mrg [(set (match_operand:V8HF 0 "s_register_operand" "=w") 7501 1.1 mrg (unspec:V8HF [(match_operand:V8HI 1 "mve_memory_operand" "Ux") 7502 1.1.1.2 mrg (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up")] 7503 1.1 mrg VLDRHQ_F)) 7504 1.1 mrg ] 7505 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7506 1.1 mrg { 7507 1.1 mrg rtx ops[2]; 7508 1.1 mrg int regno = REGNO (operands[0]); 7509 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 7510 1.1 mrg ops[1] = operands[1]; 7511 1.1 mrg output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops); 7512 1.1 mrg return ""; 7513 1.1 mrg } 7514 1.1 mrg [(set_attr "length" "8")]) 7515 1.1 mrg 7516 1.1 mrg ;; 7517 1.1 mrg ;; [vldrhq_z_s vldrhq_z_u] 7518 1.1 mrg ;; 7519 1.1 mrg (define_insn "mve_vldrhq_z_<supf><mode>" 7520 1.1 mrg [(set (match_operand:MVE_6 0 "s_register_operand" "=w") 7521 1.1 mrg (unspec:MVE_6 [(match_operand:<MVE_H_ELEM> 1 "mve_memory_operand" "Ux") 7522 1.1.1.2 mrg (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up")] 7523 1.1 mrg VLDRHQ)) 7524 1.1 mrg ] 7525 1.1 mrg "TARGET_HAVE_MVE" 7526 1.1 mrg { 7527 1.1 mrg rtx ops[2]; 7528 1.1 mrg int regno = REGNO (operands[0]); 7529 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 7530 1.1 mrg ops[1] = operands[1]; 7531 1.1 mrg if (<V_sz_elem> == 16) 7532 1.1 mrg output_asm_insn ("vpst\;vldrht.16\t%q0, %E1",ops); 7533 1.1 mrg else 7534 1.1 mrg output_asm_insn ("vpst\;vldrht.<supf><V_sz_elem>\t%q0, %E1",ops); 7535 1.1 mrg return ""; 7536 1.1 mrg } 7537 1.1 mrg [(set_attr "length" "8")]) 7538 1.1 mrg 7539 1.1 mrg ;; 7540 1.1 mrg ;; [vldrwq_f] 7541 1.1 mrg ;; 7542 1.1 mrg (define_insn "mve_vldrwq_fv4sf" 7543 1.1 mrg [(set (match_operand:V4SF 0 "s_register_operand" "=w") 7544 1.1.1.2 mrg (unspec:V4SF [(match_operand:V4SI 1 "mve_memory_operand" "Ux")] 7545 1.1 mrg VLDRWQ_F)) 7546 1.1 mrg ] 7547 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7548 1.1 mrg { 7549 1.1 mrg rtx ops[2]; 7550 1.1 mrg int regno = REGNO (operands[0]); 7551 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 7552 1.1 mrg ops[1] = operands[1]; 7553 1.1 mrg output_asm_insn ("vldrw.32\t%q0, %E1",ops); 7554 1.1 mrg return ""; 7555 1.1 mrg } 7556 1.1 mrg [(set_attr "length" "4")]) 7557 1.1 mrg 7558 1.1 mrg ;; 7559 1.1 mrg ;; [vldrwq_s vldrwq_u] 7560 1.1 mrg ;; 7561 1.1 mrg (define_insn "mve_vldrwq_<supf>v4si" 7562 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=w") 7563 1.1.1.2 mrg (unspec:V4SI [(match_operand:V4SI 1 "mve_memory_operand" "Ux")] 7564 1.1 mrg VLDRWQ)) 7565 1.1 mrg ] 7566 1.1 mrg "TARGET_HAVE_MVE" 7567 1.1 mrg { 7568 1.1 mrg rtx ops[2]; 7569 1.1 mrg int regno = REGNO (operands[0]); 7570 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 7571 1.1 mrg ops[1] = operands[1]; 7572 1.1 mrg output_asm_insn ("vldrw.32\t%q0, %E1",ops); 7573 1.1 mrg return ""; 7574 1.1 mrg } 7575 1.1 mrg [(set_attr "length" "4")]) 7576 1.1 mrg 7577 1.1 mrg ;; 7578 1.1 mrg ;; [vldrwq_z_f] 7579 1.1 mrg ;; 7580 1.1 mrg (define_insn "mve_vldrwq_z_fv4sf" 7581 1.1 mrg [(set (match_operand:V4SF 0 "s_register_operand" "=w") 7582 1.1.1.2 mrg (unspec:V4SF [(match_operand:V4SI 1 "mve_memory_operand" "Ux") 7583 1.1.1.2 mrg (match_operand:V4BI 2 "vpr_register_operand" "Up")] 7584 1.1 mrg VLDRWQ_F)) 7585 1.1 mrg ] 7586 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7587 1.1 mrg { 7588 1.1 mrg rtx ops[2]; 7589 1.1 mrg int regno = REGNO (operands[0]); 7590 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 7591 1.1 mrg ops[1] = operands[1]; 7592 1.1 mrg output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops); 7593 1.1 mrg return ""; 7594 1.1 mrg } 7595 1.1 mrg [(set_attr "length" "8")]) 7596 1.1 mrg 7597 1.1 mrg ;; 7598 1.1 mrg ;; [vldrwq_z_s vldrwq_z_u] 7599 1.1 mrg ;; 7600 1.1 mrg (define_insn "mve_vldrwq_z_<supf>v4si" 7601 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=w") 7602 1.1.1.2 mrg (unspec:V4SI [(match_operand:V4SI 1 "mve_memory_operand" "Ux") 7603 1.1.1.2 mrg (match_operand:V4BI 2 "vpr_register_operand" "Up")] 7604 1.1 mrg VLDRWQ)) 7605 1.1 mrg ] 7606 1.1 mrg "TARGET_HAVE_MVE" 7607 1.1 mrg { 7608 1.1 mrg rtx ops[2]; 7609 1.1 mrg int regno = REGNO (operands[0]); 7610 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 7611 1.1 mrg ops[1] = operands[1]; 7612 1.1 mrg output_asm_insn ("vpst\;vldrwt.32\t%q0, %E1",ops); 7613 1.1 mrg return ""; 7614 1.1 mrg } 7615 1.1 mrg [(set_attr "length" "8")]) 7616 1.1 mrg 7617 1.1 mrg (define_expand "mve_vld1q_f<mode>" 7618 1.1 mrg [(match_operand:MVE_0 0 "s_register_operand") 7619 1.1 mrg (unspec:MVE_0 [(match_operand:<MVE_CNVT> 1 "mve_memory_operand")] VLD1Q_F) 7620 1.1 mrg ] 7621 1.1 mrg "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT" 7622 1.1 mrg { 7623 1.1 mrg emit_insn (gen_mve_vldr<V_sz_elem1>q_f<mode>(operands[0],operands[1])); 7624 1.1 mrg DONE; 7625 1.1 mrg }) 7626 1.1 mrg 7627 1.1 mrg (define_expand "mve_vld1q_<supf><mode>" 7628 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 7629 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "mve_memory_operand")] VLD1Q) 7630 1.1 mrg ] 7631 1.1 mrg "TARGET_HAVE_MVE" 7632 1.1 mrg { 7633 1.1 mrg emit_insn (gen_mve_vldr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1])); 7634 1.1 mrg DONE; 7635 1.1 mrg }) 7636 1.1 mrg 7637 1.1 mrg ;; 7638 1.1 mrg ;; [vldrdq_gather_base_s vldrdq_gather_base_u] 7639 1.1 mrg ;; 7640 1.1 mrg (define_insn "mve_vldrdq_gather_base_<supf>v2di" 7641 1.1 mrg [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7642 1.1 mrg (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w") 7643 1.1 mrg (match_operand:SI 2 "immediate_operand" "i")] 7644 1.1 mrg VLDRDGBQ)) 7645 1.1 mrg ] 7646 1.1 mrg "TARGET_HAVE_MVE" 7647 1.1 mrg { 7648 1.1 mrg rtx ops[3]; 7649 1.1 mrg ops[0] = operands[0]; 7650 1.1 mrg ops[1] = operands[1]; 7651 1.1 mrg ops[2] = operands[2]; 7652 1.1 mrg output_asm_insn ("vldrd.64\t%q0, [%q1, %2]",ops); 7653 1.1 mrg return ""; 7654 1.1 mrg } 7655 1.1 mrg [(set_attr "length" "4")]) 7656 1.1 mrg 7657 1.1 mrg ;; 7658 1.1 mrg ;; [vldrdq_gather_base_z_s vldrdq_gather_base_z_u] 7659 1.1 mrg ;; 7660 1.1 mrg (define_insn "mve_vldrdq_gather_base_z_<supf>v2di" 7661 1.1 mrg [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7662 1.1 mrg (unspec:V2DI [(match_operand:V2DI 1 "s_register_operand" "w") 7663 1.1 mrg (match_operand:SI 2 "immediate_operand" "i") 7664 1.1 mrg (match_operand:HI 3 "vpr_register_operand" "Up")] 7665 1.1 mrg VLDRDGBQ)) 7666 1.1 mrg ] 7667 1.1 mrg "TARGET_HAVE_MVE" 7668 1.1 mrg { 7669 1.1 mrg rtx ops[3]; 7670 1.1 mrg ops[0] = operands[0]; 7671 1.1 mrg ops[1] = operands[1]; 7672 1.1 mrg ops[2] = operands[2]; 7673 1.1 mrg output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%q1, %2]",ops); 7674 1.1 mrg return ""; 7675 1.1 mrg } 7676 1.1 mrg [(set_attr "length" "8")]) 7677 1.1 mrg 7678 1.1 mrg ;; 7679 1.1 mrg ;; [vldrdq_gather_offset_s vldrdq_gather_offset_u] 7680 1.1 mrg ;; 7681 1.1 mrg (define_insn "mve_vldrdq_gather_offset_<supf>v2di" 7682 1.1 mrg [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7683 1.1 mrg (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us") 7684 1.1 mrg (match_operand:V2DI 2 "s_register_operand" "w")] 7685 1.1 mrg VLDRDGOQ)) 7686 1.1 mrg ] 7687 1.1 mrg "TARGET_HAVE_MVE" 7688 1.1 mrg { 7689 1.1 mrg rtx ops[3]; 7690 1.1 mrg ops[0] = operands[0]; 7691 1.1 mrg ops[1] = operands[1]; 7692 1.1 mrg ops[2] = operands[2]; 7693 1.1 mrg output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2]",ops); 7694 1.1 mrg return ""; 7695 1.1 mrg } 7696 1.1 mrg [(set_attr "length" "4")]) 7697 1.1 mrg 7698 1.1 mrg ;; 7699 1.1 mrg ;; [vldrdq_gather_offset_z_s vldrdq_gather_offset_z_u] 7700 1.1 mrg ;; 7701 1.1 mrg (define_insn "mve_vldrdq_gather_offset_z_<supf>v2di" 7702 1.1 mrg [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7703 1.1 mrg (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us") 7704 1.1 mrg (match_operand:V2DI 2 "s_register_operand" "w") 7705 1.1 mrg (match_operand:HI 3 "vpr_register_operand" "Up")] 7706 1.1 mrg VLDRDGOQ)) 7707 1.1 mrg ] 7708 1.1 mrg "TARGET_HAVE_MVE" 7709 1.1 mrg { 7710 1.1 mrg rtx ops[3]; 7711 1.1 mrg ops[0] = operands[0]; 7712 1.1 mrg ops[1] = operands[1]; 7713 1.1 mrg ops[2] = operands[2]; 7714 1.1 mrg output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2]",ops); 7715 1.1 mrg return ""; 7716 1.1 mrg } 7717 1.1 mrg [(set_attr "length" "8")]) 7718 1.1 mrg 7719 1.1 mrg ;; 7720 1.1 mrg ;; [vldrdq_gather_shifted_offset_s vldrdq_gather_shifted_offset_u] 7721 1.1 mrg ;; 7722 1.1 mrg (define_insn "mve_vldrdq_gather_shifted_offset_<supf>v2di" 7723 1.1 mrg [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7724 1.1 mrg (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us") 7725 1.1 mrg (match_operand:V2DI 2 "s_register_operand" "w")] 7726 1.1 mrg VLDRDGSOQ)) 7727 1.1 mrg ] 7728 1.1 mrg "TARGET_HAVE_MVE" 7729 1.1 mrg { 7730 1.1 mrg rtx ops[3]; 7731 1.1 mrg ops[0] = operands[0]; 7732 1.1 mrg ops[1] = operands[1]; 7733 1.1 mrg ops[2] = operands[2]; 7734 1.1 mrg output_asm_insn ("vldrd.u64\t%q0, [%m1, %q2, uxtw #3]",ops); 7735 1.1 mrg return ""; 7736 1.1 mrg } 7737 1.1 mrg [(set_attr "length" "4")]) 7738 1.1 mrg 7739 1.1 mrg ;; 7740 1.1 mrg ;; [vldrdq_gather_shifted_offset_z_s vldrdq_gather_shifted_offset_z_u] 7741 1.1 mrg ;; 7742 1.1 mrg (define_insn "mve_vldrdq_gather_shifted_offset_z_<supf>v2di" 7743 1.1 mrg [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 7744 1.1 mrg (unspec:V2DI [(match_operand:V2DI 1 "memory_operand" "Us") 7745 1.1 mrg (match_operand:V2DI 2 "s_register_operand" "w") 7746 1.1 mrg (match_operand:HI 3 "vpr_register_operand" "Up")] 7747 1.1 mrg VLDRDGSOQ)) 7748 1.1 mrg ] 7749 1.1 mrg "TARGET_HAVE_MVE" 7750 1.1 mrg { 7751 1.1 mrg rtx ops[3]; 7752 1.1 mrg ops[0] = operands[0]; 7753 1.1 mrg ops[1] = operands[1]; 7754 1.1 mrg ops[2] = operands[2]; 7755 1.1 mrg output_asm_insn ("vpst\n\tvldrdt.u64\t%q0, [%m1, %q2, uxtw #3]",ops); 7756 1.1 mrg return ""; 7757 1.1 mrg } 7758 1.1 mrg [(set_attr "length" "8")]) 7759 1.1 mrg 7760 1.1 mrg ;; 7761 1.1 mrg ;; [vldrhq_gather_offset_f] 7762 1.1 mrg ;; 7763 1.1 mrg (define_insn "mve_vldrhq_gather_offset_fv8hf" 7764 1.1 mrg [(set (match_operand:V8HF 0 "s_register_operand" "=&w") 7765 1.1 mrg (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us") 7766 1.1 mrg (match_operand:V8HI 2 "s_register_operand" "w")] 7767 1.1 mrg VLDRHQGO_F)) 7768 1.1 mrg ] 7769 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7770 1.1 mrg { 7771 1.1 mrg rtx ops[3]; 7772 1.1 mrg ops[0] = operands[0]; 7773 1.1 mrg ops[1] = operands[1]; 7774 1.1 mrg ops[2] = operands[2]; 7775 1.1 mrg output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2]",ops); 7776 1.1 mrg return ""; 7777 1.1 mrg } 7778 1.1 mrg [(set_attr "length" "4")]) 7779 1.1 mrg 7780 1.1 mrg ;; 7781 1.1 mrg ;; [vldrhq_gather_offset_z_f] 7782 1.1 mrg ;; 7783 1.1 mrg (define_insn "mve_vldrhq_gather_offset_z_fv8hf" 7784 1.1 mrg [(set (match_operand:V8HF 0 "s_register_operand" "=&w") 7785 1.1 mrg (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us") 7786 1.1 mrg (match_operand:V8HI 2 "s_register_operand" "w") 7787 1.1.1.2 mrg (match_operand:V8BI 3 "vpr_register_operand" "Up")] 7788 1.1 mrg VLDRHQGO_F)) 7789 1.1 mrg ] 7790 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7791 1.1 mrg { 7792 1.1 mrg rtx ops[4]; 7793 1.1 mrg ops[0] = operands[0]; 7794 1.1 mrg ops[1] = operands[1]; 7795 1.1 mrg ops[2] = operands[2]; 7796 1.1 mrg ops[3] = operands[3]; 7797 1.1 mrg output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2]",ops); 7798 1.1 mrg return ""; 7799 1.1 mrg } 7800 1.1 mrg [(set_attr "length" "8")]) 7801 1.1 mrg 7802 1.1 mrg ;; 7803 1.1 mrg ;; [vldrhq_gather_shifted_offset_f] 7804 1.1 mrg ;; 7805 1.1 mrg (define_insn "mve_vldrhq_gather_shifted_offset_fv8hf" 7806 1.1 mrg [(set (match_operand:V8HF 0 "s_register_operand" "=&w") 7807 1.1 mrg (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us") 7808 1.1 mrg (match_operand:V8HI 2 "s_register_operand" "w")] 7809 1.1 mrg VLDRHQGSO_F)) 7810 1.1 mrg ] 7811 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7812 1.1 mrg { 7813 1.1 mrg rtx ops[3]; 7814 1.1 mrg ops[0] = operands[0]; 7815 1.1 mrg ops[1] = operands[1]; 7816 1.1 mrg ops[2] = operands[2]; 7817 1.1 mrg output_asm_insn ("vldrh.f16\t%q0, [%m1, %q2, uxtw #1]",ops); 7818 1.1 mrg return ""; 7819 1.1 mrg } 7820 1.1 mrg [(set_attr "length" "4")]) 7821 1.1 mrg 7822 1.1 mrg ;; 7823 1.1 mrg ;; [vldrhq_gather_shifted_offset_z_f] 7824 1.1 mrg ;; 7825 1.1 mrg (define_insn "mve_vldrhq_gather_shifted_offset_z_fv8hf" 7826 1.1 mrg [(set (match_operand:V8HF 0 "s_register_operand" "=&w") 7827 1.1 mrg (unspec:V8HF [(match_operand:V8HI 1 "memory_operand" "Us") 7828 1.1 mrg (match_operand:V8HI 2 "s_register_operand" "w") 7829 1.1.1.2 mrg (match_operand:V8BI 3 "vpr_register_operand" "Up")] 7830 1.1 mrg VLDRHQGSO_F)) 7831 1.1 mrg ] 7832 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7833 1.1 mrg { 7834 1.1 mrg rtx ops[4]; 7835 1.1 mrg ops[0] = operands[0]; 7836 1.1 mrg ops[1] = operands[1]; 7837 1.1 mrg ops[2] = operands[2]; 7838 1.1 mrg ops[3] = operands[3]; 7839 1.1 mrg output_asm_insn ("vpst\n\tvldrht.f16\t%q0, [%m1, %q2, uxtw #1]",ops); 7840 1.1 mrg return ""; 7841 1.1 mrg } 7842 1.1 mrg [(set_attr "length" "8")]) 7843 1.1 mrg 7844 1.1 mrg ;; 7845 1.1 mrg ;; [vldrwq_gather_base_f] 7846 1.1 mrg ;; 7847 1.1 mrg (define_insn "mve_vldrwq_gather_base_fv4sf" 7848 1.1 mrg [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 7849 1.1 mrg (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w") 7850 1.1 mrg (match_operand:SI 2 "immediate_operand" "i")] 7851 1.1 mrg VLDRWQGB_F)) 7852 1.1 mrg ] 7853 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7854 1.1 mrg { 7855 1.1 mrg rtx ops[3]; 7856 1.1 mrg ops[0] = operands[0]; 7857 1.1 mrg ops[1] = operands[1]; 7858 1.1 mrg ops[2] = operands[2]; 7859 1.1 mrg output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]",ops); 7860 1.1 mrg return ""; 7861 1.1 mrg } 7862 1.1 mrg [(set_attr "length" "4")]) 7863 1.1 mrg 7864 1.1 mrg ;; 7865 1.1 mrg ;; [vldrwq_gather_base_z_f] 7866 1.1 mrg ;; 7867 1.1 mrg (define_insn "mve_vldrwq_gather_base_z_fv4sf" 7868 1.1 mrg [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 7869 1.1 mrg (unspec:V4SF [(match_operand:V4SI 1 "s_register_operand" "w") 7870 1.1 mrg (match_operand:SI 2 "immediate_operand" "i") 7871 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 7872 1.1 mrg VLDRWQGB_F)) 7873 1.1 mrg ] 7874 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7875 1.1 mrg { 7876 1.1 mrg rtx ops[3]; 7877 1.1 mrg ops[0] = operands[0]; 7878 1.1 mrg ops[1] = operands[1]; 7879 1.1 mrg ops[2] = operands[2]; 7880 1.1 mrg output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%q1, %2]",ops); 7881 1.1 mrg return ""; 7882 1.1 mrg } 7883 1.1 mrg [(set_attr "length" "8")]) 7884 1.1 mrg 7885 1.1 mrg ;; 7886 1.1 mrg ;; [vldrwq_gather_offset_f] 7887 1.1 mrg ;; 7888 1.1 mrg (define_insn "mve_vldrwq_gather_offset_fv4sf" 7889 1.1 mrg [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 7890 1.1 mrg (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us") 7891 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 7892 1.1 mrg VLDRWQGO_F)) 7893 1.1 mrg ] 7894 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7895 1.1 mrg { 7896 1.1 mrg rtx ops[3]; 7897 1.1 mrg ops[0] = operands[0]; 7898 1.1 mrg ops[1] = operands[1]; 7899 1.1 mrg ops[2] = operands[2]; 7900 1.1 mrg output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops); 7901 1.1 mrg return ""; 7902 1.1 mrg } 7903 1.1 mrg [(set_attr "length" "4")]) 7904 1.1 mrg 7905 1.1 mrg ;; 7906 1.1 mrg ;; [vldrwq_gather_offset_s vldrwq_gather_offset_u] 7907 1.1 mrg ;; 7908 1.1 mrg (define_insn "mve_vldrwq_gather_offset_<supf>v4si" 7909 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 7910 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us") 7911 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 7912 1.1 mrg VLDRWGOQ)) 7913 1.1 mrg ] 7914 1.1 mrg "TARGET_HAVE_MVE" 7915 1.1 mrg { 7916 1.1 mrg rtx ops[3]; 7917 1.1 mrg ops[0] = operands[0]; 7918 1.1 mrg ops[1] = operands[1]; 7919 1.1 mrg ops[2] = operands[2]; 7920 1.1 mrg output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2]",ops); 7921 1.1 mrg return ""; 7922 1.1 mrg } 7923 1.1 mrg [(set_attr "length" "4")]) 7924 1.1 mrg 7925 1.1 mrg ;; 7926 1.1 mrg ;; [vldrwq_gather_offset_z_f] 7927 1.1 mrg ;; 7928 1.1 mrg (define_insn "mve_vldrwq_gather_offset_z_fv4sf" 7929 1.1 mrg [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 7930 1.1 mrg (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us") 7931 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 7932 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 7933 1.1 mrg VLDRWQGO_F)) 7934 1.1 mrg ] 7935 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7936 1.1 mrg { 7937 1.1 mrg rtx ops[4]; 7938 1.1 mrg ops[0] = operands[0]; 7939 1.1 mrg ops[1] = operands[1]; 7940 1.1 mrg ops[2] = operands[2]; 7941 1.1 mrg ops[3] = operands[3]; 7942 1.1 mrg output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops); 7943 1.1 mrg return ""; 7944 1.1 mrg } 7945 1.1 mrg [(set_attr "length" "8")]) 7946 1.1 mrg 7947 1.1 mrg ;; 7948 1.1 mrg ;; [vldrwq_gather_offset_z_s vldrwq_gather_offset_z_u] 7949 1.1 mrg ;; 7950 1.1 mrg (define_insn "mve_vldrwq_gather_offset_z_<supf>v4si" 7951 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 7952 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us") 7953 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 7954 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 7955 1.1 mrg VLDRWGOQ)) 7956 1.1 mrg ] 7957 1.1 mrg "TARGET_HAVE_MVE" 7958 1.1 mrg { 7959 1.1 mrg rtx ops[4]; 7960 1.1 mrg ops[0] = operands[0]; 7961 1.1 mrg ops[1] = operands[1]; 7962 1.1 mrg ops[2] = operands[2]; 7963 1.1 mrg ops[3] = operands[3]; 7964 1.1 mrg output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2]",ops); 7965 1.1 mrg return ""; 7966 1.1 mrg } 7967 1.1 mrg [(set_attr "length" "8")]) 7968 1.1 mrg 7969 1.1 mrg ;; 7970 1.1 mrg ;; [vldrwq_gather_shifted_offset_f] 7971 1.1 mrg ;; 7972 1.1 mrg (define_insn "mve_vldrwq_gather_shifted_offset_fv4sf" 7973 1.1 mrg [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 7974 1.1 mrg (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us") 7975 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 7976 1.1 mrg VLDRWQGSO_F)) 7977 1.1 mrg ] 7978 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 7979 1.1 mrg { 7980 1.1 mrg rtx ops[3]; 7981 1.1 mrg ops[0] = operands[0]; 7982 1.1 mrg ops[1] = operands[1]; 7983 1.1 mrg ops[2] = operands[2]; 7984 1.1 mrg output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops); 7985 1.1 mrg return ""; 7986 1.1 mrg } 7987 1.1 mrg [(set_attr "length" "4")]) 7988 1.1 mrg 7989 1.1 mrg ;; 7990 1.1 mrg ;; [vldrwq_gather_shifted_offset_s vldrwq_gather_shifted_offset_u] 7991 1.1 mrg ;; 7992 1.1 mrg (define_insn "mve_vldrwq_gather_shifted_offset_<supf>v4si" 7993 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 7994 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us") 7995 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 7996 1.1 mrg VLDRWGSOQ)) 7997 1.1 mrg ] 7998 1.1 mrg "TARGET_HAVE_MVE" 7999 1.1 mrg { 8000 1.1 mrg rtx ops[3]; 8001 1.1 mrg ops[0] = operands[0]; 8002 1.1 mrg ops[1] = operands[1]; 8003 1.1 mrg ops[2] = operands[2]; 8004 1.1 mrg output_asm_insn ("vldrw.u32\t%q0, [%m1, %q2, uxtw #2]",ops); 8005 1.1 mrg return ""; 8006 1.1 mrg } 8007 1.1 mrg [(set_attr "length" "4")]) 8008 1.1 mrg 8009 1.1 mrg ;; 8010 1.1 mrg ;; [vldrwq_gather_shifted_offset_z_f] 8011 1.1 mrg ;; 8012 1.1 mrg (define_insn "mve_vldrwq_gather_shifted_offset_z_fv4sf" 8013 1.1 mrg [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 8014 1.1 mrg (unspec:V4SF [(match_operand:V4SI 1 "memory_operand" "Us") 8015 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 8016 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8017 1.1 mrg VLDRWQGSO_F)) 8018 1.1 mrg ] 8019 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8020 1.1 mrg { 8021 1.1 mrg rtx ops[4]; 8022 1.1 mrg ops[0] = operands[0]; 8023 1.1 mrg ops[1] = operands[1]; 8024 1.1 mrg ops[2] = operands[2]; 8025 1.1 mrg ops[3] = operands[3]; 8026 1.1 mrg output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops); 8027 1.1 mrg return ""; 8028 1.1 mrg } 8029 1.1 mrg [(set_attr "length" "8")]) 8030 1.1 mrg 8031 1.1 mrg ;; 8032 1.1 mrg ;; [vldrwq_gather_shifted_offset_z_s vldrwq_gather_shifted_offset_z_u] 8033 1.1 mrg ;; 8034 1.1 mrg (define_insn "mve_vldrwq_gather_shifted_offset_z_<supf>v4si" 8035 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 8036 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "memory_operand" "Us") 8037 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 8038 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8039 1.1 mrg VLDRWGSOQ)) 8040 1.1 mrg ] 8041 1.1 mrg "TARGET_HAVE_MVE" 8042 1.1 mrg { 8043 1.1 mrg rtx ops[4]; 8044 1.1 mrg ops[0] = operands[0]; 8045 1.1 mrg ops[1] = operands[1]; 8046 1.1 mrg ops[2] = operands[2]; 8047 1.1 mrg ops[3] = operands[3]; 8048 1.1 mrg output_asm_insn ("vpst\n\tvldrwt.u32\t%q0, [%m1, %q2, uxtw #2]",ops); 8049 1.1 mrg return ""; 8050 1.1 mrg } 8051 1.1 mrg [(set_attr "length" "8")]) 8052 1.1 mrg 8053 1.1 mrg ;; 8054 1.1 mrg ;; [vstrhq_f] 8055 1.1 mrg ;; 8056 1.1 mrg (define_insn "mve_vstrhq_fv8hf" 8057 1.1 mrg [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux") 8058 1.1 mrg (unspec:V8HI [(match_operand:V8HF 1 "s_register_operand" "w")] 8059 1.1 mrg VSTRHQ_F)) 8060 1.1 mrg ] 8061 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8062 1.1 mrg { 8063 1.1 mrg rtx ops[2]; 8064 1.1 mrg int regno = REGNO (operands[1]); 8065 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno); 8066 1.1 mrg ops[0] = operands[0]; 8067 1.1 mrg output_asm_insn ("vstrh.16\t%q1, %E0",ops); 8068 1.1 mrg return ""; 8069 1.1 mrg } 8070 1.1 mrg [(set_attr "length" "4")]) 8071 1.1 mrg 8072 1.1 mrg ;; 8073 1.1 mrg ;; [vstrhq_p_f] 8074 1.1 mrg ;; 8075 1.1 mrg (define_insn "mve_vstrhq_p_fv8hf" 8076 1.1 mrg [(set (match_operand:V8HI 0 "mve_memory_operand" "=Ux") 8077 1.1.1.2 mrg (unspec:V8HI 8078 1.1.1.2 mrg [(match_operand:V8HF 1 "s_register_operand" "w") 8079 1.1.1.2 mrg (match_operand:V8BI 2 "vpr_register_operand" "Up") 8080 1.1.1.2 mrg (match_dup 0)] 8081 1.1.1.2 mrg VSTRHQ_F))] 8082 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8083 1.1 mrg { 8084 1.1 mrg rtx ops[2]; 8085 1.1 mrg int regno = REGNO (operands[1]); 8086 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno); 8087 1.1 mrg ops[0] = operands[0]; 8088 1.1 mrg output_asm_insn ("vpst\;vstrht.16\t%q1, %E0",ops); 8089 1.1 mrg return ""; 8090 1.1 mrg } 8091 1.1 mrg [(set_attr "length" "8")]) 8092 1.1 mrg 8093 1.1 mrg ;; 8094 1.1 mrg ;; [vstrhq_p_s vstrhq_p_u] 8095 1.1 mrg ;; 8096 1.1 mrg (define_insn "mve_vstrhq_p_<supf><mode>" 8097 1.1 mrg [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux") 8098 1.1.1.2 mrg (unspec:<MVE_H_ELEM> 8099 1.1.1.2 mrg [(match_operand:MVE_6 1 "s_register_operand" "w") 8100 1.1.1.2 mrg (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up") 8101 1.1.1.2 mrg (match_dup 0)] 8102 1.1 mrg VSTRHQ)) 8103 1.1 mrg ] 8104 1.1 mrg "TARGET_HAVE_MVE" 8105 1.1 mrg { 8106 1.1 mrg rtx ops[2]; 8107 1.1 mrg int regno = REGNO (operands[1]); 8108 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno); 8109 1.1 mrg ops[0] = operands[0]; 8110 1.1 mrg output_asm_insn ("vpst\;vstrht.<V_sz_elem>\t%q1, %E0",ops); 8111 1.1 mrg return ""; 8112 1.1 mrg } 8113 1.1 mrg [(set_attr "length" "8")]) 8114 1.1 mrg 8115 1.1 mrg ;; 8116 1.1 mrg ;; [vstrhq_scatter_offset_p_s vstrhq_scatter_offset_p_u] 8117 1.1 mrg ;; 8118 1.1 mrg (define_expand "mve_vstrhq_scatter_offset_p_<supf><mode>" 8119 1.1 mrg [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory") 8120 1.1 mrg (match_operand:MVE_6 1 "s_register_operand") 8121 1.1 mrg (match_operand:MVE_6 2 "s_register_operand") 8122 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand") 8123 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRHSOQ)] 8124 1.1 mrg "TARGET_HAVE_MVE" 8125 1.1 mrg { 8126 1.1 mrg rtx ind = XEXP (operands[0], 0); 8127 1.1 mrg gcc_assert (REG_P (ind)); 8128 1.1 mrg emit_insn ( 8129 1.1 mrg gen_mve_vstrhq_scatter_offset_p_<supf><mode>_insn (ind, operands[1], 8130 1.1 mrg operands[2], 8131 1.1 mrg operands[3])); 8132 1.1 mrg DONE; 8133 1.1 mrg }) 8134 1.1 mrg 8135 1.1 mrg (define_insn "mve_vstrhq_scatter_offset_p_<supf><mode>_insn" 8136 1.1 mrg [(set (mem:BLK (scratch)) 8137 1.1 mrg (unspec:BLK 8138 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8139 1.1 mrg (match_operand:MVE_6 1 "s_register_operand" "w") 8140 1.1 mrg (match_operand:MVE_6 2 "s_register_operand" "w") 8141 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 8142 1.1 mrg VSTRHSOQ))] 8143 1.1 mrg "TARGET_HAVE_MVE" 8144 1.1 mrg "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1]" 8145 1.1 mrg [(set_attr "length" "8")]) 8146 1.1 mrg 8147 1.1 mrg ;; 8148 1.1 mrg ;; [vstrhq_scatter_offset_s vstrhq_scatter_offset_u] 8149 1.1 mrg ;; 8150 1.1 mrg (define_expand "mve_vstrhq_scatter_offset_<supf><mode>" 8151 1.1 mrg [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory") 8152 1.1 mrg (match_operand:MVE_6 1 "s_register_operand") 8153 1.1 mrg (match_operand:MVE_6 2 "s_register_operand") 8154 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRHSOQ)] 8155 1.1 mrg "TARGET_HAVE_MVE" 8156 1.1 mrg { 8157 1.1 mrg rtx ind = XEXP (operands[0], 0); 8158 1.1 mrg gcc_assert (REG_P (ind)); 8159 1.1 mrg emit_insn (gen_mve_vstrhq_scatter_offset_<supf><mode>_insn (ind, operands[1], 8160 1.1 mrg operands[2])); 8161 1.1 mrg DONE; 8162 1.1 mrg }) 8163 1.1 mrg 8164 1.1 mrg (define_insn "mve_vstrhq_scatter_offset_<supf><mode>_insn" 8165 1.1 mrg [(set (mem:BLK (scratch)) 8166 1.1 mrg (unspec:BLK 8167 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8168 1.1 mrg (match_operand:MVE_6 1 "s_register_operand" "w") 8169 1.1 mrg (match_operand:MVE_6 2 "s_register_operand" "w")] 8170 1.1 mrg VSTRHSOQ))] 8171 1.1 mrg "TARGET_HAVE_MVE" 8172 1.1 mrg "vstrh.<V_sz_elem>\t%q2, [%0, %q1]" 8173 1.1 mrg [(set_attr "length" "4")]) 8174 1.1 mrg 8175 1.1 mrg ;; 8176 1.1 mrg ;; [vstrhq_scatter_shifted_offset_p_s vstrhq_scatter_shifted_offset_p_u] 8177 1.1 mrg ;; 8178 1.1 mrg (define_expand "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>" 8179 1.1 mrg [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory") 8180 1.1 mrg (match_operand:MVE_6 1 "s_register_operand") 8181 1.1 mrg (match_operand:MVE_6 2 "s_register_operand") 8182 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand") 8183 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRHSSOQ)] 8184 1.1 mrg "TARGET_HAVE_MVE" 8185 1.1 mrg { 8186 1.1 mrg rtx ind = XEXP (operands[0], 0); 8187 1.1 mrg gcc_assert (REG_P (ind)); 8188 1.1 mrg emit_insn ( 8189 1.1 mrg gen_mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn (ind, operands[1], 8190 1.1 mrg operands[2], 8191 1.1 mrg operands[3])); 8192 1.1 mrg DONE; 8193 1.1 mrg }) 8194 1.1 mrg 8195 1.1 mrg (define_insn "mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn" 8196 1.1 mrg [(set (mem:BLK (scratch)) 8197 1.1 mrg (unspec:BLK 8198 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8199 1.1 mrg (match_operand:MVE_6 1 "s_register_operand" "w") 8200 1.1 mrg (match_operand:MVE_6 2 "s_register_operand" "w") 8201 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "vpr_register_operand" "Up")] 8202 1.1 mrg VSTRHSSOQ))] 8203 1.1 mrg "TARGET_HAVE_MVE" 8204 1.1 mrg "vpst\;vstrht.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]" 8205 1.1 mrg [(set_attr "length" "8")]) 8206 1.1 mrg 8207 1.1 mrg ;; 8208 1.1 mrg ;; [vstrhq_scatter_shifted_offset_s vstrhq_scatter_shifted_offset_u] 8209 1.1 mrg ;; 8210 1.1 mrg (define_expand "mve_vstrhq_scatter_shifted_offset_<supf><mode>" 8211 1.1 mrg [(match_operand:<MVE_H_ELEM> 0 "mve_scatter_memory") 8212 1.1 mrg (match_operand:MVE_6 1 "s_register_operand") 8213 1.1 mrg (match_operand:MVE_6 2 "s_register_operand") 8214 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRHSSOQ)] 8215 1.1 mrg "TARGET_HAVE_MVE" 8216 1.1 mrg { 8217 1.1 mrg rtx ind = XEXP (operands[0], 0); 8218 1.1 mrg gcc_assert (REG_P (ind)); 8219 1.1 mrg emit_insn ( 8220 1.1 mrg gen_mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn (ind, operands[1], 8221 1.1 mrg operands[2])); 8222 1.1 mrg DONE; 8223 1.1 mrg }) 8224 1.1 mrg 8225 1.1 mrg (define_insn "mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn" 8226 1.1 mrg [(set (mem:BLK (scratch)) 8227 1.1 mrg (unspec:BLK 8228 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8229 1.1 mrg (match_operand:MVE_6 1 "s_register_operand" "w") 8230 1.1 mrg (match_operand:MVE_6 2 "s_register_operand" "w")] 8231 1.1 mrg VSTRHSSOQ))] 8232 1.1 mrg "TARGET_HAVE_MVE" 8233 1.1 mrg "vstrh.<V_sz_elem>\t%q2, [%0, %q1, uxtw #1]" 8234 1.1 mrg [(set_attr "length" "4")]) 8235 1.1 mrg 8236 1.1 mrg ;; 8237 1.1 mrg ;; [vstrhq_s, vstrhq_u] 8238 1.1 mrg ;; 8239 1.1 mrg (define_insn "mve_vstrhq_<supf><mode>" 8240 1.1 mrg [(set (match_operand:<MVE_H_ELEM> 0 "mve_memory_operand" "=Ux") 8241 1.1 mrg (unspec:<MVE_H_ELEM> [(match_operand:MVE_6 1 "s_register_operand" "w")] 8242 1.1 mrg VSTRHQ)) 8243 1.1 mrg ] 8244 1.1 mrg "TARGET_HAVE_MVE" 8245 1.1 mrg { 8246 1.1 mrg rtx ops[2]; 8247 1.1 mrg int regno = REGNO (operands[1]); 8248 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno); 8249 1.1 mrg ops[0] = operands[0]; 8250 1.1 mrg output_asm_insn ("vstrh.<V_sz_elem>\t%q1, %E0",ops); 8251 1.1 mrg return ""; 8252 1.1 mrg } 8253 1.1 mrg [(set_attr "length" "4")]) 8254 1.1 mrg 8255 1.1 mrg ;; 8256 1.1 mrg ;; [vstrwq_f] 8257 1.1 mrg ;; 8258 1.1 mrg (define_insn "mve_vstrwq_fv4sf" 8259 1.1.1.2 mrg [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux") 8260 1.1 mrg (unspec:V4SI [(match_operand:V4SF 1 "s_register_operand" "w")] 8261 1.1 mrg VSTRWQ_F)) 8262 1.1 mrg ] 8263 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8264 1.1 mrg { 8265 1.1 mrg rtx ops[2]; 8266 1.1 mrg int regno = REGNO (operands[1]); 8267 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno); 8268 1.1 mrg ops[0] = operands[0]; 8269 1.1 mrg output_asm_insn ("vstrw.32\t%q1, %E0",ops); 8270 1.1 mrg return ""; 8271 1.1 mrg } 8272 1.1 mrg [(set_attr "length" "4")]) 8273 1.1 mrg 8274 1.1 mrg ;; 8275 1.1 mrg ;; [vstrwq_p_f] 8276 1.1 mrg ;; 8277 1.1 mrg (define_insn "mve_vstrwq_p_fv4sf" 8278 1.1.1.2 mrg [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux") 8279 1.1.1.2 mrg (unspec:V4SI 8280 1.1.1.2 mrg [(match_operand:V4SF 1 "s_register_operand" "w") 8281 1.1.1.2 mrg (match_operand:<MVE_VPRED> 2 "vpr_register_operand" "Up") 8282 1.1.1.2 mrg (match_dup 0)] 8283 1.1.1.2 mrg VSTRWQ_F))] 8284 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8285 1.1 mrg { 8286 1.1 mrg rtx ops[2]; 8287 1.1 mrg int regno = REGNO (operands[1]); 8288 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno); 8289 1.1 mrg ops[0] = operands[0]; 8290 1.1 mrg output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops); 8291 1.1 mrg return ""; 8292 1.1 mrg } 8293 1.1 mrg [(set_attr "length" "8")]) 8294 1.1 mrg 8295 1.1 mrg ;; 8296 1.1 mrg ;; [vstrwq_p_s vstrwq_p_u] 8297 1.1 mrg ;; 8298 1.1 mrg (define_insn "mve_vstrwq_p_<supf>v4si" 8299 1.1.1.2 mrg [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux") 8300 1.1.1.2 mrg (unspec:V4SI 8301 1.1.1.2 mrg [(match_operand:V4SI 1 "s_register_operand" "w") 8302 1.1.1.2 mrg (match_operand:V4BI 2 "vpr_register_operand" "Up") 8303 1.1.1.2 mrg (match_dup 0)] 8304 1.1.1.2 mrg VSTRWQ))] 8305 1.1 mrg "TARGET_HAVE_MVE" 8306 1.1 mrg { 8307 1.1 mrg rtx ops[2]; 8308 1.1 mrg int regno = REGNO (operands[1]); 8309 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno); 8310 1.1 mrg ops[0] = operands[0]; 8311 1.1 mrg output_asm_insn ("vpst\;vstrwt.32\t%q1, %E0",ops); 8312 1.1 mrg return ""; 8313 1.1 mrg } 8314 1.1 mrg [(set_attr "length" "8")]) 8315 1.1 mrg 8316 1.1 mrg ;; 8317 1.1 mrg ;; [vstrwq_s vstrwq_u] 8318 1.1 mrg ;; 8319 1.1 mrg (define_insn "mve_vstrwq_<supf>v4si" 8320 1.1.1.2 mrg [(set (match_operand:V4SI 0 "mve_memory_operand" "=Ux") 8321 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w")] 8322 1.1 mrg VSTRWQ)) 8323 1.1 mrg ] 8324 1.1 mrg "TARGET_HAVE_MVE" 8325 1.1 mrg { 8326 1.1 mrg rtx ops[2]; 8327 1.1 mrg int regno = REGNO (operands[1]); 8328 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno); 8329 1.1 mrg ops[0] = operands[0]; 8330 1.1 mrg output_asm_insn ("vstrw.32\t%q1, %E0",ops); 8331 1.1 mrg return ""; 8332 1.1 mrg } 8333 1.1 mrg [(set_attr "length" "4")]) 8334 1.1 mrg 8335 1.1 mrg (define_expand "mve_vst1q_f<mode>" 8336 1.1 mrg [(match_operand:<MVE_CNVT> 0 "mve_memory_operand") 8337 1.1 mrg (unspec:<MVE_CNVT> [(match_operand:MVE_0 1 "s_register_operand")] VST1Q_F) 8338 1.1 mrg ] 8339 1.1 mrg "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT" 8340 1.1 mrg { 8341 1.1 mrg emit_insn (gen_mve_vstr<V_sz_elem1>q_f<mode>(operands[0],operands[1])); 8342 1.1 mrg DONE; 8343 1.1 mrg }) 8344 1.1 mrg 8345 1.1 mrg (define_expand "mve_vst1q_<supf><mode>" 8346 1.1 mrg [(match_operand:MVE_2 0 "mve_memory_operand") 8347 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand")] VST1Q) 8348 1.1 mrg ] 8349 1.1 mrg "TARGET_HAVE_MVE" 8350 1.1 mrg { 8351 1.1 mrg emit_insn (gen_mve_vstr<V_sz_elem1>q_<supf><mode>(operands[0],operands[1])); 8352 1.1 mrg DONE; 8353 1.1 mrg }) 8354 1.1 mrg 8355 1.1 mrg ;; 8356 1.1 mrg ;; [vstrdq_scatter_base_p_s vstrdq_scatter_base_p_u] 8357 1.1 mrg ;; 8358 1.1 mrg (define_insn "mve_vstrdq_scatter_base_p_<supf>v2di" 8359 1.1 mrg [(set (mem:BLK (scratch)) 8360 1.1 mrg (unspec:BLK 8361 1.1 mrg [(match_operand:V2DI 0 "s_register_operand" "w") 8362 1.1 mrg (match_operand:SI 1 "mve_vldrd_immediate" "Ri") 8363 1.1 mrg (match_operand:V2DI 2 "s_register_operand" "w") 8364 1.1 mrg (match_operand:HI 3 "vpr_register_operand" "Up")] 8365 1.1 mrg VSTRDSBQ)) 8366 1.1 mrg ] 8367 1.1 mrg "TARGET_HAVE_MVE" 8368 1.1 mrg { 8369 1.1 mrg rtx ops[3]; 8370 1.1 mrg ops[0] = operands[0]; 8371 1.1 mrg ops[1] = operands[1]; 8372 1.1 mrg ops[2] = operands[2]; 8373 1.1 mrg output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]",ops); 8374 1.1 mrg return ""; 8375 1.1 mrg } 8376 1.1 mrg [(set_attr "length" "8")]) 8377 1.1 mrg 8378 1.1 mrg ;; 8379 1.1 mrg ;; [vstrdq_scatter_base_s vstrdq_scatter_base_u] 8380 1.1 mrg ;; 8381 1.1 mrg (define_insn "mve_vstrdq_scatter_base_<supf>v2di" 8382 1.1 mrg [(set (mem:BLK (scratch)) 8383 1.1 mrg (unspec:BLK 8384 1.1 mrg [(match_operand:V2DI 0 "s_register_operand" "=w") 8385 1.1 mrg (match_operand:SI 1 "mve_vldrd_immediate" "Ri") 8386 1.1 mrg (match_operand:V2DI 2 "s_register_operand" "w")] 8387 1.1 mrg VSTRDSBQ)) 8388 1.1 mrg ] 8389 1.1 mrg "TARGET_HAVE_MVE" 8390 1.1 mrg { 8391 1.1 mrg rtx ops[3]; 8392 1.1 mrg ops[0] = operands[0]; 8393 1.1 mrg ops[1] = operands[1]; 8394 1.1 mrg ops[2] = operands[2]; 8395 1.1 mrg output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]",ops); 8396 1.1 mrg return ""; 8397 1.1 mrg } 8398 1.1 mrg [(set_attr "length" "4")]) 8399 1.1 mrg 8400 1.1 mrg ;; 8401 1.1 mrg ;; [vstrdq_scatter_offset_p_s vstrdq_scatter_offset_p_u] 8402 1.1 mrg ;; 8403 1.1 mrg (define_expand "mve_vstrdq_scatter_offset_p_<supf>v2di" 8404 1.1 mrg [(match_operand:V2DI 0 "mve_scatter_memory") 8405 1.1 mrg (match_operand:V2DI 1 "s_register_operand") 8406 1.1 mrg (match_operand:V2DI 2 "s_register_operand") 8407 1.1 mrg (match_operand:HI 3 "vpr_register_operand") 8408 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRDSOQ)] 8409 1.1 mrg "TARGET_HAVE_MVE" 8410 1.1 mrg { 8411 1.1 mrg rtx ind = XEXP (operands[0], 0); 8412 1.1 mrg gcc_assert (REG_P (ind)); 8413 1.1 mrg emit_insn (gen_mve_vstrdq_scatter_offset_p_<supf>v2di_insn (ind, operands[1], 8414 1.1 mrg operands[2], 8415 1.1 mrg operands[3])); 8416 1.1 mrg DONE; 8417 1.1 mrg }) 8418 1.1 mrg 8419 1.1 mrg (define_insn "mve_vstrdq_scatter_offset_p_<supf>v2di_insn" 8420 1.1 mrg [(set (mem:BLK (scratch)) 8421 1.1 mrg (unspec:BLK 8422 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8423 1.1 mrg (match_operand:V2DI 1 "s_register_operand" "w") 8424 1.1 mrg (match_operand:V2DI 2 "s_register_operand" "w") 8425 1.1 mrg (match_operand:HI 3 "vpr_register_operand" "Up")] 8426 1.1 mrg VSTRDSOQ))] 8427 1.1 mrg "TARGET_HAVE_MVE" 8428 1.1 mrg "vpst\;vstrdt.64\t%q2, [%0, %q1]" 8429 1.1 mrg [(set_attr "length" "8")]) 8430 1.1 mrg 8431 1.1 mrg ;; 8432 1.1 mrg ;; [vstrdq_scatter_offset_s vstrdq_scatter_offset_u] 8433 1.1 mrg ;; 8434 1.1 mrg (define_expand "mve_vstrdq_scatter_offset_<supf>v2di" 8435 1.1 mrg [(match_operand:V2DI 0 "mve_scatter_memory") 8436 1.1 mrg (match_operand:V2DI 1 "s_register_operand") 8437 1.1 mrg (match_operand:V2DI 2 "s_register_operand") 8438 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRDSOQ)] 8439 1.1 mrg "TARGET_HAVE_MVE" 8440 1.1 mrg { 8441 1.1 mrg rtx ind = XEXP (operands[0], 0); 8442 1.1 mrg gcc_assert (REG_P (ind)); 8443 1.1 mrg emit_insn (gen_mve_vstrdq_scatter_offset_<supf>v2di_insn (ind, operands[1], 8444 1.1 mrg operands[2])); 8445 1.1 mrg DONE; 8446 1.1 mrg }) 8447 1.1 mrg 8448 1.1 mrg (define_insn "mve_vstrdq_scatter_offset_<supf>v2di_insn" 8449 1.1 mrg [(set (mem:BLK (scratch)) 8450 1.1 mrg (unspec:BLK 8451 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8452 1.1 mrg (match_operand:V2DI 1 "s_register_operand" "w") 8453 1.1 mrg (match_operand:V2DI 2 "s_register_operand" "w")] 8454 1.1 mrg VSTRDSOQ))] 8455 1.1 mrg "TARGET_HAVE_MVE" 8456 1.1 mrg "vstrd.64\t%q2, [%0, %q1]" 8457 1.1 mrg [(set_attr "length" "4")]) 8458 1.1 mrg 8459 1.1 mrg ;; 8460 1.1 mrg ;; [vstrdq_scatter_shifted_offset_p_s vstrdq_scatter_shifted_offset_p_u] 8461 1.1 mrg ;; 8462 1.1 mrg (define_expand "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di" 8463 1.1 mrg [(match_operand:V2DI 0 "mve_scatter_memory") 8464 1.1 mrg (match_operand:V2DI 1 "s_register_operand") 8465 1.1 mrg (match_operand:V2DI 2 "s_register_operand") 8466 1.1 mrg (match_operand:HI 3 "vpr_register_operand") 8467 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRDSSOQ)] 8468 1.1 mrg "TARGET_HAVE_MVE" 8469 1.1 mrg { 8470 1.1 mrg rtx ind = XEXP (operands[0], 0); 8471 1.1 mrg gcc_assert (REG_P (ind)); 8472 1.1 mrg emit_insn ( 8473 1.1 mrg gen_mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn (ind, operands[1], 8474 1.1 mrg operands[2], 8475 1.1 mrg operands[3])); 8476 1.1 mrg DONE; 8477 1.1 mrg }) 8478 1.1 mrg 8479 1.1 mrg (define_insn "mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn" 8480 1.1 mrg [(set (mem:BLK (scratch)) 8481 1.1 mrg (unspec:BLK 8482 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8483 1.1 mrg (match_operand:V2DI 1 "s_register_operand" "w") 8484 1.1 mrg (match_operand:V2DI 2 "s_register_operand" "w") 8485 1.1 mrg (match_operand:HI 3 "vpr_register_operand" "Up")] 8486 1.1 mrg VSTRDSSOQ))] 8487 1.1 mrg "TARGET_HAVE_MVE" 8488 1.1.1.2 mrg "vpst\;vstrdt.64\t%q2, [%0, %q1, uxtw #3]" 8489 1.1 mrg [(set_attr "length" "8")]) 8490 1.1 mrg 8491 1.1 mrg ;; 8492 1.1 mrg ;; [vstrdq_scatter_shifted_offset_s vstrdq_scatter_shifted_offset_u] 8493 1.1 mrg ;; 8494 1.1 mrg (define_expand "mve_vstrdq_scatter_shifted_offset_<supf>v2di" 8495 1.1 mrg [(match_operand:V2DI 0 "mve_scatter_memory") 8496 1.1 mrg (match_operand:V2DI 1 "s_register_operand") 8497 1.1 mrg (match_operand:V2DI 2 "s_register_operand") 8498 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRDSSOQ)] 8499 1.1 mrg "TARGET_HAVE_MVE" 8500 1.1 mrg { 8501 1.1 mrg rtx ind = XEXP (operands[0], 0); 8502 1.1 mrg gcc_assert (REG_P (ind)); 8503 1.1 mrg emit_insn ( 8504 1.1 mrg gen_mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn (ind, operands[1], 8505 1.1 mrg operands[2])); 8506 1.1 mrg DONE; 8507 1.1 mrg }) 8508 1.1 mrg 8509 1.1 mrg (define_insn "mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn" 8510 1.1 mrg [(set (mem:BLK (scratch)) 8511 1.1 mrg (unspec:BLK 8512 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8513 1.1 mrg (match_operand:V2DI 1 "s_register_operand" "w") 8514 1.1 mrg (match_operand:V2DI 2 "s_register_operand" "w")] 8515 1.1 mrg VSTRDSSOQ))] 8516 1.1 mrg "TARGET_HAVE_MVE" 8517 1.1.1.2 mrg "vstrd.64\t%q2, [%0, %q1, uxtw #3]" 8518 1.1 mrg [(set_attr "length" "4")]) 8519 1.1 mrg 8520 1.1 mrg ;; 8521 1.1 mrg ;; [vstrhq_scatter_offset_f] 8522 1.1 mrg ;; 8523 1.1 mrg (define_expand "mve_vstrhq_scatter_offset_fv8hf" 8524 1.1 mrg [(match_operand:V8HI 0 "mve_scatter_memory") 8525 1.1 mrg (match_operand:V8HI 1 "s_register_operand") 8526 1.1 mrg (match_operand:V8HF 2 "s_register_operand") 8527 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRHQSO_F)] 8528 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8529 1.1 mrg { 8530 1.1 mrg rtx ind = XEXP (operands[0], 0); 8531 1.1 mrg gcc_assert (REG_P (ind)); 8532 1.1 mrg emit_insn (gen_mve_vstrhq_scatter_offset_fv8hf_insn (ind, operands[1], 8533 1.1 mrg operands[2])); 8534 1.1 mrg DONE; 8535 1.1 mrg }) 8536 1.1 mrg 8537 1.1 mrg (define_insn "mve_vstrhq_scatter_offset_fv8hf_insn" 8538 1.1 mrg [(set (mem:BLK (scratch)) 8539 1.1 mrg (unspec:BLK 8540 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8541 1.1 mrg (match_operand:V8HI 1 "s_register_operand" "w") 8542 1.1 mrg (match_operand:V8HF 2 "s_register_operand" "w")] 8543 1.1 mrg VSTRHQSO_F))] 8544 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8545 1.1 mrg "vstrh.16\t%q2, [%0, %q1]" 8546 1.1 mrg [(set_attr "length" "4")]) 8547 1.1 mrg 8548 1.1 mrg ;; 8549 1.1 mrg ;; [vstrhq_scatter_offset_p_f] 8550 1.1 mrg ;; 8551 1.1 mrg (define_expand "mve_vstrhq_scatter_offset_p_fv8hf" 8552 1.1 mrg [(match_operand:V8HI 0 "mve_scatter_memory") 8553 1.1 mrg (match_operand:V8HI 1 "s_register_operand") 8554 1.1 mrg (match_operand:V8HF 2 "s_register_operand") 8555 1.1.1.2 mrg (match_operand:V8BI 3 "vpr_register_operand") 8556 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRHQSO_F)] 8557 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8558 1.1 mrg { 8559 1.1 mrg rtx ind = XEXP (operands[0], 0); 8560 1.1 mrg gcc_assert (REG_P (ind)); 8561 1.1 mrg emit_insn (gen_mve_vstrhq_scatter_offset_p_fv8hf_insn (ind, operands[1], 8562 1.1 mrg operands[2], 8563 1.1 mrg operands[3])); 8564 1.1 mrg DONE; 8565 1.1 mrg }) 8566 1.1 mrg 8567 1.1 mrg (define_insn "mve_vstrhq_scatter_offset_p_fv8hf_insn" 8568 1.1 mrg [(set (mem:BLK (scratch)) 8569 1.1 mrg (unspec:BLK 8570 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8571 1.1 mrg (match_operand:V8HI 1 "s_register_operand" "w") 8572 1.1 mrg (match_operand:V8HF 2 "s_register_operand" "w") 8573 1.1.1.2 mrg (match_operand:V8BI 3 "vpr_register_operand" "Up")] 8574 1.1 mrg VSTRHQSO_F))] 8575 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8576 1.1 mrg "vpst\;vstrht.16\t%q2, [%0, %q1]" 8577 1.1 mrg [(set_attr "length" "8")]) 8578 1.1 mrg 8579 1.1 mrg ;; 8580 1.1 mrg ;; [vstrhq_scatter_shifted_offset_f] 8581 1.1 mrg ;; 8582 1.1 mrg (define_expand "mve_vstrhq_scatter_shifted_offset_fv8hf" 8583 1.1 mrg [(match_operand:V8HI 0 "memory_operand" "=Us") 8584 1.1 mrg (match_operand:V8HI 1 "s_register_operand" "w") 8585 1.1 mrg (match_operand:V8HF 2 "s_register_operand" "w") 8586 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)] 8587 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8588 1.1 mrg { 8589 1.1 mrg rtx ind = XEXP (operands[0], 0); 8590 1.1 mrg gcc_assert (REG_P (ind)); 8591 1.1 mrg emit_insn (gen_mve_vstrhq_scatter_shifted_offset_fv8hf_insn (ind, operands[1], 8592 1.1 mrg operands[2])); 8593 1.1 mrg DONE; 8594 1.1 mrg }) 8595 1.1 mrg 8596 1.1 mrg (define_insn "mve_vstrhq_scatter_shifted_offset_fv8hf_insn" 8597 1.1 mrg [(set (mem:BLK (scratch)) 8598 1.1 mrg (unspec:BLK 8599 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8600 1.1 mrg (match_operand:V8HI 1 "s_register_operand" "w") 8601 1.1 mrg (match_operand:V8HF 2 "s_register_operand" "w")] 8602 1.1 mrg VSTRHQSSO_F))] 8603 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8604 1.1 mrg "vstrh.16\t%q2, [%0, %q1, uxtw #1]" 8605 1.1 mrg [(set_attr "length" "4")]) 8606 1.1 mrg 8607 1.1 mrg ;; 8608 1.1 mrg ;; [vstrhq_scatter_shifted_offset_p_f] 8609 1.1 mrg ;; 8610 1.1 mrg (define_expand "mve_vstrhq_scatter_shifted_offset_p_fv8hf" 8611 1.1 mrg [(match_operand:V8HI 0 "memory_operand" "=Us") 8612 1.1 mrg (match_operand:V8HI 1 "s_register_operand" "w") 8613 1.1 mrg (match_operand:V8HF 2 "s_register_operand" "w") 8614 1.1.1.2 mrg (match_operand:V8BI 3 "vpr_register_operand" "Up") 8615 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRHQSSO_F)] 8616 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8617 1.1 mrg { 8618 1.1 mrg rtx ind = XEXP (operands[0], 0); 8619 1.1 mrg gcc_assert (REG_P (ind)); 8620 1.1 mrg emit_insn ( 8621 1.1 mrg gen_mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn (ind, operands[1], 8622 1.1 mrg operands[2], 8623 1.1 mrg operands[3])); 8624 1.1 mrg DONE; 8625 1.1 mrg }) 8626 1.1 mrg 8627 1.1 mrg (define_insn "mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn" 8628 1.1 mrg [(set (mem:BLK (scratch)) 8629 1.1 mrg (unspec:BLK 8630 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8631 1.1 mrg (match_operand:V8HI 1 "s_register_operand" "w") 8632 1.1 mrg (match_operand:V8HF 2 "s_register_operand" "w") 8633 1.1.1.2 mrg (match_operand:V8BI 3 "vpr_register_operand" "Up")] 8634 1.1 mrg VSTRHQSSO_F))] 8635 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8636 1.1 mrg "vpst\;vstrht.16\t%q2, [%0, %q1, uxtw #1]" 8637 1.1 mrg [(set_attr "length" "8")]) 8638 1.1 mrg 8639 1.1 mrg ;; 8640 1.1 mrg ;; [vstrwq_scatter_base_f] 8641 1.1 mrg ;; 8642 1.1 mrg (define_insn "mve_vstrwq_scatter_base_fv4sf" 8643 1.1 mrg [(set (mem:BLK (scratch)) 8644 1.1 mrg (unspec:BLK 8645 1.1 mrg [(match_operand:V4SI 0 "s_register_operand" "w") 8646 1.1 mrg (match_operand:SI 1 "immediate_operand" "i") 8647 1.1 mrg (match_operand:V4SF 2 "s_register_operand" "w")] 8648 1.1 mrg VSTRWQSB_F)) 8649 1.1 mrg ] 8650 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8651 1.1 mrg { 8652 1.1 mrg rtx ops[3]; 8653 1.1 mrg ops[0] = operands[0]; 8654 1.1 mrg ops[1] = operands[1]; 8655 1.1 mrg ops[2] = operands[2]; 8656 1.1 mrg output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]",ops); 8657 1.1 mrg return ""; 8658 1.1 mrg } 8659 1.1 mrg [(set_attr "length" "4")]) 8660 1.1 mrg 8661 1.1 mrg ;; 8662 1.1 mrg ;; [vstrwq_scatter_base_p_f] 8663 1.1 mrg ;; 8664 1.1 mrg (define_insn "mve_vstrwq_scatter_base_p_fv4sf" 8665 1.1 mrg [(set (mem:BLK (scratch)) 8666 1.1 mrg (unspec:BLK 8667 1.1 mrg [(match_operand:V4SI 0 "s_register_operand" "w") 8668 1.1 mrg (match_operand:SI 1 "immediate_operand" "i") 8669 1.1 mrg (match_operand:V4SF 2 "s_register_operand" "w") 8670 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8671 1.1 mrg VSTRWQSB_F)) 8672 1.1 mrg ] 8673 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8674 1.1 mrg { 8675 1.1 mrg rtx ops[3]; 8676 1.1 mrg ops[0] = operands[0]; 8677 1.1 mrg ops[1] = operands[1]; 8678 1.1 mrg ops[2] = operands[2]; 8679 1.1 mrg output_asm_insn ("vpst\n\tvstrwt.u32\t%q2, [%q0, %1]",ops); 8680 1.1 mrg return ""; 8681 1.1 mrg } 8682 1.1 mrg [(set_attr "length" "8")]) 8683 1.1 mrg 8684 1.1 mrg ;; 8685 1.1 mrg ;; [vstrwq_scatter_offset_f] 8686 1.1 mrg ;; 8687 1.1 mrg (define_expand "mve_vstrwq_scatter_offset_fv4sf" 8688 1.1 mrg [(match_operand:V4SI 0 "mve_scatter_memory") 8689 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 8690 1.1 mrg (match_operand:V4SF 2 "s_register_operand") 8691 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRWQSO_F)] 8692 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8693 1.1 mrg { 8694 1.1 mrg rtx ind = XEXP (operands[0], 0); 8695 1.1 mrg gcc_assert (REG_P (ind)); 8696 1.1 mrg emit_insn (gen_mve_vstrwq_scatter_offset_fv4sf_insn (ind, operands[1], 8697 1.1 mrg operands[2])); 8698 1.1 mrg DONE; 8699 1.1 mrg }) 8700 1.1 mrg 8701 1.1 mrg (define_insn "mve_vstrwq_scatter_offset_fv4sf_insn" 8702 1.1 mrg [(set (mem:BLK (scratch)) 8703 1.1 mrg (unspec:BLK 8704 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8705 1.1 mrg (match_operand:V4SI 1 "s_register_operand" "w") 8706 1.1 mrg (match_operand:V4SF 2 "s_register_operand" "w")] 8707 1.1 mrg VSTRWQSO_F))] 8708 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8709 1.1 mrg "vstrw.32\t%q2, [%0, %q1]" 8710 1.1 mrg [(set_attr "length" "4")]) 8711 1.1 mrg 8712 1.1 mrg ;; 8713 1.1 mrg ;; [vstrwq_scatter_offset_p_f] 8714 1.1 mrg ;; 8715 1.1 mrg (define_expand "mve_vstrwq_scatter_offset_p_fv4sf" 8716 1.1 mrg [(match_operand:V4SI 0 "mve_scatter_memory") 8717 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 8718 1.1 mrg (match_operand:V4SF 2 "s_register_operand") 8719 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand") 8720 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRWQSO_F)] 8721 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8722 1.1 mrg { 8723 1.1 mrg rtx ind = XEXP (operands[0], 0); 8724 1.1 mrg gcc_assert (REG_P (ind)); 8725 1.1 mrg emit_insn (gen_mve_vstrwq_scatter_offset_p_fv4sf_insn (ind, operands[1], 8726 1.1 mrg operands[2], 8727 1.1 mrg operands[3])); 8728 1.1 mrg DONE; 8729 1.1 mrg }) 8730 1.1 mrg 8731 1.1 mrg (define_insn "mve_vstrwq_scatter_offset_p_fv4sf_insn" 8732 1.1 mrg [(set (mem:BLK (scratch)) 8733 1.1 mrg (unspec:BLK 8734 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8735 1.1 mrg (match_operand:V4SI 1 "s_register_operand" "w") 8736 1.1 mrg (match_operand:V4SF 2 "s_register_operand" "w") 8737 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8738 1.1 mrg VSTRWQSO_F))] 8739 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8740 1.1 mrg "vpst\;vstrwt.32\t%q2, [%0, %q1]" 8741 1.1 mrg [(set_attr "length" "8")]) 8742 1.1 mrg 8743 1.1 mrg ;; 8744 1.1 mrg ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u] 8745 1.1 mrg ;; 8746 1.1 mrg (define_expand "mve_vstrwq_scatter_offset_p_<supf>v4si" 8747 1.1 mrg [(match_operand:V4SI 0 "mve_scatter_memory") 8748 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 8749 1.1 mrg (match_operand:V4SI 2 "s_register_operand") 8750 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand") 8751 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRWSOQ)] 8752 1.1 mrg "TARGET_HAVE_MVE" 8753 1.1 mrg { 8754 1.1 mrg rtx ind = XEXP (operands[0], 0); 8755 1.1 mrg gcc_assert (REG_P (ind)); 8756 1.1 mrg emit_insn (gen_mve_vstrwq_scatter_offset_p_<supf>v4si_insn (ind, operands[1], 8757 1.1 mrg operands[2], 8758 1.1 mrg operands[3])); 8759 1.1 mrg DONE; 8760 1.1 mrg }) 8761 1.1 mrg 8762 1.1 mrg (define_insn "mve_vstrwq_scatter_offset_p_<supf>v4si_insn" 8763 1.1 mrg [(set (mem:BLK (scratch)) 8764 1.1 mrg (unspec:BLK 8765 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8766 1.1 mrg (match_operand:V4SI 1 "s_register_operand" "w") 8767 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 8768 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8769 1.1 mrg VSTRWSOQ))] 8770 1.1 mrg "TARGET_HAVE_MVE" 8771 1.1 mrg "vpst\;vstrwt.32\t%q2, [%0, %q1]" 8772 1.1 mrg [(set_attr "length" "8")]) 8773 1.1 mrg 8774 1.1 mrg ;; 8775 1.1 mrg ;; [vstrwq_scatter_offset_s vstrwq_scatter_offset_u] 8776 1.1 mrg ;; 8777 1.1 mrg (define_expand "mve_vstrwq_scatter_offset_<supf>v4si" 8778 1.1 mrg [(match_operand:V4SI 0 "mve_scatter_memory") 8779 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 8780 1.1 mrg (match_operand:V4SI 2 "s_register_operand") 8781 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRWSOQ)] 8782 1.1 mrg "TARGET_HAVE_MVE" 8783 1.1 mrg { 8784 1.1 mrg rtx ind = XEXP (operands[0], 0); 8785 1.1 mrg gcc_assert (REG_P (ind)); 8786 1.1 mrg emit_insn (gen_mve_vstrwq_scatter_offset_<supf>v4si_insn (ind, operands[1], 8787 1.1 mrg operands[2])); 8788 1.1 mrg DONE; 8789 1.1 mrg }) 8790 1.1 mrg 8791 1.1 mrg (define_insn "mve_vstrwq_scatter_offset_<supf>v4si_insn" 8792 1.1 mrg [(set (mem:BLK (scratch)) 8793 1.1 mrg (unspec:BLK 8794 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8795 1.1 mrg (match_operand:V4SI 1 "s_register_operand" "w") 8796 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 8797 1.1 mrg VSTRWSOQ))] 8798 1.1 mrg "TARGET_HAVE_MVE" 8799 1.1 mrg "vstrw.32\t%q2, [%0, %q1]" 8800 1.1 mrg [(set_attr "length" "4")]) 8801 1.1 mrg 8802 1.1 mrg ;; 8803 1.1 mrg ;; [vstrwq_scatter_shifted_offset_f] 8804 1.1 mrg ;; 8805 1.1 mrg (define_expand "mve_vstrwq_scatter_shifted_offset_fv4sf" 8806 1.1 mrg [(match_operand:V4SI 0 "mve_scatter_memory") 8807 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 8808 1.1 mrg (match_operand:V4SF 2 "s_register_operand") 8809 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)] 8810 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8811 1.1 mrg { 8812 1.1 mrg rtx ind = XEXP (operands[0], 0); 8813 1.1 mrg gcc_assert (REG_P (ind)); 8814 1.1 mrg emit_insn (gen_mve_vstrwq_scatter_shifted_offset_fv4sf_insn (ind, operands[1], 8815 1.1 mrg operands[2])); 8816 1.1 mrg DONE; 8817 1.1 mrg }) 8818 1.1 mrg 8819 1.1 mrg (define_insn "mve_vstrwq_scatter_shifted_offset_fv4sf_insn" 8820 1.1 mrg [(set (mem:BLK (scratch)) 8821 1.1 mrg (unspec:BLK 8822 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8823 1.1 mrg (match_operand:V4SI 1 "s_register_operand" "w") 8824 1.1 mrg (match_operand:V4SF 2 "s_register_operand" "w")] 8825 1.1 mrg VSTRWQSSO_F))] 8826 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8827 1.1 mrg "vstrw.32\t%q2, [%0, %q1, uxtw #2]" 8828 1.1 mrg [(set_attr "length" "8")]) 8829 1.1 mrg 8830 1.1 mrg ;; 8831 1.1 mrg ;; [vstrwq_scatter_shifted_offset_p_f] 8832 1.1 mrg ;; 8833 1.1 mrg (define_expand "mve_vstrwq_scatter_shifted_offset_p_fv4sf" 8834 1.1 mrg [(match_operand:V4SI 0 "mve_scatter_memory") 8835 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 8836 1.1 mrg (match_operand:V4SF 2 "s_register_operand") 8837 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand") 8838 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRWQSSO_F)] 8839 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8840 1.1 mrg { 8841 1.1 mrg rtx ind = XEXP (operands[0], 0); 8842 1.1 mrg gcc_assert (REG_P (ind)); 8843 1.1 mrg emit_insn ( 8844 1.1 mrg gen_mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn (ind, operands[1], 8845 1.1 mrg operands[2], 8846 1.1 mrg operands[3])); 8847 1.1 mrg DONE; 8848 1.1 mrg }) 8849 1.1 mrg 8850 1.1 mrg (define_insn "mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn" 8851 1.1 mrg [(set (mem:BLK (scratch)) 8852 1.1 mrg (unspec:BLK 8853 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8854 1.1 mrg (match_operand:V4SI 1 "s_register_operand" "w") 8855 1.1 mrg (match_operand:V4SF 2 "s_register_operand" "w") 8856 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8857 1.1 mrg VSTRWQSSO_F))] 8858 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8859 1.1 mrg "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]" 8860 1.1 mrg [(set_attr "length" "8")]) 8861 1.1 mrg 8862 1.1 mrg ;; 8863 1.1 mrg ;; [vstrwq_scatter_shifted_offset_p_s vstrwq_scatter_shifted_offset_p_u] 8864 1.1 mrg ;; 8865 1.1 mrg (define_expand "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si" 8866 1.1 mrg [(match_operand:V4SI 0 "mve_scatter_memory") 8867 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 8868 1.1 mrg (match_operand:V4SI 2 "s_register_operand") 8869 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand") 8870 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRWSSOQ)] 8871 1.1 mrg "TARGET_HAVE_MVE" 8872 1.1 mrg { 8873 1.1 mrg rtx ind = XEXP (operands[0], 0); 8874 1.1 mrg gcc_assert (REG_P (ind)); 8875 1.1 mrg emit_insn ( 8876 1.1 mrg gen_mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn (ind, operands[1], 8877 1.1 mrg operands[2], 8878 1.1 mrg operands[3])); 8879 1.1 mrg DONE; 8880 1.1 mrg }) 8881 1.1 mrg 8882 1.1 mrg (define_insn "mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn" 8883 1.1 mrg [(set (mem:BLK (scratch)) 8884 1.1 mrg (unspec:BLK 8885 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8886 1.1 mrg (match_operand:V4SI 1 "s_register_operand" "w") 8887 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 8888 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand" "Up")] 8889 1.1 mrg VSTRWSSOQ))] 8890 1.1 mrg "TARGET_HAVE_MVE" 8891 1.1 mrg "vpst\;vstrwt.32\t%q2, [%0, %q1, uxtw #2]" 8892 1.1 mrg [(set_attr "length" "8")]) 8893 1.1 mrg 8894 1.1 mrg ;; 8895 1.1 mrg ;; [vstrwq_scatter_shifted_offset_s vstrwq_scatter_shifted_offset_u] 8896 1.1 mrg ;; 8897 1.1 mrg (define_expand "mve_vstrwq_scatter_shifted_offset_<supf>v4si" 8898 1.1 mrg [(match_operand:V4SI 0 "mve_scatter_memory") 8899 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 8900 1.1 mrg (match_operand:V4SI 2 "s_register_operand") 8901 1.1 mrg (unspec:V4SI [(const_int 0)] VSTRWSSOQ)] 8902 1.1 mrg "TARGET_HAVE_MVE" 8903 1.1 mrg { 8904 1.1 mrg rtx ind = XEXP (operands[0], 0); 8905 1.1 mrg gcc_assert (REG_P (ind)); 8906 1.1 mrg emit_insn ( 8907 1.1 mrg gen_mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn (ind, operands[1], 8908 1.1 mrg operands[2])); 8909 1.1 mrg DONE; 8910 1.1 mrg }) 8911 1.1 mrg 8912 1.1 mrg (define_insn "mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn" 8913 1.1 mrg [(set (mem:BLK (scratch)) 8914 1.1 mrg (unspec:BLK 8915 1.1 mrg [(match_operand:SI 0 "register_operand" "r") 8916 1.1 mrg (match_operand:V4SI 1 "s_register_operand" "w") 8917 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 8918 1.1 mrg VSTRWSSOQ))] 8919 1.1 mrg "TARGET_HAVE_MVE" 8920 1.1 mrg "vstrw.32\t%q2, [%0, %q1, uxtw #2]" 8921 1.1 mrg [(set_attr "length" "4")]) 8922 1.1 mrg 8923 1.1 mrg ;; 8924 1.1 mrg ;; [vaddq_s, vaddq_u]) 8925 1.1 mrg ;; 8926 1.1 mrg (define_insn "mve_vaddq<mode>" 8927 1.1 mrg [ 8928 1.1 mrg (set (match_operand:MVE_2 0 "s_register_operand" "=w") 8929 1.1 mrg (plus:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") 8930 1.1 mrg (match_operand:MVE_2 2 "s_register_operand" "w"))) 8931 1.1 mrg ] 8932 1.1 mrg "TARGET_HAVE_MVE" 8933 1.1.1.2 mrg "vadd.i%#<V_sz_elem>\t%q0, %q1, %q2" 8934 1.1 mrg [(set_attr "type" "mve_move") 8935 1.1 mrg ]) 8936 1.1 mrg 8937 1.1 mrg ;; 8938 1.1 mrg ;; [vaddq_f]) 8939 1.1 mrg ;; 8940 1.1 mrg (define_insn "mve_vaddq_f<mode>" 8941 1.1 mrg [ 8942 1.1 mrg (set (match_operand:MVE_0 0 "s_register_operand" "=w") 8943 1.1 mrg (plus:MVE_0 (match_operand:MVE_0 1 "s_register_operand" "w") 8944 1.1 mrg (match_operand:MVE_0 2 "s_register_operand" "w"))) 8945 1.1 mrg ] 8946 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 8947 1.1.1.2 mrg "vadd.f%#<V_sz_elem>\t%q0, %q1, %q2" 8948 1.1 mrg [(set_attr "type" "mve_move") 8949 1.1 mrg ]) 8950 1.1 mrg 8951 1.1 mrg ;; 8952 1.1 mrg ;; [vidupq_n_u]) 8953 1.1 mrg ;; 8954 1.1 mrg (define_expand "mve_vidupq_n_u<mode>" 8955 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 8956 1.1 mrg (match_operand:SI 1 "s_register_operand") 8957 1.1 mrg (match_operand:SI 2 "mve_imm_selective_upto_8")] 8958 1.1 mrg "TARGET_HAVE_MVE" 8959 1.1 mrg { 8960 1.1 mrg rtx temp = gen_reg_rtx (SImode); 8961 1.1 mrg emit_move_insn (temp, operands[1]); 8962 1.1 mrg rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode); 8963 1.1 mrg emit_insn (gen_mve_vidupq_u<mode>_insn (operands[0], temp, operands[1], 8964 1.1 mrg operands[2], inc)); 8965 1.1 mrg DONE; 8966 1.1 mrg }) 8967 1.1 mrg 8968 1.1 mrg ;; 8969 1.1 mrg ;; [vidupq_u_insn]) 8970 1.1 mrg ;; 8971 1.1 mrg (define_insn "mve_vidupq_u<mode>_insn" 8972 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 8973 1.1 mrg (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1") 8974 1.1 mrg (match_operand:SI 3 "mve_imm_selective_upto_8" "Rg")] 8975 1.1 mrg VIDUPQ)) 8976 1.1 mrg (set (match_operand:SI 1 "s_register_operand" "=Te") 8977 1.1 mrg (plus:SI (match_dup 2) 8978 1.1 mrg (match_operand:SI 4 "immediate_operand" "i")))] 8979 1.1 mrg "TARGET_HAVE_MVE" 8980 1.1 mrg "vidup.u%#<V_sz_elem>\t%q0, %1, %3") 8981 1.1 mrg 8982 1.1 mrg ;; 8983 1.1 mrg ;; [vidupq_m_n_u]) 8984 1.1 mrg ;; 8985 1.1 mrg (define_expand "mve_vidupq_m_n_u<mode>" 8986 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 8987 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 8988 1.1 mrg (match_operand:SI 2 "s_register_operand") 8989 1.1 mrg (match_operand:SI 3 "mve_imm_selective_upto_8") 8990 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand")] 8991 1.1 mrg "TARGET_HAVE_MVE" 8992 1.1 mrg { 8993 1.1 mrg rtx temp = gen_reg_rtx (SImode); 8994 1.1 mrg emit_move_insn (temp, operands[2]); 8995 1.1 mrg rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode); 8996 1.1 mrg emit_insn (gen_mve_vidupq_m_wb_u<mode>_insn(operands[0], operands[1], temp, 8997 1.1 mrg operands[2], operands[3], 8998 1.1 mrg operands[4], inc)); 8999 1.1 mrg DONE; 9000 1.1 mrg }) 9001 1.1 mrg 9002 1.1 mrg ;; 9003 1.1 mrg ;; [vidupq_m_wb_u_insn]) 9004 1.1 mrg ;; 9005 1.1 mrg (define_insn "mve_vidupq_m_wb_u<mode>_insn" 9006 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9007 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 9008 1.1 mrg (match_operand:SI 3 "s_register_operand" "2") 9009 1.1 mrg (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg") 9010 1.1.1.2 mrg (match_operand:<MVE_VPRED> 5 "vpr_register_operand" "Up")] 9011 1.1 mrg VIDUPQ_M)) 9012 1.1 mrg (set (match_operand:SI 2 "s_register_operand" "=Te") 9013 1.1 mrg (plus:SI (match_dup 3) 9014 1.1 mrg (match_operand:SI 6 "immediate_operand" "i")))] 9015 1.1 mrg "TARGET_HAVE_MVE" 9016 1.1 mrg "vpst\;\tvidupt.u%#<V_sz_elem>\t%q0, %2, %4" 9017 1.1 mrg [(set_attr "length""8")]) 9018 1.1 mrg 9019 1.1 mrg ;; 9020 1.1 mrg ;; [vddupq_n_u]) 9021 1.1 mrg ;; 9022 1.1 mrg (define_expand "mve_vddupq_n_u<mode>" 9023 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 9024 1.1 mrg (match_operand:SI 1 "s_register_operand") 9025 1.1 mrg (match_operand:SI 2 "mve_imm_selective_upto_8")] 9026 1.1 mrg "TARGET_HAVE_MVE" 9027 1.1 mrg { 9028 1.1 mrg rtx temp = gen_reg_rtx (SImode); 9029 1.1 mrg emit_move_insn (temp, operands[1]); 9030 1.1 mrg rtx inc = gen_int_mode (INTVAL(operands[2]) * <MVE_LANES>, SImode); 9031 1.1 mrg emit_insn (gen_mve_vddupq_u<mode>_insn (operands[0], temp, operands[1], 9032 1.1 mrg operands[2], inc)); 9033 1.1 mrg DONE; 9034 1.1 mrg }) 9035 1.1 mrg 9036 1.1 mrg ;; 9037 1.1 mrg ;; [vddupq_u_insn]) 9038 1.1 mrg ;; 9039 1.1 mrg (define_insn "mve_vddupq_u<mode>_insn" 9040 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9041 1.1 mrg (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1") 9042 1.1 mrg (match_operand:SI 3 "immediate_operand" "i")] 9043 1.1 mrg VDDUPQ)) 9044 1.1 mrg (set (match_operand:SI 1 "s_register_operand" "=Te") 9045 1.1 mrg (minus:SI (match_dup 2) 9046 1.1 mrg (match_operand:SI 4 "immediate_operand" "i")))] 9047 1.1 mrg "TARGET_HAVE_MVE" 9048 1.1.1.2 mrg "vddup.u%#<V_sz_elem>\t%q0, %1, %3") 9049 1.1 mrg 9050 1.1 mrg ;; 9051 1.1 mrg ;; [vddupq_m_n_u]) 9052 1.1 mrg ;; 9053 1.1 mrg (define_expand "mve_vddupq_m_n_u<mode>" 9054 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 9055 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 9056 1.1 mrg (match_operand:SI 2 "s_register_operand") 9057 1.1 mrg (match_operand:SI 3 "mve_imm_selective_upto_8") 9058 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand")] 9059 1.1 mrg "TARGET_HAVE_MVE" 9060 1.1 mrg { 9061 1.1 mrg rtx temp = gen_reg_rtx (SImode); 9062 1.1 mrg emit_move_insn (temp, operands[2]); 9063 1.1 mrg rtx inc = gen_int_mode (INTVAL(operands[3]) * <MVE_LANES>, SImode); 9064 1.1 mrg emit_insn (gen_mve_vddupq_m_wb_u<mode>_insn(operands[0], operands[1], temp, 9065 1.1 mrg operands[2], operands[3], 9066 1.1 mrg operands[4], inc)); 9067 1.1 mrg DONE; 9068 1.1 mrg }) 9069 1.1 mrg 9070 1.1 mrg ;; 9071 1.1 mrg ;; [vddupq_m_wb_u_insn]) 9072 1.1 mrg ;; 9073 1.1 mrg (define_insn "mve_vddupq_m_wb_u<mode>_insn" 9074 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9075 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand" "0") 9076 1.1 mrg (match_operand:SI 3 "s_register_operand" "2") 9077 1.1 mrg (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg") 9078 1.1.1.2 mrg (match_operand:<MVE_VPRED> 5 "vpr_register_operand" "Up")] 9079 1.1 mrg VDDUPQ_M)) 9080 1.1 mrg (set (match_operand:SI 2 "s_register_operand" "=Te") 9081 1.1 mrg (minus:SI (match_dup 3) 9082 1.1 mrg (match_operand:SI 6 "immediate_operand" "i")))] 9083 1.1 mrg "TARGET_HAVE_MVE" 9084 1.1.1.2 mrg "vpst\;vddupt.u%#<V_sz_elem>\t%q0, %2, %4" 9085 1.1 mrg [(set_attr "length""8")]) 9086 1.1 mrg 9087 1.1 mrg ;; 9088 1.1 mrg ;; [vdwdupq_n_u]) 9089 1.1 mrg ;; 9090 1.1 mrg (define_expand "mve_vdwdupq_n_u<mode>" 9091 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 9092 1.1 mrg (match_operand:SI 1 "s_register_operand") 9093 1.1 mrg (match_operand:DI 2 "s_register_operand") 9094 1.1 mrg (match_operand:SI 3 "mve_imm_selective_upto_8")] 9095 1.1 mrg "TARGET_HAVE_MVE" 9096 1.1 mrg { 9097 1.1 mrg rtx ignore_wb = gen_reg_rtx (SImode); 9098 1.1 mrg emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (operands[0], ignore_wb, 9099 1.1 mrg operands[1], operands[2], 9100 1.1 mrg operands[3])); 9101 1.1 mrg DONE; 9102 1.1 mrg }) 9103 1.1 mrg 9104 1.1 mrg ;; 9105 1.1 mrg ;; [vdwdupq_wb_u]) 9106 1.1 mrg ;; 9107 1.1 mrg (define_expand "mve_vdwdupq_wb_u<mode>" 9108 1.1 mrg [(match_operand:SI 0 "s_register_operand") 9109 1.1 mrg (match_operand:SI 1 "s_register_operand") 9110 1.1 mrg (match_operand:DI 2 "s_register_operand") 9111 1.1 mrg (match_operand:SI 3 "mve_imm_selective_upto_8") 9112 1.1 mrg (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 9113 1.1 mrg "TARGET_HAVE_MVE" 9114 1.1 mrg { 9115 1.1 mrg rtx ignore_vec = gen_reg_rtx (<MODE>mode); 9116 1.1 mrg emit_insn (gen_mve_vdwdupq_wb_u<mode>_insn (ignore_vec, operands[0], 9117 1.1 mrg operands[1], operands[2], 9118 1.1 mrg operands[3])); 9119 1.1 mrg DONE; 9120 1.1 mrg }) 9121 1.1 mrg 9122 1.1 mrg ;; 9123 1.1 mrg ;; [vdwdupq_wb_u_insn]) 9124 1.1 mrg ;; 9125 1.1 mrg (define_insn "mve_vdwdupq_wb_u<mode>_insn" 9126 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9127 1.1 mrg (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1") 9128 1.1 mrg (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4) 9129 1.1 mrg (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")] 9130 1.1 mrg VDWDUPQ)) 9131 1.1 mrg (set (match_operand:SI 1 "s_register_operand" "=Te") 9132 1.1 mrg (unspec:SI [(match_dup 2) 9133 1.1 mrg (subreg:SI (match_dup 3) 4) 9134 1.1 mrg (match_dup 4)] 9135 1.1 mrg VDWDUPQ))] 9136 1.1 mrg "TARGET_HAVE_MVE" 9137 1.1 mrg "vdwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4" 9138 1.1 mrg ) 9139 1.1 mrg 9140 1.1 mrg ;; 9141 1.1 mrg ;; [vdwdupq_m_n_u]) 9142 1.1 mrg ;; 9143 1.1 mrg (define_expand "mve_vdwdupq_m_n_u<mode>" 9144 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 9145 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 9146 1.1 mrg (match_operand:SI 2 "s_register_operand") 9147 1.1 mrg (match_operand:DI 3 "s_register_operand") 9148 1.1 mrg (match_operand:SI 4 "mve_imm_selective_upto_8") 9149 1.1.1.2 mrg (match_operand:<MVE_VPRED> 5 "vpr_register_operand")] 9150 1.1 mrg "TARGET_HAVE_MVE" 9151 1.1 mrg { 9152 1.1 mrg rtx ignore_wb = gen_reg_rtx (SImode); 9153 1.1 mrg emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb, 9154 1.1 mrg operands[1], operands[2], 9155 1.1 mrg operands[3], operands[4], 9156 1.1 mrg operands[5])); 9157 1.1 mrg DONE; 9158 1.1 mrg }) 9159 1.1 mrg 9160 1.1 mrg ;; 9161 1.1 mrg ;; [vdwdupq_m_wb_u]) 9162 1.1 mrg ;; 9163 1.1 mrg (define_expand "mve_vdwdupq_m_wb_u<mode>" 9164 1.1 mrg [(match_operand:SI 0 "s_register_operand") 9165 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 9166 1.1 mrg (match_operand:SI 2 "s_register_operand") 9167 1.1 mrg (match_operand:DI 3 "s_register_operand") 9168 1.1 mrg (match_operand:SI 4 "mve_imm_selective_upto_8") 9169 1.1.1.2 mrg (match_operand:<MVE_VPRED> 5 "vpr_register_operand")] 9170 1.1 mrg "TARGET_HAVE_MVE" 9171 1.1 mrg { 9172 1.1 mrg rtx ignore_vec = gen_reg_rtx (<MODE>mode); 9173 1.1 mrg emit_insn (gen_mve_vdwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0], 9174 1.1 mrg operands[1], operands[2], 9175 1.1 mrg operands[3], operands[4], 9176 1.1 mrg operands[5])); 9177 1.1 mrg DONE; 9178 1.1 mrg }) 9179 1.1 mrg 9180 1.1 mrg ;; 9181 1.1 mrg ;; [vdwdupq_m_wb_u_insn]) 9182 1.1 mrg ;; 9183 1.1 mrg (define_insn "mve_vdwdupq_m_wb_u<mode>_insn" 9184 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9185 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0") 9186 1.1 mrg (match_operand:SI 3 "s_register_operand" "1") 9187 1.1 mrg (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4) 9188 1.1 mrg (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg") 9189 1.1.1.2 mrg (match_operand:<MVE_VPRED> 6 "vpr_register_operand" "Up")] 9190 1.1 mrg VDWDUPQ_M)) 9191 1.1 mrg (set (match_operand:SI 1 "s_register_operand" "=Te") 9192 1.1 mrg (unspec:SI [(match_dup 2) 9193 1.1 mrg (match_dup 3) 9194 1.1 mrg (subreg:SI (match_dup 4) 4) 9195 1.1 mrg (match_dup 5) 9196 1.1 mrg (match_dup 6)] 9197 1.1 mrg VDWDUPQ_M)) 9198 1.1 mrg ] 9199 1.1 mrg "TARGET_HAVE_MVE" 9200 1.1.1.2 mrg "vpst\;vdwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5" 9201 1.1 mrg [(set_attr "type" "mve_move") 9202 1.1 mrg (set_attr "length""8")]) 9203 1.1 mrg 9204 1.1 mrg ;; 9205 1.1 mrg ;; [viwdupq_n_u]) 9206 1.1 mrg ;; 9207 1.1 mrg (define_expand "mve_viwdupq_n_u<mode>" 9208 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 9209 1.1 mrg (match_operand:SI 1 "s_register_operand") 9210 1.1 mrg (match_operand:DI 2 "s_register_operand") 9211 1.1 mrg (match_operand:SI 3 "mve_imm_selective_upto_8")] 9212 1.1 mrg "TARGET_HAVE_MVE" 9213 1.1 mrg { 9214 1.1 mrg rtx ignore_wb = gen_reg_rtx (SImode); 9215 1.1 mrg emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (operands[0], ignore_wb, 9216 1.1 mrg operands[1], operands[2], 9217 1.1 mrg operands[3])); 9218 1.1 mrg DONE; 9219 1.1 mrg }) 9220 1.1 mrg 9221 1.1 mrg ;; 9222 1.1 mrg ;; [viwdupq_wb_u]) 9223 1.1 mrg ;; 9224 1.1 mrg (define_expand "mve_viwdupq_wb_u<mode>" 9225 1.1 mrg [(match_operand:SI 0 "s_register_operand") 9226 1.1 mrg (match_operand:SI 1 "s_register_operand") 9227 1.1 mrg (match_operand:DI 2 "s_register_operand") 9228 1.1 mrg (match_operand:SI 3 "mve_imm_selective_upto_8") 9229 1.1 mrg (unspec:MVE_2 [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 9230 1.1 mrg "TARGET_HAVE_MVE" 9231 1.1 mrg { 9232 1.1 mrg rtx ignore_vec = gen_reg_rtx (<MODE>mode); 9233 1.1 mrg emit_insn (gen_mve_viwdupq_wb_u<mode>_insn (ignore_vec, operands[0], 9234 1.1 mrg operands[1], operands[2], 9235 1.1 mrg operands[3])); 9236 1.1 mrg DONE; 9237 1.1 mrg }) 9238 1.1 mrg 9239 1.1 mrg ;; 9240 1.1 mrg ;; [viwdupq_wb_u_insn]) 9241 1.1 mrg ;; 9242 1.1 mrg (define_insn "mve_viwdupq_wb_u<mode>_insn" 9243 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9244 1.1 mrg (unspec:MVE_2 [(match_operand:SI 2 "s_register_operand" "1") 9245 1.1 mrg (subreg:SI (match_operand:DI 3 "s_register_operand" "r") 4) 9246 1.1 mrg (match_operand:SI 4 "mve_imm_selective_upto_8" "Rg")] 9247 1.1 mrg VIWDUPQ)) 9248 1.1 mrg (set (match_operand:SI 1 "s_register_operand" "=Te") 9249 1.1 mrg (unspec:SI [(match_dup 2) 9250 1.1 mrg (subreg:SI (match_dup 3) 4) 9251 1.1 mrg (match_dup 4)] 9252 1.1 mrg VIWDUPQ))] 9253 1.1 mrg "TARGET_HAVE_MVE" 9254 1.1 mrg "viwdup.u%#<V_sz_elem>\t%q0, %2, %R3, %4" 9255 1.1 mrg ) 9256 1.1 mrg 9257 1.1 mrg ;; 9258 1.1 mrg ;; [viwdupq_m_n_u]) 9259 1.1 mrg ;; 9260 1.1 mrg (define_expand "mve_viwdupq_m_n_u<mode>" 9261 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 9262 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 9263 1.1 mrg (match_operand:SI 2 "s_register_operand") 9264 1.1 mrg (match_operand:DI 3 "s_register_operand") 9265 1.1 mrg (match_operand:SI 4 "mve_imm_selective_upto_8") 9266 1.1.1.2 mrg (match_operand:<MVE_VPRED> 5 "vpr_register_operand")] 9267 1.1 mrg "TARGET_HAVE_MVE" 9268 1.1 mrg { 9269 1.1 mrg rtx ignore_wb = gen_reg_rtx (SImode); 9270 1.1 mrg emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (operands[0], ignore_wb, 9271 1.1 mrg operands[1], operands[2], 9272 1.1 mrg operands[3], operands[4], 9273 1.1 mrg operands[5])); 9274 1.1 mrg DONE; 9275 1.1 mrg }) 9276 1.1 mrg 9277 1.1 mrg ;; 9278 1.1 mrg ;; [viwdupq_m_wb_u]) 9279 1.1 mrg ;; 9280 1.1 mrg (define_expand "mve_viwdupq_m_wb_u<mode>" 9281 1.1 mrg [(match_operand:SI 0 "s_register_operand") 9282 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 9283 1.1 mrg (match_operand:SI 2 "s_register_operand") 9284 1.1 mrg (match_operand:DI 3 "s_register_operand") 9285 1.1 mrg (match_operand:SI 4 "mve_imm_selective_upto_8") 9286 1.1.1.2 mrg (match_operand:<MVE_VPRED> 5 "vpr_register_operand")] 9287 1.1 mrg "TARGET_HAVE_MVE" 9288 1.1 mrg { 9289 1.1 mrg rtx ignore_vec = gen_reg_rtx (<MODE>mode); 9290 1.1 mrg emit_insn (gen_mve_viwdupq_m_wb_u<mode>_insn (ignore_vec, operands[0], 9291 1.1 mrg operands[1], operands[2], 9292 1.1 mrg operands[3], operands[4], 9293 1.1 mrg operands[5])); 9294 1.1 mrg DONE; 9295 1.1 mrg }) 9296 1.1 mrg 9297 1.1 mrg ;; 9298 1.1 mrg ;; [viwdupq_m_wb_u_insn]) 9299 1.1 mrg ;; 9300 1.1 mrg (define_insn "mve_viwdupq_m_wb_u<mode>_insn" 9301 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 9302 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0") 9303 1.1 mrg (match_operand:SI 3 "s_register_operand" "1") 9304 1.1 mrg (subreg:SI (match_operand:DI 4 "s_register_operand" "r") 4) 9305 1.1 mrg (match_operand:SI 5 "mve_imm_selective_upto_8" "Rg") 9306 1.1.1.2 mrg (match_operand:<MVE_VPRED> 6 "vpr_register_operand" "Up")] 9307 1.1 mrg VIWDUPQ_M)) 9308 1.1 mrg (set (match_operand:SI 1 "s_register_operand" "=Te") 9309 1.1 mrg (unspec:SI [(match_dup 2) 9310 1.1 mrg (match_dup 3) 9311 1.1 mrg (subreg:SI (match_dup 4) 4) 9312 1.1 mrg (match_dup 5) 9313 1.1 mrg (match_dup 6)] 9314 1.1 mrg VIWDUPQ_M)) 9315 1.1 mrg ] 9316 1.1 mrg "TARGET_HAVE_MVE" 9317 1.1 mrg "vpst\;\tviwdupt.u%#<V_sz_elem>\t%q2, %3, %R4, %5" 9318 1.1 mrg [(set_attr "type" "mve_move") 9319 1.1 mrg (set_attr "length""8")]) 9320 1.1 mrg 9321 1.1 mrg ;; 9322 1.1 mrg ;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u] 9323 1.1 mrg ;; 9324 1.1 mrg (define_insn "mve_vstrwq_scatter_base_wb_<supf>v4si" 9325 1.1 mrg [(set (mem:BLK (scratch)) 9326 1.1 mrg (unspec:BLK 9327 1.1 mrg [(match_operand:V4SI 1 "s_register_operand" "0") 9328 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate" "Ri") 9329 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w")] 9330 1.1 mrg VSTRWSBWBQ)) 9331 1.1 mrg (set (match_operand:V4SI 0 "s_register_operand" "=w") 9332 1.1 mrg (unspec:V4SI [(match_dup 1) (match_dup 2)] 9333 1.1 mrg VSTRWSBWBQ)) 9334 1.1 mrg ] 9335 1.1 mrg "TARGET_HAVE_MVE" 9336 1.1 mrg { 9337 1.1 mrg rtx ops[3]; 9338 1.1 mrg ops[0] = operands[1]; 9339 1.1 mrg ops[1] = operands[2]; 9340 1.1 mrg ops[2] = operands[3]; 9341 1.1 mrg output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops); 9342 1.1 mrg return ""; 9343 1.1 mrg } 9344 1.1 mrg [(set_attr "length" "4")]) 9345 1.1 mrg 9346 1.1 mrg ;; 9347 1.1 mrg ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u] 9348 1.1 mrg ;; 9349 1.1 mrg (define_insn "mve_vstrwq_scatter_base_wb_p_<supf>v4si" 9350 1.1 mrg [(set (mem:BLK (scratch)) 9351 1.1 mrg (unspec:BLK 9352 1.1 mrg [(match_operand:V4SI 1 "s_register_operand" "0") 9353 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate" "Ri") 9354 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w") 9355 1.1.1.2 mrg (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9356 1.1 mrg VSTRWSBWBQ)) 9357 1.1 mrg (set (match_operand:V4SI 0 "s_register_operand" "=w") 9358 1.1 mrg (unspec:V4SI [(match_dup 1) (match_dup 2)] 9359 1.1 mrg VSTRWSBWBQ)) 9360 1.1 mrg ] 9361 1.1 mrg "TARGET_HAVE_MVE" 9362 1.1 mrg { 9363 1.1 mrg rtx ops[3]; 9364 1.1 mrg ops[0] = operands[1]; 9365 1.1 mrg ops[1] = operands[2]; 9366 1.1 mrg ops[2] = operands[3]; 9367 1.1 mrg output_asm_insn ("vpst\;\tvstrwt.u32\t%q2, [%q0, %1]!",ops); 9368 1.1 mrg return ""; 9369 1.1 mrg } 9370 1.1 mrg [(set_attr "length" "8")]) 9371 1.1 mrg 9372 1.1 mrg ;; 9373 1.1 mrg ;; [vstrwq_scatter_base_wb_f] 9374 1.1 mrg ;; 9375 1.1 mrg (define_insn "mve_vstrwq_scatter_base_wb_fv4sf" 9376 1.1 mrg [(set (mem:BLK (scratch)) 9377 1.1 mrg (unspec:BLK 9378 1.1 mrg [(match_operand:V4SI 1 "s_register_operand" "0") 9379 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate" "Ri") 9380 1.1 mrg (match_operand:V4SF 3 "s_register_operand" "w")] 9381 1.1 mrg VSTRWQSBWB_F)) 9382 1.1 mrg (set (match_operand:V4SI 0 "s_register_operand" "=w") 9383 1.1 mrg (unspec:V4SI [(match_dup 1) (match_dup 2)] 9384 1.1 mrg VSTRWQSBWB_F)) 9385 1.1 mrg ] 9386 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9387 1.1 mrg { 9388 1.1 mrg rtx ops[3]; 9389 1.1 mrg ops[0] = operands[1]; 9390 1.1 mrg ops[1] = operands[2]; 9391 1.1 mrg ops[2] = operands[3]; 9392 1.1 mrg output_asm_insn ("vstrw.u32\t%q2, [%q0, %1]!",ops); 9393 1.1 mrg return ""; 9394 1.1 mrg } 9395 1.1 mrg [(set_attr "length" "4")]) 9396 1.1 mrg 9397 1.1 mrg ;; 9398 1.1 mrg ;; [vstrwq_scatter_base_wb_p_f] 9399 1.1 mrg ;; 9400 1.1 mrg (define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf" 9401 1.1 mrg [(set (mem:BLK (scratch)) 9402 1.1 mrg (unspec:BLK 9403 1.1 mrg [(match_operand:V4SI 1 "s_register_operand" "0") 9404 1.1.1.2 mrg (match_operand:SI 2 "mve_vstrw_immediate" "Rl") 9405 1.1 mrg (match_operand:V4SF 3 "s_register_operand" "w") 9406 1.1.1.2 mrg (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9407 1.1 mrg VSTRWQSBWB_F)) 9408 1.1 mrg (set (match_operand:V4SI 0 "s_register_operand" "=w") 9409 1.1 mrg (unspec:V4SI [(match_dup 1) (match_dup 2)] 9410 1.1 mrg VSTRWQSBWB_F)) 9411 1.1 mrg ] 9412 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9413 1.1 mrg { 9414 1.1 mrg rtx ops[3]; 9415 1.1 mrg ops[0] = operands[1]; 9416 1.1 mrg ops[1] = operands[2]; 9417 1.1 mrg ops[2] = operands[3]; 9418 1.1.1.2 mrg output_asm_insn ("vpst\;vstrwt.u32\t%q2, [%q0, %1]!",ops); 9419 1.1 mrg return ""; 9420 1.1 mrg } 9421 1.1 mrg [(set_attr "length" "8")]) 9422 1.1 mrg 9423 1.1 mrg ;; 9424 1.1 mrg ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u] 9425 1.1 mrg ;; 9426 1.1 mrg (define_insn "mve_vstrdq_scatter_base_wb_<supf>v2di" 9427 1.1 mrg [(set (mem:BLK (scratch)) 9428 1.1 mrg (unspec:BLK 9429 1.1 mrg [(match_operand:V2DI 1 "s_register_operand" "0") 9430 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate" "Ri") 9431 1.1 mrg (match_operand:V2DI 3 "s_register_operand" "w")] 9432 1.1 mrg VSTRDSBWBQ)) 9433 1.1 mrg (set (match_operand:V2DI 0 "s_register_operand" "=&w") 9434 1.1 mrg (unspec:V2DI [(match_dup 1) (match_dup 2)] 9435 1.1 mrg VSTRDSBWBQ)) 9436 1.1 mrg ] 9437 1.1 mrg "TARGET_HAVE_MVE" 9438 1.1 mrg { 9439 1.1 mrg rtx ops[3]; 9440 1.1 mrg ops[0] = operands[1]; 9441 1.1 mrg ops[1] = operands[2]; 9442 1.1 mrg ops[2] = operands[3]; 9443 1.1 mrg output_asm_insn ("vstrd.u64\t%q2, [%q0, %1]!",ops); 9444 1.1 mrg return ""; 9445 1.1 mrg } 9446 1.1 mrg [(set_attr "length" "4")]) 9447 1.1 mrg 9448 1.1 mrg ;; 9449 1.1 mrg ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u] 9450 1.1 mrg ;; 9451 1.1 mrg (define_insn "mve_vstrdq_scatter_base_wb_p_<supf>v2di" 9452 1.1 mrg [(set (mem:BLK (scratch)) 9453 1.1 mrg (unspec:BLK 9454 1.1 mrg [(match_operand:V2DI 1 "s_register_operand" "0") 9455 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate" "Ri") 9456 1.1 mrg (match_operand:V2DI 3 "s_register_operand" "w") 9457 1.1.1.2 mrg (match_operand:HI 4 "vpr_register_operand" "Up")] 9458 1.1 mrg VSTRDSBWBQ)) 9459 1.1 mrg (set (match_operand:V2DI 0 "s_register_operand" "=w") 9460 1.1 mrg (unspec:V2DI [(match_dup 1) (match_dup 2)] 9461 1.1 mrg VSTRDSBWBQ)) 9462 1.1 mrg ] 9463 1.1 mrg "TARGET_HAVE_MVE" 9464 1.1 mrg { 9465 1.1 mrg rtx ops[3]; 9466 1.1 mrg ops[0] = operands[1]; 9467 1.1 mrg ops[1] = operands[2]; 9468 1.1 mrg ops[2] = operands[3]; 9469 1.1.1.2 mrg output_asm_insn ("vpst\;vstrdt.u64\t%q2, [%q0, %1]!",ops); 9470 1.1 mrg return ""; 9471 1.1 mrg } 9472 1.1 mrg [(set_attr "length" "8")]) 9473 1.1 mrg 9474 1.1 mrg (define_expand "mve_vldrwq_gather_base_wb_<supf>v4si" 9475 1.1 mrg [(match_operand:V4SI 0 "s_register_operand") 9476 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 9477 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9478 1.1 mrg (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)] 9479 1.1 mrg "TARGET_HAVE_MVE" 9480 1.1 mrg { 9481 1.1 mrg rtx ignore_result = gen_reg_rtx (V4SImode); 9482 1.1 mrg emit_insn ( 9483 1.1 mrg gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (ignore_result, operands[0], 9484 1.1 mrg operands[1], operands[2])); 9485 1.1 mrg DONE; 9486 1.1 mrg }) 9487 1.1 mrg 9488 1.1 mrg (define_expand "mve_vldrwq_gather_base_nowb_<supf>v4si" 9489 1.1 mrg [(match_operand:V4SI 0 "s_register_operand") 9490 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 9491 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9492 1.1 mrg (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)] 9493 1.1 mrg "TARGET_HAVE_MVE" 9494 1.1 mrg { 9495 1.1 mrg rtx ignore_wb = gen_reg_rtx (V4SImode); 9496 1.1 mrg emit_insn ( 9497 1.1 mrg gen_mve_vldrwq_gather_base_wb_<supf>v4si_insn (operands[0], ignore_wb, 9498 1.1 mrg operands[1], operands[2])); 9499 1.1 mrg DONE; 9500 1.1 mrg }) 9501 1.1 mrg 9502 1.1 mrg ;; 9503 1.1 mrg ;; [vldrwq_gather_base_wb_s vldrwq_gather_base_wb_u] 9504 1.1 mrg ;; 9505 1.1 mrg (define_insn "mve_vldrwq_gather_base_wb_<supf>v4si_insn" 9506 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 9507 1.1 mrg (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1") 9508 1.1 mrg (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9509 1.1 mrg (mem:BLK (scratch))] 9510 1.1 mrg VLDRWGBWBQ)) 9511 1.1 mrg (set (match_operand:V4SI 1 "s_register_operand" "=&w") 9512 1.1 mrg (unspec:V4SI [(match_dup 2) (match_dup 3)] 9513 1.1 mrg VLDRWGBWBQ)) 9514 1.1 mrg ] 9515 1.1 mrg "TARGET_HAVE_MVE" 9516 1.1 mrg { 9517 1.1 mrg rtx ops[3]; 9518 1.1 mrg ops[0] = operands[0]; 9519 1.1 mrg ops[1] = operands[2]; 9520 1.1 mrg ops[2] = operands[3]; 9521 1.1 mrg output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops); 9522 1.1 mrg return ""; 9523 1.1 mrg } 9524 1.1 mrg [(set_attr "length" "4")]) 9525 1.1 mrg 9526 1.1 mrg (define_expand "mve_vldrwq_gather_base_wb_z_<supf>v4si" 9527 1.1 mrg [(match_operand:V4SI 0 "s_register_operand") 9528 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 9529 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9530 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand") 9531 1.1 mrg (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)] 9532 1.1 mrg "TARGET_HAVE_MVE" 9533 1.1 mrg { 9534 1.1 mrg rtx ignore_result = gen_reg_rtx (V4SImode); 9535 1.1 mrg emit_insn ( 9536 1.1 mrg gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (ignore_result, operands[0], 9537 1.1 mrg operands[1], operands[2], 9538 1.1 mrg operands[3])); 9539 1.1 mrg DONE; 9540 1.1 mrg }) 9541 1.1 mrg (define_expand "mve_vldrwq_gather_base_nowb_z_<supf>v4si" 9542 1.1 mrg [(match_operand:V4SI 0 "s_register_operand") 9543 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 9544 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9545 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand") 9546 1.1 mrg (unspec:V4SI [(const_int 0)] VLDRWGBWBQ)] 9547 1.1 mrg "TARGET_HAVE_MVE" 9548 1.1 mrg { 9549 1.1 mrg rtx ignore_wb = gen_reg_rtx (V4SImode); 9550 1.1 mrg emit_insn ( 9551 1.1 mrg gen_mve_vldrwq_gather_base_wb_z_<supf>v4si_insn (operands[0], ignore_wb, 9552 1.1 mrg operands[1], operands[2], 9553 1.1 mrg operands[3])); 9554 1.1 mrg DONE; 9555 1.1 mrg }) 9556 1.1 mrg 9557 1.1 mrg ;; 9558 1.1 mrg ;; [vldrwq_gather_base_wb_z_s vldrwq_gather_base_wb_z_u] 9559 1.1 mrg ;; 9560 1.1 mrg (define_insn "mve_vldrwq_gather_base_wb_z_<supf>v4si_insn" 9561 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=&w") 9562 1.1 mrg (unspec:V4SI [(match_operand:V4SI 2 "s_register_operand" "1") 9563 1.1 mrg (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9564 1.1.1.2 mrg (match_operand:V4BI 4 "vpr_register_operand" "Up") 9565 1.1 mrg (mem:BLK (scratch))] 9566 1.1 mrg VLDRWGBWBQ)) 9567 1.1 mrg (set (match_operand:V4SI 1 "s_register_operand" "=&w") 9568 1.1 mrg (unspec:V4SI [(match_dup 2) (match_dup 3)] 9569 1.1 mrg VLDRWGBWBQ)) 9570 1.1 mrg ] 9571 1.1 mrg "TARGET_HAVE_MVE" 9572 1.1 mrg { 9573 1.1 mrg rtx ops[3]; 9574 1.1 mrg ops[0] = operands[0]; 9575 1.1 mrg ops[1] = operands[2]; 9576 1.1 mrg ops[2] = operands[3]; 9577 1.1 mrg output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops); 9578 1.1 mrg return ""; 9579 1.1 mrg } 9580 1.1 mrg [(set_attr "length" "8")]) 9581 1.1 mrg 9582 1.1 mrg (define_expand "mve_vldrwq_gather_base_wb_fv4sf" 9583 1.1 mrg [(match_operand:V4SI 0 "s_register_operand") 9584 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 9585 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9586 1.1 mrg (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)] 9587 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9588 1.1 mrg { 9589 1.1 mrg rtx ignore_result = gen_reg_rtx (V4SFmode); 9590 1.1 mrg emit_insn ( 9591 1.1 mrg gen_mve_vldrwq_gather_base_wb_fv4sf_insn (ignore_result, operands[0], 9592 1.1 mrg operands[1], operands[2])); 9593 1.1 mrg DONE; 9594 1.1 mrg }) 9595 1.1 mrg 9596 1.1 mrg (define_expand "mve_vldrwq_gather_base_nowb_fv4sf" 9597 1.1 mrg [(match_operand:V4SF 0 "s_register_operand") 9598 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 9599 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9600 1.1 mrg (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)] 9601 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9602 1.1 mrg { 9603 1.1 mrg rtx ignore_wb = gen_reg_rtx (V4SImode); 9604 1.1 mrg emit_insn ( 9605 1.1 mrg gen_mve_vldrwq_gather_base_wb_fv4sf_insn (operands[0], ignore_wb, 9606 1.1 mrg operands[1], operands[2])); 9607 1.1 mrg DONE; 9608 1.1 mrg }) 9609 1.1 mrg 9610 1.1 mrg ;; 9611 1.1 mrg ;; [vldrwq_gather_base_wb_f] 9612 1.1 mrg ;; 9613 1.1 mrg (define_insn "mve_vldrwq_gather_base_wb_fv4sf_insn" 9614 1.1 mrg [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 9615 1.1 mrg (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1") 9616 1.1 mrg (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9617 1.1 mrg (mem:BLK (scratch))] 9618 1.1 mrg VLDRWQGBWB_F)) 9619 1.1 mrg (set (match_operand:V4SI 1 "s_register_operand" "=&w") 9620 1.1 mrg (unspec:V4SI [(match_dup 2) (match_dup 3)] 9621 1.1 mrg VLDRWQGBWB_F)) 9622 1.1 mrg ] 9623 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9624 1.1 mrg { 9625 1.1 mrg rtx ops[3]; 9626 1.1 mrg ops[0] = operands[0]; 9627 1.1 mrg ops[1] = operands[2]; 9628 1.1 mrg ops[2] = operands[3]; 9629 1.1 mrg output_asm_insn ("vldrw.u32\t%q0, [%q1, %2]!",ops); 9630 1.1 mrg return ""; 9631 1.1 mrg } 9632 1.1 mrg [(set_attr "length" "4")]) 9633 1.1 mrg 9634 1.1 mrg (define_expand "mve_vldrwq_gather_base_wb_z_fv4sf" 9635 1.1 mrg [(match_operand:V4SI 0 "s_register_operand") 9636 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 9637 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9638 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand") 9639 1.1 mrg (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)] 9640 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9641 1.1 mrg { 9642 1.1 mrg rtx ignore_result = gen_reg_rtx (V4SFmode); 9643 1.1 mrg emit_insn ( 9644 1.1 mrg gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (ignore_result, operands[0], 9645 1.1 mrg operands[1], operands[2], 9646 1.1 mrg operands[3])); 9647 1.1 mrg DONE; 9648 1.1 mrg }) 9649 1.1 mrg 9650 1.1 mrg (define_expand "mve_vldrwq_gather_base_nowb_z_fv4sf" 9651 1.1 mrg [(match_operand:V4SF 0 "s_register_operand") 9652 1.1 mrg (match_operand:V4SI 1 "s_register_operand") 9653 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9654 1.1.1.2 mrg (match_operand:V4BI 3 "vpr_register_operand") 9655 1.1 mrg (unspec:V4SI [(const_int 0)] VLDRWQGBWB_F)] 9656 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9657 1.1 mrg { 9658 1.1 mrg rtx ignore_wb = gen_reg_rtx (V4SImode); 9659 1.1 mrg emit_insn ( 9660 1.1 mrg gen_mve_vldrwq_gather_base_wb_z_fv4sf_insn (operands[0], ignore_wb, 9661 1.1 mrg operands[1], operands[2], 9662 1.1 mrg operands[3])); 9663 1.1 mrg DONE; 9664 1.1 mrg }) 9665 1.1 mrg 9666 1.1 mrg ;; 9667 1.1 mrg ;; [vldrwq_gather_base_wb_z_f] 9668 1.1 mrg ;; 9669 1.1 mrg (define_insn "mve_vldrwq_gather_base_wb_z_fv4sf_insn" 9670 1.1 mrg [(set (match_operand:V4SF 0 "s_register_operand" "=&w") 9671 1.1 mrg (unspec:V4SF [(match_operand:V4SI 2 "s_register_operand" "1") 9672 1.1 mrg (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9673 1.1.1.2 mrg (match_operand:V4BI 4 "vpr_register_operand" "Up") 9674 1.1 mrg (mem:BLK (scratch))] 9675 1.1 mrg VLDRWQGBWB_F)) 9676 1.1 mrg (set (match_operand:V4SI 1 "s_register_operand" "=&w") 9677 1.1 mrg (unspec:V4SI [(match_dup 2) (match_dup 3)] 9678 1.1 mrg VLDRWQGBWB_F)) 9679 1.1 mrg ] 9680 1.1 mrg "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" 9681 1.1 mrg { 9682 1.1 mrg rtx ops[3]; 9683 1.1 mrg ops[0] = operands[0]; 9684 1.1 mrg ops[1] = operands[2]; 9685 1.1 mrg ops[2] = operands[3]; 9686 1.1 mrg output_asm_insn ("vpst\;vldrwt.u32\t%q0, [%q1, %2]!",ops); 9687 1.1 mrg return ""; 9688 1.1 mrg } 9689 1.1 mrg [(set_attr "length" "8")]) 9690 1.1 mrg 9691 1.1 mrg (define_expand "mve_vldrdq_gather_base_wb_<supf>v2di" 9692 1.1 mrg [(match_operand:V2DI 0 "s_register_operand") 9693 1.1 mrg (match_operand:V2DI 1 "s_register_operand") 9694 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9695 1.1 mrg (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)] 9696 1.1 mrg "TARGET_HAVE_MVE" 9697 1.1 mrg { 9698 1.1 mrg rtx ignore_result = gen_reg_rtx (V2DImode); 9699 1.1 mrg emit_insn ( 9700 1.1 mrg gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (ignore_result, operands[0], 9701 1.1 mrg operands[1], operands[2])); 9702 1.1 mrg DONE; 9703 1.1 mrg }) 9704 1.1 mrg 9705 1.1 mrg (define_expand "mve_vldrdq_gather_base_nowb_<supf>v2di" 9706 1.1 mrg [(match_operand:V2DI 0 "s_register_operand") 9707 1.1 mrg (match_operand:V2DI 1 "s_register_operand") 9708 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9709 1.1 mrg (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)] 9710 1.1 mrg "TARGET_HAVE_MVE" 9711 1.1 mrg { 9712 1.1 mrg rtx ignore_wb = gen_reg_rtx (V2DImode); 9713 1.1 mrg emit_insn ( 9714 1.1 mrg gen_mve_vldrdq_gather_base_wb_<supf>v2di_insn (operands[0], ignore_wb, 9715 1.1 mrg operands[1], operands[2])); 9716 1.1 mrg DONE; 9717 1.1 mrg }) 9718 1.1 mrg 9719 1.1 mrg 9720 1.1 mrg ;; 9721 1.1 mrg ;; [vldrdq_gather_base_wb_s vldrdq_gather_base_wb_u] 9722 1.1 mrg ;; 9723 1.1 mrg (define_insn "mve_vldrdq_gather_base_wb_<supf>v2di_insn" 9724 1.1 mrg [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 9725 1.1 mrg (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1") 9726 1.1 mrg (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9727 1.1 mrg (mem:BLK (scratch))] 9728 1.1 mrg VLDRDGBWBQ)) 9729 1.1 mrg (set (match_operand:V2DI 1 "s_register_operand" "=&w") 9730 1.1 mrg (unspec:V2DI [(match_dup 2) (match_dup 3)] 9731 1.1 mrg VLDRDGBWBQ)) 9732 1.1 mrg ] 9733 1.1 mrg "TARGET_HAVE_MVE" 9734 1.1 mrg { 9735 1.1 mrg rtx ops[3]; 9736 1.1 mrg ops[0] = operands[0]; 9737 1.1 mrg ops[1] = operands[2]; 9738 1.1 mrg ops[2] = operands[3]; 9739 1.1 mrg output_asm_insn ("vldrd.64\t%q0, [%q1, %2]!",ops); 9740 1.1 mrg return ""; 9741 1.1 mrg } 9742 1.1 mrg [(set_attr "length" "4")]) 9743 1.1 mrg 9744 1.1 mrg (define_expand "mve_vldrdq_gather_base_wb_z_<supf>v2di" 9745 1.1 mrg [(match_operand:V2DI 0 "s_register_operand") 9746 1.1 mrg (match_operand:V2DI 1 "s_register_operand") 9747 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9748 1.1 mrg (match_operand:HI 3 "vpr_register_operand") 9749 1.1 mrg (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)] 9750 1.1 mrg "TARGET_HAVE_MVE" 9751 1.1 mrg { 9752 1.1 mrg rtx ignore_result = gen_reg_rtx (V2DImode); 9753 1.1 mrg emit_insn ( 9754 1.1 mrg gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (ignore_result, operands[0], 9755 1.1 mrg operands[1], operands[2], 9756 1.1 mrg operands[3])); 9757 1.1 mrg DONE; 9758 1.1 mrg }) 9759 1.1 mrg 9760 1.1 mrg (define_expand "mve_vldrdq_gather_base_nowb_z_<supf>v2di" 9761 1.1 mrg [(match_operand:V2DI 0 "s_register_operand") 9762 1.1 mrg (match_operand:V2DI 1 "s_register_operand") 9763 1.1 mrg (match_operand:SI 2 "mve_vldrd_immediate") 9764 1.1 mrg (match_operand:HI 3 "vpr_register_operand") 9765 1.1 mrg (unspec:V2DI [(const_int 0)] VLDRDGBWBQ)] 9766 1.1 mrg "TARGET_HAVE_MVE" 9767 1.1 mrg { 9768 1.1 mrg rtx ignore_wb = gen_reg_rtx (V2DImode); 9769 1.1 mrg emit_insn ( 9770 1.1 mrg gen_mve_vldrdq_gather_base_wb_z_<supf>v2di_insn (operands[0], ignore_wb, 9771 1.1 mrg operands[1], operands[2], 9772 1.1 mrg operands[3])); 9773 1.1 mrg DONE; 9774 1.1 mrg }) 9775 1.1 mrg 9776 1.1 mrg (define_insn "get_fpscr_nzcvqc" 9777 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=r") 9778 1.1.1.2 mrg (unspec_volatile:SI [(reg:SI VFPCC_REGNUM)] UNSPEC_GET_FPSCR_NZCVQC))] 9779 1.1 mrg "TARGET_HAVE_MVE" 9780 1.1 mrg "vmrs\\t%0, FPSCR_nzcvqc" 9781 1.1 mrg [(set_attr "type" "mve_move")]) 9782 1.1 mrg 9783 1.1 mrg (define_insn "set_fpscr_nzcvqc" 9784 1.1 mrg [(set (reg:SI VFPCC_REGNUM) 9785 1.1 mrg (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")] 9786 1.1 mrg VUNSPEC_SET_FPSCR_NZCVQC))] 9787 1.1 mrg "TARGET_HAVE_MVE" 9788 1.1 mrg "vmsr\\tFPSCR_nzcvqc, %0" 9789 1.1 mrg [(set_attr "type" "mve_move")]) 9790 1.1 mrg 9791 1.1 mrg ;; 9792 1.1 mrg ;; [vldrdq_gather_base_wb_z_s vldrdq_gather_base_wb_z_u] 9793 1.1 mrg ;; 9794 1.1 mrg (define_insn "mve_vldrdq_gather_base_wb_z_<supf>v2di_insn" 9795 1.1 mrg [(set (match_operand:V2DI 0 "s_register_operand" "=&w") 9796 1.1 mrg (unspec:V2DI [(match_operand:V2DI 2 "s_register_operand" "1") 9797 1.1 mrg (match_operand:SI 3 "mve_vldrd_immediate" "Ri") 9798 1.1 mrg (match_operand:HI 4 "vpr_register_operand" "Up") 9799 1.1 mrg (mem:BLK (scratch))] 9800 1.1 mrg VLDRDGBWBQ)) 9801 1.1 mrg (set (match_operand:V2DI 1 "s_register_operand" "=&w") 9802 1.1 mrg (unspec:V2DI [(match_dup 2) (match_dup 3)] 9803 1.1 mrg VLDRDGBWBQ)) 9804 1.1 mrg ] 9805 1.1 mrg "TARGET_HAVE_MVE" 9806 1.1 mrg { 9807 1.1 mrg rtx ops[3]; 9808 1.1 mrg ops[0] = operands[0]; 9809 1.1 mrg ops[1] = operands[2]; 9810 1.1 mrg ops[2] = operands[3]; 9811 1.1 mrg output_asm_insn ("vpst\;vldrdt.u64\t%q0, [%q1, %2]!",ops); 9812 1.1 mrg return ""; 9813 1.1 mrg } 9814 1.1 mrg [(set_attr "length" "8")]) 9815 1.1 mrg ;; 9816 1.1 mrg ;; [vadciq_m_s, vadciq_m_u]) 9817 1.1 mrg ;; 9818 1.1 mrg (define_insn "mve_vadciq_m_<supf>v4si" 9819 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9820 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0") 9821 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 9822 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w") 9823 1.1.1.2 mrg (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9824 1.1 mrg VADCIQ_M)) 9825 1.1 mrg (set (reg:SI VFPCC_REGNUM) 9826 1.1 mrg (unspec:SI [(const_int 0)] 9827 1.1 mrg VADCIQ_M)) 9828 1.1 mrg ] 9829 1.1 mrg "TARGET_HAVE_MVE" 9830 1.1 mrg "vpst\;vadcit.i32\t%q0, %q2, %q3" 9831 1.1 mrg [(set_attr "type" "mve_move") 9832 1.1 mrg (set_attr "length" "8")]) 9833 1.1 mrg 9834 1.1 mrg ;; 9835 1.1 mrg ;; [vadciq_u, vadciq_s]) 9836 1.1 mrg ;; 9837 1.1 mrg (define_insn "mve_vadciq_<supf>v4si" 9838 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9839 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9840 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 9841 1.1 mrg VADCIQ)) 9842 1.1 mrg (set (reg:SI VFPCC_REGNUM) 9843 1.1 mrg (unspec:SI [(const_int 0)] 9844 1.1 mrg VADCIQ)) 9845 1.1 mrg ] 9846 1.1 mrg "TARGET_HAVE_MVE" 9847 1.1 mrg "vadci.i32\t%q0, %q1, %q2" 9848 1.1 mrg [(set_attr "type" "mve_move") 9849 1.1 mrg (set_attr "length" "4")]) 9850 1.1 mrg 9851 1.1 mrg ;; 9852 1.1 mrg ;; [vadcq_m_s, vadcq_m_u]) 9853 1.1 mrg ;; 9854 1.1 mrg (define_insn "mve_vadcq_m_<supf>v4si" 9855 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9856 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "0") 9857 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 9858 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w") 9859 1.1.1.2 mrg (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9860 1.1 mrg VADCQ_M)) 9861 1.1 mrg (set (reg:SI VFPCC_REGNUM) 9862 1.1 mrg (unspec:SI [(reg:SI VFPCC_REGNUM)] 9863 1.1 mrg VADCQ_M)) 9864 1.1 mrg ] 9865 1.1 mrg "TARGET_HAVE_MVE" 9866 1.1 mrg "vpst\;vadct.i32\t%q0, %q2, %q3" 9867 1.1 mrg [(set_attr "type" "mve_move") 9868 1.1 mrg (set_attr "length" "8")]) 9869 1.1 mrg 9870 1.1 mrg ;; 9871 1.1 mrg ;; [vadcq_u, vadcq_s]) 9872 1.1 mrg ;; 9873 1.1 mrg (define_insn "mve_vadcq_<supf>v4si" 9874 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9875 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9876 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 9877 1.1 mrg VADCQ)) 9878 1.1 mrg (set (reg:SI VFPCC_REGNUM) 9879 1.1 mrg (unspec:SI [(reg:SI VFPCC_REGNUM)] 9880 1.1 mrg VADCQ)) 9881 1.1 mrg ] 9882 1.1 mrg "TARGET_HAVE_MVE" 9883 1.1 mrg "vadc.i32\t%q0, %q1, %q2" 9884 1.1 mrg [(set_attr "type" "mve_move") 9885 1.1 mrg (set_attr "length" "4") 9886 1.1 mrg (set_attr "conds" "set")]) 9887 1.1 mrg 9888 1.1 mrg ;; 9889 1.1 mrg ;; [vsbciq_m_u, vsbciq_m_s]) 9890 1.1 mrg ;; 9891 1.1 mrg (define_insn "mve_vsbciq_m_<supf>v4si" 9892 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9893 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9894 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 9895 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w") 9896 1.1.1.2 mrg (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9897 1.1 mrg VSBCIQ_M)) 9898 1.1 mrg (set (reg:SI VFPCC_REGNUM) 9899 1.1 mrg (unspec:SI [(const_int 0)] 9900 1.1 mrg VSBCIQ_M)) 9901 1.1 mrg ] 9902 1.1 mrg "TARGET_HAVE_MVE" 9903 1.1 mrg "vpst\;vsbcit.i32\t%q0, %q2, %q3" 9904 1.1 mrg [(set_attr "type" "mve_move") 9905 1.1 mrg (set_attr "length" "8")]) 9906 1.1 mrg 9907 1.1 mrg ;; 9908 1.1 mrg ;; [vsbciq_s, vsbciq_u]) 9909 1.1 mrg ;; 9910 1.1 mrg (define_insn "mve_vsbciq_<supf>v4si" 9911 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9912 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9913 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 9914 1.1 mrg VSBCIQ)) 9915 1.1 mrg (set (reg:SI VFPCC_REGNUM) 9916 1.1 mrg (unspec:SI [(const_int 0)] 9917 1.1 mrg VSBCIQ)) 9918 1.1 mrg ] 9919 1.1 mrg "TARGET_HAVE_MVE" 9920 1.1 mrg "vsbci.i32\t%q0, %q1, %q2" 9921 1.1 mrg [(set_attr "type" "mve_move") 9922 1.1 mrg (set_attr "length" "4")]) 9923 1.1 mrg 9924 1.1 mrg ;; 9925 1.1 mrg ;; [vsbcq_m_u, vsbcq_m_s]) 9926 1.1 mrg ;; 9927 1.1 mrg (define_insn "mve_vsbcq_m_<supf>v4si" 9928 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9929 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9930 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w") 9931 1.1 mrg (match_operand:V4SI 3 "s_register_operand" "w") 9932 1.1.1.2 mrg (match_operand:V4BI 4 "vpr_register_operand" "Up")] 9933 1.1 mrg VSBCQ_M)) 9934 1.1 mrg (set (reg:SI VFPCC_REGNUM) 9935 1.1 mrg (unspec:SI [(reg:SI VFPCC_REGNUM)] 9936 1.1 mrg VSBCQ_M)) 9937 1.1 mrg ] 9938 1.1 mrg "TARGET_HAVE_MVE" 9939 1.1 mrg "vpst\;vsbct.i32\t%q0, %q2, %q3" 9940 1.1 mrg [(set_attr "type" "mve_move") 9941 1.1 mrg (set_attr "length" "8")]) 9942 1.1 mrg 9943 1.1 mrg ;; 9944 1.1 mrg ;; [vsbcq_s, vsbcq_u]) 9945 1.1 mrg ;; 9946 1.1 mrg (define_insn "mve_vsbcq_<supf>v4si" 9947 1.1 mrg [(set (match_operand:V4SI 0 "s_register_operand" "=w") 9948 1.1 mrg (unspec:V4SI [(match_operand:V4SI 1 "s_register_operand" "w") 9949 1.1 mrg (match_operand:V4SI 2 "s_register_operand" "w")] 9950 1.1 mrg VSBCQ)) 9951 1.1 mrg (set (reg:SI VFPCC_REGNUM) 9952 1.1 mrg (unspec:SI [(reg:SI VFPCC_REGNUM)] 9953 1.1 mrg VSBCQ)) 9954 1.1 mrg ] 9955 1.1 mrg "TARGET_HAVE_MVE" 9956 1.1 mrg "vsbc.i32\t%q0, %q1, %q2" 9957 1.1 mrg [(set_attr "type" "mve_move") 9958 1.1 mrg (set_attr "length" "4")]) 9959 1.1 mrg 9960 1.1 mrg ;; 9961 1.1 mrg ;; [vst2q]) 9962 1.1 mrg ;; 9963 1.1 mrg (define_insn "mve_vst2q<mode>" 9964 1.1.1.2 mrg [(set (match_operand:OI 0 "mve_struct_operand" "=Ug") 9965 1.1 mrg (unspec:OI [(match_operand:OI 1 "s_register_operand" "w") 9966 1.1 mrg (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 9967 1.1 mrg VST2Q)) 9968 1.1 mrg ] 9969 1.1 mrg "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 9970 1.1 mrg || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 9971 1.1 mrg { 9972 1.1 mrg rtx ops[4]; 9973 1.1 mrg int regno = REGNO (operands[1]); 9974 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 9975 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno + 4); 9976 1.1 mrg rtx reg = operands[0]; 9977 1.1 mrg while (reg && !REG_P (reg)) 9978 1.1 mrg reg = XEXP (reg, 0); 9979 1.1 mrg gcc_assert (REG_P (reg)); 9980 1.1 mrg ops[2] = reg; 9981 1.1 mrg ops[3] = operands[0]; 9982 1.1 mrg output_asm_insn ("vst20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t" 9983 1.1 mrg "vst21.<V_sz_elem>\t{%q0, %q1}, %3", ops); 9984 1.1 mrg return ""; 9985 1.1 mrg } 9986 1.1 mrg [(set_attr "length" "8")]) 9987 1.1 mrg 9988 1.1 mrg ;; 9989 1.1 mrg ;; [vld2q]) 9990 1.1 mrg ;; 9991 1.1 mrg (define_insn "mve_vld2q<mode>" 9992 1.1 mrg [(set (match_operand:OI 0 "s_register_operand" "=w") 9993 1.1.1.2 mrg (unspec:OI [(match_operand:OI 1 "mve_struct_operand" "Ug") 9994 1.1 mrg (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 9995 1.1 mrg VLD2Q)) 9996 1.1 mrg ] 9997 1.1 mrg "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 9998 1.1 mrg || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 9999 1.1 mrg { 10000 1.1 mrg rtx ops[4]; 10001 1.1 mrg int regno = REGNO (operands[0]); 10002 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 10003 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno + 4); 10004 1.1 mrg rtx reg = operands[1]; 10005 1.1 mrg while (reg && !REG_P (reg)) 10006 1.1 mrg reg = XEXP (reg, 0); 10007 1.1 mrg gcc_assert (REG_P (reg)); 10008 1.1 mrg ops[2] = reg; 10009 1.1 mrg ops[3] = operands[1]; 10010 1.1 mrg output_asm_insn ("vld20.<V_sz_elem>\t{%q0, %q1}, [%2]\n\t" 10011 1.1 mrg "vld21.<V_sz_elem>\t{%q0, %q1}, %3", ops); 10012 1.1 mrg return ""; 10013 1.1 mrg } 10014 1.1 mrg [(set_attr "length" "8")]) 10015 1.1 mrg 10016 1.1 mrg ;; 10017 1.1 mrg ;; [vld4q]) 10018 1.1 mrg ;; 10019 1.1 mrg (define_insn "mve_vld4q<mode>" 10020 1.1 mrg [(set (match_operand:XI 0 "s_register_operand" "=w") 10021 1.1.1.2 mrg (unspec:XI [(match_operand:XI 1 "mve_struct_operand" "Ug") 10022 1.1 mrg (unspec:MVE_VLD_ST [(const_int 0)] UNSPEC_VSTRUCTDUMMY)] 10023 1.1 mrg VLD4Q)) 10024 1.1 mrg ] 10025 1.1 mrg "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10026 1.1 mrg || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 10027 1.1 mrg { 10028 1.1 mrg rtx ops[6]; 10029 1.1 mrg int regno = REGNO (operands[0]); 10030 1.1 mrg ops[0] = gen_rtx_REG (TImode, regno); 10031 1.1 mrg ops[1] = gen_rtx_REG (TImode, regno+4); 10032 1.1 mrg ops[2] = gen_rtx_REG (TImode, regno+8); 10033 1.1 mrg ops[3] = gen_rtx_REG (TImode, regno + 12); 10034 1.1 mrg rtx reg = operands[1]; 10035 1.1 mrg while (reg && !REG_P (reg)) 10036 1.1 mrg reg = XEXP (reg, 0); 10037 1.1 mrg gcc_assert (REG_P (reg)); 10038 1.1 mrg ops[4] = reg; 10039 1.1 mrg ops[5] = operands[1]; 10040 1.1 mrg output_asm_insn ("vld40.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 10041 1.1 mrg "vld41.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 10042 1.1 mrg "vld42.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, [%4]\n\t" 10043 1.1 mrg "vld43.<V_sz_elem>\t{%q0, %q1, %q2, %q3}, %5", ops); 10044 1.1 mrg return ""; 10045 1.1 mrg } 10046 1.1 mrg [(set_attr "length" "16")]) 10047 1.1 mrg ;; 10048 1.1 mrg ;; [vgetq_lane_u, vgetq_lane_s, vgetq_lane_f]) 10049 1.1 mrg ;; 10050 1.1 mrg (define_insn "mve_vec_extract<mode><V_elem_l>" 10051 1.1 mrg [(set (match_operand:<V_elem> 0 "nonimmediate_operand" "=r") 10052 1.1 mrg (vec_select:<V_elem> 10053 1.1 mrg (match_operand:MVE_VLD_ST 1 "s_register_operand" "w") 10054 1.1 mrg (parallel [(match_operand:SI 2 "immediate_operand" "i")])))] 10055 1.1 mrg "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10056 1.1 mrg || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 10057 1.1 mrg { 10058 1.1 mrg if (BYTES_BIG_ENDIAN) 10059 1.1 mrg { 10060 1.1 mrg int elt = INTVAL (operands[2]); 10061 1.1 mrg elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt; 10062 1.1 mrg operands[2] = GEN_INT (elt); 10063 1.1 mrg } 10064 1.1 mrg return "vmov.<V_extr_elem>\t%0, %q1[%c2]"; 10065 1.1 mrg } 10066 1.1 mrg [(set_attr "type" "mve_move")]) 10067 1.1 mrg 10068 1.1 mrg (define_insn "mve_vec_extractv2didi" 10069 1.1 mrg [(set (match_operand:DI 0 "nonimmediate_operand" "=r") 10070 1.1 mrg (vec_select:DI 10071 1.1 mrg (match_operand:V2DI 1 "s_register_operand" "w") 10072 1.1 mrg (parallel [(match_operand:SI 2 "immediate_operand" "i")])))] 10073 1.1 mrg "TARGET_HAVE_MVE" 10074 1.1 mrg { 10075 1.1 mrg int elt = INTVAL (operands[2]); 10076 1.1 mrg if (BYTES_BIG_ENDIAN) 10077 1.1 mrg elt = 1 - elt; 10078 1.1 mrg 10079 1.1 mrg if (elt == 0) 10080 1.1 mrg return "vmov\t%Q0, %R0, %e1"; 10081 1.1 mrg else 10082 1.1 mrg return "vmov\t%Q0, %R0, %f1"; 10083 1.1 mrg } 10084 1.1 mrg [(set_attr "type" "mve_move")]) 10085 1.1 mrg 10086 1.1 mrg (define_insn "*mve_vec_extract_sext_internal<mode>" 10087 1.1 mrg [(set (match_operand:SI 0 "s_register_operand" "=r") 10088 1.1 mrg (sign_extend:SI 10089 1.1 mrg (vec_select:<V_elem> 10090 1.1 mrg (match_operand:MVE_2 1 "s_register_operand" "w") 10091 1.1 mrg (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))] 10092 1.1 mrg "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10093 1.1 mrg || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 10094 1.1 mrg { 10095 1.1 mrg if (BYTES_BIG_ENDIAN) 10096 1.1 mrg { 10097 1.1 mrg int elt = INTVAL (operands[2]); 10098 1.1 mrg elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt; 10099 1.1 mrg operands[2] = GEN_INT (elt); 10100 1.1 mrg } 10101 1.1 mrg return "vmov.s<V_sz_elem>\t%0, %q1[%c2]"; 10102 1.1 mrg } 10103 1.1 mrg [(set_attr "type" "mve_move")]) 10104 1.1 mrg 10105 1.1 mrg (define_insn "*mve_vec_extract_zext_internal<mode>" 10106 1.1 mrg [(set (match_operand:SI 0 "s_register_operand" "=r") 10107 1.1 mrg (zero_extend:SI 10108 1.1 mrg (vec_select:<V_elem> 10109 1.1 mrg (match_operand:MVE_2 1 "s_register_operand" "w") 10110 1.1 mrg (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))] 10111 1.1 mrg "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10112 1.1 mrg || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 10113 1.1 mrg { 10114 1.1 mrg if (BYTES_BIG_ENDIAN) 10115 1.1 mrg { 10116 1.1 mrg int elt = INTVAL (operands[2]); 10117 1.1 mrg elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt; 10118 1.1 mrg operands[2] = GEN_INT (elt); 10119 1.1 mrg } 10120 1.1 mrg return "vmov.u<V_sz_elem>\t%0, %q1[%c2]"; 10121 1.1 mrg } 10122 1.1 mrg [(set_attr "type" "mve_move")]) 10123 1.1 mrg 10124 1.1 mrg ;; 10125 1.1 mrg ;; [vsetq_lane_u, vsetq_lane_s, vsetq_lane_f]) 10126 1.1 mrg ;; 10127 1.1 mrg (define_insn "mve_vec_set<mode>_internal" 10128 1.1 mrg [(set (match_operand:VQ2 0 "s_register_operand" "=w") 10129 1.1 mrg (vec_merge:VQ2 10130 1.1 mrg (vec_duplicate:VQ2 10131 1.1 mrg (match_operand:<V_elem> 1 "nonimmediate_operand" "r")) 10132 1.1 mrg (match_operand:VQ2 3 "s_register_operand" "0") 10133 1.1 mrg (match_operand:SI 2 "immediate_operand" "i")))] 10134 1.1 mrg "(TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10135 1.1 mrg || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))" 10136 1.1 mrg { 10137 1.1 mrg int elt = ffs ((int) INTVAL (operands[2])) - 1; 10138 1.1 mrg if (BYTES_BIG_ENDIAN) 10139 1.1 mrg elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt; 10140 1.1 mrg operands[2] = GEN_INT (elt); 10141 1.1 mrg 10142 1.1 mrg return "vmov.<V_sz_elem>\t%q0[%c2], %1"; 10143 1.1 mrg } 10144 1.1 mrg [(set_attr "type" "mve_move")]) 10145 1.1 mrg 10146 1.1 mrg (define_insn "mve_vec_setv2di_internal" 10147 1.1 mrg [(set (match_operand:V2DI 0 "s_register_operand" "=w") 10148 1.1 mrg (vec_merge:V2DI 10149 1.1 mrg (vec_duplicate:V2DI 10150 1.1 mrg (match_operand:DI 1 "nonimmediate_operand" "r")) 10151 1.1 mrg (match_operand:V2DI 3 "s_register_operand" "0") 10152 1.1 mrg (match_operand:SI 2 "immediate_operand" "i")))] 10153 1.1 mrg "TARGET_HAVE_MVE" 10154 1.1 mrg { 10155 1.1 mrg int elt = ffs ((int) INTVAL (operands[2])) - 1; 10156 1.1 mrg if (BYTES_BIG_ENDIAN) 10157 1.1 mrg elt = 1 - elt; 10158 1.1 mrg 10159 1.1 mrg if (elt == 0) 10160 1.1 mrg return "vmov\t%e0, %Q1, %R1"; 10161 1.1 mrg else 10162 1.1.1.2 mrg return "vmov\t%f0, %Q1, %R1"; 10163 1.1 mrg } 10164 1.1 mrg [(set_attr "type" "mve_move")]) 10165 1.1 mrg 10166 1.1 mrg ;; 10167 1.1 mrg ;; [uqrshll_di] 10168 1.1 mrg ;; 10169 1.1 mrg (define_insn "mve_uqrshll_sat<supf>_di" 10170 1.1 mrg [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10171 1.1 mrg (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0") 10172 1.1 mrg (match_operand:SI 2 "register_operand" "r")] 10173 1.1 mrg UQRSHLLQ))] 10174 1.1 mrg "TARGET_HAVE_MVE" 10175 1.1 mrg "uqrshll%?\\t%Q1, %R1, #<supf>, %2" 10176 1.1 mrg [(set_attr "predicable" "yes")]) 10177 1.1 mrg 10178 1.1 mrg ;; 10179 1.1 mrg ;; [sqrshrl_di] 10180 1.1 mrg ;; 10181 1.1 mrg (define_insn "mve_sqrshrl_sat<supf>_di" 10182 1.1 mrg [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10183 1.1 mrg (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0") 10184 1.1 mrg (match_operand:SI 2 "register_operand" "r")] 10185 1.1 mrg SQRSHRLQ))] 10186 1.1 mrg "TARGET_HAVE_MVE" 10187 1.1 mrg "sqrshrl%?\\t%Q1, %R1, #<supf>, %2" 10188 1.1 mrg [(set_attr "predicable" "yes")]) 10189 1.1 mrg 10190 1.1 mrg ;; 10191 1.1 mrg ;; [uqrshl_si] 10192 1.1 mrg ;; 10193 1.1 mrg (define_insn "mve_uqrshl_si" 10194 1.1 mrg [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10195 1.1 mrg (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0") 10196 1.1 mrg (match_operand:SI 2 "register_operand" "r")] 10197 1.1 mrg UQRSHL))] 10198 1.1 mrg "TARGET_HAVE_MVE" 10199 1.1 mrg "uqrshl%?\\t%1, %2" 10200 1.1 mrg [(set_attr "predicable" "yes")]) 10201 1.1 mrg 10202 1.1 mrg ;; 10203 1.1 mrg ;; [sqrshr_si] 10204 1.1 mrg ;; 10205 1.1 mrg (define_insn "mve_sqrshr_si" 10206 1.1 mrg [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10207 1.1 mrg (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0") 10208 1.1 mrg (match_operand:SI 2 "register_operand" "r")] 10209 1.1 mrg SQRSHR))] 10210 1.1 mrg "TARGET_HAVE_MVE" 10211 1.1 mrg "sqrshr%?\\t%1, %2" 10212 1.1 mrg [(set_attr "predicable" "yes")]) 10213 1.1 mrg 10214 1.1 mrg ;; 10215 1.1 mrg ;; [uqshll_di] 10216 1.1 mrg ;; 10217 1.1 mrg (define_insn "mve_uqshll_di" 10218 1.1 mrg [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10219 1.1 mrg (us_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0") 10220 1.1 mrg (match_operand:SI 2 "immediate_operand" "Pg")))] 10221 1.1 mrg "TARGET_HAVE_MVE" 10222 1.1 mrg "uqshll%?\\t%Q1, %R1, %2" 10223 1.1 mrg [(set_attr "predicable" "yes")]) 10224 1.1 mrg 10225 1.1 mrg ;; 10226 1.1 mrg ;; [urshrl_di] 10227 1.1 mrg ;; 10228 1.1 mrg (define_insn "mve_urshrl_di" 10229 1.1 mrg [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10230 1.1 mrg (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0") 10231 1.1 mrg (match_operand:SI 2 "immediate_operand" "Pg")] 10232 1.1 mrg URSHRL))] 10233 1.1 mrg "TARGET_HAVE_MVE" 10234 1.1 mrg "urshrl%?\\t%Q1, %R1, %2" 10235 1.1 mrg [(set_attr "predicable" "yes")]) 10236 1.1 mrg 10237 1.1 mrg ;; 10238 1.1 mrg ;; [uqshl_si] 10239 1.1 mrg ;; 10240 1.1 mrg (define_insn "mve_uqshl_si" 10241 1.1 mrg [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10242 1.1 mrg (us_ashift:SI (match_operand:SI 1 "arm_general_register_operand" "0") 10243 1.1 mrg (match_operand:SI 2 "immediate_operand" "Pg")))] 10244 1.1 mrg "TARGET_HAVE_MVE" 10245 1.1 mrg "uqshl%?\\t%1, %2" 10246 1.1 mrg [(set_attr "predicable" "yes")]) 10247 1.1 mrg 10248 1.1 mrg ;; 10249 1.1 mrg ;; [urshr_si] 10250 1.1 mrg ;; 10251 1.1 mrg (define_insn "mve_urshr_si" 10252 1.1 mrg [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10253 1.1 mrg (unspec:SI [(match_operand:SI 1 "arm_general_register_operand" "0") 10254 1.1 mrg (match_operand:SI 2 "immediate_operand" "Pg")] 10255 1.1 mrg URSHR))] 10256 1.1 mrg "TARGET_HAVE_MVE" 10257 1.1 mrg "urshr%?\\t%1, %2" 10258 1.1 mrg [(set_attr "predicable" "yes")]) 10259 1.1 mrg 10260 1.1 mrg ;; 10261 1.1 mrg ;; [sqshl_si] 10262 1.1 mrg ;; 10263 1.1 mrg (define_insn "mve_sqshl_si" 10264 1.1 mrg [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10265 1.1 mrg (ss_ashift:SI (match_operand:DI 1 "arm_general_register_operand" "0") 10266 1.1 mrg (match_operand:SI 2 "immediate_operand" "Pg")))] 10267 1.1 mrg "TARGET_HAVE_MVE" 10268 1.1 mrg "sqshl%?\\t%1, %2" 10269 1.1 mrg [(set_attr "predicable" "yes")]) 10270 1.1 mrg 10271 1.1 mrg ;; 10272 1.1 mrg ;; [srshr_si] 10273 1.1 mrg ;; 10274 1.1 mrg (define_insn "mve_srshr_si" 10275 1.1 mrg [(set (match_operand:SI 0 "arm_general_register_operand" "=r") 10276 1.1 mrg (unspec:SI [(match_operand:DI 1 "arm_general_register_operand" "0") 10277 1.1 mrg (match_operand:SI 2 "immediate_operand" "Pg")] 10278 1.1 mrg SRSHR))] 10279 1.1 mrg "TARGET_HAVE_MVE" 10280 1.1 mrg "srshr%?\\t%1, %2" 10281 1.1 mrg [(set_attr "predicable" "yes")]) 10282 1.1 mrg 10283 1.1 mrg ;; 10284 1.1 mrg ;; [srshrl_di] 10285 1.1 mrg ;; 10286 1.1 mrg (define_insn "mve_srshrl_di" 10287 1.1 mrg [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10288 1.1 mrg (unspec:DI [(match_operand:DI 1 "arm_low_register_operand" "0") 10289 1.1 mrg (match_operand:SI 2 "immediate_operand" "Pg")] 10290 1.1 mrg SRSHRL))] 10291 1.1 mrg "TARGET_HAVE_MVE" 10292 1.1 mrg "srshrl%?\\t%Q1, %R1, %2" 10293 1.1 mrg [(set_attr "predicable" "yes")]) 10294 1.1 mrg 10295 1.1 mrg ;; 10296 1.1 mrg ;; [sqshll_di] 10297 1.1 mrg ;; 10298 1.1 mrg (define_insn "mve_sqshll_di" 10299 1.1 mrg [(set (match_operand:DI 0 "arm_low_register_operand" "=l") 10300 1.1 mrg (ss_ashift:DI (match_operand:DI 1 "arm_low_register_operand" "0") 10301 1.1 mrg (match_operand:SI 2 "immediate_operand" "Pg")))] 10302 1.1 mrg "TARGET_HAVE_MVE" 10303 1.1 mrg "sqshll%?\\t%Q1, %R1, %2" 10304 1.1 mrg [(set_attr "predicable" "yes")]) 10305 1.1 mrg 10306 1.1 mrg ;; 10307 1.1 mrg ;; [vshlcq_m_u vshlcq_m_s] 10308 1.1 mrg ;; 10309 1.1 mrg (define_expand "mve_vshlcq_m_vec_<supf><mode>" 10310 1.1 mrg [(match_operand:MVE_2 0 "s_register_operand") 10311 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 10312 1.1 mrg (match_operand:SI 2 "s_register_operand") 10313 1.1 mrg (match_operand:SI 3 "mve_imm_32") 10314 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand") 10315 1.1 mrg (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)] 10316 1.1 mrg "TARGET_HAVE_MVE" 10317 1.1 mrg { 10318 1.1 mrg rtx ignore_wb = gen_reg_rtx (SImode); 10319 1.1 mrg emit_insn (gen_mve_vshlcq_m_<supf><mode> (operands[0], ignore_wb, operands[1], 10320 1.1 mrg operands[2], operands[3], 10321 1.1 mrg operands[4])); 10322 1.1 mrg DONE; 10323 1.1 mrg }) 10324 1.1 mrg 10325 1.1 mrg (define_expand "mve_vshlcq_m_carry_<supf><mode>" 10326 1.1 mrg [(match_operand:SI 0 "s_register_operand") 10327 1.1 mrg (match_operand:MVE_2 1 "s_register_operand") 10328 1.1 mrg (match_operand:SI 2 "s_register_operand") 10329 1.1 mrg (match_operand:SI 3 "mve_imm_32") 10330 1.1.1.2 mrg (match_operand:<MVE_VPRED> 4 "vpr_register_operand") 10331 1.1 mrg (unspec:MVE_2 [(const_int 0)] VSHLCQ_M)] 10332 1.1 mrg "TARGET_HAVE_MVE" 10333 1.1 mrg { 10334 1.1 mrg rtx ignore_vec = gen_reg_rtx (<MODE>mode); 10335 1.1 mrg emit_insn (gen_mve_vshlcq_m_<supf><mode> (ignore_vec, operands[0], 10336 1.1 mrg operands[1], operands[2], 10337 1.1 mrg operands[3], operands[4])); 10338 1.1 mrg DONE; 10339 1.1 mrg }) 10340 1.1 mrg 10341 1.1 mrg (define_insn "mve_vshlcq_m_<supf><mode>" 10342 1.1 mrg [(set (match_operand:MVE_2 0 "s_register_operand" "=w") 10343 1.1 mrg (unspec:MVE_2 [(match_operand:MVE_2 2 "s_register_operand" "0") 10344 1.1 mrg (match_operand:SI 3 "s_register_operand" "1") 10345 1.1 mrg (match_operand:SI 4 "mve_imm_32" "Rf") 10346 1.1.1.2 mrg (match_operand:<MVE_VPRED> 5 "vpr_register_operand" "Up")] 10347 1.1 mrg VSHLCQ_M)) 10348 1.1 mrg (set (match_operand:SI 1 "s_register_operand" "=r") 10349 1.1 mrg (unspec:SI [(match_dup 2) 10350 1.1 mrg (match_dup 3) 10351 1.1 mrg (match_dup 4) 10352 1.1 mrg (match_dup 5)] 10353 1.1 mrg VSHLCQ_M)) 10354 1.1 mrg ] 10355 1.1 mrg "TARGET_HAVE_MVE" 10356 1.1 mrg "vpst\;vshlct\t%q0, %1, %4" 10357 1.1 mrg [(set_attr "type" "mve_move") 10358 1.1 mrg (set_attr "length" "8")]) 10359 1.1 mrg 10360 1.1 mrg ;; CDE instructions on MVE registers. 10361 1.1 mrg 10362 1.1 mrg (define_insn "arm_vcx1qv16qi" 10363 1.1 mrg [(set (match_operand:V16QI 0 "register_operand" "=t") 10364 1.1 mrg (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10365 1.1 mrg (match_operand:SI 2 "const_int_mve_cde1_operand" "i")] 10366 1.1 mrg UNSPEC_VCDE))] 10367 1.1 mrg "TARGET_CDE && TARGET_HAVE_MVE" 10368 1.1 mrg "vcx1\\tp%c1, %q0, #%c2" 10369 1.1 mrg [(set_attr "type" "coproc")] 10370 1.1 mrg ) 10371 1.1 mrg 10372 1.1 mrg (define_insn "arm_vcx1qav16qi" 10373 1.1 mrg [(set (match_operand:V16QI 0 "register_operand" "=t") 10374 1.1 mrg (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10375 1.1 mrg (match_operand:V16QI 2 "register_operand" "0") 10376 1.1 mrg (match_operand:SI 3 "const_int_mve_cde1_operand" "i")] 10377 1.1 mrg UNSPEC_VCDEA))] 10378 1.1 mrg "TARGET_CDE && TARGET_HAVE_MVE" 10379 1.1 mrg "vcx1a\\tp%c1, %q0, #%c3" 10380 1.1 mrg [(set_attr "type" "coproc")] 10381 1.1 mrg ) 10382 1.1 mrg 10383 1.1 mrg (define_insn "arm_vcx2qv16qi" 10384 1.1 mrg [(set (match_operand:V16QI 0 "register_operand" "=t") 10385 1.1 mrg (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10386 1.1 mrg (match_operand:V16QI 2 "register_operand" "t") 10387 1.1 mrg (match_operand:SI 3 "const_int_mve_cde2_operand" "i")] 10388 1.1 mrg UNSPEC_VCDE))] 10389 1.1 mrg "TARGET_CDE && TARGET_HAVE_MVE" 10390 1.1 mrg "vcx2\\tp%c1, %q0, %q2, #%c3" 10391 1.1 mrg [(set_attr "type" "coproc")] 10392 1.1 mrg ) 10393 1.1 mrg 10394 1.1 mrg (define_insn "arm_vcx2qav16qi" 10395 1.1 mrg [(set (match_operand:V16QI 0 "register_operand" "=t") 10396 1.1 mrg (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10397 1.1 mrg (match_operand:V16QI 2 "register_operand" "0") 10398 1.1 mrg (match_operand:V16QI 3 "register_operand" "t") 10399 1.1 mrg (match_operand:SI 4 "const_int_mve_cde2_operand" "i")] 10400 1.1 mrg UNSPEC_VCDEA))] 10401 1.1 mrg "TARGET_CDE && TARGET_HAVE_MVE" 10402 1.1 mrg "vcx2a\\tp%c1, %q0, %q3, #%c4" 10403 1.1 mrg [(set_attr "type" "coproc")] 10404 1.1 mrg ) 10405 1.1 mrg 10406 1.1 mrg (define_insn "arm_vcx3qv16qi" 10407 1.1 mrg [(set (match_operand:V16QI 0 "register_operand" "=t") 10408 1.1 mrg (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10409 1.1 mrg (match_operand:V16QI 2 "register_operand" "t") 10410 1.1 mrg (match_operand:V16QI 3 "register_operand" "t") 10411 1.1 mrg (match_operand:SI 4 "const_int_mve_cde3_operand" "i")] 10412 1.1 mrg UNSPEC_VCDE))] 10413 1.1 mrg "TARGET_CDE && TARGET_HAVE_MVE" 10414 1.1 mrg "vcx3\\tp%c1, %q0, %q2, %q3, #%c4" 10415 1.1 mrg [(set_attr "type" "coproc")] 10416 1.1 mrg ) 10417 1.1 mrg 10418 1.1 mrg (define_insn "arm_vcx3qav16qi" 10419 1.1 mrg [(set (match_operand:V16QI 0 "register_operand" "=t") 10420 1.1 mrg (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10421 1.1 mrg (match_operand:V16QI 2 "register_operand" "0") 10422 1.1 mrg (match_operand:V16QI 3 "register_operand" "t") 10423 1.1 mrg (match_operand:V16QI 4 "register_operand" "t") 10424 1.1 mrg (match_operand:SI 5 "const_int_mve_cde3_operand" "i")] 10425 1.1 mrg UNSPEC_VCDEA))] 10426 1.1 mrg "TARGET_CDE && TARGET_HAVE_MVE" 10427 1.1 mrg "vcx3a\\tp%c1, %q0, %q3, %q4, #%c5" 10428 1.1 mrg [(set_attr "type" "coproc")] 10429 1.1 mrg ) 10430 1.1 mrg 10431 1.1 mrg (define_insn "arm_vcx1q<a>_p_v16qi" 10432 1.1 mrg [(set (match_operand:V16QI 0 "register_operand" "=t") 10433 1.1 mrg (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10434 1.1 mrg (match_operand:V16QI 2 "register_operand" "0") 10435 1.1 mrg (match_operand:SI 3 "const_int_mve_cde1_operand" "i") 10436 1.1.1.2 mrg (match_operand:V16BI 4 "vpr_register_operand" "Up")] 10437 1.1 mrg CDE_VCX))] 10438 1.1 mrg "TARGET_CDE && TARGET_HAVE_MVE" 10439 1.1 mrg "vpst\;vcx1<a>t\\tp%c1, %q0, #%c3" 10440 1.1 mrg [(set_attr "type" "coproc") 10441 1.1 mrg (set_attr "length" "8")] 10442 1.1 mrg ) 10443 1.1 mrg 10444 1.1 mrg (define_insn "arm_vcx2q<a>_p_v16qi" 10445 1.1 mrg [(set (match_operand:V16QI 0 "register_operand" "=t") 10446 1.1 mrg (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10447 1.1 mrg (match_operand:V16QI 2 "register_operand" "0") 10448 1.1 mrg (match_operand:V16QI 3 "register_operand" "t") 10449 1.1 mrg (match_operand:SI 4 "const_int_mve_cde2_operand" "i") 10450 1.1.1.2 mrg (match_operand:V16BI 5 "vpr_register_operand" "Up")] 10451 1.1 mrg CDE_VCX))] 10452 1.1 mrg "TARGET_CDE && TARGET_HAVE_MVE" 10453 1.1 mrg "vpst\;vcx2<a>t\\tp%c1, %q0, %q3, #%c4" 10454 1.1 mrg [(set_attr "type" "coproc") 10455 1.1 mrg (set_attr "length" "8")] 10456 1.1 mrg ) 10457 1.1 mrg 10458 1.1 mrg (define_insn "arm_vcx3q<a>_p_v16qi" 10459 1.1 mrg [(set (match_operand:V16QI 0 "register_operand" "=t") 10460 1.1 mrg (unspec:V16QI [(match_operand:SI 1 "const_int_coproc_operand" "i") 10461 1.1 mrg (match_operand:V16QI 2 "register_operand" "0") 10462 1.1 mrg (match_operand:V16QI 3 "register_operand" "t") 10463 1.1 mrg (match_operand:V16QI 4 "register_operand" "t") 10464 1.1 mrg (match_operand:SI 5 "const_int_mve_cde3_operand" "i") 10465 1.1.1.2 mrg (match_operand:V16BI 6 "vpr_register_operand" "Up")] 10466 1.1 mrg CDE_VCX))] 10467 1.1 mrg "TARGET_CDE && TARGET_HAVE_MVE" 10468 1.1 mrg "vpst\;vcx3<a>t\\tp%c1, %q0, %q3, %q4, #%c5" 10469 1.1 mrg [(set_attr "type" "coproc") 10470 1.1 mrg (set_attr "length" "8")] 10471 1.1 mrg ) 10472 1.1.1.2 mrg 10473 1.1.1.2 mrg (define_insn "*movmisalign<mode>_mve_store" 10474 1.1.1.2 mrg [(set (match_operand:MVE_VLD_ST 0 "mve_memory_operand" "=Ux") 10475 1.1.1.2 mrg (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "s_register_operand" " w")] 10476 1.1.1.2 mrg UNSPEC_MISALIGNED_ACCESS))] 10477 1.1.1.2 mrg "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10478 1.1.1.2 mrg || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))) 10479 1.1.1.2 mrg && !BYTES_BIG_ENDIAN && unaligned_access" 10480 1.1.1.2 mrg "vstr<V_sz_elem1>.<V_sz_elem>\t%q1, %E0" 10481 1.1.1.2 mrg [(set_attr "type" "mve_store")] 10482 1.1.1.2 mrg ) 10483 1.1.1.2 mrg 10484 1.1.1.2 mrg 10485 1.1.1.2 mrg (define_insn "*movmisalign<mode>_mve_load" 10486 1.1.1.2 mrg [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w") 10487 1.1.1.2 mrg (unspec:MVE_VLD_ST [(match_operand:MVE_VLD_ST 1 "mve_memory_operand" " Ux")] 10488 1.1.1.2 mrg UNSPEC_MISALIGNED_ACCESS))] 10489 1.1.1.2 mrg "((TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode)) 10490 1.1.1.2 mrg || (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))) 10491 1.1.1.2 mrg && !BYTES_BIG_ENDIAN && unaligned_access" 10492 1.1.1.2 mrg "vldr<V_sz_elem1>.<V_sz_elem>\t%q0, %E1" 10493 1.1.1.2 mrg [(set_attr "type" "mve_load")] 10494 1.1.1.2 mrg ) 10495 1.1.1.2 mrg 10496 1.1.1.2 mrg ;; Expander for VxBI moves 10497 1.1.1.2 mrg (define_expand "mov<mode>" 10498 1.1.1.2 mrg [(set (match_operand:MVE_7 0 "nonimmediate_operand") 10499 1.1.1.2 mrg (match_operand:MVE_7 1 "general_operand"))] 10500 1.1.1.2 mrg "TARGET_HAVE_MVE" 10501 1.1.1.2 mrg { 10502 1.1.1.2 mrg if (!register_operand (operands[0], <MODE>mode)) 10503 1.1.1.2 mrg operands[1] = force_reg (<MODE>mode, operands[1]); 10504 1.1.1.2 mrg } 10505 1.1.1.2 mrg ) 10506 1.1.1.2 mrg 10507 1.1.1.2 mrg ;; Expanders for vec_cmp and vcond 10508 1.1.1.2 mrg 10509 1.1.1.2 mrg (define_expand "vec_cmp<mode><MVE_vpred>" 10510 1.1.1.2 mrg [(set (match_operand:<MVE_VPRED> 0 "s_register_operand") 10511 1.1.1.2 mrg (match_operator:<MVE_VPRED> 1 "comparison_operator" 10512 1.1.1.2 mrg [(match_operand:MVE_VLD_ST 2 "s_register_operand") 10513 1.1.1.2 mrg (match_operand:MVE_VLD_ST 3 "reg_or_zero_operand")]))] 10514 1.1.1.2 mrg "TARGET_HAVE_MVE 10515 1.1.1.2 mrg && (!<Is_float_mode> || flag_unsafe_math_optimizations)" 10516 1.1.1.2 mrg { 10517 1.1.1.2 mrg arm_expand_vector_compare (operands[0], GET_CODE (operands[1]), 10518 1.1.1.2 mrg operands[2], operands[3], false); 10519 1.1.1.2 mrg DONE; 10520 1.1.1.2 mrg }) 10521 1.1.1.2 mrg 10522 1.1.1.2 mrg (define_expand "vec_cmpu<mode><MVE_vpred>" 10523 1.1.1.2 mrg [(set (match_operand:<MVE_VPRED> 0 "s_register_operand") 10524 1.1.1.2 mrg (match_operator:<MVE_VPRED> 1 "comparison_operator" 10525 1.1.1.2 mrg [(match_operand:MVE_2 2 "s_register_operand") 10526 1.1.1.2 mrg (match_operand:MVE_2 3 "reg_or_zero_operand")]))] 10527 1.1.1.2 mrg "TARGET_HAVE_MVE" 10528 1.1.1.2 mrg { 10529 1.1.1.2 mrg arm_expand_vector_compare (operands[0], GET_CODE (operands[1]), 10530 1.1.1.2 mrg operands[2], operands[3], false); 10531 1.1.1.2 mrg DONE; 10532 1.1.1.2 mrg }) 10533 1.1.1.2 mrg 10534 1.1.1.2 mrg (define_expand "vcond_mask_<mode><MVE_vpred>" 10535 1.1.1.2 mrg [(set (match_operand:MVE_VLD_ST 0 "s_register_operand") 10536 1.1.1.2 mrg (if_then_else:MVE_VLD_ST 10537 1.1.1.2 mrg (match_operand:<MVE_VPRED> 3 "s_register_operand") 10538 1.1.1.2 mrg (match_operand:MVE_VLD_ST 1 "s_register_operand") 10539 1.1.1.2 mrg (match_operand:MVE_VLD_ST 2 "s_register_operand")))] 10540 1.1.1.2 mrg "TARGET_HAVE_MVE" 10541 1.1.1.2 mrg { 10542 1.1.1.2 mrg switch (GET_MODE_CLASS (<MODE>mode)) 10543 1.1.1.2 mrg { 10544 1.1.1.2 mrg case MODE_VECTOR_INT: 10545 1.1.1.2 mrg emit_insn (gen_mve_vpselq (VPSELQ_S, <MODE>mode, operands[0], 10546 1.1.1.2 mrg operands[1], operands[2], operands[3])); 10547 1.1.1.2 mrg break; 10548 1.1.1.2 mrg case MODE_VECTOR_FLOAT: 10549 1.1.1.2 mrg emit_insn (gen_mve_vpselq_f (<MODE>mode, operands[0], 10550 1.1.1.2 mrg operands[1], operands[2], operands[3])); 10551 1.1.1.2 mrg break; 10552 1.1.1.2 mrg default: 10553 1.1.1.2 mrg gcc_unreachable (); 10554 1.1.1.2 mrg } 10555 1.1.1.2 mrg DONE; 10556 1.1.1.2 mrg }) 10557