Source file src/cmd/compile/internal/arm64/simdssa.go

     1  // Code generated by 'simdgen -o godefs -goroot $GOROOT -arch arm64 -arm64Path $ARM64_ISA_PATH go_arm64.yaml types.yaml categories.yaml'; DO NOT EDIT.
     2  
     3  package arm64
     4  
     5  import (
     6  	"cmd/compile/internal/ssa"
     7  	"cmd/compile/internal/ssagen"
     8  	"cmd/internal/obj"
     9  	"cmd/internal/obj/arm64"
    10  )
    11  
    12  func ssaGenSIMDValue(s *ssagen.State, v *ssa.Value) bool {
    13  	var p *obj.Prog
    14  	switch v.Op {
    15  	case ssa.OpARM64VABS16B,
    16  		ssa.OpARM64VCLS16B,
    17  		ssa.OpARM64VCLZ16B,
    18  		ssa.OpARM64VNEG16B,
    19  		ssa.OpARM64VNOT16B,
    20  		ssa.OpARM64VCNT16B:
    21  		p = simdV11(s, v, arm64.ARNG_16B)
    22  
    23  	case ssa.OpARM64VFABS2D,
    24  		ssa.OpARM64VABS2D,
    25  		ssa.OpARM64VFRINTP2D,
    26  		ssa.OpARM64VSCVTF2D,
    27  		ssa.OpARM64VUCVTF2D,
    28  		ssa.OpARM64VFCVTZS2D,
    29  		ssa.OpARM64VFCVTZU2D,
    30  		ssa.OpARM64VFRINTM2D,
    31  		ssa.OpARM64VFNEG2D,
    32  		ssa.OpARM64VNEG2D,
    33  		ssa.OpARM64VFRINTN2D,
    34  		ssa.OpARM64VFSQRT2D,
    35  		ssa.OpARM64VFRINTZ2D:
    36  		p = simdV11(s, v, arm64.ARNG_2D)
    37  
    38  	case ssa.OpARM64VFABS4S,
    39  		ssa.OpARM64VABS4S,
    40  		ssa.OpARM64VFRINTP4S,
    41  		ssa.OpARM64VSCVTF4S,
    42  		ssa.OpARM64VUCVTF4S,
    43  		ssa.OpARM64VFCVTZS4S,
    44  		ssa.OpARM64VFCVTZU4S,
    45  		ssa.OpARM64VFRINTM4S,
    46  		ssa.OpARM64VCLS4S,
    47  		ssa.OpARM64VCLZ4S,
    48  		ssa.OpARM64VFNEG4S,
    49  		ssa.OpARM64VNEG4S,
    50  		ssa.OpARM64VFRINTN4S,
    51  		ssa.OpARM64VFSQRT4S,
    52  		ssa.OpARM64VFRINTZ4S:
    53  		p = simdV11(s, v, arm64.ARNG_4S)
    54  
    55  	case ssa.OpARM64VABS8H,
    56  		ssa.OpARM64VCLS8H,
    57  		ssa.OpARM64VCLZ8H,
    58  		ssa.OpARM64VNEG8H:
    59  		p = simdV11(s, v, arm64.ARNG_8H)
    60  
    61  	case ssa.OpARM64VSHL16B,
    62  		ssa.OpARM64VSQSHL16Bconst,
    63  		ssa.OpARM64VUQSHL16Bconst,
    64  		ssa.OpARM64VSSHR16B,
    65  		ssa.OpARM64VUSHR16B:
    66  		p = simdV11Imm(s, v, arm64.ARNG_16B)
    67  
    68  	case ssa.OpARM64VSHL2D,
    69  		ssa.OpARM64VSQSHL2Dconst,
    70  		ssa.OpARM64VUQSHL2Dconst,
    71  		ssa.OpARM64VSSHR2D,
    72  		ssa.OpARM64VUSHR2D:
    73  		p = simdV11Imm(s, v, arm64.ARNG_2D)
    74  
    75  	case ssa.OpARM64VSHL4S,
    76  		ssa.OpARM64VSQSHL4Sconst,
    77  		ssa.OpARM64VUQSHL4Sconst,
    78  		ssa.OpARM64VSSHR4S,
    79  		ssa.OpARM64VUSHR4S:
    80  		p = simdV11Imm(s, v, arm64.ARNG_4S)
    81  
    82  	case ssa.OpARM64VSHL8H,
    83  		ssa.OpARM64VSQSHL8Hconst,
    84  		ssa.OpARM64VUQSHL8Hconst,
    85  		ssa.OpARM64VSSHR8H,
    86  		ssa.OpARM64VUSHR8H:
    87  		p = simdV11Imm(s, v, arm64.ARNG_8H)
    88  
    89  	case ssa.OpARM64VDUPBbcast:
    90  		p = simdV11ImmIn1(s, v, arm64.ARNG_B)
    91  
    92  	case ssa.OpARM64VDUPDbcast:
    93  		p = simdV11ImmIn1(s, v, arm64.ARNG_D)
    94  
    95  	case ssa.OpARM64VDUPHbcast:
    96  		p = simdV11ImmIn1(s, v, arm64.ARNG_H)
    97  
    98  	case ssa.OpARM64VDUPSbcast:
    99  		p = simdV11ImmIn1(s, v, arm64.ARNG_S)
   100  
   101  	case ssa.OpARM64VSMAXV16B,
   102  		ssa.OpARM64VUMAXV16B,
   103  		ssa.OpARM64VSMINV16B,
   104  		ssa.OpARM64VUMINV16B,
   105  		ssa.OpARM64VADDV16B:
   106  		p = simdV11Scalar(s, v, arm64.ARNG_16B)
   107  
   108  	case ssa.OpARM64VFMAXV4S,
   109  		ssa.OpARM64VSMAXV4S,
   110  		ssa.OpARM64VUMAXV4S,
   111  		ssa.OpARM64VFMINV4S,
   112  		ssa.OpARM64VSMINV4S,
   113  		ssa.OpARM64VUMINV4S,
   114  		ssa.OpARM64VADDV4S:
   115  		p = simdV11Scalar(s, v, arm64.ARNG_4S)
   116  
   117  	case ssa.OpARM64VSMAXV8H,
   118  		ssa.OpARM64VUMAXV8H,
   119  		ssa.OpARM64VSMINV8H,
   120  		ssa.OpARM64VUMINV8H,
   121  		ssa.OpARM64VADDV8H:
   122  		p = simdV11Scalar(s, v, arm64.ARNG_8H)
   123  
   124  	case ssa.OpARM64VDUPDextr:
   125  		p = simdV11ScalarImmIn1(s, v, arm64.ARNG_D)
   126  
   127  	case ssa.OpARM64VDUPSextr:
   128  		p = simdV11ScalarImmIn1(s, v, arm64.ARNG_S)
   129  
   130  	case ssa.OpARM64VADD16B,
   131  		ssa.OpARM64VSQADD16B,
   132  		ssa.OpARM64VUQADD16B,
   133  		ssa.OpARM64VAND16B,
   134  		ssa.OpARM64VBIC16B,
   135  		ssa.OpARM64VSRHADD16B,
   136  		ssa.OpARM64VURHADD16B,
   137  		ssa.OpARM64VUZP116B,
   138  		ssa.OpARM64VUZP216B,
   139  		ssa.OpARM64VCMEQ16B,
   140  		ssa.OpARM64VCMGT16B,
   141  		ssa.OpARM64VCMHI16B,
   142  		ssa.OpARM64VCMGE16B,
   143  		ssa.OpARM64VCMHS16B,
   144  		ssa.OpARM64VZIP216B,
   145  		ssa.OpARM64VZIP116B,
   146  		ssa.OpARM64VSMAX16B,
   147  		ssa.OpARM64VUMAX16B,
   148  		ssa.OpARM64VSMIN16B,
   149  		ssa.OpARM64VUMIN16B,
   150  		ssa.OpARM64VMUL16B,
   151  		ssa.OpARM64VORR16B,
   152  		ssa.OpARM64VORN16B,
   153  		ssa.OpARM64VSSHL16B,
   154  		ssa.OpARM64VUSHL16B,
   155  		ssa.OpARM64VSQSHL16B,
   156  		ssa.OpARM64VUQSHL16B,
   157  		ssa.OpARM64VSUB16B,
   158  		ssa.OpARM64VSQSUB16B,
   159  		ssa.OpARM64VUQSUB16B,
   160  		ssa.OpARM64VTRN116B,
   161  		ssa.OpARM64VTRN216B,
   162  		ssa.OpARM64VEOR16B:
   163  		p = simdV21(s, v, arm64.ARNG_16B)
   164  
   165  	case ssa.OpARM64VFADD2D,
   166  		ssa.OpARM64VADD2D,
   167  		ssa.OpARM64VSQADD2D,
   168  		ssa.OpARM64VUQADD2D,
   169  		ssa.OpARM64VFADDP2D,
   170  		ssa.OpARM64VADDP2D,
   171  		ssa.OpARM64VUZP12D,
   172  		ssa.OpARM64VUZP22D,
   173  		ssa.OpARM64VFDIV2D,
   174  		ssa.OpARM64VFCMEQ2D,
   175  		ssa.OpARM64VCMEQ2D,
   176  		ssa.OpARM64VFCMGT2D,
   177  		ssa.OpARM64VCMGT2D,
   178  		ssa.OpARM64VCMHI2D,
   179  		ssa.OpARM64VFCMGE2D,
   180  		ssa.OpARM64VCMGE2D,
   181  		ssa.OpARM64VCMHS2D,
   182  		ssa.OpARM64VZIP22D,
   183  		ssa.OpARM64VZIP12D,
   184  		ssa.OpARM64VFMAX2D,
   185  		ssa.OpARM64VFMIN2D,
   186  		ssa.OpARM64VFMUL2D,
   187  		ssa.OpARM64VSSHL2D,
   188  		ssa.OpARM64VUSHL2D,
   189  		ssa.OpARM64VSQSHL2D,
   190  		ssa.OpARM64VUQSHL2D,
   191  		ssa.OpARM64VFSUB2D,
   192  		ssa.OpARM64VSUB2D,
   193  		ssa.OpARM64VSQSUB2D,
   194  		ssa.OpARM64VUQSUB2D,
   195  		ssa.OpARM64VTRN12D,
   196  		ssa.OpARM64VTRN22D:
   197  		p = simdV21(s, v, arm64.ARNG_2D)
   198  
   199  	case ssa.OpARM64VFADD4S,
   200  		ssa.OpARM64VADD4S,
   201  		ssa.OpARM64VSQADD4S,
   202  		ssa.OpARM64VUQADD4S,
   203  		ssa.OpARM64VSRHADD4S,
   204  		ssa.OpARM64VURHADD4S,
   205  		ssa.OpARM64VFADDP4S,
   206  		ssa.OpARM64VADDP4S,
   207  		ssa.OpARM64VUZP14S,
   208  		ssa.OpARM64VUZP24S,
   209  		ssa.OpARM64VFDIV4S,
   210  		ssa.OpARM64VFCMEQ4S,
   211  		ssa.OpARM64VCMEQ4S,
   212  		ssa.OpARM64VFCMGT4S,
   213  		ssa.OpARM64VCMGT4S,
   214  		ssa.OpARM64VCMHI4S,
   215  		ssa.OpARM64VFCMGE4S,
   216  		ssa.OpARM64VCMGE4S,
   217  		ssa.OpARM64VCMHS4S,
   218  		ssa.OpARM64VZIP24S,
   219  		ssa.OpARM64VZIP14S,
   220  		ssa.OpARM64VFMAX4S,
   221  		ssa.OpARM64VSMAX4S,
   222  		ssa.OpARM64VUMAX4S,
   223  		ssa.OpARM64VFMIN4S,
   224  		ssa.OpARM64VSMIN4S,
   225  		ssa.OpARM64VUMIN4S,
   226  		ssa.OpARM64VFMUL4S,
   227  		ssa.OpARM64VMUL4S,
   228  		ssa.OpARM64VSSHL4S,
   229  		ssa.OpARM64VUSHL4S,
   230  		ssa.OpARM64VSQSHL4S,
   231  		ssa.OpARM64VUQSHL4S,
   232  		ssa.OpARM64VFSUB4S,
   233  		ssa.OpARM64VSUB4S,
   234  		ssa.OpARM64VSQSUB4S,
   235  		ssa.OpARM64VUQSUB4S,
   236  		ssa.OpARM64VTRN14S,
   237  		ssa.OpARM64VTRN24S:
   238  		p = simdV21(s, v, arm64.ARNG_4S)
   239  
   240  	case ssa.OpARM64VADD8H,
   241  		ssa.OpARM64VSQADD8H,
   242  		ssa.OpARM64VUQADD8H,
   243  		ssa.OpARM64VSRHADD8H,
   244  		ssa.OpARM64VURHADD8H,
   245  		ssa.OpARM64VADDP8H,
   246  		ssa.OpARM64VUZP18H,
   247  		ssa.OpARM64VUZP28H,
   248  		ssa.OpARM64VCMEQ8H,
   249  		ssa.OpARM64VCMGT8H,
   250  		ssa.OpARM64VCMHI8H,
   251  		ssa.OpARM64VCMGE8H,
   252  		ssa.OpARM64VCMHS8H,
   253  		ssa.OpARM64VZIP28H,
   254  		ssa.OpARM64VZIP18H,
   255  		ssa.OpARM64VSMAX8H,
   256  		ssa.OpARM64VUMAX8H,
   257  		ssa.OpARM64VSMIN8H,
   258  		ssa.OpARM64VUMIN8H,
   259  		ssa.OpARM64VMUL8H,
   260  		ssa.OpARM64VSSHL8H,
   261  		ssa.OpARM64VUSHL8H,
   262  		ssa.OpARM64VSQSHL8H,
   263  		ssa.OpARM64VUQSHL8H,
   264  		ssa.OpARM64VSUB8H,
   265  		ssa.OpARM64VSQSUB8H,
   266  		ssa.OpARM64VUQSUB8H,
   267  		ssa.OpARM64VTRN18H,
   268  		ssa.OpARM64VTRN28H:
   269  		p = simdV21(s, v, arm64.ARNG_8H)
   270  
   271  	case ssa.OpARM64VEXT16B:
   272  		p = simdV21Imm(s, v, arm64.ARNG_16B)
   273  
   274  	case ssa.OpARM64VMLA16B,
   275  		ssa.OpARM64VBIT16B,
   276  		ssa.OpARM64VBIF16B:
   277  		p = simdV31ResultInArg0(s, v, arm64.ARNG_16B)
   278  
   279  	case ssa.OpARM64VFMLA2D:
   280  		p = simdV31ResultInArg0(s, v, arm64.ARNG_2D)
   281  
   282  	case ssa.OpARM64VFMLA4S,
   283  		ssa.OpARM64VMLA4S:
   284  		p = simdV31ResultInArg0(s, v, arm64.ARNG_4S)
   285  
   286  	case ssa.OpARM64VMLA8H:
   287  		p = simdV31ResultInArg0(s, v, arm64.ARNG_8H)
   288  
   289  	case ssa.OpARM64VMOVBextr:
   290  		p = simdVgpImmIn1(s, v, arm64.ARNG_B)
   291  
   292  	case ssa.OpARM64VMOVDextr:
   293  		p = simdVgpImmIn1(s, v, arm64.ARNG_D)
   294  
   295  	case ssa.OpARM64VMOVHextr:
   296  		p = simdVgpImmIn1(s, v, arm64.ARNG_H)
   297  
   298  	case ssa.OpARM64VMOVSextr:
   299  		p = simdVgpImmIn1(s, v, arm64.ARNG_S)
   300  
   301  	case ssa.OpARM64VMOVBins:
   302  		p = simdVgpvResultInArg0ImmOutIn0(s, v, arm64.ARNG_B)
   303  
   304  	case ssa.OpARM64VMOVDins:
   305  		p = simdVgpvResultInArg0ImmOutIn0(s, v, arm64.ARNG_D)
   306  
   307  	case ssa.OpARM64VMOVHins:
   308  		p = simdVgpvResultInArg0ImmOutIn0(s, v, arm64.ARNG_H)
   309  
   310  	case ssa.OpARM64VMOVSins:
   311  		p = simdVgpvResultInArg0ImmOutIn0(s, v, arm64.ARNG_S)
   312  
   313  	case ssa.OpARM64VMOVDins0:
   314  		p = simdVfpvResultInArg0ImmOutIn1(s, v, arm64.ARNG_D)
   315  
   316  	case ssa.OpARM64VMOVSins0:
   317  		p = simdVfpvResultInArg0ImmOutIn1(s, v, arm64.ARNG_S)
   318  
   319  	case ssa.OpARM64VSXTL16B,
   320  		ssa.OpARM64VUXTL16B:
   321  		p = simdV11Long(s, v, arm64.ARNG_16B)
   322  
   323  	case ssa.OpARM64VFCVTL4S,
   324  		ssa.OpARM64VSXTL4S,
   325  		ssa.OpARM64VUXTL4S:
   326  		p = simdV11Long(s, v, arm64.ARNG_4S)
   327  
   328  	case ssa.OpARM64VSXTL8H,
   329  		ssa.OpARM64VUXTL8H:
   330  		p = simdV11Long(s, v, arm64.ARNG_8H)
   331  
   332  	case ssa.OpARM64VFCVTN2D,
   333  		ssa.OpARM64VSQXTN2D,
   334  		ssa.OpARM64VSQXTUN2D,
   335  		ssa.OpARM64VUQXTN2D,
   336  		ssa.OpARM64VXTN2D:
   337  		p = simdV11Narrow(s, v, arm64.ARNG_2D)
   338  
   339  	case ssa.OpARM64VSQXTN4S,
   340  		ssa.OpARM64VSQXTUN4S,
   341  		ssa.OpARM64VUQXTN4S,
   342  		ssa.OpARM64VXTN4S:
   343  		p = simdV11Narrow(s, v, arm64.ARNG_4S)
   344  
   345  	case ssa.OpARM64VSQXTN8H,
   346  		ssa.OpARM64VSQXTUN8H,
   347  		ssa.OpARM64VUQXTN8H,
   348  		ssa.OpARM64VXTN8H:
   349  		p = simdV11Narrow(s, v, arm64.ARNG_8H)
   350  
   351  	case ssa.OpARM64VSHRN2D:
   352  		p = simdV11ImmNarrow(s, v, arm64.ARNG_2D)
   353  
   354  	case ssa.OpARM64VSHRN4S:
   355  		p = simdV11ImmNarrow(s, v, arm64.ARNG_4S)
   356  
   357  	case ssa.OpARM64VSHRN8H:
   358  		p = simdV11ImmNarrow(s, v, arm64.ARNG_8H)
   359  
   360  	case ssa.OpARM64VSSHLL16B,
   361  		ssa.OpARM64VUSHLL16B:
   362  		p = simdV11ImmLong(s, v, arm64.ARNG_16B)
   363  
   364  	case ssa.OpARM64VSSHLL4S,
   365  		ssa.OpARM64VUSHLL4S:
   366  		p = simdV11ImmLong(s, v, arm64.ARNG_4S)
   367  
   368  	case ssa.OpARM64VSSHLL8H,
   369  		ssa.OpARM64VUSHLL8H:
   370  		p = simdV11ImmLong(s, v, arm64.ARNG_8H)
   371  
   372  	case ssa.OpARM64VSMULL16B,
   373  		ssa.OpARM64VUMULL16B:
   374  		p = simdV21Long(s, v, arm64.ARNG_16B)
   375  
   376  	case ssa.OpARM64VSMULL4S,
   377  		ssa.OpARM64VUMULL4S:
   378  		p = simdV21Long(s, v, arm64.ARNG_4S)
   379  
   380  	case ssa.OpARM64VSMULL8H,
   381  		ssa.OpARM64VUMULL8H:
   382  		p = simdV21Long(s, v, arm64.ARNG_8H)
   383  
   384  	case ssa.OpARM64VSXTL2_16B,
   385  		ssa.OpARM64VUXTL2_16B:
   386  		p = simdV11Long2(s, v, arm64.ARNG_16B)
   387  
   388  	case ssa.OpARM64VFCVTL2_4S,
   389  		ssa.OpARM64VSXTL2_4S,
   390  		ssa.OpARM64VUXTL2_4S:
   391  		p = simdV11Long2(s, v, arm64.ARNG_4S)
   392  
   393  	case ssa.OpARM64VSXTL2_8H,
   394  		ssa.OpARM64VUXTL2_8H:
   395  		p = simdV11Long2(s, v, arm64.ARNG_8H)
   396  
   397  	case ssa.OpARM64VFCVTN2_2D,
   398  		ssa.OpARM64VSQXTN2_2D,
   399  		ssa.OpARM64VSQXTUN2_2D,
   400  		ssa.OpARM64VUQXTN2_2D,
   401  		ssa.OpARM64VXTN2_2D:
   402  		p = simdV21Narrow2(s, v, arm64.ARNG_2D)
   403  
   404  	case ssa.OpARM64VSQXTN2_4S,
   405  		ssa.OpARM64VSQXTUN2_4S,
   406  		ssa.OpARM64VUQXTN2_4S,
   407  		ssa.OpARM64VXTN2_4S:
   408  		p = simdV21Narrow2(s, v, arm64.ARNG_4S)
   409  
   410  	case ssa.OpARM64VSQXTN2_8H,
   411  		ssa.OpARM64VSQXTUN2_8H,
   412  		ssa.OpARM64VUQXTN2_8H,
   413  		ssa.OpARM64VXTN2_8H:
   414  		p = simdV21Narrow2(s, v, arm64.ARNG_8H)
   415  
   416  	case ssa.OpARM64VSHRN2_2D:
   417  		p = simdV21ImmNarrow2(s, v, arm64.ARNG_2D)
   418  
   419  	case ssa.OpARM64VSHRN2_4S:
   420  		p = simdV21ImmNarrow2(s, v, arm64.ARNG_4S)
   421  
   422  	case ssa.OpARM64VSHRN2_8H:
   423  		p = simdV21ImmNarrow2(s, v, arm64.ARNG_8H)
   424  
   425  	case ssa.OpARM64VSSHLL2_16B,
   426  		ssa.OpARM64VUSHLL2_16B:
   427  		p = simdV11ImmLong2(s, v, arm64.ARNG_16B)
   428  
   429  	case ssa.OpARM64VSSHLL2_4S,
   430  		ssa.OpARM64VUSHLL2_4S:
   431  		p = simdV11ImmLong2(s, v, arm64.ARNG_4S)
   432  
   433  	case ssa.OpARM64VSSHLL2_8H,
   434  		ssa.OpARM64VUSHLL2_8H:
   435  		p = simdV11ImmLong2(s, v, arm64.ARNG_8H)
   436  
   437  	case ssa.OpARM64VSMULL2_16B,
   438  		ssa.OpARM64VUMULL2_16B:
   439  		p = simdV21Long2(s, v, arm64.ARNG_16B)
   440  
   441  	case ssa.OpARM64VSMULL2_4S,
   442  		ssa.OpARM64VUMULL2_4S:
   443  		p = simdV21Long2(s, v, arm64.ARNG_4S)
   444  
   445  	case ssa.OpARM64VSMULL2_8H,
   446  		ssa.OpARM64VUMULL2_8H:
   447  		p = simdV21Long2(s, v, arm64.ARNG_8H)
   448  
   449  	case ssa.OpARM64VTBL16B:
   450  		p = simdV21List(s, v, arm64.ARNG_16B)
   451  
   452  	case ssa.OpARM64VTBX16B:
   453  		p = simdV31ResultInArg0List(s, v, arm64.ARNG_16B)
   454  
   455  	default:
   456  		// Unknown reg shape
   457  		return false
   458  	}
   459  
   460  	// Ensure p is marked as used (may not be used in all generated code paths)
   461  	_ = p
   462  	return true
   463  }
   464  

View as plain text