Source file src/cmd/internal/obj/loong64/instOp.go

     1  // Copyright 2026 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package loong64
     6  
     7  import (
     8  	"cmd/internal/obj"
     9  )
    10  
    11  var oprrrr = map[obj.As]uint32{
    12  	AFMADDF:  0x81 << 20,  // fmadd.s
    13  	AFMADDD:  0x82 << 20,  // fmadd.d
    14  	AFMSUBF:  0x85 << 20,  // fmsub.s
    15  	AFMSUBD:  0x86 << 20,  // fmsub.d
    16  	AFNMADDF: 0x89 << 20,  // fnmadd.f
    17  	AFNMADDD: 0x8a << 20,  // fnmadd.d
    18  	AFNMSUBF: 0x8d << 20,  // fnmsub.s
    19  	AFNMSUBD: 0x8e << 20,  // fnmsub.d
    20  	AVSHUFB:  0x0d5 << 20, // vshuf.b
    21  	AXVSHUFB: 0x0d6 << 20, // xvshuf.b
    22  }
    23  
    24  var oprrr = map[obj.As]uint32{
    25  	AADD:           0x20 << 15,          // add.w
    26  	AADDW:          0x20 << 15,          // add.w
    27  	AADDV:          0x21 << 15,          // add.d
    28  	AADDVU:         0x21 << 15,          // add.d
    29  	ASUB:           0x22 << 15,          // sub.w
    30  	ASUBW:          0x22 << 15,          // sub.w
    31  	ANEGW:          0x22 << 15,          // sub.w
    32  	ASUBV:          0x23 << 15,          // sub.d
    33  	ASUBVU:         0x23 << 15,          // sub.d
    34  	ANEGV:          0x23 << 15,          // sub.d
    35  	ASGT:           0x24 << 15,          // slt
    36  	ASGTU:          0x25 << 15,          // sltu
    37  	AMASKEQZ:       0x26 << 15,          // maskeqz
    38  	AMASKNEZ:       0x27 << 15,          // masknez
    39  	ASCQ:           0x070AE << 15,       // sc.q
    40  	ANOR:           0x28 << 15,          // nor
    41  	AAND:           0x29 << 15,          // and
    42  	AOR:            0x2a << 15,          // or
    43  	AXOR:           0x2b << 15,          // xor
    44  	AORN:           0x2c << 15,          // orn
    45  	AANDN:          0x2d << 15,          // andn
    46  	ASLL:           0x2e << 15,          // sll.w
    47  	ASRL:           0x2f << 15,          // srl.w
    48  	ASRA:           0x30 << 15,          // sra.w
    49  	ASLLV:          0x31 << 15,          // sll.d
    50  	ASRLV:          0x32 << 15,          // srl.d
    51  	ASRAV:          0x33 << 15,          // sra.d
    52  	AROTR:          0x36 << 15,          // rotr.w
    53  	AROTRV:         0x37 << 15,          // rotr.d
    54  	AMUL:           0x38 << 15,          // mul.w
    55  	AMULW:          0x38 << 15,          // mul.w
    56  	AMULH:          0x39 << 15,          // mulh.w
    57  	AMULHU:         0x3a << 15,          // mulhu.w
    58  	AMULV:          0x3b << 15,          // mul.d
    59  	AMULVU:         0x3b << 15,          // mul.d
    60  	AMULHV:         0x3c << 15,          // mulh.d
    61  	AMULHVU:        0x3d << 15,          // mulhu.d
    62  	AMULWVW:        0x3e << 15,          // mulw.d.w
    63  	AMULWVWU:       0x3f << 15,          // mulw.d.wu
    64  	ADIV:           0x40 << 15,          // div.w
    65  	ADIVW:          0x40 << 15,          // div.w
    66  	AREM:           0x41 << 15,          // mod.w
    67  	AREMW:          0x41 << 15,          // mod.w
    68  	ADIVU:          0x42 << 15,          // div.wu
    69  	ADIVWU:         0x42 << 15,          // div.wu
    70  	AREMU:          0x43 << 15,          // mod.wu
    71  	AREMWU:         0x43 << 15,          // mod.wu
    72  	ADIVV:          0x44 << 15,          // div.d
    73  	AREMV:          0x45 << 15,          // mod.d
    74  	ADIVVU:         0x46 << 15,          // div.du
    75  	AREMVU:         0x47 << 15,          // mod.du
    76  	ACRCWBW:        0x48 << 15,          // crc.w.b.w
    77  	ACRCWHW:        0x49 << 15,          // crc.w.h.w
    78  	ACRCWWW:        0x4a << 15,          // crc.w.w.w
    79  	ACRCWVW:        0x4b << 15,          // crc.w.d.w
    80  	ACRCCWBW:       0x4c << 15,          // crcc.w.b.w
    81  	ACRCCWHW:       0x4d << 15,          // crcc.w.h.w
    82  	ACRCCWWW:       0x4e << 15,          // crcc.w.w.w
    83  	ACRCCWVW:       0x4f << 15,          // crcc.w.d.w
    84  	AJMP:           0x13 << 26,          // jirl r0, rj, 0
    85  	AJAL:           0x13<<26 | 1<<0,     // jirl r1, rj, 0
    86  	AMULF:          0x209 << 15,         // fmul.s
    87  	AMULD:          0x20a << 15,         // fmul.d
    88  	ADIVF:          0x20d << 15,         // fdiv.s
    89  	ADIVD:          0x20e << 15,         // fdiv.d
    90  	ASUBF:          0x205 << 15,         // fsub.s
    91  	ASUBD:          0x206 << 15,         // fsub.d
    92  	AADDF:          0x201 << 15,         // fadd.s
    93  	AADDD:          0x202 << 15,         // fadd.d
    94  	ACMPEQF:        0x0c1<<20 | 0x4<<15, // FCMP.CEQ.S
    95  	ACMPEQD:        0x0c2<<20 | 0x4<<15, // FCMP.CEQ.D
    96  	ACMPGED:        0x0c2<<20 | 0x7<<15, // FCMP.SLE.D
    97  	ACMPGEF:        0x0c1<<20 | 0x7<<15, // FCMP.SLE.S
    98  	ACMPGTD:        0x0c2<<20 | 0x3<<15, // FCMP.SLT.D
    99  	ACMPGTF:        0x0c1<<20 | 0x3<<15, // FCMP.SLT.S
   100  	AFMINF:         0x215 << 15,         // fmin.s
   101  	AFMIND:         0x216 << 15,         // fmin.d
   102  	AFMAXF:         0x211 << 15,         // fmax.s
   103  	AFMAXD:         0x212 << 15,         // fmax.d
   104  	AFMAXAF:        0x219 << 15,         // fmaxa.s
   105  	AFMAXAD:        0x21a << 15,         // fmaxa.d
   106  	AFMINAF:        0x21d << 15,         // fmina.s
   107  	AFMINAD:        0x21e << 15,         // fmina.d
   108  	AFSCALEBF:      0x221 << 15,         // fscaleb.s
   109  	AFSCALEBD:      0x222 << 15,         // fscaleb.d
   110  	AFCOPYSGF:      0x225 << 15,         // fcopysign.s
   111  	AFCOPYSGD:      0x226 << 15,         // fcopysign.d
   112  	-AMOVB:         0x07000 << 15,       // ldx.b
   113  	-AMOVH:         0x07008 << 15,       // ldx.h
   114  	-AMOVW:         0x07010 << 15,       // ldx.w
   115  	-AMOVV:         0x07018 << 15,       // ldx.d
   116  	-AMOVBU:        0x07040 << 15,       // ldx.bu
   117  	-AMOVHU:        0x07048 << 15,       // ldx.hu
   118  	-AMOVWU:        0x07050 << 15,       // ldx.wu
   119  	AMOVB:          0x07020 << 15,       // stx.b
   120  	AMOVH:          0x07028 << 15,       // stx.h
   121  	AMOVW:          0x07030 << 15,       // stx.w
   122  	AMOVV:          0x07038 << 15,       // stx.d
   123  	-AMOVF:         0x07060 << 15,       // fldx.s
   124  	-AMOVD:         0x07068 << 15,       // fldx.d
   125  	AMOVF:          0x07070 << 15,       // fstx.s
   126  	AMOVD:          0x07078 << 15,       // fstx.d
   127  	-AVMOVQ:        0x07080 << 15,       // vldx
   128  	-AXVMOVQ:       0x07090 << 15,       // xvldx
   129  	AVMOVQ:         0x07088 << 15,       // vstx
   130  	AXVMOVQ:        0x07098 << 15,       // xvstx
   131  	AVSEQB:         0x0e000 << 15,       // vseq.b
   132  	AXVSEQB:        0x0e800 << 15,       // xvseq.b
   133  	AVSEQH:         0x0e001 << 15,       // vseq.h
   134  	AXVSEQH:        0x0e801 << 15,       // xvseq.h
   135  	AVSEQW:         0x0e002 << 15,       // vseq.w
   136  	AXVSEQW:        0x0e802 << 15,       // xvseq.w
   137  	AVSEQV:         0x0e003 << 15,       // vseq.d
   138  	AXVSEQV:        0x0e803 << 15,       // xvseq.d
   139  	AVSLTB:         0x0e00c << 15,       // vslt.b
   140  	AVSLTH:         0x0e00d << 15,       // vslt.h
   141  	AVSLTW:         0x0e00e << 15,       // vslt.w
   142  	AVSLTV:         0x0e00f << 15,       // vslt.d
   143  	AVSLTBU:        0x0e010 << 15,       // vslt.bu
   144  	AVSLTHU:        0x0e011 << 15,       // vslt.hu
   145  	AVSLTWU:        0x0e012 << 15,       // vslt.wu
   146  	AVSLTVU:        0x0e013 << 15,       // vslt.du
   147  	AXVSLTB:        0x0e80c << 15,       // xvslt.b
   148  	AXVSLTH:        0x0e80d << 15,       // xvslt.h
   149  	AXVSLTW:        0x0e80e << 15,       // xvslt.w
   150  	AXVSLTV:        0x0e80f << 15,       // xvslt.d
   151  	AXVSLTBU:       0x0e810 << 15,       // xvslt.bu
   152  	AXVSLTHU:       0x0e811 << 15,       // xvslt.hu
   153  	AXVSLTWU:       0x0e812 << 15,       // xvslt.wu
   154  	AXVSLTVU:       0x0e813 << 15,       // xvslt.du
   155  	AVANDV:         0x0e24c << 15,       // vand.v
   156  	AVORV:          0x0e24d << 15,       // vor.v
   157  	AVXORV:         0x0e24e << 15,       // vxor.v
   158  	AVNORV:         0x0e24f << 15,       // vnor.v
   159  	AVANDNV:        0x0e250 << 15,       // vandn.v
   160  	AVORNV:         0x0e251 << 15,       // vorn.v
   161  	AXVANDV:        0x0ea4c << 15,       // xvand.v
   162  	AXVORV:         0x0ea4d << 15,       // xvor.v
   163  	AXVXORV:        0x0ea4e << 15,       // xvxor.v
   164  	AXVNORV:        0x0ea4f << 15,       // xvnor.v
   165  	AXVANDNV:       0x0ea50 << 15,       // xvandn.v
   166  	AXVORNV:        0x0ea51 << 15,       // xvorn.v
   167  	AVDIVB:         0xe1c0 << 15,        // vdiv.b
   168  	AVDIVH:         0xe1c1 << 15,        // vdiv.h
   169  	AVDIVW:         0xe1c2 << 15,        // vdiv.w
   170  	AVDIVV:         0xe1c3 << 15,        // vdiv.d
   171  	AVMODB:         0xe1c4 << 15,        // vmod.b
   172  	AVMODH:         0xe1c5 << 15,        // vmod.h
   173  	AVMODW:         0xe1c6 << 15,        // vmod.w
   174  	AVMODV:         0xe1c7 << 15,        // vmod.d
   175  	AVDIVBU:        0xe1c8 << 15,        // vdiv.bu
   176  	AVDIVHU:        0xe1c9 << 15,        // vdiv.hu
   177  	AVDIVWU:        0xe1ca << 15,        // vdiv.wu
   178  	AVDIVVU:        0xe1cb << 15,        // vdiv.du
   179  	AVMODBU:        0xe1cc << 15,        // vmod.bu
   180  	AVMODHU:        0xe1cd << 15,        // vmod.hu
   181  	AVMODWU:        0xe1ce << 15,        // vmod.wu
   182  	AVMODVU:        0xe1cf << 15,        // vmod.du
   183  	AXVDIVB:        0xe9c0 << 15,        // xvdiv.b
   184  	AXVDIVH:        0xe9c1 << 15,        // xvdiv.h
   185  	AXVDIVW:        0xe9c2 << 15,        // xvdiv.w
   186  	AXVDIVV:        0xe9c3 << 15,        // xvdiv.d
   187  	AXVMODB:        0xe9c4 << 15,        // xvmod.b
   188  	AXVMODH:        0xe9c5 << 15,        // xvmod.h
   189  	AXVMODW:        0xe9c6 << 15,        // xvmod.w
   190  	AXVMODV:        0xe9c7 << 15,        // xvmod.d
   191  	AXVDIVBU:       0xe9c8 << 15,        // xvdiv.bu
   192  	AXVDIVHU:       0xe9c9 << 15,        // xvdiv.hu
   193  	AXVDIVWU:       0xe9ca << 15,        // xvdiv.wu
   194  	AXVDIVVU:       0xe9cb << 15,        // xvdiv.du
   195  	AXVMODBU:       0xe9cc << 15,        // xvmod.bu
   196  	AXVMODHU:       0xe9cd << 15,        // xvmod.hu
   197  	AXVMODWU:       0xe9ce << 15,        // xvmod.wu
   198  	AXVMODVU:       0xe9cf << 15,        // xvmod.du
   199  	AVMULWEVHB:     0xe120 << 15,        // vmulwev.h.b
   200  	AVMULWEVWH:     0xe121 << 15,        // vmulwev.w.h
   201  	AVMULWEVVW:     0xe122 << 15,        // vmulwev.d.w
   202  	AVMULWEVQV:     0xe123 << 15,        // vmulwev.q.d
   203  	AVMULWODHB:     0xe124 << 15,        // vmulwod.h.b
   204  	AVMULWODWH:     0xe125 << 15,        // vmulwod.w.h
   205  	AVMULWODVW:     0xe126 << 15,        // vmulwod.d.w
   206  	AVMULWODQV:     0xe127 << 15,        // vmulwod.q.d
   207  	AVMULWEVHBU:    0xe130 << 15,        // vmulwev.h.bu
   208  	AVMULWEVWHU:    0xe131 << 15,        // vmulwev.w.hu
   209  	AVMULWEVVWU:    0xe132 << 15,        // vmulwev.d.wu
   210  	AVMULWEVQVU:    0xe133 << 15,        // vmulwev.q.du
   211  	AVMULWODHBU:    0xe134 << 15,        // vmulwod.h.bu
   212  	AVMULWODWHU:    0xe135 << 15,        // vmulwod.w.hu
   213  	AVMULWODVWU:    0xe136 << 15,        // vmulwod.d.wu
   214  	AVMULWODQVU:    0xe137 << 15,        // vmulwod.q.du
   215  	AVMULWEVHBUB:   0xe140 << 15,        // vmulwev.h.bu.b
   216  	AVMULWEVWHUH:   0xe141 << 15,        // vmulwev.w.hu.h
   217  	AVMULWEVVWUW:   0xe142 << 15,        // vmulwev.d.wu.w
   218  	AVMULWEVQVUV:   0xe143 << 15,        // vmulwev.q.du.d
   219  	AVMULWODHBUB:   0xe144 << 15,        // vmulwod.h.bu.b
   220  	AVMULWODWHUH:   0xe145 << 15,        // vmulwod.w.hu.h
   221  	AVMULWODVWUW:   0xe146 << 15,        // vmulwod.d.wu.w
   222  	AVMULWODQVUV:   0xe147 << 15,        // vmulwod.q.du.d
   223  	AXVMULWEVHB:    0xe920 << 15,        // xvmulwev.h.b
   224  	AXVMULWEVWH:    0xe921 << 15,        // xvmulwev.w.h
   225  	AXVMULWEVVW:    0xe922 << 15,        // xvmulwev.d.w
   226  	AXVMULWEVQV:    0xe923 << 15,        // xvmulwev.q.d
   227  	AXVMULWODHB:    0xe924 << 15,        // xvmulwod.h.b
   228  	AXVMULWODWH:    0xe925 << 15,        // xvmulwod.w.h
   229  	AXVMULWODVW:    0xe926 << 15,        // xvmulwod.d.w
   230  	AXVMULWODQV:    0xe927 << 15,        // xvmulwod.q.d
   231  	AXVMULWEVHBU:   0xe930 << 15,        // xvmulwev.h.bu
   232  	AXVMULWEVWHU:   0xe931 << 15,        // xvmulwev.w.hu
   233  	AXVMULWEVVWU:   0xe932 << 15,        // xvmulwev.d.wu
   234  	AXVMULWEVQVU:   0xe933 << 15,        // xvmulwev.q.du
   235  	AXVMULWODHBU:   0xe934 << 15,        // xvmulwod.h.bu
   236  	AXVMULWODWHU:   0xe935 << 15,        // xvmulwod.w.hu
   237  	AXVMULWODVWU:   0xe936 << 15,        // xvmulwod.d.wu
   238  	AXVMULWODQVU:   0xe937 << 15,        // xvmulwod.q.du
   239  	AXVMULWEVHBUB:  0xe940 << 15,        // xvmulwev.h.bu.b
   240  	AXVMULWEVWHUH:  0xe941 << 15,        // xvmulwev.w.hu.h
   241  	AXVMULWEVVWUW:  0xe942 << 15,        // xvmulwev.d.wu.w
   242  	AXVMULWEVQVUV:  0xe943 << 15,        // xvmulwev.q.du.d
   243  	AXVMULWODHBUB:  0xe944 << 15,        // xvmulwod.h.bu.b
   244  	AXVMULWODWHUH:  0xe945 << 15,        // xvmulwod.w.hu.h
   245  	AXVMULWODVWUW:  0xe946 << 15,        // xvmulwod.d.wu.w
   246  	AXVMULWODQVUV:  0xe947 << 15,        // xvmulwod.q.du.d
   247  	AVADDWEVHB:     0x0e03c << 15,       // vaddwev.h.b
   248  	AVADDWEVWH:     0x0e03d << 15,       // vaddwev.w.h
   249  	AVADDWEVVW:     0x0e03e << 15,       // vaddwev.d.w
   250  	AVADDWEVQV:     0x0e03f << 15,       // vaddwev.q.d
   251  	AVSUBWEVHB:     0x0e040 << 15,       // vsubwev.h.b
   252  	AVSUBWEVWH:     0x0e041 << 15,       // vsubwev.w.h
   253  	AVSUBWEVVW:     0x0e042 << 15,       // vsubwev.d.w
   254  	AVSUBWEVQV:     0x0e043 << 15,       // vsubwev.q.d
   255  	AVADDWODHB:     0x0e044 << 15,       // vaddwod.h.b
   256  	AVADDWODWH:     0x0e045 << 15,       // vaddwod.w.h
   257  	AVADDWODVW:     0x0e046 << 15,       // vaddwod.d.w
   258  	AVADDWODQV:     0x0e047 << 15,       // vaddwod.q.d
   259  	AVSUBWODHB:     0x0e048 << 15,       // vsubwod.h.b
   260  	AVSUBWODWH:     0x0e049 << 15,       // vsubwod.w.h
   261  	AVSUBWODVW:     0x0e04a << 15,       // vsubwod.d.w
   262  	AVSUBWODQV:     0x0e04b << 15,       // vsubwod.q.d
   263  	AXVADDWEVHB:    0x0e83c << 15,       // xvaddwev.h.b
   264  	AXVADDWEVWH:    0x0e83d << 15,       // xvaddwev.w.h
   265  	AXVADDWEVVW:    0x0e83e << 15,       // xvaddwev.d.w
   266  	AXVADDWEVQV:    0x0e83f << 15,       // xvaddwev.q.d
   267  	AXVSUBWEVHB:    0x0e840 << 15,       // xvsubwev.h.b
   268  	AXVSUBWEVWH:    0x0e841 << 15,       // xvsubwev.w.h
   269  	AXVSUBWEVVW:    0x0e842 << 15,       // xvsubwev.d.w
   270  	AXVSUBWEVQV:    0x0e843 << 15,       // xvsubwev.q.d
   271  	AXVADDWODHB:    0x0e844 << 15,       // xvaddwod.h.b
   272  	AXVADDWODWH:    0x0e845 << 15,       // xvaddwod.w.h
   273  	AXVADDWODVW:    0x0e846 << 15,       // xvaddwod.d.w
   274  	AXVADDWODQV:    0x0e847 << 15,       // xvaddwod.q.d
   275  	AXVSUBWODHB:    0x0e848 << 15,       // xvsubwod.h.b
   276  	AXVSUBWODWH:    0x0e849 << 15,       // xvsubwod.w.h
   277  	AXVSUBWODVW:    0x0e84a << 15,       // xvsubwod.d.w
   278  	AXVSUBWODQV:    0x0e84b << 15,       // xvsubwod.q.d
   279  	AVADDWEVHBU:    0x0e05c << 15,       // vaddwev.h.bu
   280  	AVADDWEVWHU:    0x0e05d << 15,       // vaddwev.w.hu
   281  	AVADDWEVVWU:    0x0e05e << 15,       // vaddwev.d.wu
   282  	AVADDWEVQVU:    0x0e05f << 15,       // vaddwev.q.du
   283  	AVSUBWEVHBU:    0x0e060 << 15,       // vsubwev.h.bu
   284  	AVSUBWEVWHU:    0x0e061 << 15,       // vsubwev.w.hu
   285  	AVSUBWEVVWU:    0x0e062 << 15,       // vsubwev.d.wu
   286  	AVSUBWEVQVU:    0x0e063 << 15,       // vsubwev.q.du
   287  	AVADDWODHBU:    0x0e064 << 15,       // vaddwod.h.bu
   288  	AVADDWODWHU:    0x0e065 << 15,       // vaddwod.w.hu
   289  	AVADDWODVWU:    0x0e066 << 15,       // vaddwod.d.wu
   290  	AVADDWODQVU:    0x0e067 << 15,       // vaddwod.q.du
   291  	AVSUBWODHBU:    0x0e068 << 15,       // vsubwod.h.bu
   292  	AVSUBWODWHU:    0x0e069 << 15,       // vsubwod.w.hu
   293  	AVSUBWODVWU:    0x0e06a << 15,       // vsubwod.d.wu
   294  	AVSUBWODQVU:    0x0e06b << 15,       // vsubwod.q.du
   295  	AXVADDWEVHBU:   0x0e85c << 15,       // xvaddwev.h.bu
   296  	AXVADDWEVWHU:   0x0e85d << 15,       // xvaddwev.w.hu
   297  	AXVADDWEVVWU:   0x0e85e << 15,       // xvaddwev.d.wu
   298  	AXVADDWEVQVU:   0x0e85f << 15,       // xvaddwev.q.du
   299  	AXVSUBWEVHBU:   0x0e860 << 15,       // xvsubwev.h.bu
   300  	AXVSUBWEVWHU:   0x0e861 << 15,       // xvsubwev.w.hu
   301  	AXVSUBWEVVWU:   0x0e862 << 15,       // xvsubwev.d.wu
   302  	AXVSUBWEVQVU:   0x0e863 << 15,       // xvsubwev.q.du
   303  	AXVADDWODHBU:   0x0e864 << 15,       // xvaddwod.h.bu
   304  	AXVADDWODWHU:   0x0e865 << 15,       // xvaddwod.w.hu
   305  	AXVADDWODVWU:   0x0e866 << 15,       // xvaddwod.d.wu
   306  	AXVADDWODQVU:   0x0e867 << 15,       // xvaddwod.q.du
   307  	AXVSUBWODHBU:   0x0e868 << 15,       // xvsubwod.h.bu
   308  	AXVSUBWODWHU:   0x0e869 << 15,       // xvsubwod.w.hu
   309  	AXVSUBWODVWU:   0x0e86a << 15,       // xvsubwod.d.wu
   310  	AXVSUBWODQVU:   0x0e86b << 15,       // xvsubwod.q.du
   311  	AVMADDB:        0x0e150 << 15,       // vmadd.b
   312  	AVMADDH:        0x0e151 << 15,       // vmadd.h
   313  	AVMADDW:        0x0e152 << 15,       // vmadd.w
   314  	AVMADDV:        0x0e153 << 15,       // vmadd.d
   315  	AVMSUBB:        0x0e154 << 15,       // vmsub.b
   316  	AVMSUBH:        0x0e155 << 15,       // vmsub.h
   317  	AVMSUBW:        0x0e156 << 15,       // vmsub.w
   318  	AVMSUBV:        0x0e157 << 15,       // vmsub.d
   319  	AXVMADDB:       0x0e950 << 15,       // xvmadd.b
   320  	AXVMADDH:       0x0e951 << 15,       // xvmadd.h
   321  	AXVMADDW:       0x0e952 << 15,       // xvmadd.w
   322  	AXVMADDV:       0x0e953 << 15,       // xvmadd.d
   323  	AXVMSUBB:       0x0e954 << 15,       // xvmsub.b
   324  	AXVMSUBH:       0x0e955 << 15,       // xvmsub.h
   325  	AXVMSUBW:       0x0e956 << 15,       // xvmsub.w
   326  	AXVMSUBV:       0x0e957 << 15,       // xvmsub.d
   327  	AVMADDWEVHB:    0x0e158 << 15,       // vmaddwev.h.b
   328  	AVMADDWEVWH:    0x0e159 << 15,       // vmaddwev.w.h
   329  	AVMADDWEVVW:    0x0e15a << 15,       // vmaddwev.d.w
   330  	AVMADDWEVQV:    0x0e15b << 15,       // vmaddwev.q.d
   331  	AVMADDWODHB:    0x0e15c << 15,       // vmaddwod.h.b
   332  	AVMADDWODWH:    0x0e15d << 15,       // vmaddwod.w.h
   333  	AVMADDWODVW:    0x0e15e << 15,       // vmaddwod.d.w
   334  	AVMADDWODQV:    0x0e15f << 15,       // vmaddwod.q.d
   335  	AVMADDWEVHBU:   0x0e168 << 15,       // vmaddwev.h.bu
   336  	AVMADDWEVWHU:   0x0e169 << 15,       // vmaddwev.w.hu
   337  	AVMADDWEVVWU:   0x0e16a << 15,       // vmaddwev.d.wu
   338  	AVMADDWEVQVU:   0x0e16b << 15,       // vmaddwev.q.du
   339  	AVMADDWODHBU:   0x0e16c << 15,       // vmaddwod.h.bu
   340  	AVMADDWODWHU:   0x0e16d << 15,       // vmaddwod.w.hu
   341  	AVMADDWODVWU:   0x0e16e << 15,       // vmaddwod.d.wu
   342  	AVMADDWODQVU:   0x0e16f << 15,       // vmaddwod.q.du
   343  	AVMADDWEVHBUB:  0x0e178 << 15,       // vmaddwev.h.bu.b
   344  	AVMADDWEVWHUH:  0x0e179 << 15,       // vmaddwev.w.hu.h
   345  	AVMADDWEVVWUW:  0x0e17a << 15,       // vmaddwev.d.wu.w
   346  	AVMADDWEVQVUV:  0x0e17b << 15,       // vmaddwev.q.du.d
   347  	AVMADDWODHBUB:  0x0e17c << 15,       // vmaddwod.h.bu.b
   348  	AVMADDWODWHUH:  0x0e17d << 15,       // vmaddwod.w.hu.h
   349  	AVMADDWODVWUW:  0x0e17e << 15,       // vmaddwod.d.wu.w
   350  	AVMADDWODQVUV:  0x0e17f << 15,       // vmaddwod.q.du.d
   351  	AXVMADDWEVHB:   0x0e958 << 15,       // xvmaddwev.h.b
   352  	AXVMADDWEVWH:   0x0e959 << 15,       // xvmaddwev.w.h
   353  	AXVMADDWEVVW:   0x0e95a << 15,       // xvmaddwev.d.w
   354  	AXVMADDWEVQV:   0x0e95b << 15,       // xvmaddwev.q.d
   355  	AXVMADDWODHB:   0x0e95c << 15,       // xvmaddwod.h.b
   356  	AXVMADDWODWH:   0x0e95d << 15,       // xvmaddwod.w.h
   357  	AXVMADDWODVW:   0x0e95e << 15,       // xvmaddwod.d.w
   358  	AXVMADDWODQV:   0x0e95f << 15,       // xvmaddwod.q.d
   359  	AXVMADDWEVHBU:  0x0e968 << 15,       // xvmaddwev.h.bu
   360  	AXVMADDWEVWHU:  0x0e969 << 15,       // xvmaddwev.w.hu
   361  	AXVMADDWEVVWU:  0x0e96a << 15,       // xvmaddwev.d.wu
   362  	AXVMADDWEVQVU:  0x0e96b << 15,       // xvmaddwev.q.du
   363  	AXVMADDWODHBU:  0x0e96c << 15,       // xvmaddwod.h.bu
   364  	AXVMADDWODWHU:  0x0e96d << 15,       // xvmaddwod.w.hu
   365  	AXVMADDWODVWU:  0x0e96e << 15,       // xvmaddwod.d.wu
   366  	AXVMADDWODQVU:  0x0e96f << 15,       // xvmaddwod.q.du
   367  	AXVMADDWEVHBUB: 0x0e978 << 15,       // xvmaddwev.h.bu.b
   368  	AXVMADDWEVWHUH: 0x0e979 << 15,       // xvmaddwev.w.hu.h
   369  	AXVMADDWEVVWUW: 0x0e97a << 15,       // xvmaddwev.d.wu.w
   370  	AXVMADDWEVQVUV: 0x0e97b << 15,       // xvmaddwev.q.du.d
   371  	AXVMADDWODHBUB: 0x0e97c << 15,       // xvmaddwod.h.bu.b
   372  	AXVMADDWODWHUH: 0x0e97d << 15,       // xvmaddwod.w.hu.h
   373  	AXVMADDWODVWUW: 0x0e97e << 15,       // xvmaddwod.d.wu.w
   374  	AXVMADDWODQVUV: 0x0e97f << 15,       // xvmaddwod.q.du.d
   375  	AVSLLB:         0xe1d0 << 15,        // vsll.b
   376  	AVSLLH:         0xe1d1 << 15,        // vsll.h
   377  	AVSLLW:         0xe1d2 << 15,        // vsll.w
   378  	AVSLLV:         0xe1d3 << 15,        // vsll.d
   379  	AVSRLB:         0xe1d4 << 15,        // vsrl.b
   380  	AVSRLH:         0xe1d5 << 15,        // vsrl.h
   381  	AVSRLW:         0xe1d6 << 15,        // vsrl.w
   382  	AVSRLV:         0xe1d7 << 15,        // vsrl.d
   383  	AVSRAB:         0xe1d8 << 15,        // vsra.b
   384  	AVSRAH:         0xe1d9 << 15,        // vsra.h
   385  	AVSRAW:         0xe1da << 15,        // vsra.w
   386  	AVSRAV:         0xe1db << 15,        // vsra.d
   387  	AVROTRB:        0xe1dc << 15,        // vrotr.b
   388  	AVROTRH:        0xe1dd << 15,        // vrotr.h
   389  	AVROTRW:        0xe1de << 15,        // vrotr.w
   390  	AVROTRV:        0xe1df << 15,        // vrotr.d
   391  	AXVSLLB:        0xe9d0 << 15,        // xvsll.b
   392  	AXVSLLH:        0xe9d1 << 15,        // xvsll.h
   393  	AXVSLLW:        0xe9d2 << 15,        // xvsll.w
   394  	AXVSLLV:        0xe9d3 << 15,        // xvsll.d
   395  	AXVSRLB:        0xe9d4 << 15,        // xvsrl.b
   396  	AXVSRLH:        0xe9d5 << 15,        // xvsrl.h
   397  	AXVSRLW:        0xe9d6 << 15,        // xvsrl.w
   398  	AXVSRLV:        0xe9d7 << 15,        // xvsrl.d
   399  	AXVSRAB:        0xe9d8 << 15,        // xvsra.b
   400  	AXVSRAH:        0xe9d9 << 15,        // xvsra.h
   401  	AXVSRAW:        0xe9da << 15,        // xvsra.w
   402  	AXVSRAV:        0xe9db << 15,        // xvsra.d
   403  	AXVROTRB:       0xe9dc << 15,        // xvrotr.b
   404  	AXVROTRH:       0xe9dd << 15,        // xvrotr.h
   405  	AXVROTRW:       0xe9de << 15,        // xvrotr.w
   406  	AXVROTRV:       0xe9df << 15,        // xvrotr.d
   407  	AVADDB:         0xe014 << 15,        // vadd.b
   408  	AVADDH:         0xe015 << 15,        // vadd.h
   409  	AVADDW:         0xe016 << 15,        // vadd.w
   410  	AVADDV:         0xe017 << 15,        // vadd.d
   411  	AVADDQ:         0xe25a << 15,        // vadd.q
   412  	AVSUBB:         0xe018 << 15,        // vsub.b
   413  	AVSUBH:         0xe019 << 15,        // vsub.h
   414  	AVSUBW:         0xe01a << 15,        // vsub.w
   415  	AVSUBV:         0xe01b << 15,        // vsub.d
   416  	AVSUBQ:         0xe25b << 15,        // vsub.q
   417  	AXVADDB:        0xe814 << 15,        // xvadd.b
   418  	AXVADDH:        0xe815 << 15,        // xvadd.h
   419  	AXVADDW:        0xe816 << 15,        // xvadd.w
   420  	AXVADDV:        0xe817 << 15,        // xvadd.d
   421  	AXVADDQ:        0xea5a << 15,        // xvadd.q
   422  	AXVSUBB:        0xe818 << 15,        // xvsub.b
   423  	AXVSUBH:        0xe819 << 15,        // xvsub.h
   424  	AXVSUBW:        0xe81a << 15,        // xvsub.w
   425  	AXVSUBV:        0xe81b << 15,        // xvsub.d
   426  	AXVSUBQ:        0xea5b << 15,        // xvsub.q
   427  	AVSADDB:        0x0e08c << 15,       // vsadd.b
   428  	AVSADDH:        0x0e08d << 15,       // vsadd.h
   429  	AVSADDW:        0x0e08e << 15,       // vsadd.w
   430  	AVSADDV:        0x0e08f << 15,       // vsadd.d
   431  	AVSSUBB:        0x0e090 << 15,       // vssub.b
   432  	AVSSUBH:        0x0e091 << 15,       // vssub.w
   433  	AVSSUBW:        0x0e092 << 15,       // vssub.h
   434  	AVSSUBV:        0x0e093 << 15,       // vssub.d
   435  	AVSADDBU:       0x0e094 << 15,       // vsadd.bu
   436  	AVSADDHU:       0x0e095 << 15,       // vsadd.hu
   437  	AVSADDWU:       0x0e096 << 15,       // vsadd.wu
   438  	AVSADDVU:       0x0e097 << 15,       // vsadd.du
   439  	AVSSUBBU:       0x0e098 << 15,       // vssub.bu
   440  	AVSSUBHU:       0x0e099 << 15,       // vssub.wu
   441  	AVSSUBWU:       0x0e09a << 15,       // vssub.hu
   442  	AVSSUBVU:       0x0e09b << 15,       // vssub.du
   443  	AXVSADDB:       0x0e88c << 15,       // vxsadd.b
   444  	AXVSADDH:       0x0e88d << 15,       // vxsadd.h
   445  	AXVSADDW:       0x0e88e << 15,       // vxsadd.w
   446  	AXVSADDV:       0x0e88f << 15,       // vxsadd.d
   447  	AXVSSUBB:       0x0e890 << 15,       // xvssub.b
   448  	AXVSSUBH:       0x0e891 << 15,       // xvssub.h
   449  	AXVSSUBW:       0x0e892 << 15,       // xvssub.w
   450  	AXVSSUBV:       0x0e893 << 15,       // xvssub.d
   451  	AXVSADDBU:      0x0e894 << 15,       // vxsadd.bu
   452  	AXVSADDHU:      0x0e895 << 15,       // vxsadd.hu
   453  	AXVSADDWU:      0x0e896 << 15,       // vxsadd.wu
   454  	AXVSADDVU:      0x0e897 << 15,       // vxsadd.du
   455  	AXVSSUBBU:      0x0e898 << 15,       // xvssub.bu
   456  	AXVSSUBHU:      0x0e899 << 15,       // xvssub.hu
   457  	AXVSSUBWU:      0x0e89a << 15,       // xvssub.wu
   458  	AXVSSUBVU:      0x0e89b << 15,       // xvssub.du
   459  	AVILVLB:        0xe234 << 15,        // vilvl.b
   460  	AVILVLH:        0xe235 << 15,        // vilvl.h
   461  	AVILVLW:        0xe236 << 15,        // vilvl.w
   462  	AVILVLV:        0xe237 << 15,        // vilvl.d
   463  	AVILVHB:        0xe238 << 15,        // vilvh.b
   464  	AVILVHH:        0xe239 << 15,        // vilvh.h
   465  	AVILVHW:        0xe23a << 15,        // vilvh.w
   466  	AVILVHV:        0xe23b << 15,        // vilvh.d
   467  	AXVILVLB:       0xea34 << 15,        // xvilvl.b
   468  	AXVILVLH:       0xea35 << 15,        // xvilvl.h
   469  	AXVILVLW:       0xea36 << 15,        // xvilvl.w
   470  	AXVILVLV:       0xea37 << 15,        // xvilvl.d
   471  	AXVILVHB:       0xea38 << 15,        // xvilvh.b
   472  	AXVILVHH:       0xea39 << 15,        // xvilvh.h
   473  	AXVILVHW:       0xea3a << 15,        // xvilvh.w
   474  	AXVILVHV:       0xea3b << 15,        // xvilvh.d
   475  	AVMULB:         0xe108 << 15,        // vmul.b
   476  	AVMULH:         0xe109 << 15,        // vmul.h
   477  	AVMULW:         0xe10a << 15,        // vmul.w
   478  	AVMULV:         0xe10b << 15,        // vmul.d
   479  	AVMUHB:         0xe10c << 15,        // vmuh.b
   480  	AVMUHH:         0xe10d << 15,        // vmuh.h
   481  	AVMUHW:         0xe10e << 15,        // vmuh.w
   482  	AVMUHV:         0xe10f << 15,        // vmuh.d
   483  	AVMUHBU:        0xe110 << 15,        // vmuh.bu
   484  	AVMUHHU:        0xe111 << 15,        // vmuh.hu
   485  	AVMUHWU:        0xe112 << 15,        // vmuh.wu
   486  	AVMUHVU:        0xe113 << 15,        // vmuh.du
   487  	AXVMULB:        0xe908 << 15,        // xvmul.b
   488  	AXVMULH:        0xe909 << 15,        // xvmul.h
   489  	AXVMULW:        0xe90a << 15,        // xvmul.w
   490  	AXVMULV:        0xe90b << 15,        // xvmul.d
   491  	AXVMUHB:        0xe90c << 15,        // xvmuh.b
   492  	AXVMUHH:        0xe90d << 15,        // xvmuh.h
   493  	AXVMUHW:        0xe90e << 15,        // xvmuh.w
   494  	AXVMUHV:        0xe90f << 15,        // xvmuh.d
   495  	AXVMUHBU:       0xe910 << 15,        // xvmuh.bu
   496  	AXVMUHHU:       0xe911 << 15,        // xvmuh.hu
   497  	AXVMUHWU:       0xe912 << 15,        // xvmuh.wu
   498  	AXVMUHVU:       0xe913 << 15,        // xvmuh.du
   499  	AVADDF:         0xe261 << 15,        // vfadd.s
   500  	AVADDD:         0xe262 << 15,        // vfadd.d
   501  	AVSUBF:         0xe265 << 15,        // vfsub.s
   502  	AVSUBD:         0xe266 << 15,        // vfsub.d
   503  	AVMULF:         0xe271 << 15,        // vfmul.s
   504  	AVMULD:         0xe272 << 15,        // vfmul.d
   505  	AVDIVF:         0xe275 << 15,        // vfdiv.s
   506  	AVDIVD:         0xe276 << 15,        // vfdiv.d
   507  	AXVADDF:        0xea61 << 15,        // xvfadd.s
   508  	AXVADDD:        0xea62 << 15,        // xvfadd.d
   509  	AXVSUBF:        0xea65 << 15,        // xvfsub.s
   510  	AXVSUBD:        0xea66 << 15,        // xvfsub.d
   511  	AXVMULF:        0xea71 << 15,        // xvfmul.s
   512  	AXVMULD:        0xea72 << 15,        // xvfmul.d
   513  	AXVDIVF:        0xea75 << 15,        // xvfdiv.s
   514  	AXVDIVD:        0xea76 << 15,        // xvfdiv.d
   515  	AVBITCLRB:      0xe218 << 15,        // vbitclr.b
   516  	AVBITCLRH:      0xe219 << 15,        // vbitclr.h
   517  	AVBITCLRW:      0xe21a << 15,        // vbitclr.w
   518  	AVBITCLRV:      0xe21b << 15,        // vbitclr.d
   519  	AVBITSETB:      0xe21c << 15,        // vbitset.b
   520  	AVBITSETH:      0xe21d << 15,        // vbitset.h
   521  	AVBITSETW:      0xe21e << 15,        // vbitset.w
   522  	AVBITSETV:      0xe21f << 15,        // vbitset.d
   523  	AVBITREVB:      0xe220 << 15,        // vbitrev.b
   524  	AVBITREVH:      0xe221 << 15,        // vbitrev.h
   525  	AVBITREVW:      0xe222 << 15,        // vbitrev.w
   526  	AVBITREVV:      0xe223 << 15,        // vbitrev.d
   527  	AXVBITCLRB:     0xea18 << 15,        // xvbitclr.b
   528  	AXVBITCLRH:     0xea19 << 15,        // xvbitclr.h
   529  	AXVBITCLRW:     0xea1a << 15,        // xvbitclr.w
   530  	AXVBITCLRV:     0xea1b << 15,        // xvbitclr.d
   531  	AXVBITSETB:     0xea1c << 15,        // xvbitset.b
   532  	AXVBITSETH:     0xea1d << 15,        // xvbitset.h
   533  	AXVBITSETW:     0xea1e << 15,        // xvbitset.w
   534  	AXVBITSETV:     0xea1f << 15,        // xvbitset.d
   535  	AXVBITREVB:     0xea20 << 15,        // xvbitrev.b
   536  	AXVBITREVH:     0xea21 << 15,        // xvbitrev.h
   537  	AXVBITREVW:     0xea22 << 15,        // xvbitrev.w
   538  	AXVBITREVV:     0xea23 << 15,        // xvbitrev.d
   539  	AVSHUFH:        0x0e2f5 << 15,       // vshuf.h
   540  	AVSHUFW:        0x0e2f6 << 15,       // vshuf.w
   541  	AVSHUFV:        0x0e2f7 << 15,       // vshuf.d
   542  	AXVSHUFH:       0x0eaf5 << 15,       // xvshuf.h
   543  	AXVSHUFW:       0x0eaf6 << 15,       // xvshuf.w
   544  	AXVSHUFV:       0x0eaf7 << 15,       // xvshuf.d
   545  }
   546  
   547  var oprr = map[obj.As]uint32{
   548  	ACLOW:        0x4 << 10,             // clo.w
   549  	ACLZW:        0x5 << 10,             // clz.w
   550  	ACTOW:        0x6 << 10,             // cto.w
   551  	ACTZW:        0x7 << 10,             // ctz.w
   552  	ACLOV:        0x8 << 10,             // clo.d
   553  	ACLZV:        0x9 << 10,             // clz.d
   554  	ACTOV:        0xa << 10,             // cto.d
   555  	ACTZV:        0xb << 10,             // ctz.d
   556  	AREVB2H:      0xc << 10,             // revb.2h
   557  	AREVB4H:      0xd << 10,             // revb.4h
   558  	AREVB2W:      0xe << 10,             // revb.2w
   559  	AREVBV:       0xf << 10,             // revb.d
   560  	AREVH2W:      0x10 << 10,            // revh.2w
   561  	AREVHV:       0x11 << 10,            // revh.d
   562  	ABITREV4B:    0x12 << 10,            // bitrev.4b
   563  	ABITREV8B:    0x13 << 10,            // bitrev.8b
   564  	ABITREVW:     0x14 << 10,            // bitrev.w
   565  	ABITREVV:     0x15 << 10,            // bitrev.d
   566  	AEXTWH:       0x16 << 10,            // ext.w.h
   567  	AEXTWB:       0x17 << 10,            // ext.w.h
   568  	ACPUCFG:      0x1b << 10,            // cpucfg
   569  	ARDTIMELW:    0x18 << 10,            // rdtimel.w
   570  	ARDTIMEHW:    0x19 << 10,            // rdtimeh.w
   571  	ARDTIMED:     0x1a << 10,            // rdtime.d
   572  	ALLACQW:      0x0E15E0 << 10,        // ll.acq.w
   573  	ASCRELW:      0x0E15E1 << 10,        // sc.rel.w
   574  	ALLACQV:      0x0E15E2 << 10,        // ll.acq.d
   575  	ASCRELV:      0x0E15E3 << 10,        // sc.rel.d
   576  	ATRUNCFV:     0x46a9 << 10,          // ftintrz.l.s
   577  	ATRUNCDV:     0x46aa << 10,          // ftintrz.l.d
   578  	ATRUNCFW:     0x46a1 << 10,          // ftintrz.w.s
   579  	ATRUNCDW:     0x46a2 << 10,          // ftintrz.w.d
   580  	AMOVWF:       0x4744 << 10,          // ffint.s.w
   581  	AFFINTFW:     0x4744 << 10,          // ffint.s.w
   582  	AMOVVF:       0x4746 << 10,          // ffint.s.l
   583  	AFFINTFV:     0x4746 << 10,          // ffint.s.l
   584  	AMOVWD:       0x4748 << 10,          // ffint.d.w
   585  	AFFINTDW:     0x4748 << 10,          // ffint.d.w
   586  	AMOVVD:       0x474a << 10,          // ffint.d.l
   587  	AFFINTDV:     0x474a << 10,          // ffint.d.l
   588  	AMOVFW:       0x46c1 << 10,          // ftint.w.s
   589  	AFTINTWF:     0x46c1 << 10,          // ftint.w.s
   590  	AMOVDW:       0x46c2 << 10,          // ftint.w.d
   591  	AFTINTWD:     0x46c2 << 10,          // ftint.w.d
   592  	AMOVFV:       0x46c9 << 10,          // ftint.l.s
   593  	AFTINTVF:     0x46c9 << 10,          // ftint.l.s
   594  	AMOVDV:       0x46ca << 10,          // ftint.l.d
   595  	AFTINTVD:     0x46ca << 10,          // ftint.l.d
   596  	AFRINTF:      0x4791 << 10,          // frint.s
   597  	AFRINTD:      0x4792 << 10,          // frint.d
   598  	AMOVDF:       0x4646 << 10,          // fcvt.s.d
   599  	AMOVFD:       0x4649 << 10,          // fcvt.d.s
   600  	AABSF:        0x4501 << 10,          // fabs.s
   601  	AABSD:        0x4502 << 10,          // fabs.d
   602  	AMOVF:        0x4525 << 10,          // fmov.s
   603  	AMOVD:        0x4526 << 10,          // fmov.d
   604  	ANEGF:        0x4505 << 10,          // fneg.s
   605  	ANEGD:        0x4506 << 10,          // fneg.d
   606  	ASQRTF:       0x4511 << 10,          // fsqrt.s
   607  	ASQRTD:       0x4512 << 10,          // fsqrt.d
   608  	AFLOGBF:      0x4509 << 10,          // flogb.s
   609  	AFLOGBD:      0x450a << 10,          // flogb.d
   610  	AFCLASSF:     0x450d << 10,          // fclass.s
   611  	AFCLASSD:     0x450e << 10,          // fclass.d
   612  	AFTINTRMWF:   0x4681 << 10,          // ftintrm.w.s
   613  	AFTINTRMWD:   0x4682 << 10,          // ftintrm.w.d
   614  	AFTINTRMVF:   0x4689 << 10,          // ftintrm.l.s
   615  	AFTINTRMVD:   0x468a << 10,          // ftintrm.l.d
   616  	AFTINTRPWF:   0x4691 << 10,          // ftintrp.w.s
   617  	AFTINTRPWD:   0x4692 << 10,          // ftintrp.w.d
   618  	AFTINTRPVF:   0x4699 << 10,          // ftintrp.l.s
   619  	AFTINTRPVD:   0x469a << 10,          // ftintrp.l.d
   620  	AFTINTRZWF:   0x46a1 << 10,          // ftintrz.w.s
   621  	AFTINTRZWD:   0x46a2 << 10,          // ftintrz.w.d
   622  	AFTINTRZVF:   0x46a9 << 10,          // ftintrz.l.s
   623  	AFTINTRZVD:   0x46aa << 10,          // ftintrz.l.d
   624  	AFTINTRNEWF:  0x46b1 << 10,          // ftintrne.w.s
   625  	AFTINTRNEWD:  0x46b2 << 10,          // ftintrne.w.d
   626  	AFTINTRNEVF:  0x46b9 << 10,          // ftintrne.l.s
   627  	AFTINTRNEVD:  0x46ba << 10,          // ftintrne.l.d
   628  	AVPCNTB:      0x1ca708 << 10,        // vpcnt.b
   629  	AVPCNTH:      0x1ca709 << 10,        // vpcnt.h
   630  	AVPCNTW:      0x1ca70a << 10,        // vpcnt.w
   631  	AVPCNTV:      0x1ca70b << 10,        // vpcnt.v
   632  	AXVPCNTB:     0x1da708 << 10,        // xvpcnt.b
   633  	AXVPCNTH:     0x1da709 << 10,        // xvpcnt.h
   634  	AXVPCNTW:     0x1da70a << 10,        // xvpcnt.w
   635  	AXVPCNTV:     0x1da70b << 10,        // xvpcnt.v
   636  	AVFSQRTF:     0x1ca739 << 10,        // vfsqrt.s
   637  	AVFSQRTD:     0x1ca73a << 10,        // vfsqrt.d
   638  	AVFRECIPF:    0x1ca73d << 10,        // vfrecip.s
   639  	AVFRECIPD:    0x1ca73e << 10,        // vfrecip.d
   640  	AVFRSQRTF:    0x1ca741 << 10,        // vfrsqrt.s
   641  	AVFRSQRTD:    0x1ca742 << 10,        // vfrsqrt.d
   642  	AXVFSQRTF:    0x1da739 << 10,        // xvfsqrt.s
   643  	AXVFSQRTD:    0x1da73a << 10,        // xvfsqrt.d
   644  	AXVFRECIPF:   0x1da73d << 10,        // xvfrecip.s
   645  	AXVFRECIPD:   0x1da73e << 10,        // xvfrecip.d
   646  	AXVFRSQRTF:   0x1da741 << 10,        // xvfrsqrt.s
   647  	AXVFRSQRTD:   0x1da742 << 10,        // xvfrsqrt.d
   648  	AVNEGB:       0x1ca70c << 10,        // vneg.b
   649  	AVNEGH:       0x1ca70d << 10,        // vneg.h
   650  	AVNEGW:       0x1ca70e << 10,        // vneg.w
   651  	AVNEGV:       0x1ca70f << 10,        // vneg.d
   652  	AXVNEGB:      0x1da70c << 10,        // xvneg.b
   653  	AXVNEGH:      0x1da70d << 10,        // xvneg.h
   654  	AXVNEGW:      0x1da70e << 10,        // xvneg.w
   655  	AXVNEGV:      0x1da70f << 10,        // xvneg.d
   656  	AVFRINTRNEF:  0x1ca75d << 10,        // vfrintrne.s
   657  	AVFRINTRNED:  0x1ca75e << 10,        // vfrintrne.d
   658  	AVFRINTRZF:   0x1ca759 << 10,        // vfrintrz.s
   659  	AVFRINTRZD:   0x1ca75a << 10,        // vfrintrz.d
   660  	AVFRINTRPF:   0x1ca755 << 10,        // vfrintrp.s
   661  	AVFRINTRPD:   0x1ca756 << 10,        // vfrintrp.d
   662  	AVFRINTRMF:   0x1ca751 << 10,        // vfrintrm.s
   663  	AVFRINTRMD:   0x1ca752 << 10,        // vfrintrm.d
   664  	AVFRINTF:     0x1ca74d << 10,        // vfrint.s
   665  	AVFRINTD:     0x1ca74e << 10,        // vfrint.d
   666  	AXVFRINTRNEF: 0x1da75d << 10,        // xvfrintrne.s
   667  	AXVFRINTRNED: 0x1da75e << 10,        // xvfrintrne.d
   668  	AXVFRINTRZF:  0x1da759 << 10,        // xvfrintrz.s
   669  	AXVFRINTRZD:  0x1da75a << 10,        // xvfrintrz.d
   670  	AXVFRINTRPF:  0x1da755 << 10,        // xvfrintrp.s
   671  	AXVFRINTRPD:  0x1da756 << 10,        // xvfrintrp.d
   672  	AXVFRINTRMF:  0x1da751 << 10,        // xvfrintrm.s
   673  	AXVFRINTRMD:  0x1da752 << 10,        // xvfrintrm.d
   674  	AXVFRINTF:    0x1da74d << 10,        // xvfrint.s
   675  	AXVFRINTD:    0x1da74e << 10,        // xvfrint.d
   676  	AVFCLASSF:    0x1ca735 << 10,        // vfclass.s
   677  	AVFCLASSD:    0x1ca736 << 10,        // vfclass.d
   678  	AXVFCLASSF:   0x1da735 << 10,        // xvfclass.s
   679  	AXVFCLASSD:   0x1da736 << 10,        // xvfclass.d
   680  	AVSETEQV:     0x1ca726<<10 | 0x0<<3, // vseteqz.v
   681  	AVSETNEV:     0x1ca727<<10 | 0x0<<3, // vsetnez.v
   682  	AVSETANYEQB:  0x1ca728<<10 | 0x0<<3, // vsetanyeqz.b
   683  	AVSETANYEQH:  0x1ca729<<10 | 0x0<<3, // vsetanyeqz.h
   684  	AVSETANYEQW:  0x1ca72a<<10 | 0x0<<3, // vsetanyeqz.w
   685  	AVSETANYEQV:  0x1ca72b<<10 | 0x0<<3, // vsetanyeqz.d
   686  	AVSETALLNEB:  0x1ca72c<<10 | 0x0<<3, // vsetallnez.b
   687  	AVSETALLNEH:  0x1ca72d<<10 | 0x0<<3, // vsetallnez.h
   688  	AVSETALLNEW:  0x1ca72e<<10 | 0x0<<3, // vsetallnez.w
   689  	AVSETALLNEV:  0x1ca72f<<10 | 0x0<<3, // vsetallnez.d
   690  	AXVSETEQV:    0x1da726<<10 | 0x0<<3, // xvseteqz.v
   691  	AXVSETNEV:    0x1da727<<10 | 0x0<<3, // xvsetnez.v
   692  	AXVSETANYEQB: 0x1da728<<10 | 0x0<<3, // xvsetanyeqz.b
   693  	AXVSETANYEQH: 0x1da729<<10 | 0x0<<3, // xvsetanyeqz.h
   694  	AXVSETANYEQW: 0x1da72a<<10 | 0x0<<3, // xvsetanyeqz.w
   695  	AXVSETANYEQV: 0x1da72b<<10 | 0x0<<3, // xvsetanyeqz.d
   696  	AXVSETALLNEB: 0x1da72c<<10 | 0x0<<3, // xvsetallnez.b
   697  	AXVSETALLNEH: 0x1da72d<<10 | 0x0<<3, // xvsetallnez.h
   698  	AXVSETALLNEW: 0x1da72e<<10 | 0x0<<3, // xvsetallnez.w
   699  	AXVSETALLNEV: 0x1da72f<<10 | 0x0<<3, // xvsetallnez.d
   700  }
   701  
   702  var opi = map[obj.As]uint32{
   703  	ASYSCALL: 0x56 << 15,   // syscall
   704  	ABREAK:   0x54 << 15,   // break
   705  	ADBAR:    0x70e4 << 15, // dbar
   706  }
   707  
   708  var opir = map[obj.As]uint32{
   709  	ALU12IW:    0x0a << 25, // lu12i.w
   710  	ALU32ID:    0x0b << 25, // lu32i.d
   711  	APCALAU12I: 0x0d << 25, // pcalau12i
   712  	APCADDU12I: 0x0e << 25, // pcaddu12i
   713  }
   714  
   715  var opirr = map[obj.As]uint32{
   716  	ASGT:        0x008 << 22,          // slti
   717  	ASGTU:       0x009 << 22,          // sltui
   718  	AADD:        0x00a << 22,          // addi.w
   719  	AADDW:       0x00a << 22,          // addi.w
   720  	AADDV:       0x00b << 22,          // addi.d
   721  	AADDVU:      0x00b << 22,          // addi.d
   722  	ALU52ID:     0x00c << 22,          // lu52i.d
   723  	AAND:        0x00d << 22,          // andi
   724  	AOR:         0x00e << 22,          // ori
   725  	AXOR:        0x00f << 22,          // xori
   726  	ASLL:        0x00081 << 15,        // slli.w
   727  	ASRL:        0x00089 << 15,        // srli.w
   728  	ASRA:        0x00091 << 15,        // srai.w
   729  	AROTR:       0x00099 << 15,        // rotri.w
   730  	AADDV16:     0x4 << 26,            // addu16i.d
   731  	-ABEQ:       0x10 << 26,           // beqz
   732  	-ABNE:       0x11 << 26,           // bnez
   733  	AJIRL:       0x13 << 26,           // jirl
   734  	AJMP:        0x14 << 26,           // b
   735  	AJAL:        0x15 << 26,           // bl
   736  	ABEQ:        0x16 << 26,           // beq
   737  	ABNE:        0x17 << 26,           // bne
   738  	ABLT:        0x18 << 26,           // blt
   739  	ABLTZ:       0x18 << 26,           // blt
   740  	ABGTZ:       0x18 << 26,           // blt
   741  	ABGE:        0x19 << 26,           // bge
   742  	ABGEZ:       0x19 << 26,           // bge
   743  	ABLEZ:       0x19 << 26,           // bge
   744  	ABLTU:       0x1a << 26,           // bltu
   745  	ABGEU:       0x1b << 26,           // bgeu
   746  	ABFPT:       0x12<<26 | 0x1<<8,    // bcnez
   747  	ABFPF:       0x12<<26 | 0x0<<8,    // bceqz
   748  	APRELDX:     0x07058 << 15,        // preldx
   749  	-AMOVB:      0x0a0 << 22,          // ld.b
   750  	-AMOVH:      0x0a1 << 22,          // ld.h
   751  	-AMOVW:      0x0a2 << 22,          // ld.w
   752  	-AMOVV:      0x0a3 << 22,          // ld.d
   753  	AMOVB:       0x0a4 << 22,          // st.b
   754  	AMOVBU:      0x0a4 << 22,          // st.b
   755  	AMOVH:       0x0a5 << 22,          // st.h
   756  	AMOVHU:      0x0a5 << 22,          // st.h
   757  	AMOVW:       0x0a6 << 22,          // st.w
   758  	AMOVWU:      0x0a6 << 22,          // st.w
   759  	AMOVV:       0x0a7 << 22,          // st.d
   760  	-AMOVBU:     0x0a8 << 22,          // ld.bu
   761  	-AMOVHU:     0x0a9 << 22,          // ld.hu
   762  	-AMOVWU:     0x0aa << 22,          // ld.wu
   763  	-AMOVF:      0x0ac << 22,          // fld.s
   764  	AMOVF:       0x0ad << 22,          // fst.s
   765  	-AMOVD:      0x0ae << 22,          // fld.d
   766  	AMOVD:       0x0af << 22,          // fst.d
   767  	-ALL:        0x020 << 24,          // ll.w
   768  	-ALLW:       0x020 << 24,          // ll.w
   769  	ASC:         0x021 << 24,          // sc.w
   770  	ASCW:        0x021 << 24,          // sc.w
   771  	-ALLV:       0x022 << 24,          // ll.d
   772  	ASCV:        0x023 << 24,          // sc.d
   773  	-AMOVWP:     0x24 << 24,           // ldptr.w
   774  	AMOVWP:      0x25 << 24,           // stptr.w
   775  	-AMOVVP:     0x26 << 24,           // ldptr.d
   776  	AMOVVP:      0x27 << 24,           // stptr.d
   777  	-AVMOVQ:     0x0b0 << 22,          // vld
   778  	AVMOVQ:      0x0b1 << 22,          // vst
   779  	-AXVMOVQ:    0x0b2 << 22,          // xvld
   780  	AXVMOVQ:     0x0b3 << 22,          // xvst
   781  	ASLLV:       0x0041 << 16,         // slli.d
   782  	ASRLV:       0x0045 << 16,         // srli.d
   783  	ASRAV:       0x0049 << 16,         // srai.d
   784  	AROTRV:      0x004d << 16,         // rotri.d
   785  	AVANDB:      0x1cf4 << 18,         // vandi.b
   786  	AVORB:       0x1cf5 << 18,         // vori.b
   787  	AVXORB:      0x1cf6 << 18,         // xori.b
   788  	AVNORB:      0x1cf7 << 18,         // xnori.b
   789  	AXVANDB:     0x1df4 << 18,         // xvandi.b
   790  	AXVORB:      0x1df5 << 18,         // xvori.b
   791  	AXVXORB:     0x1df6 << 18,         // xvxori.b
   792  	AXVNORB:     0x1df7 << 18,         // xvnor.b
   793  	AVSEQB:      0x0e500 << 15,        // vseqi.b
   794  	AVSEQH:      0x0e501 << 15,        // vseqi.h
   795  	AVSEQW:      0x0e502 << 15,        // vseqi.w
   796  	AVSEQV:      0x0e503 << 15,        // vseqi.d
   797  	AXVSEQB:     0x0ed00 << 15,        // xvseqi.b
   798  	AXVSEQH:     0x0ed01 << 15,        // xvseqi.h
   799  	AXVSEQW:     0x0ed02 << 15,        // xvseqi.w
   800  	AXVSEQV:     0x0ed03 << 15,        // xvseqi.d
   801  	AVSLTB:      0x0e50c << 15,        // vslti.b
   802  	AVSLTH:      0x0e50d << 15,        // vslti.h
   803  	AVSLTW:      0x0e50e << 15,        // vslti.w
   804  	AVSLTV:      0x0e50f << 15,        // vslti.d
   805  	AVSLTBU:     0x0e510 << 15,        // vslti.bu
   806  	AVSLTHU:     0x0e511 << 15,        // vslti.hu
   807  	AVSLTWU:     0x0e512 << 15,        // vslti.wu
   808  	AVSLTVU:     0x0e513 << 15,        // vslti.du
   809  	AXVSLTB:     0x0ed0c << 15,        // xvslti.b
   810  	AXVSLTH:     0x0ed0d << 15,        // xvslti.h
   811  	AXVSLTW:     0x0ed0e << 15,        // xvslti.w
   812  	AXVSLTV:     0x0ed0f << 15,        // xvslti.d
   813  	AXVSLTBU:    0x0ed10 << 15,        // xvslti.bu
   814  	AXVSLTHU:    0x0ed11 << 15,        // xvslti.hu
   815  	AXVSLTWU:    0x0ed12 << 15,        // xvslti.wu
   816  	AXVSLTVU:    0x0ed13 << 15,        // xvslti.du
   817  	AVROTRB:     0x1ca8<<18 | 0x1<<13, // vrotri.b
   818  	AVROTRH:     0x1ca8<<18 | 0x1<<14, // vrotri.h
   819  	AVROTRW:     0x1ca8<<18 | 0x1<<15, // vrotri.w
   820  	AVROTRV:     0x1ca8<<18 | 0x1<<16, // vrotri.d
   821  	AXVROTRB:    0x1da8<<18 | 0x1<<13, // xvrotri.b
   822  	AXVROTRH:    0x1da8<<18 | 0x1<<14, // xvrotri.h
   823  	AXVROTRW:    0x1da8<<18 | 0x1<<15, // xvrotri.w
   824  	AXVROTRV:    0x1da8<<18 | 0x1<<16, // xvrotri.d
   825  	AVSLLB:      0x1ccb<<18 | 0x1<<13, // vslli.b
   826  	AVSLLH:      0x1ccb<<18 | 0x1<<14, // vslli.h
   827  	AVSLLW:      0x1ccb<<18 | 0x1<<15, // vslli.w
   828  	AVSLLV:      0x1ccb<<18 | 0x1<<16, // vslli.d
   829  	AVSRLB:      0x1ccc<<18 | 0x1<<13, // vsrli.b
   830  	AVSRLH:      0x1ccc<<18 | 0x1<<14, // vsrli.h
   831  	AVSRLW:      0x1ccc<<18 | 0x1<<15, // vsrli.w
   832  	AVSRLV:      0x1ccc<<18 | 0x1<<16, // vsrli.d
   833  	AVSRAB:      0x1ccd<<18 | 0x1<<13, // vsrai.b
   834  	AVSRAH:      0x1ccd<<18 | 0x1<<14, // vsrai.h
   835  	AVSRAW:      0x1ccd<<18 | 0x1<<15, // vsrai.w
   836  	AVSRAV:      0x1ccd<<18 | 0x1<<16, // vsrai.d
   837  	AXVSLLB:     0x1dcb<<18 | 0x1<<13, // xvslli.b
   838  	AXVSLLH:     0x1dcb<<18 | 0x1<<14, // xvslli.h
   839  	AXVSLLW:     0x1dcb<<18 | 0x1<<15, // xvslli.w
   840  	AXVSLLV:     0x1dcb<<18 | 0x1<<16, // xvslli.d
   841  	AXVSRLB:     0x1dcc<<18 | 0x1<<13, // xvsrli.b
   842  	AXVSRLH:     0x1dcc<<18 | 0x1<<14, // xvsrli.h
   843  	AXVSRLW:     0x1dcc<<18 | 0x1<<15, // xvsrli.w
   844  	AXVSRLV:     0x1dcc<<18 | 0x1<<16, // xvsrli.d
   845  	AXVSRAB:     0x1dcd<<18 | 0x1<<13, // xvsrai.b
   846  	AXVSRAH:     0x1dcd<<18 | 0x1<<14, // xvsrai.h
   847  	AXVSRAW:     0x1dcd<<18 | 0x1<<15, // xvsrai.w
   848  	AXVSRAV:     0x1dcd<<18 | 0x1<<16, // xvsrai.d
   849  	AVADDBU:     0xe514 << 15,         // vaddi.bu
   850  	AVADDHU:     0xe515 << 15,         // vaddi.hu
   851  	AVADDWU:     0xe516 << 15,         // vaddi.wu
   852  	AVADDVU:     0xe517 << 15,         // vaddi.du
   853  	AVSUBBU:     0xe518 << 15,         // vsubi.bu
   854  	AVSUBHU:     0xe519 << 15,         // vsubi.hu
   855  	AVSUBWU:     0xe51a << 15,         // vsubi.wu
   856  	AVSUBVU:     0xe51b << 15,         // vsubi.du
   857  	AXVADDBU:    0xed14 << 15,         // xvaddi.bu
   858  	AXVADDHU:    0xed15 << 15,         // xvaddi.hu
   859  	AXVADDWU:    0xed16 << 15,         // xvaddi.wu
   860  	AXVADDVU:    0xed17 << 15,         // xvaddi.du
   861  	AXVSUBBU:    0xed18 << 15,         // xvsubi.bu
   862  	AXVSUBHU:    0xed19 << 15,         // xvsubi.hu
   863  	AXVSUBWU:    0xed1a << 15,         // xvsubi.wu
   864  	AXVSUBVU:    0xed1b << 15,         // xvsubi.du
   865  	AVSHUF4IB:   0x1ce4 << 18,         // vshuf4i.b
   866  	AVSHUF4IH:   0x1ce5 << 18,         // vshuf4i.h
   867  	AVSHUF4IW:   0x1ce6 << 18,         // vshuf4i.w
   868  	AVSHUF4IV:   0x1ce7 << 18,         // vshuf4i.d
   869  	AXVSHUF4IB:  0x1de4 << 18,         // xvshuf4i.b
   870  	AXVSHUF4IH:  0x1de5 << 18,         // xvshuf4i.h
   871  	AXVSHUF4IW:  0x1de6 << 18,         // xvshuf4i.w
   872  	AXVSHUF4IV:  0x1de7 << 18,         // xvshuf4i.d
   873  	AVPERMIW:    0x1cf9 << 18,         // vpermi.w
   874  	AXVPERMIW:   0x1df9 << 18,         // xvpermi.w
   875  	AXVPERMIV:   0x1dfa << 18,         // xvpermi.d
   876  	AXVPERMIQ:   0x1dfb << 18,         // xvpermi.q
   877  	AVEXTRINSB:  0x1ce3 << 18,         // vextrins.b
   878  	AVEXTRINSH:  0x1ce2 << 18,         // vextrins.h
   879  	AVEXTRINSW:  0x1ce1 << 18,         // vextrins.w
   880  	AVEXTRINSV:  0x1ce0 << 18,         // vextrins.d
   881  	AXVEXTRINSB: 0x1de3 << 18,         // xvextrins.b
   882  	AXVEXTRINSH: 0x1de2 << 18,         // xvextrins.h
   883  	AXVEXTRINSW: 0x1de1 << 18,         // xvextrins.w
   884  	AXVEXTRINSV: 0x1de0 << 18,         // xvextrins.d
   885  	AVBITCLRB:   0x1cc4<<18 | 0x1<<13, // vbitclri.b
   886  	AVBITCLRH:   0x1cc4<<18 | 0x1<<14, // vbitclri.h
   887  	AVBITCLRW:   0x1cc4<<18 | 0x1<<15, // vbitclri.w
   888  	AVBITCLRV:   0x1cc4<<18 | 0x1<<16, // vbitclri.d
   889  	AVBITSETB:   0x1cc5<<18 | 0x1<<13, // vbitseti.b
   890  	AVBITSETH:   0x1cc5<<18 | 0x1<<14, // vbitseti.h
   891  	AVBITSETW:   0x1cc5<<18 | 0x1<<15, // vbitseti.w
   892  	AVBITSETV:   0x1cc5<<18 | 0x1<<16, // vbitseti.d
   893  	AVBITREVB:   0x1cc6<<18 | 0x1<<13, // vbitrevi.b
   894  	AVBITREVH:   0x1cc6<<18 | 0x1<<14, // vbitrevi.h
   895  	AVBITREVW:   0x1cc6<<18 | 0x1<<15, // vbitrevi.w
   896  	AVBITREVV:   0x1cc6<<18 | 0x1<<16, // vbitrevi.d
   897  	AXVBITCLRB:  0x1dc4<<18 | 0x1<<13, // xvbitclri.b
   898  	AXVBITCLRH:  0x1dc4<<18 | 0x1<<14, // xvbitclri.h
   899  	AXVBITCLRW:  0x1dc4<<18 | 0x1<<15, // xvbitclri.w
   900  	AXVBITCLRV:  0x1dc4<<18 | 0x1<<16, // xvbitclri.d
   901  	AXVBITSETB:  0x1dc5<<18 | 0x1<<13, // xvbitseti.b
   902  	AXVBITSETH:  0x1dc5<<18 | 0x1<<14, // xvbitseti.h
   903  	AXVBITSETW:  0x1dc5<<18 | 0x1<<15, // xvbitseti.w
   904  	AXVBITSETV:  0x1dc5<<18 | 0x1<<16, // xvbitseti.d
   905  	AXVBITREVB:  0x1dc6<<18 | 0x1<<13, // xvbitrevi.b
   906  	AXVBITREVH:  0x1dc6<<18 | 0x1<<14, // xvbitrevi.h
   907  	AXVBITREVW:  0x1dc6<<18 | 0x1<<15, // xvbitrevi.w
   908  	AXVBITREVV:  0x1dc6<<18 | 0x1<<16, // xvbitrevi.d
   909  }
   910  
   911  var opirrr = map[obj.As]uint32{
   912  	AALSLW:  0x2 << 17,  // alsl.w
   913  	AALSLWU: 0x3 << 17,  // alsl.wu
   914  	AALSLV:  0x16 << 17, // alsl.d
   915  }
   916  
   917  var opirir = map[obj.As]uint32{
   918  	ABSTRINSW:  0x3<<21 | 0x0<<15, // bstrins.w
   919  	ABSTRINSV:  0x2 << 22,         // bstrins.d
   920  	ABSTRPICKW: 0x3<<21 | 0x1<<15, // bstrpick.w
   921  	ABSTRPICKV: 0x3 << 22,         // bstrpick.d
   922  }
   923  
   924  var opiir = map[obj.As]uint32{
   925  	APRELD: 0x0ab << 22, // preld
   926  }
   927  
   928  var atomicInst = map[obj.As]uint32{
   929  	AAMSWAPB:   0x070B8 << 15, // amswap.b
   930  	AAMSWAPH:   0x070B9 << 15, // amswap.h
   931  	AAMSWAPW:   0x070C0 << 15, // amswap.w
   932  	AAMSWAPV:   0x070C1 << 15, // amswap.d
   933  	AAMCASB:    0x070B0 << 15, // amcas.b
   934  	AAMCASH:    0x070B1 << 15, // amcas.h
   935  	AAMCASW:    0x070B2 << 15, // amcas.w
   936  	AAMCASV:    0x070B3 << 15, // amcas.d
   937  	AAMADDW:    0x070C2 << 15, // amadd.w
   938  	AAMADDV:    0x070C3 << 15, // amadd.d
   939  	AAMANDW:    0x070C4 << 15, // amand.w
   940  	AAMANDV:    0x070C5 << 15, // amand.d
   941  	AAMORW:     0x070C6 << 15, // amor.w
   942  	AAMORV:     0x070C7 << 15, // amor.d
   943  	AAMXORW:    0x070C8 << 15, // amxor.w
   944  	AAMXORV:    0x070C9 << 15, // amxor.d
   945  	AAMMAXW:    0x070CA << 15, // ammax.w
   946  	AAMMAXV:    0x070CB << 15, // ammax.d
   947  	AAMMINW:    0x070CC << 15, // ammin.w
   948  	AAMMINV:    0x070CD << 15, // ammin.d
   949  	AAMMAXWU:   0x070CE << 15, // ammax.wu
   950  	AAMMAXVU:   0x070CF << 15, // ammax.du
   951  	AAMMINWU:   0x070D0 << 15, // ammin.wu
   952  	AAMMINVU:   0x070D1 << 15, // ammin.du
   953  	AAMSWAPDBB: 0x070BC << 15, // amswap_db.b
   954  	AAMSWAPDBH: 0x070BD << 15, // amswap_db.h
   955  	AAMSWAPDBW: 0x070D2 << 15, // amswap_db.w
   956  	AAMSWAPDBV: 0x070D3 << 15, // amswap_db.d
   957  	AAMCASDBB:  0x070B4 << 15, // amcas_db.b
   958  	AAMCASDBH:  0x070B5 << 15, // amcas_db.h
   959  	AAMCASDBW:  0x070B6 << 15, // amcas_db.w
   960  	AAMCASDBV:  0x070B7 << 15, // amcas_db.d
   961  	AAMADDDBW:  0x070D4 << 15, // amadd_db.w
   962  	AAMADDDBV:  0x070D5 << 15, // amadd_db.d
   963  	AAMANDDBW:  0x070D6 << 15, // amand_db.w
   964  	AAMANDDBV:  0x070D7 << 15, // amand_db.d
   965  	AAMORDBW:   0x070D8 << 15, // amor_db.w
   966  	AAMORDBV:   0x070D9 << 15, // amor_db.d
   967  	AAMXORDBW:  0x070DA << 15, // amxor_db.w
   968  	AAMXORDBV:  0x070DB << 15, // amxor_db.d
   969  	AAMMAXDBW:  0x070DC << 15, // ammax_db.w
   970  	AAMMAXDBV:  0x070DD << 15, // ammax_db.d
   971  	AAMMINDBW:  0x070DE << 15, // ammin_db.w
   972  	AAMMINDBV:  0x070DF << 15, // ammin_db.d
   973  	AAMMAXDBWU: 0x070E0 << 15, // ammax_db.wu
   974  	AAMMAXDBVU: 0x070E1 << 15, // ammax_db.du
   975  	AAMMINDBWU: 0x070E2 << 15, // ammin_db.wu
   976  	AAMMINDBVU: 0x070E3 << 15, // ammin_db.du
   977  }
   978  
   979  func (c *ctxt0) specialFpMovInst(a obj.As, fclass int, tclass int) uint32 {
   980  	switch a {
   981  	case AMOVV:
   982  		switch fclass {
   983  		case C_REG:
   984  			switch tclass {
   985  			case C_FREG:
   986  				return 0x452a << 10 // movgr2fr.d
   987  			case C_FCCREG:
   988  				return 0x4536 << 10 // movgr2cf
   989  			case C_FCSRREG:
   990  				return 0x4530 << 10 // movgr2fcsr
   991  			}
   992  		case C_FREG:
   993  			switch tclass {
   994  			case C_REG:
   995  				return 0x452e << 10 // movfr2gr.d
   996  			case C_FCCREG:
   997  				return 0x4534 << 10 // movfr2cf
   998  			}
   999  		case C_FCCREG:
  1000  			switch tclass {
  1001  			case C_REG:
  1002  				return 0x4537 << 10 // movcf2gr
  1003  			case C_FREG:
  1004  				return 0x4535 << 10 // movcf2fr
  1005  			}
  1006  		case C_FCSRREG:
  1007  			switch tclass {
  1008  			case C_REG:
  1009  				return 0x4532 << 10 // movfcsr2gr
  1010  			}
  1011  		}
  1012  
  1013  	case AMOVW:
  1014  		switch fclass {
  1015  		case C_REG:
  1016  			switch tclass {
  1017  			case C_FREG:
  1018  				return 0x4529 << 10 // movgr2fr.w
  1019  			}
  1020  		case C_FREG:
  1021  			switch tclass {
  1022  			case C_REG:
  1023  				return 0x452d << 10 // movfr2gr.s
  1024  			}
  1025  		}
  1026  	}
  1027  
  1028  	c.ctxt.Diag("bad class combination: %s %d,%d\n", a, fclass, tclass)
  1029  
  1030  	return 0
  1031  }
  1032  
  1033  func (c *ctxt0) specialLsxMovInst(a obj.As, fReg, tReg int16, offset_flag bool) (op_code, index_mask uint32) {
  1034  	farng := (fReg >> EXT_TYPE_SHIFT) & EXT_TYPE_MASK
  1035  	tarng := (tReg >> EXT_TYPE_SHIFT) & EXT_TYPE_MASK
  1036  	fclass := c.rclass(fReg)
  1037  	tclass := c.rclass(tReg)
  1038  
  1039  	switch fclass | (tclass << 16) {
  1040  	case C_REG | (C_ELEM << 16):
  1041  		// vmov Rn, Vd.<T>[index]
  1042  		switch a {
  1043  		case AVMOVQ:
  1044  			switch tarng {
  1045  			case ARNG_B:
  1046  				return (0x01CBAE << 14), 0xf // vinsgr2vr.b
  1047  			case ARNG_H:
  1048  				return (0x03975E << 13), 0x7 // vinsgr2vr.h
  1049  			case ARNG_W:
  1050  				return (0x072EBE << 12), 0x3 // vinsgr2vr.w
  1051  			case ARNG_V:
  1052  				return (0x0E5D7E << 11), 0x1 // vinsgr2vr.d
  1053  			}
  1054  		case AXVMOVQ:
  1055  			switch tarng {
  1056  			case ARNG_W:
  1057  				return (0x03B75E << 13), 0x7 // xvinsgr2vr.w
  1058  			case ARNG_V:
  1059  				return (0x076EBE << 12), 0x3 // xvinsgr2vr.d
  1060  			}
  1061  		}
  1062  
  1063  	case C_ELEM | (C_REG << 16):
  1064  		// vmov Vd.<T>[index], Rn
  1065  		switch a {
  1066  		case AVMOVQ:
  1067  			switch farng {
  1068  			case ARNG_B:
  1069  				return (0x01CBBE << 14), 0xf // vpickve2gr.b
  1070  			case ARNG_H:
  1071  				return (0x03977E << 13), 0x7 // vpickve2gr.h
  1072  			case ARNG_W:
  1073  				return (0x072EFE << 12), 0x3 // vpickve2gr.w
  1074  			case ARNG_V:
  1075  				return (0x0E5DFE << 11), 0x1 // vpickve2gr.d
  1076  			case ARNG_BU:
  1077  				return (0x01CBCE << 14), 0xf // vpickve2gr.bu
  1078  			case ARNG_HU:
  1079  				return (0x03979E << 13), 0x7 // vpickve2gr.hu
  1080  			case ARNG_WU:
  1081  				return (0x072F3E << 12), 0x3 // vpickve2gr.wu
  1082  			case ARNG_VU:
  1083  				return (0x0E5E7E << 11), 0x1 // vpickve2gr.du
  1084  			}
  1085  		case AXVMOVQ:
  1086  			switch farng {
  1087  			case ARNG_W:
  1088  				return (0x03B77E << 13), 0x7 // xvpickve2gr.w
  1089  			case ARNG_V:
  1090  				return (0x076EFE << 12), 0x3 // xvpickve2gr.d
  1091  			case ARNG_WU:
  1092  				return (0x03B79E << 13), 0x7 // xvpickve2gr.wu
  1093  			case ARNG_VU:
  1094  				return (0x076F3E << 12), 0x3 // xvpickve2gr.du
  1095  			}
  1096  		}
  1097  
  1098  	case C_REG | (C_ARNG << 16):
  1099  		switch {
  1100  		case offset_flag:
  1101  			// vmov offset(vj), vd.<T>
  1102  			switch a {
  1103  			case AVMOVQ:
  1104  				switch tarng {
  1105  				case ARNG_16B:
  1106  					return (0xC2 << 22), 0x0 // vldrepl.b
  1107  				case ARNG_8H:
  1108  					return (0x182 << 21), 0x0 // vldrepl.h
  1109  				case ARNG_4W:
  1110  					return (0x302 << 20), 0x0 // vldrepl.w
  1111  				case ARNG_2V:
  1112  					return (0x602 << 19), 0x0 // vldrepl.d
  1113  				}
  1114  			case AXVMOVQ:
  1115  				switch tarng {
  1116  				case ARNG_32B:
  1117  					return (0xCA << 22), 0x0 // xvldrepl.b
  1118  				case ARNG_16H:
  1119  					return (0x192 << 21), 0x0 // xvldrepl.h
  1120  				case ARNG_8W:
  1121  					return (0x322 << 20), 0x0 // xvldrepl.w
  1122  				case ARNG_4V:
  1123  					return (0x642 << 19), 0x0 // xvldrepl.d
  1124  				}
  1125  			}
  1126  		default:
  1127  			// vmov Rn, Vd.<T>
  1128  			switch a {
  1129  			case AVMOVQ:
  1130  				switch tarng {
  1131  				case ARNG_16B:
  1132  					return (0x1CA7C0 << 10), 0x0 // vreplgr2vr.b
  1133  				case ARNG_8H:
  1134  					return (0x1CA7C1 << 10), 0x0 // vreplgr2vr.h
  1135  				case ARNG_4W:
  1136  					return (0x1CA7C2 << 10), 0x0 // vreplgr2vr.w
  1137  				case ARNG_2V:
  1138  					return (0x1CA7C3 << 10), 0x0 // vreplgr2vr.d
  1139  				}
  1140  			case AXVMOVQ:
  1141  				switch tarng {
  1142  				case ARNG_32B:
  1143  					return (0x1DA7C0 << 10), 0x0 // xvreplgr2vr.b
  1144  				case ARNG_16H:
  1145  					return (0x1DA7C1 << 10), 0x0 // xvreplgr2vr.h
  1146  				case ARNG_8W:
  1147  					return (0x1DA7C2 << 10), 0x0 // xvreplgr2vr.w
  1148  				case ARNG_4V:
  1149  					return (0x1DA7C3 << 10), 0x0 // xvreplgr2vr.d
  1150  				}
  1151  			}
  1152  		}
  1153  
  1154  	case C_XREG | (C_ARNG << 16):
  1155  		// vmov  xj, xd.<T>
  1156  		switch a {
  1157  		case AVMOVQ:
  1158  			return 0, 0 // unsupported op
  1159  		case AXVMOVQ:
  1160  			switch tarng {
  1161  			case ARNG_32B:
  1162  				return (0x1DC1C0 << 10), 0x0 // xvreplve0.b
  1163  			case ARNG_16H:
  1164  				return (0x1DC1E0 << 10), 0x0 // xvreplve0.h
  1165  			case ARNG_8W:
  1166  				return (0x1DC1F0 << 10), 0x0 // xvreplve0.w
  1167  			case ARNG_4V:
  1168  				return (0x1DC1F8 << 10), 0x0 // xvreplve0.d
  1169  			case ARNG_2Q:
  1170  				return (0x1DC1FC << 10), 0x0 // xvreplve0.q
  1171  			}
  1172  		}
  1173  
  1174  	case C_XREG | (C_ELEM << 16):
  1175  		// vmov  xj, xd.<T>[index]
  1176  		switch a {
  1177  		case AVMOVQ:
  1178  			return 0, 0 // unsupported op
  1179  		case AXVMOVQ:
  1180  			switch tarng {
  1181  			case ARNG_W:
  1182  				return (0x03B7FE << 13), 0x7 // xvinsve0.w
  1183  			case ARNG_V:
  1184  				return (0x076FFE << 12), 0x3 // xvinsve0.d
  1185  			}
  1186  		}
  1187  
  1188  	case C_ELEM | (C_XREG << 16):
  1189  		// vmov  xj.<T>[index], xd
  1190  		switch a {
  1191  		case AVMOVQ:
  1192  			return 0, 0 // unsupported op
  1193  		case AXVMOVQ:
  1194  			switch farng {
  1195  			case ARNG_W:
  1196  				return (0x03B81E << 13), 0x7 // xvpickve.w
  1197  			case ARNG_V:
  1198  				return (0x07703E << 12), 0x3 // xvpickve.d
  1199  			}
  1200  		}
  1201  
  1202  	case C_ELEM | (C_ARNG << 16):
  1203  		// vmov  vj.<T>[index], vd.<T>
  1204  		switch a {
  1205  		case AVMOVQ:
  1206  			switch int32(farng) | (int32(tarng) << 16) {
  1207  			case int32(ARNG_B) | (int32(ARNG_16B) << 16):
  1208  				return (0x01CBDE << 14), 0xf // vreplvei.b
  1209  			case int32(ARNG_H) | (int32(ARNG_8H) << 16):
  1210  				return (0x0397BE << 13), 0x7 // vreplvei.h
  1211  			case int32(ARNG_W) | (int32(ARNG_4W) << 16):
  1212  				return (0x072F7E << 12), 0x3 // vreplvei.w
  1213  			case int32(ARNG_V) | (int32(ARNG_2V) << 16):
  1214  				return (0x0E5EFE << 11), 0x1 // vreplvei.d
  1215  			}
  1216  		case AXVMOVQ:
  1217  			return 0, 0 // unsupported op
  1218  		}
  1219  	}
  1220  
  1221  	return 0, 0
  1222  }
  1223  

View as plain text