| 1 | // Licensed to the .NET Foundation under one or more agreements. |
| 2 | // The .NET Foundation licenses this file to you under the MIT license. |
| 3 | // See the LICENSE file in the project root for more information. |
| 4 | |
| 5 | /***************************************************************************** |
| 6 | * Arm64 instructions for JIT compiler |
| 7 | * |
| 8 | * id -- the enum name for the instruction |
| 9 | * nm -- textual name (for assembly dipslay) |
| 10 | * fp -- floating point instruction |
| 11 | * ld/st/cmp -- load/store/compare instruction |
| 12 | * fmt -- encoding format used by this instruction |
| 13 | * e1 -- encoding 1 |
| 14 | * e2 -- encoding 2 |
| 15 | * e3 -- encoding 3 |
| 16 | * e4 -- encoding 4 |
| 17 | * e5 -- encoding 5 |
| 18 | * |
| 19 | ******************************************************************************/ |
| 20 | |
| 21 | #if !defined(_TARGET_ARM64_) |
| 22 | #error Unexpected target type |
| 23 | #endif |
| 24 | |
| 25 | #ifndef INST1 |
| 26 | #error INST1 must be defined before including this file. |
| 27 | #endif |
| 28 | #ifndef INST2 |
| 29 | #error INST2 must be defined before including this file. |
| 30 | #endif |
| 31 | #ifndef INST3 |
| 32 | #error INST3 must be defined before including this file. |
| 33 | #endif |
| 34 | #ifndef INST4 |
| 35 | #error INST4 must be defined before including this file. |
| 36 | #endif |
| 37 | #ifndef INST5 |
| 38 | #error INST5 must be defined before including this file. |
| 39 | #endif |
| 40 | #ifndef INST6 |
| 41 | #error INST6 must be defined before including this file. |
| 42 | #endif |
| 43 | #ifndef INST9 |
| 44 | #error INST9 must be defined before including this file. |
| 45 | #endif |
| 46 | |
| 47 | /*****************************************************************************/ |
| 48 | /* The following is ARM64-specific */ |
| 49 | /*****************************************************************************/ |
| 50 | |
| 51 | // If you're adding a new instruction: |
| 52 | // You need not only to fill in one of these macros describing the instruction, but also: |
| 53 | // * If the instruction writes to more than one destination register, update the function |
| 54 | // emitInsMayWriteMultipleRegs in emitArm64.cpp. |
| 55 | |
| 56 | // clang-format off |
| 57 | INST9(invalid, "INVALID" , 0, 0, IF_NONE, BAD_CODE, BAD_CODE, BAD_CODE, BAD_CODE, BAD_CODE, BAD_CODE, BAD_CODE, BAD_CODE, BAD_CODE) |
| 58 | |
| 59 | // enum name FP LD/ST DR_2E DR_2G DI_1B DI_1D DV_3C DV_2B DV_2C DV_2E DV_2F |
| 60 | INST9(mov, "mov" , 0, 0, IF_EN9, 0x2A0003E0, 0x11000000, 0x52800000, 0x320003E0, 0x0EA01C00, 0x0E003C00, 0x4E001C00, 0x5E000400, 0x6E000400) |
| 61 | // mov Rd,Rm DR_2E X0101010000mmmmm 00000011111ddddd 2A00 03E0 |
| 62 | // mov Rd,Rn DR_2G X001000100000000 000000nnnnnddddd 1100 0000 mov to/from SP only |
| 63 | // mov Rd,imm(i16,hw) DI_1B X10100101hwiiiii iiiiiiiiiiiddddd 5280 0000 imm(i16,hw) |
| 64 | // mov Rd,imm(N,r,s) DI_1D X01100100Nrrrrrr ssssss11111ddddd 3200 03E0 imm(N,r,s) |
| 65 | // mov Vd,Vn DV_3C 0Q001110101nnnnn 000111nnnnnddddd 0EA0 1C00 Vd,Vn |
| 66 | // mov Rd,Vn[0] DV_2B 0Q001110000iiiii 001111nnnnnddddd 0E00 3C00 Rd,Vn[] (to general) |
| 67 | // mov Vd[],Rn DV_2C 01001110000iiiii 000111nnnnnddddd 4E00 1C00 Vd[],Rn (from general) |
| 68 | // mov Vd,Vn[] DV_2E 01011110000iiiii 000001nnnnnddddd 5E00 0400 Vd,Vn[] (scalar by elem) |
| 69 | // mov Vd[],Vn[] DV_2F 01101110000iiiii 0jjjj1nnnnnddddd 6E00 0400 Vd[],Vn[] (from/to elem) |
| 70 | |
| 71 | // enum name FP LD/ST DR_3A DR_3B DR_3C DI_2A DV_3A DV_3E |
| 72 | INST6(add, "add" , 0, 0, IF_EN6A, 0x0B000000, 0x0B000000, 0x0B200000, 0x11000000, 0x0E208400, 0x5EE08400) |
| 73 | // add Rd,Rn,Rm DR_3A X0001011000mmmmm 000000nnnnnddddd 0B00 0000 Rd,Rn,Rm |
| 74 | // add Rd,Rn,(Rm,shk,imm) DR_3B X0001011sh0mmmmm ssssssnnnnnddddd 0B00 0000 Rm {LSL,LSR,ASR} imm(0-63) |
| 75 | // add Rd,Rn,(Rm,ext,shl) DR_3C X0001011001mmmmm ooosssnnnnnddddd 0B20 0000 ext(Rm) LSL imm(0-4) |
| 76 | // add Rd,Rn,i12 DI_2A X0010001shiiiiii iiiiiinnnnnddddd 1100 0000 imm(i12,sh) |
| 77 | // add Vd,Vn,Vm DV_3A 0Q001110XX1mmmmm 100001nnnnnddddd 0E20 8400 Vd,Vn,Vm (vector) |
| 78 | // add Vd,Vn,Vm DV_3E 01011110111mmmmm 100001nnnnnddddd 5EE0 8400 Vd,Vn,Vm (scalar) |
| 79 | |
| 80 | INST6(sub, "sub" , 0, 0, IF_EN6A, 0x4B000000, 0x4B000000, 0x4B200000, 0x51000000, 0x2E208400, 0x7EE08400) |
| 81 | // sub Rd,Rn,Rm DR_3A X1001011000mmmmm 000000nnnnnddddd 4B00 0000 Rd,Rn,Rm |
| 82 | // sub Rd,Rn,(Rm,shk,imm) DR_3B X1001011sh0mmmmm ssssssnnnnnddddd 4B00 0000 Rm {LSL,LSR,ASR} imm(0-63) |
| 83 | // sub Rd,Rn,(Rm,ext,shl) DR_3C X1001011001mmmmm ooosssnnnnnddddd 4B20 0000 ext(Rm) LSL imm(0-4) |
| 84 | // sub Rd,Rn,i12 DI_2A X1010001shiiiiii iiiiiinnnnnddddd 5100 0000 imm(i12,sh) |
| 85 | // sub Vd,Vn,Vm DV_3A 0Q101110XX1mmmmm 100001nnnnnddddd 2E20 8400 Vd,Vn,Vm (vector) |
| 86 | // sub Vd,Vn,Vm DV_3E 01111110111mmmmm 100001nnnnnddddd 7EE0 8400 Vd,Vn,Vm (scalar) |
| 87 | |
| 88 | // enum name FP LD/ST LS_2A LS_2B LS_2C LS_3A LS_1A |
| 89 | INST5(ldr, "ldr" , 0,LD, IF_EN5A, 0xB9400000, 0xB9400000, 0xB8400000, 0xB8600800, 0x18000000) |
| 90 | // ldr Rt,[Xn] LS_2A 1X11100101000000 000000nnnnnttttt B940 0000 |
| 91 | // ldr Rt,[Xn+pimm12] LS_2B 1X11100101iiiiii iiiiiinnnnnttttt B940 0000 imm(0-4095<<{2,3}) |
| 92 | // ldr Rt,[Xn+simm9] LS_2C 1X111000010iiiii iiiiPPnnnnnttttt B840 0000 [Xn imm(-256..+255) pre/post/no inc] |
| 93 | // ldr Rt,[Xn,(Rm,ext,shl)] LS_3A 1X111000011mmmmm oooS10nnnnnttttt B860 0800 [Xn, ext(Rm) LSL {0,2,3}] |
| 94 | // ldr Vt/Rt,[PC+simm19<<2] LS_1A XX011V00iiiiiiii iiiiiiiiiiittttt 1800 0000 [PC +- imm(1MB)] |
| 95 | |
| 96 | INST5(ldrsw, "ldrsw" , 0,LD, IF_EN5A, 0xB9800000, 0xB9800000, 0xB8800000, 0xB8A00800, 0x98000000) |
| 97 | // ldrsw Rt,[Xn] LS_2A 1011100110000000 000000nnnnnttttt B980 0000 |
| 98 | // ldrsw Rt,[Xn+pimm12] LS_2B 1011100110iiiiii iiiiiinnnnnttttt B980 0000 imm(0-4095<<2) |
| 99 | // ldrsw Rt,[Xn+simm9] LS_2C 10111000100iiiii iiiiPPnnnnnttttt B880 0000 [Xn imm(-256..+255) pre/post/no inc] |
| 100 | // ldrsw Rt,[Xn,(Rm,ext,shl)] LS_3A 10111000101mmmmm oooS10nnnnnttttt B8A0 0800 [Xn, ext(Rm) LSL {0,2}] |
| 101 | // ldrsw Rt,[PC+simm19<<2] LS_1A 10011000iiiiiiii iiiiiiiiiiittttt 9800 0000 [PC +- imm(1MB)] |
| 102 | |
| 103 | // enum name FP LD/ST DV_2G DV_2H DV_2I DV_1A DV_1B |
| 104 | INST5(fmov, "fmov" , 0, 0, IF_EN5B, 0x1E204000, 0x1E260000, 0x1E270000, 0x1E201000, 0x0F00F400) |
| 105 | // fmov Vd,Vn DV_2G 000111100X100000 010000nnnnnddddd 1E20 4000 Vd,Vn (scalar) |
| 106 | // fmov Rd,Vn DV_2H X00111100X100110 000000nnnnnddddd 1E26 0000 Rd,Vn (scalar, to general) |
| 107 | // fmov Vd,Rn DV_2I X00111100X100111 000000nnnnnddddd 1E27 0000 Vd,Rn (scalar, from general) |
| 108 | // fmov Vd,immfp DV_1A 000111100X1iiiii iii10000000ddddd 1E20 1000 Vd,immfp (scalar) |
| 109 | // fmov Vd,immfp DV_1B 0QX0111100000iii 111101iiiiiddddd 0F00 F400 Vd,immfp (immediate vector) |
| 110 | |
| 111 | // enum name FP LD/ST DR_3A DR_3B DI_2C DV_3C DV_1B |
| 112 | INST5(orr, "orr" , 0, 0, IF_EN5C, 0x2A000000, 0x2A000000, 0x32000000, 0x0EA01C00, 0x0F001400) |
| 113 | // orr Rd,Rn,Rm DR_3A X0101010000mmmmm 000000nnnnnddddd 2A00 0000 |
| 114 | // orr Rd,Rn,(Rm,shk,imm) DR_3B X0101010sh0mmmmm iiiiiinnnnnddddd 2A00 0000 Rm {LSL,LSR,ASR,ROR} imm(0-63) |
| 115 | // orr Rd,Rn,imm(N,r,s) DI_2C X01100100Nrrrrrr ssssssnnnnnddddd 3200 0000 imm(N,r,s) |
| 116 | // orr Vd,Vn,Vm DV_3C 0Q001110101mmmmm 000111nnnnnddddd 0EA0 1C00 Vd,Vn,Vm |
| 117 | // orr Vd,imm8 DV_1B 0Q00111100000iii ---101iiiiiddddd 0F00 1400 Vd imm8 (immediate vector) |
| 118 | |
| 119 | // enum name FP LD/ST LS_2A LS_2B LS_2C LS_3A |
| 120 | INST4(ldrb, "ldrb" , 0,LD, IF_EN4A, 0x39400000, 0x39400000, 0x38400000, 0x38600800) |
| 121 | // ldrb Rt,[Xn] LS_2A 0011100101000000 000000nnnnnttttt 3940 0000 |
| 122 | // ldrb Rt,[Xn+pimm12] LS_2B 0011100101iiiiii iiiiiinnnnnttttt 3940 0000 imm(0-4095) |
| 123 | // ldrb Rt,[Xn+simm9] LS_2C 00111000010iiiii iiiiPPnnnnnttttt 3840 0000 [Xn imm(-256..+255) pre/post/no inc] |
| 124 | // ldrb Rt,[Xn,(Rm,ext,shl)] LS_3A 00111000011mmmmm oooS10nnnnnttttt 3860 0800 [Xn, ext(Rm)] |
| 125 | |
| 126 | INST4(ldrh, "ldrh" , 0,LD, IF_EN4A, 0x79400000, 0x79400000, 0x78400000, 0x78600800) |
| 127 | // ldrh Rt,[Xn] LS_2A 0111100101000000 000000nnnnnttttt 7940 0000 |
| 128 | // ldrh Rt,[Xn+pimm12] LS_2B 0111100101iiiiii iiiiiinnnnnttttt 7940 0000 imm(0-4095<<1) |
| 129 | // ldrh Rt,[Xn+simm9] LS_2C 01111000010iiiii iiiiPPnnnnnttttt 7840 0000 [Xn imm(-256..+255) pre/post/no inc] |
| 130 | // ldrh Rt,[Xn,(Rm,ext,shl)] LS_3A 01111000011mmmmm oooS10nnnnnttttt 7860 0800 [Xn, ext(Rm) LSL {0,1}] |
| 131 | |
| 132 | INST4(ldrsb, "ldrsb" , 0,LD, IF_EN4A, 0x39800000, 0x39800000, 0x38800000, 0x38A00800) |
| 133 | // ldrsb Rt,[Xn] LS_2A 001110011X000000 000000nnnnnttttt 3980 0000 |
| 134 | // ldrsb Rt,[Xn+pimm12] LS_2B 001110011Xiiiiii iiiiiinnnnnttttt 3980 0000 imm(0-4095) |
| 135 | // ldrsb Rt,[Xn+simm9] LS_2C 001110001X0iiiii iiii01nnnnnttttt 3880 0000 [Xn imm(-256..+255) pre/post/no inc] |
| 136 | // ldrsb Rt,[Xn,(Rm,ext,shl)] LS_3A 001110001X1mmmmm oooS10nnnnnttttt 38A0 0800 [Xn, ext(Rm)] |
| 137 | |
| 138 | INST4(ldrsh, "ldrsh" , 0,LD, IF_EN4A, 0x79800000, 0x79800000, 0x78800000, 0x78A00800) |
| 139 | // ldrsh Rt,[Xn] LS_2A 011110011X000000 000000nnnnnttttt 7980 0000 |
| 140 | // ldrsh Rt,[Xn+pimm12] LS_2B 011110011Xiiiiii iiiiiinnnnnttttt 7980 0000 imm(0-4095<<1) |
| 141 | // ldrsh Rt,[Xn+simm9] LS_2C 011110001X0iiiii iiiiPPnnnnnttttt 7880 0000 [Xn imm(-256..+255) pre/post/no inc] |
| 142 | // ldrsh Rt,[Xn,(Rm,ext,shl)] LS_3A 011110001X1mmmmm oooS10nnnnnttttt 78A0 0800 [Xn, ext(Rm) LSL {0,1}] |
| 143 | |
| 144 | INST4(str, "str" , 0,ST, IF_EN4A, 0xB9000000, 0xB9000000, 0xB8000000, 0xB8200800) |
| 145 | // str Rt,[Xn] LS_2A 1X11100100000000 000000nnnnnttttt B900 0000 |
| 146 | // str Rt,[Xn+pimm12] LS_2B 1X11100100iiiiii iiiiiinnnnnttttt B900 0000 imm(0-4095<<{2,3}) |
| 147 | // str Rt,[Xn+simm9] LS_2C 1X111000000iiiii iiiiPPnnnnnttttt B800 0000 [Xn imm(-256..+255) pre/post/no inc] |
| 148 | // str Rt,[Xn,(Rm,ext,shl)] LS_3A 1X111000001mmmmm oooS10nnnnnttttt B820 0800 [Xn, ext(Rm)] |
| 149 | |
| 150 | INST4(strb, "strb" , 0,ST, IF_EN4A, 0x39000000, 0x39000000, 0x38000000, 0x38200800) |
| 151 | // strb Rt,[Xn] LS_2A 0011100100000000 000000nnnnnttttt 3900 0000 |
| 152 | // strb Rt,[Xn+pimm12] LS_2B 0011100100iiiiii iiiiiinnnnnttttt 3900 0000 imm(0-4095) |
| 153 | // strb Rt,[Xn+simm9] LS_2C 00111000000iiiii iiiiPPnnnnnttttt 3800 0000 [Xn imm(-256..+255) pre/post/no inc] |
| 154 | // strb Rt,[Xn,(Rm,ext,shl)] LS_3A 00111000001mmmmm oooS10nnnnnttttt 3820 0800 [Xn, ext(Rm)] |
| 155 | |
| 156 | INST4(strh, "strh" , 0,ST, IF_EN4A, 0x79000000, 0x79000000, 0x78000000, 0x78200800) |
| 157 | // strh Rt,[Xn] LS_2A 0111100100000000 000000nnnnnttttt 7900 0000 |
| 158 | // strh Rt,[Xn+pimm12] LS_2B 0111100100iiiiii iiiiiinnnnnttttt 7900 0000 imm(0-4095<<1) |
| 159 | // strh Rt,[Xn+simm9] LS_2C 01111000000iiiii iiiiPPnnnnnttttt 7800 0000 [Xn imm(-256..+255) pre/post/no inc] |
| 160 | // strh Rt,[Xn,(Rm,ext,shl)] LS_3A 01111000001mmmmm oooS10nnnnnttttt 7820 0800 [Xn, ext(Rm)] |
| 161 | |
| 162 | // enum name FP LD/ST DR_3A DR_3B DR_3C DI_2A |
| 163 | INST4(adds, "adds" , 0, 0, IF_EN4B, 0x2B000000, 0x2B000000, 0x2B200000, 0x31000000) |
| 164 | // adds Rd,Rn,Rm DR_3A X0101011000mmmmm 000000nnnnnddddd 2B00 0000 |
| 165 | // adds Rd,Rn,(Rm,shk,imm) DR_3B X0101011sh0mmmmm ssssssnnnnnddddd 2B00 0000 Rm {LSL,LSR,ASR} imm(0-63) |
| 166 | // adds Rd,Rn,(Rm,ext,shl) DR_3C X0101011001mmmmm ooosssnnnnnddddd 2B20 0000 ext(Rm) LSL imm(0-4) |
| 167 | // adds Rd,Rn,i12 DI_2A X0110001shiiiiii iiiiiinnnnnddddd 3100 0000 imm(i12,sh) |
| 168 | |
| 169 | INST4(subs, "subs" , 0, 0, IF_EN4B, 0x6B000000, 0x6B000000, 0x6B200000, 0x71000000) |
| 170 | // subs Rd,Rn,Rm DR_3A X1101011000mmmmm 000000nnnnnddddd 6B00 0000 |
| 171 | // subs Rd,Rn,(Rm,shk,imm) DR_3B X1101011sh0mmmmm ssssssnnnnnddddd 6B00 0000 Rm {LSL,LSR,ASR} imm(0-63) |
| 172 | // subs Rd,Rn,(Rm,ext,shl) DR_3C X1101011001mmmmm ooosssnnnnnddddd 6B20 0000 ext(Rm) LSL imm(0-4) |
| 173 | // subs Rd,Rn,i12 DI_2A X1110001shiiiiii iiiiiinnnnnddddd 7100 0000 imm(i12,sh) |
| 174 | |
| 175 | // enum name FP LD/ST DR_2A DR_2B DR_2C DI_1A |
| 176 | INST4(cmp, "cmp" , 0,CMP,IF_EN4C, 0x6B00001F, 0x6B00001F, 0x6B20001F, 0x7100001F) |
| 177 | // cmp Rn,Rm DR_2A X1101011000mmmmm 000000nnnnn11111 6B00 001F |
| 178 | // cmp Rn,(Rm,shk,imm) DR_2B X1101011sh0mmmmm ssssssnnnnn11111 6B00 001F Rm {LSL,LSR,ASR} imm(0-63) |
| 179 | // cmp Rn,(Rm,ext,shl) DR_2C X1101011001mmmmm ooosssnnnnn11111 6B20 001F ext(Rm) LSL imm(0-4) |
| 180 | // cmp Rn,i12 DI_1A X111000100iiiiii iiiiiinnnnn11111 7100 001F imm(i12,sh) |
| 181 | |
| 182 | INST4(cmn, "cmn" , 0,CMP,IF_EN4C, 0x2B00001F, 0x2B00001F, 0x2B20001F, 0x3100001F) |
| 183 | // cmn Rn,Rm DR_2A X0101011000mmmmm 000000nnnnn11111 2B00 001F |
| 184 | // cmn Rn,(Rm,shk,imm) DR_2B X0101011sh0mmmmm ssssssnnnnn11111 2B00 001F Rm {LSL,LSR,ASR} imm(0-63) |
| 185 | // cmn Rn,(Rm,ext,shl) DR_2C X0101011001mmmmm ooosssnnnnn11111 2B20 001F ext(Rm) LSL imm(0-4) |
| 186 | // cmn Rn,i12 DI_1A X0110001shiiiiii iiiiiinnnnn11111 3100 001F imm(0-4095) |
| 187 | |
| 188 | // enum name FP LD/ST DV_3B DV_3D DV_3BI DV_3DI |
| 189 | INST4(fmul, "fmul" , 0, 0, IF_EN4D, 0x2E20DC00, 0x1E200800, 0x0F809000, 0x5F809000) |
| 190 | // fmul Vd,Vn,Vm DV_3B 0Q1011100X1mmmmm 110111nnnnnddddd 2E20 DC00 Vd,Vn,Vm (vector) |
| 191 | // fmul Vd,Vn,Vm DV_3D 000111100X1mmmmm 000010nnnnnddddd 1E20 0800 Vd,Vn,Vm (scalar) |
| 192 | // fmul Vd,Vn,Vm[] DV_3BI 0Q0011111XLmmmmm 1001H0nnnnnddddd 0F80 9000 Vd,Vn,Vm[] (vector by elem) |
| 193 | // fmul Vd,Vn,Vm[] DV_3DI 010111111XLmmmmm 1001H0nnnnnddddd 5F80 9000 Vd,Vn,Vm[] (scalar by elem) |
| 194 | |
| 195 | INST4(fmulx, "fmulx" , 0, 0, IF_EN4D, 0x0E20DC00, 0x5E20DC00, 0x2F809000, 0x7F809000) |
| 196 | // fmulx Vd,Vn,Vm DV_3B 0Q0011100X1mmmmm 110111nnnnnddddd 0E20 DC00 Vd,Vn,Vm (vector) |
| 197 | // fmulx Vd,Vn,Vm DV_3D 010111100X1mmmmm 110111nnnnnddddd 5E20 DC00 Vd,Vn,Vm (scalar) |
| 198 | // fmulx Vd,Vn,Vm[] DV_3BI 0Q1011111XLmmmmm 1001H0nnnnnddddd 2F80 9000 Vd,Vn,Vm[] (vector by elem) |
| 199 | // fmulx Vd,Vn,Vm[] DV_3DI 011111111XLmmmmm 1001H0nnnnnddddd 7F80 9000 Vd,Vn,Vm[] (scalar by elem) |
| 200 | |
| 201 | // enum name FP LD/ST DR_3A DR_3B DI_2C DV_3C |
| 202 | INST4(and, "and" , 0, 0, IF_EN4E, 0x0A000000, 0x0A000000, 0x12000000, 0x0E201C00) |
| 203 | // and Rd,Rn,Rm DR_3A X0001010000mmmmm 000000nnnnnddddd 0A00 0000 |
| 204 | // and Rd,Rn,(Rm,shk,imm) DR_3B X0001010sh0mmmmm iiiiiinnnnnddddd 0A00 0000 Rm {LSL,LSR,ASR,ROR} imm(0-63) |
| 205 | // and Rd,Rn,imm(N,r,s) DI_2C X00100100Nrrrrrr ssssssnnnnnddddd 1200 0000 imm(N,r,s) |
| 206 | // and Vd,Vn,Vm DV_3C 0Q001110001mmmmm 000111nnnnnddddd 0E20 1C00 Vd,Vn,Vm |
| 207 | |
| 208 | INST4(eor, "eor" , 0, 0, IF_EN4E, 0x4A000000, 0x4A000000, 0x52000000, 0x2E201C00) |
| 209 | // eor Rd,Rn,Rm DR_3A X1001010000mmmmm 000000nnnnnddddd 4A00 0000 |
| 210 | // eor Rd,Rn,(Rm,shk,imm) DR_3B X1001010sh0mmmmm iiiiiinnnnnddddd 4A00 0000 Rm {LSL,LSR,ASR,ROR} imm(0-63) |
| 211 | // eor Rd,Rn,imm(N,r,s) DI_2C X10100100Nrrrrrr ssssssnnnnnddddd 5200 0000 imm(N,r,s) |
| 212 | // eor Vd,Vn,Vm DV_3C 0Q101110001mmmmm 000111nnnnnddddd 2E20 1C00 Vd,Vn,Vm |
| 213 | |
| 214 | // enum name FP LD/ST DR_3A DR_3B DV_3C DV_1B |
| 215 | INST4(bic, "bic" , 0, 0, IF_EN4F, 0x0A200000, 0x0A200000, 0x0E601C00, 0x2F001400) |
| 216 | // bic Rd,Rn,Rm DR_3A X0001010001mmmmm 000000nnnnnddddd 0A20 0000 |
| 217 | // bic Rd,Rn,(Rm,shk,imm) DR_3B X0001010sh1mmmmm iiiiiinnnnnddddd 0A20 0000 Rm {LSL,LSR,ASR,ROR} imm(0-63) |
| 218 | // bic Vd,Vn,Vm DV_3C 0Q001110011mmmmm 000111nnnnnddddd 0E60 1C00 Vd,Vn,Vm |
| 219 | // bic Vd,imm8 DV_1B 0Q10111100000iii ---101iiiiiddddd 2F00 1400 Vd imm8 (immediate vector) |
| 220 | |
| 221 | // enum name FP LD/ST DR_2E DR_2F DV_2M DV_2L |
| 222 | INST4(neg, "neg" , 0, 0, IF_EN4G, 0x4B0003E0, 0x4B0003E0, 0x2E20B800, 0x7E20B800) |
| 223 | // neg Rd,Rm DR_2E X1001011000mmmmm 00000011111ddddd 4B00 03E0 |
| 224 | // neg Rd,(Rm,shk,imm) DR_2F X1001011sh0mmmmm ssssss11111ddddd 4B00 03E0 Rm {LSL,LSR,ASR} imm(0-63) |
| 225 | // neg Vd,Vn DV_2M 0Q101110XX100000 101110nnnnnddddd 2E20 B800 Vd,Vn (vector) |
| 226 | // neg Vd,Vn DV_2L 01111110XX100000 101110nnnnnddddd 7E20 B800 Vd,Vn (scalar) |
| 227 | |
| 228 | // enum name FP LD/ST DV_3E DV_3A DV_2L DV_2M |
| 229 | INST4(cmeq, "cmeq" , 0, 0, IF_EN4H, 0x7EE08C00, 0x2E208C00, 0x5E209800, 0x0E209800) |
| 230 | // cmeq Vd,Vn,Vm DV_3E 01111110111mmmmm 100011nnnnnddddd 7EE0 8C00 Vd,Vn,Vm (scalar) |
| 231 | // cmeq Vd,Vn,Vm DV_3A 0Q101110XX1mmmmm 100011nnnnnddddd 2E20 8C00 Vd,Vn,Vm (vector) |
| 232 | // cmeq Vd,Vn DV_2L 01011110XX100000 100110nnnnnddddd 5E20 9800 Vd,Vn (scalar) |
| 233 | // cmeq Vd,Vn DV_2M 0Q001110XX100000 100110nnnnnddddd 0E20 9800 Vd,Vn (vector) |
| 234 | |
| 235 | INST4(cmge, "cmge" , 0, 0, IF_EN4H, 0x5EE03C00, 0x0E203C00, 0x7E208800, 0x2E208800) |
| 236 | // cmge Vd,Vn,Vm DV_3E 01011110111mmmmm 001111nnnnnddddd 5EE0 3C00 Vd,Vn,Vm (scalar) |
| 237 | // cmge Vd,Vn,Vm DV_3A 0Q001110XX1mmmmm 001111nnnnnddddd 0E20 3C00 Vd,Vn,Vm (vector) |
| 238 | // cmge Vd,Vn DV_2L 01111110XX100000 100010nnnnnddddd 5E20 8800 Vd,Vn (scalar) |
| 239 | // cmge Vd,Vn DV_2M 0Q101110XX100000 100010nnnnnddddd 2E20 8800 Vd,Vn (vector) |
| 240 | |
| 241 | INST4(cmgt, "cmgt" , 0, 0, IF_EN4H, 0x5EE03400, 0x0E203400, 0x5E208800, 0x0E208800) |
| 242 | // cmgt Vd,Vn,Vm DV_3E 01011110111mmmmm 001101nnnnnddddd 5EE0 3400 Vd,Vn,Vm (scalar) |
| 243 | // cmgt Vd,Vn,Vm DV_3A 0Q001110XX1mmmmm 001101nnnnnddddd 0E20 3400 Vd,Vn,Vm (vector) |
| 244 | // cmgt Vd,Vn DV_2L 01011110XX100000 100010nnnnnddddd 5E20 8800 Vd,Vn (scalar) |
| 245 | // cmgt Vd,Vn DV_2M 0Q001110XX100000 101110nnnnnddddd 0E20 8800 Vd,Vn (vector) |
| 246 | |
| 247 | // enum name FP LD/ST DV_3D DV_3B DV_2G DV_2A |
| 248 | INST4(fcmeq, "fcmeq" , 0, 0, IF_EN4I, 0x5E20E400, 0x0E20E400, 0x5EA0D800, 0x0EA0D800) |
| 249 | // fcmeq Vd,Vn,Vm DV_3D 010111100X1mmmmm 111001nnnnnddddd 5E20 E400 Vd Vn Vm (scalar) |
| 250 | // fcmeq Vd,Vn,Vm DV_3B 0Q0011100X1mmmmm 111001nnnnnddddd 0E20 E400 Vd,Vn,Vm (vector) |
| 251 | // fcmeq Vd,Vn DV_2G 010111101X100000 110110nnnnnddddd 5EA0 D800 Vd Vn (scalar) |
| 252 | // fcmeq Vd,Vn DV_2A 0Q0011101X100000 110110nnnnnddddd 0EA0 D800 Vd Vn (vector) |
| 253 | |
| 254 | INST4(fcmge, "fcmge" , 0, 0, IF_EN4I, 0x7E20E400, 0x2E20E400, 0x7EA0C800, 0x2EA0C800) |
| 255 | // fcmge Vd,Vn,Vm DV_3D 011111100X1mmmmm 111001nnnnnddddd 7E20 E400 Vd Vn Vm (scalar) |
| 256 | // fcmge Vd,Vn,Vm DV_3B 0Q1011100X1mmmmm 111001nnnnnddddd 2E20 E400 Vd,Vn,Vm (vector) |
| 257 | // fcmge Vd,Vn DV_2G 011111101X100000 110010nnnnnddddd 7EA0 E800 Vd Vn (scalar) |
| 258 | // fcmge Vd,Vn DV_2A 0Q1011101X100000 110010nnnnnddddd 2EA0 C800 Vd Vn (vector) |
| 259 | |
| 260 | INST4(fcmgt, "fcmgt" , 0, 0, IF_EN4I, 0x7EA0E400, 0x2EA0E400, 0x5EA0C800, 0x0EA0C800) |
| 261 | // fcmgt Vd,Vn,Vm DV_3D 011111101X1mmmmm 111001nnnnnddddd 7EA0 E400 Vd Vn Vm (scalar) |
| 262 | // fcmgt Vd,Vn,Vm DV_3B 0Q1011101X1mmmmm 111001nnnnnddddd 2EA0 E400 Vd,Vn,Vm (vector) |
| 263 | // fcmgt Vd,Vn DV_2G 010111101X100000 110010nnnnnddddd 5EA0 E800 Vd Vn (scalar) |
| 264 | // fcmgt Vd,Vn DV_2A 0Q0011101X100000 110010nnnnnddddd 0EA0 C800 Vd Vn (vector) |
| 265 | |
| 266 | // enum name FP LD/ST DR_3A DR_3B DI_2C |
| 267 | INST3(ands, "ands" , 0, 0, IF_EN3A, 0x6A000000, 0x6A000000, 0x72000000) |
| 268 | // ands Rd,Rn,Rm DR_3A X1101010000mmmmm 000000nnnnnddddd 6A00 0000 |
| 269 | // ands Rd,Rn,(Rm,shk,imm) DR_3B X1101010sh0mmmmm iiiiiinnnnnddddd 6A00 0000 Rm {LSL,LSR,ASR,ROR} imm(0-63) |
| 270 | // ands Rd,Rn,imm(N,r,s) DI_2C X11100100Nrrrrrr ssssssnnnnnddddd 7200 0000 imm(N,r,s) |
| 271 | |
| 272 | // enum name FP LD/ST DR_2A DR_2B DI_1C |
| 273 | INST3(tst, "tst" , 0, 0, IF_EN3B, 0x6A00001F, 0x6A00001F, 0x7200001F) |
| 274 | // tst Rn,Rm DR_2A X1101010000mmmmm 000000nnnnn11111 6A00 001F |
| 275 | // tst Rn,(Rm,shk,imm) DR_2B X1101010sh0mmmmm iiiiiinnnnn11111 6A00 001F Rm {LSL,LSR,ASR,ROR} imm(0-63) |
| 276 | // tst Rn,imm(N,r,s) DI_1C X11100100Nrrrrrr ssssssnnnnn11111 7200 001F imm(N,r,s) |
| 277 | |
| 278 | // enum name FP LD/ST DR_3A DR_3B DV_3C |
| 279 | INST3(orn, "orn" , 0, 0, IF_EN3C, 0x2A200000, 0x2A200000, 0x0EE01C00) |
| 280 | // orn Rd,Rn,Rm DR_3A X0101010001mmmmm 000000nnnnnddddd 2A20 0000 |
| 281 | // orn Rd,Rn,(Rm,shk,imm) DR_3B X0101010sh1mmmmm iiiiiinnnnnddddd 2A20 0000 Rm {LSL,LSR,ASR,ROR} imm(0-63) |
| 282 | // orn Vd,Vn,Vm DV_3C 0Q001110111mmmmm 000111nnnnnddddd 0EE0 1C00 Vd,Vn,Vm |
| 283 | |
| 284 | // enum name FP LD/ST DV_2C DV_2D DV_2E |
| 285 | INST3(dup, "dup" , 0, 0, IF_EN3D, 0x0E000C00, 0x0E000400, 0x5E000400) |
| 286 | // dup Vd,Rn DV_2C 0Q001110000iiiii 000011nnnnnddddd 0E00 0C00 Vd,Rn (vector from general) |
| 287 | // dup Vd,Vn[] DV_2D 0Q001110000iiiii 000001nnnnnddddd 0E00 0400 Vd,Vn[] (vector by elem) |
| 288 | // dup Vd,Vn[] DV_2E 01011110000iiiii 000001nnnnnddddd 5E00 0400 Vd,Vn[] (scalar by elem) |
| 289 | |
| 290 | // enum name FP LD/ST DV_3B DV_3BI DV_3DI |
| 291 | INST3(fmla, "fmla" , 0, 0, IF_EN3E, 0x0E20CC00, 0x0F801000, 0x5F801000) |
| 292 | // fmla Vd,Vn,Vm DV_3B 0Q0011100X1mmmmm 110011nnnnnddddd 0E20 CC00 Vd,Vn,Vm (vector) |
| 293 | // fmla Vd,Vn,Vm[] DV_3BI 0Q0011111XLmmmmm 0001H0nnnnnddddd 0F80 1000 Vd,Vn,Vm[] (vector by elem) |
| 294 | // fmla Vd,Vn,Vm[] DV_3DI 010111111XLmmmmm 0001H0nnnnnddddd 5F80 1000 Vd,Vn,Vm[] (scalar by elem) |
| 295 | |
| 296 | INST3(fmls, "fmls" , 0, 0, IF_EN3E, 0x0EA0CC00, 0x0F805000, 0x5F805000) |
| 297 | // fmls Vd,Vn,Vm DV_3B 0Q0011101X1mmmmm 110011nnnnnddddd 0EA0 CC00 Vd,Vn,Vm (vector) |
| 298 | // fmls Vd,Vn,Vm[] DV_3BI 0Q0011111XLmmmmm 0101H0nnnnnddddd 0F80 5000 Vd,Vn,Vm[] (vector by elem) |
| 299 | // fmls Vd,Vn,Vm[] DV_3DI 010111111XLmmmmm 0101H0nnnnnddddd 5F80 5000 Vd,Vn,Vm[] (scalar by elem) |
| 300 | |
| 301 | // enum name FP LD/ST DV_2A DV_2G DV_2H |
| 302 | INST3(fcvtas, "fcvtas" , 0, 0, IF_EN3F, 0x0E21C800, 0x5E21C800, 0x1E240000) |
| 303 | // fcvtas Vd,Vn DV_2A 0Q0011100X100001 110010nnnnnddddd 0E21 C800 Vd,Vn (vector) |
| 304 | // fcvtas Vd,Vn DV_2G 010111100X100001 110010nnnnnddddd 5E21 C800 Vd,Vn (scalar) |
| 305 | // fcvtas Rd,Vn DV_2H X00111100X100100 000000nnnnnddddd 1E24 0000 Rd,Vn (scalar, to general) |
| 306 | |
| 307 | INST3(fcvtau, "fcvtau" , 0, 0, IF_EN3F, 0x2E21C800, 0x7E21C800, 0x1E250000) |
| 308 | // fcvtau Vd,Vn DV_2A 0Q1011100X100001 111010nnnnnddddd 2E21 C800 Vd,Vn (vector) |
| 309 | // fcvtau Vd,Vn DV_2G 011111100X100001 111010nnnnnddddd 7E21 C800 Vd,Vn (scalar) |
| 310 | // fcvtau Rd,Vn DV_2H X00111100X100101 000000nnnnnddddd 1E25 0000 Rd,Vn (scalar, to general) |
| 311 | |
| 312 | INST3(fcvtms, "fcvtms" , 0, 0, IF_EN3F, 0x0E21B800, 0x5E21B800, 0x1E300000) |
| 313 | // fcvtms Vd,Vn DV_2A 0Q0011100X100001 101110nnnnnddddd 0E21 B800 Vd,Vn (vector) |
| 314 | // fcvtms Vd,Vn DV_2G 010111100X100001 101110nnnnnddddd 5E21 B800 Vd,Vn (scalar) |
| 315 | // fcvtms Rd,Vn DV_2H X00111100X110000 000000nnnnnddddd 1E30 0000 Rd,Vn (scalar, to general) |
| 316 | |
| 317 | INST3(fcvtmu, "fcvtmu" , 0, 0, IF_EN3F, 0x2E21B800, 0x7E21B800, 0x1E310000) |
| 318 | // fcvtmu Vd,Vn DV_2A 0Q1011100X100001 101110nnnnnddddd 2E21 B800 Vd,Vn (vector) |
| 319 | // fcvtmu Vd,Vn DV_2G 011111100X100001 101110nnnnnddddd 7E21 B800 Vd,Vn (scalar) |
| 320 | // fcvtmu Rd,Vn DV_2H X00111100X110001 000000nnnnnddddd 1E31 0000 Rd,Vn (scalar, to general) |
| 321 | |
| 322 | INST3(fcvtns, "fcvtns" , 0, 0, IF_EN3F, 0x0E21A800, 0x5E21A800, 0x1E200000) |
| 323 | // fcvtns Vd,Vn DV_2A 0Q0011100X100001 101010nnnnnddddd 0E21 A800 Vd,Vn (vector) |
| 324 | // fcvtns Vd,Vn DV_2G 010111100X100001 101010nnnnnddddd 5E21 A800 Vd,Vn (scalar) |
| 325 | // fcvtns Rd,Vn DV_2H X00111100X100000 000000nnnnnddddd 1E20 0000 Rd,Vn (scalar, to general) |
| 326 | |
| 327 | INST3(fcvtnu, "fcvtnu" , 0, 0, IF_EN3F, 0x2E21A800, 0x7E21A800, 0x1E210000) |
| 328 | // fcvtnu Vd,Vn DV_2A 0Q1011100X100001 101010nnnnnddddd 2E21 A800 Vd,Vn (vector) |
| 329 | // fcvtnu Vd,Vn DV_2G 011111100X100001 101010nnnnnddddd 7E21 A800 Vd,Vn (scalar) |
| 330 | // fcvtnu Rd,Vn DV_2H X00111100X100001 000000nnnnnddddd 1E21 0000 Rd,Vn (scalar, to general) |
| 331 | |
| 332 | INST3(fcvtps, "fcvtps" , 0, 0, IF_EN3F, 0x0EA1A800, 0x5EA1A800, 0x1E280000) |
| 333 | // fcvtps Vd,Vn DV_2A 0Q0011101X100001 101010nnnnnddddd 0EA1 A800 Vd,Vn (vector) |
| 334 | // fcvtps Vd,Vn DV_2G 010111101X100001 101010nnnnnddddd 5EA1 A800 Vd,Vn (scalar) |
| 335 | // fcvtps Rd,Vn DV_2H X00111100X101000 000000nnnnnddddd 1E28 0000 Rd,Vn (scalar, to general) |
| 336 | |
| 337 | INST3(fcvtpu, "fcvtpu" , 0, 0, IF_EN3F, 0x2EA1A800, 0x7EA1A800, 0x1E290000) |
| 338 | // fcvtpu Vd,Vn DV_2A 0Q1011101X100001 101010nnnnnddddd 2EA1 A800 Vd,Vn (vector) |
| 339 | // fcvtpu Vd,Vn DV_2G 011111101X100001 101010nnnnnddddd 7EA1 A800 Vd,Vn (scalar) |
| 340 | // fcvtpu Rd,Vn DV_2H X00111100X101001 000000nnnnnddddd 1E29 0000 Rd,Vn (scalar, to general) |
| 341 | |
| 342 | INST3(fcvtzs, "fcvtzs" , 0, 0, IF_EN3F, 0x0EA1B800, 0x5EA1B800, 0x1E380000) |
| 343 | // fcvtzs Vd,Vn DV_2A 0Q0011101X100001 101110nnnnnddddd 0EA1 B800 Vd,Vn (vector) |
| 344 | // fcvtzs Vd,Vn DV_2G 010111101X100001 101110nnnnnddddd 5EA1 B800 Vd,Vn (scalar) |
| 345 | // fcvtzs Rd,Vn DV_2H X00111100X111000 000000nnnnnddddd 1E38 0000 Rd,Vn (scalar, to general) |
| 346 | |
| 347 | INST3(fcvtzu, "fcvtzu" , 0, 0, IF_EN3F, 0x2EA1B800, 0x7EA1B800, 0x1E390000) |
| 348 | // fcvtzu Vd,Vn DV_2A 0Q1011101X100001 101110nnnnnddddd 2EA1 B800 Vd,Vn (vector) |
| 349 | // fcvtzu Vd,Vn DV_2G 011111101X100001 101110nnnnnddddd 7EA1 B800 Vd,Vn (scalar) |
| 350 | // fcvtzu Rd,Vn DV_2H X00111100X111001 000000nnnnnddddd 1E39 0000 Rd,Vn (scalar, to general) |
| 351 | |
| 352 | // enum name FP LD/ST DV_2A DV_2G DV_2I |
| 353 | INST3(scvtf, "scvtf" , 0, 0, IF_EN3G, 0x0E21D800, 0x5E21D800, 0x1E220000) |
| 354 | // scvtf Vd,Vn DV_2A 0Q0011100X100001 110110nnnnnddddd 0E21 D800 Vd,Vn (vector) |
| 355 | // scvtf Vd,Vn DV_2G 010111100X100001 110110nnnnnddddd 7E21 D800 Vd,Vn (scalar) |
| 356 | // scvtf Rd,Vn DV_2I X00111100X100010 000000nnnnnddddd 1E22 0000 Vd,Rn (scalar, from general) |
| 357 | |
| 358 | INST3(ucvtf, "ucvtf" , 0, 0, IF_EN3G, 0x2E21D800, 0x7E21D800, 0x1E230000) |
| 359 | // ucvtf Vd,Vn DV_2A 0Q1011100X100001 110110nnnnnddddd 2E21 D800 Vd,Vn (vector) |
| 360 | // ucvtf Vd,Vn DV_2G 011111100X100001 110110nnnnnddddd 7E21 D800 Vd,Vn (scalar) |
| 361 | // ucvtf Rd,Vn DV_2I X00111100X100011 000000nnnnnddddd 1E23 0000 Vd,Rn (scalar, from general) |
| 362 | |
| 363 | INST3(mul, "mul" , 0, 0, IF_EN3H, 0x1B007C00, 0x0E209C00, 0x0F008000) |
| 364 | // mul Rd,Rn,Rm DR_3A X0011011000mmmmm 011111nnnnnddddd 1B00 7C00 |
| 365 | // mul Vd,Vn,Vm DV_3A 0Q001110XX1mmmmm 100111nnnnnddddd 0E20 9C00 Vd,Vn,Vm (vector) |
| 366 | // mul Vd,Vn,Vm[] DV_3AI 0Q001111XXLMmmmm 1000H0nnnnnddddd 0F00 8000 Vd,Vn,Vm[] (vector by elem) |
| 367 | |
| 368 | // enum name FP LD/ST DR_2E DR_2F DV_2M |
| 369 | INST3(mvn, "mvn" , 0, 0, IF_EN3I, 0x2A2003E0, 0x2A2003E0, 0x2E205800) |
| 370 | // mvn Rd,Rm DR_2E X0101010001mmmmm 00000011111ddddd 2A20 03E0 |
| 371 | // mvn Rd,(Rm,shk,imm) DR_2F X0101010sh1mmmmm iiiiii11111ddddd 2A20 03E0 Rm {LSL,LSR,ASR} imm(0-63) |
| 372 | // mvn Vd,Vn DV_2M 0Q10111000100000 010110nnnnnddddd 2E20 5800 Vd,Vn (vector) |
| 373 | |
| 374 | |
| 375 | // enum name FP LD/ST DR_2E DR_2F |
| 376 | INST2(negs, "negs" , 0, 0, IF_EN2A, 0x6B0003E0, 0x6B0003E0) |
| 377 | // negs Rd,Rm DR_2E X1101011000mmmmm 00000011111ddddd 6B00 03E0 |
| 378 | // negs Rd,(Rm,shk,imm) DR_2F X1101011sh0mmmmm ssssss11111ddddd 6B00 03E0 Rm {LSL,LSR,ASR} imm(0-63) |
| 379 | |
| 380 | // enum name FP LD/ST DR_3A DR_3B |
| 381 | INST2(bics, "bics" , 0, 0, IF_EN2B, 0x6A200000, 0x6A200000) |
| 382 | // bics Rd,Rn,Rm DR_3A X1101010001mmmmm 000000nnnnnddddd 6A20 0000 |
| 383 | // bics Rd,Rn,(Rm,shk,imm) DR_3B X1101010sh1mmmmm iiiiiinnnnnddddd 6A20 0000 Rm {LSL,LSR,ASR,ROR} imm(0-63) |
| 384 | |
| 385 | INST2(eon, "eon" , 0, 0, IF_EN2B, 0x4A200000, 0x4A200000) |
| 386 | // eon Rd,Rn,Rm DR_3A X1001010001mmmmm 000000nnnnnddddd 4A20 0000 |
| 387 | // eon Rd,Rn,(Rm,shk,imm) DR_3B X1001010sh1mmmmm iiiiiinnnnnddddd 4A20 0000 Rm {LSL,LSR,ASR,ROR} imm(0-63) |
| 388 | |
| 389 | // enum name FP LD/ST DR_3A DI_2C |
| 390 | INST2(lsl, "lsl" , 0, 0, IF_EN2C, 0x1AC02000, 0x53000000) |
| 391 | // lsl Rd,Rn,Rm DR_3A X0011010110mmmmm 001000nnnnnddddd 1AC0 2000 |
| 392 | // lsl Rd,Rn,imm6 DI_2D X10100110Xrrrrrr ssssssnnnnnddddd 5300 0000 imm(N,r,s) |
| 393 | |
| 394 | INST2(lsr, "lsr" , 0, 0, IF_EN2C, 0x1AC02400, 0x53000000) |
| 395 | // lsr Rd,Rn,Rm DR_3A X0011010110mmmmm 001001nnnnnddddd 1AC0 2400 |
| 396 | // lsr Rd,Rn,imm6 DI_2D X10100110Xrrrrrr ssssssnnnnnddddd 5300 0000 imm(N,r,s) |
| 397 | |
| 398 | INST2(asr, "asr" , 0, 0, IF_EN2C, 0x1AC02800, 0x13000000) |
| 399 | // asr Rd,Rn,Rm DR_3A X0011010110mmmmm 001010nnnnnddddd 1AC0 2800 |
| 400 | // asr Rd,Rn,imm6 DI_2D X00100110Xrrrrrr ssssssnnnnnddddd 1300 0000 imm(N,r,s) |
| 401 | |
| 402 | // enum name FP LD/ST DR_3A DI_2B |
| 403 | INST2(ror, "ror" , 0, 0, IF_EN2D, 0x1AC02C00, 0x13800000) |
| 404 | // ror Rd,Rn,Rm DR_3A X0011010110mmmmm 001011nnnnnddddd 1AC0 2C00 |
| 405 | // ror Rd,Rn,imm6 DI_2B X00100111X0nnnnn ssssssnnnnnddddd 1380 0000 imm(0-63) |
| 406 | |
| 407 | // enum name FP LD/ST LS_3B LS_3C |
| 408 | INST2(ldp, "ldp" , 0,LD, IF_EN2E, 0x29400000, 0x28400000) |
| 409 | // ldp Rt,Ra,[Xn] LS_3B X010100101000000 0aaaaannnnnttttt 2940 0000 [Xn imm7] |
| 410 | // ldp Rt,Ra,[Xn+simm7] LS_3C X010100PP1iiiiii iaaaaannnnnttttt 2840 0000 [Xn imm7 LSL {} pre/post/no inc] |
| 411 | |
| 412 | INST2(ldpsw, "ldpsw" , 0,LD, IF_EN2E, 0x69400000, 0x68400000) |
| 413 | // ldpsw Rt,Ra,[Xn] LS_3B 0110100101000000 0aaaaannnnnttttt 6940 0000 [Xn imm7] |
| 414 | // ldpsw Rt,Ra,[Xn+simm7] LS_3C 0110100PP1iiiiii iaaaaannnnnttttt 6840 0000 [Xn imm7 LSL {} pre/post/no inc] |
| 415 | |
| 416 | INST2(stp, "stp" , 0,ST, IF_EN2E, 0x29000000, 0x28000000) |
| 417 | // stp Rt,Ra,[Xn] LS_3B X010100100000000 0aaaaannnnnttttt 2900 0000 [Xn imm7] |
| 418 | // stp Rt,Ra,[Xn+simm7] LS_3C X010100PP0iiiiii iaaaaannnnnttttt 2800 0000 [Xn imm7 LSL {} pre/post/no inc] |
| 419 | |
| 420 | INST2(ldnp, "ldnp" , 0,LD, IF_EN2E, 0x28400000, 0x28400000) |
| 421 | // ldnp Rt,Ra,[Xn] LS_3B X010100001000000 0aaaaannnnnttttt 2840 0000 [Xn imm7] |
| 422 | // ldnp Rt,Ra,[Xn+simm7] LS_3C X010100001iiiiii iaaaaannnnnttttt 2840 0000 [Xn imm7 LSL {}] |
| 423 | |
| 424 | INST2(stnp, "stnp" , 0,ST, IF_EN2E, 0x28000000, 0x28000000) |
| 425 | // stnp Rt,Ra,[Xn] LS_3B X010100000000000 0aaaaannnnnttttt 2800 0000 [Xn imm7] |
| 426 | // stnp Rt,Ra,[Xn+simm7] LS_3C X010100000iiiiii iaaaaannnnnttttt 2800 0000 [Xn imm7 LSL {}] |
| 427 | |
| 428 | INST2(ccmp, "ccmp" , 0,CMP,IF_EN2F, 0x7A400000, 0x7A400800) |
| 429 | // ccmp Rn,Rm, nzcv,cond DR_2I X1111010010mmmmm cccc00nnnnn0nzcv 7A40 0000 nzcv, cond |
| 430 | // ccmp Rn,imm5,nzcv,cond DI_1F X1111010010iiiii cccc10nnnnn0nzcv 7A40 0800 imm5, nzcv, cond |
| 431 | |
| 432 | INST2(ccmn, "ccmn" , 0,CMP,IF_EN2F, 0x3A400000, 0x3A400800) |
| 433 | // ccmn Rn,Rm, nzcv,cond DR_2I X0111010010mmmmm cccc00nnnnn0nzcv 3A40 0000 nzcv, cond |
| 434 | // ccmn Rn,imm5,nzcv,cond DI_1F X0111010910iiiii cccc10nnnnn0nzcv 3A40 0800 imm5, nzcv, cond |
| 435 | |
| 436 | // enum name FP LD/ST DV_2C DV_2F |
| 437 | INST2(ins, "ins" , 0, 0, IF_EN2H, 0x4E001C00, 0x6E000400) |
| 438 | // ins Vd[],Rn DV_2C 01001110000iiiii 000111nnnnnddddd 4E00 1C00 Vd[],Rn (from general) |
| 439 | // ins Vd[],Vn[] DV_2F 01101110000iiiii 0jjjj1nnnnnddddd 6E00 0400 Vd[],Vn[] (from/to elem) |
| 440 | |
| 441 | // enum name FP LD/ST DV_3B DV_3D |
| 442 | INST2(fadd, "fadd" , 0, 0, IF_EN2G, 0x0E20D400, 0x1E202800) |
| 443 | // fadd Vd,Vn,Vm DV_3B 0Q0011100X1mmmmm 110101nnnnnddddd 0E20 D400 Vd,Vn,Vm (vector) |
| 444 | // fadd Vd,Vn,Vm DV_3D 000111100X1mmmmm 001010nnnnnddddd 1E20 2800 Vd,Vn,Vm (scalar) |
| 445 | |
| 446 | INST2(fsub, "fsub" , 0, 0, IF_EN2G, 0x0EA0D400, 0x1E203800) |
| 447 | // fsub Vd,Vn,Vm DV_3B 0Q0011101X1mmmmm 110101nnnnnddddd 0EA0 D400 Vd,Vn,Vm (vector) |
| 448 | // fsub Vd,Vn,Vm DV_3D 000111100X1mmmmm 001110nnnnnddddd 1E20 3800 Vd,Vn,Vm (scalar) |
| 449 | |
| 450 | INST2(fdiv, "fdiv" , 0, 0, IF_EN2G, 0x2E20FC00, 0x1E201800) |
| 451 | // fdiv Vd,Vn,Vm DV_3B 0Q1011100X1mmmmm 111111nnnnnddddd 2E20 FC00 Vd,Vn,Vm (vector) |
| 452 | // fdiv Vd,Vn,Vm DV_3D 000111100X1mmmmm 000110nnnnnddddd 1E20 1800 Vd,Vn,Vm (scalar) |
| 453 | |
| 454 | INST2(fmax, "fmax" , 0, 0, IF_EN2G, 0x0E20F400, 0x1E204800) |
| 455 | // fmax Vd,Vn,Vm DV_3B 0Q0011100X1mmmmm 111101nnnnnddddd 0E20 F400 Vd,Vn,Vm (vector) |
| 456 | // fmax Vd,Vn,Vm DV_3D 000111100X1mmmmm 010010nnnnnddddd 1E20 4800 Vd,Vn,Vm (scalar) |
| 457 | |
| 458 | INST2(fmin, "fmin" , 0, 0, IF_EN2G, 0x0EA0F400, 0x1E205800) |
| 459 | // fmin Vd,Vn,Vm DV_3B 0Q0011101X1mmmmm 111101nnnnnddddd 0EA0 F400 Vd,Vn,Vm (vector) |
| 460 | // fmin Vd,Vn,Vm DV_3D 000111100X1mmmmm 010110nnnnnddddd 1E20 5800 Vd,Vn,Vm (scalar) |
| 461 | |
| 462 | INST2(fabd, "fabd" , 0, 0, IF_EN2G, 0x0EA0F400, 0x1E205800) |
| 463 | // fabd Vd,Vn,Vm DV_3B 0Q1011101X1mmmmm 110101nnnnnddddd 2EA0 D400 Vd,Vn,Vm (vector) |
| 464 | // fabd Vd,Vn,Vm DV_3D 011111101X1mmmmm 110101nnnnnddddd 7EA0 D400 Vd,Vn,Vm (scalar) |
| 465 | |
| 466 | // enum name FP LD/ST DV_2K DV_1C |
| 467 | INST2(fcmp, "fcmp" , 0, 0, IF_EN2I, 0x1E202000, 0x1E202008) |
| 468 | // fcmp Vn,Vm DV_2K 000111100X1mmmmm 001000nnnnn00000 1E20 2000 Vn Vm |
| 469 | // fcmp Vn,#0.0 DV_1C 000111100X100000 001000nnnnn01000 1E20 2008 Vn #0.0 |
| 470 | |
| 471 | INST2(fcmpe, "fcmpe" , 0, 0, IF_EN2I, 0x1E202010, 0x1E202018) |
| 472 | // fcmpe Vn,Vm DV_2K 000111100X1mmmmm 001000nnnnn10000 1E20 2010 Vn Vm |
| 473 | // fcmpe Vn,#0.0 DV_1C 000111100X100000 001000nnnnn11000 1E20 2018 Vn #0.0 |
| 474 | |
| 475 | // enum name FP LD/ST DV_2A DV_2G |
| 476 | INST2(fabs, "fabs" , 0, 0, IF_EN2J, 0x0EA0F800, 0x1E20C000) |
| 477 | // fabs Vd,Vn DV_2A 0Q0011101X100000 111110nnnnnddddd 0EA0 F800 Vd,Vn (vector) |
| 478 | // fabs Vd,Vn DV_2G 000111100X100000 110000nnnnnddddd 1E20 C000 Vd,Vn (scalar) |
| 479 | |
| 480 | INST2(fcmle, "fcmle" , 0, 0, IF_EN2J, 0x2EA0D800, 0x7EA0D800) |
| 481 | // fcmle Vd,Vn DV_2A 0Q1011101X100000 111110nnnnnddddd 2EA0 D800 Vd,Vn (vector) |
| 482 | // fcmle Vd,Vn DV_2G 011111101X100000 110110nnnnnddddd 7EA0 D800 Vd,Vn (scalar) |
| 483 | |
| 484 | INST2(fcmlt, "fcmlt" , 0, 0, IF_EN2J, 0x0EA0E800, 0x5EA0E800) |
| 485 | // fcmlt Vd,Vn DV_2A 0Q0011101X100000 111110nnnnnddddd 0EA0 E800 Vd,Vn (vector) |
| 486 | // fcmlt Vd,Vn DV_2G 010111101X100000 111010nnnnnddddd 5EA0 E800 Vd,Vn (scalar) |
| 487 | |
| 488 | INST2(fneg, "fneg" , 0, 0, IF_EN2J, 0x2EA0F800, 0x1E214000) |
| 489 | // fneg Vd,Vn DV_2A 0Q1011101X100000 111110nnnnnddddd 2EA0 F800 Vd,Vn (vector) |
| 490 | // fneg Vd,Vn DV_2G 000111100X100001 010000nnnnnddddd 1E21 4000 Vd,Vn (scalar) |
| 491 | |
| 492 | INST2(fsqrt, "fsqrt" , 0, 0, IF_EN2J, 0x2EA1F800, 0x1E21C000) |
| 493 | // fsqrt Vd,Vn DV_2A 0Q1011101X100001 111110nnnnnddddd 2EA1 F800 Vd,Vn (vector) |
| 494 | // fsqrt Vd,Vn DV_2G 000111100X100001 110000nnnnnddddd 1E21 C000 Vd,Vn (scalar) |
| 495 | |
| 496 | INST2(frintn, "frintn" , 0, 0, IF_EN2J, 0x0E218800, 0x1E244000) |
| 497 | // frintn Vd,Vn DV_2A 0Q0011100X100001 100010nnnnnddddd 0E21 8800 Vd,Vn (vector) |
| 498 | // frintn Vd,Vn DV_2G 000111100X100100 010000nnnnnddddd 1E24 4000 Vd,Vn (scalar) |
| 499 | |
| 500 | INST2(frintp, "frintp" , 0, 0, IF_EN2J, 0x0EA18800, 0x1E24C000) |
| 501 | // frintp Vd,Vn DV_2A 0Q0011101X100001 100010nnnnnddddd 0EA1 8800 Vd,Vn (vector) |
| 502 | // frintp Vd,Vn DV_2G 000111100X100100 110000nnnnnddddd 1E24 C000 Vd,Vn (scalar) |
| 503 | |
| 504 | INST2(frintm, "frintm" , 0, 0, IF_EN2J, 0x0E219800, 0x1E254000) |
| 505 | // frintm Vd,Vn DV_2A 0Q0011100X100001 100110nnnnnddddd 0E21 9800 Vd,Vn (vector) |
| 506 | // frintm Vd,Vn DV_2G 000111100X100101 010000nnnnnddddd 1E25 4000 Vd,Vn (scalar) |
| 507 | |
| 508 | INST2(frintz, "frintz" , 0, 0, IF_EN2J, 0x0EA19800, 0x1E25C000) |
| 509 | // frintz Vd,Vn DV_2A 0Q0011101X100001 100110nnnnnddddd 0EA1 9800 Vd,Vn (vector) |
| 510 | // frintz Vd,Vn DV_2G 000111100X100101 110000nnnnnddddd 1E25 C000 Vd,Vn (scalar) |
| 511 | |
| 512 | INST2(frinta, "frinta" , 0, 0, IF_EN2J, 0x2E218800, 0x1E264000) |
| 513 | // frinta Vd,Vn DV_2A 0Q1011100X100001 100010nnnnnddddd 2E21 8800 Vd,Vn (vector) |
| 514 | // frinta Vd,Vn DV_2G 000111100X100110 010000nnnnnddddd 1E26 4000 Vd,Vn (scalar) |
| 515 | |
| 516 | INST2(frintx, "frintx" , 0, 0, IF_EN2J, 0x2E219800, 0x1E274000) |
| 517 | // frintx Vd,Vn DV_2A 0Q1011100X100001 100110nnnnnddddd 2E21 9800 Vd,Vn (vector) |
| 518 | // frintx Vd,Vn DV_2G 000111100X100111 010000nnnnnddddd 1E27 4000 Vd,Vn (scalar) |
| 519 | |
| 520 | INST2(frinti, "frinti" , 0, 0, IF_EN2J, 0x2EA19800, 0x1E27C000) |
| 521 | // frinti Vd,Vn DV_2A 0Q1011101X100001 100110nnnnnddddd 2EA1 9800 Vd,Vn (vector) |
| 522 | // frinti Vd,Vn DV_2G 000111100X100111 110000nnnnnddddd 1E27 C000 Vd,Vn (scalar) |
| 523 | |
| 524 | // enum name FP LD/ST DV_2M DV_2L |
| 525 | INST2(abs, "abs" , 0, 0, IF_EN2K, 0x0E20B800, 0x5E20B800) |
| 526 | // abs Vd,Vn DV_2M 0Q001110XX100000 101110nnnnnddddd 0E20 B800 Vd,Vn (vector) |
| 527 | // abs Vd,Vn DV_2L 01011110XX100000 101110nnnnnddddd 5E20 B800 Vd,Vn (scalar) |
| 528 | |
| 529 | INST2(cmle, "cmle" , 0, 0, IF_EN2K, 0x2E209800, 0x7E209800) |
| 530 | // cmle Vd,Vn DV_2M 0Q101110XX100000 100110nnnnnddddd 2E20 9800 Vd,Vn (vector) |
| 531 | // cmle Vd,Vn DV_2L 01111110XX100000 100110nnnnnddddd 7E20 9800 Vd,Vn (scalar) |
| 532 | |
| 533 | INST2(cmlt, "cmlt" , 0, 0, IF_EN2K, 0x0E20A800, 0x5E20A800) |
| 534 | // cmlt Vd,Vn DV_2M 0Q101110XX100000 101010nnnnnddddd 0E20 A800 Vd,Vn (vector) |
| 535 | // cmlt Vd,Vn DV_2L 01011110XX100000 101010nnnnnddddd 5E20 A800 Vd,Vn (scalar) |
| 536 | |
| 537 | // enum name FP LD/ST DR_2G DV_2M |
| 538 | INST2(cls, "cls" , 0, 0, IF_EN2L, 0x5AC01400, 0x0E204800) |
| 539 | // cls Rd,Rm DR_2G X101101011000000 000101nnnnnddddd 5AC0 1400 Rd Rn (general) |
| 540 | // cls Vd,Vn DV_2M 0Q00111000100000 010010nnnnnddddd 0E20 4800 Vd,Vn (vector) |
| 541 | |
| 542 | INST2(clz, "clz" , 0, 0, IF_EN2L, 0x5AC01000, 0x2E204800) |
| 543 | // clz Rd,Rm DR_2G X101101011000000 000100nnnnnddddd 5AC0 1000 Rd Rn (general) |
| 544 | // clz Vd,Vn DV_2M 0Q10111000100000 010010nnnnnddddd 2E20 4800 Vd,Vn (vector) |
| 545 | |
| 546 | INST2(rbit, "rbit" , 0, 0, IF_EN2L, 0x5AC00000, 0x2E605800) |
| 547 | // rbit Rd,Rm DR_2G X101101011000000 000000nnnnnddddd 5AC0 0000 Rd Rn (general) |
| 548 | // rbit Vd,Vn DV_2M 0Q10111001100000 010110nnnnnddddd 2E60 5800 Vd,Vn (vector) |
| 549 | |
| 550 | INST2(rev16, "rev16" , 0, 0, IF_EN2L, 0x5AC00400, 0x0E201800) |
| 551 | // rev16 Rd,Rm DR_2G X101101011000000 000001nnnnnddddd 5AC0 0400 Rd Rn (general) |
| 552 | // rev16 Vd,Vn DV_2M 0Q001110XX100000 000110nnnnnddddd 0E20 1800 Vd,Vn (vector) |
| 553 | |
| 554 | INST2(rev32, "rev32" , 0, 0, IF_EN2L, 0xDAC00800, 0x2E200800) |
| 555 | // rev32 Rd,Rm DR_2G 1101101011000000 000010nnnnnddddd DAC0 0800 Rd Rn (general) |
| 556 | // rev32 Vd,Vn DV_2M 0Q101110XX100000 000010nnnnnddddd 2E20 0800 Vd,Vn (vector) |
| 557 | |
| 558 | // enum name FP LD/ST DV_3A DV_3AI |
| 559 | INST2(mla, "mla" , 0, 0, IF_EN2M, 0x0E209400, 0x2F000000) |
| 560 | // mla Vd,Vn,Vm DV_3A 0Q001110XX1mmmmm 100101nnnnnddddd 0E20 9400 Vd,Vn,Vm (vector) |
| 561 | // mla Vd,Vn,Vm[] DV_3AI 0Q101111XXLMmmmm 0000H0nnnnnddddd 2F00 0000 Vd,Vn,Vm[] (vector by elem) |
| 562 | |
| 563 | INST2(mls, "mls" , 0, 0, IF_EN2M, 0x2E209400, 0x2F004000) |
| 564 | // mls Vd,Vn,Vm DV_3A 0Q101110XX1mmmmm 100101nnnnnddddd 2E20 9400 Vd,Vn,Vm (vector) |
| 565 | // mls Vd,Vn,Vm[] DV_3AI 0Q101111XXLMmmmm 0100H0nnnnnddddd 2F00 4000 Vd,Vn,Vm[] (vector by elem) |
| 566 | |
| 567 | // enum name FP LD/ST DV_2N DV_2O |
| 568 | INST2(sshr, "sshr" , 0, 0, IF_EN2N, 0x5F000400, 0x0F000400) |
| 569 | // sshr Vd,Vn,imm DV_2N 010111110iiiiiii 000001nnnnnddddd 5F00 0400 Vd Vn imm (shift - scalar) |
| 570 | // sshr Vd,Vn,imm DV_2O 0Q0011110iiiiiii 000001nnnnnddddd 0F00 0400 Vd,Vn imm (shift - vector) |
| 571 | |
| 572 | INST2(ssra, "ssra" , 0, 0, IF_EN2N, 0x5F001400, 0x0F001400) |
| 573 | // ssra Vd,Vn,imm DV_2N 010111110iiiiiii 000101nnnnnddddd 5F00 1400 Vd Vn imm (shift - scalar) |
| 574 | // ssra Vd,Vn,imm DV_2O 0Q0011110iiiiiii 000101nnnnnddddd 0F00 1400 Vd,Vn imm (shift - vector) |
| 575 | |
| 576 | INST2(srshr, "srshr" , 0, 0, IF_EN2N, 0x5F002400, 0x0F002400) |
| 577 | // srshr Vd,Vn,imm DV_2N 010111110iiiiiii 001001nnnnnddddd 5F00 0400 Vd Vn imm (shift - scalar) |
| 578 | // srshr Vd,Vn,imm DV_2O 0Q0011110iiiiiii 001001nnnnnddddd 0F00 0400 Vd,Vn imm (shift - vector) |
| 579 | |
| 580 | INST2(srsra, "srsra" , 0, 0, IF_EN2N, 0x5F003400, 0x0F003400) |
| 581 | // srsra Vd,Vn,imm DV_2N 010111110iiiiiii 001101nnnnnddddd 5F00 1400 Vd Vn imm (shift - scalar) |
| 582 | // srsra Vd,Vn,imm DV_2O 0Q0011110iiiiiii 001101nnnnnddddd 0F00 1400 Vd,Vn imm (shift - vector) |
| 583 | |
| 584 | INST2(shl, "shl" , 0, 0, IF_EN2N, 0x5F005400, 0x0F005400) |
| 585 | // shl Vd,Vn,imm DV_2N 010111110iiiiiii 010101nnnnnddddd 5F00 5400 Vd Vn imm (shift - scalar) |
| 586 | // shl Vd,Vn,imm DV_2O 0Q0011110iiiiiii 010101nnnnnddddd 0F00 5400 Vd,Vn imm (shift - vector) |
| 587 | |
| 588 | INST2(ushr, "ushr" , 0, 0, IF_EN2N, 0x7F000400, 0x2F000400) |
| 589 | // ushr Vd,Vn,imm DV_2N 011111110iiiiiii 000001nnnnnddddd 7F00 0400 Vd Vn imm (shift - scalar) |
| 590 | // ushr Vd,Vn,imm DV_2O 0Q1011110iiiiiii 000001nnnnnddddd 2F00 0400 Vd,Vn imm (shift - vector) |
| 591 | |
| 592 | INST2(usra, "usra" , 0, 0, IF_EN2N, 0x7F001400, 0x2F001400) |
| 593 | // usra Vd,Vn,imm DV_2N 011111110iiiiiii 000101nnnnnddddd 7F00 1400 Vd Vn imm (shift - scalar) |
| 594 | // usra Vd,Vn,imm DV_2O 0Q1011110iiiiiii 000101nnnnnddddd 2F00 1400 Vd,Vn imm (shift - vector) |
| 595 | |
| 596 | INST2(urshr, "urshr" , 0, 0, IF_EN2N, 0x7F002400, 0x2F002400) |
| 597 | // urshr Vd,Vn,imm DV_2N 011111110iiiiiii 001001nnnnnddddd 7F00 2400 Vd Vn imm (shift - scalar) |
| 598 | // urshr Vd,Vn,imm DV_2O 0Q1011110iiiiiii 001001nnnnnddddd 2F00 2400 Vd,Vn imm (shift - vector) |
| 599 | |
| 600 | INST2(ursra, "ursra" , 0, 0, IF_EN2N, 0x7F003400, 0x2F003400) |
| 601 | // ursra Vd,Vn,imm DV_2N 011111110iiiiiii 001101nnnnnddddd 7F00 3400 Vd Vn imm (shift - scalar) |
| 602 | // ursra Vd,Vn,imm DV_2O 0Q1011110iiiiiii 001101nnnnnddddd 2F00 3400 Vd,Vn imm (shift - vector) |
| 603 | |
| 604 | INST2(sri, "sri" , 0, 0, IF_EN2N, 0x7F004400, 0x2F004400) |
| 605 | // sri Vd,Vn,imm DV_2N 011111110iiiiiii 010001nnnnnddddd 7F00 4400 Vd Vn imm (shift - scalar) |
| 606 | // sri Vd,Vn,imm DV_2O 0Q1011110iiiiiii 010001nnnnnddddd 2F00 4400 Vd,Vn imm (shift - vector) |
| 607 | |
| 608 | INST2(sli, "sli" , 0, 0, IF_EN2N, 0x7F005400, 0x2F005400) |
| 609 | // sli Vd,Vn,imm DV_2N 011111110iiiiiii 010101nnnnnddddd 7F00 5400 Vd Vn imm (shift - scalar) |
| 610 | // sli Vd,Vn,imm DV_2O 0Q1011110iiiiiii 010101nnnnnddddd 2F00 5400 Vd,Vn imm (shift - vector) |
| 611 | |
| 612 | // enum name FP LD/ST DV_3E DV_3A |
| 613 | INST2(cmhi, "cmhi" , 0, 0, IF_EN2O, 0x7EE03400, 0x2E203400) |
| 614 | // cmhi Vd,Vn,Vm DV_3E 01111110111mmmmm 001101nnnnnddddd 7EE0 3400 Vd,Vn,Vm (scalar) |
| 615 | // cmhi Vd,Vn,Vm DV_3A 0Q101110XX1mmmmm 001101nnnnnddddd 2E20 3400 Vd,Vn,Vm (vector) |
| 616 | |
| 617 | INST2(cmhs, "cmhs" , 0, 0, IF_EN2O, 0x7EE03C00, 0x2E203C00) |
| 618 | // cmhs Vd,Vn,Vm DV_3E 01111110111mmmmm 001111nnnnnddddd 7EE0 3C00 Vd,Vn,Vm (scalar) |
| 619 | // cmhs Vd,Vn,Vm DV_3A 0Q101110XX1mmmmm 001111nnnnnddddd 2E20 3C00 Vd,Vn,Vm (vector) |
| 620 | |
| 621 | INST2(ctst, "ctst" , 0, 0, IF_EN2O, 0x5EE08C00, 0x0E208C00) |
| 622 | // ctst Vd,Vn,Vm DV_3E 01011110111mmmmm 100011nnnnnddddd 5EE0 8C00 Vd,Vn,Vm (scalar) |
| 623 | // ctst Vd,Vn,Vm DV_3A 0Q001110XX1mmmmm 100011nnnnnddddd 0E20 8C00 Vd,Vn,Vm (vector) |
| 624 | |
| 625 | // enum name FP LD/ST DV_2G DV_3B |
| 626 | INST2(faddp, "faddp" , 0, 0, IF_EN2P, 0x7E30D800, 0x2E20D400) |
| 627 | // faddp Vd,Vn DV_2G 011111100X110000 110110nnnnnddddd 7E30 D800 Vd,Vn (scalar) |
| 628 | // faddp Vd,Vn,Vm DV_3B 0Q1011100X1mmmmm 110101nnnnnddddd 2E20 D400 Vd,Vn,Vm (vector) |
| 629 | |
| 630 | INST1(ldar, "ldar" , 0,LD, IF_LS_2A, 0x88DFFC00) |
| 631 | // ldar Rt,[Xn] LS_2A 1X00100011011111 111111nnnnnttttt 88DF FC00 |
| 632 | |
| 633 | INST1(ldarb, "ldarb" , 0,LD, IF_LS_2A, 0x08DFFC00) |
| 634 | // ldarb Rt,[Xn] LS_2A 0000100011011111 111111nnnnnttttt 08DF FC00 |
| 635 | |
| 636 | INST1(ldarh, "ldarh" , 0,LD, IF_LS_2A, 0x48DFFC00) |
| 637 | // ldarh Rt,[Xn] LS_2A 0100100011011111 111111nnnnnttttt 48DF FC00 |
| 638 | |
| 639 | INST1(ldxr, "ldxr" , 0,LD, IF_LS_2A, 0x885F7C00) |
| 640 | // ldxr Rt,[Xn] LS_2A 1X00100001011111 011111nnnnnttttt 885F 7C00 |
| 641 | |
| 642 | INST1(ldxrb, "ldxrb" , 0,LD, IF_LS_2A, 0x085F7C00) |
| 643 | // ldxrb Rt,[Xn] LS_2A 0000100001011111 011111nnnnnttttt 085F 7C00 |
| 644 | |
| 645 | INST1(ldxrh, "ldxrh" , 0,LD, IF_LS_2A, 0x485F7C00) |
| 646 | // ldxrh Rt,[Xn] LS_2A 0100100001011111 011111nnnnnttttt 485F 7C00 |
| 647 | |
| 648 | INST1(ldaxr, "ldaxr" , 0,LD, IF_LS_2A, 0x885FFC00) |
| 649 | // ldaxr Rt,[Xn] LS_2A 1X00100001011111 111111nnnnnttttt 885F FC00 |
| 650 | |
| 651 | INST1(ldaxrb, "ldaxrb" , 0,LD, IF_LS_2A, 0x085FFC00) |
| 652 | // ldaxrb Rt,[Xn] LS_2A 0000100001011111 111111nnnnnttttt 085F FC00 |
| 653 | |
| 654 | INST1(ldaxrh, "ldaxrh" , 0,LD, IF_LS_2A, 0x485FFC00) |
| 655 | // ldaxrh Rt,[Xn] LS_2A 0100100001011111 111111nnnnnttttt 485F FC00 |
| 656 | |
| 657 | INST1(ldur, "ldur" , 0,LD, IF_LS_2C, 0xB8400000) |
| 658 | // ldur Rt,[Xn+simm9] LS_2C 1X111000010iiiii iiii00nnnnnttttt B840 0000 [Xn imm(-256..+255)] |
| 659 | |
| 660 | INST1(ldurb, "ldurb" , 0,LD, IF_LS_2C, 0x38400000) |
| 661 | // ldurb Rt,[Xn+simm9] LS_2C 00111000010iiiii iiii00nnnnnttttt 3840 0000 [Xn imm(-256..+255)] |
| 662 | |
| 663 | INST1(ldurh, "ldurh" , 0,LD, IF_LS_2C, 0x78400000) |
| 664 | // ldurh Rt,[Xn+simm9] LS_2C 01111000010iiiii iiii00nnnnnttttt 7840 0000 [Xn imm(-256..+255)] |
| 665 | |
| 666 | INST1(ldursb, "ldursb" , 0,LD, IF_LS_2C, 0x38800000) |
| 667 | // ldursb Rt,[Xn+simm9] LS_2C 001110001X0iiiii iiii00nnnnnttttt 3880 0000 [Xn imm(-256..+255)] |
| 668 | |
| 669 | INST1(ldursh, "ldursh" , 0,LD, IF_LS_2C, 0x78800000) |
| 670 | // ldursh Rt,[Xn+simm9] LS_2C 011110001X0iiiii iiii00nnnnnttttt 7880 0000 [Xn imm(-256..+255)] |
| 671 | |
| 672 | INST1(ldursw, "ldursw" , 0,LD, IF_LS_2C, 0xB8800000) |
| 673 | // ldursw Rt,[Xn+simm9] LS_2C 10111000100iiiii iiii00nnnnnttttt B880 0000 [Xn imm(-256..+255)] |
| 674 | |
| 675 | INST1(stlr, "stlr" , 0,ST, IF_LS_2A, 0x889FFC00) |
| 676 | // stlr Rt,[Xn] LS_2A 1X00100010011111 111111nnnnnttttt 889F FC00 |
| 677 | |
| 678 | INST1(stlrb, "stlrb" , 0,ST, IF_LS_2A, 0x089FFC00) |
| 679 | // stlrb Rt,[Xn] LS_2A 0000100010011111 111111nnnnnttttt 089F FC00 |
| 680 | |
| 681 | INST1(stlrh, "stlrh" , 0,ST, IF_LS_2A, 0x489FFC00) |
| 682 | // stlrh Rt,[Xn] LS_2A 0100100010011111 111111nnnnnttttt 489F FC00 |
| 683 | |
| 684 | INST1(stxr, "stxr" , 0,ST, IF_LS_3D, 0x88007C00) |
| 685 | // stxr Ws, Rt,[Xn] LS_3D 1X001000000sssss 011111nnnnnttttt 8800 7C00 |
| 686 | |
| 687 | INST1(stxrb, "stxrb" , 0,ST, IF_LS_3D, 0x08007C00) |
| 688 | // stxrb Ws, Rt,[Xn] LS_3D 00001000000sssss 011111nnnnnttttt 0800 7C00 |
| 689 | |
| 690 | INST1(stxrh, "stxrh" , 0,ST, IF_LS_3D, 0x48007C00) |
| 691 | // stxrh Ws, Rt,[Xn] LS_3D 01001000000sssss 011111nnnnnttttt 4800 7C00 |
| 692 | |
| 693 | INST1(stlxr, "stlxr" , 0,ST, IF_LS_3D, 0x8800FC00) |
| 694 | // stlxr Ws, Rt,[Xn] LS_3D 1X001000000sssss 111111nnnnnttttt 8800 FC00 |
| 695 | |
| 696 | INST1(stlxrb, "stlxrb" , 0,ST, IF_LS_3D, 0x0800FC00) |
| 697 | // stlxrb Ws, Rt,[Xn] LS_3D 00001000000sssss 111111nnnnnttttt 0800 FC00 |
| 698 | |
| 699 | INST1(stlxrh, "stlxrh" , 0,ST, IF_LS_3D, 0x4800FC00) |
| 700 | // stlxrh Ws, Rt,[Xn] LS_3D 01001000000sssss 111111nnnnnttttt 4800 FC00 |
| 701 | |
| 702 | INST1(stur, "stur" , 0,ST, IF_LS_2C, 0xB8000000) |
| 703 | // stur Rt,[Xn+simm9] LS_2C 1X111000000iiiii iiii00nnnnnttttt B800 0000 [Xn imm(-256..+255)] |
| 704 | |
| 705 | INST1(sturb, "sturb" , 0,ST, IF_LS_2C, 0x38000000) |
| 706 | // sturb Rt,[Xn+simm9] LS_2C 00111000000iiiii iiii00nnnnnttttt 3800 0000 [Xn imm(-256..+255)] |
| 707 | |
| 708 | INST1(sturh, "sturh" , 0,ST, IF_LS_2C, 0x78000000) |
| 709 | // sturh Rt,[Xn+simm9] LS_2C 01111000000iiiii iiii00nnnnnttttt 7800 0000 [Xn imm(-256..+255)] |
| 710 | |
| 711 | INST1(casb, "casb" , 0, LD|ST, IF_LS_3E, 0x08A07C00) |
| 712 | // casb Wm, Wt, [Xn] LS_3E 00001000101mmmmm 011111nnnnnttttt 08A0 7C00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 713 | |
| 714 | INST1(casab, "casab" , 0, LD|ST, IF_LS_3E, 0x08E07C00) |
| 715 | // casab Wm, Wt, [Xn] LS_3E 00001000111mmmmm 011111nnnnnttttt 08E0 7C00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 716 | |
| 717 | INST1(casalb, "casalb" , 0, LD|ST, IF_LS_3E, 0x08E0FC00) |
| 718 | // casalb Wm, Wt, [Xn] LS_3E 00001000111mmmmm 111111nnnnnttttt 08E0 FC00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 719 | |
| 720 | INST1(caslb, "caslb" , 0, LD|ST, IF_LS_3E, 0x08A0FC00) |
| 721 | // caslb Wm, Wt, [Xn] LS_3E 00001000101mmmmm 111111nnnnnttttt 08A0 FC00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 722 | |
| 723 | INST1(cash, "cash" , 0, LD|ST, IF_LS_3E, 0x48A07C00) |
| 724 | // cash Wm, Wt, [Xn] LS_3E 01001000101mmmmm 011111nnnnnttttt 48A0 7C00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 725 | |
| 726 | INST1(casah, "casah" , 0, LD|ST, IF_LS_3E, 0x48E07C00) |
| 727 | // casah Wm, Wt, [Xn] LS_3E 01001000111mmmmm 011111nnnnnttttt 48E0 7C00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 728 | |
| 729 | INST1(casalh, "casalh" , 0, LD|ST, IF_LS_3E, 0x48E0FC00) |
| 730 | // casalh Wm, Wt, [Xn] LS_3E 01001000111mmmmm 111111nnnnnttttt 48E0 FC00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 731 | |
| 732 | INST1(caslh, "caslh" , 0, LD|ST, IF_LS_3E, 0x48A0FC00) |
| 733 | // caslh Wm, Wt, [Xn] LS_3E 01001000101mmmmm 111111nnnnnttttt 48A0 FC00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 734 | |
| 735 | INST1(cas, "cas" , 0, LD|ST, IF_LS_3E, 0x88A07C00) |
| 736 | // cas Rm, Rt, [Xn] LS_3E 1X001000101mmmmm 011111nnnnnttttt 88A0 7C00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 737 | |
| 738 | INST1(casa, "casa" , 0, LD|ST, IF_LS_3E, 0x88E07C00) |
| 739 | // casa Rm, Rt, [Xn] LS_3E 1X001000111mmmmm 011111nnnnnttttt 88E0 7C00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 740 | |
| 741 | INST1(casal, "casal" , 0, LD|ST, IF_LS_3E, 0x88E0FC00) |
| 742 | // casal Rm, Rt, [Xn] LS_3E 1X001000111mmmmm 111111nnnnnttttt 88E0 FC00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 743 | |
| 744 | INST1(casl, "casl" , 0, LD|ST, IF_LS_3E, 0x88A0FC00) |
| 745 | // casl Rm, Rt, [Xn] LS_3E 1X001000101mmmmm 111111nnnnnttttt 88A0 FC00 Rm Rt Rn ARMv8.1 LSE Atomics |
| 746 | |
| 747 | INST1(ldaddb, "ldaddb" , 0, LD|ST, IF_LS_3E, 0x38200000) |
| 748 | // ldaddb Wm, Wt, [Xn] LS_3E 00111000001mmmmm 000000nnnnnttttt 3820 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 749 | |
| 750 | INST1(ldaddab, "ldaddab" , 0, LD|ST, IF_LS_3E, 0x38A00000) |
| 751 | // ldaddab Wm, Wt, [Xn] LS_3E 00111000101mmmmm 000000nnnnnttttt 38A0 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 752 | |
| 753 | INST1(ldaddalb,"ldaddalb" ,0, LD|ST, IF_LS_3E, 0x38E00000) |
| 754 | // ldaddalb Wm, Wt, [Xn] LS_3E 00111000111mmmmm 000000nnnnnttttt 38E0 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 755 | |
| 756 | INST1(ldaddlb, "ldaddlb" , 0, LD|ST, IF_LS_3E, 0x38600000) |
| 757 | // ldaddlb Wm, Wt, [Xn] LS_3E 00111000011mmmmm 000000nnnnnttttt 3860 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 758 | |
| 759 | INST1(ldaddh, "ldaddh" , 0, LD|ST, IF_LS_3E, 0x78200000) |
| 760 | // ldaddh Wm, Wt, [Xn] LS_3E 01111000001mmmmm 000000nnnnnttttt 7820 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 761 | |
| 762 | INST1(ldaddah, "ldaddah" , 0, LD|ST, IF_LS_3E, 0x78A00000) |
| 763 | // ldaddah Wm, Wt, [Xn] LS_3E 01111000101mmmmm 000000nnnnnttttt 78A0 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 764 | |
| 765 | INST1(ldaddalh,"ldaddalh" ,0, LD|ST, IF_LS_3E, 0x78E00000) |
| 766 | // ldaddalh Wm, Wt, [Xn] LS_3E 01111000111mmmmm 000000nnnnnttttt 78E0 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 767 | |
| 768 | INST1(ldaddlh, "ldaddlh" , 0, LD|ST, IF_LS_3E, 0x78600000) |
| 769 | // ldaddlh Wm, Wt, [Xn] LS_3E 01111000011mmmmm 000000nnnnnttttt 7860 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 770 | |
| 771 | INST1(ldadd, "ldadd" , 0, LD|ST, IF_LS_3E, 0xB8200000) |
| 772 | // ldadd Rm, Rt, [Xn] LS_3E 1X111000001mmmmm 000000nnnnnttttt B820 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 773 | |
| 774 | INST1(ldadda, "ldadda" , 0, LD|ST, IF_LS_3E, 0xB8A00000) |
| 775 | // ldadda Rm, Rt, [Xn] LS_3E 1X111000101mmmmm 000000nnnnnttttt B8A0 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 776 | |
| 777 | INST1(ldaddal, "ldaddal" , 0, LD|ST, IF_LS_3E, 0xB8E00000) |
| 778 | // ldaddal Rm, Rt, [Xn] LS_3E 1X111000111mmmmm 000000nnnnnttttt B8E0 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 779 | |
| 780 | INST1(ldaddl, "ldaddl" , 0, LD|ST, IF_LS_3E, 0xB8600000) |
| 781 | // ldaddl Rm, Rt, [Xn] LS_3E 1X111000011mmmmm 000000nnnnnttttt B860 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 782 | |
| 783 | INST1(staddb, "staddb" , 0, ST, IF_LS_3E, 0x38200000) |
| 784 | // staddb Wm, [Xn] LS_3E 00111000001mmmmm 000000nnnnnttttt 3820 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 785 | |
| 786 | INST1(staddlb, "staddlb" , 0, ST, IF_LS_3E, 0x38600000) |
| 787 | // staddlb Wm, [Xn] LS_3E 00111000011mmmmm 000000nnnnnttttt 3860 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 788 | |
| 789 | INST1(staddh, "staddh" , 0, ST, IF_LS_3E, 0x78200000) |
| 790 | // staddh Wm, [Xn] LS_3E 01111000001mmmmm 000000nnnnnttttt 7820 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 791 | |
| 792 | INST1(staddlh, "staddlh" , 0, ST, IF_LS_3E, 0x78600000) |
| 793 | // staddlh Wm, [Xn] LS_3E 01111000011mmmmm 000000nnnnnttttt 7860 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 794 | |
| 795 | INST1(stadd, "stadd" , 0, ST, IF_LS_3E, 0xB8200000) |
| 796 | // stadd Rm, [Xn] LS_3E 1X111000001mmmmm 000000nnnnnttttt B820 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 797 | |
| 798 | INST1(staddl, "staddl" , 0, ST, IF_LS_3E, 0xB8600000) |
| 799 | // staddl Rm, [Xn] LS_3E 1X111000011mmmmm 000000nnnnnttttt B860 0000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 800 | |
| 801 | INST1(swpb, "swpb" , 0, LD|ST, IF_LS_3E, 0x38208000) |
| 802 | // swpb Wm, Wt, [Xn] LS_3E 00111000001mmmmm 100000nnnnnttttt 3820 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 803 | |
| 804 | INST1(swpab, "swpab" , 0, LD|ST, IF_LS_3E, 0x38A08000) |
| 805 | // swpab Wm, Wt, [Xn] LS_3E 00111000101mmmmm 100000nnnnnttttt 38A0 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 806 | |
| 807 | INST1(swpalb, "swpalb" , 0, LD|ST, IF_LS_3E, 0x38E08000) |
| 808 | // swpalb Wm, Wt, [Xn] LS_3E 00111000111mmmmm 100000nnnnnttttt 38E0 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 809 | |
| 810 | INST1(swplb, "swplb" , 0, LD|ST, IF_LS_3E, 0x38608000) |
| 811 | // swplb Wm, Wt, [Xn] LS_3E 00111000011mmmmm 100000nnnnnttttt 3860 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 812 | |
| 813 | INST1(swph, "swph" , 0, LD|ST, IF_LS_3E, 0x78208000) |
| 814 | // swph Wm, Wt, [Xn] LS_3E 01111000001mmmmm 100000nnnnnttttt 7820 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 815 | |
| 816 | INST1(swpah, "swpah" , 0, LD|ST, IF_LS_3E, 0x78A08000) |
| 817 | // swpah Wm, Wt, [Xn] LS_3E 01111000101mmmmm 100000nnnnnttttt 78A0 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 818 | |
| 819 | INST1(swpalh, "swpalh" , 0, LD|ST, IF_LS_3E, 0x78E08000) |
| 820 | // swpalh Wm, Wt, [Xn] LS_3E 01111000111mmmmm 100000nnnnnttttt 78E0 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 821 | |
| 822 | INST1(swplh, "swplh" , 0, LD|ST, IF_LS_3E, 0x78608000) |
| 823 | // swplh Wm, Wt, [Xn] LS_3E 01111000011mmmmm 100000nnnnnttttt 7860 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 824 | |
| 825 | INST1(swp, "swp" , 0, LD|ST, IF_LS_3E, 0xB8208000) |
| 826 | // swp Rm, Rt, [Xn] LS_3E 1X111000001mmmmm 100000nnnnnttttt B820 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 827 | |
| 828 | INST1(swpa, "swpa" , 0, LD|ST, IF_LS_3E, 0xB8A08000) |
| 829 | // swpa Rm, Rt, [Xn] LS_3E 1X111000101mmmmm 100000nnnnnttttt B8A0 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 830 | |
| 831 | INST1(swpal, "swpal" , 0, LD|ST, IF_LS_3E, 0xB8E08000) |
| 832 | // swpal Rm, Rt, [Xn] LS_3E 1X111000111mmmmm 100000nnnnnttttt B8E0 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 833 | |
| 834 | INST1(swpl, "swpl" , 0, LD|ST, IF_LS_3E, 0xB8608000) |
| 835 | // swpl Rm, Rt, [Xn] LS_3E 1X111000011mmmmm 100000nnnnnttttt B860 8000 Rm Rt Rn ARMv8.1 LSE Atomics |
| 836 | |
| 837 | INST1(adr, "adr" , 0, 0, IF_DI_1E, 0x10000000) |
| 838 | // adr Rd, simm21 DI_1E 0ii10000iiiiiiii iiiiiiiiiiiddddd 1000 0000 Rd simm21 |
| 839 | |
| 840 | INST1(adrp, "adrp" , 0, 0, IF_DI_1E, 0x90000000) |
| 841 | // adrp Rd, simm21 DI_1E 1ii10000iiiiiiii iiiiiiiiiiiddddd 9000 0000 Rd simm21 |
| 842 | |
| 843 | INST1(b, "b" , 0, 0, IF_BI_0A, 0x14000000) |
| 844 | // b simm26 BI_0A 000101iiiiiiiiii iiiiiiiiiiiiiiii 1400 0000 simm26:00 |
| 845 | |
| 846 | INST1(b_tail, "b" , 0, 0, IF_BI_0C, 0x14000000) |
| 847 | // b simm26 BI_0A 000101iiiiiiiiii iiiiiiiiiiiiiiii 1400 0000 simm26:00, same as b representing a tail call of bl. |
| 848 | |
| 849 | INST1(bl_local,"bl" , 0, 0, IF_BI_0A, 0x94000000) |
| 850 | // bl simm26 BI_0A 100101iiiiiiiiii iiiiiiiiiiiiiiii 9400 0000 simm26:00, same as bl, but with a BasicBlock target. |
| 851 | |
| 852 | INST1(bl, "bl" , 0, 0, IF_BI_0C, 0x94000000) |
| 853 | // bl simm26 BI_0C 100101iiiiiiiiii iiiiiiiiiiiiiiii 9400 0000 simm26:00 |
| 854 | |
| 855 | INST1(br, "br" , 0, 0, IF_BR_1A, 0xD61F0000) |
| 856 | // br Rn BR_1A 1101011000011111 000000nnnnn00000 D61F 0000, an indirect branch like switch expansion |
| 857 | |
| 858 | INST1(br_tail, "br" , 0, 0, IF_BR_1B, 0xD61F0000) |
| 859 | // br Rn BR_1B 1101011000011111 000000nnnnn00000 D61F 0000, same as br representing a tail call of blr. Encode target with Reg3. |
| 860 | |
| 861 | INST1(blr, "blr" , 0, 0, IF_BR_1B, 0xD63F0000) |
| 862 | // blr Rn BR_1B 1101011000111111 000000nnnnn00000 D63F 0000, Encode target with Reg3. |
| 863 | |
| 864 | INST1(ret, "ret" , 0, 0, IF_BR_1A, 0xD65F0000) |
| 865 | // ret Rn BR_1A 1101011001011111 000000nnnnn00000 D65F 0000 |
| 866 | |
| 867 | INST1(beq, "beq" , 0, 0, IF_BI_0B, 0x54000000) |
| 868 | // beq simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii00000 5400 0000 simm19:00 |
| 869 | |
| 870 | INST1(bne, "bne" , 0, 0, IF_BI_0B, 0x54000001) |
| 871 | // bne simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii00001 5400 0001 simm19:00 |
| 872 | |
| 873 | INST1(bhs, "bhs" , 0, 0, IF_BI_0B, 0x54000002) |
| 874 | // bhs simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii00010 5400 0002 simm19:00 |
| 875 | |
| 876 | INST1(blo, "blo" , 0, 0, IF_BI_0B, 0x54000003) |
| 877 | // blo simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii00011 5400 0003 simm19:00 |
| 878 | |
| 879 | INST1(bmi, "bmi" , 0, 0, IF_BI_0B, 0x54000004) |
| 880 | // bmi simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii00100 5400 0004 simm19:00 |
| 881 | |
| 882 | INST1(bpl, "bpl" , 0, 0, IF_BI_0B, 0x54000005) |
| 883 | // bpl simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii00101 5400 0005 simm19:00 |
| 884 | |
| 885 | INST1(bvs, "bvs" , 0, 0, IF_BI_0B, 0x54000006) |
| 886 | // bvs simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii00110 5400 0006 simm19:00 |
| 887 | |
| 888 | INST1(bvc, "bvc" , 0, 0, IF_BI_0B, 0x54000007) |
| 889 | // bvc simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii00111 5400 0007 simm19:00 |
| 890 | |
| 891 | INST1(bhi, "bhi" , 0, 0, IF_BI_0B, 0x54000008) |
| 892 | // bhi simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii01000 5400 0008 simm19:00 |
| 893 | |
| 894 | INST1(bls, "bls" , 0, 0, IF_BI_0B, 0x54000009) |
| 895 | // bls simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii01001 5400 0009 simm19:00 |
| 896 | |
| 897 | INST1(bge, "bge" , 0, 0, IF_BI_0B, 0x5400000A) |
| 898 | // bge simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii01010 5400 000A simm19:00 |
| 899 | |
| 900 | INST1(blt, "blt" , 0, 0, IF_BI_0B, 0x5400000B) |
| 901 | // blt simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii01011 5400 000B simm19:00 |
| 902 | |
| 903 | INST1(bgt, "bgt" , 0, 0, IF_BI_0B, 0x5400000C) |
| 904 | // bgt simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii01100 5400 000C simm19:00 |
| 905 | |
| 906 | INST1(ble, "ble" , 0, 0, IF_BI_0B, 0x5400000D) |
| 907 | // ble simm19 BI_0B 01010100iiiiiiii iiiiiiiiiii01101 5400 000D simm19:00 |
| 908 | |
| 909 | INST1(cbz, "cbz" , 0, 0, IF_BI_1A, 0x34000000) |
| 910 | // cbz Rt, simm19 BI_1A X0110100iiiiiiii iiiiiiiiiiittttt 3400 0000 Rt simm19:00 |
| 911 | |
| 912 | INST1(cbnz, "cbnz" , 0, 0, IF_BI_1A, 0x35000000) |
| 913 | // cbnz Rt, simm19 BI_1A X0110101iiiiiiii iiiiiiiiiiittttt 3500 0000 Rt simm19:00 |
| 914 | |
| 915 | INST1(tbz, "tbz" , 0, 0, IF_BI_1B, 0x36000000) |
| 916 | // tbz Rt, imm6, simm14 BI_1B B0110110bbbbbiii iiiiiiiiiiittttt 3600 0000 Rt imm6, simm14:00 |
| 917 | |
| 918 | INST1(tbnz, "tbnz" , 0, 0, IF_BI_1B, 0x37000000) |
| 919 | // tbnz Rt, imm6, simm14 BI_1B B0110111bbbbbiii iiiiiiiiiiittttt 3700 0000 Rt imm6, simm14:00 |
| 920 | |
| 921 | INST1(movk, "movk" , 0, 0, IF_DI_1B, 0x72800000) |
| 922 | // movk Rd,imm(i16,hw) DI_1B X11100101hwiiiii iiiiiiiiiiiddddd 7280 0000 imm(i16,hw) |
| 923 | |
| 924 | INST1(movn, "movn" , 0, 0, IF_DI_1B, 0x12800000) |
| 925 | // movn Rd,imm(i16,hw) DI_1B X00100101hwiiiii iiiiiiiiiiiddddd 1280 0000 imm(i16,hw) |
| 926 | |
| 927 | INST1(movz, "movz" , 0, 0, IF_DI_1B, 0x52800000) |
| 928 | // movz Rd,imm(i16,hw) DI_1B X10100101hwiiiii iiiiiiiiiiiddddd 5280 0000 imm(i16,hw) |
| 929 | |
| 930 | INST1(csel, "csel" , 0, 0, IF_DR_3D, 0x1A800000) |
| 931 | // csel Rd,Rn,Rm,cond DR_3D X0011010100mmmmm cccc00nnnnnddddd 1A80 0000 cond |
| 932 | |
| 933 | INST1(csinc, "csinc" , 0, 0, IF_DR_3D, 0x1A800400) |
| 934 | // csinc Rd,Rn,Rm,cond DR_3D X0011010100mmmmm cccc01nnnnnddddd 1A80 0400 cond |
| 935 | |
| 936 | INST1(csinv, "csinv" , 0, 0, IF_DR_3D, 0x5A800000) |
| 937 | // csinv Rd,Rn,Rm,cond DR_3D X1011010100mmmmm cccc00nnnnnddddd 5A80 0000 cond |
| 938 | |
| 939 | INST1(csneg, "csneg" , 0, 0, IF_DR_3D, 0x5A800400) |
| 940 | // csneg Rd,Rn,Rm,cond DR_3D X1011010100mmmmm cccc01nnnnnddddd 5A80 0400 cond |
| 941 | |
| 942 | INST1(cinc, "cinc" , 0, 0, IF_DR_2D, 0x1A800400) |
| 943 | // cinc Rd,Rn,cond DR_2D X0011010100nnnnn cccc01nnnnnddddd 1A80 0400 cond |
| 944 | |
| 945 | INST1(cinv, "cinv" , 0, 0, IF_DR_2D, 0x5A800000) |
| 946 | // cinv Rd,Rn,cond DR_2D X1011010100nnnnn cccc00nnnnnddddd 5A80 0000 cond |
| 947 | |
| 948 | INST1(cneg, "cneg" , 0, 0, IF_DR_2D, 0x5A800400) |
| 949 | // cneg Rd,Rn,cond DR_2D X1011010100nnnnn cccc01nnnnnddddd 5A80 0400 cond |
| 950 | |
| 951 | INST1(cset, "cset" , 0, 0, IF_DR_1D, 0x1A9F07E0) |
| 952 | // cset Rd,cond DR_1D X001101010011111 cccc0111111ddddd 1A9F 07E0 Rd cond |
| 953 | |
| 954 | INST1(csetm, "csetm" , 0, 0, IF_DR_1D, 0x5A9F03E0) |
| 955 | // csetm Rd,cond DR_1D X101101010011111 cccc0011111ddddd 5A9F 03E0 Rd cond |
| 956 | |
| 957 | INST1(aese, "aese" , 0, 0, IF_DV_2P, 0x4E284800) |
| 958 | // aese Vd.16B,Vn.16B DV_2P 0100111000101000 010010nnnnnddddd 4E28 4800 Vd.16B Vn.16B (vector) |
| 959 | |
| 960 | INST1(aesd, "aesd" , 0, 0, IF_DV_2P, 0x4E285800) |
| 961 | // aesd Vd.16B,Vn.16B DV_2P 0100111000101000 010110nnnnnddddd 4E28 5800 Vd.16B Vn.16B (vector) |
| 962 | |
| 963 | INST1(aesmc, "aesmc" , 0, 0, IF_DV_2P, 0x4E286800) |
| 964 | // aesmc Vd.16B,Vn.16B DV_2P 0100111000101000 011010nnnnnddddd 4E28 6800 Vd.16B Vn.16B (vector) |
| 965 | |
| 966 | INST1(aesimc, "aesimc" , 0, 0, IF_DV_2P, 0x4E287800) |
| 967 | // aesimc Vd.16B,Vn.16B DV_2P 0100111000101000 011110nnnnnddddd 4E28 7800 Vd.16B Vn.16B (vector) |
| 968 | |
| 969 | INST1(rev, "rev" , 0, 0, IF_DR_2G, 0x5AC00800) |
| 970 | // rev Rd,Rm DR_2G X101101011000000 00001Xnnnnnddddd 5AC0 0800 Rd Rn |
| 971 | |
| 972 | INST1(rev64, "rev64" , 0, 0, IF_DV_2M, 0x0E200800) |
| 973 | // rev64 Vd,Vn DV_2M 0Q001110XX100000 000010nnnnnddddd 0E20 0800 Vd,Vn (vector) |
| 974 | |
| 975 | INST1(adc, "adc" , 0, 0, IF_DR_3A, 0x1A000000) |
| 976 | // adc Rd,Rn,Rm DR_3A X0011010000mmmmm 000000nnnnnddddd 1A00 0000 |
| 977 | |
| 978 | INST1(adcs, "adcs" , 0, 0, IF_DR_3A, 0x3A000000) |
| 979 | // adcs Rd,Rn,Rm DR_3A X0111010000mmmmm 000000nnnnnddddd 3A00 0000 |
| 980 | |
| 981 | INST1(sbc, "sbc" , 0, 0, IF_DR_3A, 0x5A000000) |
| 982 | // sdc Rd,Rn,Rm DR_3A X1011010000mmmmm 000000nnnnnddddd 5A00 0000 |
| 983 | |
| 984 | INST1(sbcs, "sbcs" , 0, 0, IF_DR_3A, 0x7A000000) |
| 985 | // sdcs Rd,Rn,Rm DR_3A X1111010000mmmmm 000000nnnnnddddd 7A00 0000 |
| 986 | |
| 987 | INST1(udiv, "udiv" , 0, 0, IF_DR_3A, 0x1AC00800) |
| 988 | // udiv Rd,Rn,Rm DR_3A X0011010110mmmmm 000010nnnnnddddd 1AC0 0800 |
| 989 | |
| 990 | INST1(sdiv, "sdiv" , 0, 0, IF_DR_3A, 0x1AC00C00) |
| 991 | // sdiv Rd,Rn,Rm DR_3A X0011010110mmmmm 000011nnnnnddddd 1AC0 0C00 |
| 992 | |
| 993 | INST1(mneg, "mneg" , 0, 0, IF_DR_3A, 0x1B00FC00) |
| 994 | // mneg Rd,Rn,Rm DR_3A X0011011000mmmmm 111111nnnnnddddd 1B00 FC00 |
| 995 | |
| 996 | INST1(madd, "madd" , 0, 0, IF_DR_4A, 0x1B000000) |
| 997 | // madd Rd,Rn,Rm,Ra DR_4A X0011011000mmmmm 0aaaaannnnnddddd 1B00 0000 |
| 998 | |
| 999 | INST1(msub, "msub" , 0, 0, IF_DR_4A, 0x1B008000) |
| 1000 | // msub Rd,Rn,Rm,Ra DR_4A X0011011000mmmmm 1aaaaannnnnddddd 1B00 8000 |
| 1001 | |
| 1002 | INST1(smull, "smull" , 0, 0, IF_DR_3A, 0x9B207C00) |
| 1003 | // smull Rd,Rn,Rm DR_3A 10011011001mmmmm 011111nnnnnddddd 9B20 7C00 |
| 1004 | |
| 1005 | INST1(smaddl, "smaddl" , 0, 0, IF_DR_4A, 0x9B200000) |
| 1006 | // smaddl Rd,Rn,Rm,Ra DR_4A 10011011001mmmmm 0aaaaannnnnddddd 9B20 0000 |
| 1007 | |
| 1008 | INST1(smnegl, "smnegl" , 0, 0, IF_DR_3A, 0x9B20FC00) |
| 1009 | // smnegl Rd,Rn,Rm DR_3A 10011011001mmmmm 111111nnnnnddddd 9B20 FC00 |
| 1010 | |
| 1011 | INST1(smsubl, "smsubl" , 0, 0, IF_DR_4A, 0x9B208000) |
| 1012 | // smsubl Rd,Rn,Rm,Ra DR_4A 10011011001mmmmm 1aaaaannnnnddddd 9B20 8000 |
| 1013 | |
| 1014 | INST1(smulh, "smulh" , 0, 0, IF_DR_3A, 0x9B407C00) |
| 1015 | // smulh Rd,Rn,Rm DR_3A 10011011010mmmmm 011111nnnnnddddd 9B40 7C00 |
| 1016 | |
| 1017 | INST1(umull, "umull" , 0, 0, IF_DR_3A, 0x9BA07C00) |
| 1018 | // umull Rd,Rn,Rm DR_3A 10011011101mmmmm 011111nnnnnddddd 9BA0 7C00 |
| 1019 | |
| 1020 | INST1(umaddl, "umaddl" , 0, 0, IF_DR_4A, 0x9BA00000) |
| 1021 | // umaddl Rd,Rn,Rm,Ra DR_4A 10011011101mmmmm 0aaaaannnnnddddd 9BA0 0000 |
| 1022 | |
| 1023 | INST1(umnegl, "umnegl" , 0, 0, IF_DR_3A, 0x9BA0FC00) |
| 1024 | // umnegl Rd,Rn,Rm DR_3A 10011011101mmmmm 111111nnnnnddddd 9BA0 FC00 |
| 1025 | |
| 1026 | INST1(umsubl, "umsubl" , 0, 0, IF_DR_4A, 0x9BA08000) |
| 1027 | // umsubl Rd,Rn,Rm,Ra DR_4A 10011011101mmmmm 1aaaaannnnnddddd 9BA0 8000 |
| 1028 | |
| 1029 | INST1(umulh, "umulh" , 0, 0, IF_DR_3A, 0x9BC07C00) |
| 1030 | // umulh Rd,Rn,Rm DR_3A 10011011110mmmmm 011111nnnnnddddd 9BC0 7C00 |
| 1031 | |
| 1032 | INST1(extr, "extr" , 0, 0, IF_DR_3E, 0x13800000) |
| 1033 | // extr Rd,Rn,Rm,imm6 DR_3E X00100111X0mmmmm ssssssnnnnnddddd 1380 0000 imm(0-63) |
| 1034 | |
| 1035 | INST1(lslv, "lslv" , 0, 0, IF_DR_3A, 0x1AC02000) |
| 1036 | // lslv Rd,Rn,Rm DR_3A X0011010110mmmmm 001000nnnnnddddd 1AC0 2000 |
| 1037 | |
| 1038 | INST1(lsrv, "lsrv" , 0, 0, IF_DR_3A, 0x1AC02400) |
| 1039 | // lsrv Rd,Rn,Rm DR_3A X0011010110mmmmm 001001nnnnnddddd 1AC0 2400 |
| 1040 | |
| 1041 | INST1(asrv, "asrv" , 0, 0, IF_DR_3A, 0x1AC02800) |
| 1042 | // asrv Rd,Rn,Rm DR_3A X0011010110mmmmm 001010nnnnnddddd 1AC0 2800 |
| 1043 | |
| 1044 | INST1(rorv, "rorv" , 0, 0, IF_DR_3A, 0x1AC02C00) |
| 1045 | // rorv Rd,Rn,Rm DR_3A X0011010110mmmmm 001011nnnnnddddd 1AC0 2C00 |
| 1046 | |
| 1047 | INST1(sha1c, "sha1c" , 0, 0, IF_DV_3F, 0x5E000000) |
| 1048 | // sha1c Qd, Sn Vm.4S DV_3F 01011110000mmmmm 000000nnnnnddddd 5E00 0000 Qd Sn Vm.4S (vector) |
| 1049 | |
| 1050 | INST1(sha1m, "sha1m" , 0, 0, IF_DV_3F, 0x5E002000) |
| 1051 | // sha1m Qd, Sn Vm.4S DV_3F 01011110000mmmmm 001000nnnnnddddd 5E00 0000 Qd Sn Vm.4S (vector) |
| 1052 | |
| 1053 | INST1(sha1p, "sha1p" , 0, 0, IF_DV_3F, 0x5E001000) |
| 1054 | // sha1m Qd, Sn Vm.4S DV_3F 01011110000mmmmm 000100nnnnnddddd 5E00 0000 Qd Sn Vm.4S (vector) |
| 1055 | |
| 1056 | INST1(sha1h, "sha1h" , 0, 0, IF_DR_2J, 0x5E280800) |
| 1057 | // sha1h Sd, Sn DR_2H 0101111000101000 000010nnnnnddddd 5E28 0800 Sn Sn |
| 1058 | |
| 1059 | INST1(sha1su0, "sha1su0" , 0, 0, IF_DV_3F, 0x5E003000) |
| 1060 | // sha1su0 Vd.4S,Vn.4S,Vm.4S DV_3F 01011110000mmmmm 001100nnnnnddddd 5E00 3000 Vd.4S Vn.4S Vm.4S (vector) |
| 1061 | |
| 1062 | INST1(sha1su1, "sha1su1" , 0, 0, IF_DV_2P, 0x5E281800) |
| 1063 | // sha1su1 Vd.4S, Vn.4S DV_2P 0101111000101000 000110nnnnnddddd 5E28 1800 Vd.4S Vn.4S (vector) |
| 1064 | |
| 1065 | INST1(sha256h, "sha256h" , 0, 0, IF_DV_3F, 0x5E004000) |
| 1066 | // sha256h Qd,Qn,Vm.4S DV_3F 01011110000mmmmm 010000nnnnnddddd 5E00 4000 Qd Qn Vm.4S (vector) |
| 1067 | |
| 1068 | INST1(sha256h2, "sha256h2" , 0, 0, IF_DV_3F, 0x5E005000) |
| 1069 | // sha256h Qd,Qn,Vm.4S DV_3F 01011110000mmmmm 010100nnnnnddddd 5E00 5000 Qd Qn Vm.4S (vector) |
| 1070 | |
| 1071 | INST1(sha256su0, "sha256su0" , 0, 0, IF_DV_2P, 0x5E282800) |
| 1072 | // sha256su0 Vd.4S,Vn.4S DV_2P 0101111000101000 001010nnnnnddddd 5E28 2800 Vd.4S Vn.4S (vector) |
| 1073 | |
| 1074 | INST1(sha256su1, "sha256su1" , 0, 0, IF_DV_3F, 0x5E006000) |
| 1075 | // sha256su1 Vd.4S,Vn.4S,Vm.4S DV_3F 01011110000mmmmm 011000nnnnnddddd 5E00 6000 Vd.4S Vn.4S Vm.4S (vector) |
| 1076 | |
| 1077 | INST1(sbfm, "sbfm" , 0, 0, IF_DI_2D, 0x13000000) |
| 1078 | // sbfm Rd,Rn,imr,ims DI_2D X00100110Nrrrrrr ssssssnnnnnddddd 1300 0000 imr, ims |
| 1079 | |
| 1080 | INST1(bfm, "bfm" , 0, 0, IF_DI_2D, 0x33000000) |
| 1081 | // bfm Rd,Rn,imr,ims DI_2D X01100110Nrrrrrr ssssssnnnnnddddd 3300 0000 imr, ims |
| 1082 | |
| 1083 | INST1(ubfm, "ubfm" , 0, 0, IF_DI_2D, 0x53000000) |
| 1084 | // ubfm Rd,Rn,imr,ims DI_2D X10100110Nrrrrrr ssssssnnnnnddddd 5300 0000 imr, ims |
| 1085 | |
| 1086 | INST1(sbfiz, "sbfiz" , 0, 0, IF_DI_2D, 0x13000000) |
| 1087 | // sbfiz Rd,Rn,lsb,width DI_2D X00100110Nrrrrrr ssssssnnnnnddddd 1300 0000 imr, ims |
| 1088 | |
| 1089 | INST1(bfi, "bfi" , 0, 0, IF_DI_2D, 0x33000000) |
| 1090 | // bfi Rd,Rn,lsb,width DI_2D X01100110Nrrrrrr ssssssnnnnnddddd 3300 0000 imr, ims |
| 1091 | |
| 1092 | INST1(ubfiz, "ubfiz" , 0, 0, IF_DI_2D, 0x53000000) |
| 1093 | // ubfiz Rd,Rn,lsb,width DI_2D X10100110Nrrrrrr ssssssnnnnnddddd 5300 0000 imr, ims |
| 1094 | |
| 1095 | INST1(sbfx, "sbfx" , 0, 0, IF_DI_2D, 0x13000000) |
| 1096 | // sbfx Rd,Rn,lsb,width DI_2D X00100110Nrrrrrr ssssssnnnnnddddd 1300 0000 imr, ims |
| 1097 | |
| 1098 | INST1(bfxil, "bfxil" , 0, 0, IF_DI_2D, 0x33000000) |
| 1099 | // bfxil Rd,Rn,lsb,width DI_2D X01100110Nrrrrrr ssssssnnnnnddddd 3300 0000 imr, ims |
| 1100 | |
| 1101 | INST1(ubfx, "ubfx" , 0, 0, IF_DI_2D, 0x53000000) |
| 1102 | // ubfx Rd,Rn,lsb,width DI_2D X10100110Nrrrrrr ssssssnnnnnddddd 5300 0000 imr, ims |
| 1103 | |
| 1104 | INST1(sxtb, "sxtb" , 0, 0, IF_DR_2H, 0x13001C00) |
| 1105 | // sxtb Rd,Rn DR_2H X00100110X000000 000111nnnnnddddd 1300 1C00 |
| 1106 | |
| 1107 | INST1(sxth, "sxth" , 0, 0, IF_DR_2H, 0x13003C00) |
| 1108 | // sxth Rd,Rn DR_2H X00100110X000000 001111nnnnnddddd 1300 3C00 |
| 1109 | |
| 1110 | INST1(sxtw, "sxtw" , 0, 0, IF_DR_2H, 0x13007C00) |
| 1111 | // sxtw Rd,Rn DR_2H X00100110X000000 011111nnnnnddddd 1300 7C00 |
| 1112 | |
| 1113 | INST1(uxtb, "uxtb" , 0, 0, IF_DR_2H, 0x53001C00) |
| 1114 | // uxtb Rd,Rn DR_2H 0101001100000000 000111nnnnnddddd 5300 1C00 |
| 1115 | |
| 1116 | INST1(uxth, "uxth" , 0, 0, IF_DR_2H, 0x53003C00) |
| 1117 | // uxth Rd,Rn DR_2H 0101001100000000 001111nnnnnddddd 5300 3C00 |
| 1118 | |
| 1119 | INST1(nop, "nop" , 0, 0, IF_SN_0A, 0xD503201F) |
| 1120 | // nop SN_0A 1101010100000011 0010000000011111 D503 201F |
| 1121 | |
| 1122 | INST1(bkpt, "bkpt" , 0, 0, IF_SN_0A, 0xD43E0000) |
| 1123 | // brpt SN_0A 1101010000111110 0000000000000000 D43E 0000 0xF000 |
| 1124 | |
| 1125 | INST1(brk, "brk" , 0, 0, IF_SI_0A, 0xD4200000) |
| 1126 | // brk imm16 SI_0A 11010100001iiiii iiiiiiiiiii00000 D420 0000 imm16 |
| 1127 | |
| 1128 | INST1(dsb, "dsb" , 0, 0, IF_SI_0B, 0xD503309F) |
| 1129 | // dsb barrierKind SI_0B 1101010100000011 0011bbbb10011111 D503 309F imm4 - barrier kind |
| 1130 | |
| 1131 | INST1(dmb, "dmb" , 0, 0, IF_SI_0B, 0xD50330BF) |
| 1132 | // dmb barrierKind SI_0B 1101010100000011 0011bbbb10111111 D503 30BF imm4 - barrier kind |
| 1133 | |
| 1134 | INST1(isb, "isb" , 0, 0, IF_SI_0B, 0xD50330DF) |
| 1135 | // isb barrierKind SI_0B 1101010100000011 0011bbbb11011111 D503 30DF imm4 - barrier kind |
| 1136 | |
| 1137 | INST1(umov, "umov" , 0, 0, IF_DV_2B, 0x0E003C00) |
| 1138 | // umov Rd,Vn[] DV_2B 0Q001110000iiiii 001111nnnnnddddd 0E00 3C00 Rd,Vn[] |
| 1139 | |
| 1140 | INST1(smov, "smov" , 0, 0, IF_DV_2B, 0x0E002C00) |
| 1141 | // smov Rd,Vn[] DV_2B 0Q001110000iiiii 001011nnnnnddddd 0E00 3C00 Rd,Vn[] |
| 1142 | |
| 1143 | INST1(movi, "movi" , 0, 0, IF_DV_1B, 0x0F000400) |
| 1144 | // movi Vd,imm8 DV_1B 0QX0111100000iii cmod01iiiiiddddd 0F00 0400 Vd imm8 (immediate vector) |
| 1145 | |
| 1146 | INST1(mvni, "mvni" , 0, 0, IF_DV_1B, 0x2F000400) |
| 1147 | // mvni Vd,imm8 DV_1B 0Q10111100000iii cmod01iiiiiddddd 2F00 0400 Vd imm8 (immediate vector) |
| 1148 | |
| 1149 | INST1(bsl, "bsl" , 0, 0, IF_DV_3C, 0x2E601C00) |
| 1150 | // bsl Vd,Vn,Vm DV_3C 0Q101110011mmmmm 000111nnnnnddddd 2E60 1C00 Vd,Vn,Vm |
| 1151 | |
| 1152 | INST1(bit, "bit" , 0, 0, IF_DV_3C, 0x2EA01C00) |
| 1153 | // bit Vd,Vn,Vm DV_3C 0Q101110101mmmmm 000111nnnnnddddd 2EA0 1C00 Vd,Vn,Vm |
| 1154 | |
| 1155 | INST1(bif, "bif" , 0, 0, IF_DV_3C, 0x2EE01C00) |
| 1156 | // bif Vd,Vn,Vm DV_3C 0Q101110111mmmmm 000111nnnnnddddd 2EE0 1C00 Vd,Vn,Vm |
| 1157 | |
| 1158 | INST1(addv, "addv" , 0, 0, IF_DV_2M, 0x0E31B800) |
| 1159 | // addv Vd,Vn DV_2M 0Q001110XX110001 101110nnnnnddddd 0E31 B800 Vd,Vn (vector) |
| 1160 | |
| 1161 | INST1(cnt, "cnt" , 0, 0, IF_DV_2M, 0x0E205800) |
| 1162 | // cnt Vd,Vn DV_2M 0Q00111000100000 010110nnnnnddddd 0E20 5800 Vd,Vn (vector) |
| 1163 | |
| 1164 | INST1(not, "not" , 0, 0, IF_DV_2M, 0x2E205800) |
| 1165 | // not Vd,Vn DV_2M 0Q10111000100000 010110nnnnnddddd 2E20 5800 Vd,Vn (vector) |
| 1166 | |
| 1167 | INST1(saddlv, "saddlv" , 0, 0, IF_DV_2M, 0x0E303800) |
| 1168 | // saddlv Vd,Vn DV_2M 0Q001110XX110000 001110nnnnnddddd 0E30 3800 Vd,Vn (vector) |
| 1169 | |
| 1170 | INST1(smaxv, "smaxv" , 0, 0, IF_DV_2M, 0x0E30A800) |
| 1171 | // smaxv Vd,Vn DV_2M 0Q001110XX110000 101010nnnnnddddd 0E30 A800 Vd,Vn (vector) |
| 1172 | |
| 1173 | INST1(sminv, "sminv" , 0, 0, IF_DV_2M, 0x0E31A800) |
| 1174 | // sminv Vd,Vn DV_2M 0Q001110XX110001 101010nnnnnddddd 0E31 A800 Vd,Vn (vector) |
| 1175 | |
| 1176 | INST1(uaddlv, "uaddlv" , 0, 0, IF_DV_2M, 0x2E303800) |
| 1177 | // uaddlv Vd,Vn DV_2M 0Q101110XX110000 001110nnnnnddddd 2E30 3800 Vd,Vn (vector) |
| 1178 | |
| 1179 | INST1(umaxv, "umaxv" , 0, 0, IF_DV_2M, 0x2E30A800) |
| 1180 | // umaxv Vd,Vn DV_2M 0Q101110XX110000 101010nnnnnddddd 2E30 A800 Vd,Vn (vector) |
| 1181 | |
| 1182 | INST1(uminv, "uminv" , 0, 0, IF_DV_2M, 0x2E31A800) |
| 1183 | // uminv Vd,Vn DV_2M 0Q101110XX110001 101010nnnnnddddd 2E31 A800 Vd,Vn (vector) |
| 1184 | |
| 1185 | INST1(xtn, "xtn" , 0, 0, IF_DV_2M, 0x0E212800) |
| 1186 | // xtn Vd,Vn DV_2M 00101110XX110000 001110nnnnnddddd 0E21 2800 Vd,Vn (vector) |
| 1187 | |
| 1188 | INST1(xtn2, "xtn2" , 0, 0, IF_DV_2M, 0x4E212800) |
| 1189 | // xtn2 Vd,Vn DV_2M 01101110XX110000 001110nnnnnddddd 4E21 2800 Vd,Vn (vector) |
| 1190 | |
| 1191 | INST1(fnmul, "fnmul" , 0, 0, IF_DV_3D, 0x1E208800) |
| 1192 | // fnmul Vd,Vn,Vm DV_3D 000111100X1mmmmm 100010nnnnnddddd 1E20 8800 Vd,Vn,Vm (scalar) |
| 1193 | |
| 1194 | INST1(fmadd, "fmadd" , 0, 0, IF_DV_4A, 0x1F000000) |
| 1195 | // fmadd Vd,Va,Vn,Vm DV_4A 000111110X0mmmmm 0aaaaannnnnddddd 1F00 0000 Vd Vn Vm Va (scalar) |
| 1196 | |
| 1197 | INST1(fmsub, "fmsub" , 0, 0, IF_DV_4A, 0x1F008000) |
| 1198 | // fmsub Vd,Va,Vn,Vm DV_4A 000111110X0mmmmm 1aaaaannnnnddddd 1F00 8000 Vd Vn Vm Va (scalar) |
| 1199 | |
| 1200 | INST1(fnmadd, "fnmadd" , 0, 0, IF_DV_4A, 0x1F200000) |
| 1201 | // fnmadd Vd,Va,Vn,Vm DV_4A 000111110X1mmmmm 0aaaaannnnnddddd 1F20 0000 Vd Vn Vm Va (scalar) |
| 1202 | |
| 1203 | INST1(fnmsub, "fnmsub" , 0, 0, IF_DV_4A, 0x1F208000) |
| 1204 | // fnmsub Vd,Va,Vn,Vm DV_4A 000111110X1mmmmm 1aaaaannnnnddddd 1F20 8000 Vd Vn Vm Va (scalar) |
| 1205 | |
| 1206 | INST1(fcvt, "fcvt" , 0, 0, IF_DV_2J, 0x1E224000) |
| 1207 | // fcvt Vd,Vn DV_2J 00011110SS10001D D10000nnnnnddddd 1E22 4000 Vd,Vn |
| 1208 | |
| 1209 | INST1(pmul, "pmul" , 0, 0, IF_DV_3A, 0x2E209C00) |
| 1210 | // pmul Vd,Vn,Vm DV_3A 0Q101110XX1mmmmm 100111nnnnnddddd 2E20 9C00 Vd,Vn,Vm (vector) |
| 1211 | |
| 1212 | INST1(saba, "saba" , 0, 0, IF_DV_3A, 0x0E207C00) |
| 1213 | // saba Vd,Vn,Vm DV_3A 0Q001110XX1mmmmm 011111nnnnnddddd 0E20 7C00 Vd,Vn,Vm (vector) |
| 1214 | |
| 1215 | INST1(sabd, "sabd" , 0, 0, IF_DV_3A, 0x0E207400) |
| 1216 | // sabd Vd,Vn,Vm DV_3A 0Q001110XX1mmmmm 011101nnnnnddddd 0E20 7400 Vd,Vn,Vm (vector) |
| 1217 | |
| 1218 | INST1(smax, "smax" , 0, 0, IF_DV_3A, 0x0E206400) |
| 1219 | // smax Vd,Vn,Vm DV_3A 0Q001110XX1mmmmm 011001nnnnnddddd 0E20 6400 Vd,Vn,Vm (vector) |
| 1220 | |
| 1221 | INST1(smin, "smin" , 0, 0, IF_DV_3A, 0x0E206C00) |
| 1222 | // smax Vd,Vn,Vm DV_3A 0Q001110XX1mmmmm 011011nnnnnddddd 0E20 6C00 Vd,Vn,Vm (vector) |
| 1223 | |
| 1224 | INST1(uaba, "uaba" , 0, 0, IF_DV_3A, 0x2E207C00) |
| 1225 | // uaba Vd,Vn,Vm DV_3A 0Q101110XX1mmmmm 011111nnnnnddddd 2E20 7C00 Vd,Vn,Vm (vector) |
| 1226 | |
| 1227 | INST1(uabd, "uabd" , 0, 0, IF_DV_3A, 0x2E207400) |
| 1228 | // uabd Vd,Vn,Vm DV_3A 0Q101110XX1mmmmm 011101nnnnnddddd 2E20 7400 Vd,Vn,Vm (vector) |
| 1229 | |
| 1230 | INST1(umax, "umax" , 0, 0, IF_DV_3A, 0x2E206400) |
| 1231 | // umax Vd,Vn,Vm DV_3A 0Q101110XX1mmmmm 011001nnnnnddddd 2E20 6400 Vd,Vn,Vm (vector) |
| 1232 | |
| 1233 | INST1(umin, "umin" , 0, 0, IF_DV_3A, 0x2E206C00) |
| 1234 | // umin Vd,Vn,Vm DV_3A 0Q101110XX1mmmmm 011011nnnnnddddd 2E20 6C00 Vd,Vn,Vm (vector) |
| 1235 | |
| 1236 | INST1(fcvtl, "fcvtl" , 0, 0, IF_DV_2G, 0x0E217800) |
| 1237 | // fcvtl Vd,Vn DV_2G 000011100X100001 011110nnnnnddddd 0E21 7800 Vd,Vn (scalar) |
| 1238 | |
| 1239 | INST1(fcvtl2, "fcvtl2" , 0, 0, IF_DV_2G, 0x4E217800) |
| 1240 | // fcvtl2 Vd,Vn DV_2G 040011100X100001 011110nnnnnddddd 4E21 7800 Vd,Vn (scalar) |
| 1241 | |
| 1242 | INST1(fcvtn, "fcvtn" , 0, 0, IF_DV_2G, 0x0E216800) |
| 1243 | // fcvtn Vd,Vn DV_2G 000011100X100001 011010nnnnnddddd 0E21 6800 Vd,Vn (scalar) |
| 1244 | |
| 1245 | INST1(fcvtn2, "fcvtn2" , 0, 0, IF_DV_2G, 0x4E216800) |
| 1246 | // fcvtn2 Vd,Vn DV_2G 040011100X100001 011010nnnnnddddd 4E21 6800 Vd,Vn (scalar) |
| 1247 | |
| 1248 | INST1(shll, "shll" , 0, 0, IF_DV_2M, 0x2F00A400) |
| 1249 | // shll Vd,Vn,imm DV_2M 0Q101110XX100001 001110nnnnnddddd 2E21 3800 Vd,Vn, {8/16/32} |
| 1250 | |
| 1251 | INST1(shll2, "shll2" , 0, 0, IF_DV_2M, 0x6F00A400) |
| 1252 | // shll Vd,Vn,imm DV_2M 0Q101110XX100001 001110nnnnnddddd 2E21 3800 Vd,Vn, {8/16/32} |
| 1253 | |
| 1254 | INST1(sshll, "sshll" , 0, 0, IF_DV_2O, 0x0F00A400) |
| 1255 | // sshll Vd,Vn,imm DV_2O 000011110iiiiiii 101001nnnnnddddd 0F00 A400 Vd,Vn imm (shift - vector) |
| 1256 | |
| 1257 | INST1(sshll2, "sshll2" , 0, 0, IF_DV_2O, 0x4F00A400) |
| 1258 | // sshll2 Vd,Vn,imm DV_2O 010011110iiiiiii 101001nnnnnddddd 4F00 A400 Vd,Vn imm (shift - vector) |
| 1259 | |
| 1260 | INST1(ushll, "ushll" , 0, 0, IF_DV_2O, 0x2F00A400) |
| 1261 | // ushll Vd,Vn,imm DV_2O 001011110iiiiiii 101001nnnnnddddd 2F00 A400 Vd,Vn imm (shift - vector) |
| 1262 | |
| 1263 | INST1(ushll2, "ushll2" , 0, 0, IF_DV_2O, 0x6F00A400) |
| 1264 | // ushll2 Vd,Vn,imm DV_2O 011011110iiiiiii 101001nnnnnddddd 6F00 A400 Vd,Vn imm (shift - vector) |
| 1265 | |
| 1266 | INST1(shrn, "shrn" , 0, 0, IF_DV_2O, 0x0F008400) |
| 1267 | // shrn Vd,Vn,imm DV_2O 000011110iiiiiii 100001nnnnnddddd 0F00 8400 Vd,Vn imm (shift - vector) |
| 1268 | |
| 1269 | INST1(shrn2, "shrn2" , 0, 0, IF_DV_2O, 0x4F008400) |
| 1270 | // shrn2 Vd,Vn,imm DV_2O 010011110iiiiiii 100001nnnnnddddd 4F00 8400 Vd,Vn imm (shift - vector) |
| 1271 | |
| 1272 | INST1(rshrn, "rshrn" , 0, 0, IF_DV_2O, 0x0F008C00) |
| 1273 | // rshrn Vd,Vn,imm DV_2O 000011110iiiiiii 100011nnnnnddddd 0F00 8C00 Vd,Vn imm (shift - vector) |
| 1274 | |
| 1275 | INST1(rshrn2, "rshrn2" , 0, 0, IF_DV_2O, 0x4F008C00) |
| 1276 | // rshrn2 Vd,Vn,imm DV_2O 010011110iiiiiii 100011nnnnnddddd 4F00 8C00 Vd,Vn imm (shift - vector) |
| 1277 | |
| 1278 | INST1(sxtl, "sxtl" , 0, 0, IF_DV_2O, 0x0F00A400) |
| 1279 | // sxtl Vd,Vn DV_2O 000011110iiiiiii 101001nnnnnddddd 0F00 A400 Vd,Vn (shift - vector) |
| 1280 | |
| 1281 | INST1(sxtl2, "sxtl2" , 0, 0, IF_DV_2O, 0x4F00A400) |
| 1282 | // sxtl2 Vd,Vn DV_2O 010011110iiiiiii 101001nnnnnddddd 4F00 A400 Vd,Vn (shift - vector) |
| 1283 | |
| 1284 | INST1(uxtl, "uxtl" , 0, 0, IF_DV_2O, 0x2F00A400) |
| 1285 | // uxtl Vd,Vn DV_2O 001011110iiiiiii 101001nnnnnddddd 2F00 A400 Vd,Vn (shift - vector) |
| 1286 | |
| 1287 | INST1(uxtl2, "uxtl2" , 0, 0, IF_DV_2O, 0x6F00A400) |
| 1288 | // uxtl2 Vd,Vn DV_2O 011011110iiiiiii 101001nnnnnddddd 6F00 A400 Vd,Vn (shift - vector) |
| 1289 | // clang-format on |
| 1290 | |
| 1291 | /*****************************************************************************/ |
| 1292 | #undef INST1 |
| 1293 | #undef INST2 |
| 1294 | #undef INST3 |
| 1295 | #undef INST4 |
| 1296 | #undef INST5 |
| 1297 | #undef INST6 |
| 1298 | #undef INST9 |
| 1299 | /*****************************************************************************/ |
| 1300 | |