Text file src/simd/archsimd/_gen/simdgen/ops/Converts/go.yaml

     1  !sum
     2  # Float <-> Int conversions
     3  # float32 -> int32
     4  - go: ConvertToInt32
     5    regexpTag: "convert"
     6    asm: "VCVTTP[SD]2DQ"
     7    in:
     8    - &fp
     9      go: $t
    10      base: float
    11    out:
    12    - &i32
    13      go: $u
    14      base: int
    15      elemBits: 32
    16  # float32 -> uint32
    17  - go: ConvertToUint32
    18    regexpTag: "convert"
    19    asm: "VCVTTP[SD]2UDQ"
    20    in:
    21    - *fp
    22    out:
    23    - &u32
    24      go: $u
    25      base: uint
    26      elemBits: 32
    27  # float32|float64 -> int64
    28  - go: ConvertToInt64
    29    regexpTag: "convert"
    30    asm: "VCVTTPD2QQ"
    31    in:
    32    - *fp
    33    out:
    34    - &i64
    35      go: $u
    36      base: int
    37      elemBits: 64
    38  - go: ConvertToInt64
    39    regexpTag: "convert"
    40    asm: "VCVTTPS2QQ"
    41    in:
    42    - *fp
    43    out:
    44    - go: $u
    45      base: int
    46      elemBits: 64
    47      bits: 256|512
    48  # float32|float64 -> uint64
    49  - go: ConvertToUint64
    50    regexpTag: "convert"
    51    asm: "VCVTTPD2UQQ"
    52    in:
    53    - *fp
    54    out:
    55    - &u64
    56      go: $u
    57      base: uint
    58      elemBits: 64
    59  - go: ConvertToUint64
    60    regexpTag: "convert"
    61    asm: "VCVTTPS2UQQ"
    62    in:
    63    - *fp
    64    out:
    65    - go: $u
    66      base: uint
    67      elemBits: 64
    68      bits: 256|512
    69  # int -> float32
    70  - go: ConvertToFloat32
    71    regexpTag: "convert"
    72    asm: "VCVT[DQ]Q2PS"
    73    in: &int
    74    - go: $i
    75      base: int
    76    out:
    77    - *fp
    78  # int -> float64
    79  - go: ConvertToFloat64
    80    regexpTag: "convert"
    81    asm: "VCVTQQ2PD"
    82    in: *int
    83    out:
    84    - *fp
    85  - go: ConvertToFloat64
    86    regexpTag: "convert"
    87    asm: "VCVTDQ2PD"
    88    in: *int
    89    out:
    90    - base: float
    91      bits: 256|512
    92  # uint -> float32
    93  - go: ConvertToFloat32
    94    regexpTag: "convert"
    95    asm: "VCVTU[DQ]Q2PS"
    96    in: &uint
    97    - go: $u
    98      base: uint
    99    out:
   100    - *fp
   101  # uint -> float64
   102  - go: ConvertToFloat64
   103    regexpTag: "convert"
   104    asm: "VCVTUQQ2PD"
   105    in: *uint
   106    out:
   107    - *fp
   108  - go: ConvertToFloat64
   109    regexpTag: "convert"
   110    asm: "VCVTUDQ2PD"
   111    in: *uint
   112    out:
   113    - base: float
   114      bits: 256|512
   115  # float64 -> float32
   116  - go: ConvertToFloat32
   117    regexpTag: "convert"
   118    asm: "VCVTPD2PS"
   119    addDoc:
   120      !string |-
   121      // The result vector's elements are rounded to the nearest value.
   122    in: &fp64
   123    - base: float
   124      elemBits: 64
   125    out: &fp32
   126    - base: float
   127      elemBits: 32
   128  # float32 -> float64
   129  - go: ConvertToFloat64
   130    regexpTag: "convert"
   131    asm: "VCVTPS2PD"
   132    in: *fp32
   133    out:
   134    - base: float
   135      elemBits: 64
   136      bits: 256|512
   137  
   138  # Widening integer conversions.
   139  # uint8 -> uint16
   140  - go: ExtendToUint16
   141    regexpTag: "convert"
   142    asm: "VPMOVZXBW"
   143    in:
   144    - &u8x16
   145      base: uint
   146      elemBits: 8
   147      bits: 128
   148    out:
   149    - &u16x16
   150      base: uint
   151      elemBits: 16
   152      bits: 256
   153  - go: ExtendToUint16
   154    regexpTag: "convert"
   155    asm: "VPMOVZXBW"
   156    in:
   157    - &u8x32
   158      base: uint
   159      elemBits: 8
   160      bits: 256
   161    out:
   162    - &u16x32
   163      base: uint
   164      elemBits: 16
   165      bits: 512
   166  # int8 -> int16
   167  - go: ExtendToInt16
   168    regexpTag: "convert"
   169    asm: "VPMOVSXBW"
   170    in:
   171    - &i8x16
   172      base: int
   173      elemBits: 8
   174      bits: 128
   175    out:
   176    - &i16x16
   177      base: int
   178      elemBits: 16
   179      bits: 256
   180  - go: ExtendToInt16
   181    regexpTag: "convert"
   182    asm: "VPMOVSXBW"
   183    in:
   184    - &i8x32
   185      base: int
   186      elemBits: 8
   187      bits: 256
   188    out:
   189    - &i16x32
   190      base: int
   191      elemBits: 16
   192      bits: 512
   193  # uint16->uint32
   194  - go: ExtendToUint32
   195    regexpTag: "convert"
   196    asm: "VPMOVZXWD"
   197    in:
   198    - &u16x8
   199      base: uint
   200      elemBits: 16
   201      bits: 128
   202    out:
   203    - &u32x8
   204      base: uint
   205      elemBits: 32
   206      bits: 256
   207  - go: ExtendToUint32
   208    regexpTag: "convert"
   209    asm: "VPMOVZXWD"
   210    in:
   211    - *u16x16
   212    out:
   213    - &u32x16
   214      base: uint
   215      elemBits: 32
   216      bits: 512
   217  # int16->int32
   218  - go: ExtendToInt32
   219    regexpTag: "convert"
   220    asm: "VPMOVSXWD"
   221    in:
   222    - &i16x8
   223      base: int
   224      elemBits: 16
   225      bits: 128
   226    out:
   227    - &i32x8
   228      base: int
   229      elemBits: 32
   230      bits: 256
   231  - go: ExtendToInt32
   232    regexpTag: "convert"
   233    asm: "VPMOVSXWD"
   234    in:
   235    - *i16x16
   236    out:
   237    - &i32x16
   238      base: int
   239      elemBits: 32
   240      bits: 512
   241  # uint32 -> uint64
   242  - go: ExtendToUint64
   243    regexpTag: "convert"
   244    asm: "VPMOVZXDQ"
   245    in:
   246    - &u32x4
   247      base: uint
   248      elemBits: 32
   249      bits: 128
   250    out:
   251    - &u64x4
   252      base: uint
   253      elemBits: 64
   254      bits: 256
   255  - go: ExtendToUint64
   256    regexpTag: "convert"
   257    asm: "VPMOVZXDQ"
   258    in:
   259    - *u32x8
   260    out:
   261    - &u64x8
   262      base: uint
   263      elemBits: 64
   264      bits: 512
   265  # int32 -> int64
   266  - go: ExtendToInt64
   267    regexpTag: "convert"
   268    asm: "VPMOVSXDQ"
   269    in:
   270    - &i32x4
   271      base: int
   272      elemBits: 32
   273      bits: 128
   274    out:
   275    - &i64x4
   276      base: int
   277      elemBits: 64
   278      bits: 256
   279  - go: ExtendToInt64
   280    regexpTag: "convert"
   281    asm: "VPMOVSXDQ"
   282    in:
   283    - *i32x8
   284    out:
   285    - &i64x8
   286      base: int
   287      elemBits: 64
   288      bits: 512
   289  # uint16 -> uint64
   290  - go: ExtendToUint64
   291    regexpTag: "convert"
   292    asm: "VPMOVZXWQ"
   293    in:
   294    - *u16x8
   295    out:
   296    - *u64x8
   297  # int16 -> int64
   298  - go: ExtendToInt64
   299    regexpTag: "convert"
   300    asm: "VPMOVSXWQ"
   301    in:
   302    - *i16x8
   303    out:
   304    - *i64x8
   305  # uint8 -> uint32
   306  - go: ExtendToUint32
   307    regexpTag: "convert"
   308    asm: "VPMOVZXBD"
   309    in:
   310    - *u8x16
   311    out:
   312    - *u32x16
   313  # int8 -> int32
   314  - go: ExtendToInt32
   315    regexpTag: "convert"
   316    asm: "VPMOVSXBD"
   317    in:
   318    - *i8x16
   319    out:
   320    - *i32x16
   321  # Truncating conversions
   322  - go: TruncateToInt8
   323    regexpTag: "convert"
   324    asm: "VPMOV[WDQ]B"
   325    in:
   326      - base: int
   327    out:
   328      - base: int
   329        bits: 128
   330  - go: TruncateToUint8
   331    regexpTag: "convert"
   332    asm: "VPMOV[WDQ]B"
   333    in:
   334      - base: uint
   335    out:
   336      - base: uint
   337        bits: 128
   338  - go: TruncateToInt8
   339    regexpTag: "convert"
   340    asm: "VPMOV[WDQ]B"
   341    in:
   342      - base: int
   343    out:
   344      - base: int
   345        bits: 256|512
   346  - go: TruncateToUint8
   347    regexpTag: "convert"
   348    asm: "VPMOV[WDQ]B"
   349    in:
   350      - base: uint
   351    out:
   352      - base: uint
   353        bits: 256|512
   354  - go: TruncateToInt16
   355    regexpTag: "convert"
   356    asm: "VPMOV[DQ]W"
   357    in:
   358      - base: int
   359    out:
   360      - base: int
   361  - go: TruncateToUint16
   362    regexpTag: "convert"
   363    asm: "VPMOV[DQ]W"
   364    in:
   365      - base: uint
   366    out:
   367      - base: uint
   368  - go: TruncateToInt32
   369    regexpTag: "convert"
   370    asm: "VPMOVQD"
   371    in:
   372      - base: int
   373    out:
   374      - base: int
   375  - go: TruncateToUint32
   376    regexpTag: "convert"
   377    asm: "VPMOVQD"
   378    in:
   379      - base: uint
   380    out:
   381      - base: uint
   382  # Saturated conversions.
   383  - go: SaturateToInt8
   384    regexpTag: "convert"
   385    asm: "VPMOVS[WDQ]B"
   386    in:
   387      - base: int
   388    out:
   389      - base: int
   390        bits: 128
   391  - go: SaturateToUint8
   392    regexpTag: "convert"
   393    asm: "VPMOVS[WDQ]B"
   394    in:
   395      - base: int
   396    out:
   397      - base: int
   398        bits: 128
   399  - go: SaturateToInt8
   400    regexpTag: "convert"
   401    asm: "VPMOVS[WDQ]B"
   402    in:
   403      - base: int
   404    out:
   405      - base: int
   406        bits: 256|512
   407  - go: SaturateToUint8
   408    regexpTag: "convert"
   409    asm: "VPMOVUS[WDQ]B"
   410    in:
   411      - base: uint
   412    out:
   413      - base: uint
   414        bits: 256|512
   415  - go: SaturateToInt16
   416    regexpTag: "convert"
   417    asm: "VPMOVS[DQ]W"
   418    in:
   419      - base: int
   420    out:
   421      - base: int
   422  - go: SaturateToUint16
   423    regexpTag: "convert"
   424    asm: "VPMOVUS[DQ]W"
   425    in:
   426      - base: uint
   427    out:
   428      - base: uint
   429  - go: SaturateToInt32
   430    regexpTag: "convert"
   431    asm: "VPMOVSQD"
   432    in:
   433      - base: int
   434    out:
   435      - base: int
   436  - go: SaturateToUint32
   437    regexpTag: "convert"
   438    asm: "VPMOVUSQD"
   439    in:
   440      - base: uint
   441    out:
   442      - base: uint
   443  # Truncating saturated packed
   444  - go: SaturateToInt16Concat
   445    regexpTag: "convert"
   446    asm: "VPACKSSDW"
   447    addDoc: &satDocConcat
   448      !string |-
   449      // With each 128-bit as a group:
   450      // The converted group from the first input vector will be packed to the lower part of the result vector,
   451      // the converted group from the second input vector will be packed to the upper part of the result vector.
   452    in:
   453      - base: int
   454      - base: int
   455    out:
   456      - base: int
   457  - go: SaturateToUint16Concat
   458    regexpTag: "convert"
   459    asm: "VPACKUSDW"
   460    in:
   461      - base: uint
   462      - base: uint
   463    out:
   464      - base: uint
   465  
   466  # low-part only conversions.
   467  # uint8->uint16
   468  - go: ExtendLo8ToUint16x8
   469    regexpTag: "convert"
   470    asm: "VPMOVZXBW"
   471    in:
   472    - *u8x16
   473    out:
   474    - *u16x8
   475  # int8->int16
   476  - go: ExtendLo8ToInt16x8
   477    regexpTag: "convert"
   478    asm: "VPMOVSXBW"
   479    in:
   480    - *i8x16
   481    out:
   482    - *i16x8
   483  # uint16->uint32
   484  - go: ExtendLo4ToUint32x4
   485    regexpTag: "convert"
   486    asm: "VPMOVZXWD"
   487    in:
   488    - *u16x8
   489    out:
   490    - *u32x4
   491  # int16->int32
   492  - go: ExtendLo4ToInt32x4
   493    regexpTag: "convert"
   494    asm: "VPMOVSXWD"
   495    in:
   496    - *i16x8
   497    out:
   498    - *i32x4
   499  # uint32 -> uint64
   500  - go: ExtendLo2ToUint64x2
   501    regexpTag: "convert"
   502    asm: "VPMOVZXDQ"
   503    in:
   504    - *u32x4
   505    out:
   506    - &u64x2
   507      base: uint
   508      elemBits: 64
   509      bits: 128
   510  # int32 -> int64
   511  - go: ExtendLo2ToInt64x2
   512    regexpTag: "convert"
   513    asm: "VPMOVSXDQ"
   514    in:
   515    - *i32x4
   516    out:
   517    - &i64x2
   518      base: int
   519      elemBits: 64
   520      bits: 128
   521  # uint16 -> uint64
   522  - go: ExtendLo2ToUint64x2
   523    regexpTag: "convert"
   524    asm: "VPMOVZXWQ"
   525    in:
   526    - *u16x8
   527    out:
   528    - *u64x2
   529  - go: ExtendLo4ToUint64x4
   530    regexpTag: "convert"
   531    asm: "VPMOVZXWQ"
   532    in:
   533    - *u16x8
   534    out:
   535    - *u64x4
   536  # int16 -> int64
   537  - go: ExtendLo2ToInt64x2
   538    regexpTag: "convert"
   539    asm: "VPMOVSXWQ"
   540    in:
   541    - *i16x8
   542    out:
   543    - *i64x2
   544  - go: ExtendLo4ToInt64x4
   545    regexpTag: "convert"
   546    asm: "VPMOVSXWQ"
   547    in:
   548    - *i16x8
   549    out:
   550    - *i64x4
   551  # uint8 -> uint32
   552  - go: ExtendLo4ToUint32x4
   553    regexpTag: "convert"
   554    asm: "VPMOVZXBD"
   555    in:
   556    - *u8x16
   557    out:
   558    - *u32x4
   559  - go: ExtendLo8ToUint32x8
   560    regexpTag: "convert"
   561    asm: "VPMOVZXBD"
   562    in:
   563    - *u8x16
   564    out:
   565    - *u32x8
   566  # int8 -> int32
   567  - go: ExtendLo4ToInt32x4
   568    regexpTag: "convert"
   569    asm: "VPMOVSXBD"
   570    in:
   571    - *i8x16
   572    out:
   573    - *i32x4
   574  - go: ExtendLo8ToInt32x8
   575    regexpTag: "convert"
   576    asm: "VPMOVSXBD"
   577    in:
   578    - *i8x16
   579    out:
   580    - *i32x8
   581  # uint8 -> uint64
   582  - go: ExtendLo2ToUint64x2
   583    regexpTag: "convert"
   584    asm: "VPMOVZXBQ"
   585    in:
   586    - *u8x16
   587    out:
   588    - *u64x2
   589  - go: ExtendLo4ToUint64x4
   590    regexpTag: "convert"
   591    asm: "VPMOVZXBQ"
   592    in:
   593    - *u8x16
   594    out:
   595    - *u64x4
   596  - go: ExtendLo8ToUint64x8
   597    regexpTag: "convert"
   598    asm: "VPMOVZXBQ"
   599    in:
   600    - *u8x16
   601    out:
   602    - *u64x8
   603  # int8 -> int64
   604  - go: ExtendLo2ToInt64x2
   605    regexpTag: "convert"
   606    asm: "VPMOVSXBQ"
   607    in:
   608    - *i8x16
   609    out:
   610    - *i64x2
   611  - go: ExtendLo4ToInt64x4
   612    regexpTag: "convert"
   613    asm: "VPMOVSXBQ"
   614    in:
   615    - *i8x16
   616    out:
   617    - *i64x4
   618  - go: ExtendLo8ToInt64x8
   619    regexpTag: "convert"
   620    asm: "VPMOVSXBQ"
   621    in:
   622    - *i8x16
   623    out:
   624    - *i64x8
   625  

View as plain text