diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go
index 69ab23e..0803302 100644
--- a/src/cmd/internal/obj/loong64/asm.go
+++ b/src/cmd/internal/obj/loong64/asm.go
@@ -3267,1799 +3267,49 @@
return int32(c.vregoff(a))
}
-func (c *ctxt0) oprrrr(a obj.As) uint32 {
- switch a {
- case AFMADDF:
- return 0x81 << 20 // fmadd.s
- case AFMADDD:
- return 0x82 << 20 // fmadd.d
- case AFMSUBF:
- return 0x85 << 20 // fmsub.s
- case AFMSUBD:
- return 0x86 << 20 // fmsub.d
- case AFNMADDF:
- return 0x89 << 20 // fnmadd.f
- case AFNMADDD:
- return 0x8a << 20 // fnmadd.d
- case AFNMSUBF:
- return 0x8d << 20 // fnmsub.s
- case AFNMSUBD:
- return 0x8e << 20 // fnmsub.d
- case AVSHUFB:
- return 0x0D5 << 20 // vshuf.b
- case AXVSHUFB:
- return 0x0D6 << 20 // xvshuf.b
+func (c *ctxt0) opcode(opTab map[obj.As]uint32, a obj.As) uint32 {
+ op, ok := opTab[a]
+ if ok {
+ return op
}
-
- c.ctxt.Diag("bad rrrr opcode %v", a)
+ c.ctxt.Diag("bad opcode %v", a)
return 0
}
+func (c *ctxt0) oprrrr(a obj.As) uint32 {
+ return c.opcode(oprrrr, a)
+}
+
func (c *ctxt0) oprrr(a obj.As) uint32 {
- switch a {
- case AADD, AADDW:
- return 0x20 << 15
- case ASGT:
- return 0x24 << 15 // SLT
- case ASGTU:
- return 0x25 << 15 // SLTU
- case AMASKEQZ:
- return 0x26 << 15
- case AMASKNEZ:
- return 0x27 << 15
- case AAND:
- return 0x29 << 15
- case AOR:
- return 0x2a << 15
- case AXOR:
- return 0x2b << 15
- case AORN:
- return 0x2c << 15 // orn
- case AANDN:
- return 0x2d << 15 // andn
- case ASUB, ASUBW, ANEGW:
- return 0x22 << 15
- case ANOR:
- return 0x28 << 15
- case ASLL:
- return 0x2e << 15
- case ASRL:
- return 0x2f << 15
- case ASRA:
- return 0x30 << 15
- case AROTR:
- return 0x36 << 15
- case ASLLV:
- return 0x31 << 15
- case ASRLV:
- return 0x32 << 15
- case ASRAV:
- return 0x33 << 15
- case AROTRV:
- return 0x37 << 15
- case AADDV:
- return 0x21 << 15
- case AADDVU:
- return 0x21 << 15
- case ASUBV:
- return 0x23 << 15
- case ASUBVU, ANEGV:
- return 0x23 << 15
-
- case AMUL, AMULW:
- return 0x38 << 15 // mul.w
- case AMULH:
- return 0x39 << 15 // mulh.w
- case AMULHU:
- return 0x3a << 15 // mulhu.w
- case AMULV:
- return 0x3b << 15 // mul.d
- case AMULVU:
- return 0x3b << 15 // mul.d
- case AMULHV:
- return 0x3c << 15 // mulh.d
- case AMULHVU:
- return 0x3d << 15 // mulhu.d
- case AMULWVW:
- return 0x3e << 15 // mulw.d.w
- case AMULWVWU:
- return 0x3f << 15 // mulw.d.wu
- case ADIV, ADIVW:
- return 0x40 << 15 // div.w
- case ADIVU, ADIVWU:
- return 0x42 << 15 // div.wu
- case ADIVV:
- return 0x44 << 15 // div.d
- case ADIVVU:
- return 0x46 << 15 // div.du
- case AREM, AREMW:
- return 0x41 << 15 // mod.w
- case AREMU, AREMWU:
- return 0x43 << 15 // mod.wu
- case AREMV:
- return 0x45 << 15 // mod.d
- case AREMVU:
- return 0x47 << 15 // mod.du
- case ACRCWBW:
- return 0x48 << 15 // crc.w.b.w
- case ACRCWHW:
- return 0x49 << 15 // crc.w.h.w
- case ACRCWWW:
- return 0x4a << 15 // crc.w.w.w
- case ACRCWVW:
- return 0x4b << 15 // crc.w.d.w
- case ACRCCWBW:
- return 0x4c << 15 // crcc.w.b.w
- case ACRCCWHW:
- return 0x4d << 15 // crcc.w.h.w
- case ACRCCWWW:
- return 0x4e << 15 // crcc.w.w.w
- case ACRCCWVW:
- return 0x4f << 15 // crcc.w.d.w
- case AJMP:
- return 0x13 << 26 // jirl r0, rj, 0
- case AJAL:
- return (0x13 << 26) | 1 // jirl r1, rj, 0
-
- case ADIVF:
- return 0x20d << 15
- case ADIVD:
- return 0x20e << 15
- case AMULF:
- return 0x209 << 15
- case AMULD:
- return 0x20a << 15
- case ASUBF:
- return 0x205 << 15
- case ASUBD:
- return 0x206 << 15
- case AADDF:
- return 0x201 << 15
- case AADDD:
- return 0x202 << 15
- case ACMPEQF:
- return 0x0c1<<20 | 0x4<<15 // FCMP.CEQ.S
- case ACMPEQD:
- return 0x0c2<<20 | 0x4<<15 // FCMP.CEQ.D
- case ACMPGED:
- return 0x0c2<<20 | 0x7<<15 // FCMP.SLE.D
- case ACMPGEF:
- return 0x0c1<<20 | 0x7<<15 // FCMP.SLE.S
- case ACMPGTD:
- return 0x0c2<<20 | 0x3<<15 // FCMP.SLT.D
- case ACMPGTF:
- return 0x0c1<<20 | 0x3<<15 // FCMP.SLT.S
- case AFMINF:
- return 0x215 << 15 // fmin.s
- case AFMIND:
- return 0x216 << 15 // fmin.d
- case AFMAXF:
- return 0x211 << 15 // fmax.s
- case AFMAXD:
- return 0x212 << 15 // fmax.d
- case AFMAXAF:
- return 0x219 << 15 // fmaxa.s
- case AFMAXAD:
- return 0x21a << 15 // fmaxa.d
- case AFMINAF:
- return 0x21d << 15 // fmina.s
- case AFMINAD:
- return 0x21e << 15 // fmina.d
- case AFSCALEBF:
- return 0x221 << 15 // fscaleb.s
- case AFSCALEBD:
- return 0x222 << 15 // fscaleb.d
- case AFCOPYSGF:
- return 0x225 << 15 // fcopysign.s
- case AFCOPYSGD:
- return 0x226 << 15 // fcopysign.d
- case -AMOVB:
- return 0x07000 << 15 // ldx.b
- case -AMOVH:
- return 0x07008 << 15 // ldx.h
- case -AMOVW:
- return 0x07010 << 15 // ldx.w
- case -AMOVV:
- return 0x07018 << 15 // ldx.d
- case -AMOVBU:
- return 0x07040 << 15 // ldx.bu
- case -AMOVHU:
- return 0x07048 << 15 // ldx.hu
- case -AMOVWU:
- return 0x07050 << 15 // ldx.wu
- case AMOVB:
- return 0x07020 << 15 // stx.b
- case AMOVH:
- return 0x07028 << 15 // stx.h
- case AMOVW:
- return 0x07030 << 15 // stx.w
- case AMOVV:
- return 0x07038 << 15 // stx.d
- case -AMOVF:
- return 0x07060 << 15 // fldx.s
- case -AMOVD:
- return 0x07068 << 15 // fldx.d
- case AMOVF:
- return 0x07070 << 15 // fstx.s
- case AMOVD:
- return 0x07078 << 15 // fstx.d
- case -AVMOVQ:
- return 0x07080 << 15 // vldx
- case -AXVMOVQ:
- return 0x07090 << 15 // xvldx
- case AVMOVQ:
- return 0x07088 << 15 // vstx
- case AXVMOVQ:
- return 0x07098 << 15 // xvstx
- case AVSEQB:
- return 0x0e000 << 15 // vseq.b
- case AXVSEQB:
- return 0x0e800 << 15 // xvseq.b
- case AVSEQH:
- return 0x0e001 << 15 // vseq.h
- case AXVSEQH:
- return 0x0e801 << 15 // xvseq.h
- case AVSEQW:
- return 0x0e002 << 15 // vseq.w
- case AXVSEQW:
- return 0x0e802 << 15 // xvseq.w
- case AVSEQV:
- return 0x0e003 << 15 // vseq.d
- case AXVSEQV:
- return 0x0e803 << 15 // xvseq.d
- case AVSLTB:
- return 0x0E00C << 15 // vslt.b
- case AVSLTH:
- return 0x0E00D << 15 // vslt.h
- case AVSLTW:
- return 0x0E00E << 15 // vslt.w
- case AVSLTV:
- return 0x0E00F << 15 // vslt.d
- case AVSLTBU:
- return 0x0E010 << 15 // vslt.bu
- case AVSLTHU:
- return 0x0E011 << 15 // vslt.hu
- case AVSLTWU:
- return 0x0E012 << 15 // vslt.wu
- case AVSLTVU:
- return 0x0E013 << 15 // vslt.du
- case AXVSLTB:
- return 0x0E80C << 15 // xvslt.b
- case AXVSLTH:
- return 0x0E80D << 15 // xvslt.h
- case AXVSLTW:
- return 0x0E80E << 15 // xvslt.w
- case AXVSLTV:
- return 0x0E80F << 15 // xvslt.d
- case AXVSLTBU:
- return 0x0E810 << 15 // xvslt.bu
- case AXVSLTHU:
- return 0x0E811 << 15 // xvslt.hu
- case AXVSLTWU:
- return 0x0E812 << 15 // xvslt.wu
- case AXVSLTVU:
- return 0x0E813 << 15 // xvslt.du
- case AVANDV:
- return 0x0E24C << 15 // vand.v
- case AVORV:
- return 0x0E24D << 15 // vor.v
- case AVXORV:
- return 0x0E24E << 15 // vxor.v
- case AVNORV:
- return 0x0E24F << 15 // vnor.v
- case AVANDNV:
- return 0x0E250 << 15 // vandn.v
- case AVORNV:
- return 0x0E251 << 15 // vorn.v
- case AXVANDV:
- return 0x0EA4C << 15 // xvand.v
- case AXVORV:
- return 0x0EA4D << 15 // xvor.v
- case AXVXORV:
- return 0x0EA4E << 15 // xvxor.v
- case AXVNORV:
- return 0x0EA4F << 15 // xvnor.v
- case AXVANDNV:
- return 0x0EA50 << 15 // xvandn.v
- case AXVORNV:
- return 0x0EA51 << 15 // xvorn.v
- case AVDIVB:
- return 0xe1c0 << 15 // vdiv.b
- case AVDIVH:
- return 0xe1c1 << 15 // vdiv.h
- case AVDIVW:
- return 0xe1c2 << 15 // vdiv.w
- case AVDIVV:
- return 0xe1c3 << 15 // vdiv.d
- case AVMODB:
- return 0xe1c4 << 15 // vmod.b
- case AVMODH:
- return 0xe1c5 << 15 // vmod.h
- case AVMODW:
- return 0xe1c6 << 15 // vmod.w
- case AVMODV:
- return 0xe1c7 << 15 // vmod.d
- case AVDIVBU:
- return 0xe1c8 << 15 // vdiv.bu
- case AVDIVHU:
- return 0xe1c9 << 15 // vdiv.hu
- case AVDIVWU:
- return 0xe1ca << 15 // vdiv.wu
- case AVDIVVU:
- return 0xe1cb << 15 // vdiv.du
- case AVMODBU:
- return 0xe1cc << 15 // vmod.bu
- case AVMODHU:
- return 0xe1cd << 15 // vmod.hu
- case AVMODWU:
- return 0xe1ce << 15 // vmod.wu
- case AVMODVU:
- return 0xe1cf << 15 // vmod.du
- case AXVDIVB:
- return 0xe9c0 << 15 // xvdiv.b
- case AXVDIVH:
- return 0xe9c1 << 15 // xvdiv.h
- case AXVDIVW:
- return 0xe9c2 << 15 // xvdiv.w
- case AXVDIVV:
- return 0xe9c3 << 15 // xvdiv.d
- case AXVMODB:
- return 0xe9c4 << 15 // xvmod.b
- case AXVMODH:
- return 0xe9c5 << 15 // xvmod.h
- case AXVMODW:
- return 0xe9c6 << 15 // xvmod.w
- case AXVMODV:
- return 0xe9c7 << 15 // xvmod.d
- case AXVDIVBU:
- return 0xe9c8 << 15 // xvdiv.bu
- case AXVDIVHU:
- return 0xe9c9 << 15 // xvdiv.hu
- case AXVDIVWU:
- return 0xe9ca << 15 // xvdiv.wu
- case AXVDIVVU:
- return 0xe9cb << 15 // xvdiv.du
- case AXVMODBU:
- return 0xe9cc << 15 // xvmod.bu
- case AXVMODHU:
- return 0xe9cd << 15 // xvmod.hu
- case AXVMODWU:
- return 0xe9ce << 15 // xvmod.wu
- case AXVMODVU:
- return 0xe9cf << 15 // xvmod.du
- case AVMULWEVHB:
- return 0xe120 << 15 // vmulwev.h.b
- case AVMULWEVWH:
- return 0xe121 << 15 // vmulwev.w.h
- case AVMULWEVVW:
- return 0xe122 << 15 // vmulwev.d.w
- case AVMULWEVQV:
- return 0xe123 << 15 // vmulwev.q.d
- case AVMULWODHB:
- return 0xe124 << 15 // vmulwod.h.b
- case AVMULWODWH:
- return 0xe125 << 15 // vmulwod.w.h
- case AVMULWODVW:
- return 0xe126 << 15 // vmulwod.d.w
- case AVMULWODQV:
- return 0xe127 << 15 // vmulwod.q.d
- case AVMULWEVHBU:
- return 0xe130 << 15 // vmulwev.h.bu
- case AVMULWEVWHU:
- return 0xe131 << 15 // vmulwev.w.hu
- case AVMULWEVVWU:
- return 0xe132 << 15 // vmulwev.d.wu
- case AVMULWEVQVU:
- return 0xe133 << 15 // vmulwev.q.du
- case AVMULWODHBU:
- return 0xe134 << 15 // vmulwod.h.bu
- case AVMULWODWHU:
- return 0xe135 << 15 // vmulwod.w.hu
- case AVMULWODVWU:
- return 0xe136 << 15 // vmulwod.d.wu
- case AVMULWODQVU:
- return 0xe137 << 15 // vmulwod.q.du
- case AVMULWEVHBUB:
- return 0xe140 << 15 // vmulwev.h.bu.b
- case AVMULWEVWHUH:
- return 0xe141 << 15 // vmulwev.w.hu.h
- case AVMULWEVVWUW:
- return 0xe142 << 15 // vmulwev.d.wu.w
- case AVMULWEVQVUV:
- return 0xe143 << 15 // vmulwev.q.du.d
- case AVMULWODHBUB:
- return 0xe144 << 15 // vmulwod.h.bu.b
- case AVMULWODWHUH:
- return 0xe145 << 15 // vmulwod.w.hu.h
- case AVMULWODVWUW:
- return 0xe146 << 15 // vmulwod.d.wu.w
- case AVMULWODQVUV:
- return 0xe147 << 15 // vmulwod.q.du.d
- case AXVMULWEVHB:
- return 0xe920 << 15 // xvmulwev.h.b
- case AXVMULWEVWH:
- return 0xe921 << 15 // xvmulwev.w.h
- case AXVMULWEVVW:
- return 0xe922 << 15 // xvmulwev.d.w
- case AXVMULWEVQV:
- return 0xe923 << 15 // xvmulwev.q.d
- case AXVMULWODHB:
- return 0xe924 << 15 // xvmulwod.h.b
- case AXVMULWODWH:
- return 0xe925 << 15 // xvmulwod.w.h
- case AXVMULWODVW:
- return 0xe926 << 15 // xvmulwod.d.w
- case AXVMULWODQV:
- return 0xe927 << 15 // xvmulwod.q.d
- case AXVMULWEVHBU:
- return 0xe930 << 15 // xvmulwev.h.bu
- case AXVMULWEVWHU:
- return 0xe931 << 15 // xvmulwev.w.hu
- case AXVMULWEVVWU:
- return 0xe932 << 15 // xvmulwev.d.wu
- case AXVMULWEVQVU:
- return 0xe933 << 15 // xvmulwev.q.du
- case AXVMULWODHBU:
- return 0xe934 << 15 // xvmulwod.h.bu
- case AXVMULWODWHU:
- return 0xe935 << 15 // xvmulwod.w.hu
- case AXVMULWODVWU:
- return 0xe936 << 15 // xvmulwod.d.wu
- case AXVMULWODQVU:
- return 0xe937 << 15 // xvmulwod.q.du
- case AXVMULWEVHBUB:
- return 0xe940 << 15 // xvmulwev.h.bu.b
- case AXVMULWEVWHUH:
- return 0xe941 << 15 // xvmulwev.w.hu.h
- case AXVMULWEVVWUW:
- return 0xe942 << 15 // xvmulwev.d.wu.w
- case AXVMULWEVQVUV:
- return 0xe943 << 15 // xvmulwev.q.du.d
- case AXVMULWODHBUB:
- return 0xe944 << 15 // xvmulwod.h.bu.b
- case AXVMULWODWHUH:
- return 0xe945 << 15 // xvmulwod.w.hu.h
- case AXVMULWODVWUW:
- return 0xe946 << 15 // xvmulwod.d.wu.w
- case AXVMULWODQVUV:
- return 0xe947 << 15 // xvmulwod.q.du.d
- case AVADDWEVHB:
- return 0x0E03C << 15 // vaddwev.h.b
- case AVADDWEVWH:
- return 0x0E03D << 15 // vaddwev.w.h
- case AVADDWEVVW:
- return 0x0E03E << 15 // vaddwev.d.w
- case AVADDWEVQV:
- return 0x0E03F << 15 // vaddwev.q.d
- case AVSUBWEVHB:
- return 0x0E040 << 15 // vsubwev.h.b
- case AVSUBWEVWH:
- return 0x0E041 << 15 // vsubwev.w.h
- case AVSUBWEVVW:
- return 0x0E042 << 15 // vsubwev.d.w
- case AVSUBWEVQV:
- return 0x0E043 << 15 // vsubwev.q.d
- case AVADDWODHB:
- return 0x0E044 << 15 // vaddwod.h.b
- case AVADDWODWH:
- return 0x0E045 << 15 // vaddwod.w.h
- case AVADDWODVW:
- return 0x0E046 << 15 // vaddwod.d.w
- case AVADDWODQV:
- return 0x0E047 << 15 // vaddwod.q.d
- case AVSUBWODHB:
- return 0x0E048 << 15 // vsubwod.h.b
- case AVSUBWODWH:
- return 0x0E049 << 15 // vsubwod.w.h
- case AVSUBWODVW:
- return 0x0E04A << 15 // vsubwod.d.w
- case AVSUBWODQV:
- return 0x0E04B << 15 // vsubwod.q.d
- case AXVADDWEVHB:
- return 0x0E83C << 15 // xvaddwev.h.b
- case AXVADDWEVWH:
- return 0x0E83D << 15 // xvaddwev.w.h
- case AXVADDWEVVW:
- return 0x0E83E << 15 // xvaddwev.d.w
- case AXVADDWEVQV:
- return 0x0E83F << 15 // xvaddwev.q.d
- case AXVSUBWEVHB:
- return 0x0E840 << 15 // xvsubwev.h.b
- case AXVSUBWEVWH:
- return 0x0E841 << 15 // xvsubwev.w.h
- case AXVSUBWEVVW:
- return 0x0E842 << 15 // xvsubwev.d.w
- case AXVSUBWEVQV:
- return 0x0E843 << 15 // xvsubwev.q.d
- case AXVADDWODHB:
- return 0x0E844 << 15 // xvaddwod.h.b
- case AXVADDWODWH:
- return 0x0E845 << 15 // xvaddwod.w.h
- case AXVADDWODVW:
- return 0x0E846 << 15 // xvaddwod.d.w
- case AXVADDWODQV:
- return 0x0E847 << 15 // xvaddwod.q.d
- case AXVSUBWODHB:
- return 0x0E848 << 15 // xvsubwod.h.b
- case AXVSUBWODWH:
- return 0x0E849 << 15 // xvsubwod.w.h
- case AXVSUBWODVW:
- return 0x0E84A << 15 // xvsubwod.d.w
- case AXVSUBWODQV:
- return 0x0E84B << 15 // xvsubwod.q.d
- case AVADDWEVHBU:
- return 0x0E05C << 15 // vaddwev.h.bu
- case AVADDWEVWHU:
- return 0x0E05E << 15 // vaddwev.w.hu
- case AVADDWEVVWU:
- return 0x0E05E << 15 // vaddwev.d.wu
- case AVADDWEVQVU:
- return 0x0E05F << 15 // vaddwev.q.du
- case AVSUBWEVHBU:
- return 0x0E060 << 15 // vsubwev.h.bu
- case AVSUBWEVWHU:
- return 0x0E061 << 15 // vsubwev.w.hu
- case AVSUBWEVVWU:
- return 0x0E062 << 15 // vsubwev.d.wu
- case AVSUBWEVQVU:
- return 0x0E063 << 15 // vsubwev.q.du
- case AVADDWODHBU:
- return 0x0E064 << 15 // vaddwod.h.bu
- case AVADDWODWHU:
- return 0x0E065 << 15 // vaddwod.w.hu
- case AVADDWODVWU:
- return 0x0E066 << 15 // vaddwod.d.wu
- case AVADDWODQVU:
- return 0x0E067 << 15 // vaddwod.q.du
- case AVSUBWODHBU:
- return 0x0E068 << 15 // vsubwod.h.bu
- case AVSUBWODWHU:
- return 0x0E069 << 15 // vsubwod.w.hu
- case AVSUBWODVWU:
- return 0x0E06A << 15 // vsubwod.d.wu
- case AVSUBWODQVU:
- return 0x0E06B << 15 // vsubwod.q.du
- case AXVADDWEVHBU:
- return 0x0E85C << 15 // xvaddwev.h.bu
- case AXVADDWEVWHU:
- return 0x0E85D << 15 // xvaddwev.w.hu
- case AXVADDWEVVWU:
- return 0x0E85E << 15 // xvaddwev.d.wu
- case AXVADDWEVQVU:
- return 0x0E85F << 15 // xvaddwev.q.du
- case AXVSUBWEVHBU:
- return 0x0E860 << 15 // xvsubwev.h.bu
- case AXVSUBWEVWHU:
- return 0x0E861 << 15 // xvsubwev.w.hu
- case AXVSUBWEVVWU:
- return 0x0E862 << 15 // xvsubwev.d.wu
- case AXVSUBWEVQVU:
- return 0x0E863 << 15 // xvsubwev.q.du
- case AXVADDWODHBU:
- return 0x0E864 << 15 // xvaddwod.h.bu
- case AXVADDWODWHU:
- return 0x0E865 << 15 // xvaddwod.w.hu
- case AXVADDWODVWU:
- return 0x0E866 << 15 // xvaddwod.d.wu
- case AXVADDWODQVU:
- return 0x0E867 << 15 // xvaddwod.q.du
- case AXVSUBWODHBU:
- return 0x0E868 << 15 // xvsubwod.h.bu
- case AXVSUBWODWHU:
- return 0x0E869 << 15 // xvsubwod.w.hu
- case AXVSUBWODVWU:
- return 0x0E86A << 15 // xvsubwod.d.wu
- case AXVSUBWODQVU:
- return 0x0E86B << 15 // xvsubwod.q.du
- case AVMADDB:
- return 0x0E150 << 15 // vmadd.b
- case AVMADDH:
- return 0x0E151 << 15 // vmadd.h
- case AVMADDW:
- return 0x0E152 << 15 // vmadd.w
- case AVMADDV:
- return 0x0E153 << 15 // vmadd.d
- case AVMSUBB:
- return 0x0E154 << 15 // vmsub.b
- case AVMSUBH:
- return 0x0E155 << 15 // vmsub.h
- case AVMSUBW:
- return 0x0E156 << 15 // vmsub.w
- case AVMSUBV:
- return 0x0E157 << 15 // vmsub.d
- case AXVMADDB:
- return 0x0E950 << 15 // xvmadd.b
- case AXVMADDH:
- return 0x0E951 << 15 // xvmadd.h
- case AXVMADDW:
- return 0x0E952 << 15 // xvmadd.w
- case AXVMADDV:
- return 0x0E953 << 15 // xvmadd.d
- case AXVMSUBB:
- return 0x0E954 << 15 // xvmsub.b
- case AXVMSUBH:
- return 0x0E955 << 15 // xvmsub.h
- case AXVMSUBW:
- return 0x0E956 << 15 // xvmsub.w
- case AXVMSUBV:
- return 0x0E957 << 15 // xvmsub.d
- case AVMADDWEVHB:
- return 0x0E158 << 15 // vmaddwev.h.b
- case AVMADDWEVWH:
- return 0x0E159 << 15 // vmaddwev.w.h
- case AVMADDWEVVW:
- return 0x0E15A << 15 // vmaddwev.d.w
- case AVMADDWEVQV:
- return 0x0E15B << 15 // vmaddwev.q.d
- case AVMADDWODHB:
- return 0x0E15C << 15 // vmaddwov.h.b
- case AVMADDWODWH:
- return 0x0E15D << 15 // vmaddwod.w.h
- case AVMADDWODVW:
- return 0x0E15E << 15 // vmaddwod.d.w
- case AVMADDWODQV:
- return 0x0E15F << 15 // vmaddwod.q.d
- case AVMADDWEVHBU:
- return 0x0E168 << 15 // vmaddwev.h.bu
- case AVMADDWEVWHU:
- return 0x0E169 << 15 // vmaddwev.w.hu
- case AVMADDWEVVWU:
- return 0x0E16A << 15 // vmaddwev.d.wu
- case AVMADDWEVQVU:
- return 0x0E16B << 15 // vmaddwev.q.du
- case AVMADDWODHBU:
- return 0x0E16C << 15 // vmaddwov.h.bu
- case AVMADDWODWHU:
- return 0x0E16D << 15 // vmaddwod.w.hu
- case AVMADDWODVWU:
- return 0x0E16E << 15 // vmaddwod.d.wu
- case AVMADDWODQVU:
- return 0x0E16F << 15 // vmaddwod.q.du
- case AVMADDWEVHBUB:
- return 0x0E178 << 15 // vmaddwev.h.bu.b
- case AVMADDWEVWHUH:
- return 0x0E179 << 15 // vmaddwev.w.hu.h
- case AVMADDWEVVWUW:
- return 0x0E17A << 15 // vmaddwev.d.wu.w
- case AVMADDWEVQVUV:
- return 0x0E17B << 15 // vmaddwev.q.du.d
- case AVMADDWODHBUB:
- return 0x0E17C << 15 // vmaddwov.h.bu.b
- case AVMADDWODWHUH:
- return 0x0E17D << 15 // vmaddwod.w.hu.h
- case AVMADDWODVWUW:
- return 0x0E17E << 15 // vmaddwod.d.wu.w
- case AVMADDWODQVUV:
- return 0x0E17F << 15 // vmaddwod.q.du.d
- case AXVMADDWEVHB:
- return 0x0E958 << 15 // xvmaddwev.h.b
- case AXVMADDWEVWH:
- return 0x0E959 << 15 // xvmaddwev.w.h
- case AXVMADDWEVVW:
- return 0x0E95A << 15 // xvmaddwev.d.w
- case AXVMADDWEVQV:
- return 0x0E95B << 15 // xvmaddwev.q.d
- case AXVMADDWODHB:
- return 0x0E95C << 15 // xvmaddwov.h.b
- case AXVMADDWODWH:
- return 0x0E95D << 15 // xvmaddwod.w.h
- case AXVMADDWODVW:
- return 0x0E95E << 15 // xvmaddwod.d.w
- case AXVMADDWODQV:
- return 0x0E95F << 15 // xvmaddwod.q.d
- case AXVMADDWEVHBU:
- return 0x0E968 << 15 // xvmaddwev.h.bu
- case AXVMADDWEVWHU:
- return 0x0E969 << 15 // xvmaddwev.w.hu
- case AXVMADDWEVVWU:
- return 0x0E96A << 15 // xvmaddwev.d.wu
- case AXVMADDWEVQVU:
- return 0x0E96B << 15 // xvmaddwev.q.du
- case AXVMADDWODHBU:
- return 0x0E96C << 15 // xvmaddwov.h.bu
- case AXVMADDWODWHU:
- return 0x0E96D << 15 // xvmaddwod.w.hu
- case AXVMADDWODVWU:
- return 0x0E96E << 15 // xvmaddwod.d.wu
- case AXVMADDWODQVU:
- return 0x0E96F << 15 // xvmaddwod.q.du
- case AXVMADDWEVHBUB:
- return 0x0E978 << 15 // xvmaddwev.h.bu.b
- case AXVMADDWEVWHUH:
- return 0x0E979 << 15 // xvmaddwev.w.hu.h
- case AXVMADDWEVVWUW:
- return 0x0E97A << 15 // xvmaddwev.d.wu.w
- case AXVMADDWEVQVUV:
- return 0x0E97B << 15 // xvmaddwev.q.du.d
- case AXVMADDWODHBUB:
- return 0x0E97C << 15 // xvmaddwov.h.bu.b
- case AXVMADDWODWHUH:
- return 0x0E97D << 15 // xvmaddwod.w.hu.h
- case AXVMADDWODVWUW:
- return 0x0E97E << 15 // xvmaddwod.d.wu.w
- case AXVMADDWODQVUV:
- return 0x0E97F << 15 // xvmaddwod.q.du.d
- case AVSLLB:
- return 0xe1d0 << 15 // vsll.b
- case AVSLLH:
- return 0xe1d1 << 15 // vsll.h
- case AVSLLW:
- return 0xe1d2 << 15 // vsll.w
- case AVSLLV:
- return 0xe1d3 << 15 // vsll.d
- case AVSRLB:
- return 0xe1d4 << 15 // vsrl.b
- case AVSRLH:
- return 0xe1d5 << 15 // vsrl.h
- case AVSRLW:
- return 0xe1d6 << 15 // vsrl.w
- case AVSRLV:
- return 0xe1d7 << 15 // vsrl.d
- case AVSRAB:
- return 0xe1d8 << 15 // vsra.b
- case AVSRAH:
- return 0xe1d9 << 15 // vsra.h
- case AVSRAW:
- return 0xe1da << 15 // vsra.w
- case AVSRAV:
- return 0xe1db << 15 // vsra.d
- case AVROTRB:
- return 0xe1dc << 15 // vrotr.b
- case AVROTRH:
- return 0xe1dd << 15 // vrotr.h
- case AVROTRW:
- return 0xe1de << 15 // vrotr.w
- case AVROTRV:
- return 0xe1df << 15 // vrotr.d
- case AXVSLLB:
- return 0xe9d0 << 15 // xvsll.b
- case AXVSLLH:
- return 0xe9d1 << 15 // xvsll.h
- case AXVSLLW:
- return 0xe9d2 << 15 // xvsll.w
- case AXVSLLV:
- return 0xe9d3 << 15 // xvsll.d
- case AXVSRLB:
- return 0xe9d4 << 15 // xvsrl.b
- case AXVSRLH:
- return 0xe9d5 << 15 // xvsrl.h
- case AXVSRLW:
- return 0xe9d6 << 15 // xvsrl.w
- case AXVSRLV:
- return 0xe9d7 << 15 // xvsrl.d
- case AXVSRAB:
- return 0xe9d8 << 15 // xvsra.b
- case AXVSRAH:
- return 0xe9d9 << 15 // xvsra.h
- case AXVSRAW:
- return 0xe9da << 15 // xvsra.w
- case AXVSRAV:
- return 0xe9db << 15 // xvsra.d
- case AXVROTRB:
- return 0xe9dc << 15 // xvrotr.b
- case AXVROTRH:
- return 0xe9dd << 15 // xvrotr.h
- case AXVROTRW:
- return 0xe9de << 15 // xvrotr.w
- case AXVROTRV:
- return 0xe9df << 15 // xvrotr.d
- case AVADDB:
- return 0xe014 << 15 // vadd.b
- case AVADDH:
- return 0xe015 << 15 // vadd.h
- case AVADDW:
- return 0xe016 << 15 // vadd.w
- case AVADDV:
- return 0xe017 << 15 // vadd.d
- case AVADDQ:
- return 0xe25a << 15 // vadd.q
- case AVSUBB:
- return 0xe018 << 15 // vsub.b
- case AVSUBH:
- return 0xe019 << 15 // vsub.h
- case AVSUBW:
- return 0xe01a << 15 // vsub.w
- case AVSUBV:
- return 0xe01b << 15 // vsub.d
- case AVSUBQ:
- return 0xe25b << 15 // vsub.q
- case AXVADDB:
- return 0xe814 << 15 // xvadd.b
- case AXVADDH:
- return 0xe815 << 15 // xvadd.h
- case AXVADDW:
- return 0xe816 << 15 // xvadd.w
- case AXVADDV:
- return 0xe817 << 15 // xvadd.d
- case AXVADDQ:
- return 0xea5a << 15 // xvadd.q
- case AXVSUBB:
- return 0xe818 << 15 // xvsub.b
- case AXVSUBH:
- return 0xe819 << 15 // xvsub.h
- case AXVSUBW:
- return 0xe81a << 15 // xvsub.w
- case AXVSUBV:
- return 0xe81b << 15 // xvsub.d
- case AXVSUBQ:
- return 0xea5b << 15 // xvsub.q
- case AVSADDB:
- return 0x0E08C << 15 // vsadd.b
- case AVSADDH:
- return 0x0E08D << 15 // vsadd.h
- case AVSADDW:
- return 0x0E08E << 15 // vsadd.w
- case AVSADDV:
- return 0x0E08F << 15 // vsadd.d
- case AVSSUBB:
- return 0x0E090 << 15 // vssub.b
- case AVSSUBH:
- return 0x0E091 << 15 // vssub.w
- case AVSSUBW:
- return 0x0E092 << 15 // vssub.h
- case AVSSUBV:
- return 0x0E093 << 15 // vssub.d
- case AVSADDBU:
- return 0x0E094 << 15 // vsadd.bu
- case AVSADDHU:
- return 0x0E095 << 15 // vsadd.hu
- case AVSADDWU:
- return 0x0E096 << 15 // vsadd.wu
- case AVSADDVU:
- return 0x0E097 << 15 // vsadd.du
- case AVSSUBBU:
- return 0x0E098 << 15 // vssub.bu
- case AVSSUBHU:
- return 0x0E099 << 15 // vssub.wu
- case AVSSUBWU:
- return 0x0E09A << 15 // vssub.hu
- case AVSSUBVU:
- return 0x0E09B << 15 // vssub.du
- case AXVSADDB:
- return 0x0E88C << 15 // vxsadd.b
- case AXVSADDH:
- return 0x0E88D << 15 // vxsadd.h
- case AXVSADDW:
- return 0x0E88E << 15 // vxsadd.w
- case AXVSADDV:
- return 0x0E88F << 15 // vxsadd.d
- case AXVSSUBB:
- return 0x0E890 << 15 // xvssub.b
- case AXVSSUBH:
- return 0x0E891 << 15 // xvssub.h
- case AXVSSUBW:
- return 0x0E892 << 15 // xvssub.w
- case AXVSSUBV:
- return 0x0E893 << 15 // xvssub.d
- case AXVSADDBU:
- return 0x0E894 << 15 // vxsadd.bu
- case AXVSADDHU:
- return 0x0E896 << 15 // vxsadd.hu
- case AXVSADDWU:
- return 0x0E896 << 15 // vxsadd.wu
- case AXVSADDVU:
- return 0x0E897 << 15 // vxsadd.du
- case AXVSSUBBU:
- return 0x0E898 << 15 // xvssub.bu
- case AXVSSUBHU:
- return 0x0E899 << 15 // xvssub.hu
- case AXVSSUBWU:
- return 0x0E89A << 15 // xvssub.wu
- case AXVSSUBVU:
- return 0x0E89B << 15 // xvssub.du
- case AVILVLB:
- return 0xe234 << 15 // vilvl.b
- case AVILVLH:
- return 0xe235 << 15 // vilvl.h
- case AVILVLW:
- return 0xe236 << 15 // vilvl.w
- case AVILVLV:
- return 0xe237 << 15 // vilvl.d
- case AVILVHB:
- return 0xe238 << 15 // vilvh.b
- case AVILVHH:
- return 0xe239 << 15 // vilvh.h
- case AVILVHW:
- return 0xe23a << 15 // vilvh.w
- case AVILVHV:
- return 0xe23b << 15 // vilvh.d
- case AXVILVLB:
- return 0xea34 << 15 // xvilvl.b
- case AXVILVLH:
- return 0xea35 << 15 // xvilvl.h
- case AXVILVLW:
- return 0xea36 << 15 // xvilvl.w
- case AXVILVLV:
- return 0xea37 << 15 // xvilvl.d
- case AXVILVHB:
- return 0xea38 << 15 // xvilvh.b
- case AXVILVHH:
- return 0xea39 << 15 // xvilvh.h
- case AXVILVHW:
- return 0xea3a << 15 // xvilvh.w
- case AXVILVHV:
- return 0xea3b << 15 // xvilvh.d
- case AVMULB:
- return 0xe108 << 15 // vmul.b
- case AVMULH:
- return 0xe109 << 15 // vmul.h
- case AVMULW:
- return 0xe10a << 15 // vmul.w
- case AVMULV:
- return 0xe10b << 15 // vmul.d
- case AVMUHB:
- return 0xe10c << 15 // vmuh.b
- case AVMUHH:
- return 0xe10d << 15 // vmuh.h
- case AVMUHW:
- return 0xe10e << 15 // vmuh.w
- case AVMUHV:
- return 0xe10f << 15 // vmuh.d
- case AVMUHBU:
- return 0xe110 << 15 // vmuh.bu
- case AVMUHHU:
- return 0xe111 << 15 // vmuh.hu
- case AVMUHWU:
- return 0xe112 << 15 // vmuh.wu
- case AVMUHVU:
- return 0xe113 << 15 // vmuh.du
- case AXVMULB:
- return 0xe908 << 15 // xvmul.b
- case AXVMULH:
- return 0xe909 << 15 // xvmul.h
- case AXVMULW:
- return 0xe90a << 15 // xvmul.w
- case AXVMULV:
- return 0xe90b << 15 // xvmul.d
- case AXVMUHB:
- return 0xe90c << 15 // xvmuh.b
- case AXVMUHH:
- return 0xe90d << 15 // xvmuh.h
- case AXVMUHW:
- return 0xe90e << 15 // xvmuh.w
- case AXVMUHV:
- return 0xe90f << 15 // xvmuh.d
- case AXVMUHBU:
- return 0xe910 << 15 // xvmuh.bu
- case AXVMUHHU:
- return 0xe911 << 15 // xvmuh.hu
- case AXVMUHWU:
- return 0xe912 << 15 // xvmuh.wu
- case AXVMUHVU:
- return 0xe913 << 15 // xvmuh.du
- case AVADDF:
- return 0xe261 << 15 // vfadd.s
- case AVADDD:
- return 0xe262 << 15 // vfadd.d
- case AVSUBF:
- return 0xe265 << 15 // vfsub.s
- case AVSUBD:
- return 0xe266 << 15 // vfsub.d
- case AVMULF:
- return 0xe271 << 15 // vfmul.s
- case AVMULD:
- return 0xe272 << 15 // vfmul.d
- case AVDIVF:
- return 0xe275 << 15 // vfdiv.s
- case AVDIVD:
- return 0xe276 << 15 // vfdiv.d
- case AXVADDF:
- return 0xea61 << 15 // xvfadd.s
- case AXVADDD:
- return 0xea62 << 15 // xvfadd.d
- case AXVSUBF:
- return 0xea65 << 15 // xvfsub.s
- case AXVSUBD:
- return 0xea66 << 15 // xvfsub.d
- case AXVMULF:
- return 0xea71 << 15 // xvfmul.s
- case AXVMULD:
- return 0xea72 << 15 // xvfmul.d
- case AXVDIVF:
- return 0xea75 << 15 // xvfdiv.s
- case AXVDIVD:
- return 0xea76 << 15 // xvfdiv.d
- case AVBITCLRB:
- return 0xe218 << 15 // vbitclr.b
- case AVBITCLRH:
- return 0xe219 << 15 // vbitclr.h
- case AVBITCLRW:
- return 0xe21a << 15 // vbitclr.w
- case AVBITCLRV:
- return 0xe21b << 15 // vbitclr.d
- case AVBITSETB:
- return 0xe21c << 15 // vbitset.b
- case AVBITSETH:
- return 0xe21d << 15 // vbitset.h
- case AVBITSETW:
- return 0xe21e << 15 // vbitset.w
- case AVBITSETV:
- return 0xe21f << 15 // vbitset.d
- case AVBITREVB:
- return 0xe220 << 15 // vbitrev.b
- case AVBITREVH:
- return 0xe221 << 15 // vbitrev.h
- case AVBITREVW:
- return 0xe222 << 15 // vbitrev.w
- case AVBITREVV:
- return 0xe223 << 15 // vbitrev.d
- case AXVBITCLRB:
- return 0xea18 << 15 // xvbitclr.b
- case AXVBITCLRH:
- return 0xea19 << 15 // xvbitclr.h
- case AXVBITCLRW:
- return 0xea1a << 15 // xvbitclr.w
- case AXVBITCLRV:
- return 0xea1b << 15 // xvbitclr.d
- case AXVBITSETB:
- return 0xea1c << 15 // xvbitset.b
- case AXVBITSETH:
- return 0xea1d << 15 // xvbitset.h
- case AXVBITSETW:
- return 0xea1e << 15 // xvbitset.w
- case AXVBITSETV:
- return 0xea1f << 15 // xvbitset.d
- case AXVBITREVB:
- return 0xea20 << 15 // xvbitrev.b
- case AXVBITREVH:
- return 0xea21 << 15 // xvbitrev.h
- case AXVBITREVW:
- return 0xea22 << 15 // xvbitrev.w
- case AXVBITREVV:
- return 0xea23 << 15 // xvbitrev.d
- case AVSHUFH:
- return 0x0E2F5 << 15 // vshuf.h
- case AVSHUFW:
- return 0x0E2F6 << 15 // vshuf.w
- case AVSHUFV:
- return 0x0E2F7 << 15 // vshuf.d
- case AXVSHUFH:
- return 0x0EAF5 << 15 // xvshuf.h
- case AXVSHUFW:
- return 0x0EAF6 << 15 // xvshuf.w
- case AXVSHUFV:
- return 0x0EAF7 << 15 // xvshuf.d
- }
-
- if a < 0 {
- c.ctxt.Diag("bad rrr opcode -%v", -a)
- } else {
- c.ctxt.Diag("bad rrr opcode %v", a)
- }
- return 0
+ return c.opcode(oprrr, a)
}
func (c *ctxt0) oprr(a obj.As) uint32 {
- switch a {
- case ACLOW:
- return 0x4 << 10 // clo.w
- case ACLZW:
- return 0x5 << 10 // clz.w
- case ACTOW:
- return 0x6 << 10 // cto.w
- case ACTZW:
- return 0x7 << 10 // ctz.w
- case ACLOV:
- return 0x8 << 10 // clo.d
- case ACLZV:
- return 0x9 << 10 // clz.d
- case ACTOV:
- return 0xa << 10 // cto.d
- case ACTZV:
- return 0xb << 10 // ctz.d
- case AREVB2H:
- return 0xc << 10 // revb.2h
- case AREVB4H:
- return 0xd << 10 // revb.4h
- case AREVB2W:
- return 0xe << 10 // revb.2w
- case AREVBV:
- return 0xf << 10 // revb.d
- case AREVH2W:
- return 0x10 << 10 // revh.2w
- case AREVHV:
- return 0x11 << 10 // revh.d
- case ABITREV4B:
- return 0x12 << 10 // bitrev.4b
- case ABITREV8B:
- return 0x13 << 10 // bitrev.8b
- case ABITREVW:
- return 0x14 << 10 // bitrev.w
- case ABITREVV:
- return 0x15 << 10 // bitrev.d
- case AEXTWH:
- return 0x16 << 10 // ext.w.h
- case AEXTWB:
- return 0x17 << 10 // ext.w.h
- case ACPUCFG:
- return 0x1b << 10
- case ARDTIMELW:
- return 0x18 << 10
- case ARDTIMEHW:
- return 0x19 << 10
- case ARDTIMED:
- return 0x1a << 10
- case ATRUNCFV:
- return 0x46a9 << 10
- case ATRUNCDV:
- return 0x46aa << 10
- case ATRUNCFW:
- return 0x46a1 << 10
- case ATRUNCDW:
- return 0x46a2 << 10
- case AMOVWF, AFFINTFW:
- return 0x4744 << 10 // ffint.s.w
- case AMOVVF, AFFINTFV:
- return 0x4746 << 10 // ffint.s.l
- case AMOVWD, AFFINTDW:
- return 0x4748 << 10 // ffint.d.w
- case AMOVVD, AFFINTDV:
- return 0x474a << 10 // ffint.d.l
- case AMOVFW, AFTINTWF:
- return 0x46c1 << 10 // ftint.w.s
- case AMOVDW, AFTINTWD:
- return 0x46c2 << 10 // ftint.w.d
- case AMOVFV, AFTINTVF:
- return 0x46c9 << 10 // ftint.l.s
- case AMOVDV, AFTINTVD:
- return 0x46ca << 10 // ftint.l.d
- case AMOVDF:
- return 0x4646 << 10 // fcvt.s.d
- case AMOVFD:
- return 0x4649 << 10 // fcvt.d.s
- case AABSF:
- return 0x4501 << 10
- case AABSD:
- return 0x4502 << 10
- case AMOVF:
- return 0x4525 << 10
- case AMOVD:
- return 0x4526 << 10
- case ANEGF:
- return 0x4505 << 10
- case ANEGD:
- return 0x4506 << 10
- case ASQRTF:
- return 0x4511 << 10
- case ASQRTD:
- return 0x4512 << 10
- case AFLOGBF:
- return 0x4509 << 10 // flogb.s
- case AFLOGBD:
- return 0x450a << 10 // flogb.d
- case AFCLASSF:
- return 0x450d << 10 // fclass.s
- case AFCLASSD:
- return 0x450e << 10 // fclass.d
- case AFTINTRMWF:
- return 0x4681 << 10 // ftintrm.w.s
- case AFTINTRMWD:
- return 0x4682 << 10 // ftintrm.w.d
- case AFTINTRMVF:
- return 0x4689 << 10 // ftintrm.l.s
- case AFTINTRMVD:
- return 0x468a << 10 // ftintrm.l.d
- case AFTINTRPWF:
- return 0x4691 << 10 // ftintrp.w.s
- case AFTINTRPWD:
- return 0x4692 << 10 // ftintrp.w.d
- case AFTINTRPVF:
- return 0x4699 << 10 // ftintrp.l.s
- case AFTINTRPVD:
- return 0x469a << 10 // ftintrp.l.d
- case AFTINTRZWF:
- return 0x46a1 << 10 // ftintrz.w.s
- case AFTINTRZWD:
- return 0x46a2 << 10 // ftintrz.w.d
- case AFTINTRZVF:
- return 0x46a9 << 10 // ftintrz.l.s
- case AFTINTRZVD:
- return 0x46aa << 10 // ftintrz.l.d
- case AFTINTRNEWF:
- return 0x46b1 << 10 // ftintrne.w.s
- case AFTINTRNEWD:
- return 0x46b2 << 10 // ftintrne.w.d
- case AFTINTRNEVF:
- return 0x46b9 << 10 // ftintrne.l.s
- case AFTINTRNEVD:
- return 0x46ba << 10 // ftintrne.l.d
- case AVPCNTB:
- return 0x1ca708 << 10 // vpcnt.b
- case AVPCNTH:
- return 0x1ca709 << 10 // vpcnt.h
- case AVPCNTW:
- return 0x1ca70a << 10 // vpcnt.w
- case AVPCNTV:
- return 0x1ca70b << 10 // vpcnt.v
- case AXVPCNTB:
- return 0x1da708 << 10 // xvpcnt.b
- case AXVPCNTH:
- return 0x1da709 << 10 // xvpcnt.h
- case AXVPCNTW:
- return 0x1da70a << 10 // xvpcnt.w
- case AXVPCNTV:
- return 0x1da70b << 10 // xvpcnt.v
- case AVFSQRTF:
- return 0x1ca739 << 10 // vfsqrt.s
- case AVFSQRTD:
- return 0x1ca73a << 10 // vfsqrt.d
- case AVFRECIPF:
- return 0x1ca73d << 10 // vfrecip.s
- case AVFRECIPD:
- return 0x1ca73e << 10 // vfrecip.d
- case AVFRSQRTF:
- return 0x1ca741 << 10 // vfrsqrt.s
- case AVFRSQRTD:
- return 0x1ca742 << 10 // vfrsqrt.d
- case AXVFSQRTF:
- return 0x1da739 << 10 // xvfsqrt.s
- case AXVFSQRTD:
- return 0x1da73a << 10 // xvfsqrt.d
- case AXVFRECIPF:
- return 0x1da73d << 10 // xvfrecip.s
- case AXVFRECIPD:
- return 0x1da73e << 10 // xvfrecip.d
- case AXVFRSQRTF:
- return 0x1da741 << 10 // xvfrsqrt.s
- case AXVFRSQRTD:
- return 0x1da742 << 10 // xvfrsqrt.d
- case AVNEGB:
- return 0x1ca70c << 10 // vneg.b
- case AVNEGH:
- return 0x1ca70d << 10 // vneg.h
- case AVNEGW:
- return 0x1ca70e << 10 // vneg.w
- case AVNEGV:
- return 0x1ca70f << 10 // vneg.d
- case AXVNEGB:
- return 0x1da70c << 10 // xvneg.b
- case AXVNEGH:
- return 0x1da70d << 10 // xvneg.h
- case AXVNEGW:
- return 0x1da70e << 10 // xvneg.w
- case AXVNEGV:
- return 0x1da70f << 10 // xvneg.d
- case AVFRINTRNEF:
- return 0x1ca75d << 10 // vfrintrne.s
- case AVFRINTRNED:
- return 0x1ca75e << 10 // vfrintrne.d
- case AVFRINTRZF:
- return 0x1ca759 << 10 // vfrintrz.s
- case AVFRINTRZD:
- return 0x1ca75a << 10 // vfrintrz.d
- case AVFRINTRPF:
- return 0x1ca755 << 10 // vfrintrp.s
- case AVFRINTRPD:
- return 0x1ca756 << 10 // vfrintrp.d
- case AVFRINTRMF:
- return 0x1ca751 << 10 // vfrintrm.s
- case AVFRINTRMD:
- return 0x1ca752 << 10 // vfrintrm.d
- case AVFRINTF:
- return 0x1ca74d << 10 // vfrint.s
- case AVFRINTD:
- return 0x1ca74e << 10 // vfrint.d
- case AXVFRINTRNEF:
- return 0x1da75d << 10 // xvfrintrne.s
- case AXVFRINTRNED:
- return 0x1da75e << 10 // xvfrintrne.d
- case AXVFRINTRZF:
- return 0x1da759 << 10 // xvfrintrz.s
- case AXVFRINTRZD:
- return 0x1da75a << 10 // xvfrintrz.d
- case AXVFRINTRPF:
- return 0x1da755 << 10 // xvfrintrp.s
- case AXVFRINTRPD:
- return 0x1da756 << 10 // xvfrintrp.d
- case AXVFRINTRMF:
- return 0x1da751 << 10 // xvfrintrm.s
- case AXVFRINTRMD:
- return 0x1da752 << 10 // xvfrintrm.d
- case AXVFRINTF:
- return 0x1da74d << 10 // xvfrint.s
- case AXVFRINTD:
- return 0x1da74e << 10 // xvfrint.d
- case AVFCLASSF:
- return 0x1ca735 << 10 // vfclass.s
- case AVFCLASSD:
- return 0x1ca736 << 10 // vfclass.d
- case AXVFCLASSF:
- return 0x1da735 << 10 // xvfclass.s
- case AXVFCLASSD:
- return 0x1da736 << 10 // xvfclass.d
- case AVSETEQV:
- return 0x1ca726<<10 | 0x0<<3 // vseteqz.v
- case AVSETNEV:
- return 0x1ca727<<10 | 0x0<<3 // vsetnez.v
- case AVSETANYEQB:
- return 0x1ca728<<10 | 0x0<<3 // vsetanyeqz.b
- case AVSETANYEQH:
- return 0x1ca729<<10 | 0x0<<3 // vsetanyeqz.h
- case AVSETANYEQW:
- return 0x1ca72a<<10 | 0x0<<3 // vsetanyeqz.w
- case AVSETANYEQV:
- return 0x1ca72b<<10 | 0x0<<3 // vsetanyeqz.d
- case AVSETALLNEB:
- return 0x1ca72c<<10 | 0x0<<3 // vsetallnez.b
- case AVSETALLNEH:
- return 0x1ca72d<<10 | 0x0<<3 // vsetallnez.h
- case AVSETALLNEW:
- return 0x1ca72e<<10 | 0x0<<3 // vsetallnez.w
- case AVSETALLNEV:
- return 0x1ca72f<<10 | 0x0<<3 // vsetallnez.d
- case AXVSETEQV:
- return 0x1da726<<10 | 0x0<<3 // xvseteqz.v
- case AXVSETNEV:
- return 0x1da727<<10 | 0x0<<3 // xvsetnez.v
- case AXVSETANYEQB:
- return 0x1da728<<10 | 0x0<<3 // xvsetanyeqz.b
- case AXVSETANYEQH:
- return 0x1da729<<10 | 0x0<<3 // xvsetanyeqz.h
- case AXVSETANYEQW:
- return 0x1da72a<<10 | 0x0<<3 // xvsetanyeqz.w
- case AXVSETANYEQV:
- return 0x1da72b<<10 | 0x0<<3 // xvsetanyeqz.d
- case AXVSETALLNEB:
- return 0x1da72c<<10 | 0x0<<3 // xvsetallnez.b
- case AXVSETALLNEH:
- return 0x1da72d<<10 | 0x0<<3 // xvsetallnez.h
- case AXVSETALLNEW:
- return 0x1da72e<<10 | 0x0<<3 // xvsetallnez.w
- case AXVSETALLNEV:
- return 0x1da72f<<10 | 0x0<<3 // xvsetallnez.d
- }
-
- c.ctxt.Diag("bad rr opcode %v", a)
- return 0
+ return c.opcode(oprr, a)
}
func (c *ctxt0) opi(a obj.As) uint32 {
- switch a {
- case ASYSCALL:
- return 0x56 << 15
- case ABREAK:
- return 0x54 << 15
- case ADBAR:
- return 0x70e4 << 15
- }
-
- c.ctxt.Diag("bad ic opcode %v", a)
-
- return 0
+ return c.opcode(opi, a)
}
func (c *ctxt0) opir(a obj.As) uint32 {
- switch a {
- case ALU12IW:
- return 0x0a << 25
- case ALU32ID:
- return 0x0b << 25
- case APCALAU12I:
- return 0x0d << 25
- case APCADDU12I:
- return 0x0e << 25
- }
- return 0
+ return c.opcode(opir, a)
}
func (c *ctxt0) opirr(a obj.As) uint32 {
- switch a {
- case AADD, AADDW:
- return 0x00a << 22
- case ASGT:
- return 0x008 << 22
- case ASGTU:
- return 0x009 << 22
- case AAND:
- return 0x00d << 22
- case AOR:
- return 0x00e << 22
- case ALU52ID:
- return 0x00c << 22
- case AXOR:
- return 0x00f << 22
- case ASLL:
- return 0x00081 << 15
- case ASRL:
- return 0x00089 << 15
- case ASRA:
- return 0x00091 << 15
- case AROTR:
- return 0x00099 << 15
- case AADDV:
- return 0x00b << 22
- case AADDVU:
- return 0x00b << 22
- case AADDV16:
- return 0x4 << 26
-
- case AJMP:
- return 0x14 << 26
- case AJAL:
- return 0x15 << 26
-
- case AJIRL:
- return 0x13 << 26
- case ABLTU:
- return 0x1a << 26
- case ABLT, ABLTZ, ABGTZ:
- return 0x18 << 26
- case ABGEU:
- return 0x1b << 26
- case ABGE, ABGEZ, ABLEZ:
- return 0x19 << 26
- case -ABEQ: // beqz
- return 0x10 << 26
- case -ABNE: // bnez
- return 0x11 << 26
- case ABEQ:
- return 0x16 << 26
- case ABNE:
- return 0x17 << 26
- case ABFPT:
- return 0x12<<26 | 0x1<<8
- case ABFPF:
- return 0x12<<26 | 0x0<<8
- case APRELDX:
- return 0x07058 << 15 // preldx
- case AMOVB,
- AMOVBU:
- return 0x0a4 << 22
- case AMOVH,
- AMOVHU:
- return 0x0a5 << 22
- case AMOVW,
- AMOVWU:
- return 0x0a6 << 22
- case AMOVV:
- return 0x0a7 << 22
- case AMOVF:
- return 0x0ad << 22
- case AMOVD:
- return 0x0af << 22
- case AMOVVP:
- return 0x27 << 24 // stptr.d
- case AMOVWP:
- return 0x25 << 24 // stptr.w
- case -AMOVB:
- return 0x0a0 << 22
- case -AMOVBU:
- return 0x0a8 << 22
- case -AMOVH:
- return 0x0a1 << 22
- case -AMOVHU:
- return 0x0a9 << 22
- case -AMOVW:
- return 0x0a2 << 22
- case -AMOVWU:
- return 0x0aa << 22
- case -AMOVV:
- return 0x0a3 << 22
- case -AMOVF:
- return 0x0ac << 22
- case -AMOVD:
- return 0x0ae << 22
- case -AMOVVP:
- return 0x26 << 24 // ldptr.d
- case -AMOVWP:
- return 0x24 << 24 // ldptr.w
- case -AVMOVQ:
- return 0x0b0 << 22 // vld
- case -AXVMOVQ:
- return 0x0b2 << 22 // xvld
- case AVMOVQ:
- return 0x0b1 << 22 // vst
- case AXVMOVQ:
- return 0x0b3 << 22 // xvst
- case ASLLV:
- return 0x0041 << 16
- case ASRLV:
- return 0x0045 << 16
- case ASRAV:
- return 0x0049 << 16
- case AROTRV:
- return 0x004d << 16
- case -ALL:
- return 0x020 << 24 // ll.w
- case -ALLV:
- return 0x022 << 24 // ll.d
- case ASC:
- return 0x021 << 24 // sc.w
- case ASCV:
- return 0x023 << 24 // sc.d
- case AVANDB:
- return 0x1CF4 << 18 // vandi.b
- case AVORB:
- return 0x1CF5 << 18 // vori.b
- case AVXORB:
- return 0x1CF6 << 18 // xori.b
- case AVNORB:
- return 0x1CF7 << 18 // xnori.b
- case AXVANDB:
- return 0x1DF4 << 18 // xvandi.b
- case AXVORB:
- return 0x1DF5 << 18 // xvori.b
- case AXVXORB:
- return 0x1DF6 << 18 // xvxori.b
- case AXVNORB:
- return 0x1DF7 << 18 // xvnor.b
- case AVSEQB:
- return 0x0E500 << 15 //vseqi.b
- case AVSEQH:
- return 0x0E501 << 15 // vseqi.h
- case AVSEQW:
- return 0x0E502 << 15 //vseqi.w
- case AVSEQV:
- return 0x0E503 << 15 //vseqi.d
- case AXVSEQB:
- return 0x0ED00 << 15 //xvseqi.b
- case AXVSEQH:
- return 0x0ED01 << 15 // xvseqi.h
- case AXVSEQW:
- return 0x0ED02 << 15 // xvseqi.w
- case AXVSEQV:
- return 0x0ED03 << 15 // xvseqi.d
- case AVSLTB:
- return 0x0E50C << 15 // vslti.b
- case AVSLTH:
- return 0x0E50D << 15 // vslti.h
- case AVSLTW:
- return 0x0E50E << 15 // vslti.w
- case AVSLTV:
- return 0x0E50F << 15 // vslti.d
- case AVSLTBU:
- return 0x0E510 << 15 // vslti.bu
- case AVSLTHU:
- return 0x0E511 << 15 // vslti.hu
- case AVSLTWU:
- return 0x0E512 << 15 // vslti.wu
- case AVSLTVU:
- return 0x0E513 << 15 // vslti.du
- case AXVSLTB:
- return 0x0ED0C << 15 // xvslti.b
- case AXVSLTH:
- return 0x0ED0D << 15 // xvslti.h
- case AXVSLTW:
- return 0x0ED0E << 15 // xvslti.w
- case AXVSLTV:
- return 0x0ED0F << 15 // xvslti.d
- case AXVSLTBU:
- return 0x0ED10 << 15 // xvslti.bu
- case AXVSLTHU:
- return 0x0ED11 << 15 // xvslti.hu
- case AXVSLTWU:
- return 0x0ED12 << 15 // xvslti.wu
- case AXVSLTVU:
- return 0x0ED13 << 15 // xvslti.du
- case AVROTRB:
- return 0x1ca8<<18 | 0x1<<13 // vrotri.b
- case AVROTRH:
- return 0x1ca8<<18 | 0x1<<14 // vrotri.h
- case AVROTRW:
- return 0x1ca8<<18 | 0x1<<15 // vrotri.w
- case AVROTRV:
- return 0x1ca8<<18 | 0x1<<16 // vrotri.d
- case AXVROTRB:
- return 0x1da8<<18 | 0x1<<13 // xvrotri.b
- case AXVROTRH:
- return 0x1da8<<18 | 0x1<<14 // xvrotri.h
- case AXVROTRW:
- return 0x1da8<<18 | 0x1<<15 // xvrotri.w
- case AXVROTRV:
- return 0x1da8<<18 | 0x1<<16 // xvrotri.d
- case AVSLLB:
- return 0x1ccb<<18 | 0x1<<13 // vslli.b
- case AVSLLH:
- return 0x1ccb<<18 | 0x1<<14 // vslli.h
- case AVSLLW:
- return 0x1ccb<<18 | 0x1<<15 // vslli.w
- case AVSLLV:
- return 0x1ccb<<18 | 0x1<<16 // vslli.d
- case AVSRLB:
- return 0x1ccc<<18 | 0x1<<13 // vsrli.b
- case AVSRLH:
- return 0x1ccc<<18 | 0x1<<14 // vsrli.h
- case AVSRLW:
- return 0x1ccc<<18 | 0x1<<15 // vsrli.w
- case AVSRLV:
- return 0x1ccc<<18 | 0x1<<16 // vsrli.d
- case AVSRAB:
- return 0x1ccd<<18 | 0x1<<13 // vsrai.b
- case AVSRAH:
- return 0x1ccd<<18 | 0x1<<14 // vsrai.h
- case AVSRAW:
- return 0x1ccd<<18 | 0x1<<15 // vsrai.w
- case AVSRAV:
- return 0x1ccd<<18 | 0x1<<16 // vsrai.d
- case AXVSLLB:
- return 0x1dcb<<18 | 0x1<<13 // xvslli.b
- case AXVSLLH:
- return 0x1dcb<<18 | 0x1<<14 // xvslli.h
- case AXVSLLW:
- return 0x1dcb<<18 | 0x1<<15 // xvslli.w
- case AXVSLLV:
- return 0x1dcb<<18 | 0x1<<16 // xvslli.d
- case AXVSRLB:
- return 0x1dcc<<18 | 0x1<<13 // xvsrli.b
- case AXVSRLH:
- return 0x1dcc<<18 | 0x1<<14 // xvsrli.h
- case AXVSRLW:
- return 0x1dcc<<18 | 0x1<<15 // xvsrli.w
- case AXVSRLV:
- return 0x1dcc<<18 | 0x1<<16 // xvsrli.d
- case AXVSRAB:
- return 0x1dcd<<18 | 0x1<<13 // xvsrai.b
- case AXVSRAH:
- return 0x1dcd<<18 | 0x1<<14 // xvsrai.h
- case AXVSRAW:
- return 0x1dcd<<18 | 0x1<<15 // xvsrai.w
- case AXVSRAV:
- return 0x1dcd<<18 | 0x1<<16 // xvsrai.d
- case AVADDBU:
- return 0xe514 << 15 // vaddi.bu
- case AVADDHU:
- return 0xe515 << 15 // vaddi.hu
- case AVADDWU:
- return 0xe516 << 15 // vaddi.wu
- case AVADDVU:
- return 0xe517 << 15 // vaddi.du
- case AVSUBBU:
- return 0xe518 << 15 // vsubi.bu
- case AVSUBHU:
- return 0xe519 << 15 // vsubi.hu
- case AVSUBWU:
- return 0xe51a << 15 // vsubi.wu
- case AVSUBVU:
- return 0xe51b << 15 // vsubi.du
- case AXVADDBU:
- return 0xed14 << 15 // xvaddi.bu
- case AXVADDHU:
- return 0xed15 << 15 // xvaddi.hu
- case AXVADDWU:
- return 0xed16 << 15 // xvaddi.wu
- case AXVADDVU:
- return 0xed17 << 15 // xvaddi.du
- case AXVSUBBU:
- return 0xed18 << 15 // xvsubi.bu
- case AXVSUBHU:
- return 0xed19 << 15 // xvsubi.hu
- case AXVSUBWU:
- return 0xed1a << 15 // xvsubi.wu
- case AXVSUBVU:
- return 0xed1b << 15 // xvsubi.du
- case AVSHUF4IB:
- return 0x1ce4 << 18 // vshuf4i.b
- case AVSHUF4IH:
- return 0x1ce5 << 18 // vshuf4i.h
- case AVSHUF4IW:
- return 0x1ce6 << 18 // vshuf4i.w
- case AVSHUF4IV:
- return 0x1ce7 << 18 // vshuf4i.d
- case AXVSHUF4IB:
- return 0x1de4 << 18 // xvshuf4i.b
- case AXVSHUF4IH:
- return 0x1de5 << 18 // xvshuf4i.h
- case AXVSHUF4IW:
- return 0x1de6 << 18 // xvshuf4i.w
- case AXVSHUF4IV:
- return 0x1de7 << 18 // xvshuf4i.d
- case AVPERMIW:
- return 0x1cf9 << 18 // vpermi.w
- case AXVPERMIW:
- return 0x1df9 << 18 // xvpermi.w
- case AXVPERMIV:
- return 0x1dfa << 18 // xvpermi.d
- case AXVPERMIQ:
- return 0x1dfb << 18 // xvpermi.q
- case AVEXTRINSB:
- return 0x1ce3 << 18 // vextrins.b
- case AVEXTRINSH:
- return 0x1ce2 << 18 // vextrins.h
- case AVEXTRINSW:
- return 0x1ce1 << 18 // vextrins.w
- case AVEXTRINSV:
- return 0x1ce0 << 18 // vextrins.d
- case AXVEXTRINSB:
- return 0x1de3 << 18 // xvextrins.b
- case AXVEXTRINSH:
- return 0x1de2 << 18 // xvextrins.h
- case AXVEXTRINSW:
- return 0x1de1 << 18 // xvextrins.w
- case AXVEXTRINSV:
- return 0x1de0 << 18 // xvextrins.d
- case AVBITCLRB:
- return 0x1CC4<<18 | 0x1<<13 // vbitclri.b
- case AVBITCLRH:
- return 0x1CC4<<18 | 0x1<<14 // vbitclri.h
- case AVBITCLRW:
- return 0x1CC4<<18 | 0x1<<15 // vbitclri.w
- case AVBITCLRV:
- return 0x1CC4<<18 | 0x1<<16 // vbitclri.d
- case AVBITSETB:
- return 0x1CC5<<18 | 0x1<<13 // vbitseti.b
- case AVBITSETH:
- return 0x1CC5<<18 | 0x1<<14 // vbitseti.h
- case AVBITSETW:
- return 0x1CC5<<18 | 0x1<<15 // vbitseti.w
- case AVBITSETV:
- return 0x1CC5<<18 | 0x1<<16 // vbitseti.d
- case AVBITREVB:
- return 0x1CC6<<18 | 0x1<<13 // vbitrevi.b
- case AVBITREVH:
- return 0x1CC6<<18 | 0x1<<14 // vbitrevi.h
- case AVBITREVW:
- return 0x1CC6<<18 | 0x1<<15 // vbitrevi.w
- case AVBITREVV:
- return 0x1CC6<<18 | 0x1<<16 // vbitrevi.d
- case AXVBITCLRB:
- return 0x1DC4<<18 | 0x1<<13 // xvbitclri.b
- case AXVBITCLRH:
- return 0x1DC4<<18 | 0x1<<14 // xvbitclri.h
- case AXVBITCLRW:
- return 0x1DC4<<18 | 0x1<<15 // xvbitclri.w
- case AXVBITCLRV:
- return 0x1DC4<<18 | 0x1<<16 // xvbitclri.d
- case AXVBITSETB:
- return 0x1DC5<<18 | 0x1<<13 // xvbitseti.b
- case AXVBITSETH:
- return 0x1DC5<<18 | 0x1<<14 // xvbitseti.h
- case AXVBITSETW:
- return 0x1DC5<<18 | 0x1<<15 // xvbitseti.w
- case AXVBITSETV:
- return 0x1DC5<<18 | 0x1<<16 // xvbitseti.d
- case AXVBITREVB:
- return 0x1DC6<<18 | 0x1<<13 // xvbitrevi.b
- case AXVBITREVH:
- return 0x1DC6<<18 | 0x1<<14 // xvbitrevi.h
- case AXVBITREVW:
- return 0x1DC6<<18 | 0x1<<15 // xvbitrevi.w
- case AXVBITREVV:
- return 0x1DC6<<18 | 0x1<<16 // xvbitrevi.d
- }
-
- if a < 0 {
- c.ctxt.Diag("bad irr opcode -%v", -a)
- } else {
- c.ctxt.Diag("bad irr opcode %v", a)
- }
- return 0
+ return c.opcode(opirr, a)
}
func (c *ctxt0) opirrr(a obj.As) uint32 {
- switch a {
- case AALSLW:
- return 0x2 << 17 // alsl.w
- case AALSLWU:
- return 0x3 << 17 // alsl.wu
- case AALSLV:
- return 0x16 << 17 // alsl.d
- }
-
- return 0
+ return c.opcode(opirrr, a)
}
func (c *ctxt0) opirir(a obj.As) uint32 {
- switch a {
- case ABSTRINSW:
- return 0x3<<21 | 0x0<<15 // bstrins.w
- case ABSTRINSV:
- return 0x2 << 22 // bstrins.d
- case ABSTRPICKW:
- return 0x3<<21 | 0x1<<15 // bstrpick.w
- case ABSTRPICKV:
- return 0x3 << 22 // bstrpick.d
- }
-
- return 0
+ return c.opcode(opirir, a)
}
func (c *ctxt0) opiir(a obj.As) uint32 {
- switch a {
- case APRELD:
- return 0x0AB << 22 // preld
- }
-
- return 0
+ return c.opcode(opiir, a)
}
func (c *ctxt0) specialFpMovInst(a obj.As, fclass int, tclass int) uint32 {
diff --git a/src/cmd/internal/obj/loong64/instOp.go b/src/cmd/internal/obj/loong64/instOp.go
new file mode 100644
index 0000000..9e6a1c3
--- /dev/null
+++ b/src/cmd/internal/obj/loong64/instOp.go
@@ -0,0 +1,917 @@
+// Copyright 2026 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package loong64
+
+import (
+ "cmd/internal/obj"
+)
+
+var oprrrr = map[obj.As]uint32{
+ AFMADDF: 0x81 << 20, // fmadd.s
+ AFMADDD: 0x82 << 20, // fmadd.d
+ AFMSUBF: 0x85 << 20, // fmsub.s
+ AFMSUBD: 0x86 << 20, // fmsub.d
+ AFNMADDF: 0x89 << 20, // fnmadd.f
+ AFNMADDD: 0x8a << 20, // fnmadd.d
+ AFNMSUBF: 0x8d << 20, // fnmsub.s
+ AFNMSUBD: 0x8e << 20, // fnmsub.d
+ AVSHUFB: 0x0d5 << 20, // vshuf.b
+ AXVSHUFB: 0x0d6 << 20, // xvshuf.b
+}
+
+var oprrr = map[obj.As]uint32{
+ AADD: 0x20 << 15, // add.w
+ AADDW: 0x20 << 15, // add.w
+ AADDV: 0x21 << 15, // add.d
+ AADDVU: 0x21 << 15, // add.d
+ ASUB: 0x22 << 15, // sub.w
+ ASUBW: 0x22 << 15, // sub.w
+ ANEGW: 0x22 << 15, // sub.w
+ ASUBV: 0x23 << 15, // sub.d
+ ASUBVU: 0x23 << 15, // sub.d
+ ANEGV: 0x23 << 15, // sub.d
+ ASGT: 0x24 << 15, // slt
+ ASGTU: 0x25 << 15, // sltu
+ AMASKEQZ: 0x26 << 15, // maskeqz
+ AMASKNEZ: 0x27 << 15, // masknez
+ ANOR: 0x28 << 15, // nor
+ AAND: 0x29 << 15, // and
+ AOR: 0x2a << 15, // or
+ AXOR: 0x2b << 15, // xor
+ AORN: 0x2c << 15, // orn
+ AANDN: 0x2d << 15, // andn
+ ASLL: 0x2e << 15, // sll.w
+ ASRL: 0x2f << 15, // srl.w
+ ASRA: 0x30 << 15, // sra.w
+ ASLLV: 0x31 << 15, // sll.d
+ ASRLV: 0x32 << 15, // srl.d
+ ASRAV: 0x33 << 15, // sra.d
+ AROTR: 0x36 << 15, // rotr.w
+ AROTRV: 0x37 << 15, // rotr.d
+ AMUL: 0x38 << 15, // mul.w
+ AMULW: 0x38 << 15, // mul.w
+ AMULH: 0x39 << 15, // mulh.w
+ AMULHU: 0x3a << 15, // mulhu.w
+ AMULV: 0x3b << 15, // mul.d
+ AMULVU: 0x3b << 15, // mul.d
+ AMULHV: 0x3c << 15, // mulh.d
+ AMULHVU: 0x3d << 15, // mulhu.d
+ AMULWVW: 0x3e << 15, // mulw.d.w
+ AMULWVWU: 0x3f << 15, // mulw.d.wu
+ ADIV: 0x40 << 15, // div.w
+ ADIVW: 0x40 << 15, // div.w
+ AREM: 0x41 << 15, // mod.w
+ AREMW: 0x41 << 15, // mod.w
+ ADIVU: 0x42 << 15, // div.wu
+ ADIVWU: 0x42 << 15, // div.wu
+ AREMU: 0x43 << 15, // mod.wu
+ AREMWU: 0x43 << 15, // mod.wu
+ ADIVV: 0x44 << 15, // div.d
+ AREMV: 0x45 << 15, // mod.d
+ ADIVVU: 0x46 << 15, // div.du
+ AREMVU: 0x47 << 15, // mod.du
+ ACRCWBW: 0x48 << 15, // crc.w.b.w
+ ACRCWHW: 0x49 << 15, // crc.w.h.w
+ ACRCWWW: 0x4a << 15, // crc.w.w.w
+ ACRCWVW: 0x4b << 15, // crc.w.d.w
+ ACRCCWBW: 0x4c << 15, // crcc.w.b.w
+ ACRCCWHW: 0x4d << 15, // crcc.w.h.w
+ ACRCCWWW: 0x4e << 15, // crcc.w.w.w
+ ACRCCWVW: 0x4f << 15, // crcc.w.d.w
+ AJMP: 0x13 << 26, // jirl r0, rj, 0
+ AJAL: 0x13<<26 | 1<<0, // jirl r1, rj, 0
+ AMULF: 0x209 << 15, // fmul.s
+ AMULD: 0x20a << 15, // fmul.d
+ ADIVF: 0x20d << 15, // fdiv.s
+ ADIVD: 0x20e << 15, // fdiv.d
+ ASUBF: 0x205 << 15, // fsub.s
+ ASUBD: 0x206 << 15, // fsub.d
+ AADDF: 0x201 << 15, // fadd.s
+ AADDD: 0x202 << 15, // fadd.d
+ ACMPEQF: 0x0c1<<20 | 0x4<<15, // FCMP.CEQ.S
+ ACMPEQD: 0x0c2<<20 | 0x4<<15, // FCMP.CEQ.D
+ ACMPGED: 0x0c2<<20 | 0x7<<15, // FCMP.SLE.D
+ ACMPGEF: 0x0c1<<20 | 0x7<<15, // FCMP.SLE.S
+ ACMPGTD: 0x0c2<<20 | 0x3<<15, // FCMP.SLT.D
+ ACMPGTF: 0x0c1<<20 | 0x3<<15, // FCMP.SLT.S
+ AFMINF: 0x215 << 15, // fmin.s
+ AFMIND: 0x216 << 15, // fmin.d
+ AFMAXF: 0x211 << 15, // fmax.s
+ AFMAXD: 0x212 << 15, // fmax.d
+ AFMAXAF: 0x219 << 15, // fmaxa.s
+ AFMAXAD: 0x21a << 15, // fmaxa.d
+ AFMINAF: 0x21d << 15, // fmina.s
+ AFMINAD: 0x21e << 15, // fmina.d
+ AFSCALEBF: 0x221 << 15, // fscaleb.s
+ AFSCALEBD: 0x222 << 15, // fscaleb.d
+ AFCOPYSGF: 0x225 << 15, // fcopysign.s
+ AFCOPYSGD: 0x226 << 15, // fcopysign.d
+ -AMOVB: 0x07000 << 15, // ldx.b
+ -AMOVH: 0x07008 << 15, // ldx.h
+ -AMOVW: 0x07010 << 15, // ldx.w
+ -AMOVV: 0x07018 << 15, // ldx.d
+ -AMOVBU: 0x07040 << 15, // ldx.bu
+ -AMOVHU: 0x07048 << 15, // ldx.hu
+ -AMOVWU: 0x07050 << 15, // ldx.wu
+ AMOVB: 0x07020 << 15, // stx.b
+ AMOVH: 0x07028 << 15, // stx.h
+ AMOVW: 0x07030 << 15, // stx.w
+ AMOVV: 0x07038 << 15, // stx.d
+ -AMOVF: 0x07060 << 15, // fldx.s
+ -AMOVD: 0x07068 << 15, // fldx.d
+ AMOVF: 0x07070 << 15, // fstx.s
+ AMOVD: 0x07078 << 15, // fstx.d
+ -AVMOVQ: 0x07080 << 15, // vldx
+ -AXVMOVQ: 0x07090 << 15, // xvldx
+ AVMOVQ: 0x07088 << 15, // vstx
+ AXVMOVQ: 0x07098 << 15, // xvstx
+ AVSEQB: 0x0e000 << 15, // vseq.b
+ AXVSEQB: 0x0e800 << 15, // xvseq.b
+ AVSEQH: 0x0e001 << 15, // vseq.h
+ AXVSEQH: 0x0e801 << 15, // xvseq.h
+ AVSEQW: 0x0e002 << 15, // vseq.w
+ AXVSEQW: 0x0e802 << 15, // xvseq.w
+ AVSEQV: 0x0e003 << 15, // vseq.d
+ AXVSEQV: 0x0e803 << 15, // xvseq.d
+ AVSLTB: 0x0e00c << 15, // vslt.b
+ AVSLTH: 0x0e00d << 15, // vslt.h
+ AVSLTW: 0x0e00e << 15, // vslt.w
+ AVSLTV: 0x0e00f << 15, // vslt.d
+ AVSLTBU: 0x0e010 << 15, // vslt.bu
+ AVSLTHU: 0x0e011 << 15, // vslt.hu
+ AVSLTWU: 0x0e012 << 15, // vslt.wu
+ AVSLTVU: 0x0e013 << 15, // vslt.du
+ AXVSLTB: 0x0e80c << 15, // xvslt.b
+ AXVSLTH: 0x0e80d << 15, // xvslt.h
+ AXVSLTW: 0x0e80e << 15, // xvslt.w
+ AXVSLTV: 0x0e80f << 15, // xvslt.d
+ AXVSLTBU: 0x0e810 << 15, // xvslt.bu
+ AXVSLTHU: 0x0e811 << 15, // xvslt.hu
+ AXVSLTWU: 0x0e812 << 15, // xvslt.wu
+ AXVSLTVU: 0x0e813 << 15, // xvslt.du
+ AVANDV: 0x0e24c << 15, // vand.v
+ AVORV: 0x0e24d << 15, // vor.v
+ AVXORV: 0x0e24e << 15, // vxor.v
+ AVNORV: 0x0e24f << 15, // vnor.v
+ AVANDNV: 0x0e250 << 15, // vandn.v
+ AVORNV: 0x0e251 << 15, // vorn.v
+ AXVANDV: 0x0ea4c << 15, // xvand.v
+ AXVORV: 0x0ea4d << 15, // xvor.v
+ AXVXORV: 0x0ea4e << 15, // xvxor.v
+ AXVNORV: 0x0ea4f << 15, // xvnor.v
+ AXVANDNV: 0x0ea50 << 15, // xvandn.v
+ AXVORNV: 0x0ea51 << 15, // xvorn.v
+ AVDIVB: 0xe1c0 << 15, // vdiv.b
+ AVDIVH: 0xe1c1 << 15, // vdiv.h
+ AVDIVW: 0xe1c2 << 15, // vdiv.w
+ AVDIVV: 0xe1c3 << 15, // vdiv.d
+ AVMODB: 0xe1c4 << 15, // vmod.b
+ AVMODH: 0xe1c5 << 15, // vmod.h
+ AVMODW: 0xe1c6 << 15, // vmod.w
+ AVMODV: 0xe1c7 << 15, // vmod.d
+ AVDIVBU: 0xe1c8 << 15, // vdiv.bu
+ AVDIVHU: 0xe1c9 << 15, // vdiv.hu
+ AVDIVWU: 0xe1ca << 15, // vdiv.wu
+ AVDIVVU: 0xe1cb << 15, // vdiv.du
+ AVMODBU: 0xe1cc << 15, // vmod.bu
+ AVMODHU: 0xe1cd << 15, // vmod.hu
+ AVMODWU: 0xe1ce << 15, // vmod.wu
+ AVMODVU: 0xe1cf << 15, // vmod.du
+ AXVDIVB: 0xe9c0 << 15, // xvdiv.b
+ AXVDIVH: 0xe9c1 << 15, // xvdiv.h
+ AXVDIVW: 0xe9c2 << 15, // xvdiv.w
+ AXVDIVV: 0xe9c3 << 15, // xvdiv.d
+ AXVMODB: 0xe9c4 << 15, // xvmod.b
+ AXVMODH: 0xe9c5 << 15, // xvmod.h
+ AXVMODW: 0xe9c6 << 15, // xvmod.w
+ AXVMODV: 0xe9c7 << 15, // xvmod.d
+ AXVDIVBU: 0xe9c8 << 15, // xvdiv.bu
+ AXVDIVHU: 0xe9c9 << 15, // xvdiv.hu
+ AXVDIVWU: 0xe9ca << 15, // xvdiv.wu
+ AXVDIVVU: 0xe9cb << 15, // xvdiv.du
+ AXVMODBU: 0xe9cc << 15, // xvmod.bu
+ AXVMODHU: 0xe9cd << 15, // xvmod.hu
+ AXVMODWU: 0xe9ce << 15, // xvmod.wu
+ AXVMODVU: 0xe9cf << 15, // xvmod.du
+ AVMULWEVHB: 0xe120 << 15, // vmulwev.h.b
+ AVMULWEVWH: 0xe121 << 15, // vmulwev.w.h
+ AVMULWEVVW: 0xe122 << 15, // vmulwev.d.w
+ AVMULWEVQV: 0xe123 << 15, // vmulwev.q.d
+ AVMULWODHB: 0xe124 << 15, // vmulwod.h.b
+ AVMULWODWH: 0xe125 << 15, // vmulwod.w.h
+ AVMULWODVW: 0xe126 << 15, // vmulwod.d.w
+ AVMULWODQV: 0xe127 << 15, // vmulwod.q.d
+ AVMULWEVHBU: 0xe130 << 15, // vmulwev.h.bu
+ AVMULWEVWHU: 0xe131 << 15, // vmulwev.w.hu
+ AVMULWEVVWU: 0xe132 << 15, // vmulwev.d.wu
+ AVMULWEVQVU: 0xe133 << 15, // vmulwev.q.du
+ AVMULWODHBU: 0xe134 << 15, // vmulwod.h.bu
+ AVMULWODWHU: 0xe135 << 15, // vmulwod.w.hu
+ AVMULWODVWU: 0xe136 << 15, // vmulwod.d.wu
+ AVMULWODQVU: 0xe137 << 15, // vmulwod.q.du
+ AVMULWEVHBUB: 0xe140 << 15, // vmulwev.h.bu.b
+ AVMULWEVWHUH: 0xe141 << 15, // vmulwev.w.hu.h
+ AVMULWEVVWUW: 0xe142 << 15, // vmulwev.d.wu.w
+ AVMULWEVQVUV: 0xe143 << 15, // vmulwev.q.du.d
+ AVMULWODHBUB: 0xe144 << 15, // vmulwod.h.bu.b
+ AVMULWODWHUH: 0xe145 << 15, // vmulwod.w.hu.h
+ AVMULWODVWUW: 0xe146 << 15, // vmulwod.d.wu.w
+ AVMULWODQVUV: 0xe147 << 15, // vmulwod.q.du.d
+ AXVMULWEVHB: 0xe920 << 15, // xvmulwev.h.b
+ AXVMULWEVWH: 0xe921 << 15, // xvmulwev.w.h
+ AXVMULWEVVW: 0xe922 << 15, // xvmulwev.d.w
+ AXVMULWEVQV: 0xe923 << 15, // xvmulwev.q.d
+ AXVMULWODHB: 0xe924 << 15, // xvmulwod.h.b
+ AXVMULWODWH: 0xe925 << 15, // xvmulwod.w.h
+ AXVMULWODVW: 0xe926 << 15, // xvmulwod.d.w
+ AXVMULWODQV: 0xe927 << 15, // xvmulwod.q.d
+ AXVMULWEVHBU: 0xe930 << 15, // xvmulwev.h.bu
+ AXVMULWEVWHU: 0xe931 << 15, // xvmulwev.w.hu
+ AXVMULWEVVWU: 0xe932 << 15, // xvmulwev.d.wu
+ AXVMULWEVQVU: 0xe933 << 15, // xvmulwev.q.du
+ AXVMULWODHBU: 0xe934 << 15, // xvmulwod.h.bu
+ AXVMULWODWHU: 0xe935 << 15, // xvmulwod.w.hu
+ AXVMULWODVWU: 0xe936 << 15, // xvmulwod.d.wu
+ AXVMULWODQVU: 0xe937 << 15, // xvmulwod.q.du
+ AXVMULWEVHBUB: 0xe940 << 15, // xvmulwev.h.bu.b
+ AXVMULWEVWHUH: 0xe941 << 15, // xvmulwev.w.hu.h
+ AXVMULWEVVWUW: 0xe942 << 15, // xvmulwev.d.wu.w
+ AXVMULWEVQVUV: 0xe943 << 15, // xvmulwev.q.du.d
+ AXVMULWODHBUB: 0xe944 << 15, // xvmulwod.h.bu.b
+ AXVMULWODWHUH: 0xe945 << 15, // xvmulwod.w.hu.h
+ AXVMULWODVWUW: 0xe946 << 15, // xvmulwod.d.wu.w
+ AXVMULWODQVUV: 0xe947 << 15, // xvmulwod.q.du.d
+ AVADDWEVHB: 0x0e03c << 15, // vaddwev.h.b
+ AVADDWEVWH: 0x0e03d << 15, // vaddwev.w.h
+ AVADDWEVVW: 0x0e03e << 15, // vaddwev.d.w
+ AVADDWEVQV: 0x0e03f << 15, // vaddwev.q.d
+ AVSUBWEVHB: 0x0e040 << 15, // vsubwev.h.b
+ AVSUBWEVWH: 0x0e041 << 15, // vsubwev.w.h
+ AVSUBWEVVW: 0x0e042 << 15, // vsubwev.d.w
+ AVSUBWEVQV: 0x0e043 << 15, // vsubwev.q.d
+ AVADDWODHB: 0x0e044 << 15, // vaddwod.h.b
+ AVADDWODWH: 0x0e045 << 15, // vaddwod.w.h
+ AVADDWODVW: 0x0e046 << 15, // vaddwod.d.w
+ AVADDWODQV: 0x0e047 << 15, // vaddwod.q.d
+ AVSUBWODHB: 0x0e048 << 15, // vsubwod.h.b
+ AVSUBWODWH: 0x0e049 << 15, // vsubwod.w.h
+ AVSUBWODVW: 0x0e04a << 15, // vsubwod.d.w
+ AVSUBWODQV: 0x0e04b << 15, // vsubwod.q.d
+ AXVADDWEVHB: 0x0e83c << 15, // xvaddwev.h.b
+ AXVADDWEVWH: 0x0e83d << 15, // xvaddwev.w.h
+ AXVADDWEVVW: 0x0e83e << 15, // xvaddwev.d.w
+ AXVADDWEVQV: 0x0e83f << 15, // xvaddwev.q.d
+ AXVSUBWEVHB: 0x0e840 << 15, // xvsubwev.h.b
+ AXVSUBWEVWH: 0x0e841 << 15, // xvsubwev.w.h
+ AXVSUBWEVVW: 0x0e842 << 15, // xvsubwev.d.w
+ AXVSUBWEVQV: 0x0e843 << 15, // xvsubwev.q.d
+ AXVADDWODHB: 0x0e844 << 15, // xvaddwod.h.b
+ AXVADDWODWH: 0x0e845 << 15, // xvaddwod.w.h
+ AXVADDWODVW: 0x0e846 << 15, // xvaddwod.d.w
+ AXVADDWODQV: 0x0e847 << 15, // xvaddwod.q.d
+ AXVSUBWODHB: 0x0e848 << 15, // xvsubwod.h.b
+ AXVSUBWODWH: 0x0e849 << 15, // xvsubwod.w.h
+ AXVSUBWODVW: 0x0e84a << 15, // xvsubwod.d.w
+ AXVSUBWODQV: 0x0e84b << 15, // xvsubwod.q.d
+ AVADDWEVHBU: 0x0e05c << 15, // vaddwev.h.bu
+ AVADDWEVWHU: 0x0e05e << 15, // vaddwev.w.hu
+ AVADDWEVVWU: 0x0e05e << 15, // vaddwev.d.wu
+ AVADDWEVQVU: 0x0e05f << 15, // vaddwev.q.du
+ AVSUBWEVHBU: 0x0e060 << 15, // vsubwev.h.bu
+ AVSUBWEVWHU: 0x0e061 << 15, // vsubwev.w.hu
+ AVSUBWEVVWU: 0x0e062 << 15, // vsubwev.d.wu
+ AVSUBWEVQVU: 0x0e063 << 15, // vsubwev.q.du
+ AVADDWODHBU: 0x0e064 << 15, // vaddwod.h.bu
+ AVADDWODWHU: 0x0e065 << 15, // vaddwod.w.hu
+ AVADDWODVWU: 0x0e066 << 15, // vaddwod.d.wu
+ AVADDWODQVU: 0x0e067 << 15, // vaddwod.q.du
+ AVSUBWODHBU: 0x0e068 << 15, // vsubwod.h.bu
+ AVSUBWODWHU: 0x0e069 << 15, // vsubwod.w.hu
+ AVSUBWODVWU: 0x0e06a << 15, // vsubwod.d.wu
+ AVSUBWODQVU: 0x0e06b << 15, // vsubwod.q.du
+ AXVADDWEVHBU: 0x0e85c << 15, // xvaddwev.h.bu
+ AXVADDWEVWHU: 0x0e85d << 15, // xvaddwev.w.hu
+ AXVADDWEVVWU: 0x0e85e << 15, // xvaddwev.d.wu
+ AXVADDWEVQVU: 0x0e85f << 15, // xvaddwev.q.du
+ AXVSUBWEVHBU: 0x0e860 << 15, // xvsubwev.h.bu
+ AXVSUBWEVWHU: 0x0e861 << 15, // xvsubwev.w.hu
+ AXVSUBWEVVWU: 0x0e862 << 15, // xvsubwev.d.wu
+ AXVSUBWEVQVU: 0x0e863 << 15, // xvsubwev.q.du
+ AXVADDWODHBU: 0x0e864 << 15, // xvaddwod.h.bu
+ AXVADDWODWHU: 0x0e865 << 15, // xvaddwod.w.hu
+ AXVADDWODVWU: 0x0e866 << 15, // xvaddwod.d.wu
+ AXVADDWODQVU: 0x0e867 << 15, // xvaddwod.q.du
+ AXVSUBWODHBU: 0x0e868 << 15, // xvsubwod.h.bu
+ AXVSUBWODWHU: 0x0e869 << 15, // xvsubwod.w.hu
+ AXVSUBWODVWU: 0x0e86a << 15, // xvsubwod.d.wu
+ AXVSUBWODQVU: 0x0e86b << 15, // xvsubwod.q.du
+ AVMADDB: 0x0e150 << 15, // vmadd.b
+ AVMADDH: 0x0e151 << 15, // vmadd.h
+ AVMADDW: 0x0e152 << 15, // vmadd.w
+ AVMADDV: 0x0e153 << 15, // vmadd.d
+ AVMSUBB: 0x0e154 << 15, // vmsub.b
+ AVMSUBH: 0x0e155 << 15, // vmsub.h
+ AVMSUBW: 0x0e156 << 15, // vmsub.w
+ AVMSUBV: 0x0e157 << 15, // vmsub.d
+ AXVMADDB: 0x0e950 << 15, // xvmadd.b
+ AXVMADDH: 0x0e951 << 15, // xvmadd.h
+ AXVMADDW: 0x0e952 << 15, // xvmadd.w
+ AXVMADDV: 0x0e953 << 15, // xvmadd.d
+ AXVMSUBB: 0x0e954 << 15, // xvmsub.b
+ AXVMSUBH: 0x0e955 << 15, // xvmsub.h
+ AXVMSUBW: 0x0e956 << 15, // xvmsub.w
+ AXVMSUBV: 0x0e957 << 15, // xvmsub.d
+ AVMADDWEVHB: 0x0e158 << 15, // vmaddwev.h.b
+ AVMADDWEVWH: 0x0e159 << 15, // vmaddwev.w.h
+ AVMADDWEVVW: 0x0e15a << 15, // vmaddwev.d.w
+ AVMADDWEVQV: 0x0e15b << 15, // vmaddwev.q.d
+ AVMADDWODHB: 0x0e15c << 15, // vmaddwov.h.b
+ AVMADDWODWH: 0x0e15d << 15, // vmaddwod.w.h
+ AVMADDWODVW: 0x0e15e << 15, // vmaddwod.d.w
+ AVMADDWODQV: 0x0e15f << 15, // vmaddwod.q.d
+ AVMADDWEVHBU: 0x0e168 << 15, // vmaddwev.h.bu
+ AVMADDWEVWHU: 0x0e169 << 15, // vmaddwev.w.hu
+ AVMADDWEVVWU: 0x0e16a << 15, // vmaddwev.d.wu
+ AVMADDWEVQVU: 0x0e16b << 15, // vmaddwev.q.du
+ AVMADDWODHBU: 0x0e16c << 15, // vmaddwov.h.bu
+ AVMADDWODWHU: 0x0e16d << 15, // vmaddwod.w.hu
+ AVMADDWODVWU: 0x0e16e << 15, // vmaddwod.d.wu
+ AVMADDWODQVU: 0x0e16f << 15, // vmaddwod.q.du
+ AVMADDWEVHBUB: 0x0e178 << 15, // vmaddwev.h.bu.b
+ AVMADDWEVWHUH: 0x0e179 << 15, // vmaddwev.w.hu.h
+ AVMADDWEVVWUW: 0x0e17a << 15, // vmaddwev.d.wu.w
+ AVMADDWEVQVUV: 0x0e17b << 15, // vmaddwev.q.du.d
+ AVMADDWODHBUB: 0x0e17c << 15, // vmaddwov.h.bu.b
+ AVMADDWODWHUH: 0x0e17d << 15, // vmaddwod.w.hu.h
+ AVMADDWODVWUW: 0x0e17e << 15, // vmaddwod.d.wu.w
+ AVMADDWODQVUV: 0x0e17f << 15, // vmaddwod.q.du.d
+ AXVMADDWEVHB: 0x0e958 << 15, // xvmaddwev.h.b
+ AXVMADDWEVWH: 0x0e959 << 15, // xvmaddwev.w.h
+ AXVMADDWEVVW: 0x0e95a << 15, // xvmaddwev.d.w
+ AXVMADDWEVQV: 0x0e95b << 15, // xvmaddwev.q.d
+ AXVMADDWODHB: 0x0e95c << 15, // xvmaddwov.h.b
+ AXVMADDWODWH: 0x0e95d << 15, // xvmaddwod.w.h
+ AXVMADDWODVW: 0x0e95e << 15, // xvmaddwod.d.w
+ AXVMADDWODQV: 0x0e95f << 15, // xvmaddwod.q.d
+ AXVMADDWEVHBU: 0x0e968 << 15, // xvmaddwev.h.bu
+ AXVMADDWEVWHU: 0x0e969 << 15, // xvmaddwev.w.hu
+ AXVMADDWEVVWU: 0x0e96a << 15, // xvmaddwev.d.wu
+ AXVMADDWEVQVU: 0x0e96b << 15, // xvmaddwev.q.du
+ AXVMADDWODHBU: 0x0e96c << 15, // xvmaddwov.h.bu
+ AXVMADDWODWHU: 0x0e96d << 15, // xvmaddwod.w.hu
+ AXVMADDWODVWU: 0x0e96e << 15, // xvmaddwod.d.wu
+ AXVMADDWODQVU: 0x0e96f << 15, // xvmaddwod.q.du
+ AXVMADDWEVHBUB: 0x0e978 << 15, // xvmaddwev.h.bu.b
+ AXVMADDWEVWHUH: 0x0e979 << 15, // xvmaddwev.w.hu.h
+ AXVMADDWEVVWUW: 0x0e97a << 15, // xvmaddwev.d.wu.w
+ AXVMADDWEVQVUV: 0x0e97b << 15, // xvmaddwev.q.du.d
+ AXVMADDWODHBUB: 0x0e97c << 15, // xvmaddwov.h.bu.b
+ AXVMADDWODWHUH: 0x0e97d << 15, // xvmaddwod.w.hu.h
+ AXVMADDWODVWUW: 0x0e97e << 15, // xvmaddwod.d.wu.w
+ AXVMADDWODQVUV: 0x0e97f << 15, // xvmaddwod.q.du.d
+ AVSLLB: 0xe1d0 << 15, // vsll.b
+ AVSLLH: 0xe1d1 << 15, // vsll.h
+ AVSLLW: 0xe1d2 << 15, // vsll.w
+ AVSLLV: 0xe1d3 << 15, // vsll.d
+ AVSRLB: 0xe1d4 << 15, // vsrl.b
+ AVSRLH: 0xe1d5 << 15, // vsrl.h
+ AVSRLW: 0xe1d6 << 15, // vsrl.w
+ AVSRLV: 0xe1d7 << 15, // vsrl.d
+ AVSRAB: 0xe1d8 << 15, // vsra.b
+ AVSRAH: 0xe1d9 << 15, // vsra.h
+ AVSRAW: 0xe1da << 15, // vsra.w
+ AVSRAV: 0xe1db << 15, // vsra.d
+ AVROTRB: 0xe1dc << 15, // vrotr.b
+ AVROTRH: 0xe1dd << 15, // vrotr.h
+ AVROTRW: 0xe1de << 15, // vrotr.w
+ AVROTRV: 0xe1df << 15, // vrotr.d
+ AXVSLLB: 0xe9d0 << 15, // xvsll.b
+ AXVSLLH: 0xe9d1 << 15, // xvsll.h
+ AXVSLLW: 0xe9d2 << 15, // xvsll.w
+ AXVSLLV: 0xe9d3 << 15, // xvsll.d
+ AXVSRLB: 0xe9d4 << 15, // xvsrl.b
+ AXVSRLH: 0xe9d5 << 15, // xvsrl.h
+ AXVSRLW: 0xe9d6 << 15, // xvsrl.w
+ AXVSRLV: 0xe9d7 << 15, // xvsrl.d
+ AXVSRAB: 0xe9d8 << 15, // xvsra.b
+ AXVSRAH: 0xe9d9 << 15, // xvsra.h
+ AXVSRAW: 0xe9da << 15, // xvsra.w
+ AXVSRAV: 0xe9db << 15, // xvsra.d
+ AXVROTRB: 0xe9dc << 15, // xvrotr.b
+ AXVROTRH: 0xe9dd << 15, // xvrotr.h
+ AXVROTRW: 0xe9de << 15, // xvrotr.w
+ AXVROTRV: 0xe9df << 15, // xvrotr.d
+ AVADDB: 0xe014 << 15, // vadd.b
+ AVADDH: 0xe015 << 15, // vadd.h
+ AVADDW: 0xe016 << 15, // vadd.w
+ AVADDV: 0xe017 << 15, // vadd.d
+ AVADDQ: 0xe25a << 15, // vadd.q
+ AVSUBB: 0xe018 << 15, // vsub.b
+ AVSUBH: 0xe019 << 15, // vsub.h
+ AVSUBW: 0xe01a << 15, // vsub.w
+ AVSUBV: 0xe01b << 15, // vsub.d
+ AVSUBQ: 0xe25b << 15, // vsub.q
+ AXVADDB: 0xe814 << 15, // xvadd.b
+ AXVADDH: 0xe815 << 15, // xvadd.h
+ AXVADDW: 0xe816 << 15, // xvadd.w
+ AXVADDV: 0xe817 << 15, // xvadd.d
+ AXVADDQ: 0xea5a << 15, // xvadd.q
+ AXVSUBB: 0xe818 << 15, // xvsub.b
+ AXVSUBH: 0xe819 << 15, // xvsub.h
+ AXVSUBW: 0xe81a << 15, // xvsub.w
+ AXVSUBV: 0xe81b << 15, // xvsub.d
+ AXVSUBQ: 0xea5b << 15, // xvsub.q
+ AVSADDB: 0x0e08c << 15, // vsadd.b
+ AVSADDH: 0x0e08d << 15, // vsadd.h
+ AVSADDW: 0x0e08e << 15, // vsadd.w
+ AVSADDV: 0x0e08f << 15, // vsadd.d
+ AVSSUBB: 0x0e090 << 15, // vssub.b
+ AVSSUBH: 0x0e091 << 15, // vssub.w
+ AVSSUBW: 0x0e092 << 15, // vssub.h
+ AVSSUBV: 0x0e093 << 15, // vssub.d
+ AVSADDBU: 0x0e094 << 15, // vsadd.bu
+ AVSADDHU: 0x0e095 << 15, // vsadd.hu
+ AVSADDWU: 0x0e096 << 15, // vsadd.wu
+ AVSADDVU: 0x0e097 << 15, // vsadd.du
+ AVSSUBBU: 0x0e098 << 15, // vssub.bu
+ AVSSUBHU: 0x0e099 << 15, // vssub.wu
+ AVSSUBWU: 0x0e09a << 15, // vssub.hu
+ AVSSUBVU: 0x0e09b << 15, // vssub.du
+ AXVSADDB: 0x0e88c << 15, // vxsadd.b
+ AXVSADDH: 0x0e88d << 15, // vxsadd.h
+ AXVSADDW: 0x0e88e << 15, // vxsadd.w
+ AXVSADDV: 0x0e88f << 15, // vxsadd.d
+ AXVSSUBB: 0x0e890 << 15, // xvssub.b
+ AXVSSUBH: 0x0e891 << 15, // xvssub.h
+ AXVSSUBW: 0x0e892 << 15, // xvssub.w
+ AXVSSUBV: 0x0e893 << 15, // xvssub.d
+ AXVSADDBU: 0x0e894 << 15, // vxsadd.bu
+ AXVSADDHU: 0x0e896 << 15, // vxsadd.hu
+ AXVSADDWU: 0x0e896 << 15, // vxsadd.wu
+ AXVSADDVU: 0x0e897 << 15, // vxsadd.du
+ AXVSSUBBU: 0x0e898 << 15, // xvssub.bu
+ AXVSSUBHU: 0x0e899 << 15, // xvssub.hu
+ AXVSSUBWU: 0x0e89a << 15, // xvssub.wu
+ AXVSSUBVU: 0x0e89b << 15, // xvssub.du
+ AVILVLB: 0xe234 << 15, // vilvl.b
+ AVILVLH: 0xe235 << 15, // vilvl.h
+ AVILVLW: 0xe236 << 15, // vilvl.w
+ AVILVLV: 0xe237 << 15, // vilvl.d
+ AVILVHB: 0xe238 << 15, // vilvh.b
+ AVILVHH: 0xe239 << 15, // vilvh.h
+ AVILVHW: 0xe23a << 15, // vilvh.w
+ AVILVHV: 0xe23b << 15, // vilvh.d
+ AXVILVLB: 0xea34 << 15, // xvilvl.b
+ AXVILVLH: 0xea35 << 15, // xvilvl.h
+ AXVILVLW: 0xea36 << 15, // xvilvl.w
+ AXVILVLV: 0xea37 << 15, // xvilvl.d
+ AXVILVHB: 0xea38 << 15, // xvilvh.b
+ AXVILVHH: 0xea39 << 15, // xvilvh.h
+ AXVILVHW: 0xea3a << 15, // xvilvh.w
+ AXVILVHV: 0xea3b << 15, // xvilvh.d
+ AVMULB: 0xe108 << 15, // vmul.b
+ AVMULH: 0xe109 << 15, // vmul.h
+ AVMULW: 0xe10a << 15, // vmul.w
+ AVMULV: 0xe10b << 15, // vmul.d
+ AVMUHB: 0xe10c << 15, // vmuh.b
+ AVMUHH: 0xe10d << 15, // vmuh.h
+ AVMUHW: 0xe10e << 15, // vmuh.w
+ AVMUHV: 0xe10f << 15, // vmuh.d
+ AVMUHBU: 0xe110 << 15, // vmuh.bu
+ AVMUHHU: 0xe111 << 15, // vmuh.hu
+ AVMUHWU: 0xe112 << 15, // vmuh.wu
+ AVMUHVU: 0xe113 << 15, // vmuh.du
+ AXVMULB: 0xe908 << 15, // xvmul.b
+ AXVMULH: 0xe909 << 15, // xvmul.h
+ AXVMULW: 0xe90a << 15, // xvmul.w
+ AXVMULV: 0xe90b << 15, // xvmul.d
+ AXVMUHB: 0xe90c << 15, // xvmuh.b
+ AXVMUHH: 0xe90d << 15, // xvmuh.h
+ AXVMUHW: 0xe90e << 15, // xvmuh.w
+ AXVMUHV: 0xe90f << 15, // xvmuh.d
+ AXVMUHBU: 0xe910 << 15, // xvmuh.bu
+ AXVMUHHU: 0xe911 << 15, // xvmuh.hu
+ AXVMUHWU: 0xe912 << 15, // xvmuh.wu
+ AXVMUHVU: 0xe913 << 15, // xvmuh.du
+ AVADDF: 0xe261 << 15, // vfadd.s
+ AVADDD: 0xe262 << 15, // vfadd.d
+ AVSUBF: 0xe265 << 15, // vfsub.s
+ AVSUBD: 0xe266 << 15, // vfsub.d
+ AVMULF: 0xe271 << 15, // vfmul.s
+ AVMULD: 0xe272 << 15, // vfmul.d
+ AVDIVF: 0xe275 << 15, // vfdiv.s
+ AVDIVD: 0xe276 << 15, // vfdiv.d
+ AXVADDF: 0xea61 << 15, // xvfadd.s
+ AXVADDD: 0xea62 << 15, // xvfadd.d
+ AXVSUBF: 0xea65 << 15, // xvfsub.s
+ AXVSUBD: 0xea66 << 15, // xvfsub.d
+ AXVMULF: 0xea71 << 15, // xvfmul.s
+ AXVMULD: 0xea72 << 15, // xvfmul.d
+ AXVDIVF: 0xea75 << 15, // xvfdiv.s
+ AXVDIVD: 0xea76 << 15, // xvfdiv.d
+ AVBITCLRB: 0xe218 << 15, // vbitclr.b
+ AVBITCLRH: 0xe219 << 15, // vbitclr.h
+ AVBITCLRW: 0xe21a << 15, // vbitclr.w
+ AVBITCLRV: 0xe21b << 15, // vbitclr.d
+ AVBITSETB: 0xe21c << 15, // vbitset.b
+ AVBITSETH: 0xe21d << 15, // vbitset.h
+ AVBITSETW: 0xe21e << 15, // vbitset.w
+ AVBITSETV: 0xe21f << 15, // vbitset.d
+ AVBITREVB: 0xe220 << 15, // vbitrev.b
+ AVBITREVH: 0xe221 << 15, // vbitrev.h
+ AVBITREVW: 0xe222 << 15, // vbitrev.w
+ AVBITREVV: 0xe223 << 15, // vbitrev.d
+ AXVBITCLRB: 0xea18 << 15, // xvbitclr.b
+ AXVBITCLRH: 0xea19 << 15, // xvbitclr.h
+ AXVBITCLRW: 0xea1a << 15, // xvbitclr.w
+ AXVBITCLRV: 0xea1b << 15, // xvbitclr.d
+ AXVBITSETB: 0xea1c << 15, // xvbitset.b
+ AXVBITSETH: 0xea1d << 15, // xvbitset.h
+ AXVBITSETW: 0xea1e << 15, // xvbitset.w
+ AXVBITSETV: 0xea1f << 15, // xvbitset.d
+ AXVBITREVB: 0xea20 << 15, // xvbitrev.b
+ AXVBITREVH: 0xea21 << 15, // xvbitrev.h
+ AXVBITREVW: 0xea22 << 15, // xvbitrev.w
+ AXVBITREVV: 0xea23 << 15, // xvbitrev.d
+ AVSHUFH: 0x0e2f5 << 15, // vshuf.h
+ AVSHUFW: 0x0e2f6 << 15, // vshuf.w
+ AVSHUFV: 0x0e2f7 << 15, // vshuf.d
+ AXVSHUFH: 0x0eaf5 << 15, // xvshuf.h
+ AXVSHUFW: 0x0eaf6 << 15, // xvshuf.w
+ AXVSHUFV: 0x0eaf7 << 15, // xvshuf.d
+}
+
+var oprr = map[obj.As]uint32{
+ ACLOW: 0x4 << 10, // clo.w
+ ACLZW: 0x5 << 10, // clz.w
+ ACTOW: 0x6 << 10, // cto.w
+ ACTZW: 0x7 << 10, // ctz.w
+ ACLOV: 0x8 << 10, // clo.d
+ ACLZV: 0x9 << 10, // clz.d
+ ACTOV: 0xa << 10, // cto.d
+ ACTZV: 0xb << 10, // ctz.d
+ AREVB2H: 0xc << 10, // revb.2h
+ AREVB4H: 0xd << 10, // revb.4h
+ AREVB2W: 0xe << 10, // revb.2w
+ AREVBV: 0xf << 10, // revb.d
+ AREVH2W: 0x10 << 10, // revh.2w
+ AREVHV: 0x11 << 10, // revh.d
+ ABITREV4B: 0x12 << 10, // bitrev.4b
+ ABITREV8B: 0x13 << 10, // bitrev.8b
+ ABITREVW: 0x14 << 10, // bitrev.w
+ ABITREVV: 0x15 << 10, // bitrev.d
+ AEXTWH: 0x16 << 10, // ext.w.h
+ AEXTWB: 0x17 << 10, // ext.w.h
+ ACPUCFG: 0x1b << 10, // cpucfg
+ ARDTIMELW: 0x18 << 10, // rdtimel.w
+ ARDTIMEHW: 0x19 << 10, // rdtimeh.w
+ ARDTIMED: 0x1a << 10, // rdtime.d
+ ATRUNCFV: 0x46a9 << 10, // ftintrz.l.s
+ ATRUNCDV: 0x46aa << 10, // ftintrz.l.d
+ ATRUNCFW: 0x46a1 << 10, // ftintrz.w.s
+ ATRUNCDW: 0x46a2 << 10, // ftintrz.w.d
+ AMOVWF: 0x4744 << 10, // ffint.s.w
+ AFFINTFW: 0x4744 << 10, // ffint.s.w
+ AMOVVF: 0x4746 << 10, // ffint.s.l
+ AFFINTFV: 0x4746 << 10, // ffint.s.l
+ AMOVWD: 0x4748 << 10, // ffint.d.w
+ AFFINTDW: 0x4748 << 10, // ffint.d.w
+ AMOVVD: 0x474a << 10, // ffint.d.l
+ AFFINTDV: 0x474a << 10, // ffint.d.l
+ AMOVFW: 0x46c1 << 10, // ftint.w.s
+ AFTINTWF: 0x46c1 << 10, // ftint.w.s
+ AMOVDW: 0x46c2 << 10, // ftint.w.d
+ AFTINTWD: 0x46c2 << 10, // ftint.w.d
+ AMOVFV: 0x46c9 << 10, // ftint.l.s
+ AFTINTVF: 0x46c9 << 10, // ftint.l.s
+ AMOVDV: 0x46ca << 10, // ftint.l.d
+ AFTINTVD: 0x46ca << 10, // ftint.l.d
+ AMOVDF: 0x4646 << 10, // fcvt.s.d
+ AMOVFD: 0x4649 << 10, // fcvt.d.s
+ AABSF: 0x4501 << 10, // fabs.s
+ AABSD: 0x4502 << 10, // fabs.d
+ AMOVF: 0x4525 << 10, // fmov.s
+ AMOVD: 0x4526 << 10, // fmov.d
+ ANEGF: 0x4505 << 10, // fneg.s
+ ANEGD: 0x4506 << 10, // fneg.d
+ ASQRTF: 0x4511 << 10, // fsqrt.s
+ ASQRTD: 0x4512 << 10, // fsqrt.d
+ AFLOGBF: 0x4509 << 10, // flogb.s
+ AFLOGBD: 0x450a << 10, // flogb.d
+ AFCLASSF: 0x450d << 10, // fclass.s
+ AFCLASSD: 0x450e << 10, // fclass.d
+ AFTINTRMWF: 0x4681 << 10, // ftintrm.w.s
+ AFTINTRMWD: 0x4682 << 10, // ftintrm.w.d
+ AFTINTRMVF: 0x4689 << 10, // ftintrm.l.s
+ AFTINTRMVD: 0x468a << 10, // ftintrm.l.d
+ AFTINTRPWF: 0x4691 << 10, // ftintrp.w.s
+ AFTINTRPWD: 0x4692 << 10, // ftintrp.w.d
+ AFTINTRPVF: 0x4699 << 10, // ftintrp.l.s
+ AFTINTRPVD: 0x469a << 10, // ftintrp.l.d
+ AFTINTRZWF: 0x46a1 << 10, // ftintrz.w.s
+ AFTINTRZWD: 0x46a2 << 10, // ftintrz.w.d
+ AFTINTRZVF: 0x46a9 << 10, // ftintrz.l.s
+ AFTINTRZVD: 0x46aa << 10, // ftintrz.l.d
+ AFTINTRNEWF: 0x46b1 << 10, // ftintrne.w.s
+ AFTINTRNEWD: 0x46b2 << 10, // ftintrne.w.d
+ AFTINTRNEVF: 0x46b9 << 10, // ftintrne.l.s
+ AFTINTRNEVD: 0x46ba << 10, // ftintrne.l.d
+ AVPCNTB: 0x1ca708 << 10, // vpcnt.b
+ AVPCNTH: 0x1ca709 << 10, // vpcnt.h
+ AVPCNTW: 0x1ca70a << 10, // vpcnt.w
+ AVPCNTV: 0x1ca70b << 10, // vpcnt.v
+ AXVPCNTB: 0x1da708 << 10, // xvpcnt.b
+ AXVPCNTH: 0x1da709 << 10, // xvpcnt.h
+ AXVPCNTW: 0x1da70a << 10, // xvpcnt.w
+ AXVPCNTV: 0x1da70b << 10, // xvpcnt.v
+ AVFSQRTF: 0x1ca739 << 10, // vfsqrt.s
+ AVFSQRTD: 0x1ca73a << 10, // vfsqrt.d
+ AVFRECIPF: 0x1ca73d << 10, // vfrecip.s
+ AVFRECIPD: 0x1ca73e << 10, // vfrecip.d
+ AVFRSQRTF: 0x1ca741 << 10, // vfrsqrt.s
+ AVFRSQRTD: 0x1ca742 << 10, // vfrsqrt.d
+ AXVFSQRTF: 0x1da739 << 10, // xvfsqrt.s
+ AXVFSQRTD: 0x1da73a << 10, // xvfsqrt.d
+ AXVFRECIPF: 0x1da73d << 10, // xvfrecip.s
+ AXVFRECIPD: 0x1da73e << 10, // xvfrecip.d
+ AXVFRSQRTF: 0x1da741 << 10, // xvfrsqrt.s
+ AXVFRSQRTD: 0x1da742 << 10, // xvfrsqrt.d
+ AVNEGB: 0x1ca70c << 10, // vneg.b
+ AVNEGH: 0x1ca70d << 10, // vneg.h
+ AVNEGW: 0x1ca70e << 10, // vneg.w
+ AVNEGV: 0x1ca70f << 10, // vneg.d
+ AXVNEGB: 0x1da70c << 10, // xvneg.b
+ AXVNEGH: 0x1da70d << 10, // xvneg.h
+ AXVNEGW: 0x1da70e << 10, // xvneg.w
+ AXVNEGV: 0x1da70f << 10, // xvneg.d
+ AVFRINTRNEF: 0x1ca75d << 10, // vfrintrne.s
+ AVFRINTRNED: 0x1ca75e << 10, // vfrintrne.d
+ AVFRINTRZF: 0x1ca759 << 10, // vfrintrz.s
+ AVFRINTRZD: 0x1ca75a << 10, // vfrintrz.d
+ AVFRINTRPF: 0x1ca755 << 10, // vfrintrp.s
+ AVFRINTRPD: 0x1ca756 << 10, // vfrintrp.d
+ AVFRINTRMF: 0x1ca751 << 10, // vfrintrm.s
+ AVFRINTRMD: 0x1ca752 << 10, // vfrintrm.d
+ AVFRINTF: 0x1ca74d << 10, // vfrint.s
+ AVFRINTD: 0x1ca74e << 10, // vfrint.d
+ AXVFRINTRNEF: 0x1da75d << 10, // xvfrintrne.s
+ AXVFRINTRNED: 0x1da75e << 10, // xvfrintrne.d
+ AXVFRINTRZF: 0x1da759 << 10, // xvfrintrz.s
+ AXVFRINTRZD: 0x1da75a << 10, // xvfrintrz.d
+ AXVFRINTRPF: 0x1da755 << 10, // xvfrintrp.s
+ AXVFRINTRPD: 0x1da756 << 10, // xvfrintrp.d
+ AXVFRINTRMF: 0x1da751 << 10, // xvfrintrm.s
+ AXVFRINTRMD: 0x1da752 << 10, // xvfrintrm.d
+ AXVFRINTF: 0x1da74d << 10, // xvfrint.s
+ AXVFRINTD: 0x1da74e << 10, // xvfrint.d
+ AVFCLASSF: 0x1ca735 << 10, // vfclass.s
+ AVFCLASSD: 0x1ca736 << 10, // vfclass.d
+ AXVFCLASSF: 0x1da735 << 10, // xvfclass.s
+ AXVFCLASSD: 0x1da736 << 10, // xvfclass.d
+ AVSETEQV: 0x1ca726<<10 | 0x0<<3, // vseteqz.v
+ AVSETNEV: 0x1ca727<<10 | 0x0<<3, // vsetnez.v
+ AVSETANYEQB: 0x1ca728<<10 | 0x0<<3, // vsetanyeqz.b
+ AVSETANYEQH: 0x1ca729<<10 | 0x0<<3, // vsetanyeqz.h
+ AVSETANYEQW: 0x1ca72a<<10 | 0x0<<3, // vsetanyeqz.w
+ AVSETANYEQV: 0x1ca72b<<10 | 0x0<<3, // vsetanyeqz.d
+ AVSETALLNEB: 0x1ca72c<<10 | 0x0<<3, // vsetallnez.b
+ AVSETALLNEH: 0x1ca72d<<10 | 0x0<<3, // vsetallnez.h
+ AVSETALLNEW: 0x1ca72e<<10 | 0x0<<3, // vsetallnez.w
+ AVSETALLNEV: 0x1ca72f<<10 | 0x0<<3, // vsetallnez.d
+ AXVSETEQV: 0x1da726<<10 | 0x0<<3, // xvseteqz.v
+ AXVSETNEV: 0x1da727<<10 | 0x0<<3, // xvsetnez.v
+ AXVSETANYEQB: 0x1da728<<10 | 0x0<<3, // xvsetanyeqz.b
+ AXVSETANYEQH: 0x1da729<<10 | 0x0<<3, // xvsetanyeqz.h
+ AXVSETANYEQW: 0x1da72a<<10 | 0x0<<3, // xvsetanyeqz.w
+ AXVSETANYEQV: 0x1da72b<<10 | 0x0<<3, // xvsetanyeqz.d
+ AXVSETALLNEB: 0x1da72c<<10 | 0x0<<3, // xvsetallnez.b
+ AXVSETALLNEH: 0x1da72d<<10 | 0x0<<3, // xvsetallnez.h
+ AXVSETALLNEW: 0x1da72e<<10 | 0x0<<3, // xvsetallnez.w
+ AXVSETALLNEV: 0x1da72f<<10 | 0x0<<3, // xvsetallnez.d
+}
+
+var opi = map[obj.As]uint32{
+ ASYSCALL: 0x56 << 15, // syscall
+ ABREAK: 0x54 << 15, // break
+ ADBAR: 0x70e4 << 15, // dbar
+}
+
+var opir = map[obj.As]uint32{
+ ALU12IW: 0x0a << 25, // lu12i.w
+ ALU32ID: 0x0b << 25, // lu32i.d
+ APCALAU12I: 0x0d << 25, // pcalau12i
+ APCADDU12I: 0x0e << 25, // pcaddu12i
+}
+
+var opirr = map[obj.As]uint32{
+ ASGT: 0x008 << 22, // slti
+ ASGTU: 0x009 << 22, // sltui
+ AADD: 0x00a << 22, // addi.w
+ AADDW: 0x00a << 22, // addi.w
+ AADDV: 0x00b << 22, // addi.d
+ AADDVU: 0x00b << 22, // addi.d
+ ALU52ID: 0x00c << 22, // lu52i.d
+ AAND: 0x00d << 22, // andi
+ AOR: 0x00e << 22, // ori
+ AXOR: 0x00f << 22, // xori
+ ASLL: 0x00081 << 15, // slli.w
+ ASRL: 0x00089 << 15, // srli.w
+ ASRA: 0x00091 << 15, // srai.w
+ AROTR: 0x00099 << 15, // rotri.w
+ AADDV16: 0x4 << 26, // addu16i.d
+ -ABEQ: 0x10 << 26, // beqz
+ -ABNE: 0x11 << 26, // bnez
+ AJIRL: 0x13 << 26, // jirl
+ AJMP: 0x14 << 26, // b
+ AJAL: 0x15 << 26, // bl
+ ABEQ: 0x16 << 26, // beq
+ ABNE: 0x17 << 26, // bne
+ ABLT: 0x18 << 26, // blt
+ ABLTZ: 0x18 << 26, // blt
+ ABGTZ: 0x18 << 26, // blt
+ ABGE: 0x19 << 26, // bge
+ ABGEZ: 0x19 << 26, // bge
+ ABLEZ: 0x19 << 26, // bge
+ ABLTU: 0x1a << 26, // bltu
+ ABGEU: 0x1b << 26, // bgeu
+ ABFPT: 0x12<<26 | 0x1<<8, // bcnez
+ ABFPF: 0x12<<26 | 0x0<<8, // bceqz
+ APRELDX: 0x07058 << 15, // preldx
+ -AMOVB: 0x0a0 << 22, // ld.b
+ -AMOVH: 0x0a1 << 22, // ld.h
+ -AMOVW: 0x0a2 << 22, // ld.w
+ -AMOVV: 0x0a3 << 22, // ld.d
+ AMOVB: 0x0a4 << 22, // st.b
+ AMOVBU: 0x0a4 << 22, // st.b
+ AMOVH: 0x0a5 << 22, // st.h
+ AMOVHU: 0x0a5 << 22, // st.h
+ AMOVW: 0x0a6 << 22, // st.w
+ AMOVWU: 0x0a6 << 22, // st.w
+ AMOVV: 0x0a7 << 22, // st.d
+ -AMOVBU: 0x0a8 << 22, // ld.bu
+ -AMOVHU: 0x0a9 << 22, // ld.hu
+ -AMOVWU: 0x0aa << 22, // ld.wu
+ -AMOVF: 0x0ac << 22, // fld.s
+ AMOVF: 0x0ad << 22, // fst.s
+ -AMOVD: 0x0ae << 22, // fld.d
+ AMOVD: 0x0af << 22, // fst.d
+ -ALL: 0x020 << 24, // ll.w
+ ASC: 0x021 << 24, // sc.w
+ -ALLV: 0x022 << 24, // ll.d
+ ASCV: 0x023 << 24, // sc.d
+ -AMOVWP: 0x24 << 24, // ldptr.w
+ AMOVWP: 0x25 << 24, // stptr.w
+ -AMOVVP: 0x26 << 24, // ldptr.d
+ AMOVVP: 0x27 << 24, // stptr.d
+ -AVMOVQ: 0x0b0 << 22, // vld
+ AVMOVQ: 0x0b1 << 22, // vst
+ -AXVMOVQ: 0x0b2 << 22, // xvld
+ AXVMOVQ: 0x0b3 << 22, // xvst
+ ASLLV: 0x0041 << 16, // slli.d
+ ASRLV: 0x0045 << 16, // srli.d
+ ASRAV: 0x0049 << 16, // srai.d
+ AROTRV: 0x004d << 16, // rotri.d
+ AVANDB: 0x1cf4 << 18, // vandi.b
+ AVORB: 0x1cf5 << 18, // vori.b
+ AVXORB: 0x1cf6 << 18, // xori.b
+ AVNORB: 0x1cf7 << 18, // xnori.b
+ AXVANDB: 0x1df4 << 18, // xvandi.b
+ AXVORB: 0x1df5 << 18, // xvori.b
+ AXVXORB: 0x1df6 << 18, // xvxori.b
+ AXVNORB: 0x1df7 << 18, // xvnor.b
+ AVSEQB: 0x0e500 << 15, // vseqi.b
+ AVSEQH: 0x0e501 << 15, // vseqi.h
+ AVSEQW: 0x0e502 << 15, // vseqi.w
+ AVSEQV: 0x0e503 << 15, // vseqi.d
+ AXVSEQB: 0x0ed00 << 15, // xvseqi.b
+ AXVSEQH: 0x0ed01 << 15, // xvseqi.h
+ AXVSEQW: 0x0ed02 << 15, // xvseqi.w
+ AXVSEQV: 0x0ed03 << 15, // xvseqi.d
+ AVSLTB: 0x0e50c << 15, // vslti.b
+ AVSLTH: 0x0e50d << 15, // vslti.h
+ AVSLTW: 0x0e50e << 15, // vslti.w
+ AVSLTV: 0x0e50f << 15, // vslti.d
+ AVSLTBU: 0x0e510 << 15, // vslti.bu
+ AVSLTHU: 0x0e511 << 15, // vslti.hu
+ AVSLTWU: 0x0e512 << 15, // vslti.wu
+ AVSLTVU: 0x0e513 << 15, // vslti.du
+ AXVSLTB: 0x0ed0c << 15, // xvslti.b
+ AXVSLTH: 0x0ed0d << 15, // xvslti.h
+ AXVSLTW: 0x0ed0e << 15, // xvslti.w
+ AXVSLTV: 0x0ed0f << 15, // xvslti.d
+ AXVSLTBU: 0x0ed10 << 15, // xvslti.bu
+ AXVSLTHU: 0x0ed11 << 15, // xvslti.hu
+ AXVSLTWU: 0x0ed12 << 15, // xvslti.wu
+ AXVSLTVU: 0x0ed13 << 15, // xvslti.du
+ AVROTRB: 0x1ca8<<18 | 0x1<<13, // vrotri.b
+ AVROTRH: 0x1ca8<<18 | 0x1<<14, // vrotri.h
+ AVROTRW: 0x1ca8<<18 | 0x1<<15, // vrotri.w
+ AVROTRV: 0x1ca8<<18 | 0x1<<16, // vrotri.d
+ AXVROTRB: 0x1da8<<18 | 0x1<<13, // xvrotri.b
+ AXVROTRH: 0x1da8<<18 | 0x1<<14, // xvrotri.h
+ AXVROTRW: 0x1da8<<18 | 0x1<<15, // xvrotri.w
+ AXVROTRV: 0x1da8<<18 | 0x1<<16, // xvrotri.d
+ AVSLLB: 0x1ccb<<18 | 0x1<<13, // vslli.b
+ AVSLLH: 0x1ccb<<18 | 0x1<<14, // vslli.h
+ AVSLLW: 0x1ccb<<18 | 0x1<<15, // vslli.w
+ AVSLLV: 0x1ccb<<18 | 0x1<<16, // vslli.d
+ AVSRLB: 0x1ccc<<18 | 0x1<<13, // vsrli.b
+ AVSRLH: 0x1ccc<<18 | 0x1<<14, // vsrli.h
+ AVSRLW: 0x1ccc<<18 | 0x1<<15, // vsrli.w
+ AVSRLV: 0x1ccc<<18 | 0x1<<16, // vsrli.d
+ AVSRAB: 0x1ccd<<18 | 0x1<<13, // vsrai.b
+ AVSRAH: 0x1ccd<<18 | 0x1<<14, // vsrai.h
+ AVSRAW: 0x1ccd<<18 | 0x1<<15, // vsrai.w
+ AVSRAV: 0x1ccd<<18 | 0x1<<16, // vsrai.d
+ AXVSLLB: 0x1dcb<<18 | 0x1<<13, // xvslli.b
+ AXVSLLH: 0x1dcb<<18 | 0x1<<14, // xvslli.h
+ AXVSLLW: 0x1dcb<<18 | 0x1<<15, // xvslli.w
+ AXVSLLV: 0x1dcb<<18 | 0x1<<16, // xvslli.d
+ AXVSRLB: 0x1dcc<<18 | 0x1<<13, // xvsrli.b
+ AXVSRLH: 0x1dcc<<18 | 0x1<<14, // xvsrli.h
+ AXVSRLW: 0x1dcc<<18 | 0x1<<15, // xvsrli.w
+ AXVSRLV: 0x1dcc<<18 | 0x1<<16, // xvsrli.d
+ AXVSRAB: 0x1dcd<<18 | 0x1<<13, // xvsrai.b
+ AXVSRAH: 0x1dcd<<18 | 0x1<<14, // xvsrai.h
+ AXVSRAW: 0x1dcd<<18 | 0x1<<15, // xvsrai.w
+ AXVSRAV: 0x1dcd<<18 | 0x1<<16, // xvsrai.d
+ AVADDBU: 0xe514 << 15, // vaddi.bu
+ AVADDHU: 0xe515 << 15, // vaddi.hu
+ AVADDWU: 0xe516 << 15, // vaddi.wu
+ AVADDVU: 0xe517 << 15, // vaddi.du
+ AVSUBBU: 0xe518 << 15, // vsubi.bu
+ AVSUBHU: 0xe519 << 15, // vsubi.hu
+ AVSUBWU: 0xe51a << 15, // vsubi.wu
+ AVSUBVU: 0xe51b << 15, // vsubi.du
+ AXVADDBU: 0xed14 << 15, // xvaddi.bu
+ AXVADDHU: 0xed15 << 15, // xvaddi.hu
+ AXVADDWU: 0xed16 << 15, // xvaddi.wu
+ AXVADDVU: 0xed17 << 15, // xvaddi.du
+ AXVSUBBU: 0xed18 << 15, // xvsubi.bu
+ AXVSUBHU: 0xed19 << 15, // xvsubi.hu
+ AXVSUBWU: 0xed1a << 15, // xvsubi.wu
+ AXVSUBVU: 0xed1b << 15, // xvsubi.du
+ AVSHUF4IB: 0x1ce4 << 18, // vshuf4i.b
+ AVSHUF4IH: 0x1ce5 << 18, // vshuf4i.h
+ AVSHUF4IW: 0x1ce6 << 18, // vshuf4i.w
+ AVSHUF4IV: 0x1ce7 << 18, // vshuf4i.d
+ AXVSHUF4IB: 0x1de4 << 18, // xvshuf4i.b
+ AXVSHUF4IH: 0x1de5 << 18, // xvshuf4i.h
+ AXVSHUF4IW: 0x1de6 << 18, // xvshuf4i.w
+ AXVSHUF4IV: 0x1de7 << 18, // xvshuf4i.d
+ AVPERMIW: 0x1cf9 << 18, // vpermi.w
+ AXVPERMIW: 0x1df9 << 18, // xvpermi.w
+ AXVPERMIV: 0x1dfa << 18, // xvpermi.d
+ AXVPERMIQ: 0x1dfb << 18, // xvpermi.q
+ AVEXTRINSB: 0x1ce3 << 18, // vextrins.b
+ AVEXTRINSH: 0x1ce2 << 18, // vextrins.h
+ AVEXTRINSW: 0x1ce1 << 18, // vextrins.w
+ AVEXTRINSV: 0x1ce0 << 18, // vextrins.d
+ AXVEXTRINSB: 0x1de3 << 18, // xvextrins.b
+ AXVEXTRINSH: 0x1de2 << 18, // xvextrins.h
+ AXVEXTRINSW: 0x1de1 << 18, // xvextrins.w
+ AXVEXTRINSV: 0x1de0 << 18, // xvextrins.d
+ AVBITCLRB: 0x1cc4<<18 | 0x1<<13, // vbitclri.b
+ AVBITCLRH: 0x1cc4<<18 | 0x1<<14, // vbitclri.h
+ AVBITCLRW: 0x1cc4<<18 | 0x1<<15, // vbitclri.w
+ AVBITCLRV: 0x1cc4<<18 | 0x1<<16, // vbitclri.d
+ AVBITSETB: 0x1cc5<<18 | 0x1<<13, // vbitseti.b
+ AVBITSETH: 0x1cc5<<18 | 0x1<<14, // vbitseti.h
+ AVBITSETW: 0x1cc5<<18 | 0x1<<15, // vbitseti.w
+ AVBITSETV: 0x1cc5<<18 | 0x1<<16, // vbitseti.d
+ AVBITREVB: 0x1cc6<<18 | 0x1<<13, // vbitrevi.b
+ AVBITREVH: 0x1cc6<<18 | 0x1<<14, // vbitrevi.h
+ AVBITREVW: 0x1cc6<<18 | 0x1<<15, // vbitrevi.w
+ AVBITREVV: 0x1cc6<<18 | 0x1<<16, // vbitrevi.d
+ AXVBITCLRB: 0x1dc4<<18 | 0x1<<13, // xvbitclri.b
+ AXVBITCLRH: 0x1dc4<<18 | 0x1<<14, // xvbitclri.h
+ AXVBITCLRW: 0x1dc4<<18 | 0x1<<15, // xvbitclri.w
+ AXVBITCLRV: 0x1dc4<<18 | 0x1<<16, // xvbitclri.d
+ AXVBITSETB: 0x1dc5<<18 | 0x1<<13, // xvbitseti.b
+ AXVBITSETH: 0x1dc5<<18 | 0x1<<14, // xvbitseti.h
+ AXVBITSETW: 0x1dc5<<18 | 0x1<<15, // xvbitseti.w
+ AXVBITSETV: 0x1dc5<<18 | 0x1<<16, // xvbitseti.d
+ AXVBITREVB: 0x1dc6<<18 | 0x1<<13, // xvbitrevi.b
+ AXVBITREVH: 0x1dc6<<18 | 0x1<<14, // xvbitrevi.h
+ AXVBITREVW: 0x1dc6<<18 | 0x1<<15, // xvbitrevi.w
+ AXVBITREVV: 0x1dc6<<18 | 0x1<<16, // xvbitrevi.d
+}
+
+var opirrr = map[obj.As]uint32{
+ AALSLW: 0x2 << 17, // alsl.w
+ AALSLWU: 0x3 << 17, // alsl.wu
+ AALSLV: 0x16 << 17, // alsl.d
+}
+
+var opirir = map[obj.As]uint32{
+ ABSTRINSW: 0x3<<21 | 0x0<<15, // bstrins.w
+ ABSTRINSV: 0x2 << 22, // bstrins.d
+ ABSTRPICKW: 0x3<<21 | 0x1<<15, // bstrpick.w
+ ABSTRPICKV: 0x3 << 22, // bstrpick.d
+}
+
+var opiir = map[obj.As]uint32{
+ APRELD: 0x0ab << 22, // preld
+}