library/stdarch/crates/stdarch-gen-arm/spec/sve2/aarch64.spec.yml YAML 3,207 lines View on github.com → Search inside
File is large — showing lines 1–2,000 of 3,207.
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.

Get this view in your editor

Same data, no extra tab — call code_get_file + code_get_findings over MCP from Claude/Cursor/Copilot.