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  	ANOR:           0x28 << 15,          // nor
    40  	AAND:           0x29 << 15,          // and
    41  	AOR:            0x2a << 15,          // or
    42  	AXOR:           0x2b << 15,          // xor
    43  	AORN:           0x2c << 15,          // orn
    44  	AANDN:          0x2d << 15,          // andn
    45  	ASLL:           0x2e << 15,          // sll.w
    46  	ASRL:           0x2f << 15,          // srl.w
    47  	ASRA:           0x30 << 15,          // sra.w
    48  	ASLLV:          0x31 << 15,          // sll.d
    49  	ASRLV:          0x32 << 15,          // srl.d
    50  	ASRAV:          0x33 << 15,          // sra.d
    51  	AROTR:          0x36 << 15,          // rotr.w
    52  	AROTRV:         0x37 << 15,          // rotr.d
    53  	AMUL:           0x38 << 15,          // mul.w
    54  	AMULW:          0x38 << 15,          // mul.w
    55  	AMULH:          0x39 << 15,          // mulh.w
    56  	AMULHU:         0x3a << 15,          // mulhu.w
    57  	AMULV:          0x3b << 15,          // mul.d
    58  	AMULVU:         0x3b << 15,          // mul.d
    59  	AMULHV:         0x3c << 15,          // mulh.d
    60  	AMULHVU:        0x3d << 15,          // mulhu.d
    61  	AMULWVW:        0x3e << 15,          // mulw.d.w
    62  	AMULWVWU:       0x3f << 15,          // mulw.d.wu
    63  	ADIV:           0x40 << 15,          // div.w
    64  	ADIVW:          0x40 << 15,          // div.w
    65  	AREM:           0x41 << 15,          // mod.w
    66  	AREMW:          0x41 << 15,          // mod.w
    67  	ADIVU:          0x42 << 15,          // div.wu
    68  	ADIVWU:         0x42 << 15,          // div.wu
    69  	AREMU:          0x43 << 15,          // mod.wu
    70  	AREMWU:         0x43 << 15,          // mod.wu
    71  	ADIVV:          0x44 << 15,          // div.d
    72  	AREMV:          0x45 << 15,          // mod.d
    73  	ADIVVU:         0x46 << 15,          // div.du
    74  	AREMVU:         0x47 << 15,          // mod.du
    75  	ACRCWBW:        0x48 << 15,          // crc.w.b.w
    76  	ACRCWHW:        0x49 << 15,          // crc.w.h.w
    77  	ACRCWWW:        0x4a << 15,          // crc.w.w.w
    78  	ACRCWVW:        0x4b << 15,          // crc.w.d.w
    79  	ACRCCWBW:       0x4c << 15,          // crcc.w.b.w
    80  	ACRCCWHW:       0x4d << 15,          // crcc.w.h.w
    81  	ACRCCWWW:       0x4e << 15,          // crcc.w.w.w
    82  	ACRCCWVW:       0x4f << 15,          // crcc.w.d.w
    83  	AJMP:           0x13 << 26,          // jirl r0, rj, 0
    84  	AJAL:           0x13<<26 | 1<<0,     // jirl r1, rj, 0
    85  	AMULF:          0x209 << 15,         // fmul.s
    86  	AMULD:          0x20a << 15,         // fmul.d
    87  	ADIVF:          0x20d << 15,         // fdiv.s
    88  	ADIVD:          0x20e << 15,         // fdiv.d
    89  	ASUBF:          0x205 << 15,         // fsub.s
    90  	ASUBD:          0x206 << 15,         // fsub.d
    91  	AADDF:          0x201 << 15,         // fadd.s
    92  	AADDD:          0x202 << 15,         // fadd.d
    93  	ACMPEQF:        0x0c1<<20 | 0x4<<15, // FCMP.CEQ.S
    94  	ACMPEQD:        0x0c2<<20 | 0x4<<15, // FCMP.CEQ.D
    95  	ACMPGED:        0x0c2<<20 | 0x7<<15, // FCMP.SLE.D
    96  	ACMPGEF:        0x0c1<<20 | 0x7<<15, // FCMP.SLE.S
    97  	ACMPGTD:        0x0c2<<20 | 0x3<<15, // FCMP.SLT.D
    98  	ACMPGTF:        0x0c1<<20 | 0x3<<15, // FCMP.SLT.S
    99  	AFMINF:         0x215 << 15,         // fmin.s
   100  	AFMIND:         0x216 << 15,         // fmin.d
   101  	AFMAXF:         0x211 << 15,         // fmax.s
   102  	AFMAXD:         0x212 << 15,         // fmax.d
   103  	AFMAXAF:        0x219 << 15,         // fmaxa.s
   104  	AFMAXAD:        0x21a << 15,         // fmaxa.d
   105  	AFMINAF:        0x21d << 15,         // fmina.s
   106  	AFMINAD:        0x21e << 15,         // fmina.d
   107  	AFSCALEBF:      0x221 << 15,         // fscaleb.s
   108  	AFSCALEBD:      0x222 << 15,         // fscaleb.d
   109  	AFCOPYSGF:      0x225 << 15,         // fcopysign.s
   110  	AFCOPYSGD:      0x226 << 15,         // fcopysign.d
   111  	-AMOVB:         0x07000 << 15,       // ldx.b
   112  	-AMOVH:         0x07008 << 15,       // ldx.h
   113  	-AMOVW:         0x07010 << 15,       // ldx.w
   114  	-AMOVV:         0x07018 << 15,       // ldx.d
   115  	-AMOVBU:        0x07040 << 15,       // ldx.bu
   116  	-AMOVHU:        0x07048 << 15,       // ldx.hu
   117  	-AMOVWU:        0x07050 << 15,       // ldx.wu
   118  	AMOVB:          0x07020 << 15,       // stx.b
   119  	AMOVH:          0x07028 << 15,       // stx.h
   120  	AMOVW:          0x07030 << 15,       // stx.w
   121  	AMOVV:          0x07038 << 15,       // stx.d
   122  	-AMOVF:         0x07060 << 15,       // fldx.s
   123  	-AMOVD:         0x07068 << 15,       // fldx.d
   124  	AMOVF:          0x07070 << 15,       // fstx.s
   125  	AMOVD:          0x07078 << 15,       // fstx.d
   126  	-AVMOVQ:        0x07080 << 15,       // vldx
   127  	-AXVMOVQ:       0x07090 << 15,       // xvldx
   128  	AVMOVQ:         0x07088 << 15,       // vstx
   129  	AXVMOVQ:        0x07098 << 15,       // xvstx
   130  	AVSEQB:         0x0e000 << 15,       // vseq.b
   131  	AXVSEQB:        0x0e800 << 15,       // xvseq.b
   132  	AVSEQH:         0x0e001 << 15,       // vseq.h
   133  	AXVSEQH:        0x0e801 << 15,       // xvseq.h
   134  	AVSEQW:         0x0e002 << 15,       // vseq.w
   135  	AXVSEQW:        0x0e802 << 15,       // xvseq.w
   136  	AVSEQV:         0x0e003 << 15,       // vseq.d
   137  	AXVSEQV:        0x0e803 << 15,       // xvseq.d
   138  	AVSLTB:         0x0e00c << 15,       // vslt.b
   139  	AVSLTH:         0x0e00d << 15,       // vslt.h
   140  	AVSLTW:         0x0e00e << 15,       // vslt.w
   141  	AVSLTV:         0x0e00f << 15,       // vslt.d
   142  	AVSLTBU:        0x0e010 << 15,       // vslt.bu
   143  	AVSLTHU:        0x0e011 << 15,       // vslt.hu
   144  	AVSLTWU:        0x0e012 << 15,       // vslt.wu
   145  	AVSLTVU:        0x0e013 << 15,       // vslt.du
   146  	AXVSLTB:        0x0e80c << 15,       // xvslt.b
   147  	AXVSLTH:        0x0e80d << 15,       // xvslt.h
   148  	AXVSLTW:        0x0e80e << 15,       // xvslt.w
   149  	AXVSLTV:        0x0e80f << 15,       // xvslt.d
   150  	AXVSLTBU:       0x0e810 << 15,       // xvslt.bu
   151  	AXVSLTHU:       0x0e811 << 15,       // xvslt.hu
   152  	AXVSLTWU:       0x0e812 << 15,       // xvslt.wu
   153  	AXVSLTVU:       0x0e813 << 15,       // xvslt.du
   154  	AVANDV:         0x0e24c << 15,       // vand.v
   155  	AVORV:          0x0e24d << 15,       // vor.v
   156  	AVXORV:         0x0e24e << 15,       // vxor.v
   157  	AVNORV:         0x0e24f << 15,       // vnor.v
   158  	AVANDNV:        0x0e250 << 15,       // vandn.v
   159  	AVORNV:         0x0e251 << 15,       // vorn.v
   160  	AXVANDV:        0x0ea4c << 15,       // xvand.v
   161  	AXVORV:         0x0ea4d << 15,       // xvor.v
   162  	AXVXORV:        0x0ea4e << 15,       // xvxor.v
   163  	AXVNORV:        0x0ea4f << 15,       // xvnor.v
   164  	AXVANDNV:       0x0ea50 << 15,       // xvandn.v
   165  	AXVORNV:        0x0ea51 << 15,       // xvorn.v
   166  	AVDIVB:         0xe1c0 << 15,        // vdiv.b
   167  	AVDIVH:         0xe1c1 << 15,        // vdiv.h
   168  	AVDIVW:         0xe1c2 << 15,        // vdiv.w
   169  	AVDIVV:         0xe1c3 << 15,        // vdiv.d
   170  	AVMODB:         0xe1c4 << 15,        // vmod.b
   171  	AVMODH:         0xe1c5 << 15,        // vmod.h
   172  	AVMODW:         0xe1c6 << 15,        // vmod.w
   173  	AVMODV:         0xe1c7 << 15,        // vmod.d
   174  	AVDIVBU:        0xe1c8 << 15,        // vdiv.bu
   175  	AVDIVHU:        0xe1c9 << 15,        // vdiv.hu
   176  	AVDIVWU:        0xe1ca << 15,        // vdiv.wu
   177  	AVDIVVU:        0xe1cb << 15,        // vdiv.du
   178  	AVMODBU:        0xe1cc << 15,        // vmod.bu
   179  	AVMODHU:        0xe1cd << 15,        // vmod.hu
   180  	AVMODWU:        0xe1ce << 15,        // vmod.wu
   181  	AVMODVU:        0xe1cf << 15,        // vmod.du
   182  	AXVDIVB:        0xe9c0 << 15,        // xvdiv.b
   183  	AXVDIVH:        0xe9c1 << 15,        // xvdiv.h
   184  	AXVDIVW:        0xe9c2 << 15,        // xvdiv.w
   185  	AXVDIVV:        0xe9c3 << 15,        // xvdiv.d
   186  	AXVMODB:        0xe9c4 << 15,        // xvmod.b
   187  	AXVMODH:        0xe9c5 << 15,        // xvmod.h
   188  	AXVMODW:        0xe9c6 << 15,        // xvmod.w
   189  	AXVMODV:        0xe9c7 << 15,        // xvmod.d
   190  	AXVDIVBU:       0xe9c8 << 15,        // xvdiv.bu
   191  	AXVDIVHU:       0xe9c9 << 15,        // xvdiv.hu
   192  	AXVDIVWU:       0xe9ca << 15,        // xvdiv.wu
   193  	AXVDIVVU:       0xe9cb << 15,        // xvdiv.du
   194  	AXVMODBU:       0xe9cc << 15,        // xvmod.bu
   195  	AXVMODHU:       0xe9cd << 15,        // xvmod.hu
   196  	AXVMODWU:       0xe9ce << 15,        // xvmod.wu
   197  	AXVMODVU:       0xe9cf << 15,        // xvmod.du
   198  	AVMULWEVHB:     0xe120 << 15,        // vmulwev.h.b
   199  	AVMULWEVWH:     0xe121 << 15,        // vmulwev.w.h
   200  	AVMULWEVVW:     0xe122 << 15,        // vmulwev.d.w
   201  	AVMULWEVQV:     0xe123 << 15,        // vmulwev.q.d
   202  	AVMULWODHB:     0xe124 << 15,        // vmulwod.h.b
   203  	AVMULWODWH:     0xe125 << 15,        // vmulwod.w.h
   204  	AVMULWODVW:     0xe126 << 15,        // vmulwod.d.w
   205  	AVMULWODQV:     0xe127 << 15,        // vmulwod.q.d
   206  	AVMULWEVHBU:    0xe130 << 15,        // vmulwev.h.bu
   207  	AVMULWEVWHU:    0xe131 << 15,        // vmulwev.w.hu
   208  	AVMULWEVVWU:    0xe132 << 15,        // vmulwev.d.wu
   209  	AVMULWEVQVU:    0xe133 << 15,        // vmulwev.q.du
   210  	AVMULWODHBU:    0xe134 << 15,        // vmulwod.h.bu
   211  	AVMULWODWHU:    0xe135 << 15,        // vmulwod.w.hu
   212  	AVMULWODVWU:    0xe136 << 15,        // vmulwod.d.wu
   213  	AVMULWODQVU:    0xe137 << 15,        // vmulwod.q.du
   214  	AVMULWEVHBUB:   0xe140 << 15,        // vmulwev.h.bu.b
   215  	AVMULWEVWHUH:   0xe141 << 15,        // vmulwev.w.hu.h
   216  	AVMULWEVVWUW:   0xe142 << 15,        // vmulwev.d.wu.w
   217  	AVMULWEVQVUV:   0xe143 << 15,        // vmulwev.q.du.d
   218  	AVMULWODHBUB:   0xe144 << 15,        // vmulwod.h.bu.b
   219  	AVMULWODWHUH:   0xe145 << 15,        // vmulwod.w.hu.h
   220  	AVMULWODVWUW:   0xe146 << 15,        // vmulwod.d.wu.w
   221  	AVMULWODQVUV:   0xe147 << 15,        // vmulwod.q.du.d
   222  	AXVMULWEVHB:    0xe920 << 15,        // xvmulwev.h.b
   223  	AXVMULWEVWH:    0xe921 << 15,        // xvmulwev.w.h
   224  	AXVMULWEVVW:    0xe922 << 15,        // xvmulwev.d.w
   225  	AXVMULWEVQV:    0xe923 << 15,        // xvmulwev.q.d
   226  	AXVMULWODHB:    0xe924 << 15,        // xvmulwod.h.b
   227  	AXVMULWODWH:    0xe925 << 15,        // xvmulwod.w.h
   228  	AXVMULWODVW:    0xe926 << 15,        // xvmulwod.d.w
   229  	AXVMULWODQV:    0xe927 << 15,        // xvmulwod.q.d
   230  	AXVMULWEVHBU:   0xe930 << 15,        // xvmulwev.h.bu
   231  	AXVMULWEVWHU:   0xe931 << 15,        // xvmulwev.w.hu
   232  	AXVMULWEVVWU:   0xe932 << 15,        // xvmulwev.d.wu
   233  	AXVMULWEVQVU:   0xe933 << 15,        // xvmulwev.q.du
   234  	AXVMULWODHBU:   0xe934 << 15,        // xvmulwod.h.bu
   235  	AXVMULWODWHU:   0xe935 << 15,        // xvmulwod.w.hu
   236  	AXVMULWODVWU:   0xe936 << 15,        // xvmulwod.d.wu
   237  	AXVMULWODQVU:   0xe937 << 15,        // xvmulwod.q.du
   238  	AXVMULWEVHBUB:  0xe940 << 15,        // xvmulwev.h.bu.b
   239  	AXVMULWEVWHUH:  0xe941 << 15,        // xvmulwev.w.hu.h
   240  	AXVMULWEVVWUW:  0xe942 << 15,        // xvmulwev.d.wu.w
   241  	AXVMULWEVQVUV:  0xe943 << 15,        // xvmulwev.q.du.d
   242  	AXVMULWODHBUB:  0xe944 << 15,        // xvmulwod.h.bu.b
   243  	AXVMULWODWHUH:  0xe945 << 15,        // xvmulwod.w.hu.h
   244  	AXVMULWODVWUW:  0xe946 << 15,        // xvmulwod.d.wu.w
   245  	AXVMULWODQVUV:  0xe947 << 15,        // xvmulwod.q.du.d
   246  	AVADDWEVHB:     0x0e03c << 15,       // vaddwev.h.b
   247  	AVADDWEVWH:     0x0e03d << 15,       // vaddwev.w.h
   248  	AVADDWEVVW:     0x0e03e << 15,       // vaddwev.d.w
   249  	AVADDWEVQV:     0x0e03f << 15,       // vaddwev.q.d
   250  	AVSUBWEVHB:     0x0e040 << 15,       // vsubwev.h.b
   251  	AVSUBWEVWH:     0x0e041 << 15,       // vsubwev.w.h
   252  	AVSUBWEVVW:     0x0e042 << 15,       // vsubwev.d.w
   253  	AVSUBWEVQV:     0x0e043 << 15,       // vsubwev.q.d
   254  	AVADDWODHB:     0x0e044 << 15,       // vaddwod.h.b
   255  	AVADDWODWH:     0x0e045 << 15,       // vaddwod.w.h
   256  	AVADDWODVW:     0x0e046 << 15,       // vaddwod.d.w
   257  	AVADDWODQV:     0x0e047 << 15,       // vaddwod.q.d
   258  	AVSUBWODHB:     0x0e048 << 15,       // vsubwod.h.b
   259  	AVSUBWODWH:     0x0e049 << 15,       // vsubwod.w.h
   260  	AVSUBWODVW:     0x0e04a << 15,       // vsubwod.d.w
   261  	AVSUBWODQV:     0x0e04b << 15,       // vsubwod.q.d
   262  	AXVADDWEVHB:    0x0e83c << 15,       // xvaddwev.h.b
   263  	AXVADDWEVWH:    0x0e83d << 15,       // xvaddwev.w.h
   264  	AXVADDWEVVW:    0x0e83e << 15,       // xvaddwev.d.w
   265  	AXVADDWEVQV:    0x0e83f << 15,       // xvaddwev.q.d
   266  	AXVSUBWEVHB:    0x0e840 << 15,       // xvsubwev.h.b
   267  	AXVSUBWEVWH:    0x0e841 << 15,       // xvsubwev.w.h
   268  	AXVSUBWEVVW:    0x0e842 << 15,       // xvsubwev.d.w
   269  	AXVSUBWEVQV:    0x0e843 << 15,       // xvsubwev.q.d
   270  	AXVADDWODHB:    0x0e844 << 15,       // xvaddwod.h.b
   271  	AXVADDWODWH:    0x0e845 << 15,       // xvaddwod.w.h
   272  	AXVADDWODVW:    0x0e846 << 15,       // xvaddwod.d.w
   273  	AXVADDWODQV:    0x0e847 << 15,       // xvaddwod.q.d
   274  	AXVSUBWODHB:    0x0e848 << 15,       // xvsubwod.h.b
   275  	AXVSUBWODWH:    0x0e849 << 15,       // xvsubwod.w.h
   276  	AXVSUBWODVW:    0x0e84a << 15,       // xvsubwod.d.w
   277  	AXVSUBWODQV:    0x0e84b << 15,       // xvsubwod.q.d
   278  	AVADDWEVHBU:    0x0e05c << 15,       // vaddwev.h.bu
   279  	AVADDWEVWHU:    0x0e05e << 15,       // vaddwev.w.hu
   280  	AVADDWEVVWU:    0x0e05e << 15,       // vaddwev.d.wu
   281  	AVADDWEVQVU:    0x0e05f << 15,       // vaddwev.q.du
   282  	AVSUBWEVHBU:    0x0e060 << 15,       // vsubwev.h.bu
   283  	AVSUBWEVWHU:    0x0e061 << 15,       // vsubwev.w.hu
   284  	AVSUBWEVVWU:    0x0e062 << 15,       // vsubwev.d.wu
   285  	AVSUBWEVQVU:    0x0e063 << 15,       // vsubwev.q.du
   286  	AVADDWODHBU:    0x0e064 << 15,       // vaddwod.h.bu
   287  	AVADDWODWHU:    0x0e065 << 15,       // vaddwod.w.hu
   288  	AVADDWODVWU:    0x0e066 << 15,       // vaddwod.d.wu
   289  	AVADDWODQVU:    0x0e067 << 15,       // vaddwod.q.du
   290  	AVSUBWODHBU:    0x0e068 << 15,       // vsubwod.h.bu
   291  	AVSUBWODWHU:    0x0e069 << 15,       // vsubwod.w.hu
   292  	AVSUBWODVWU:    0x0e06a << 15,       // vsubwod.d.wu
   293  	AVSUBWODQVU:    0x0e06b << 15,       // vsubwod.q.du
   294  	AXVADDWEVHBU:   0x0e85c << 15,       // xvaddwev.h.bu
   295  	AXVADDWEVWHU:   0x0e85d << 15,       // xvaddwev.w.hu
   296  	AXVADDWEVVWU:   0x0e85e << 15,       // xvaddwev.d.wu
   297  	AXVADDWEVQVU:   0x0e85f << 15,       // xvaddwev.q.du
   298  	AXVSUBWEVHBU:   0x0e860 << 15,       // xvsubwev.h.bu
   299  	AXVSUBWEVWHU:   0x0e861 << 15,       // xvsubwev.w.hu
   300  	AXVSUBWEVVWU:   0x0e862 << 15,       // xvsubwev.d.wu
   301  	AXVSUBWEVQVU:   0x0e863 << 15,       // xvsubwev.q.du
   302  	AXVADDWODHBU:   0x0e864 << 15,       // xvaddwod.h.bu
   303  	AXVADDWODWHU:   0x0e865 << 15,       // xvaddwod.w.hu
   304  	AXVADDWODVWU:   0x0e866 << 15,       // xvaddwod.d.wu
   305  	AXVADDWODQVU:   0x0e867 << 15,       // xvaddwod.q.du
   306  	AXVSUBWODHBU:   0x0e868 << 15,       // xvsubwod.h.bu
   307  	AXVSUBWODWHU:   0x0e869 << 15,       // xvsubwod.w.hu
   308  	AXVSUBWODVWU:   0x0e86a << 15,       // xvsubwod.d.wu
   309  	AXVSUBWODQVU:   0x0e86b << 15,       // xvsubwod.q.du
   310  	AVMADDB:        0x0e150 << 15,       // vmadd.b
   311  	AVMADDH:        0x0e151 << 15,       // vmadd.h
   312  	AVMADDW:        0x0e152 << 15,       // vmadd.w
   313  	AVMADDV:        0x0e153 << 15,       // vmadd.d
   314  	AVMSUBB:        0x0e154 << 15,       // vmsub.b
   315  	AVMSUBH:        0x0e155 << 15,       // vmsub.h
   316  	AVMSUBW:        0x0e156 << 15,       // vmsub.w
   317  	AVMSUBV:        0x0e157 << 15,       // vmsub.d
   318  	AXVMADDB:       0x0e950 << 15,       // xvmadd.b
   319  	AXVMADDH:       0x0e951 << 15,       // xvmadd.h
   320  	AXVMADDW:       0x0e952 << 15,       // xvmadd.w
   321  	AXVMADDV:       0x0e953 << 15,       // xvmadd.d
   322  	AXVMSUBB:       0x0e954 << 15,       // xvmsub.b
   323  	AXVMSUBH:       0x0e955 << 15,       // xvmsub.h
   324  	AXVMSUBW:       0x0e956 << 15,       // xvmsub.w
   325  	AXVMSUBV:       0x0e957 << 15,       // xvmsub.d
   326  	AVMADDWEVHB:    0x0e158 << 15,       // vmaddwev.h.b
   327  	AVMADDWEVWH:    0x0e159 << 15,       // vmaddwev.w.h
   328  	AVMADDWEVVW:    0x0e15a << 15,       // vmaddwev.d.w
   329  	AVMADDWEVQV:    0x0e15b << 15,       // vmaddwev.q.d
   330  	AVMADDWODHB:    0x0e15c << 15,       // vmaddwov.h.b
   331  	AVMADDWODWH:    0x0e15d << 15,       // vmaddwod.w.h
   332  	AVMADDWODVW:    0x0e15e << 15,       // vmaddwod.d.w
   333  	AVMADDWODQV:    0x0e15f << 15,       // vmaddwod.q.d
   334  	AVMADDWEVHBU:   0x0e168 << 15,       // vmaddwev.h.bu
   335  	AVMADDWEVWHU:   0x0e169 << 15,       // vmaddwev.w.hu
   336  	AVMADDWEVVWU:   0x0e16a << 15,       // vmaddwev.d.wu
   337  	AVMADDWEVQVU:   0x0e16b << 15,       // vmaddwev.q.du
   338  	AVMADDWODHBU:   0x0e16c << 15,       // vmaddwov.h.bu
   339  	AVMADDWODWHU:   0x0e16d << 15,       // vmaddwod.w.hu
   340  	AVMADDWODVWU:   0x0e16e << 15,       // vmaddwod.d.wu
   341  	AVMADDWODQVU:   0x0e16f << 15,       // vmaddwod.q.du
   342  	AVMADDWEVHBUB:  0x0e178 << 15,       // vmaddwev.h.bu.b
   343  	AVMADDWEVWHUH:  0x0e179 << 15,       // vmaddwev.w.hu.h
   344  	AVMADDWEVVWUW:  0x0e17a << 15,       // vmaddwev.d.wu.w
   345  	AVMADDWEVQVUV:  0x0e17b << 15,       // vmaddwev.q.du.d
   346  	AVMADDWODHBUB:  0x0e17c << 15,       // vmaddwov.h.bu.b
   347  	AVMADDWODWHUH:  0x0e17d << 15,       // vmaddwod.w.hu.h
   348  	AVMADDWODVWUW:  0x0e17e << 15,       // vmaddwod.d.wu.w
   349  	AVMADDWODQVUV:  0x0e17f << 15,       // vmaddwod.q.du.d
   350  	AXVMADDWEVHB:   0x0e958 << 15,       // xvmaddwev.h.b
   351  	AXVMADDWEVWH:   0x0e959 << 15,       // xvmaddwev.w.h
   352  	AXVMADDWEVVW:   0x0e95a << 15,       // xvmaddwev.d.w
   353  	AXVMADDWEVQV:   0x0e95b << 15,       // xvmaddwev.q.d
   354  	AXVMADDWODHB:   0x0e95c << 15,       // xvmaddwov.h.b
   355  	AXVMADDWODWH:   0x0e95d << 15,       // xvmaddwod.w.h
   356  	AXVMADDWODVW:   0x0e95e << 15,       // xvmaddwod.d.w
   357  	AXVMADDWODQV:   0x0e95f << 15,       // xvmaddwod.q.d
   358  	AXVMADDWEVHBU:  0x0e968 << 15,       // xvmaddwev.h.bu
   359  	AXVMADDWEVWHU:  0x0e969 << 15,       // xvmaddwev.w.hu
   360  	AXVMADDWEVVWU:  0x0e96a << 15,       // xvmaddwev.d.wu
   361  	AXVMADDWEVQVU:  0x0e96b << 15,       // xvmaddwev.q.du
   362  	AXVMADDWODHBU:  0x0e96c << 15,       // xvmaddwov.h.bu
   363  	AXVMADDWODWHU:  0x0e96d << 15,       // xvmaddwod.w.hu
   364  	AXVMADDWODVWU:  0x0e96e << 15,       // xvmaddwod.d.wu
   365  	AXVMADDWODQVU:  0x0e96f << 15,       // xvmaddwod.q.du
   366  	AXVMADDWEVHBUB: 0x0e978 << 15,       // xvmaddwev.h.bu.b
   367  	AXVMADDWEVWHUH: 0x0e979 << 15,       // xvmaddwev.w.hu.h
   368  	AXVMADDWEVVWUW: 0x0e97a << 15,       // xvmaddwev.d.wu.w
   369  	AXVMADDWEVQVUV: 0x0e97b << 15,       // xvmaddwev.q.du.d
   370  	AXVMADDWODHBUB: 0x0e97c << 15,       // xvmaddwov.h.bu.b
   371  	AXVMADDWODWHUH: 0x0e97d << 15,       // xvmaddwod.w.hu.h
   372  	AXVMADDWODVWUW: 0x0e97e << 15,       // xvmaddwod.d.wu.w
   373  	AXVMADDWODQVUV: 0x0e97f << 15,       // xvmaddwod.q.du.d
   374  	AVSLLB:         0xe1d0 << 15,        // vsll.b
   375  	AVSLLH:         0xe1d1 << 15,        // vsll.h
   376  	AVSLLW:         0xe1d2 << 15,        // vsll.w
   377  	AVSLLV:         0xe1d3 << 15,        // vsll.d
   378  	AVSRLB:         0xe1d4 << 15,        // vsrl.b
   379  	AVSRLH:         0xe1d5 << 15,        // vsrl.h
   380  	AVSRLW:         0xe1d6 << 15,        // vsrl.w
   381  	AVSRLV:         0xe1d7 << 15,        // vsrl.d
   382  	AVSRAB:         0xe1d8 << 15,        // vsra.b
   383  	AVSRAH:         0xe1d9 << 15,        // vsra.h
   384  	AVSRAW:         0xe1da << 15,        // vsra.w
   385  	AVSRAV:         0xe1db << 15,        // vsra.d
   386  	AVROTRB:        0xe1dc << 15,        // vrotr.b
   387  	AVROTRH:        0xe1dd << 15,        // vrotr.h
   388  	AVROTRW:        0xe1de << 15,        // vrotr.w
   389  	AVROTRV:        0xe1df << 15,        // vrotr.d
   390  	AXVSLLB:        0xe9d0 << 15,        // xvsll.b
   391  	AXVSLLH:        0xe9d1 << 15,        // xvsll.h
   392  	AXVSLLW:        0xe9d2 << 15,        // xvsll.w
   393  	AXVSLLV:        0xe9d3 << 15,        // xvsll.d
   394  	AXVSRLB:        0xe9d4 << 15,        // xvsrl.b
   395  	AXVSRLH:        0xe9d5 << 15,        // xvsrl.h
   396  	AXVSRLW:        0xe9d6 << 15,        // xvsrl.w
   397  	AXVSRLV:        0xe9d7 << 15,        // xvsrl.d
   398  	AXVSRAB:        0xe9d8 << 15,        // xvsra.b
   399  	AXVSRAH:        0xe9d9 << 15,        // xvsra.h
   400  	AXVSRAW:        0xe9da << 15,        // xvsra.w
   401  	AXVSRAV:        0xe9db << 15,        // xvsra.d
   402  	AXVROTRB:       0xe9dc << 15,        // xvrotr.b
   403  	AXVROTRH:       0xe9dd << 15,        // xvrotr.h
   404  	AXVROTRW:       0xe9de << 15,        // xvrotr.w
   405  	AXVROTRV:       0xe9df << 15,        // xvrotr.d
   406  	AVADDB:         0xe014 << 15,        // vadd.b
   407  	AVADDH:         0xe015 << 15,        // vadd.h
   408  	AVADDW:         0xe016 << 15,        // vadd.w
   409  	AVADDV:         0xe017 << 15,        // vadd.d
   410  	AVADDQ:         0xe25a << 15,        // vadd.q
   411  	AVSUBB:         0xe018 << 15,        // vsub.b
   412  	AVSUBH:         0xe019 << 15,        // vsub.h
   413  	AVSUBW:         0xe01a << 15,        // vsub.w
   414  	AVSUBV:         0xe01b << 15,        // vsub.d
   415  	AVSUBQ:         0xe25b << 15,        // vsub.q
   416  	AXVADDB:        0xe814 << 15,        // xvadd.b
   417  	AXVADDH:        0xe815 << 15,        // xvadd.h
   418  	AXVADDW:        0xe816 << 15,        // xvadd.w
   419  	AXVADDV:        0xe817 << 15,        // xvadd.d
   420  	AXVADDQ:        0xea5a << 15,        // xvadd.q
   421  	AXVSUBB:        0xe818 << 15,        // xvsub.b
   422  	AXVSUBH:        0xe819 << 15,        // xvsub.h
   423  	AXVSUBW:        0xe81a << 15,        // xvsub.w
   424  	AXVSUBV:        0xe81b << 15,        // xvsub.d
   425  	AXVSUBQ:        0xea5b << 15,        // xvsub.q
   426  	AVSADDB:        0x0e08c << 15,       // vsadd.b
   427  	AVSADDH:        0x0e08d << 15,       // vsadd.h
   428  	AVSADDW:        0x0e08e << 15,       // vsadd.w
   429  	AVSADDV:        0x0e08f << 15,       // vsadd.d
   430  	AVSSUBB:        0x0e090 << 15,       // vssub.b
   431  	AVSSUBH:        0x0e091 << 15,       // vssub.w
   432  	AVSSUBW:        0x0e092 << 15,       // vssub.h
   433  	AVSSUBV:        0x0e093 << 15,       // vssub.d
   434  	AVSADDBU:       0x0e094 << 15,       // vsadd.bu
   435  	AVSADDHU:       0x0e095 << 15,       // vsadd.hu
   436  	AVSADDWU:       0x0e096 << 15,       // vsadd.wu
   437  	AVSADDVU:       0x0e097 << 15,       // vsadd.du
   438  	AVSSUBBU:       0x0e098 << 15,       // vssub.bu
   439  	AVSSUBHU:       0x0e099 << 15,       // vssub.wu
   440  	AVSSUBWU:       0x0e09a << 15,       // vssub.hu
   441  	AVSSUBVU:       0x0e09b << 15,       // vssub.du
   442  	AXVSADDB:       0x0e88c << 15,       // vxsadd.b
   443  	AXVSADDH:       0x0e88d << 15,       // vxsadd.h
   444  	AXVSADDW:       0x0e88e << 15,       // vxsadd.w
   445  	AXVSADDV:       0x0e88f << 15,       // vxsadd.d
   446  	AXVSSUBB:       0x0e890 << 15,       // xvssub.b
   447  	AXVSSUBH:       0x0e891 << 15,       // xvssub.h
   448  	AXVSSUBW:       0x0e892 << 15,       // xvssub.w
   449  	AXVSSUBV:       0x0e893 << 15,       // xvssub.d
   450  	AXVSADDBU:      0x0e894 << 15,       // vxsadd.bu
   451  	AXVSADDHU:      0x0e896 << 15,       // vxsadd.hu
   452  	AXVSADDWU:      0x0e896 << 15,       // vxsadd.wu
   453  	AXVSADDVU:      0x0e897 << 15,       // vxsadd.du
   454  	AXVSSUBBU:      0x0e898 << 15,       // xvssub.bu
   455  	AXVSSUBHU:      0x0e899 << 15,       // xvssub.hu
   456  	AXVSSUBWU:      0x0e89a << 15,       // xvssub.wu
   457  	AXVSSUBVU:      0x0e89b << 15,       // xvssub.du
   458  	AVILVLB:        0xe234 << 15,        // vilvl.b
   459  	AVILVLH:        0xe235 << 15,        // vilvl.h
   460  	AVILVLW:        0xe236 << 15,        // vilvl.w
   461  	AVILVLV:        0xe237 << 15,        // vilvl.d
   462  	AVILVHB:        0xe238 << 15,        // vilvh.b
   463  	AVILVHH:        0xe239 << 15,        // vilvh.h
   464  	AVILVHW:        0xe23a << 15,        // vilvh.w
   465  	AVILVHV:        0xe23b << 15,        // vilvh.d
   466  	AXVILVLB:       0xea34 << 15,        // xvilvl.b
   467  	AXVILVLH:       0xea35 << 15,        // xvilvl.h
   468  	AXVILVLW:       0xea36 << 15,        // xvilvl.w
   469  	AXVILVLV:       0xea37 << 15,        // xvilvl.d
   470  	AXVILVHB:       0xea38 << 15,        // xvilvh.b
   471  	AXVILVHH:       0xea39 << 15,        // xvilvh.h
   472  	AXVILVHW:       0xea3a << 15,        // xvilvh.w
   473  	AXVILVHV:       0xea3b << 15,        // xvilvh.d
   474  	AVMULB:         0xe108 << 15,        // vmul.b
   475  	AVMULH:         0xe109 << 15,        // vmul.h
   476  	AVMULW:         0xe10a << 15,        // vmul.w
   477  	AVMULV:         0xe10b << 15,        // vmul.d
   478  	AVMUHB:         0xe10c << 15,        // vmuh.b
   479  	AVMUHH:         0xe10d << 15,        // vmuh.h
   480  	AVMUHW:         0xe10e << 15,        // vmuh.w
   481  	AVMUHV:         0xe10f << 15,        // vmuh.d
   482  	AVMUHBU:        0xe110 << 15,        // vmuh.bu
   483  	AVMUHHU:        0xe111 << 15,        // vmuh.hu
   484  	AVMUHWU:        0xe112 << 15,        // vmuh.wu
   485  	AVMUHVU:        0xe113 << 15,        // vmuh.du
   486  	AXVMULB:        0xe908 << 15,        // xvmul.b
   487  	AXVMULH:        0xe909 << 15,        // xvmul.h
   488  	AXVMULW:        0xe90a << 15,        // xvmul.w
   489  	AXVMULV:        0xe90b << 15,        // xvmul.d
   490  	AXVMUHB:        0xe90c << 15,        // xvmuh.b
   491  	AXVMUHH:        0xe90d << 15,        // xvmuh.h
   492  	AXVMUHW:        0xe90e << 15,        // xvmuh.w
   493  	AXVMUHV:        0xe90f << 15,        // xvmuh.d
   494  	AXVMUHBU:       0xe910 << 15,        // xvmuh.bu
   495  	AXVMUHHU:       0xe911 << 15,        // xvmuh.hu
   496  	AXVMUHWU:       0xe912 << 15,        // xvmuh.wu
   497  	AXVMUHVU:       0xe913 << 15,        // xvmuh.du
   498  	AVADDF:         0xe261 << 15,        // vfadd.s
   499  	AVADDD:         0xe262 << 15,        // vfadd.d
   500  	AVSUBF:         0xe265 << 15,        // vfsub.s
   501  	AVSUBD:         0xe266 << 15,        // vfsub.d
   502  	AVMULF:         0xe271 << 15,        // vfmul.s
   503  	AVMULD:         0xe272 << 15,        // vfmul.d
   504  	AVDIVF:         0xe275 << 15,        // vfdiv.s
   505  	AVDIVD:         0xe276 << 15,        // vfdiv.d
   506  	AXVADDF:        0xea61 << 15,        // xvfadd.s
   507  	AXVADDD:        0xea62 << 15,        // xvfadd.d
   508  	AXVSUBF:        0xea65 << 15,        // xvfsub.s
   509  	AXVSUBD:        0xea66 << 15,        // xvfsub.d
   510  	AXVMULF:        0xea71 << 15,        // xvfmul.s
   511  	AXVMULD:        0xea72 << 15,        // xvfmul.d
   512  	AXVDIVF:        0xea75 << 15,        // xvfdiv.s
   513  	AXVDIVD:        0xea76 << 15,        // xvfdiv.d
   514  	AVBITCLRB:      0xe218 << 15,        // vbitclr.b
   515  	AVBITCLRH:      0xe219 << 15,        // vbitclr.h
   516  	AVBITCLRW:      0xe21a << 15,        // vbitclr.w
   517  	AVBITCLRV:      0xe21b << 15,        // vbitclr.d
   518  	AVBITSETB:      0xe21c << 15,        // vbitset.b
   519  	AVBITSETH:      0xe21d << 15,        // vbitset.h
   520  	AVBITSETW:      0xe21e << 15,        // vbitset.w
   521  	AVBITSETV:      0xe21f << 15,        // vbitset.d
   522  	AVBITREVB:      0xe220 << 15,        // vbitrev.b
   523  	AVBITREVH:      0xe221 << 15,        // vbitrev.h
   524  	AVBITREVW:      0xe222 << 15,        // vbitrev.w
   525  	AVBITREVV:      0xe223 << 15,        // vbitrev.d
   526  	AXVBITCLRB:     0xea18 << 15,        // xvbitclr.b
   527  	AXVBITCLRH:     0xea19 << 15,        // xvbitclr.h
   528  	AXVBITCLRW:     0xea1a << 15,        // xvbitclr.w
   529  	AXVBITCLRV:     0xea1b << 15,        // xvbitclr.d
   530  	AXVBITSETB:     0xea1c << 15,        // xvbitset.b
   531  	AXVBITSETH:     0xea1d << 15,        // xvbitset.h
   532  	AXVBITSETW:     0xea1e << 15,        // xvbitset.w
   533  	AXVBITSETV:     0xea1f << 15,        // xvbitset.d
   534  	AXVBITREVB:     0xea20 << 15,        // xvbitrev.b
   535  	AXVBITREVH:     0xea21 << 15,        // xvbitrev.h
   536  	AXVBITREVW:     0xea22 << 15,        // xvbitrev.w
   537  	AXVBITREVV:     0xea23 << 15,        // xvbitrev.d
   538  	AVSHUFH:        0x0e2f5 << 15,       // vshuf.h
   539  	AVSHUFW:        0x0e2f6 << 15,       // vshuf.w
   540  	AVSHUFV:        0x0e2f7 << 15,       // vshuf.d
   541  	AXVSHUFH:       0x0eaf5 << 15,       // xvshuf.h
   542  	AXVSHUFW:       0x0eaf6 << 15,       // xvshuf.w
   543  	AXVSHUFV:       0x0eaf7 << 15,       // xvshuf.d
   544  }
   545  
   546  var oprr = map[obj.As]uint32{
   547  	ACLOW:        0x4 << 10,             // clo.w
   548  	ACLZW:        0x5 << 10,             // clz.w
   549  	ACTOW:        0x6 << 10,             // cto.w
   550  	ACTZW:        0x7 << 10,             // ctz.w
   551  	ACLOV:        0x8 << 10,             // clo.d
   552  	ACLZV:        0x9 << 10,             // clz.d
   553  	ACTOV:        0xa << 10,             // cto.d
   554  	ACTZV:        0xb << 10,             // ctz.d
   555  	AREVB2H:      0xc << 10,             // revb.2h
   556  	AREVB4H:      0xd << 10,             // revb.4h
   557  	AREVB2W:      0xe << 10,             // revb.2w
   558  	AREVBV:       0xf << 10,             // revb.d
   559  	AREVH2W:      0x10 << 10,            // revh.2w
   560  	AREVHV:       0x11 << 10,            // revh.d
   561  	ABITREV4B:    0x12 << 10,            // bitrev.4b
   562  	ABITREV8B:    0x13 << 10,            // bitrev.8b
   563  	ABITREVW:     0x14 << 10,            // bitrev.w
   564  	ABITREVV:     0x15 << 10,            // bitrev.d
   565  	AEXTWH:       0x16 << 10,            // ext.w.h
   566  	AEXTWB:       0x17 << 10,            // ext.w.h
   567  	ACPUCFG:      0x1b << 10,            // cpucfg
   568  	ARDTIMELW:    0x18 << 10,            // rdtimel.w
   569  	ARDTIMEHW:    0x19 << 10,            // rdtimeh.w
   570  	ARDTIMED:     0x1a << 10,            // rdtime.d
   571  	ATRUNCFV:     0x46a9 << 10,          // ftintrz.l.s
   572  	ATRUNCDV:     0x46aa << 10,          // ftintrz.l.d
   573  	ATRUNCFW:     0x46a1 << 10,          // ftintrz.w.s
   574  	ATRUNCDW:     0x46a2 << 10,          // ftintrz.w.d
   575  	AMOVWF:       0x4744 << 10,          // ffint.s.w
   576  	AFFINTFW:     0x4744 << 10,          // ffint.s.w
   577  	AMOVVF:       0x4746 << 10,          // ffint.s.l
   578  	AFFINTFV:     0x4746 << 10,          // ffint.s.l
   579  	AMOVWD:       0x4748 << 10,          // ffint.d.w
   580  	AFFINTDW:     0x4748 << 10,          // ffint.d.w
   581  	AMOVVD:       0x474a << 10,          // ffint.d.l
   582  	AFFINTDV:     0x474a << 10,          // ffint.d.l
   583  	AMOVFW:       0x46c1 << 10,          // ftint.w.s
   584  	AFTINTWF:     0x46c1 << 10,          // ftint.w.s
   585  	AMOVDW:       0x46c2 << 10,          // ftint.w.d
   586  	AFTINTWD:     0x46c2 << 10,          // ftint.w.d
   587  	AMOVFV:       0x46c9 << 10,          // ftint.l.s
   588  	AFTINTVF:     0x46c9 << 10,          // ftint.l.s
   589  	AMOVDV:       0x46ca << 10,          // ftint.l.d
   590  	AFTINTVD:     0x46ca << 10,          // ftint.l.d
   591  	AMOVDF:       0x4646 << 10,          // fcvt.s.d
   592  	AMOVFD:       0x4649 << 10,          // fcvt.d.s
   593  	AABSF:        0x4501 << 10,          // fabs.s
   594  	AABSD:        0x4502 << 10,          // fabs.d
   595  	AMOVF:        0x4525 << 10,          // fmov.s
   596  	AMOVD:        0x4526 << 10,          // fmov.d
   597  	ANEGF:        0x4505 << 10,          // fneg.s
   598  	ANEGD:        0x4506 << 10,          // fneg.d
   599  	ASQRTF:       0x4511 << 10,          // fsqrt.s
   600  	ASQRTD:       0x4512 << 10,          // fsqrt.d
   601  	AFLOGBF:      0x4509 << 10,          // flogb.s
   602  	AFLOGBD:      0x450a << 10,          // flogb.d
   603  	AFCLASSF:     0x450d << 10,          // fclass.s
   604  	AFCLASSD:     0x450e << 10,          // fclass.d
   605  	AFTINTRMWF:   0x4681 << 10,          // ftintrm.w.s
   606  	AFTINTRMWD:   0x4682 << 10,          // ftintrm.w.d
   607  	AFTINTRMVF:   0x4689 << 10,          // ftintrm.l.s
   608  	AFTINTRMVD:   0x468a << 10,          // ftintrm.l.d
   609  	AFTINTRPWF:   0x4691 << 10,          // ftintrp.w.s
   610  	AFTINTRPWD:   0x4692 << 10,          // ftintrp.w.d
   611  	AFTINTRPVF:   0x4699 << 10,          // ftintrp.l.s
   612  	AFTINTRPVD:   0x469a << 10,          // ftintrp.l.d
   613  	AFTINTRZWF:   0x46a1 << 10,          // ftintrz.w.s
   614  	AFTINTRZWD:   0x46a2 << 10,          // ftintrz.w.d
   615  	AFTINTRZVF:   0x46a9 << 10,          // ftintrz.l.s
   616  	AFTINTRZVD:   0x46aa << 10,          // ftintrz.l.d
   617  	AFTINTRNEWF:  0x46b1 << 10,          // ftintrne.w.s
   618  	AFTINTRNEWD:  0x46b2 << 10,          // ftintrne.w.d
   619  	AFTINTRNEVF:  0x46b9 << 10,          // ftintrne.l.s
   620  	AFTINTRNEVD:  0x46ba << 10,          // ftintrne.l.d
   621  	AVPCNTB:      0x1ca708 << 10,        // vpcnt.b
   622  	AVPCNTH:      0x1ca709 << 10,        // vpcnt.h
   623  	AVPCNTW:      0x1ca70a << 10,        // vpcnt.w
   624  	AVPCNTV:      0x1ca70b << 10,        // vpcnt.v
   625  	AXVPCNTB:     0x1da708 << 10,        // xvpcnt.b
   626  	AXVPCNTH:     0x1da709 << 10,        // xvpcnt.h
   627  	AXVPCNTW:     0x1da70a << 10,        // xvpcnt.w
   628  	AXVPCNTV:     0x1da70b << 10,        // xvpcnt.v
   629  	AVFSQRTF:     0x1ca739 << 10,        // vfsqrt.s
   630  	AVFSQRTD:     0x1ca73a << 10,        // vfsqrt.d
   631  	AVFRECIPF:    0x1ca73d << 10,        // vfrecip.s
   632  	AVFRECIPD:    0x1ca73e << 10,        // vfrecip.d
   633  	AVFRSQRTF:    0x1ca741 << 10,        // vfrsqrt.s
   634  	AVFRSQRTD:    0x1ca742 << 10,        // vfrsqrt.d
   635  	AXVFSQRTF:    0x1da739 << 10,        // xvfsqrt.s
   636  	AXVFSQRTD:    0x1da73a << 10,        // xvfsqrt.d
   637  	AXVFRECIPF:   0x1da73d << 10,        // xvfrecip.s
   638  	AXVFRECIPD:   0x1da73e << 10,        // xvfrecip.d
   639  	AXVFRSQRTF:   0x1da741 << 10,        // xvfrsqrt.s
   640  	AXVFRSQRTD:   0x1da742 << 10,        // xvfrsqrt.d
   641  	AVNEGB:       0x1ca70c << 10,        // vneg.b
   642  	AVNEGH:       0x1ca70d << 10,        // vneg.h
   643  	AVNEGW:       0x1ca70e << 10,        // vneg.w
   644  	AVNEGV:       0x1ca70f << 10,        // vneg.d
   645  	AXVNEGB:      0x1da70c << 10,        // xvneg.b
   646  	AXVNEGH:      0x1da70d << 10,        // xvneg.h
   647  	AXVNEGW:      0x1da70e << 10,        // xvneg.w
   648  	AXVNEGV:      0x1da70f << 10,        // xvneg.d
   649  	AVFRINTRNEF:  0x1ca75d << 10,        // vfrintrne.s
   650  	AVFRINTRNED:  0x1ca75e << 10,        // vfrintrne.d
   651  	AVFRINTRZF:   0x1ca759 << 10,        // vfrintrz.s
   652  	AVFRINTRZD:   0x1ca75a << 10,        // vfrintrz.d
   653  	AVFRINTRPF:   0x1ca755 << 10,        // vfrintrp.s
   654  	AVFRINTRPD:   0x1ca756 << 10,        // vfrintrp.d
   655  	AVFRINTRMF:   0x1ca751 << 10,        // vfrintrm.s
   656  	AVFRINTRMD:   0x1ca752 << 10,        // vfrintrm.d
   657  	AVFRINTF:     0x1ca74d << 10,        // vfrint.s
   658  	AVFRINTD:     0x1ca74e << 10,        // vfrint.d
   659  	AXVFRINTRNEF: 0x1da75d << 10,        // xvfrintrne.s
   660  	AXVFRINTRNED: 0x1da75e << 10,        // xvfrintrne.d
   661  	AXVFRINTRZF:  0x1da759 << 10,        // xvfrintrz.s
   662  	AXVFRINTRZD:  0x1da75a << 10,        // xvfrintrz.d
   663  	AXVFRINTRPF:  0x1da755 << 10,        // xvfrintrp.s
   664  	AXVFRINTRPD:  0x1da756 << 10,        // xvfrintrp.d
   665  	AXVFRINTRMF:  0x1da751 << 10,        // xvfrintrm.s
   666  	AXVFRINTRMD:  0x1da752 << 10,        // xvfrintrm.d
   667  	AXVFRINTF:    0x1da74d << 10,        // xvfrint.s
   668  	AXVFRINTD:    0x1da74e << 10,        // xvfrint.d
   669  	AVFCLASSF:    0x1ca735 << 10,        // vfclass.s
   670  	AVFCLASSD:    0x1ca736 << 10,        // vfclass.d
   671  	AXVFCLASSF:   0x1da735 << 10,        // xvfclass.s
   672  	AXVFCLASSD:   0x1da736 << 10,        // xvfclass.d
   673  	AVSETEQV:     0x1ca726<<10 | 0x0<<3, // vseteqz.v
   674  	AVSETNEV:     0x1ca727<<10 | 0x0<<3, // vsetnez.v
   675  	AVSETANYEQB:  0x1ca728<<10 | 0x0<<3, // vsetanyeqz.b
   676  	AVSETANYEQH:  0x1ca729<<10 | 0x0<<3, // vsetanyeqz.h
   677  	AVSETANYEQW:  0x1ca72a<<10 | 0x0<<3, // vsetanyeqz.w
   678  	AVSETANYEQV:  0x1ca72b<<10 | 0x0<<3, // vsetanyeqz.d
   679  	AVSETALLNEB:  0x1ca72c<<10 | 0x0<<3, // vsetallnez.b
   680  	AVSETALLNEH:  0x1ca72d<<10 | 0x0<<3, // vsetallnez.h
   681  	AVSETALLNEW:  0x1ca72e<<10 | 0x0<<3, // vsetallnez.w
   682  	AVSETALLNEV:  0x1ca72f<<10 | 0x0<<3, // vsetallnez.d
   683  	AXVSETEQV:    0x1da726<<10 | 0x0<<3, // xvseteqz.v
   684  	AXVSETNEV:    0x1da727<<10 | 0x0<<3, // xvsetnez.v
   685  	AXVSETANYEQB: 0x1da728<<10 | 0x0<<3, // xvsetanyeqz.b
   686  	AXVSETANYEQH: 0x1da729<<10 | 0x0<<3, // xvsetanyeqz.h
   687  	AXVSETANYEQW: 0x1da72a<<10 | 0x0<<3, // xvsetanyeqz.w
   688  	AXVSETANYEQV: 0x1da72b<<10 | 0x0<<3, // xvsetanyeqz.d
   689  	AXVSETALLNEB: 0x1da72c<<10 | 0x0<<3, // xvsetallnez.b
   690  	AXVSETALLNEH: 0x1da72d<<10 | 0x0<<3, // xvsetallnez.h
   691  	AXVSETALLNEW: 0x1da72e<<10 | 0x0<<3, // xvsetallnez.w
   692  	AXVSETALLNEV: 0x1da72f<<10 | 0x0<<3, // xvsetallnez.d
   693  }
   694  
   695  var opi = map[obj.As]uint32{
   696  	ASYSCALL: 0x56 << 15,   // syscall
   697  	ABREAK:   0x54 << 15,   // break
   698  	ADBAR:    0x70e4 << 15, // dbar
   699  }
   700  
   701  var opir = map[obj.As]uint32{
   702  	ALU12IW:    0x0a << 25, // lu12i.w
   703  	ALU32ID:    0x0b << 25, // lu32i.d
   704  	APCALAU12I: 0x0d << 25, // pcalau12i
   705  	APCADDU12I: 0x0e << 25, // pcaddu12i
   706  }
   707  
   708  var opirr = map[obj.As]uint32{
   709  	ASGT:        0x008 << 22,          // slti
   710  	ASGTU:       0x009 << 22,          // sltui
   711  	AADD:        0x00a << 22,          // addi.w
   712  	AADDW:       0x00a << 22,          // addi.w
   713  	AADDV:       0x00b << 22,          // addi.d
   714  	AADDVU:      0x00b << 22,          // addi.d
   715  	ALU52ID:     0x00c << 22,          // lu52i.d
   716  	AAND:        0x00d << 22,          // andi
   717  	AOR:         0x00e << 22,          // ori
   718  	AXOR:        0x00f << 22,          // xori
   719  	ASLL:        0x00081 << 15,        // slli.w
   720  	ASRL:        0x00089 << 15,        // srli.w
   721  	ASRA:        0x00091 << 15,        // srai.w
   722  	AROTR:       0x00099 << 15,        // rotri.w
   723  	AADDV16:     0x4 << 26,            // addu16i.d
   724  	-ABEQ:       0x10 << 26,           // beqz
   725  	-ABNE:       0x11 << 26,           // bnez
   726  	AJIRL:       0x13 << 26,           // jirl
   727  	AJMP:        0x14 << 26,           // b
   728  	AJAL:        0x15 << 26,           // bl
   729  	ABEQ:        0x16 << 26,           // beq
   730  	ABNE:        0x17 << 26,           // bne
   731  	ABLT:        0x18 << 26,           // blt
   732  	ABLTZ:       0x18 << 26,           // blt
   733  	ABGTZ:       0x18 << 26,           // blt
   734  	ABGE:        0x19 << 26,           // bge
   735  	ABGEZ:       0x19 << 26,           // bge
   736  	ABLEZ:       0x19 << 26,           // bge
   737  	ABLTU:       0x1a << 26,           // bltu
   738  	ABGEU:       0x1b << 26,           // bgeu
   739  	ABFPT:       0x12<<26 | 0x1<<8,    // bcnez
   740  	ABFPF:       0x12<<26 | 0x0<<8,    // bceqz
   741  	APRELDX:     0x07058 << 15,        // preldx
   742  	-AMOVB:      0x0a0 << 22,          // ld.b
   743  	-AMOVH:      0x0a1 << 22,          // ld.h
   744  	-AMOVW:      0x0a2 << 22,          // ld.w
   745  	-AMOVV:      0x0a3 << 22,          // ld.d
   746  	AMOVB:       0x0a4 << 22,          // st.b
   747  	AMOVBU:      0x0a4 << 22,          // st.b
   748  	AMOVH:       0x0a5 << 22,          // st.h
   749  	AMOVHU:      0x0a5 << 22,          // st.h
   750  	AMOVW:       0x0a6 << 22,          // st.w
   751  	AMOVWU:      0x0a6 << 22,          // st.w
   752  	AMOVV:       0x0a7 << 22,          // st.d
   753  	-AMOVBU:     0x0a8 << 22,          // ld.bu
   754  	-AMOVHU:     0x0a9 << 22,          // ld.hu
   755  	-AMOVWU:     0x0aa << 22,          // ld.wu
   756  	-AMOVF:      0x0ac << 22,          // fld.s
   757  	AMOVF:       0x0ad << 22,          // fst.s
   758  	-AMOVD:      0x0ae << 22,          // fld.d
   759  	AMOVD:       0x0af << 22,          // fst.d
   760  	-ALL:        0x020 << 24,          // ll.w
   761  	ASC:         0x021 << 24,          // sc.w
   762  	-ALLV:       0x022 << 24,          // ll.d
   763  	ASCV:        0x023 << 24,          // sc.d
   764  	-AMOVWP:     0x24 << 24,           // ldptr.w
   765  	AMOVWP:      0x25 << 24,           // stptr.w
   766  	-AMOVVP:     0x26 << 24,           // ldptr.d
   767  	AMOVVP:      0x27 << 24,           // stptr.d
   768  	-AVMOVQ:     0x0b0 << 22,          // vld
   769  	AVMOVQ:      0x0b1 << 22,          // vst
   770  	-AXVMOVQ:    0x0b2 << 22,          // xvld
   771  	AXVMOVQ:     0x0b3 << 22,          // xvst
   772  	ASLLV:       0x0041 << 16,         // slli.d
   773  	ASRLV:       0x0045 << 16,         // srli.d
   774  	ASRAV:       0x0049 << 16,         // srai.d
   775  	AROTRV:      0x004d << 16,         // rotri.d
   776  	AVANDB:      0x1cf4 << 18,         // vandi.b
   777  	AVORB:       0x1cf5 << 18,         // vori.b
   778  	AVXORB:      0x1cf6 << 18,         // xori.b
   779  	AVNORB:      0x1cf7 << 18,         // xnori.b
   780  	AXVANDB:     0x1df4 << 18,         // xvandi.b
   781  	AXVORB:      0x1df5 << 18,         // xvori.b
   782  	AXVXORB:     0x1df6 << 18,         // xvxori.b
   783  	AXVNORB:     0x1df7 << 18,         // xvnor.b
   784  	AVSEQB:      0x0e500 << 15,        // vseqi.b
   785  	AVSEQH:      0x0e501 << 15,        // vseqi.h
   786  	AVSEQW:      0x0e502 << 15,        // vseqi.w
   787  	AVSEQV:      0x0e503 << 15,        // vseqi.d
   788  	AXVSEQB:     0x0ed00 << 15,        // xvseqi.b
   789  	AXVSEQH:     0x0ed01 << 15,        // xvseqi.h
   790  	AXVSEQW:     0x0ed02 << 15,        // xvseqi.w
   791  	AXVSEQV:     0x0ed03 << 15,        // xvseqi.d
   792  	AVSLTB:      0x0e50c << 15,        // vslti.b
   793  	AVSLTH:      0x0e50d << 15,        // vslti.h
   794  	AVSLTW:      0x0e50e << 15,        // vslti.w
   795  	AVSLTV:      0x0e50f << 15,        // vslti.d
   796  	AVSLTBU:     0x0e510 << 15,        // vslti.bu
   797  	AVSLTHU:     0x0e511 << 15,        // vslti.hu
   798  	AVSLTWU:     0x0e512 << 15,        // vslti.wu
   799  	AVSLTVU:     0x0e513 << 15,        // vslti.du
   800  	AXVSLTB:     0x0ed0c << 15,        // xvslti.b
   801  	AXVSLTH:     0x0ed0d << 15,        // xvslti.h
   802  	AXVSLTW:     0x0ed0e << 15,        // xvslti.w
   803  	AXVSLTV:     0x0ed0f << 15,        // xvslti.d
   804  	AXVSLTBU:    0x0ed10 << 15,        // xvslti.bu
   805  	AXVSLTHU:    0x0ed11 << 15,        // xvslti.hu
   806  	AXVSLTWU:    0x0ed12 << 15,        // xvslti.wu
   807  	AXVSLTVU:    0x0ed13 << 15,        // xvslti.du
   808  	AVROTRB:     0x1ca8<<18 | 0x1<<13, // vrotri.b
   809  	AVROTRH:     0x1ca8<<18 | 0x1<<14, // vrotri.h
   810  	AVROTRW:     0x1ca8<<18 | 0x1<<15, // vrotri.w
   811  	AVROTRV:     0x1ca8<<18 | 0x1<<16, // vrotri.d
   812  	AXVROTRB:    0x1da8<<18 | 0x1<<13, // xvrotri.b
   813  	AXVROTRH:    0x1da8<<18 | 0x1<<14, // xvrotri.h
   814  	AXVROTRW:    0x1da8<<18 | 0x1<<15, // xvrotri.w
   815  	AXVROTRV:    0x1da8<<18 | 0x1<<16, // xvrotri.d
   816  	AVSLLB:      0x1ccb<<18 | 0x1<<13, // vslli.b
   817  	AVSLLH:      0x1ccb<<18 | 0x1<<14, // vslli.h
   818  	AVSLLW:      0x1ccb<<18 | 0x1<<15, // vslli.w
   819  	AVSLLV:      0x1ccb<<18 | 0x1<<16, // vslli.d
   820  	AVSRLB:      0x1ccc<<18 | 0x1<<13, // vsrli.b
   821  	AVSRLH:      0x1ccc<<18 | 0x1<<14, // vsrli.h
   822  	AVSRLW:      0x1ccc<<18 | 0x1<<15, // vsrli.w
   823  	AVSRLV:      0x1ccc<<18 | 0x1<<16, // vsrli.d
   824  	AVSRAB:      0x1ccd<<18 | 0x1<<13, // vsrai.b
   825  	AVSRAH:      0x1ccd<<18 | 0x1<<14, // vsrai.h
   826  	AVSRAW:      0x1ccd<<18 | 0x1<<15, // vsrai.w
   827  	AVSRAV:      0x1ccd<<18 | 0x1<<16, // vsrai.d
   828  	AXVSLLB:     0x1dcb<<18 | 0x1<<13, // xvslli.b
   829  	AXVSLLH:     0x1dcb<<18 | 0x1<<14, // xvslli.h
   830  	AXVSLLW:     0x1dcb<<18 | 0x1<<15, // xvslli.w
   831  	AXVSLLV:     0x1dcb<<18 | 0x1<<16, // xvslli.d
   832  	AXVSRLB:     0x1dcc<<18 | 0x1<<13, // xvsrli.b
   833  	AXVSRLH:     0x1dcc<<18 | 0x1<<14, // xvsrli.h
   834  	AXVSRLW:     0x1dcc<<18 | 0x1<<15, // xvsrli.w
   835  	AXVSRLV:     0x1dcc<<18 | 0x1<<16, // xvsrli.d
   836  	AXVSRAB:     0x1dcd<<18 | 0x1<<13, // xvsrai.b
   837  	AXVSRAH:     0x1dcd<<18 | 0x1<<14, // xvsrai.h
   838  	AXVSRAW:     0x1dcd<<18 | 0x1<<15, // xvsrai.w
   839  	AXVSRAV:     0x1dcd<<18 | 0x1<<16, // xvsrai.d
   840  	AVADDBU:     0xe514 << 15,         // vaddi.bu
   841  	AVADDHU:     0xe515 << 15,         // vaddi.hu
   842  	AVADDWU:     0xe516 << 15,         // vaddi.wu
   843  	AVADDVU:     0xe517 << 15,         // vaddi.du
   844  	AVSUBBU:     0xe518 << 15,         // vsubi.bu
   845  	AVSUBHU:     0xe519 << 15,         // vsubi.hu
   846  	AVSUBWU:     0xe51a << 15,         // vsubi.wu
   847  	AVSUBVU:     0xe51b << 15,         // vsubi.du
   848  	AXVADDBU:    0xed14 << 15,         // xvaddi.bu
   849  	AXVADDHU:    0xed15 << 15,         // xvaddi.hu
   850  	AXVADDWU:    0xed16 << 15,         // xvaddi.wu
   851  	AXVADDVU:    0xed17 << 15,         // xvaddi.du
   852  	AXVSUBBU:    0xed18 << 15,         // xvsubi.bu
   853  	AXVSUBHU:    0xed19 << 15,         // xvsubi.hu
   854  	AXVSUBWU:    0xed1a << 15,         // xvsubi.wu
   855  	AXVSUBVU:    0xed1b << 15,         // xvsubi.du
   856  	AVSHUF4IB:   0x1ce4 << 18,         // vshuf4i.b
   857  	AVSHUF4IH:   0x1ce5 << 18,         // vshuf4i.h
   858  	AVSHUF4IW:   0x1ce6 << 18,         // vshuf4i.w
   859  	AVSHUF4IV:   0x1ce7 << 18,         // vshuf4i.d
   860  	AXVSHUF4IB:  0x1de4 << 18,         // xvshuf4i.b
   861  	AXVSHUF4IH:  0x1de5 << 18,         // xvshuf4i.h
   862  	AXVSHUF4IW:  0x1de6 << 18,         // xvshuf4i.w
   863  	AXVSHUF4IV:  0x1de7 << 18,         // xvshuf4i.d
   864  	AVPERMIW:    0x1cf9 << 18,         // vpermi.w
   865  	AXVPERMIW:   0x1df9 << 18,         // xvpermi.w
   866  	AXVPERMIV:   0x1dfa << 18,         // xvpermi.d
   867  	AXVPERMIQ:   0x1dfb << 18,         // xvpermi.q
   868  	AVEXTRINSB:  0x1ce3 << 18,         // vextrins.b
   869  	AVEXTRINSH:  0x1ce2 << 18,         // vextrins.h
   870  	AVEXTRINSW:  0x1ce1 << 18,         // vextrins.w
   871  	AVEXTRINSV:  0x1ce0 << 18,         // vextrins.d
   872  	AXVEXTRINSB: 0x1de3 << 18,         // xvextrins.b
   873  	AXVEXTRINSH: 0x1de2 << 18,         // xvextrins.h
   874  	AXVEXTRINSW: 0x1de1 << 18,         // xvextrins.w
   875  	AXVEXTRINSV: 0x1de0 << 18,         // xvextrins.d
   876  	AVBITCLRB:   0x1cc4<<18 | 0x1<<13, // vbitclri.b
   877  	AVBITCLRH:   0x1cc4<<18 | 0x1<<14, // vbitclri.h
   878  	AVBITCLRW:   0x1cc4<<18 | 0x1<<15, // vbitclri.w
   879  	AVBITCLRV:   0x1cc4<<18 | 0x1<<16, // vbitclri.d
   880  	AVBITSETB:   0x1cc5<<18 | 0x1<<13, // vbitseti.b
   881  	AVBITSETH:   0x1cc5<<18 | 0x1<<14, // vbitseti.h
   882  	AVBITSETW:   0x1cc5<<18 | 0x1<<15, // vbitseti.w
   883  	AVBITSETV:   0x1cc5<<18 | 0x1<<16, // vbitseti.d
   884  	AVBITREVB:   0x1cc6<<18 | 0x1<<13, // vbitrevi.b
   885  	AVBITREVH:   0x1cc6<<18 | 0x1<<14, // vbitrevi.h
   886  	AVBITREVW:   0x1cc6<<18 | 0x1<<15, // vbitrevi.w
   887  	AVBITREVV:   0x1cc6<<18 | 0x1<<16, // vbitrevi.d
   888  	AXVBITCLRB:  0x1dc4<<18 | 0x1<<13, // xvbitclri.b
   889  	AXVBITCLRH:  0x1dc4<<18 | 0x1<<14, // xvbitclri.h
   890  	AXVBITCLRW:  0x1dc4<<18 | 0x1<<15, // xvbitclri.w
   891  	AXVBITCLRV:  0x1dc4<<18 | 0x1<<16, // xvbitclri.d
   892  	AXVBITSETB:  0x1dc5<<18 | 0x1<<13, // xvbitseti.b
   893  	AXVBITSETH:  0x1dc5<<18 | 0x1<<14, // xvbitseti.h
   894  	AXVBITSETW:  0x1dc5<<18 | 0x1<<15, // xvbitseti.w
   895  	AXVBITSETV:  0x1dc5<<18 | 0x1<<16, // xvbitseti.d
   896  	AXVBITREVB:  0x1dc6<<18 | 0x1<<13, // xvbitrevi.b
   897  	AXVBITREVH:  0x1dc6<<18 | 0x1<<14, // xvbitrevi.h
   898  	AXVBITREVW:  0x1dc6<<18 | 0x1<<15, // xvbitrevi.w
   899  	AXVBITREVV:  0x1dc6<<18 | 0x1<<16, // xvbitrevi.d
   900  }
   901  
   902  var opirrr = map[obj.As]uint32{
   903  	AALSLW:  0x2 << 17,  // alsl.w
   904  	AALSLWU: 0x3 << 17,  // alsl.wu
   905  	AALSLV:  0x16 << 17, // alsl.d
   906  }
   907  
   908  var opirir = map[obj.As]uint32{
   909  	ABSTRINSW:  0x3<<21 | 0x0<<15, // bstrins.w
   910  	ABSTRINSV:  0x2 << 22,         // bstrins.d
   911  	ABSTRPICKW: 0x3<<21 | 0x1<<15, // bstrpick.w
   912  	ABSTRPICKV: 0x3 << 22,         // bstrpick.d
   913  }
   914  
   915  var opiir = map[obj.As]uint32{
   916  	APRELD: 0x0ab << 22, // preld
   917  }
   918  

View as plain text