1arch_cfgs:2 - arch_name: aarch643 target_feature: [sve, sve2]4 llvm_prefix: llvm.aarch64.sve56auto_llvm_sign_conversion: true7generate_load_store_tests: true89# `#[unstable(feature = "stdarch_aarch64_sve", issue = "145052")]`10sve-unstable: &sve-unstable11 FnCall: [unstable, ['feature = "stdarch_aarch64_sve"', 'issue= "145052"']]1213# `#[cfg_attr(all(test, not(target_env = "msvc"))]`14msvc-disabled: &msvc-disabled15 FnCall: [all, [test, {FnCall: [not, ['target_env = "msvc"']]}]]1617intrinsics:18 - name: svbext[{_n}_{type}]19 attr: [*sve-unstable]20 target_features: [sve2-bitperm]21 doc: Gather lower bits from positions selected by bitmask22 arguments: ["op1: {sve_type}", "op2: {sve_type}"]23 return_type: "{sve_type}"24 types: [u8, u16, u32, u64]25 assert_instr: [bext]26 n_variant_op: op227 compose:28 - LLVMLink: { name: "bext.x.{sve_type}" }2930 - name: svbgrp[{_n}_{type}]31 attr: [*sve-unstable]32 target_features: [sve2-bitperm]33 doc: Group bits to right or left as selected by bitmask34 arguments: ["op1: {sve_type}", "op2: {sve_type}"]35 return_type: "{sve_type}"36 types: [u8, u16, u32, u64]37 assert_instr: [bgrp]38 n_variant_op: op239 compose:40 - LLVMLink: { name: "bgrp.x.{sve_type}" }4142 - name: svbdep[{_n}_{type}]43 attr: [*sve-unstable]44 target_features: [sve2-bitperm]45 doc: Scatter lower bits into positions selected by bitmask46 arguments: ["op1: {sve_type}", "op2: {sve_type}"]47 return_type: "{sve_type}"48 types: [u8, u16, u32, u64]49 assert_instr: [bdep]50 n_variant_op: op251 compose:52 - LLVMLink: { name: "bdep.x.{sve_type}" }5354 - name: svhistcnt[_{type[0]}]_z55 attr: [*sve-unstable]56 doc: Count matching elements57 arguments:58 ["pg: {predicate[0]}", "op1: {sve_type[0]}", "op2: {sve_type[0]}"]59 return_type: "{sve_type[1]}"60 types: [[i32, u32], [i64, u64], [u32, u32], [u64, u64]]61 assert_instr: [histcnt]62 compose:63 - LLVMLink: { name: "histcnt.{sve_type[0]}" }6465 - name: svhistseg[_{type[0]}]66 attr: [*sve-unstable]67 doc: Count matching elements in 128-bit segments68 arguments: ["op1: {sve_type[0]}", "op2: {sve_type[0]}"]69 return_type: "{sve_type[1]}"70 types: [[i8, u8], [u8, u8]]71 assert_instr: [histseg]72 compose:73 - LLVMLink: { name: "histseg.{sve_type[0]}" }7475 - name: svmatch[_{type}]76 attr: [*sve-unstable]77 doc: Detect any matching elements78 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]79 return_type: "{predicate}"80 types: [i8, i16, u8, u16]81 assert_instr: [match]82 compose:83 - LLVMLink: { name: "match.{sve_type}" }8485 - name: svnmatch[_{type}]86 attr: [*sve-unstable]87 doc: Detect no matching elements88 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]89 return_type: "{predicate}"90 types: [i8, i16, u8, u16]91 assert_instr: [nmatch]92 compose:93 - LLVMLink: { name: "nmatch.{sve_type}" }9495 - name: svhadd[{_n}_{type}]{_mxz}96 attr: [*sve-unstable]97 doc: Halving add98 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]99 return_type: "{sve_type}"100 types: [i8, i16, i32, i64, u8, u16, u32, u64]101 zeroing_method: { select: op1 }102 assert_instr: ["{type_kind.su}hadd"]103 n_variant_op: op2104 compose:105 - LLVMLink: { name: "{type_kind.su}hadd.{sve_type}" }106107 - name: svrhadd[{_n}_{type}]{_mxz}108 attr: [*sve-unstable]109 doc: Rounding halving add110 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]111 return_type: "{sve_type}"112 types: [i8, i16, i32, i64, u8, u16, u32, u64]113 zeroing_method: { select: op1 }114 assert_instr: ["{type_kind.su}rhadd"]115 n_variant_op: op2116 compose:117 - LLVMLink: { name: "{type_kind.su}rhadd.{sve_type}" }118119 - name: svaddhnb[{_n}_{type[0]}]120 attr: [*sve-unstable]121 doc: Add narrow high part (bottom)122 types:123 [[i16, i8], [i32, i16], [i64, i32], [u16, u8], [u32, u16], [u64, u32]]124 return_type: "{sve_type[1]}"125 arguments: ["op1: {sve_type[0]}", "op2: {sve_type[0]}"]126 assert_instr: [addhnb]127 n_variant_op: op2128 compose:129 - LLVMLink: { name: "addhnb.{sve_type[0]}" }130131 - name: svaddhnt[{_n}_{type[0]}]132 attr: [*sve-unstable]133 doc: Add narrow high part (top)134 types:135 [[i16, i8], [i32, i16], [i64, i32], [u16, u8], [u32, u16], [u64, u32]]136 return_type: "{sve_type[1]}"137 arguments:138 ["even: {sve_type[1]}", "op1: {sve_type[0]}", "op2: {sve_type[0]}"]139 assert_instr: [addhnt]140 n_variant_op: op2141 compose:142 - LLVMLink: { name: "addhnt.{sve_type[0]}" }143144 - name: svraddhnb[{_n}_{type[0]}]145 attr: [*sve-unstable]146 doc: Rounding add narrow high part (bottom)147 types:148 [[i16, i8], [i32, i16], [i64, i32], [u16, u8], [u32, u16], [u64, u32]]149 return_type: "{sve_type[1]}"150 arguments: ["op1: {sve_type[0]}", "op2: {sve_type[0]}"]151 assert_instr: [raddhnb]152 n_variant_op: op2153 compose:154 - LLVMLink: { name: "raddhnb.{sve_type[0]}" }155156 - name: svraddhnt[{_n}_{type[0]}]157 attr: [*sve-unstable]158 doc: Rounding add narrow high part (top)159 types:160 [[i16, i8], [i32, i16], [i64, i32], [u16, u8], [u32, u16], [u64, u32]]161 return_type: "{sve_type[1]}"162 arguments:163 ["even: {sve_type[1]}", "op1: {sve_type[0]}", "op2: {sve_type[0]}"]164 assert_instr: [raddhnt]165 n_variant_op: op2166 compose:167 - LLVMLink: { name: "raddhnt.{sve_type[0]}" }168169 - name: svcadd[_{type}]170 attr: [*sve-unstable]171 doc: Complex add with rotate172 arguments: ["op1: {sve_type}", "op2: {sve_type}"]173 return_type: "{sve_type}"174 types: [i8, i16, i32, i64, u8, u16, u32, u64]175 static_defs: ["const IMM_ROTATION: i32"]176 constraints: [{ variable: IMM_ROTATION, any_values: [90, 270] }]177 assert_instr: [[cadd, "IMM_ROTATION = 90"]]178 compose:179 - LLVMLink:180 name: cadd.x.{sve_type}181 arguments: ["op1: {sve_type}", "op2: {sve_type}", "imm_rotation: i32"]182 - FnCall: ["{llvm_link}", [$op1, $op2, $IMM_ROTATION]]183184 - name: svcdot[_{type[0]}]185 attr: [*sve-unstable]186 doc: Complex dot product187 arguments:188 ["op1: {sve_type[0]}", "op2: {sve_type[1]}", "op3: {sve_type[1]}"]189 return_type: "{sve_type[0]}"190 types: [[i32, i8], [i64, i16]]191 static_defs: ["const IMM_ROTATION: i32"]192 constraints: [{ variable: IMM_ROTATION, any_values: [0, 90, 180, 270] }]193 assert_instr: [[cdot, "IMM_ROTATION = 90"]]194 compose:195 - LLVMLink:196 name: cdot.{sve_type[0]}197 arguments:198 - "op1: {sve_type[0]}"199 - "op2: {sve_type[1]}"200 - "op3: {sve_type[1]}"201 - "imm_rotation: i32"202 - FnCall: ["{llvm_link}", [$op1, $op2, $op3, $IMM_ROTATION]]203204 - name: svcdot_lane[_{type[0]}]205 attr: [*sve-unstable]206 doc: Complex dot product207 arguments:208 ["op1: {sve_type[0]}", "op2: {sve_type[1]}", "op3: {sve_type[1]}"]209 return_type: "{sve_type[0]}"210 types: [[i32, i8], [i64, i16]]211 static_defs: ["const IMM_INDEX: i32", "const IMM_ROTATION: i32"]212 constraints:213 - { variable: IMM_INDEX, vec_max_elems_type: "{type[0]}" }214 - { variable: IMM_ROTATION, any_values: [0, 90, 180, 270] }215 assert_instr: [[cdot, "IMM_INDEX = 0, IMM_ROTATION = 90"]]216 compose:217 - LLVMLink:218 name: cdot.lane.{sve_type[0]}219 arguments:220 - "op1: {sve_type[0]}"221 - "op2: {sve_type[1]}"222 - "op3: {sve_type[1]}"223 - "imm_index: i32"224 - "imm_rotation: i32"225 - FnCall: ["{llvm_link}", [$op1, $op2, $op3, $IMM_INDEX, $IMM_ROTATION]]226227 - name: svcmla[_{type}]228 attr: [*sve-unstable]229 doc: Complex multiply-add with rotate230 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]231 return_type: "{sve_type}"232 types: [i8, i16, i32, i64, u8, u16, u32, u64]233 static_defs: ["const IMM_ROTATION: i32"]234 constraints: [{ variable: IMM_ROTATION, any_values: [0, 90, 180, 270] }]235 assert_instr: [[cmla, "IMM_ROTATION = 90"]]236 compose:237 - LLVMLink:238 name: cmla.x.{sve_type}239 arguments:240 - "op1: {sve_type}"241 - "op2: {sve_type}"242 - "op3: {sve_type}"243 - "imm_rotation: i32"244 - FnCall: ["{llvm_link}", [$op1, $op2, $op3, $IMM_ROTATION]]245246 - name: svcmla_lane[_{type}]247 attr: [*sve-unstable]248 doc: Complex multiply-add with rotate249 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]250 return_type: "{sve_type}"251 types: [i16, i32, u16, u32]252 static_defs: ["const IMM_INDEX: i32", "const IMM_ROTATION: i32"]253 constraints:254 - variable: IMM_INDEX255 range: { match_size: "{type}", default: [0, 1], halfword: [0, 3] }256 - { variable: IMM_ROTATION, any_values: [0, 90, 180, 270] }257 assert_instr: [[cmla, "IMM_INDEX = 0, IMM_ROTATION = 90"]]258 compose:259 - LLVMLink:260 name: cmla.lane.x.{sve_type}261 arguments:262 - "op1: {sve_type}"263 - "op2: {sve_type}"264 - "op3: {sve_type}"265 - "imm_index: i32"266 - "imm_rotation: i32"267 - FnCall: ["{llvm_link}", [$op1, $op2, $op3, $IMM_INDEX, $IMM_ROTATION]]268269 - name: svqrdcmlah[_{type}]270 attr: [*sve-unstable]271 doc: Saturating rounding doubling complex multiply-add high with rotate272 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]273 return_type: "{sve_type}"274 types: [i8, i16, i32, i64]275 static_defs: ["const IMM_ROTATION: i32"]276 constraints: [{ variable: IMM_ROTATION, any_values: [0, 90, 180, 270] }]277 assert_instr: [[sqrdcmlah, "IMM_ROTATION = 90"]]278 compose:279 - LLVMLink:280 name: sqrdcmlah.x.{sve_type}281 arguments:282 - "op1: {sve_type}"283 - "op2: {sve_type}"284 - "op3: {sve_type}"285 - "imm_rotation: i32"286 - FnCall: ["{llvm_link}", [$op1, $op2, $op3, $IMM_ROTATION]]287288 - name: svqrdcmlah_lane[_{type}]289 attr: [*sve-unstable]290 doc: Saturating rounding doubling complex multiply-add high with rotate291 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]292 return_type: "{sve_type}"293 types: [i16, i32]294 static_defs: ["const IMM_INDEX: i32", "const IMM_ROTATION: i32"]295 constraints:296 - variable: IMM_INDEX297 range: { match_size: "{type}", default: [0, 1], halfword: [0, 3] }298 - { variable: IMM_ROTATION, any_values: [0, 90, 180, 270] }299 assert_instr: [[sqrdcmlah, "IMM_INDEX = 0, IMM_ROTATION = 90"]]300 compose:301 - LLVMLink:302 name: sqrdcmlah.lane.x.{sve_type}303 arguments:304 - "op1: {sve_type}"305 - "op2: {sve_type}"306 - "op3: {sve_type}"307 - "imm_index: i32"308 - "imm_rotation: i32"309 - FnCall: ["{llvm_link}", [$op1, $op2, $op3, $IMM_INDEX, $IMM_ROTATION]]310311 - name: svqcadd[_{type}]312 attr: [*sve-unstable]313 doc: Saturating complex add with rotate314 arguments: ["op1: {sve_type}", "op2: {sve_type}"]315 return_type: "{sve_type}"316 types: [i8, i16, i32, i64]317 static_defs: ["const IMM_ROTATION: i32"]318 constraints: [{ variable: "IMM_ROTATION", any_values: [90, 270] }]319 assert_instr: [[sqcadd, "IMM_ROTATION = 90"]]320 compose:321 - LLVMLink:322 name: "sqcadd.x.{sve_type}"323 arguments: ["op1: {sve_type}", "op2: {sve_type}", "imm_rotation: i32"]324 - FnCall: ["{llvm_link}", ["$op1", "$op2", "$IMM_ROTATION"]]325326 - name: svsublb[{_n}_{type[0]}]327 attr: [*sve-unstable]328 doc: Subtract long (bottom)329 arguments: ["op1: {sve_type[1]}", "op2: {sve_type[1]}"]330 return_type: "{sve_type[0]}"331 types:332 - [i16, i8]333 - [i32, i16]334 - [i64, i32]335 - [u16, u8]336 - [u32, u16]337 - [u64, u32]338 assert_instr: ["{type_kind[0].su}sublb"]339 n_variant_op: op2340 compose:341 - LLVMLink:342 name: "{type_kind[0].su}sublb.{sve_type[0]}"343344 - name: svsublbt[{_n}_{type[0]}]345 attr: [*sve-unstable]346 doc: Subtract long (bottom - top)347 arguments: ["op1: {sve_type[1]}", "op2: {sve_type[1]}"]348 return_type: "{sve_type[0]}"349 types:350 - [i16, i8]351 - [i32, i16]352 - [i64, i32]353 assert_instr: [ssublbt]354 n_variant_op: op2355 compose:356 - LLVMLink:357 name: "ssublbt.{sve_type[0]}"358359 - name: svsublt[{_n}_{type[0]}]360 attr: [*sve-unstable]361 doc: Subtract long (top)362 arguments: ["op1: {sve_type[1]}", "op2: {sve_type[1]}"]363 return_type: "{sve_type[0]}"364 types:365 - [i16, i8]366 - [i32, i16]367 - [i64, i32]368 - [u16, u8]369 - [u32, u16]370 - [u64, u32]371 assert_instr: ["{type_kind[0].su}sublt"]372 n_variant_op: op2373 compose:374 - LLVMLink: { name: "{type_kind[0].su}sublt.{sve_type[0]}" }375376 - name: svsubltb[{_n}_{type[0]}]377 attr: [*sve-unstable]378 doc: Subtract long (top - bottom)379 arguments: ["op1: {sve_type[1]}", "op2: {sve_type[1]}"]380 return_type: "{sve_type[0]}"381 types:382 - [i16, i8]383 - [i32, i16]384 - [i64, i32]385 assert_instr: [ssubltb]386 n_variant_op: op2387 compose:388 - LLVMLink:389 name: "ssubltb.{sve_type[0]}"390391 - name: svsubwb[{_n}_{type[0]}]392 attr: [*sve-unstable]393 doc: Subtract wide (bottom)394 arguments: ["op1: {sve_type[0]}", "op2: {sve_type[1]}"]395 return_type: "{sve_type[0]}"396 types:397 - [i16, i8]398 - [i32, i16]399 - [i64, i32]400 - [u16, u8]401 - [u32, u16]402 - [u64, u32]403 assert_instr: ["{type_kind[0].su}subwb"]404 n_variant_op: op2405 compose:406 - LLVMLink: { name: "{type_kind[0].su}subwb.{sve_type[0]}" }407408 - name: svsubwt[{_n}_{type[0]}]409 attr: [*sve-unstable]410 doc: Subtract wide (top)411 arguments: ["op1: {sve_type[0]}", "op2: {sve_type[1]}"]412 return_type: "{sve_type[0]}"413 types:414 - [i16, i8]415 - [i32, i16]416 - [i64, i32]417 - [u16, u8]418 - [u32, u16]419 - [u64, u32]420 assert_instr: ["{type_kind[0].su}subwt"]421 n_variant_op: op2422 compose:423 - LLVMLink: { name: "{type_kind[0].su}subwt.{sve_type[0]}" }424425 - name: svrsubhnb[{_n}_{type[0]}]426 attr: [*sve-unstable]427 doc: Rounding subtract narrow high part (bottom)428 arguments: ["op1: {sve_type[0]}", "op2: {sve_type[0]}"]429 return_type: "{sve_type[1]}"430 types:431 - [i16, i8]432 - [i32, i16]433 - [i64, i32]434 - [u16, u8]435 - [u32, u16]436 - [u64, u32]437 assert_instr: [rsubhnb]438 n_variant_op: op2439 compose:440 - LLVMLink: { name: "rsubhnb.{sve_type[0]}" }441442 - name: svrsubhnt[{_n}_{type[0]}]443 attr: [*sve-unstable]444 doc: Rounding subtract narrow high part (top)445 arguments:446 ["even: {sve_type[1]}", "op1: {sve_type[0]}", "op2: {sve_type[0]}"]447 return_type: "{sve_type[1]}"448 types:449 - [i16, i8]450 - [i32, i16]451 - [i64, i32]452 - [u16, u8]453 - [u32, u16]454 - [u64, u32]455 assert_instr: [rsubhnt]456 n_variant_op: op2457 compose:458 - LLVMLink: { name: "rsubhnt.{sve_type[0]}" }459460 - name: svsubhnb[{_n}_{type[0]}]461 attr: [*sve-unstable]462 doc: Subtract narrow high part (bottom)463 arguments: ["op1: {sve_type[0]}", "op2: {sve_type[0]}"]464 return_type: "{sve_type[1]}"465 types:466 - [i16, i8]467 - [i32, i16]468 - [i64, i32]469 - [u16, u8]470 - [u32, u16]471 - [u64, u32]472 assert_instr: [subhnb]473 n_variant_op: op2474 compose:475 - LLVMLink: { name: "subhnb.{sve_type[0]}" }476477 - name: svsubhnt[{_n}_{type[0]}]478 attr: [*sve-unstable]479 doc: Subtract narrow high part (top)480 arguments:481 ["even: {sve_type[1]}", "op1: {sve_type[0]}", "op2: {sve_type[0]}"]482 return_type: "{sve_type[1]}"483 types:484 - [i16, i8]485 - [i32, i16]486 - [i64, i32]487 - [u16, u8]488 - [u32, u16]489 - [u64, u32]490 assert_instr: [subhnt]491 n_variant_op: op2492 compose:493 - LLVMLink: { name: "subhnt.{sve_type[0]}" }494495 - name: svsbclb[{_n}_{type}]496 attr: [*sve-unstable]497 doc: Subtract with borrow long (bottom)498 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]499 return_type: "{sve_type}"500 types: [u32, u64]501 assert_instr: [sbclb]502 n_variant_op: op3503 compose:504 - LLVMLink: { name: "sbclb.{sve_type}" }505506 - name: svsbclt[{_n}_{type}]507 attr: [*sve-unstable]508 doc: Subtract with borrow long (top)509 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]510 return_type: "{sve_type}"511 types: [u32, u64]512 assert_instr: [sbclt]513 n_variant_op: op3514 compose:515 - LLVMLink: { name: "sbclt.{sve_type}" }516517 - name: svqsub[{_n}_{type}]{_mxz}518 attr: [*sve-unstable]519 doc: Saturating subtract520 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]521 return_type: "{sve_type}"522 types: [i8, i16, i32, i64, u8, u16, u32, u64]523 zeroing_method: { select: op1 }524 assert_instr: ["{type_kind.su}qsub"]525 n_variant_op: op2526 compose:527 - LLVMLink: { name: "{type_kind.su}qsub.{sve_type}" }528529 - name: svqsubr[{_n}_{type}]{_mxz}530 attr: [*sve-unstable]531 doc: Saturating subtract reversed532 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]533 return_type: "{sve_type}"534 types: [i8, i16, i32, i64, u8, u16, u32, u64]535 zeroing_method: { select: op1 }536 assert_instr: ["{type_kind.su}qsubr"]537 n_variant_op: op2538 compose:539 - LLVMLink: { name: "{type_kind.su}qsubr.{sve_type}" }540541 - name: svhsub[{_n}_{type}]{_mxz}542 attr: [*sve-unstable]543 doc: Halving subtract544 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]545 return_type: "{sve_type}"546 types: [i8, i16, i32, i64, u8, u16, u32, u64]547 assert_instr: ["{type_kind.su}hsub"]548 zeroing_method: { select: op1 }549 n_variant_op: op2550 compose:551 - LLVMLink: { name: "{type_kind.su}hsub.{sve_type}" }552553 - name: svhsubr[{_n}_{type}]{_mxz}554 attr: [*sve-unstable]555 doc: Halving subtract reversed556 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]557 return_type: "{sve_type}"558 types: [i8, i16, i32, i64, u8, u16, u32, u64]559 assert_instr: ["{type_kind.su}hsub"]560 zeroing_method: { select: op1 }561 n_variant_op: op2562 compose:563 - LLVMLink: { name: "{type_kind.su}hsubr.{sve_type}" }564565 - name: svwhilege_{sve_type[1]}[_{type[0]}]566 attr: [*sve-unstable]567 doc: While decrementing scalar is greater than or equal to568 arguments: ["op1: {type[0]}", "op2: {type[0]}"]569 return_type: "{sve_type[1]}"570 types: [[[i32, i64, u32, u64], [b8, b16, b32, b64]]]571 assert_instr: [{ default: whilege, unsigned: whilehs }]572 compose:573 - MatchKind:574 - "{type[0]}"575 - default: { LLVMLink: { name: "whilege.{sve_type[1]}.{type[0]}" } }576 unsigned: { LLVMLink: { name: "whilehs.{sve_type[1]}.{type[0]}" } }577578 - name: svwhilegt_{sve_type[1]}[_{type[0]}]579 attr: [*sve-unstable]580 doc: While decrementing scalar is greater than581 arguments: ["op1: {type[0]}", "op2: {type[0]}"]582 return_type: "{sve_type[1]}"583 types: [[[i32, i64, u32, u64], [b8, b16, b32, b64]]]584 assert_instr: [{ default: whilegt, unsigned: whilehi }]585 compose:586 - MatchKind:587 - "{type[0]}"588 - default: { LLVMLink: { name: "whilegt.{sve_type[1]}.{type[0]}" } }589 unsigned: { LLVMLink: { name: "whilehi.{sve_type[1]}.{type[0]}" } }590591 - name: svwhilerw_{size}ptr592 attr: [*sve-unstable]593 safety:594 unsafe: []595 visibility: private596 static_defs: [T]597 substitutions:598 size_alt:599 match_size: "{type}"600 byte: b601 halfword: h602 default: s603 doubleword: d604 arguments: ["op1: *T", "op2: *T"]605 return_type: "{predicate}"606 types: [i8, i16, i32, i64]607 assert_instr: []608 compose:609 - Let: [op1, CastAs: [$op1, "*const crate::ffi::c_void"]]610 - Let: [op2, CastAs: [$op2, "*const crate::ffi::c_void"]]611 - LLVMLink:612 name: "whilerw.{size_alt}.{predicate}.p0"613 arguments: ["op1: *crate::ffi::c_void", "op2: *crate::ffi::c_void"]614615 - name: svwhilerw[_{type}]616 attr: [*sve-unstable]617 doc: While free of read-after-write conflicts618 # TODO: This might be safe even with unrelated pointers, but the LLVM builtin's guarantees don't619 # seem to be documented, so we conservatively keep this unsafe for now.620 safety:621 unsafe:622 - custom: "[`pointer::byte_offset_from`](pointer#method.byte_offset_from) safety constraints623 must be met for at least the base pointers, `op1` and `op2`."624 arguments: ["op1: *{type}", "op2: *{type}"]625 return_type: "svbool_t"626 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]627 assert_instr: [whilerw]628 compose:629 - FnCall:630 - "svwhilerw_{size}ptr"631 - - $op1632 - $op2633 - - Type: "{type}"634635 - name: svwhilewr_{size}ptr636 attr: [*sve-unstable]637 safety:638 unsafe: []639 visibility: private640 static_defs: [T]641 substitutions:642 size_alt:643 match_size: "{type}"644 byte: b645 halfword: h646 default: s647 doubleword: d648 arguments: ["op1: *T", "op2: *T"]649 return_type: "{predicate}"650 types: [i8, i16, i32, i64]651 assert_instr: []652 compose:653 - Let: [op1, CastAs: [$op1, "*const crate::ffi::c_void"]]654 - Let: [op2, CastAs: [$op2, "*const crate::ffi::c_void"]]655 - LLVMLink:656 name: "whilewr.{size_alt}.{predicate}.p0"657 arguments: ["op1: *crate::ffi::c_void", "op2: *crate::ffi::c_void"]658659 - name: svwhilewr[_{type}]660 attr: [*sve-unstable]661 doc: While free of write-after-read conflicts662 # TODO: This might be safe even with unrelated pointers, but the LLVM builtin's guarantees don't663 # seem to be documented, so we conservatively keep this unsafe for now.664 safety:665 unsafe:666 - custom: "[`pointer::byte_offset_from`](pointer#method.byte_offset_from) safety constraints667 must be met for at least the base pointers, `op1` and `op2`."668 arguments: ["op1: *{type}", "op2: *{type}"]669 return_type: "svbool_t"670 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]671 assert_instr: [whilewr]672 compose:673 - FnCall:674 - "svwhilewr_{size}ptr"675 - - $op1676 - $op2677 - - Type: "{type}"678679 - name: svtbl2[_{type[0]}]680 attr: [*sve-unstable]681 doc: Table lookup in two-vector table682 arguments: ["data: {sve_type_x2[0]}", "indices: {sve_type[1]}"]683 return_type: "{sve_type[0]}"684 types:685 - [f32, u32]686 - [f64, u64]687 - [i8, u8]688 - [i16, u16]689 - [i32, u32]690 - [i64, u64]691 - [u8, u8]692 - [u16, u16]693 - [u32, u32]694 - [u64, u64]695 assert_instr: [tbl]696 compose:697 - LLVMLink:698 name: "tbl2.{sve_type[0]}"699 arguments:700 - "data0: {sve_type[0]}"701 - "data1: {sve_type[0]}"702 - "indices: {sve_type[1]}"703 - FnCall:704 - "{llvm_link}"705 - - FnCall: ["svget2_{type[0]}", ["$data"], [0]]706 - FnCall: ["svget2_{type[0]}", ["$data"], [1]]707 - $indices708709 - name: svtbx[_{type[0]}]710 attr: [*sve-unstable]711 doc: Table lookup in single-vector table (merging)712 arguments:713 - "fallback: {sve_type[0]}"714 - "data: {sve_type[0]}"715 - "indices: {sve_type[1]}"716 return_type: "{sve_type[0]}"717 types:718 - [f32, u32]719 - [f64, u64]720 - [i8, u8]721 - [i16, u16]722 - [i32, u32]723 - [i64, u64]724 - [u8, u8]725 - [u16, u16]726 - [u32, u32]727 - [u64, u64]728 assert_instr: [tbx]729 compose:730 - LLVMLink: { name: "tbx.{sve_type[0]}" }731732 - name: svcvtlt_{type[0]}[_{type[1]}]_m733 attr: [*sve-unstable]734 doc: Up convert long (top)735 arguments:736 ["inactive: {sve_type[0]}", "pg: {max_predicate}", "op: {sve_type[1]}"]737 return_type: "{sve_type[0]}"738 types: [[f64, f32]]739 assert_instr: [fcvtlt]740 compose:741 - LLVMLink: { name: "fcvtlt.{type[0]}{type[1]}" }742743 - name: svcvtlt_{type[0]}[_{type[1]}]_x744 attr: [*sve-unstable]745 doc: Up convert long (top)746 arguments: ["pg: svbool_t", "op: {sve_type[1]}"]747 return_type: "{sve_type[0]}"748 types: [[f64, f32]]749 assert_instr: [fcvtlt]750 compose:751 - FnCall:752 - "svcvtlt_{type[0]}_{type[1]}_m"753 - - FnCall: ["crate::intrinsics::transmute_unchecked", [$op], [], true]754 - $pg755 - $op756757 - name: svcvtnt_{type[0]}[_{type[1]}]{_mx}758 attr: [*sve-unstable]759 doc: Down convert and narrow (top)760 arguments:761 ["even: {sve_type[0]}", "pg: {max_predicate}", "op: {sve_type[1]}"]762 return_type: "{sve_type[0]}"763 types: [[f32, f64]]764 assert_instr: [fcvtnt]765 compose:766 - LLVMLink: { name: "fcvtnt.{type[0]}{type[1]}" }767768 - name: svcvtx_{type[0]}[_{type[1]}]{_mxz}769 attr: [*sve-unstable]770 doc: Down convert, rounding to odd771 arguments:772 ["inactive: {sve_type[0]}", "pg: {max_predicate}", "op: {sve_type[1]}"]773 return_type: "{sve_type[0]}"774 types: [[f32, f64]]775 zeroing_method: { drop: inactive }776 assert_instr: [fcvtx]777 compose:778 - LLVMLink: { name: "fcvtx.{type[0]}{type[1]}" }779780 - name: svcvtxnt_{type[0]}[_{type[1]}]{_mx}781 attr: [*sve-unstable]782 doc: Down convert, rounding to odd (top)783 arguments:784 ["even: {sve_type[0]}", "pg: {max_predicate}", "op: {sve_type[1]}"]785 return_type: "{sve_type[0]}"786 types: [[f32, f64]]787 assert_instr: [fcvtxnt]788 compose:789 - LLVMLink: { name: "fcvtxnt.{type[0]}{type[1]}" }790791 - name: svldnt1_gather_[{type[0]}]index[_{type[1]}]792 attr: [*sve-unstable]793 doc: Unextended load, non-temporal794 safety:795 unsafe:796 - pointer_offset: predicated797 - dereference: predicated798 - non_temporal799 arguments:800 ["pg: {predicate[0]}", "base: *{type[1]}", "indices: {sve_type[0]}"]801 return_type: "{sve_type[1]}"802 types:803 - [[i64, u64], [f64, i64, u64]]804 assert_instr: ["ldnt1{size_literal[0]}"]805 test: { load: 1 }806 compose:807 - LLVMLink: { name: "ldnt1.gather.index.{sve_type[1]}" }808809 - name: svldnt1_gather_[{type[0]}]offset[_{type[1]}]810 attr: [*sve-unstable]811 doc: Unextended load, non-temporal812 safety:813 unsafe:814 - pointer_offset: predicated815 - dereference: predicated816 - non_temporal817 arguments:818 ["pg: {predicate[0]}", "base: *{type[1]}", "offsets: {sve_type[0]}"]819 return_type: "{sve_type[1]}"820 types:821 - [u32, [f32, i32, u32]]822 - [[i64, u64], [f64, i64, u64]]823 assert_instr: ["ldnt1{size_literal[0]}"]824 test: { load: 1 }825 compose:826 - MatchSize:827 - "{type[0]}"828 - default:829 LLVMLink: { name: "ldnt1.gather.uxtw.{sve_type[1]}" }830 doubleword:831 LLVMLink: { name: "ldnt1.gather.{sve_type[1]}" }832833 - name: svldnt1_gather[_{type[0]}base]_offset_{type[1]}834 attr: [*sve-unstable]835 doc: Unextended load, non-temporal836 safety:837 unsafe:838 - pointer_offset: predicated839 - dereference: predicated840 - no_provenance: bases841 - non_temporal842 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "offset: i64"]843 return_type: "{sve_type[1]}"844 types:845 - [u32, [f32, i32, u32]]846 - [u64, [f64, i64, u64]]847 assert_instr: ["ldnt1{size_literal[0]}"]848 test: { load: 1 }849 compose:850 - LLVMLink:851 name: "ldnt1.gather.scalar.offset.{sve_type[1]}.{sve_type[0]}"852853 - name: svldnt1_gather[_{type[0]}base]_{type[1]}854 attr: [*sve-unstable]855 doc: Unextended load, non-temporal856 safety:857 unsafe:858 - pointer_offset: predicated859 - dereference: predicated860 - no_provenance: bases861 - non_temporal862 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}"]863 return_type: "{sve_type[1]}"864 types:865 - [u32, [f32, i32, u32]]866 - [u64, [f64, i64, u64]]867 assert_instr: ["ldnt1{size_literal[0]}"]868 test: { load: 1 }869 compose:870 - FnCall:871 - "svldnt1_gather_{type[0]}base_offset_{type[1]}"872 - - $pg873 - $bases874 - 0875876 - name: svldnt1_gather[_{type[0]}base]_index_{type[1]}877 attr: [*sve-unstable]878 doc: Unextended load, non-temporal879 safety:880 unsafe:881 - pointer_offset: predicated882 - dereference: predicated883 - no_provenance: bases884 - non_temporal885 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "index: i64"]886 return_type: "{sve_type[1]}"887 types:888 - [u32, [f32, i32, u32]]889 - [u64, [f64, i64, u64]]890 assert_instr: ["ldnt1{size_literal[0]}"]891 test: { load: 1 }892 compose:893 - FnCall:894 - "svldnt1_gather_{type[0]}base_offset_{type[1]}"895 - - $pg896 - $bases897 - MethodCall: [$index, unchecked_shl, ["{size_in_bytes_log2[0]}"]]898899 - name: svldnt1s{size_literal[2]}_gather_[{type[0]}]index_{type[1]}900 attr: [*sve-unstable]901 doc: Load {size[2]}-bit data and sign-extend, non-temporal902 safety:903 unsafe:904 - pointer_offset: predicated905 - dereference: predicated906 - non_temporal907 arguments:908 ["pg: {predicate[0]}", "base: *{type[2]}", "indices: {sve_type[0]}"]909 return_type: "{sve_type[1]}"910 types:911 - [[i64, u64], [i64, u64], [i16, i32]]912 assert_instr: ["ldnt1s{size_literal[2]}"]913 test: { load: 2 }914 compose:915 - LLVMLink:916 name: "ldnt1.gather.index.{sve_type[1] as {type[2]}}"917 return_type: "{sve_type[1] as {type[2]}}"918 - FnCall:919 - "crate::intrinsics::simd::simd_cast"920 - - FnCall: ["{llvm_link}", [$pg, $base, $indices]]921922 - name: svldnt1u{size_literal[2]}_gather_[{type[0]}]index_{type[1]}923 attr: [*sve-unstable]924 doc: Load {size[2]}-bit data and zero-extend, non-temporal925 safety:926 unsafe:927 - pointer_offset: predicated928 - dereference: predicated929 - non_temporal930 arguments:931 ["pg: {predicate[0]}", "base: *{type[2]}", "indices: {sve_type[0]}"]932 return_type: "{sve_type[1]}"933 types:934 - [[i64, u64], [u64, i64], [u16, u32]]935 assert_instr: ["ldnt1{size_literal[2]}"]936 test: { load: 2 }937 compose:938 - LLVMLink:939 name: "ldnt1.gather.index.{sve_type[1] as {type[2]}}"940 return_type: "{sve_type[1] as {type[2]}}"941 - FnCall:942 - "crate::intrinsics::simd::simd_cast"943 - - FnCall: ["{llvm_link}", [$pg, $base, $indices]]944 - - Type: "{sve_type[1] as {type[2]}}"945 - _946947 - name: svldnt1s{size_literal[2]}_gather_[{type[0]}]offset_{type[1]}948 attr: [*sve-unstable]949 doc: Load {size[2]}-bit data and sign-extend, non-temporal950 safety:951 unsafe:952 - pointer_offset: predicated953 - dereference: predicated954 - non_temporal955 arguments:956 ["pg: {predicate[0]}", "base: *{type[2]}", "offsets: {sve_type[0]}"]957 return_type: "{sve_type[1]}"958 types:959 - [u32, [i32, u32], [i8, i16]]960 - [[i64, u64], [i64, u64], [i8, i16, i32]]961 assert_instr: ["ldnt1s{size_literal[2]}"]962 test: { load: 2 }963 compose:964 - MatchSize:965 - "{type[0]}"966 - default:967 LLVMLink:968 name: "ldnt1.gather.uxtw.{sve_type[1] as {type[2]}}"969 return_type: "{sve_type[1] as {type[2]}}"970 doubleword:971 LLVMLink:972 name: "ldnt1.gather.{sve_type[1] as {type[2]}}"973 return_type: "{sve_type[1] as {type[2]}}"974 - FnCall:975 - "crate::intrinsics::simd::simd_cast"976 - - FnCall: ["{llvm_link}", [$pg, $base, $offsets]]977978 - name: svldnt1u{size_literal[2]}_gather_[{type[0]}]offset_{type[1]}979 attr: [*sve-unstable]980 doc: Load {size[2]}-bit data and zero-extend, non-temporal981 safety:982 unsafe:983 - pointer_offset: predicated984 - dereference: predicated985 - non_temporal986 arguments:987 ["pg: {predicate[0]}", "base: *{type[2]}", "offsets: {sve_type[0]}"]988 return_type: "{sve_type[1]}"989 types:990 - [u32, [u32, i32], [u8, u16]]991 - [[i64, u64], [u64, i64], [u8, u16, u32]]992 assert_instr: ["ldnt1{size_literal[2]}"]993 test: { load: 2 }994 compose:995 - MatchSize:996 - "{type[0]}"997 - default:998 LLVMLink:999 name: "ldnt1.gather.uxtw.{sve_type[1] as {type[2]}}"1000 return_type: "{sve_type[1] as {type[2]}}"1001 doubleword:1002 LLVMLink:1003 name: "ldnt1.gather.{sve_type[1] as {type[2]}}"1004 return_type: "{sve_type[1] as {type[2]}}"1005 - FnCall:1006 - "crate::intrinsics::simd::simd_cast"1007 - - FnCall: ["{llvm_link}", [$pg, $base, $offsets]]1008 - - Type: "{sve_type[1] as {type[2]}}"1009 - _10101011 - name: svldnt1s{size_literal[2]}_gather[_{type[0]}base]_offset_{type[1]}1012 attr: [*sve-unstable]1013 doc: Load {size[2]}-bit data and sign-extend, non-temporal1014 safety:1015 unsafe:1016 - pointer_offset: predicated1017 - dereference: predicated1018 - no_provenance: bases1019 - non_temporal1020 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "offset: i64"]1021 return_type: "{sve_type[1]}"1022 types:1023 - [u32, [i32, u32], [i8, i16]]1024 - [u64, [i64, u64], [i8, i16, i32]]1025 assert_instr: ["ldnt1s{size_literal[2]}"]1026 test: { load: 2 }1027 compose:1028 - LLVMLink:1029 name: "ldnt1.gather.scalar.offset.{sve_type[1] as {type[2]}}.{sve_type[0]}"1030 return_type: "{sve_type[1] as {type[2]}}"1031 - FnCall:1032 - "crate::intrinsics::simd::simd_cast"1033 - - FnCall: ["{llvm_link}", [$pg, $bases, $offset]]10341035 - name: svldnt1u{size_literal[2]}_gather[_{type[0]}base]_offset_{type[1]}1036 attr: [*sve-unstable]1037 doc: Load {size[2]}-bit data and zero-extend, non-temporal1038 safety:1039 unsafe:1040 - pointer_offset: predicated1041 - dereference: predicated1042 - no_provenance: bases1043 - non_temporal1044 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "offset: i64"]1045 return_type: "{sve_type[1]}"1046 types:1047 - [u32, [u32, i32], [u8, u16]]1048 - [u64, [u64, i64], [u8, u16, u32]]1049 assert_instr: ["ldnt1{size_literal[2]}"]1050 test: { load: 2 }1051 compose:1052 - LLVMLink:1053 name: "ldnt1.gather.scalar.offset.{sve_type[1] as {type[2]}}.{sve_type[0]}"1054 return_type: "{sve_type[1] as {type[2]}}"1055 - FnCall:1056 - "crate::intrinsics::simd::simd_cast"1057 - - FnCall: ["{llvm_link}", [$pg, $bases, $offset]]1058 - - Type: "{sve_type[1] as {type[2]}}"1059 - _10601061 - name: svldnt1s{size_literal[2]}_gather[_{type[0]}base]_{type[1]}1062 attr: [*sve-unstable]1063 doc: Load {size[2]}-bit data and sign-extend, non-temporal1064 safety:1065 unsafe:1066 - pointer_offset: predicated1067 - dereference: predicated1068 - no_provenance: bases1069 - non_temporal1070 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}"]1071 return_type: "{sve_type[1]}"1072 types:1073 - [u32, [i32, u32], [i8, i16]]1074 - [u64, [i64, u64], [i8, i16, i32]]1075 assert_instr: ["ldnt1s{size_literal[2]}"]1076 test: { load: 2 }1077 compose:1078 - FnCall:1079 - "svldnt1s{size_literal[2]}_gather_{type[0]}base_offset_{type[1]}"1080 - - $pg1081 - $bases1082 - 010831084 - name: svldnt1u{size_literal[2]}_gather[_{type[0]}base]_{type[1]}1085 attr: [*sve-unstable]1086 doc: Load {size[2]}-bit data and zero-extend, non-temporal1087 safety:1088 unsafe:1089 - pointer_offset: predicated1090 - dereference: predicated1091 - no_provenance: bases1092 - non_temporal1093 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}"]1094 return_type: "{sve_type[1]}"1095 types:1096 - [u32, [i32, u32], [u8, u16]]1097 - [u64, [i64, u64], [u8, u16, u32]]1098 assert_instr: ["ldnt1{size_literal[2]}"]1099 test: { load: 2 }1100 compose:1101 - FnCall:1102 - "svldnt1u{size_literal[2]}_gather_{type[0]}base_offset_{type[1]}"1103 - - $pg1104 - $bases1105 - 011061107 - name: svldnt1s{size_literal[2]}_gather[_{type[0]}base]_index_{type[1]}1108 attr: [*sve-unstable]1109 doc: Load {size[2]}-bit data and sign-extend, non-temporal1110 safety:1111 unsafe:1112 - pointer_offset: predicated1113 - dereference: predicated1114 - no_provenance: bases1115 - non_temporal1116 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "index: i64"]1117 return_type: "{sve_type[1]}"1118 types:1119 - [u32, [i32, u32], u16]1120 - [u64, [i64, u64], [u16, u32]]1121 assert_instr: ["ldnt1s{size_literal[2]}"]1122 test: { load: 2 }1123 compose:1124 - FnCall:1125 - "svldnt1s{size_literal[2]}_gather_{type[0]}base_offset_{type[1]}"1126 - - $pg1127 - $bases1128 - MethodCall: [$index, unchecked_shl, ["{size_in_bytes_log2[2]}"]]11291130 - name: svldnt1u{size_literal[2]}_gather[_{type[0]}base]_index_{type[1]}1131 attr: [*sve-unstable]1132 doc: Load {size[2]}-bit data and zero-extend, non-temporal1133 safety:1134 unsafe:1135 - pointer_offset: predicated1136 - dereference: predicated1137 - no_provenance: bases1138 - non_temporal1139 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "index: i64"]1140 return_type: "{sve_type[1]}"1141 types:1142 - [u32, [i32, u32], u16]1143 - [u64, [i64, u64], [u16, u32]]1144 assert_instr: ["ldnt1{size_literal[2]}"]1145 test: { load: 2 }1146 compose:1147 - FnCall:1148 - "svldnt1u{size_literal[2]}_gather_{type[0]}base_offset_{type[1]}"1149 - - $pg1150 - $bases1151 - MethodCall: [$index, unchecked_shl, ["{size_in_bytes_log2[2]}"]]11521153 - name: svstnt1_scatter_[{type[0]}]index[_{type[1]}]1154 attr: [*sve-unstable]1155 doc: Non-truncating store, non-temporal1156 safety:1157 unsafe:1158 - pointer_offset: predicated1159 - dereference: predicated1160 - non_temporal1161 arguments:1162 - "pg: {predicate[0]}"1163 - "base: *mut {type[1]}"1164 - "indices: {sve_type[0]}"1165 - "data: {sve_type[1]}"1166 types:1167 - [[i64, u64], [f64, i64, u64]]1168 assert_instr: ["stnt1{size_literal[0]}"]1169 test: { store: 1 }1170 compose:1171 - LLVMLink:1172 name: "stnt1.scatter.index.{sve_type[1]}"1173 arguments:1174 - "data: {sve_type[1]}"1175 - "pg: {predicate[0]}"1176 - "base: *mut {type[1]}"1177 - "indices: {sve_type[0]}"1178 - FnCall: ["{llvm_link}", [$data, $pg, $base, $indices]]11791180 - name: svstnt1_scatter_[{type[0]}]offset[_{type[1]}]1181 attr: [*sve-unstable]1182 doc: Non-truncating store, non-temporal1183 safety:1184 unsafe:1185 - pointer_offset: predicated1186 - dereference: predicated1187 - non_temporal1188 arguments:1189 - "pg: {predicate[0]}"1190 - "base: *mut {type[1]}"1191 - "offsets: {sve_type[0]}"1192 - "data: {sve_type[1]}"1193 types:1194 - [u32, [f32, i32, u32]]1195 - [[i64, u64], [f64, i64, u64]]1196 assert_instr: ["stnt1{size_literal[0]}"]1197 test: { store: 1 }1198 compose:1199 - MatchSize:1200 - "{type[0]}"1201 - default:1202 LLVMLink:1203 name: "stnt1.scatter.uxtw.{sve_type[1]}"1204 arguments:1205 - "data: {sve_type[1]}"1206 - "pg: {predicate[0]}"1207 - "base: *mut {type[1]}"1208 - "offsets: {sve_type[0]}"1209 doubleword:1210 LLVMLink:1211 name: "stnt1.scatter.{sve_type[1]}"1212 arguments:1213 - "data: {sve_type[1]}"1214 - "pg: {predicate[0]}"1215 - "base: *mut {type[1]}"1216 - "offsets: {sve_type[0]}"1217 - FnCall: ["{llvm_link}", [$data, $pg, $base, $offsets]]12181219 - name: svstnt1_scatter[_{type[0]}base]_offset[_{type[1]}]1220 attr: [*sve-unstable]1221 doc: Non-truncating store, non-temporal1222 safety:1223 unsafe:1224 - pointer_offset: predicated1225 - dereference: predicated1226 - no_provenance: bases1227 - non_temporal1228 arguments:1229 - "pg: {predicate[0]}"1230 - "bases: {sve_type[0]}"1231 - "offset: i64"1232 - "data: {sve_type[1]}"1233 types:1234 - [u32, [f32, i32, u32]]1235 - [u64, [f64, i64, u64]]1236 assert_instr: ["stnt1{size_literal[0]}"]1237 test: { store: 1 }1238 compose:1239 - LLVMLink:1240 arguments:1241 - "data: {sve_type[1]}"1242 - "pg: {predicate[0]}"1243 - "bases: {sve_type[0]}"1244 - "offset: i64"1245 name: "stnt1.scatter.scalar.offset.{sve_type[1]}.{sve_type[0]}"1246 - FnCall: ["{llvm_link}", [$data, $pg, $bases, $offset]]12471248 - name: svstnt1_scatter[_{type[0]}base_{type[1]}]1249 attr: [*sve-unstable]1250 doc: Non-truncating store, non-temporal1251 safety:1252 unsafe:1253 - pointer_offset: predicated1254 - dereference: predicated1255 - no_provenance: bases1256 - non_temporal1257 arguments:1258 ["pg: {predicate[0]}", "bases: {sve_type[0]}", "data: {sve_type[1]}"]1259 types:1260 - [u32, [f32, i32, u32]]1261 - [u64, [f64, i64, u64]]1262 assert_instr: ["stnt1{size_literal[0]}"]1263 test: { store: 1 }1264 compose:1265 - FnCall:1266 - "svstnt1_scatter_{type[0]}base_offset_{type[1]}"1267 - - $pg1268 - $bases1269 - 01270 - $data12711272 - name: svstnt1_scatter[_{type[0]}base]_index[_{type[1]}]1273 attr: [*sve-unstable]1274 doc: Non-truncating store, non-temporal1275 safety:1276 unsafe:1277 - pointer_offset: predicated1278 - dereference: predicated1279 - no_provenance: bases1280 - non_temporal1281 arguments:1282 - "pg: {predicate[0]}"1283 - "bases: {sve_type[0]}"1284 - "index: i64"1285 - "data: {sve_type[1]}"1286 types:1287 - [u32, [f32, i32, u32]]1288 - [u64, [f64, i64, u64]]1289 assert_instr: ["stnt1{size_literal[0]}"]1290 test: { store: 1 }1291 compose:1292 - FnCall:1293 - "svstnt1_scatter_{type[0]}base_offset_{type[1]}"1294 - - $pg1295 - $bases1296 - MethodCall: [$index, unchecked_shl, ["{size_in_bytes_log2[0]}"]]1297 - $data12981299 - name: svstnt1{size_literal[2]}_scatter_[{type[0]}]index[_{type[1]}]1300 attr: [*sve-unstable]1301 doc: Truncate to {size[2]} bits and store, non-temporal1302 safety:1303 unsafe:1304 - pointer_offset: predicated1305 - dereference: predicated1306 - non_temporal1307 arguments:1308 - "pg: {predicate[0]}"1309 - "base: *mut {type[2]}"1310 - "indices: {sve_type[0]}"1311 - "data: {sve_type[1]}"1312 types:1313 - [[i64, u64], i64, [i16, i32]]1314 - [[i64, u64], u64, [u16, u32]]1315 assert_instr: ["stnt1{size_literal[2]}"]1316 test: { store: 2 }1317 compose:1318 - LLVMLink:1319 name: "stnt1.scatter.index.{sve_type[1] as {type[2]}}"1320 arguments:1321 - "data: {sve_type[1] as {type[2]}}"1322 - "pg: {predicate[0]}"1323 - "base: *mut {type[2]}"1324 - "indices: {sve_type[0]}"1325 - FnCall:1326 - "{llvm_link}"1327 - [FnCall: ["crate::intrinsics::simd::simd_cast", [$data]], $pg, $base, $indices]13281329 - name: svstnt1{size_literal[2]}_scatter_[{type[0]}]offset[_{type[1]}]1330 attr: [*sve-unstable]1331 doc: Truncate to {size[2]} bits and store, non-temporal1332 safety:1333 unsafe:1334 - pointer_offset: predicated1335 - dereference: predicated1336 - non_temporal1337 arguments:1338 - "pg: {predicate[0]}"1339 - "base: *mut {type[2]}"1340 - "offsets: {sve_type[0]}"1341 - "data: {sve_type[1]}"1342 types:1343 - [u32, i32, [i8, i16]]1344 - [u32, u32, [u8, u16]]1345 - [[i64, u64], i64, [i8, i16, i32]]1346 - [[i64, u64], u64, [u8, u16, u32]]1347 assert_instr: ["stnt1{size_literal[2]}"]1348 test: { store: 2 }1349 compose:1350 - MatchSize:1351 - "{type[0]}"1352 - default:1353 LLVMLink:1354 name: "stnt1.scatter.uxtw.{sve_type[1] as {type[2]}}"1355 arguments:1356 - "data: {sve_type[1] as {type[2]}}"1357 - "pg: {predicate[0]}"1358 - "base: *mut {type[2]}"1359 - "offsets: {sve_type[0]}"1360 doubleword:1361 LLVMLink:1362 name: "stnt1.scatter.{sve_type[1] as {type[2]}}"1363 arguments:1364 - "data: {sve_type[1] as {type[2]}}"1365 - "pg: {predicate[0]}"1366 - "base: *mut {type[2]}"1367 - "offsets: {sve_type[0]}"1368 - FnCall:1369 - "{llvm_link}"1370 - [FnCall: ["crate::intrinsics::simd::simd_cast", [$data]], $pg, $base, $offsets]13711372 - name: svstnt1{size_literal[2]}_scatter[_{type[0]}base]_offset[_{type[1]}]1373 attr: [*sve-unstable]1374 doc: Truncate to {size[2]} bits and store, non-temporal1375 safety:1376 unsafe:1377 - pointer_offset: predicated1378 - dereference: predicated1379 - no_provenance: bases1380 - non_temporal1381 arguments:1382 - "pg: {predicate[0]}"1383 - "bases: {sve_type[0]}"1384 - "offset: i64"1385 - "data: {sve_type[1]}"1386 types:1387 - [u32, [i32, u32], [i8, i16]]1388 - [u64, [i64, u64], [i8, i16, i32]]1389 assert_instr: ["stnt1{size_literal[2]}"]1390 test: { store: 2 }1391 compose:1392 - LLVMLink:1393 name: "stnt1.scatter.scalar.offset.{sve_type[1] as {type[2]}}.{sve_type[0]}"1394 arguments:1395 - "data: {sve_type[1] as {type[2]}}"1396 - "pg: {predicate[0]}"1397 - "bases: {sve_type[0]}"1398 - "offset: i64"1399 - FnCall:1400 - "{llvm_link}"1401 - [FnCall: ["crate::intrinsics::simd::simd_cast", [$data]], $pg, $bases, $offset]14021403 - name: svstnt1{size_literal[2]}_scatter[_{type[0]}base_{type[1]}]1404 attr: [*sve-unstable]1405 doc: Truncate to {size[2]} bits and store, non-temporal1406 safety:1407 unsafe:1408 - pointer_offset: predicated1409 - dereference: predicated1410 - no_provenance: bases1411 - non_temporal1412 arguments:1413 ["pg: {predicate[0]}", "bases: {sve_type[0]}", "data: {sve_type[1]}"]1414 types:1415 - [u32, [i32, u32], [i8, i16]]1416 - [u64, [i64, u64], [i8, i16, i32]]1417 assert_instr: ["stnt1{size_literal[2]}"]1418 test: { store: 2 }1419 compose:1420 - FnCall:1421 - "svstnt1{size_literal[2]}_scatter_{type[0]}base_offset_{type[1]}"1422 - - $pg1423 - $bases1424 - 01425 - $data14261427 - name: svstnt1{size_literal[2]}_scatter[_{type[0]}base]_index[_{type[1]}]1428 attr: [*sve-unstable]1429 doc: Truncate to {size[2]} bits and store, non-temporal1430 safety:1431 unsafe:1432 - pointer_offset: predicated1433 - dereference: predicated1434 - no_provenance: bases1435 - non_temporal1436 arguments:1437 - "pg: {predicate[0]}"1438 - "bases: {sve_type[0]}"1439 - "index: i64"1440 - "data: {sve_type[1]}"1441 types:1442 - [u32, [i32, u32], i16]1443 - [u64, [i64, u64], [i16, i32]]1444 assert_instr: ["stnt1{size_literal[2]}"]1445 test: { store: 2 }1446 compose:1447 - FnCall:1448 - "svstnt1{size_literal[2]}_scatter_{type[0]}base_offset_{type[1]}"1449 - - $pg1450 - $bases1451 - MethodCall: [$index, unchecked_shl, ["{size_in_bytes_log2[2]}"]]1452 - $data14531454 - name: svaba[{_n}_{type}]1455 attr: [*sve-unstable]1456 doc: Absolute difference and accumulate1457 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]1458 return_type: "{sve_type}"1459 types: [i8, i16, i32, i64, u8, u16, u32, u64]1460 assert_instr: ["{type_kind}aba"]1461 n_variant_op: op31462 compose:1463 - LLVMLink: { name: "{type_kind}aba.{sve_type}" }14641465 - name: svqabs[_{type}]{_mxz}1466 attr: [*sve-unstable]1467 doc: Saturating absolute value1468 arguments: ["inactive: {sve_type}", "pg: {predicate}", "op: {sve_type}"]1469 return_type: "{sve_type}"1470 types: [i8, i16, i32, i64]1471 assert_instr: [sqabs]1472 zeroing_method: { drop: inactive }1473 compose:1474 - LLVMLink: { name: "sqabs.{sve_type}" }14751476 - name: svabdlb[{_n}_{type[0]}]1477 attr: [*sve-unstable]1478 doc: Absolute difference long (bottom)1479 arguments: ["op1: {sve_type[1]}", "op2: {sve_type[1]}"]1480 return_type: "{sve_type[0]}"1481 types:1482 - [i16, i8]1483 - [i32, i16]1484 - [i64, i32]1485 - [u16, u8]1486 - [u32, u16]1487 - [u64, u32]1488 assert_instr: ["{type_kind[0].su}abdlb"]1489 n_variant_op: op21490 compose:1491 - LLVMLink: { name: "{type_kind[0].su}abdlb.{sve_type[0]}" }14921493 - name: svabdlt[{_n}_{type[0]}]1494 attr: [*sve-unstable]1495 doc: Absolute difference long (top)1496 arguments: ["op1: {sve_type[1]}", "op2: {sve_type[1]}"]1497 return_type: "{sve_type[0]}"1498 types:1499 - [i16, i8]1500 - [i32, i16]1501 - [i64, i32]1502 - [u16, u8]1503 - [u32, u16]1504 - [u64, u32]1505 assert_instr: ["{type_kind[0].su}abdlt"]1506 n_variant_op: op21507 compose:1508 - LLVMLink: { name: "{type_kind[0].su}abdlt.{sve_type[0]}" }15091510 - name: svabalb[{_n}_{type[0]}]1511 attr: [*sve-unstable]1512 doc: Absolute difference long (bottom)1513 arguments:1514 ["op1: {sve_type[0]}", "op2: {sve_type[1]}", "op3: {sve_type[1]}"]1515 return_type: "{sve_type[0]}"1516 types:1517 - [i16, i8]1518 - [i32, i16]1519 - [i64, i32]1520 - [u16, u8]1521 - [u32, u16]1522 - [u64, u32]1523 assert_instr: ["{type_kind[0].su}abalb"]1524 n_variant_op: op31525 compose:1526 - LLVMLink: { name: "{type_kind[0].su}abalb.{sve_type[0]}" }15271528 - name: svabalt[{_n}_{type[0]}]1529 attr: [*sve-unstable]1530 doc: Absolute difference long (top)1531 arguments:1532 ["op1: {sve_type[0]}", "op2: {sve_type[1]}", "op3: {sve_type[1]}"]1533 return_type: "{sve_type[0]}"1534 types:1535 - [i16, i8]1536 - [i32, i16]1537 - [i64, i32]1538 - [u16, u8]1539 - [u32, u16]1540 - [u64, u32]1541 assert_instr: ["{type_kind[0].su}abalt"]1542 n_variant_op: op31543 compose:1544 - LLVMLink: { name: "{type_kind[0].su}abalt.{sve_type[0]}" }15451546 - name: svbcax[{_n}_{type}]1547 attr: [*sve-unstable]1548 doc: Bitwise clear and exclusive OR1549 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]1550 return_type: "{sve_type}"1551 assert_instr: [bcax]1552 types: [i8, i16, i32, i64, u8, u16, u32, u64]1553 n_variant_op: op31554 compose:1555 - LLVMLink: { name: "bcax.{sve_type}" }15561557 - name: sveorbt[{_n}_{type}]1558 attr: [*sve-unstable]1559 doc: Interleaving exclusive OR (bottom, top)1560 arguments: ["odd: {sve_type}", "op1: {sve_type}", "op2: {sve_type}"]1561 return_type: "{sve_type}"1562 assert_instr: [eorbt]1563 types: [i8, i16, i32, i64, u8, u16, u32, u64]1564 n_variant_op: op21565 compose:1566 - LLVMLink: { name: "eorbt.{sve_type}" }15671568 - name: sveortb[{_n}_{type}]1569 attr: [*sve-unstable]1570 doc: Interleaving exclusive OR (top, bottom)1571 arguments: ["even: {sve_type}", "op1: {sve_type}", "op2: {sve_type}"]1572 return_type: "{sve_type}"1573 assert_instr: [eortb]1574 types: [i8, i16, i32, i64, u8, u16, u32, u64]1575 n_variant_op: op21576 compose:1577 - LLVMLink: { name: "eortb.{sve_type}" }15781579 - name: sveor3[{_n}_{type}]1580 attr: [*sve-unstable]1581 doc: Bitwise exclusive OR of three vectors1582 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]1583 return_type: "{sve_type}"1584 assert_instr: [eor3]1585 types: [i8, i16, i32, i64, u8, u16, u32, u64]1586 n_variant_op: op31587 compose:1588 - LLVMLink: { name: "eor3.{sve_type}" }15891590 - name: svbsl[{_n}_{type}]1591 attr: [*sve-unstable]1592 doc: Bitwise select1593 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]1594 return_type: "{sve_type}"1595 assert_instr: [bsl]1596 types: [i8, i16, i32, i64, u8, u16, u32, u64]1597 n_variant_op: op31598 compose:1599 - LLVMLink: { name: "bsl.{sve_type}" }16001601 - name: svbsl1n[{_n}_{type}]1602 attr: [*sve-unstable]1603 doc: Bitwise select with first input inverted1604 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]1605 return_type: "{sve_type}"1606 assert_instr: [bsl1n]1607 types: [i8, i16, i32, i64, u8, u16, u32, u64]1608 n_variant_op: op31609 compose:1610 - LLVMLink: { name: "bsl1n.{sve_type}" }16111612 - name: svbsl2n[{_n}_{type}]1613 attr: [*sve-unstable]1614 doc: Bitwise select with second input inverted1615 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]1616 return_type: "{sve_type}"1617 assert_instr: [bsl2n]1618 types: [i8, i16, i32, i64, u8, u16, u32, u64]1619 n_variant_op: op31620 compose:1621 - LLVMLink: { name: "bsl2n.{sve_type}" }16221623 - name: svnbsl[{_n}_{type}]1624 attr: [*sve-unstable]1625 doc: Bitwise select1626 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]1627 return_type: "{sve_type}"1628 assert_instr: [nbsl]1629 types: [i8, i16, i32, i64, u8, u16, u32, u64]1630 n_variant_op: op31631 compose:1632 - LLVMLink: { name: "nbsl.{sve_type}" }16331634 - name: svxar[_n_{type}]1635 attr: [*sve-unstable]1636 doc: Bitwise exclusive OR and rotate right1637 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1638 return_type: "{sve_type}"1639 static_defs: ["const IMM3: i32"]1640 constraints: [{ variable: IMM3, range: ["1", "{size}"] }]1641 assert_instr: [[xar, "IMM3 = 1"]]1642 types: [i8, i16, i32, i64, u8, u16, u32, u64]1643 compose:1644 - LLVMLink:1645 name: "xar.{sve_type}"1646 arguments: ["op1: {sve_type}", "op2: {sve_type}", "imm3: i32"]1647 - FnCall: ["{llvm_link}", [$op1, $op2, $IMM3]]16481649 - name: svrax1[_{type}]1650 attr: [*sve-unstable]1651 doc: Bitwise rotate left by 1 and exclusive OR1652 target_features: [sve2-sha3]1653 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1654 return_type: "{sve_type}"1655 assert_instr: [rax1]1656 types: [i64, u64]1657 compose:1658 - LLVMLink: { name: "rax1" }16591660 - name: svshllb[_n_{type[0]}]1661 attr: [*sve-unstable]1662 doc: Shift left long (bottom)1663 arguments: ["op1: {sve_type[1]}"]1664 return_type: "{sve_type[0]}"1665 static_defs: ["const IMM2: i32"]1666 constraints: [{ variable: IMM2, range: ["0", "{size_minus_one[1]}"] }]1667 types:1668 - [i16, i8]1669 - [i32, i16]1670 - [i64, i32]1671 - [u16, u8]1672 - [u32, u16]1673 - [u64, u32]1674 assert_instr: [["{type_kind[0].su}shllb", "IMM2 = 0"]]1675 compose:1676 - LLVMLink:1677 name: "{type_kind[0].su}shllb.{sve_type[0]}"1678 arguments: ["op1: {sve_type[1]}", "imm2: i32"]1679 - FnCall: ["{llvm_link}", [$op1, $IMM2]]16801681 - name: svshllt[_n_{type[0]}]1682 attr: [*sve-unstable]1683 doc: Shift left long (top)1684 arguments: ["op1: {sve_type[1]}"]1685 return_type: "{sve_type[0]}"1686 static_defs: ["const IMM2: i32"]1687 constraints: [{ variable: IMM2, range: ["0", "{size_minus_one[1]}"] }]1688 types:1689 - [i16, i8]1690 - [i32, i16]1691 - [i64, i32]1692 - [u16, u8]1693 - [u32, u16]1694 - [u64, u32]1695 assert_instr: [["{type_kind[0].su}shllt", "IMM2 = 0"]]1696 compose:1697 - LLVMLink:1698 name: "{type_kind[0].su}shllt.{sve_type[0]}"1699 arguments: ["op1: {sve_type[1]}", "imm2: i32"]1700 - FnCall: ["{llvm_link}", [$op1, $IMM2]]17011702 - name: svrshl[{_n}_{type[0]}]{_mxz}1703 attr: [*sve-unstable]1704 doc: Rounding shift left1705 arguments:1706 ["pg: {predicate[0]}", "op1: {sve_type[0]}", "op2: {sve_type[1]}"]1707 return_type: "{sve_type[0]}"1708 types:1709 - [[i8, u8], i8]1710 - [[i16, u16], i16]1711 - [[i32, u32], i32]1712 - [[i64, u64], i64]1713 assert_instr: ["{type_kind[0].su}rshl"]1714 zeroing_method: { select: op1 }1715 n_variant_op: op21716 compose:1717 - LLVMLink: { name: "{type_kind[0].su}rshl.{sve_type[0]}" }17181719 - name: svqrshl[{_n}_{type[0]}]{_mxz}1720 attr: [*sve-unstable]1721 doc: Saturating rounding shift left1722 arguments:1723 ["pg: {predicate[0]}", "op1: {sve_type[0]}", "op2: {sve_type[1]}"]1724 return_type: "{sve_type[0]}"1725 types:1726 - [[i8, u8], i8]1727 - [[i16, u16], i16]1728 - [[i32, u32], i32]1729 - [[i64, u64], i64]1730 assert_instr: ["{type_kind[0].su}qrshl"]1731 zeroing_method: { select: op1 }1732 n_variant_op: op21733 compose:1734 - LLVMLink: { name: "{type_kind[0].su}qrshl.{sve_type[0]}" }17351736 - name: svqshl[{_n}_{type[0]}]{_mxz}1737 attr: [*sve-unstable]1738 doc: Saturating shift left1739 arguments:1740 ["pg: {predicate[0]}", "op1: {sve_type[0]}", "op2: {sve_type[1]}"]1741 return_type: "{sve_type[0]}"1742 types:1743 - [[i8, u8], i8]1744 - [[i16, u16], i16]1745 - [[i32, u32], i32]1746 - [[i64, u64], i64]1747 assert_instr: ["{type_kind[0].su}qshl"]1748 zeroing_method: { select: op1 }1749 n_variant_op: op21750 compose:1751 - LLVMLink: { name: "{type_kind[0].su}qshl.{sve_type[0]}" }17521753 - name: svqshlu[_n_{type[0]}]{_mxz}1754 attr: [*sve-unstable]1755 doc: Saturating shift left unsigned1756 arguments: ["pg: {predicate[0]}", "op1: {sve_type[0]}"]1757 return_type: "{sve_type[1]}"1758 static_defs: ["const IMM2: i32"]1759 constraints: [{ variable: IMM2, range: ["0", "{size_minus_one[1]}"] }]1760 types:1761 - [i8, u8]1762 - [i16, u16]1763 - [i32, u32]1764 - [i64, u64]1765 assert_instr: [[sqshlu, "IMM2 = 0"]]1766 zeroing_method: { select: op1 }1767 compose:1768 - LLVMLink:1769 name: "sqshlu.{sve_type[0]}"1770 arguments: ["pg: {predicate[0]}", "op1: {sve_type[0]}", "imm2: i32"]1771 - FnCall: ["{llvm_link}", [$pg, $op1, $IMM2]]17721773 - name: svsli[_n_{type}]1774 attr: [*sve-unstable]1775 doc: Shift left and insert1776 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1777 return_type: "{sve_type}"1778 static_defs: ["const IMM3: i32"]1779 constraints: [{ variable: IMM3, range: ["0", "{size_minus_one}"] }]1780 types: [i8, i16, i32, i64, u8, u16, u32, u64]1781 assert_instr: [[sli, "IMM3 = 0"]]1782 compose:1783 - LLVMLink:1784 name: "sli.{sve_type}"1785 arguments: ["op1: {sve_type}", "op2: {sve_type}", "imm3: i32"]1786 - FnCall: ["{llvm_link}", [$op1, $op2, $IMM3]]17871788 - name: svrshr[_n_{type}]{_mxz}1789 attr: [*sve-unstable]1790 doc: Rounding shift right1791 arguments: ["pg: {predicate}", "op1: {sve_type}"]1792 return_type: "{sve_type}"1793 static_defs: ["const IMM2: i32"]1794 constraints: [{ variable: IMM2, range: ["1", "{size}"] }]1795 types: [i8, i16, i32, i64, u8, u16, u32, u64]1796 assert_instr: [["{type_kind.su}rshr", "IMM2 = 1"]]1797 zeroing_method: { select: op1 }1798 compose:1799 - LLVMLink:1800 name: "{type_kind.su}rshr.{sve_type}"1801 arguments: ["pg: {predicate}", "op1: {sve_type}", "imm2: i32"]1802 - FnCall: ["{llvm_link}", [$pg, $op1, $IMM2]]18031804 - name: svrsra[_n_{type}]1805 attr: [*sve-unstable]1806 doc: Rounding shift right and accumulate1807 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1808 return_type: "{sve_type}"1809 static_defs: ["const IMM3: i32"]1810 constraints: [{ variable: IMM3, range: ["1", "{size}"] }]1811 types: [i8, i16, i32, i64, u8, u16, u32, u64]1812 assert_instr: [["{type_kind.su}rsra", "IMM3 = 1"]]1813 compose:1814 - LLVMLink:1815 name: "{type_kind.su}rsra.{sve_type}"1816 arguments: ["op1: {sve_type}", "op2: {sve_type}", "imm3: i32"]1817 - FnCall: ["{llvm_link}", [$op1, $op2, $IMM3]]18181819 - name: svrshrnb[_n_{type[0]}]1820 attr: [*sve-unstable]1821 doc: Rounding shift right narrow (bottom)1822 arguments: ["op1: {sve_type[0]}"]1823 return_type: "{sve_type[1]}"1824 static_defs: ["const IMM2: i32"]1825 constraints: [{ variable: IMM2, range: ["1", "{size[1]}"] }]1826 types:1827 - [i16, i8]1828 - [i32, i16]1829 - [i64, i32]1830 - [u16, u8]1831 - [u32, u16]1832 - [u64, u32]1833 assert_instr: [[rshrnb, "IMM2 = 1"]]1834 compose:1835 - LLVMLink:1836 name: "rshrnb.{sve_type[0]}"1837 arguments: ["op1: {sve_type[0]}", "imm2: i32"]1838 - FnCall: ["{llvm_link}", [$op1, $IMM2]]18391840 - name: svrshrnt[_n_{type[0]}]1841 attr: [*sve-unstable]1842 doc: Rounding shift right narrow (top)1843 arguments: ["even: {sve_type[1]}", "op1: {sve_type[0]}"]1844 return_type: "{sve_type[1]}"1845 static_defs: ["const IMM2: i32"]1846 constraints: [{ variable: IMM2, range: ["1", "{size[1]}"] }]1847 types:1848 - [i16, i8]1849 - [i32, i16]1850 - [i64, i32]1851 - [u16, u8]1852 - [u32, u16]1853 - [u64, u32]1854 assert_instr: [[rshrnt, "IMM2 = 1"]]1855 compose:1856 - LLVMLink:1857 name: "rshrnt.{sve_type[0]}"1858 arguments: ["even: {sve_type[1]}", "op1: {sve_type[0]}", "imm2: i32"]1859 - FnCall: ["{llvm_link}", [$even, $op1, $IMM2]]18601861 - name: svqrshrnb[_n_{type[0]}]1862 attr: [*sve-unstable]1863 doc: Saturating rounding shift right narrow (bottom)1864 arguments: ["op1: {sve_type[0]}"]1865 return_type: "{sve_type[1]}"1866 static_defs: ["const IMM2: i32"]1867 constraints: [{ variable: IMM2, range: ["1", "{size[1]}"] }]1868 types:1869 - [i16, i8]1870 - [i32, i16]1871 - [i64, i32]1872 - [u16, u8]1873 - [u32, u16]1874 - [u64, u32]1875 assert_instr: [["{type_kind[0].su}qrshrnb", "IMM2 = 1"]]1876 compose:1877 - LLVMLink:1878 name: "{type_kind[0].su}qrshrnb.{sve_type[0]}"1879 arguments: ["op1: {sve_type[0]}", "imm2: i32"]1880 - FnCall: ["{llvm_link}", [$op1, $IMM2]]18811882 - name: svqrshrnt[_n_{type[0]}]1883 attr: [*sve-unstable]1884 doc: Saturating rounding shift right narrow (top)1885 arguments: ["even: {sve_type[1]}", "op1: {sve_type[0]}"]1886 return_type: "{sve_type[1]}"1887 static_defs: ["const IMM2: i32"]1888 constraints: [{ variable: IMM2, range: ["1", "{size[1]}"] }]1889 types:1890 - [i16, i8]1891 - [i32, i16]1892 - [i64, i32]1893 - [u16, u8]1894 - [u32, u16]1895 - [u64, u32]1896 assert_instr: [["{type_kind[0].su}qrshrnt", "IMM2 = 1"]]1897 compose:1898 - LLVMLink:1899 name: "{type_kind[0].su}qrshrnt.{sve_type[0]}"1900 arguments: ["even: {sve_type[1]}", "op1: {sve_type[0]}", "imm2: i32"]1901 - FnCall: ["{llvm_link}", [$even, $op1, $IMM2]]19021903 - name: svqrshrunb[_n_{type[0]}]1904 attr: [*sve-unstable]1905 doc: Saturating rounding shift right unsigned narrow (bottom)1906 arguments: ["op1: {sve_type[0]}"]1907 return_type: "{sve_type[1]}"1908 static_defs: ["const IMM2: i32"]1909 constraints: [{ variable: IMM2, range: ["1", "{size[1]}"] }]1910 types:1911 - [i16, u8]1912 - [i32, u16]1913 - [i64, u32]1914 assert_instr: [[sqrshrunb, "IMM2 = 1"]]1915 compose:1916 - LLVMLink:1917 name: "sqrshrunb.{sve_type[0]}"1918 arguments: ["op1: {sve_type[0]}", "imm2: i32"]1919 - FnCall: ["{llvm_link}", [$op1, $IMM2]]19201921 - name: svqrshrunt[_n_{type[0]}]1922 attr: [*sve-unstable]1923 doc: Saturating rounding shift right unsigned narrow (top)1924 arguments: ["even: {sve_type[1]}", "op1: {sve_type[0]}"]1925 return_type: "{sve_type[1]}"1926 static_defs: ["const IMM2: i32"]1927 constraints: [{ variable: IMM2, range: ["1", "{size[1]}"] }]1928 types:1929 - [i16, u8]1930 - [i32, u16]1931 - [i64, u32]1932 assert_instr: [[sqrshrunt, "IMM2 = 1"]]1933 compose:1934 - LLVMLink:1935 name: "sqrshrunt.{sve_type[0]}"1936 arguments: ["even: {sve_type[1]}", "op1: {sve_type[0]}", "imm2: i32"]1937 - FnCall: ["{llvm_link}", [$even, $op1, $IMM2]]19381939 - name: svqshrnb[_n_{type[0]}]1940 attr: [*sve-unstable]1941 doc: Saturating shift right narrow (bottom)1942 arguments: ["op1: {sve_type[0]}"]1943 return_type: "{sve_type[1]}"1944 static_defs: ["const IMM2: i32"]1945 constraints: [{ variable: IMM2, range: ["1", "{size[1]}"] }]1946 types:1947 - [i16, i8]1948 - [i32, i16]1949 - [i64, i32]1950 - [u16, u8]1951 - [u32, u16]1952 - [u64, u32]1953 assert_instr: [["{type_kind[0].su}qshrnb", "IMM2 = 1"]]1954 compose:1955 - LLVMLink:1956 name: "{type_kind[0].su}qshrnb.{sve_type[0]}"1957 arguments: ["op1: {sve_type[0]}", "imm2: i32"]1958 - FnCall: ["{llvm_link}", [$op1, $IMM2]]19591960 - name: svqshrnt[_n_{type[0]}]1961 attr: [*sve-unstable]1962 doc: Saturating shift right narrow (top)1963 arguments: ["even: {sve_type[1]}", "op1: {sve_type[0]}"]1964 return_type: "{sve_type[1]}"1965 static_defs: ["const IMM2: i32"]1966 constraints: [{ variable: IMM2, range: ["1", "{size[1]}"] }]1967 types:1968 - [i16, i8]1969 - [i32, i16]1970 - [i64, i32]1971 - [u16, u8]1972 - [u32, u16]1973 - [u64, u32]1974 assert_instr: [["{type_kind[0].su}qshrnt", "IMM2 = 1"]]1975 compose:1976 - LLVMLink:1977 name: "{type_kind[0].su}qshrnt.{sve_type[0]}"1978 arguments: ["even: {sve_type[1]}", "op1: {sve_type[0]}", "imm2: i32"]1979 - FnCall: ["{llvm_link}", [$even, $op1, $IMM2]]19801981 - name: svqshrunb[_n_{type[0]}]1982 attr: [*sve-unstable]1983 doc: Saturating shift right unsigned narrow (bottom)1984 arguments: ["op1: {sve_type[0]}"]1985 return_type: "{sve_type[1]}"1986 static_defs: ["const IMM2: i32"]1987 constraints: [{ variable: IMM2, range: ["1", "{size[1]}"] }]1988 types:1989 - [i16, u8]1990 - [i32, u16]1991 - [i64, u32]1992 assert_instr: [[sqshrunb, "IMM2 = 1"]]1993 compose:1994 - LLVMLink:1995 name: "sqshrunb.{sve_type[0]}"1996 arguments: ["op1: {sve_type[0]}", "imm2: i32"]1997 - FnCall: ["{llvm_link}", [$op1, $IMM2]]19981999 - name: svqshrunt[_n_{type[0]}]2000 attr: [*sve-unstable]
Findings
✓ No findings reported for this file.