...
Run Format

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

Documentation: simd/archsimd/_gen/simdgen/ops/Converts

     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: "VPMOVUS[WDQ]B"
   394  in:
   395    - base: uint
   396  out:
   397    - base: uint
   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    // The converted elements from x will be packed to the lower part of the result vector,
   450    // the converted elements from y will be packed to the upper part of the result vector.
   451  in:
   452    - base: int
   453    - base: int
   454  out:
   455    - base: int
   456      bits: 128
   457- go: SaturateToInt16ConcatGrouped
   458  regexpTag: "convert"
   459  asm: "VPACKSSDW"
   460  addDoc: &satDocConcatGrouped
   461    !string |-
   462    // With each 128-bit as a group:
   463    // The converted elements from x will be packed to the lower part of the group in the result vector,
   464    // the converted elements from y will be packed to the upper part of the group in the result vector.
   465  in:
   466    - base: int
   467    - base: int
   468  out:
   469    - base: int
   470      bits: 256|512
   471- go: SaturateToUint16Concat
   472  regexpTag: "convert"
   473  asm: "VPACKUSDW"
   474  addDoc: *satDocConcat
   475  in:
   476    - base: int
   477    - base: int
   478  out:
   479    - base: uint
   480      bits: 128
   481- go: SaturateToUint16ConcatGrouped
   482  regexpTag: "convert"
   483  asm: "VPACKUSDW"
   484  addDoc: *satDocConcatGrouped
   485  in:
   486    - base: int
   487    - base: int
   488  out:
   489    - base: uint
   490      bits: 256|512
   491
   492# low-part only conversions.
   493# uint8->uint16
   494- go: ExtendLo8ToUint16
   495  regexpTag: "convert"
   496  asm: "VPMOVZXBW"
   497  in:
   498  - *u8x16
   499  out:
   500  - *u16x8
   501# int8->int16
   502- go: ExtendLo8ToInt16
   503  regexpTag: "convert"
   504  asm: "VPMOVSXBW"
   505  in:
   506  - *i8x16
   507  out:
   508  - *i16x8
   509# uint16->uint32
   510- go: ExtendLo4ToUint32
   511  regexpTag: "convert"
   512  asm: "VPMOVZXWD"
   513  in:
   514  - *u16x8
   515  out:
   516  - *u32x4
   517# int16->int32
   518- go: ExtendLo4ToInt32
   519  regexpTag: "convert"
   520  asm: "VPMOVSXWD"
   521  in:
   522  - *i16x8
   523  out:
   524  - *i32x4
   525# uint32 -> uint64
   526- go: ExtendLo2ToUint64
   527  regexpTag: "convert"
   528  asm: "VPMOVZXDQ"
   529  in:
   530  - *u32x4
   531  out:
   532  - &u64x2
   533    base: uint
   534    elemBits: 64
   535    bits: 128
   536# int32 -> int64
   537- go: ExtendLo2ToInt64
   538  regexpTag: "convert"
   539  asm: "VPMOVSXDQ"
   540  in:
   541  - *i32x4
   542  out:
   543  - &i64x2
   544    base: int
   545    elemBits: 64
   546    bits: 128
   547# uint16 -> uint64
   548- go: ExtendLo2ToUint64
   549  regexpTag: "convert"
   550  asm: "VPMOVZXWQ"
   551  in:
   552  - *u16x8
   553  out:
   554  - *u64x2
   555- go: ExtendLo4ToUint64
   556  regexpTag: "convert"
   557  asm: "VPMOVZXWQ"
   558  in:
   559  - *u16x8
   560  out:
   561  - *u64x4
   562# int16 -> int64
   563- go: ExtendLo2ToInt64
   564  regexpTag: "convert"
   565  asm: "VPMOVSXWQ"
   566  in:
   567  - *i16x8
   568  out:
   569  - *i64x2
   570- go: ExtendLo4ToInt64
   571  regexpTag: "convert"
   572  asm: "VPMOVSXWQ"
   573  in:
   574  - *i16x8
   575  out:
   576  - *i64x4
   577# uint8 -> uint32
   578- go: ExtendLo4ToUint32
   579  regexpTag: "convert"
   580  asm: "VPMOVZXBD"
   581  in:
   582  - *u8x16
   583  out:
   584  - *u32x4
   585- go: ExtendLo8ToUint32
   586  regexpTag: "convert"
   587  asm: "VPMOVZXBD"
   588  in:
   589  - *u8x16
   590  out:
   591  - *u32x8
   592# int8 -> int32
   593- go: ExtendLo4ToInt32
   594  regexpTag: "convert"
   595  asm: "VPMOVSXBD"
   596  in:
   597  - *i8x16
   598  out:
   599  - *i32x4
   600- go: ExtendLo8ToInt32
   601  regexpTag: "convert"
   602  asm: "VPMOVSXBD"
   603  in:
   604  - *i8x16
   605  out:
   606  - *i32x8
   607# uint8 -> uint64
   608- go: ExtendLo2ToUint64
   609  regexpTag: "convert"
   610  asm: "VPMOVZXBQ"
   611  in:
   612  - *u8x16
   613  out:
   614  - *u64x2
   615- go: ExtendLo4ToUint64
   616  regexpTag: "convert"
   617  asm: "VPMOVZXBQ"
   618  in:
   619  - *u8x16
   620  out:
   621  - *u64x4
   622- go: ExtendLo8ToUint64
   623  regexpTag: "convert"
   624  asm: "VPMOVZXBQ"
   625  in:
   626  - *u8x16
   627  out:
   628  - *u64x8
   629# int8 -> int64
   630- go: ExtendLo2ToInt64
   631  regexpTag: "convert"
   632  asm: "VPMOVSXBQ"
   633  in:
   634  - *i8x16
   635  out:
   636  - *i64x2
   637- go: ExtendLo4ToInt64
   638  regexpTag: "convert"
   639  asm: "VPMOVSXBQ"
   640  in:
   641  - *i8x16
   642  out:
   643  - *i64x4
   644- go: ExtendLo8ToInt64
   645  regexpTag: "convert"
   646  asm: "VPMOVSXBQ"
   647  in:
   648  - *i8x16
   649  out:
   650  - *i64x8

View as plain text