github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/obj/riscv/inst.go (about)

     1  // Code generated by parse.py -go rv64_a rv64_d rv64_f rv64_i rv64_m rv64_q rv_a rv_d rv_f rv_i rv_m rv_q rv_s rv_system rv_zicsr; DO NOT EDIT.
     2  package riscv
     3  
     4  import "github.com/go-asm/go/cmd/obj"
     5  
     6  type inst struct {
     7  	opcode uint32
     8  	funct3 uint32
     9  	rs2    uint32
    10  	csr    int64
    11  	funct7 uint32
    12  }
    13  
    14  func encode(a obj.As) *inst {
    15  	switch a {
    16  	case AADD:
    17  		return &inst{0x33, 0x0, 0x0, 0, 0x0}
    18  	case AADDI:
    19  		return &inst{0x13, 0x0, 0x0, 0, 0x0}
    20  	case AADDIW:
    21  		return &inst{0x1b, 0x0, 0x0, 0, 0x0}
    22  	case AADDW:
    23  		return &inst{0x3b, 0x0, 0x0, 0, 0x0}
    24  	case AAMOADDD:
    25  		return &inst{0x2f, 0x3, 0x0, 0, 0x0}
    26  	case AAMOADDW:
    27  		return &inst{0x2f, 0x2, 0x0, 0, 0x0}
    28  	case AAMOANDD:
    29  		return &inst{0x2f, 0x3, 0x0, 1536, 0x30}
    30  	case AAMOANDW:
    31  		return &inst{0x2f, 0x2, 0x0, 1536, 0x30}
    32  	case AAMOMAXD:
    33  		return &inst{0x2f, 0x3, 0x0, -1536, 0x50}
    34  	case AAMOMAXW:
    35  		return &inst{0x2f, 0x2, 0x0, -1536, 0x50}
    36  	case AAMOMAXUD:
    37  		return &inst{0x2f, 0x3, 0x0, -512, 0x70}
    38  	case AAMOMAXUW:
    39  		return &inst{0x2f, 0x2, 0x0, -512, 0x70}
    40  	case AAMOMIND:
    41  		return &inst{0x2f, 0x3, 0x0, -2048, 0x40}
    42  	case AAMOMINW:
    43  		return &inst{0x2f, 0x2, 0x0, -2048, 0x40}
    44  	case AAMOMINUD:
    45  		return &inst{0x2f, 0x3, 0x0, -1024, 0x60}
    46  	case AAMOMINUW:
    47  		return &inst{0x2f, 0x2, 0x0, -1024, 0x60}
    48  	case AAMOORD:
    49  		return &inst{0x2f, 0x3, 0x0, 1024, 0x20}
    50  	case AAMOORW:
    51  		return &inst{0x2f, 0x2, 0x0, 1024, 0x20}
    52  	case AAMOSWAPD:
    53  		return &inst{0x2f, 0x3, 0x0, 128, 0x4}
    54  	case AAMOSWAPW:
    55  		return &inst{0x2f, 0x2, 0x0, 128, 0x4}
    56  	case AAMOXORD:
    57  		return &inst{0x2f, 0x3, 0x0, 512, 0x10}
    58  	case AAMOXORW:
    59  		return &inst{0x2f, 0x2, 0x0, 512, 0x10}
    60  	case AAND:
    61  		return &inst{0x33, 0x7, 0x0, 0, 0x0}
    62  	case AANDI:
    63  		return &inst{0x13, 0x7, 0x0, 0, 0x0}
    64  	case AAUIPC:
    65  		return &inst{0x17, 0x0, 0x0, 0, 0x0}
    66  	case ABEQ:
    67  		return &inst{0x63, 0x0, 0x0, 0, 0x0}
    68  	case ABGE:
    69  		return &inst{0x63, 0x5, 0x0, 0, 0x0}
    70  	case ABGEU:
    71  		return &inst{0x63, 0x7, 0x0, 0, 0x0}
    72  	case ABLT:
    73  		return &inst{0x63, 0x4, 0x0, 0, 0x0}
    74  	case ABLTU:
    75  		return &inst{0x63, 0x6, 0x0, 0, 0x0}
    76  	case ABNE:
    77  		return &inst{0x63, 0x1, 0x0, 0, 0x0}
    78  	case ACSRRC:
    79  		return &inst{0x73, 0x3, 0x0, 0, 0x0}
    80  	case ACSRRCI:
    81  		return &inst{0x73, 0x7, 0x0, 0, 0x0}
    82  	case ACSRRS:
    83  		return &inst{0x73, 0x2, 0x0, 0, 0x0}
    84  	case ACSRRSI:
    85  		return &inst{0x73, 0x6, 0x0, 0, 0x0}
    86  	case ACSRRW:
    87  		return &inst{0x73, 0x1, 0x0, 0, 0x0}
    88  	case ACSRRWI:
    89  		return &inst{0x73, 0x5, 0x0, 0, 0x0}
    90  	case ADIV:
    91  		return &inst{0x33, 0x4, 0x0, 32, 0x1}
    92  	case ADIVU:
    93  		return &inst{0x33, 0x5, 0x0, 32, 0x1}
    94  	case ADIVUW:
    95  		return &inst{0x3b, 0x5, 0x0, 32, 0x1}
    96  	case ADIVW:
    97  		return &inst{0x3b, 0x4, 0x0, 32, 0x1}
    98  	case ADRET:
    99  		return &inst{0x73, 0x0, 0x12, 1970, 0x3d}
   100  	case AEBREAK:
   101  		return &inst{0x73, 0x0, 0x1, 1, 0x0}
   102  	case AECALL:
   103  		return &inst{0x73, 0x0, 0x0, 0, 0x0}
   104  	case AFADDD:
   105  		return &inst{0x53, 0x0, 0x0, 32, 0x1}
   106  	case AFADDQ:
   107  		return &inst{0x53, 0x0, 0x0, 96, 0x3}
   108  	case AFADDS:
   109  		return &inst{0x53, 0x0, 0x0, 0, 0x0}
   110  	case AFCLASSD:
   111  		return &inst{0x53, 0x1, 0x0, -480, 0x71}
   112  	case AFCLASSQ:
   113  		return &inst{0x53, 0x1, 0x0, -416, 0x73}
   114  	case AFCLASSS:
   115  		return &inst{0x53, 0x1, 0x0, -512, 0x70}
   116  	case AFCVTDL:
   117  		return &inst{0x53, 0x0, 0x2, -734, 0x69}
   118  	case AFCVTDLU:
   119  		return &inst{0x53, 0x0, 0x3, -733, 0x69}
   120  	case AFCVTDQ:
   121  		return &inst{0x53, 0x0, 0x3, 1059, 0x21}
   122  	case AFCVTDS:
   123  		return &inst{0x53, 0x0, 0x0, 1056, 0x21}
   124  	case AFCVTDW:
   125  		return &inst{0x53, 0x0, 0x0, -736, 0x69}
   126  	case AFCVTDWU:
   127  		return &inst{0x53, 0x0, 0x1, -735, 0x69}
   128  	case AFCVTLD:
   129  		return &inst{0x53, 0x0, 0x2, -990, 0x61}
   130  	case AFCVTLQ:
   131  		return &inst{0x53, 0x0, 0x2, -926, 0x63}
   132  	case AFCVTLS:
   133  		return &inst{0x53, 0x0, 0x2, -1022, 0x60}
   134  	case AFCVTLUD:
   135  		return &inst{0x53, 0x0, 0x3, -989, 0x61}
   136  	case AFCVTLUQ:
   137  		return &inst{0x53, 0x0, 0x3, -925, 0x63}
   138  	case AFCVTLUS:
   139  		return &inst{0x53, 0x0, 0x3, -1021, 0x60}
   140  	case AFCVTQD:
   141  		return &inst{0x53, 0x0, 0x1, 1121, 0x23}
   142  	case AFCVTQL:
   143  		return &inst{0x53, 0x0, 0x2, -670, 0x6b}
   144  	case AFCVTQLU:
   145  		return &inst{0x53, 0x0, 0x3, -669, 0x6b}
   146  	case AFCVTQS:
   147  		return &inst{0x53, 0x0, 0x0, 1120, 0x23}
   148  	case AFCVTQW:
   149  		return &inst{0x53, 0x0, 0x0, -672, 0x6b}
   150  	case AFCVTQWU:
   151  		return &inst{0x53, 0x0, 0x1, -671, 0x6b}
   152  	case AFCVTSD:
   153  		return &inst{0x53, 0x0, 0x1, 1025, 0x20}
   154  	case AFCVTSL:
   155  		return &inst{0x53, 0x0, 0x2, -766, 0x68}
   156  	case AFCVTSLU:
   157  		return &inst{0x53, 0x0, 0x3, -765, 0x68}
   158  	case AFCVTSQ:
   159  		return &inst{0x53, 0x0, 0x3, 1027, 0x20}
   160  	case AFCVTSW:
   161  		return &inst{0x53, 0x0, 0x0, -768, 0x68}
   162  	case AFCVTSWU:
   163  		return &inst{0x53, 0x0, 0x1, -767, 0x68}
   164  	case AFCVTWD:
   165  		return &inst{0x53, 0x0, 0x0, -992, 0x61}
   166  	case AFCVTWQ:
   167  		return &inst{0x53, 0x0, 0x0, -928, 0x63}
   168  	case AFCVTWS:
   169  		return &inst{0x53, 0x0, 0x0, -1024, 0x60}
   170  	case AFCVTWUD:
   171  		return &inst{0x53, 0x0, 0x1, -991, 0x61}
   172  	case AFCVTWUQ:
   173  		return &inst{0x53, 0x0, 0x1, -927, 0x63}
   174  	case AFCVTWUS:
   175  		return &inst{0x53, 0x0, 0x1, -1023, 0x60}
   176  	case AFDIVD:
   177  		return &inst{0x53, 0x0, 0x0, 416, 0xd}
   178  	case AFDIVQ:
   179  		return &inst{0x53, 0x0, 0x0, 480, 0xf}
   180  	case AFDIVS:
   181  		return &inst{0x53, 0x0, 0x0, 384, 0xc}
   182  	case AFENCE:
   183  		return &inst{0xf, 0x0, 0x0, 0, 0x0}
   184  	case AFENCETSO:
   185  		return &inst{0xf, 0x0, 0x13, -1997, 0x41}
   186  	case AFEQD:
   187  		return &inst{0x53, 0x2, 0x0, -1504, 0x51}
   188  	case AFEQQ:
   189  		return &inst{0x53, 0x2, 0x0, -1440, 0x53}
   190  	case AFEQS:
   191  		return &inst{0x53, 0x2, 0x0, -1536, 0x50}
   192  	case AFLD:
   193  		return &inst{0x7, 0x3, 0x0, 0, 0x0}
   194  	case AFLED:
   195  		return &inst{0x53, 0x0, 0x0, -1504, 0x51}
   196  	case AFLEQ:
   197  		return &inst{0x53, 0x0, 0x0, -1440, 0x53}
   198  	case AFLES:
   199  		return &inst{0x53, 0x0, 0x0, -1536, 0x50}
   200  	case AFLQ:
   201  		return &inst{0x7, 0x4, 0x0, 0, 0x0}
   202  	case AFLTD:
   203  		return &inst{0x53, 0x1, 0x0, -1504, 0x51}
   204  	case AFLTQ:
   205  		return &inst{0x53, 0x1, 0x0, -1440, 0x53}
   206  	case AFLTS:
   207  		return &inst{0x53, 0x1, 0x0, -1536, 0x50}
   208  	case AFLW:
   209  		return &inst{0x7, 0x2, 0x0, 0, 0x0}
   210  	case AFMADDD:
   211  		return &inst{0x43, 0x0, 0x0, 32, 0x1}
   212  	case AFMADDQ:
   213  		return &inst{0x43, 0x0, 0x0, 96, 0x3}
   214  	case AFMADDS:
   215  		return &inst{0x43, 0x0, 0x0, 0, 0x0}
   216  	case AFMAXD:
   217  		return &inst{0x53, 0x1, 0x0, 672, 0x15}
   218  	case AFMAXQ:
   219  		return &inst{0x53, 0x1, 0x0, 736, 0x17}
   220  	case AFMAXS:
   221  		return &inst{0x53, 0x1, 0x0, 640, 0x14}
   222  	case AFMIND:
   223  		return &inst{0x53, 0x0, 0x0, 672, 0x15}
   224  	case AFMINQ:
   225  		return &inst{0x53, 0x0, 0x0, 736, 0x17}
   226  	case AFMINS:
   227  		return &inst{0x53, 0x0, 0x0, 640, 0x14}
   228  	case AFMSUBD:
   229  		return &inst{0x47, 0x0, 0x0, 32, 0x1}
   230  	case AFMSUBQ:
   231  		return &inst{0x47, 0x0, 0x0, 96, 0x3}
   232  	case AFMSUBS:
   233  		return &inst{0x47, 0x0, 0x0, 0, 0x0}
   234  	case AFMULD:
   235  		return &inst{0x53, 0x0, 0x0, 288, 0x9}
   236  	case AFMULQ:
   237  		return &inst{0x53, 0x0, 0x0, 352, 0xb}
   238  	case AFMULS:
   239  		return &inst{0x53, 0x0, 0x0, 256, 0x8}
   240  	case AFMVDX:
   241  		return &inst{0x53, 0x0, 0x0, -224, 0x79}
   242  	case AFMVSX:
   243  		return &inst{0x53, 0x0, 0x0, -256, 0x78}
   244  	case AFMVWX:
   245  		return &inst{0x53, 0x0, 0x0, -256, 0x78}
   246  	case AFMVXD:
   247  		return &inst{0x53, 0x0, 0x0, -480, 0x71}
   248  	case AFMVXS:
   249  		return &inst{0x53, 0x0, 0x0, -512, 0x70}
   250  	case AFMVXW:
   251  		return &inst{0x53, 0x0, 0x0, -512, 0x70}
   252  	case AFNMADDD:
   253  		return &inst{0x4f, 0x0, 0x0, 32, 0x1}
   254  	case AFNMADDQ:
   255  		return &inst{0x4f, 0x0, 0x0, 96, 0x3}
   256  	case AFNMADDS:
   257  		return &inst{0x4f, 0x0, 0x0, 0, 0x0}
   258  	case AFNMSUBD:
   259  		return &inst{0x4b, 0x0, 0x0, 32, 0x1}
   260  	case AFNMSUBQ:
   261  		return &inst{0x4b, 0x0, 0x0, 96, 0x3}
   262  	case AFNMSUBS:
   263  		return &inst{0x4b, 0x0, 0x0, 0, 0x0}
   264  	case AFRCSR:
   265  		return &inst{0x73, 0x2, 0x3, 3, 0x0}
   266  	case AFRFLAGS:
   267  		return &inst{0x73, 0x2, 0x1, 1, 0x0}
   268  	case AFRRM:
   269  		return &inst{0x73, 0x2, 0x2, 2, 0x0}
   270  	case AFSCSR:
   271  		return &inst{0x73, 0x1, 0x3, 3, 0x0}
   272  	case AFSD:
   273  		return &inst{0x27, 0x3, 0x0, 0, 0x0}
   274  	case AFSFLAGS:
   275  		return &inst{0x73, 0x1, 0x1, 1, 0x0}
   276  	case AFSFLAGSI:
   277  		return &inst{0x73, 0x5, 0x1, 1, 0x0}
   278  	case AFSGNJD:
   279  		return &inst{0x53, 0x0, 0x0, 544, 0x11}
   280  	case AFSGNJQ:
   281  		return &inst{0x53, 0x0, 0x0, 608, 0x13}
   282  	case AFSGNJS:
   283  		return &inst{0x53, 0x0, 0x0, 512, 0x10}
   284  	case AFSGNJND:
   285  		return &inst{0x53, 0x1, 0x0, 544, 0x11}
   286  	case AFSGNJNQ:
   287  		return &inst{0x53, 0x1, 0x0, 608, 0x13}
   288  	case AFSGNJNS:
   289  		return &inst{0x53, 0x1, 0x0, 512, 0x10}
   290  	case AFSGNJXD:
   291  		return &inst{0x53, 0x2, 0x0, 544, 0x11}
   292  	case AFSGNJXQ:
   293  		return &inst{0x53, 0x2, 0x0, 608, 0x13}
   294  	case AFSGNJXS:
   295  		return &inst{0x53, 0x2, 0x0, 512, 0x10}
   296  	case AFSQ:
   297  		return &inst{0x27, 0x4, 0x0, 0, 0x0}
   298  	case AFSQRTD:
   299  		return &inst{0x53, 0x0, 0x0, 1440, 0x2d}
   300  	case AFSQRTQ:
   301  		return &inst{0x53, 0x0, 0x0, 1504, 0x2f}
   302  	case AFSQRTS:
   303  		return &inst{0x53, 0x0, 0x0, 1408, 0x2c}
   304  	case AFSRM:
   305  		return &inst{0x73, 0x1, 0x2, 2, 0x0}
   306  	case AFSRMI:
   307  		return &inst{0x73, 0x5, 0x2, 2, 0x0}
   308  	case AFSUBD:
   309  		return &inst{0x53, 0x0, 0x0, 160, 0x5}
   310  	case AFSUBQ:
   311  		return &inst{0x53, 0x0, 0x0, 224, 0x7}
   312  	case AFSUBS:
   313  		return &inst{0x53, 0x0, 0x0, 128, 0x4}
   314  	case AFSW:
   315  		return &inst{0x27, 0x2, 0x0, 0, 0x0}
   316  	case AJAL:
   317  		return &inst{0x6f, 0x0, 0x0, 0, 0x0}
   318  	case AJALR:
   319  		return &inst{0x67, 0x0, 0x0, 0, 0x0}
   320  	case ALB:
   321  		return &inst{0x3, 0x0, 0x0, 0, 0x0}
   322  	case ALBU:
   323  		return &inst{0x3, 0x4, 0x0, 0, 0x0}
   324  	case ALD:
   325  		return &inst{0x3, 0x3, 0x0, 0, 0x0}
   326  	case ALH:
   327  		return &inst{0x3, 0x1, 0x0, 0, 0x0}
   328  	case ALHU:
   329  		return &inst{0x3, 0x5, 0x0, 0, 0x0}
   330  	case ALRD:
   331  		return &inst{0x2f, 0x3, 0x0, 256, 0x8}
   332  	case ALRW:
   333  		return &inst{0x2f, 0x2, 0x0, 256, 0x8}
   334  	case ALUI:
   335  		return &inst{0x37, 0x0, 0x0, 0, 0x0}
   336  	case ALW:
   337  		return &inst{0x3, 0x2, 0x0, 0, 0x0}
   338  	case ALWU:
   339  		return &inst{0x3, 0x6, 0x0, 0, 0x0}
   340  	case AMRET:
   341  		return &inst{0x73, 0x0, 0x2, 770, 0x18}
   342  	case AMUL:
   343  		return &inst{0x33, 0x0, 0x0, 32, 0x1}
   344  	case AMULH:
   345  		return &inst{0x33, 0x1, 0x0, 32, 0x1}
   346  	case AMULHSU:
   347  		return &inst{0x33, 0x2, 0x0, 32, 0x1}
   348  	case AMULHU:
   349  		return &inst{0x33, 0x3, 0x0, 32, 0x1}
   350  	case AMULW:
   351  		return &inst{0x3b, 0x0, 0x0, 32, 0x1}
   352  	case AOR:
   353  		return &inst{0x33, 0x6, 0x0, 0, 0x0}
   354  	case AORI:
   355  		return &inst{0x13, 0x6, 0x0, 0, 0x0}
   356  	case APAUSE:
   357  		return &inst{0xf, 0x0, 0x10, 16, 0x0}
   358  	case ARDCYCLE:
   359  		return &inst{0x73, 0x2, 0x0, -1024, 0x60}
   360  	case ARDCYCLEH:
   361  		return &inst{0x73, 0x2, 0x0, -896, 0x64}
   362  	case ARDINSTRET:
   363  		return &inst{0x73, 0x2, 0x2, -1022, 0x60}
   364  	case ARDINSTRETH:
   365  		return &inst{0x73, 0x2, 0x2, -894, 0x64}
   366  	case ARDTIME:
   367  		return &inst{0x73, 0x2, 0x1, -1023, 0x60}
   368  	case ARDTIMEH:
   369  		return &inst{0x73, 0x2, 0x1, -895, 0x64}
   370  	case AREM:
   371  		return &inst{0x33, 0x6, 0x0, 32, 0x1}
   372  	case AREMU:
   373  		return &inst{0x33, 0x7, 0x0, 32, 0x1}
   374  	case AREMUW:
   375  		return &inst{0x3b, 0x7, 0x0, 32, 0x1}
   376  	case AREMW:
   377  		return &inst{0x3b, 0x6, 0x0, 32, 0x1}
   378  	case ASB:
   379  		return &inst{0x23, 0x0, 0x0, 0, 0x0}
   380  	case ASBREAK:
   381  		return &inst{0x73, 0x0, 0x1, 1, 0x0}
   382  	case ASCD:
   383  		return &inst{0x2f, 0x3, 0x0, 384, 0xc}
   384  	case ASCW:
   385  		return &inst{0x2f, 0x2, 0x0, 384, 0xc}
   386  	case ASCALL:
   387  		return &inst{0x73, 0x0, 0x0, 0, 0x0}
   388  	case ASD:
   389  		return &inst{0x23, 0x3, 0x0, 0, 0x0}
   390  	case ASFENCEVMA:
   391  		return &inst{0x73, 0x0, 0x0, 288, 0x9}
   392  	case ASH:
   393  		return &inst{0x23, 0x1, 0x0, 0, 0x0}
   394  	case ASLL:
   395  		return &inst{0x33, 0x1, 0x0, 0, 0x0}
   396  	case ASLLI:
   397  		return &inst{0x13, 0x1, 0x0, 0, 0x0}
   398  	case ASLLIW:
   399  		return &inst{0x1b, 0x1, 0x0, 0, 0x0}
   400  	case ASLLW:
   401  		return &inst{0x3b, 0x1, 0x0, 0, 0x0}
   402  	case ASLT:
   403  		return &inst{0x33, 0x2, 0x0, 0, 0x0}
   404  	case ASLTI:
   405  		return &inst{0x13, 0x2, 0x0, 0, 0x0}
   406  	case ASLTIU:
   407  		return &inst{0x13, 0x3, 0x0, 0, 0x0}
   408  	case ASLTU:
   409  		return &inst{0x33, 0x3, 0x0, 0, 0x0}
   410  	case ASRA:
   411  		return &inst{0x33, 0x5, 0x0, 1024, 0x20}
   412  	case ASRAI:
   413  		return &inst{0x13, 0x5, 0x0, 1024, 0x20}
   414  	case ASRAIW:
   415  		return &inst{0x1b, 0x5, 0x0, 1024, 0x20}
   416  	case ASRAW:
   417  		return &inst{0x3b, 0x5, 0x0, 1024, 0x20}
   418  	case ASRET:
   419  		return &inst{0x73, 0x0, 0x2, 258, 0x8}
   420  	case ASRL:
   421  		return &inst{0x33, 0x5, 0x0, 0, 0x0}
   422  	case ASRLI:
   423  		return &inst{0x13, 0x5, 0x0, 0, 0x0}
   424  	case ASRLIW:
   425  		return &inst{0x1b, 0x5, 0x0, 0, 0x0}
   426  	case ASRLW:
   427  		return &inst{0x3b, 0x5, 0x0, 0, 0x0}
   428  	case ASUB:
   429  		return &inst{0x33, 0x0, 0x0, 1024, 0x20}
   430  	case ASUBW:
   431  		return &inst{0x3b, 0x0, 0x0, 1024, 0x20}
   432  	case ASW:
   433  		return &inst{0x23, 0x2, 0x0, 0, 0x0}
   434  	case AWFI:
   435  		return &inst{0x73, 0x0, 0x5, 261, 0x8}
   436  	case AXOR:
   437  		return &inst{0x33, 0x4, 0x0, 0, 0x0}
   438  	case AXORI:
   439  		return &inst{0x13, 0x4, 0x0, 0, 0x0}
   440  	}
   441  	return nil
   442  }