Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2012 The Native Client Authors. All rights reserved. | 2 * Copyright 2012 The Native Client Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can | 3 * Use of this source code is governed by a BSD-style license that can |
| 4 * be found in the LICENSE file. | 4 * be found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 /* | 7 /* |
| 8 * DO NOT EDIT: GENERATED CODE | 8 * DO NOT EDIT: GENERATED CODE |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #include "native_client/src/trusted/validator_arm/gen/arm32_decode.h" | 11 #include "native_client/src/trusted/validator_arm/gen/arm32_decode.h" |
| 12 | 12 |
| 13 #include <stdio.h> | 13 #include <stdio.h> |
| 14 | 14 |
| 15 namespace nacl_arm_dec { | 15 namespace nacl_arm_dec { |
| 16 | 16 |
| 17 /* | 17 /* |
| 18 * Prototypes for static table-matching functions. | |
| 19 */ | |
| 20 static inline const ClassDecoder &decode_ARMv7( | |
| 21 const Instruction insn, const Arm32DecoderState *state); | |
| 22 | |
| 23 static inline const ClassDecoder &decode_dp_misc( | |
| 24 const Instruction insn, const Arm32DecoderState *state); | |
| 25 | |
| 26 static inline const ClassDecoder &decode_dp_reg( | |
| 27 const Instruction insn, const Arm32DecoderState *state); | |
| 28 | |
| 29 static inline const ClassDecoder &decode_dp_reg_shifted( | |
| 30 const Instruction insn, const Arm32DecoderState *state); | |
| 31 | |
| 32 static inline const ClassDecoder &decode_dp_immed( | |
| 33 const Instruction insn, const Arm32DecoderState *state); | |
| 34 | |
| 35 static inline const ClassDecoder &decode_mult( | |
| 36 const Instruction insn, const Arm32DecoderState *state); | |
| 37 | |
| 38 static inline const ClassDecoder &decode_sat_add_sub( | |
| 39 const Instruction insn, const Arm32DecoderState *state); | |
| 40 | |
| 41 static inline const ClassDecoder &decode_half_mult( | |
| 42 const Instruction insn, const Arm32DecoderState *state); | |
| 43 | |
| 44 static inline const ClassDecoder &decode_extra_load_store( | |
| 45 const Instruction insn, const Arm32DecoderState *state); | |
| 46 | |
| 47 static inline const ClassDecoder &decode_sync( | |
| 48 const Instruction insn, const Arm32DecoderState *state); | |
| 49 | |
| 50 static inline const ClassDecoder &decode_msr_and_hints( | |
| 51 const Instruction insn, const Arm32DecoderState *state); | |
| 52 | |
| 53 static inline const ClassDecoder &decode_misc( | |
| 54 const Instruction insn, const Arm32DecoderState *state); | |
| 55 | |
| 56 static inline const ClassDecoder &decode_load_store_word_byte( | |
| 57 const Instruction insn, const Arm32DecoderState *state); | |
| 58 | |
| 59 static inline const ClassDecoder &decode_media( | |
| 60 const Instruction insn, const Arm32DecoderState *state); | |
| 61 | |
| 62 static inline const ClassDecoder &decode_parallel_add_sub( | |
| 63 const Instruction insn, const Arm32DecoderState *state); | |
| 64 | |
| 65 static inline const ClassDecoder &decode_pack_sat_rev( | |
| 66 const Instruction insn, const Arm32DecoderState *state); | |
| 67 | |
| 68 static inline const ClassDecoder &decode_signed_mult( | |
| 69 const Instruction insn, const Arm32DecoderState *state); | |
| 70 | |
| 71 static inline const ClassDecoder &decode_branch_block_xfer( | |
| 72 const Instruction insn, const Arm32DecoderState *state); | |
| 73 | |
| 74 static inline const ClassDecoder &decode_super_cop( | |
| 75 const Instruction insn, const Arm32DecoderState *state); | |
| 76 | |
| 77 static inline const ClassDecoder &decode_unconditional( | |
| 78 const Instruction insn, const Arm32DecoderState *state); | |
| 79 | |
| 80 static inline const ClassDecoder &decode_misc_hints_simd( | |
| 81 const Instruction insn, const Arm32DecoderState *state); | |
| 82 | |
| 83 static inline const ClassDecoder &decode_simd_dp( | |
| 84 const Instruction insn, const Arm32DecoderState *state); | |
| 85 | |
| 86 static inline const ClassDecoder &decode_simd_dp_3same( | |
| 87 const Instruction insn, const Arm32DecoderState *state); | |
| 88 | |
| 89 static inline const ClassDecoder &decode_simd_dp_3diff( | |
| 90 const Instruction insn, const Arm32DecoderState *state); | |
| 91 | |
| 92 static inline const ClassDecoder &decode_simd_dp_2scalar( | |
| 93 const Instruction insn, const Arm32DecoderState *state); | |
| 94 | |
| 95 static inline const ClassDecoder &decode_simd_dp_2shift( | |
| 96 const Instruction insn, const Arm32DecoderState *state); | |
| 97 | |
| 98 static inline const ClassDecoder &decode_simd_dp_2misc( | |
| 99 const Instruction insn, const Arm32DecoderState *state); | |
| 100 | |
| 101 static inline const ClassDecoder &decode_simd_dp_1imm( | |
| 102 const Instruction insn, const Arm32DecoderState *state); | |
| 103 | |
| 104 static inline const ClassDecoder &decode_simd_load_store( | |
| 105 const Instruction insn, const Arm32DecoderState *state); | |
| 106 | |
| 107 static inline const ClassDecoder &decode_simd_load_store_l0( | |
| 108 const Instruction insn, const Arm32DecoderState *state); | |
| 109 | |
| 110 static inline const ClassDecoder &decode_simd_load_store_l1( | |
| 111 const Instruction insn, const Arm32DecoderState *state); | |
| 112 | |
| 113 /* | |
| 114 * Table-matching function implementations. | 18 * Table-matching function implementations. |
| 115 */ | 19 */ |
| 116 | 20 |
| 117 /* | 21 /* |
| 118 * Implementation of table ARMv7. | 22 * Implementation of table ARMv7. |
| 119 * Specified by: See Section A5.1. | 23 * Specified by: See Section A5.1. |
| 120 */ | 24 */ |
| 121 static inline const ClassDecoder &decode_ARMv7( | 25 const ClassDecoder &Arm32DecoderState::decode_ARMv7(const Instruction insn) cons t { |
|
robertm
2012/04/11 01:28:43
move & to left
Karl
2012/04/16 23:18:10
Done.
| |
| 122 const Instruction insn, const Arm32DecoderState *state) { | |
| 123 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0E000000) == 0x04000000) && (true)) { | 26 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0E000000) == 0x04000000) && (true)) { |
| 124 return decode_load_store_word_byte(insn, state); | 27 return decode_load_store_word_byte(insn); |
| 125 } | 28 } |
| 126 | 29 |
| 127 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0E000000) == 0x06000000) && ((insn & 0x00000010) == 0x00000000)) { | 30 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0E000000) == 0x06000000) && ((insn & 0x00000010) == 0x00000000)) { |
| 128 return decode_load_store_word_byte(insn, state); | 31 return decode_load_store_word_byte(insn); |
| 129 } | 32 } |
| 130 | 33 |
| 131 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0E000000) == 0x06000000) && ((insn & 0x00000010) == 0x00000010)) { | 34 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0E000000) == 0x06000000) && ((insn & 0x00000010) == 0x00000010)) { |
| 132 return decode_media(insn, state); | 35 return decode_media(insn); |
| 133 } | 36 } |
| 134 | 37 |
| 135 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0C000000) == 0x00000000) && (true)) { | 38 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0C000000) == 0x00000000) && (true)) { |
| 136 return decode_dp_misc(insn, state); | 39 return decode_dp_misc(insn); |
| 137 } | 40 } |
| 138 | 41 |
| 139 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0C000000) == 0x08000000) && (true)) { | 42 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0C000000) == 0x08000000) && (true)) { |
| 140 return decode_branch_block_xfer(insn, state); | 43 return decode_branch_block_xfer(insn); |
| 141 } | 44 } |
| 142 | 45 |
| 143 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0C000000) == 0x0C000000) && (true)) { | 46 if (((insn & 0xF0000000) != 0xF0000000) && ((insn & 0x0C000000) == 0x0C000000) && (true)) { |
| 144 return decode_super_cop(insn, state); | 47 return decode_super_cop(insn); |
| 145 } | 48 } |
| 146 | 49 |
| 147 if (((insn & 0xF0000000) == 0xF0000000) && (true) && (true)) { | 50 if (((insn & 0xF0000000) == 0xF0000000) && (true) && (true)) { |
| 148 return decode_unconditional(insn, state); | 51 return decode_unconditional(insn); |
| 149 } | 52 } |
| 150 | 53 |
| 151 // Catch any attempt to fall through... | 54 // Catch any attempt to fall through... |
| 152 fprintf(stderr, "TABLE IS INCOMPLETE: ARMv7 could not parse %08X",insn.bits(31 ,0)); | 55 fprintf(stderr, "TABLE IS INCOMPLETE: ARMv7 could not parse %08X",insn.bits(31 ,0)); |
| 153 return state->Forbidden_instance_; | 56 return Forbidden_instance_; |
| 154 } | 57 } |
| 58 | |
| 155 | 59 |
| 156 /* | 60 /* |
| 157 * Implementation of table dp_misc. | 61 * Implementation of table dp_misc. |
| 158 * Specified by: See Section A5.2. | 62 * Specified by: See Section A5.2. |
| 159 */ | 63 */ |
| 160 static inline const ClassDecoder &decode_dp_misc( | 64 const ClassDecoder &Arm32DecoderState::decode_dp_misc(const Instruction insn) co nst { |
| 161 const Instruction insn, const Arm32DecoderState *state) { | |
| 162 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01900000) != 0x01000000) && ((insn & 0x00000090) == 0x00000010)) { | 65 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01900000) != 0x01000000) && ((insn & 0x00000090) == 0x00000010)) { |
| 163 return decode_dp_reg_shifted(insn, state); | 66 return decode_dp_reg_shifted(insn); |
| 164 } | 67 } |
| 165 | 68 |
| 166 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01900000) != 0x01000000) && ((insn & 0x00000010) == 0x00000000)) { | 69 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01900000) != 0x01000000) && ((insn & 0x00000010) == 0x00000000)) { |
| 167 return decode_dp_reg(insn, state); | 70 return decode_dp_reg(insn); |
| 168 } | 71 } |
| 169 | 72 |
| 170 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01900000) == 0x01000000) && ((insn & 0x00000090) == 0x00000080)) { | 73 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01900000) == 0x01000000) && ((insn & 0x00000090) == 0x00000080)) { |
| 171 return decode_half_mult(insn, state); | 74 return decode_half_mult(insn); |
| 172 } | 75 } |
| 173 | 76 |
| 174 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01900000) == 0x01000000) && ((insn & 0x00000080) == 0x00000000)) { | 77 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01900000) == 0x01000000) && ((insn & 0x00000080) == 0x00000000)) { |
| 175 return decode_misc(insn, state); | 78 return decode_misc(insn); |
| 176 } | 79 } |
| 177 | 80 |
| 178 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01200000) != 0x00200000) && ((insn & 0x000000F0) == 0x000000B0)) { | 81 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01200000) != 0x00200000) && ((insn & 0x000000F0) == 0x000000B0)) { |
| 179 return decode_extra_load_store(insn, state); | 82 return decode_extra_load_store(insn); |
| 180 } | 83 } |
| 181 | 84 |
| 182 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01200000) != 0x00200000) && ((insn & 0x000000D0) == 0x000000D0)) { | 85 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01200000) != 0x00200000) && ((insn & 0x000000D0) == 0x000000D0)) { |
| 183 return decode_extra_load_store(insn, state); | 86 return decode_extra_load_store(insn); |
| 184 } | 87 } |
| 185 | 88 |
| 186 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01200000) == 0x00200000) && ((insn & 0x000000F0) == 0x000000B0)) { | 89 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01200000) == 0x00200000) && ((insn & 0x000000F0) == 0x000000B0)) { |
| 187 return state->Forbidden_instance_; | 90 return Forbidden_instance_; |
| 188 } | 91 } |
| 189 | 92 |
| 190 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01200000) == 0x00200000) && ((insn & 0x000000D0) == 0x000000D0)) { | 93 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01200000) == 0x00200000) && ((insn & 0x000000D0) == 0x000000D0)) { |
| 191 return state->Forbidden_instance_; | 94 return Forbidden_instance_; |
| 192 } | 95 } |
| 193 | 96 |
| 194 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01000000) == 0x00000000) && ((insn & 0x000000F0) == 0x00000090)) { | 97 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01000000) == 0x00000000) && ((insn & 0x000000F0) == 0x00000090)) { |
| 195 return decode_mult(insn, state); | 98 return decode_mult(insn); |
| 196 } | 99 } |
| 197 | 100 |
| 198 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01000000) == 0x01000000) && ((insn & 0x000000F0) == 0x00000090)) { | 101 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01000000) == 0x01000000) && ((insn & 0x000000F0) == 0x00000090)) { |
| 199 return decode_sync(insn, state); | 102 return decode_sync(insn); |
| 200 } | 103 } |
| 201 | 104 |
| 202 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x01B00000) == 0x01000000) && (true)) { | 105 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x01B00000) == 0x01000000) && (true)) { |
| 203 return state->DataProc_instance_; | 106 return DataProc_instance_; |
| 204 } | 107 } |
| 205 | 108 |
| 206 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x01B00000) == 0x01200000) && (true)) { | 109 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x01B00000) == 0x01200000) && (true)) { |
| 207 return decode_msr_and_hints(insn, state); | 110 return decode_msr_and_hints(insn); |
| 208 } | 111 } |
| 209 | 112 |
| 210 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x01900000) != 0x01000000) && (true)) { | 113 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x01900000) != 0x01000000) && (true)) { |
| 211 return decode_dp_immed(insn, state); | 114 return decode_dp_immed(insn); |
| 212 } | 115 } |
| 213 | 116 |
| 214 // Catch any attempt to fall through... | 117 // Catch any attempt to fall through... |
| 215 fprintf(stderr, "TABLE IS INCOMPLETE: dp_misc could not parse %08X",insn.bits( 31,0)); | 118 fprintf(stderr, "TABLE IS INCOMPLETE: dp_misc could not parse %08X",insn.bits( 31,0)); |
| 216 return state->Forbidden_instance_; | 119 return Forbidden_instance_; |
| 217 } | 120 } |
| 121 | |
| 218 | 122 |
| 219 /* | 123 /* |
| 220 * Implementation of table dp_reg. | 124 * Implementation of table dp_reg. |
| 221 * Specified by: See Section A5.2.1. | 125 * Specified by: See Section A5.2.1. |
| 222 */ | 126 */ |
| 223 static inline const ClassDecoder &decode_dp_reg( | 127 const ClassDecoder &Arm32DecoderState::decode_dp_reg(const Instruction insn) con st { |
| 224 const Instruction insn, const Arm32DecoderState *state) { | |
| 225 if (((insn & 0x01900000) == 0x01100000)) { | 128 if (((insn & 0x01900000) == 0x01100000)) { |
| 226 return state->Test_instance_; | 129 return Test_instance_; |
| 227 } | 130 } |
| 228 | 131 |
| 229 if (((insn & 0x01800000) == 0x01800000)) { | 132 if (((insn & 0x01800000) == 0x01800000)) { |
| 230 return state->DataProc_instance_; | 133 return DataProc_instance_; |
| 231 } | 134 } |
| 232 | 135 |
| 233 if (((insn & 0x01000000) == 0x00000000)) { | 136 if (((insn & 0x01000000) == 0x00000000)) { |
| 234 return state->DataProc_instance_; | 137 return DataProc_instance_; |
| 235 } | 138 } |
| 236 | 139 |
| 237 // Catch any attempt to fall through... | 140 // Catch any attempt to fall through... |
| 238 fprintf(stderr, "TABLE IS INCOMPLETE: dp_reg could not parse %08X",insn.bits(3 1,0)); | 141 fprintf(stderr, "TABLE IS INCOMPLETE: dp_reg could not parse %08X",insn.bits(3 1,0)); |
| 239 return state->Forbidden_instance_; | 142 return Forbidden_instance_; |
| 240 } | 143 } |
| 144 | |
| 241 | 145 |
| 242 /* | 146 /* |
| 243 * Implementation of table dp_reg_shifted. | 147 * Implementation of table dp_reg_shifted. |
| 244 * Specified by: See Section A5.2.2. | 148 * Specified by: See Section A5.2.2. |
| 245 */ | 149 */ |
| 246 static inline const ClassDecoder &decode_dp_reg_shifted( | 150 const ClassDecoder &Arm32DecoderState::decode_dp_reg_shifted(const Instruction i nsn) const { |
| 247 const Instruction insn, const Arm32DecoderState *state) { | |
| 248 if (((insn & 0x01E00000) == 0x01A00000)) { | 151 if (((insn & 0x01E00000) == 0x01A00000)) { |
| 249 return state->DataProc_instance_; | 152 return DataProc_instance_; |
| 250 } | 153 } |
| 251 | 154 |
| 252 if (((insn & 0x01E00000) == 0x01E00000)) { | 155 if (((insn & 0x01E00000) == 0x01E00000)) { |
| 253 return state->Unary3RegisterShiftedOp_instance_; | 156 return Unary3RegisterShiftedOp_instance_; |
| 254 } | 157 } |
| 255 | 158 |
| 256 if (((insn & 0x01900000) == 0x01100000)) { | 159 if (((insn & 0x01900000) == 0x01100000)) { |
| 257 return state->Binary3RegisterShiftedTest_instance_; | 160 return Binary3RegisterShiftedTest_instance_; |
| 258 } | 161 } |
| 259 | 162 |
| 260 if (((insn & 0x01A00000) == 0x01800000)) { | 163 if (((insn & 0x01A00000) == 0x01800000)) { |
| 261 return state->Binary4RegisterShiftedOp_instance_; | 164 return Binary4RegisterShiftedOp_instance_; |
| 262 } | 165 } |
| 263 | 166 |
| 264 if (((insn & 0x01000000) == 0x00000000)) { | 167 if (((insn & 0x01000000) == 0x00000000)) { |
| 265 return state->Binary4RegisterShiftedOp_instance_; | 168 return Binary4RegisterShiftedOp_instance_; |
| 266 } | 169 } |
| 267 | 170 |
| 268 // Catch any attempt to fall through... | 171 // Catch any attempt to fall through... |
| 269 fprintf(stderr, "TABLE IS INCOMPLETE: dp_reg_shifted could not parse %08X",ins n.bits(31,0)); | 172 fprintf(stderr, "TABLE IS INCOMPLETE: dp_reg_shifted could not parse %08X",ins n.bits(31,0)); |
| 270 return state->Forbidden_instance_; | 173 return Forbidden_instance_; |
| 271 } | 174 } |
| 175 | |
| 272 | 176 |
| 273 /* | 177 /* |
| 274 * Implementation of table dp_immed. | 178 * Implementation of table dp_immed. |
| 275 * Specified by: See Section A5.2.3. | 179 * Specified by: See Section A5.2.3. |
| 276 */ | 180 */ |
| 277 static inline const ClassDecoder &decode_dp_immed( | 181 const ClassDecoder &Arm32DecoderState::decode_dp_immed(const Instruction insn) c onst { |
| 278 const Instruction insn, const Arm32DecoderState *state) { | |
| 279 if (((insn & 0x01F00000) == 0x01100000)) { | 182 if (((insn & 0x01F00000) == 0x01100000)) { |
| 280 return state->TestImmediate_instance_; | 183 return TestImmediate_instance_; |
| 281 } | 184 } |
| 282 | 185 |
| 283 if (((insn & 0x01F00000) == 0x01500000)) { | 186 if (((insn & 0x01F00000) == 0x01500000)) { |
| 284 return state->Test_instance_; | 187 return Test_instance_; |
| 285 } | 188 } |
| 286 | 189 |
| 287 if (((insn & 0x01B00000) == 0x01300000)) { | 190 if (((insn & 0x01B00000) == 0x01300000)) { |
| 288 return state->Test_instance_; | 191 return Test_instance_; |
| 289 } | 192 } |
| 290 | 193 |
| 291 if (((insn & 0x01E00000) == 0x01C00000)) { | 194 if (((insn & 0x01E00000) == 0x01C00000)) { |
| 292 return state->ImmediateBic_instance_; | 195 return ImmediateBic_instance_; |
| 293 } | 196 } |
| 294 | 197 |
| 295 if (((insn & 0x01E00000) == 0x01E00000)) { | 198 if (((insn & 0x01E00000) == 0x01E00000)) { |
| 296 return state->DataProc_instance_; | 199 return DataProc_instance_; |
| 297 } | 200 } |
| 298 | 201 |
| 299 if (((insn & 0x01C00000) == 0x00000000)) { | 202 if (((insn & 0x01C00000) == 0x00000000)) { |
| 300 return state->DataProc_instance_; | 203 return DataProc_instance_; |
| 301 } | 204 } |
| 302 | 205 |
| 303 if (((insn & 0x00C00000) == 0x00800000)) { | 206 if (((insn & 0x00C00000) == 0x00800000)) { |
| 304 return state->DataProc_instance_; | 207 return DataProc_instance_; |
| 305 } | 208 } |
| 306 | 209 |
| 307 if (((insn & 0x01400000) == 0x00400000)) { | 210 if (((insn & 0x01400000) == 0x00400000)) { |
| 308 return state->DataProc_instance_; | 211 return DataProc_instance_; |
| 309 } | 212 } |
| 310 | 213 |
| 311 // Catch any attempt to fall through... | 214 // Catch any attempt to fall through... |
| 312 fprintf(stderr, "TABLE IS INCOMPLETE: dp_immed could not parse %08X",insn.bits (31,0)); | 215 fprintf(stderr, "TABLE IS INCOMPLETE: dp_immed could not parse %08X",insn.bits (31,0)); |
| 313 return state->Forbidden_instance_; | 216 return Forbidden_instance_; |
| 314 } | 217 } |
| 218 | |
| 315 | 219 |
| 316 /* | 220 /* |
| 317 * Implementation of table mult. | 221 * Implementation of table mult. |
| 318 * Specified by: See Section A5.2.5. | 222 * Specified by: See Section A5.2.5. |
| 319 */ | 223 */ |
| 320 static inline const ClassDecoder &decode_mult( | 224 const ClassDecoder &Arm32DecoderState::decode_mult(const Instruction insn) const { |
| 321 const Instruction insn, const Arm32DecoderState *state) { | |
| 322 if (((insn & 0x00F00000) == 0x00400000)) { | 225 if (((insn & 0x00F00000) == 0x00400000)) { |
| 323 return state->LongMultiply_instance_; | 226 return LongMultiply_instance_; |
| 324 } | 227 } |
| 325 | 228 |
| 326 if (((insn & 0x00F00000) == 0x00600000)) { | 229 if (((insn & 0x00F00000) == 0x00600000)) { |
| 327 return state->Multiply_instance_; | 230 return Multiply_instance_; |
| 328 } | 231 } |
| 329 | 232 |
| 330 if (((insn & 0x00D00000) == 0x00500000)) { | 233 if (((insn & 0x00D00000) == 0x00500000)) { |
| 331 return state->Undefined_instance_; | 234 return Undefined_instance_; |
| 332 } | 235 } |
| 333 | 236 |
| 334 if (((insn & 0x00C00000) == 0x00000000)) { | 237 if (((insn & 0x00C00000) == 0x00000000)) { |
| 335 return state->Multiply_instance_; | 238 return Multiply_instance_; |
| 336 } | 239 } |
| 337 | 240 |
| 338 if (((insn & 0x00800000) == 0x00800000)) { | 241 if (((insn & 0x00800000) == 0x00800000)) { |
| 339 return state->LongMultiply_instance_; | 242 return LongMultiply_instance_; |
| 340 } | 243 } |
| 341 | 244 |
| 342 // Catch any attempt to fall through... | 245 // Catch any attempt to fall through... |
| 343 fprintf(stderr, "TABLE IS INCOMPLETE: mult could not parse %08X",insn.bits(31, 0)); | 246 fprintf(stderr, "TABLE IS INCOMPLETE: mult could not parse %08X",insn.bits(31, 0)); |
| 344 return state->Forbidden_instance_; | 247 return Forbidden_instance_; |
| 345 } | 248 } |
| 249 | |
| 346 | 250 |
| 347 /* | 251 /* |
| 348 * Implementation of table sat_add_sub. | 252 * Implementation of table sat_add_sub. |
| 349 * Specified by: See Section A5.2.6. | 253 * Specified by: See Section A5.2.6. |
| 350 */ | 254 */ |
| 351 static inline const ClassDecoder &decode_sat_add_sub( | 255 const ClassDecoder &Arm32DecoderState::decode_sat_add_sub(const Instruction insn ) const { |
| 352 const Instruction insn, const Arm32DecoderState *state) { | |
| 353 if ((true)) { | 256 if ((true)) { |
| 354 return state->SatAddSub_instance_; | 257 return SatAddSub_instance_; |
| 355 } | 258 } |
| 356 | 259 |
| 357 // Catch any attempt to fall through... | 260 // Catch any attempt to fall through... |
| 358 fprintf(stderr, "TABLE IS INCOMPLETE: sat_add_sub could not parse %08X",insn.b its(31,0)); | 261 fprintf(stderr, "TABLE IS INCOMPLETE: sat_add_sub could not parse %08X",insn.b its(31,0)); |
| 359 return state->Forbidden_instance_; | 262 return Forbidden_instance_; |
| 360 } | 263 } |
| 264 | |
| 361 | 265 |
| 362 /* | 266 /* |
| 363 * Implementation of table half_mult. | 267 * Implementation of table half_mult. |
| 364 * Specified by: See Section A5.2.7. | 268 * Specified by: See Section A5.2.7. |
| 365 */ | 269 */ |
| 366 static inline const ClassDecoder &decode_half_mult( | 270 const ClassDecoder &Arm32DecoderState::decode_half_mult(const Instruction insn) const { |
| 367 const Instruction insn, const Arm32DecoderState *state) { | |
| 368 if (((insn & 0x00600000) == 0x00400000)) { | 271 if (((insn & 0x00600000) == 0x00400000)) { |
| 369 return state->LongMultiply_instance_; | 272 return LongMultiply_instance_; |
| 370 } | 273 } |
| 371 | 274 |
| 372 if (((insn & 0x00600000) == 0x00600000)) { | 275 if (((insn & 0x00600000) == 0x00600000)) { |
| 373 return state->Multiply_instance_; | 276 return Multiply_instance_; |
| 374 } | 277 } |
| 375 | 278 |
| 376 if (((insn & 0x00400000) == 0x00000000)) { | 279 if (((insn & 0x00400000) == 0x00000000)) { |
| 377 return state->Multiply_instance_; | 280 return Multiply_instance_; |
| 378 } | 281 } |
| 379 | 282 |
| 380 // Catch any attempt to fall through... | 283 // Catch any attempt to fall through... |
| 381 fprintf(stderr, "TABLE IS INCOMPLETE: half_mult could not parse %08X",insn.bit s(31,0)); | 284 fprintf(stderr, "TABLE IS INCOMPLETE: half_mult could not parse %08X",insn.bit s(31,0)); |
| 382 return state->Forbidden_instance_; | 285 return Forbidden_instance_; |
| 383 } | 286 } |
| 287 | |
| 384 | 288 |
| 385 /* | 289 /* |
| 386 * Implementation of table extra_load_store. | 290 * Implementation of table extra_load_store. |
| 387 * Specified by: See Section A5.2.8. | 291 * Specified by: See Section A5.2.8. |
| 388 */ | 292 */ |
| 389 static inline const ClassDecoder &decode_extra_load_store( | 293 const ClassDecoder &Arm32DecoderState::decode_extra_load_store(const Instruction insn) const { |
| 390 const Instruction insn, const Arm32DecoderState *state) { | |
| 391 if (((insn & 0x00000060) == 0x00000040) && ((insn & 0x00500000) == 0x00000000) ) { | 294 if (((insn & 0x00000060) == 0x00000040) && ((insn & 0x00500000) == 0x00000000) ) { |
| 392 return state->LoadDoubleR_instance_; | 295 return LoadDoubleR_instance_; |
| 393 } | 296 } |
| 394 | 297 |
| 395 if (((insn & 0x00000060) == 0x00000040) && ((insn & 0x00500000) == 0x00100000) ) { | 298 if (((insn & 0x00000060) == 0x00000040) && ((insn & 0x00500000) == 0x00100000) ) { |
| 396 return state->LoadRegister_instance_; | 299 return LoadRegister_instance_; |
| 397 } | 300 } |
| 398 | 301 |
| 399 if (((insn & 0x00000060) == 0x00000040) && ((insn & 0x00500000) == 0x00400000) ) { | 302 if (((insn & 0x00000060) == 0x00000040) && ((insn & 0x00500000) == 0x00400000) ) { |
| 400 return state->LoadDoubleI_instance_; | 303 return LoadDoubleI_instance_; |
| 401 } | 304 } |
| 402 | 305 |
| 403 if (((insn & 0x00000060) == 0x00000040) && ((insn & 0x00500000) == 0x00500000) ) { | 306 if (((insn & 0x00000060) == 0x00000040) && ((insn & 0x00500000) == 0x00500000) ) { |
| 404 return state->LoadImmediate_instance_; | 307 return LoadImmediate_instance_; |
| 405 } | 308 } |
| 406 | 309 |
| 407 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00500000) == 0x00000000) ) { | 310 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00500000) == 0x00000000) ) { |
| 408 return state->StoreRegister_instance_; | 311 return StoreRegister_instance_; |
| 409 } | 312 } |
| 410 | 313 |
| 411 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00500000) == 0x00100000) ) { | 314 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00500000) == 0x00100000) ) { |
| 412 return state->LoadRegister_instance_; | 315 return LoadRegister_instance_; |
| 413 } | 316 } |
| 414 | 317 |
| 415 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00500000) == 0x00400000) ) { | 318 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00500000) == 0x00400000) ) { |
| 416 return state->StoreImmediate_instance_; | 319 return StoreImmediate_instance_; |
| 417 } | 320 } |
| 418 | 321 |
| 419 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00500000) == 0x00500000) ) { | 322 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00500000) == 0x00500000) ) { |
| 420 return state->LoadImmediate_instance_; | 323 return LoadImmediate_instance_; |
| 421 } | 324 } |
| 422 | 325 |
| 423 // Catch any attempt to fall through... | 326 // Catch any attempt to fall through... |
| 424 fprintf(stderr, "TABLE IS INCOMPLETE: extra_load_store could not parse %08X",i nsn.bits(31,0)); | 327 fprintf(stderr, "TABLE IS INCOMPLETE: extra_load_store could not parse %08X",i nsn.bits(31,0)); |
| 425 return state->Forbidden_instance_; | 328 return Forbidden_instance_; |
| 426 } | 329 } |
| 330 | |
| 427 | 331 |
| 428 /* | 332 /* |
| 429 * Implementation of table sync. | 333 * Implementation of table sync. |
| 430 * Specified by: See Section A5.2.10. | 334 * Specified by: See Section A5.2.10. |
| 431 */ | 335 */ |
| 432 static inline const ClassDecoder &decode_sync( | 336 const ClassDecoder &Arm32DecoderState::decode_sync(const Instruction insn) const { |
| 433 const Instruction insn, const Arm32DecoderState *state) { | |
| 434 if (((insn & 0x00F00000) == 0x00800000)) { | 337 if (((insn & 0x00F00000) == 0x00800000)) { |
| 435 return state->StoreExclusive_instance_; | 338 return StoreExclusive_instance_; |
| 436 } | 339 } |
| 437 | 340 |
| 438 if (((insn & 0x00F00000) == 0x00900000)) { | 341 if (((insn & 0x00F00000) == 0x00900000)) { |
| 439 return state->LoadExclusive_instance_; | 342 return LoadExclusive_instance_; |
| 440 } | 343 } |
| 441 | 344 |
| 442 if (((insn & 0x00F00000) == 0x00B00000)) { | 345 if (((insn & 0x00F00000) == 0x00B00000)) { |
| 443 return state->LoadDoubleExclusive_instance_; | 346 return LoadDoubleExclusive_instance_; |
| 444 } | 347 } |
| 445 | 348 |
| 446 if (((insn & 0x00F00000) == 0x00C00000)) { | 349 if (((insn & 0x00F00000) == 0x00C00000)) { |
| 447 return state->StoreExclusive_instance_; | 350 return StoreExclusive_instance_; |
| 448 } | 351 } |
| 449 | 352 |
| 450 if (((insn & 0x00B00000) == 0x00000000)) { | 353 if (((insn & 0x00B00000) == 0x00000000)) { |
| 451 return state->Deprecated_instance_; | 354 return Deprecated_instance_; |
| 452 } | 355 } |
| 453 | 356 |
| 454 if (((insn & 0x00B00000) == 0x00A00000)) { | 357 if (((insn & 0x00B00000) == 0x00A00000)) { |
| 455 return state->StoreExclusive_instance_; | 358 return StoreExclusive_instance_; |
| 456 } | 359 } |
| 457 | 360 |
| 458 if (((insn & 0x00D00000) == 0x00D00000)) { | 361 if (((insn & 0x00D00000) == 0x00D00000)) { |
| 459 return state->LoadExclusive_instance_; | 362 return LoadExclusive_instance_; |
| 460 } | 363 } |
| 461 | 364 |
| 462 if ((true)) { | 365 if ((true)) { |
| 463 return state->Undefined_instance_; | 366 return Undefined_instance_; |
| 464 } | 367 } |
| 465 | 368 |
| 466 // Catch any attempt to fall through... | 369 // Catch any attempt to fall through... |
| 467 fprintf(stderr, "TABLE IS INCOMPLETE: sync could not parse %08X",insn.bits(31, 0)); | 370 fprintf(stderr, "TABLE IS INCOMPLETE: sync could not parse %08X",insn.bits(31, 0)); |
| 468 return state->Forbidden_instance_; | 371 return Forbidden_instance_; |
| 469 } | 372 } |
| 373 | |
| 470 | 374 |
| 471 /* | 375 /* |
| 472 * Implementation of table msr_and_hints. | 376 * Implementation of table msr_and_hints. |
| 473 * Specified by: See Section A5.2.11. | 377 * Specified by: See Section A5.2.11. |
| 474 */ | 378 */ |
| 475 static inline const ClassDecoder &decode_msr_and_hints( | 379 const ClassDecoder &Arm32DecoderState::decode_msr_and_hints(const Instruction in sn) const { |
| 476 const Instruction insn, const Arm32DecoderState *state) { | |
| 477 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00000000) && ((insn & 0x000000FF) == 0x00000000)) { | 380 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00000000) && ((insn & 0x000000FF) == 0x00000000)) { |
| 478 return state->EffectiveNoOp_instance_; | 381 return EffectiveNoOp_instance_; |
| 479 } | 382 } |
| 480 | 383 |
| 481 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00000000) && ((insn & 0x000000FF) == 0x00000002)) { | 384 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00000000) && ((insn & 0x000000FF) == 0x00000002)) { |
| 482 return state->EffectiveNoOp_instance_; | 385 return EffectiveNoOp_instance_; |
| 483 } | 386 } |
| 484 | 387 |
| 485 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00000000) && ((insn & 0x000000FF) == 0x00000004)) { | 388 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00000000) && ((insn & 0x000000FF) == 0x00000004)) { |
| 486 return state->EffectiveNoOp_instance_; | 389 return EffectiveNoOp_instance_; |
| 487 } | 390 } |
| 488 | 391 |
| 489 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00000000) && ((insn & 0x000000FD) == 0x00000001)) { | 392 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00000000) && ((insn & 0x000000FD) == 0x00000001)) { |
| 490 return state->EffectiveNoOp_instance_; | 393 return EffectiveNoOp_instance_; |
| 491 } | 394 } |
| 492 | 395 |
| 493 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00000000) && ((insn & 0x000000F0) == 0x000000F0)) { | 396 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00000000) && ((insn & 0x000000F0) == 0x000000F0)) { |
| 494 return state->EffectiveNoOp_instance_; | 397 return EffectiveNoOp_instance_; |
| 495 } | 398 } |
| 496 | 399 |
| 497 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00040000) && (true)) { | 400 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000F0000) == 0x00040000) && (true)) { |
| 498 return state->MoveToStatusRegister_instance_; | 401 return MoveToStatusRegister_instance_; |
| 499 } | 402 } |
| 500 | 403 |
| 501 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000B0000) == 0x00080000) && (true)) { | 404 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x000B0000) == 0x00080000) && (true)) { |
| 502 return state->MoveToStatusRegister_instance_; | 405 return MoveToStatusRegister_instance_; |
| 503 } | 406 } |
| 504 | 407 |
| 505 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x00030000) == 0x00010000) && (true)) { | 408 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x00030000) == 0x00010000) && (true)) { |
| 506 return state->Forbidden_instance_; | 409 return Forbidden_instance_; |
| 507 } | 410 } |
| 508 | 411 |
| 509 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x00020000) == 0x00020000) && (true)) { | 412 if (((insn & 0x00400000) == 0x00000000) && ((insn & 0x00020000) == 0x00020000) && (true)) { |
| 510 return state->Forbidden_instance_; | 413 return Forbidden_instance_; |
| 511 } | 414 } |
| 512 | 415 |
| 513 if (((insn & 0x00400000) == 0x00400000) && (true) && (true)) { | 416 if (((insn & 0x00400000) == 0x00400000) && (true) && (true)) { |
| 514 return state->Forbidden_instance_; | 417 return Forbidden_instance_; |
| 515 } | 418 } |
| 516 | 419 |
| 517 if ((true) && (true) && (true)) { | 420 if ((true) && (true) && (true)) { |
| 518 return state->Forbidden_instance_; | 421 return Forbidden_instance_; |
| 519 } | 422 } |
| 520 | 423 |
| 521 // Catch any attempt to fall through... | 424 // Catch any attempt to fall through... |
| 522 fprintf(stderr, "TABLE IS INCOMPLETE: msr_and_hints could not parse %08X",insn .bits(31,0)); | 425 fprintf(stderr, "TABLE IS INCOMPLETE: msr_and_hints could not parse %08X",insn .bits(31,0)); |
| 523 return state->Forbidden_instance_; | 426 return Forbidden_instance_; |
| 524 } | 427 } |
| 428 | |
| 525 | 429 |
| 526 /* | 430 /* |
| 527 * Implementation of table misc. | 431 * Implementation of table misc. |
| 528 * Specified by: See Section A5.2.12. | 432 * Specified by: See Section A5.2.12. |
| 529 */ | 433 */ |
| 530 static inline const ClassDecoder &decode_misc( | 434 const ClassDecoder &Arm32DecoderState::decode_misc(const Instruction insn) const { |
| 531 const Instruction insn, const Arm32DecoderState *state) { | |
| 532 if (((insn & 0x00000070) == 0x00000000) && ((insn & 0x00600000) == 0x00200000) && ((insn & 0x00030000) == 0x00000000)) { | 435 if (((insn & 0x00000070) == 0x00000000) && ((insn & 0x00600000) == 0x00200000) && ((insn & 0x00030000) == 0x00000000)) { |
| 533 return state->MoveToStatusRegister_instance_; | 436 return MoveToStatusRegister_instance_; |
| 534 } | 437 } |
| 535 | 438 |
| 536 if (((insn & 0x00000070) == 0x00000000) && ((insn & 0x00600000) == 0x00200000) && ((insn & 0x00030000) == 0x00010000)) { | 439 if (((insn & 0x00000070) == 0x00000000) && ((insn & 0x00600000) == 0x00200000) && ((insn & 0x00030000) == 0x00010000)) { |
| 537 return state->Forbidden_instance_; | 440 return Forbidden_instance_; |
| 538 } | 441 } |
| 539 | 442 |
| 540 if (((insn & 0x00000070) == 0x00000000) && ((insn & 0x00600000) == 0x00200000) && ((insn & 0x00020000) == 0x00020000)) { | 443 if (((insn & 0x00000070) == 0x00000000) && ((insn & 0x00600000) == 0x00200000) && ((insn & 0x00020000) == 0x00020000)) { |
| 541 return state->Forbidden_instance_; | 444 return Forbidden_instance_; |
| 542 } | 445 } |
| 543 | 446 |
| 544 if (((insn & 0x00000070) == 0x00000000) && ((insn & 0x00600000) == 0x00600000) && (true)) { | 447 if (((insn & 0x00000070) == 0x00000000) && ((insn & 0x00600000) == 0x00600000) && (true)) { |
| 545 return state->Forbidden_instance_; | 448 return Forbidden_instance_; |
| 546 } | 449 } |
| 547 | 450 |
| 548 if (((insn & 0x00000070) == 0x00000000) && ((insn & 0x00200000) == 0x00000000) && (true)) { | 451 if (((insn & 0x00000070) == 0x00000000) && ((insn & 0x00200000) == 0x00000000) && (true)) { |
| 549 return state->DataProc_instance_; | 452 return DataProc_instance_; |
| 550 } | 453 } |
| 551 | 454 |
| 552 if (((insn & 0x00000070) == 0x00000010) && ((insn & 0x00600000) == 0x00200000) && (true)) { | 455 if (((insn & 0x00000070) == 0x00000010) && ((insn & 0x00600000) == 0x00200000) && (true)) { |
| 553 return state->BxBlx_instance_; | 456 return BxBlx_instance_; |
| 554 } | 457 } |
| 555 | 458 |
| 556 if (((insn & 0x00000070) == 0x00000010) && ((insn & 0x00600000) == 0x00600000) && (true)) { | 459 if (((insn & 0x00000070) == 0x00000010) && ((insn & 0x00600000) == 0x00600000) && (true)) { |
| 557 return state->DataProc_instance_; | 460 return DataProc_instance_; |
| 558 } | 461 } |
| 559 | 462 |
| 560 if (((insn & 0x00000070) == 0x00000020) && ((insn & 0x00600000) == 0x00200000) && (true)) { | 463 if (((insn & 0x00000070) == 0x00000020) && ((insn & 0x00600000) == 0x00200000) && (true)) { |
| 561 return state->Forbidden_instance_; | 464 return Forbidden_instance_; |
| 562 } | 465 } |
| 563 | 466 |
| 564 if (((insn & 0x00000070) == 0x00000030) && ((insn & 0x00600000) == 0x00200000) && (true)) { | 467 if (((insn & 0x00000070) == 0x00000030) && ((insn & 0x00600000) == 0x00200000) && (true)) { |
| 565 return state->BxBlx_instance_; | 468 return BxBlx_instance_; |
| 566 } | 469 } |
| 567 | 470 |
| 568 if (((insn & 0x00000070) == 0x00000050) && (true) && (true)) { | 471 if (((insn & 0x00000070) == 0x00000050) && (true) && (true)) { |
| 569 return decode_sat_add_sub(insn, state); | 472 return decode_sat_add_sub(insn); |
| 570 } | 473 } |
| 571 | 474 |
| 572 if (((insn & 0x00000070) == 0x00000070) && ((insn & 0x00600000) == 0x00200000) && (true)) { | 475 if (((insn & 0x00000070) == 0x00000070) && ((insn & 0x00600000) == 0x00200000) && (true)) { |
| 573 return state->Breakpoint_instance_; | 476 return Breakpoint_instance_; |
| 574 } | 477 } |
| 575 | 478 |
| 576 if (((insn & 0x00000070) == 0x00000070) && ((insn & 0x00600000) == 0x00600000) && (true)) { | 479 if (((insn & 0x00000070) == 0x00000070) && ((insn & 0x00600000) == 0x00600000) && (true)) { |
| 577 return state->Forbidden_instance_; | 480 return Forbidden_instance_; |
| 578 } | 481 } |
| 579 | 482 |
| 580 if ((true) && (true) && (true)) { | 483 if ((true) && (true) && (true)) { |
| 581 return state->Undefined_instance_; | 484 return Undefined_instance_; |
| 582 } | 485 } |
| 583 | 486 |
| 584 // Catch any attempt to fall through... | 487 // Catch any attempt to fall through... |
| 585 fprintf(stderr, "TABLE IS INCOMPLETE: misc could not parse %08X",insn.bits(31, 0)); | 488 fprintf(stderr, "TABLE IS INCOMPLETE: misc could not parse %08X",insn.bits(31, 0)); |
| 586 return state->Forbidden_instance_; | 489 return Forbidden_instance_; |
| 587 } | 490 } |
| 491 | |
| 588 | 492 |
| 589 /* | 493 /* |
| 590 * Implementation of table load_store_word_byte. | 494 * Implementation of table load_store_word_byte. |
| 591 * Specified by: See Section A5.3. | 495 * Specified by: See Section A5.3. |
| 592 */ | 496 */ |
| 593 static inline const ClassDecoder &decode_load_store_word_byte( | 497 const ClassDecoder &Arm32DecoderState::decode_load_store_word_byte(const Instruc tion insn) const { |
| 594 const Instruction insn, const Arm32DecoderState *state) { | |
| 595 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01200000) == 0x00200000) && (true)) { | 498 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x01200000) == 0x00200000) && (true)) { |
| 596 return state->Forbidden_instance_; | 499 return Forbidden_instance_; |
| 597 } | 500 } |
| 598 | 501 |
| 599 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x00100000) == 0x00000000) && (true)) { | 502 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x00100000) == 0x00000000) && (true)) { |
| 600 return state->StoreImmediate_instance_; | 503 return StoreImmediate_instance_; |
| 601 } | 504 } |
| 602 | 505 |
| 603 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x00100000) == 0x00100000) && (true)) { | 506 if (((insn & 0x02000000) == 0x00000000) && ((insn & 0x00100000) == 0x00100000) && (true)) { |
| 604 return state->LoadImmediate_instance_; | 507 return LoadImmediate_instance_; |
| 605 } | 508 } |
| 606 | 509 |
| 607 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x01200000) == 0x00200000) && ((insn & 0x00000010) == 0x00000000)) { | 510 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x01200000) == 0x00200000) && ((insn & 0x00000010) == 0x00000000)) { |
| 608 return state->Forbidden_instance_; | 511 return Forbidden_instance_; |
| 609 } | 512 } |
| 610 | 513 |
| 611 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x00100000) == 0x00000000) && ((insn & 0x00000010) == 0x00000000)) { | 514 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x00100000) == 0x00000000) && ((insn & 0x00000010) == 0x00000000)) { |
| 612 return state->StoreRegister_instance_; | 515 return StoreRegister_instance_; |
| 613 } | 516 } |
| 614 | 517 |
| 615 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x00100000) == 0x00100000) && ((insn & 0x00000010) == 0x00000000)) { | 518 if (((insn & 0x02000000) == 0x02000000) && ((insn & 0x00100000) == 0x00100000) && ((insn & 0x00000010) == 0x00000000)) { |
| 616 return state->LoadRegister_instance_; | 519 return LoadRegister_instance_; |
| 617 } | 520 } |
| 618 | 521 |
| 619 // Catch any attempt to fall through... | 522 // Catch any attempt to fall through... |
| 620 fprintf(stderr, "TABLE IS INCOMPLETE: load_store_word_byte could not parse %08 X",insn.bits(31,0)); | 523 fprintf(stderr, "TABLE IS INCOMPLETE: load_store_word_byte could not parse %08 X",insn.bits(31,0)); |
| 621 return state->Forbidden_instance_; | 524 return Forbidden_instance_; |
| 622 } | 525 } |
| 526 | |
| 623 | 527 |
| 624 /* | 528 /* |
| 625 * Implementation of table media. | 529 * Implementation of table media. |
| 626 * Specified by: See Section A5.4. | 530 * Specified by: See Section A5.4. |
| 627 */ | 531 */ |
| 628 static inline const ClassDecoder &decode_media( | 532 const ClassDecoder &Arm32DecoderState::decode_media(const Instruction insn) cons t { |
| 629 const Instruction insn, const Arm32DecoderState *state) { | |
| 630 if (((insn & 0x01F00000) == 0x01800000) && ((insn & 0x000000E0) == 0x00000000) ) { | 533 if (((insn & 0x01F00000) == 0x01800000) && ((insn & 0x000000E0) == 0x00000000) ) { |
| 631 return state->Multiply_instance_; | 534 return Multiply_instance_; |
| 632 } | 535 } |
| 633 | 536 |
| 634 if (((insn & 0x01F00000) == 0x01F00000) && ((insn & 0x000000E0) == 0x000000E0) ) { | 537 if (((insn & 0x01F00000) == 0x01F00000) && ((insn & 0x000000E0) == 0x000000E0) ) { |
| 635 return state->Roadblock_instance_; | 538 return Roadblock_instance_; |
| 636 } | 539 } |
| 637 | 540 |
| 638 if (((insn & 0x01E00000) == 0x01C00000) && ((insn & 0x00000060) == 0x00000000) ) { | 541 if (((insn & 0x01E00000) == 0x01C00000) && ((insn & 0x00000060) == 0x00000000) ) { |
| 639 return state->DataProc_instance_; | 542 return DataProc_instance_; |
| 640 } | 543 } |
| 641 | 544 |
| 642 if (((insn & 0x01A00000) == 0x01A00000) && ((insn & 0x00000060) == 0x00000040) ) { | 545 if (((insn & 0x01A00000) == 0x01A00000) && ((insn & 0x00000060) == 0x00000040) ) { |
| 643 return state->DataProc_instance_; | 546 return DataProc_instance_; |
| 644 } | 547 } |
| 645 | 548 |
| 646 if (((insn & 0x01800000) == 0x00000000) && (true)) { | 549 if (((insn & 0x01800000) == 0x00000000) && (true)) { |
| 647 return decode_parallel_add_sub(insn, state); | 550 return decode_parallel_add_sub(insn); |
| 648 } | 551 } |
| 649 | 552 |
| 650 if (((insn & 0x01800000) == 0x00800000) && (true)) { | 553 if (((insn & 0x01800000) == 0x00800000) && (true)) { |
| 651 return decode_pack_sat_rev(insn, state); | 554 return decode_pack_sat_rev(insn); |
| 652 } | 555 } |
| 653 | 556 |
| 654 if (((insn & 0x01800000) == 0x01000000) && (true)) { | 557 if (((insn & 0x01800000) == 0x01000000) && (true)) { |
| 655 return decode_signed_mult(insn, state); | 558 return decode_signed_mult(insn); |
| 656 } | 559 } |
| 657 | 560 |
| 658 if ((true) && (true)) { | 561 if ((true) && (true)) { |
| 659 return state->Undefined_instance_; | 562 return Undefined_instance_; |
| 660 } | 563 } |
| 661 | 564 |
| 662 // Catch any attempt to fall through... | 565 // Catch any attempt to fall through... |
| 663 fprintf(stderr, "TABLE IS INCOMPLETE: media could not parse %08X",insn.bits(31 ,0)); | 566 fprintf(stderr, "TABLE IS INCOMPLETE: media could not parse %08X",insn.bits(31 ,0)); |
| 664 return state->Forbidden_instance_; | 567 return Forbidden_instance_; |
| 665 } | 568 } |
| 569 | |
| 666 | 570 |
| 667 /* | 571 /* |
| 668 * Implementation of table parallel_add_sub. | 572 * Implementation of table parallel_add_sub. |
| 669 * Specified by: See Sections A5.4.1, A5.4.2. | 573 * Specified by: See Sections A5.4.1, A5.4.2. |
| 670 */ | 574 */ |
| 671 static inline const ClassDecoder &decode_parallel_add_sub( | 575 const ClassDecoder &Arm32DecoderState::decode_parallel_add_sub(const Instruction insn) const { |
| 672 const Instruction insn, const Arm32DecoderState *state) { | |
| 673 if (((insn & 0x00300000) == 0x00200000) && ((insn & 0x000000E0) == 0x00000080) ) { | 576 if (((insn & 0x00300000) == 0x00200000) && ((insn & 0x000000E0) == 0x00000080) ) { |
| 674 return state->DataProc_instance_; | 577 return DataProc_instance_; |
| 675 } | 578 } |
| 676 | 579 |
| 677 if (((insn & 0x00300000) == 0x00200000) && ((insn & 0x000000E0) == 0x000000E0) ) { | 580 if (((insn & 0x00300000) == 0x00200000) && ((insn & 0x000000E0) == 0x000000E0) ) { |
| 678 return state->DataProc_instance_; | 581 return DataProc_instance_; |
| 679 } | 582 } |
| 680 | 583 |
| 681 if (((insn & 0x00300000) == 0x00200000) && ((insn & 0x00000080) == 0x00000000) ) { | 584 if (((insn & 0x00300000) == 0x00200000) && ((insn & 0x00000080) == 0x00000000) ) { |
| 682 return state->DataProc_instance_; | 585 return DataProc_instance_; |
| 683 } | 586 } |
| 684 | 587 |
| 685 if (((insn & 0x00100000) == 0x00100000) && ((insn & 0x000000E0) == 0x00000080) ) { | 588 if (((insn & 0x00100000) == 0x00100000) && ((insn & 0x000000E0) == 0x00000080) ) { |
| 686 return state->DataProc_instance_; | 589 return DataProc_instance_; |
| 687 } | 590 } |
| 688 | 591 |
| 689 if (((insn & 0x00100000) == 0x00100000) && ((insn & 0x000000E0) == 0x000000E0) ) { | 592 if (((insn & 0x00100000) == 0x00100000) && ((insn & 0x000000E0) == 0x000000E0) ) { |
| 690 return state->DataProc_instance_; | 593 return DataProc_instance_; |
| 691 } | 594 } |
| 692 | 595 |
| 693 if (((insn & 0x00100000) == 0x00100000) && ((insn & 0x00000080) == 0x00000000) ) { | 596 if (((insn & 0x00100000) == 0x00100000) && ((insn & 0x00000080) == 0x00000000) ) { |
| 694 return state->DataProc_instance_; | 597 return DataProc_instance_; |
| 695 } | 598 } |
| 696 | 599 |
| 697 if ((true) && (true)) { | 600 if ((true) && (true)) { |
| 698 return state->Undefined_instance_; | 601 return Undefined_instance_; |
| 699 } | 602 } |
| 700 | 603 |
| 701 // Catch any attempt to fall through... | 604 // Catch any attempt to fall through... |
| 702 fprintf(stderr, "TABLE IS INCOMPLETE: parallel_add_sub could not parse %08X",i nsn.bits(31,0)); | 605 fprintf(stderr, "TABLE IS INCOMPLETE: parallel_add_sub could not parse %08X",i nsn.bits(31,0)); |
| 703 return state->Forbidden_instance_; | 606 return Forbidden_instance_; |
| 704 } | 607 } |
| 608 | |
| 705 | 609 |
| 706 /* | 610 /* |
| 707 * Implementation of table pack_sat_rev. | 611 * Implementation of table pack_sat_rev. |
| 708 * Specified by: See Section A5.4.3. | 612 * Specified by: See Section A5.4.3. |
| 709 */ | 613 */ |
| 710 static inline const ClassDecoder &decode_pack_sat_rev( | 614 const ClassDecoder &Arm32DecoderState::decode_pack_sat_rev(const Instruction ins n) const { |
| 711 const Instruction insn, const Arm32DecoderState *state) { | |
| 712 if (((insn & 0x00700000) == 0x00000000) && ((insn & 0x000000E0) == 0x000000A0) ) { | 615 if (((insn & 0x00700000) == 0x00000000) && ((insn & 0x000000E0) == 0x000000A0) ) { |
| 713 return state->PackSatRev_instance_; | 616 return PackSatRev_instance_; |
| 714 } | 617 } |
| 715 | 618 |
| 716 if (((insn & 0x00700000) == 0x00000000) && ((insn & 0x00000020) == 0x00000000) ) { | 619 if (((insn & 0x00700000) == 0x00000000) && ((insn & 0x00000020) == 0x00000000) ) { |
| 717 return state->PackSatRev_instance_; | 620 return PackSatRev_instance_; |
| 718 } | 621 } |
| 719 | 622 |
| 720 if (((insn & 0x00700000) == 0x00400000) && ((insn & 0x000000E0) == 0x00000060) ) { | 623 if (((insn & 0x00700000) == 0x00400000) && ((insn & 0x000000E0) == 0x00000060) ) { |
| 721 return state->PackSatRev_instance_; | 624 return PackSatRev_instance_; |
| 722 } | 625 } |
| 723 | 626 |
| 724 if (((insn & 0x00700000) == 0x00600000) && ((insn & 0x000000A0) == 0x00000020) ) { | 627 if (((insn & 0x00700000) == 0x00600000) && ((insn & 0x000000A0) == 0x00000020) ) { |
| 725 return state->PackSatRev_instance_; | 628 return PackSatRev_instance_; |
| 726 } | 629 } |
| 727 | 630 |
| 728 if (((insn & 0x00700000) == 0x00700000) && ((insn & 0x000000E0) == 0x00000020) ) { | 631 if (((insn & 0x00700000) == 0x00700000) && ((insn & 0x000000E0) == 0x00000020) ) { |
| 729 return state->PackSatRev_instance_; | 632 return PackSatRev_instance_; |
| 730 } | 633 } |
| 731 | 634 |
| 732 if (((insn & 0x00300000) == 0x00300000) && ((insn & 0x000000E0) == 0x00000060) ) { | 635 if (((insn & 0x00300000) == 0x00300000) && ((insn & 0x000000E0) == 0x00000060) ) { |
| 733 return state->PackSatRev_instance_; | 636 return PackSatRev_instance_; |
| 734 } | 637 } |
| 735 | 638 |
| 736 if (((insn & 0x00300000) == 0x00300000) && ((insn & 0x000000E0) == 0x000000A0) ) { | 639 if (((insn & 0x00300000) == 0x00300000) && ((insn & 0x000000E0) == 0x000000A0) ) { |
| 737 return state->PackSatRev_instance_; | 640 return PackSatRev_instance_; |
| 738 } | 641 } |
| 739 | 642 |
| 740 if (((insn & 0x00500000) == 0x00000000) && ((insn & 0x000000E0) == 0x00000060) ) { | 643 if (((insn & 0x00500000) == 0x00000000) && ((insn & 0x000000E0) == 0x00000060) ) { |
| 741 return state->PackSatRev_instance_; | 644 return PackSatRev_instance_; |
| 742 } | 645 } |
| 743 | 646 |
| 744 if (((insn & 0x00600000) == 0x00200000) && ((insn & 0x000000E0) == 0x00000020) ) { | 647 if (((insn & 0x00600000) == 0x00200000) && ((insn & 0x000000E0) == 0x00000020) ) { |
| 745 return state->PackSatRev_instance_; | 648 return PackSatRev_instance_; |
| 746 } | 649 } |
| 747 | 650 |
| 748 if (((insn & 0x00200000) == 0x00200000) && ((insn & 0x00000020) == 0x00000000) ) { | 651 if (((insn & 0x00200000) == 0x00200000) && ((insn & 0x00000020) == 0x00000000) ) { |
| 749 return state->PackSatRev_instance_; | 652 return PackSatRev_instance_; |
| 750 } | 653 } |
| 751 | 654 |
| 752 if ((true) && (true)) { | 655 if ((true) && (true)) { |
| 753 return state->Undefined_instance_; | 656 return Undefined_instance_; |
| 754 } | 657 } |
| 755 | 658 |
| 756 // Catch any attempt to fall through... | 659 // Catch any attempt to fall through... |
| 757 fprintf(stderr, "TABLE IS INCOMPLETE: pack_sat_rev could not parse %08X",insn. bits(31,0)); | 660 fprintf(stderr, "TABLE IS INCOMPLETE: pack_sat_rev could not parse %08X",insn. bits(31,0)); |
| 758 return state->Forbidden_instance_; | 661 return Forbidden_instance_; |
| 759 } | 662 } |
| 663 | |
| 760 | 664 |
| 761 /* | 665 /* |
| 762 * Implementation of table signed_mult. | 666 * Implementation of table signed_mult. |
| 763 * Specified by: See Section A5.4.4. | 667 * Specified by: See Section A5.4.4. |
| 764 */ | 668 */ |
| 765 static inline const ClassDecoder &decode_signed_mult( | 669 const ClassDecoder &Arm32DecoderState::decode_signed_mult(const Instruction insn ) const { |
| 766 const Instruction insn, const Arm32DecoderState *state) { | |
| 767 if (((insn & 0x00700000) == 0x00000000) && ((insn & 0x000000C0) == 0x00000040) && ((insn & 0x0000F000) != 0x0000F000)) { | 670 if (((insn & 0x00700000) == 0x00000000) && ((insn & 0x000000C0) == 0x00000040) && ((insn & 0x0000F000) != 0x0000F000)) { |
| 768 return state->Multiply_instance_; | 671 return Multiply_instance_; |
| 769 } | 672 } |
| 770 | 673 |
| 771 if (((insn & 0x00700000) == 0x00000000) && ((insn & 0x00000080) == 0x00000000) && (true)) { | 674 if (((insn & 0x00700000) == 0x00000000) && ((insn & 0x00000080) == 0x00000000) && (true)) { |
| 772 return state->Multiply_instance_; | 675 return Multiply_instance_; |
| 773 } | 676 } |
| 774 | 677 |
| 775 if (((insn & 0x00700000) == 0x00400000) && ((insn & 0x00000080) == 0x00000000) && (true)) { | 678 if (((insn & 0x00700000) == 0x00400000) && ((insn & 0x00000080) == 0x00000000) && (true)) { |
| 776 return state->LongMultiply_instance_; | 679 return LongMultiply_instance_; |
| 777 } | 680 } |
| 778 | 681 |
| 779 if (((insn & 0x00700000) == 0x00500000) && ((insn & 0x000000C0) == 0x00000000) && (true)) { | 682 if (((insn & 0x00700000) == 0x00500000) && ((insn & 0x000000C0) == 0x00000000) && (true)) { |
| 780 return state->Multiply_instance_; | 683 return Multiply_instance_; |
| 781 } | 684 } |
| 782 | 685 |
| 783 if (((insn & 0x00700000) == 0x00500000) && ((insn & 0x000000C0) == 0x000000C0) && (true)) { | 686 if (((insn & 0x00700000) == 0x00500000) && ((insn & 0x000000C0) == 0x000000C0) && (true)) { |
| 784 return state->Multiply_instance_; | 687 return Multiply_instance_; |
| 785 } | 688 } |
| 786 | 689 |
| 787 if ((true) && (true) && (true)) { | 690 if ((true) && (true) && (true)) { |
| 788 return state->Undefined_instance_; | 691 return Undefined_instance_; |
| 789 } | 692 } |
| 790 | 693 |
| 791 // Catch any attempt to fall through... | 694 // Catch any attempt to fall through... |
| 792 fprintf(stderr, "TABLE IS INCOMPLETE: signed_mult could not parse %08X",insn.b its(31,0)); | 695 fprintf(stderr, "TABLE IS INCOMPLETE: signed_mult could not parse %08X",insn.b its(31,0)); |
| 793 return state->Forbidden_instance_; | 696 return Forbidden_instance_; |
| 794 } | 697 } |
| 698 | |
| 795 | 699 |
| 796 /* | 700 /* |
| 797 * Implementation of table branch_block_xfer. | 701 * Implementation of table branch_block_xfer. |
| 798 * Specified by: See Section A5.5. | 702 * Specified by: See Section A5.5. |
| 799 */ | 703 */ |
| 800 static inline const ClassDecoder &decode_branch_block_xfer( | 704 const ClassDecoder &Arm32DecoderState::decode_branch_block_xfer(const Instructio n insn) const { |
| 801 const Instruction insn, const Arm32DecoderState *state) { | |
| 802 if (((insn & 0x02500000) == 0x00000000)) { | 705 if (((insn & 0x02500000) == 0x00000000)) { |
| 803 return state->StoreImmediate_instance_; | 706 return StoreImmediate_instance_; |
| 804 } | 707 } |
| 805 | 708 |
| 806 if (((insn & 0x02500000) == 0x00100000)) { | 709 if (((insn & 0x02500000) == 0x00100000)) { |
| 807 return state->LoadMultiple_instance_; | 710 return LoadMultiple_instance_; |
| 808 } | 711 } |
| 809 | 712 |
| 810 if (((insn & 0x02400000) == 0x00400000)) { | 713 if (((insn & 0x02400000) == 0x00400000)) { |
| 811 return state->Forbidden_instance_; | 714 return Forbidden_instance_; |
| 812 } | 715 } |
| 813 | 716 |
| 814 if (((insn & 0x02000000) == 0x02000000)) { | 717 if (((insn & 0x02000000) == 0x02000000)) { |
| 815 return state->Branch_instance_; | 718 return Branch_instance_; |
| 816 } | 719 } |
| 817 | 720 |
| 818 // Catch any attempt to fall through... | 721 // Catch any attempt to fall through... |
| 819 fprintf(stderr, "TABLE IS INCOMPLETE: branch_block_xfer could not parse %08X", insn.bits(31,0)); | 722 fprintf(stderr, "TABLE IS INCOMPLETE: branch_block_xfer could not parse %08X", insn.bits(31,0)); |
| 820 return state->Forbidden_instance_; | 723 return Forbidden_instance_; |
| 821 } | 724 } |
| 725 | |
| 822 | 726 |
| 823 /* | 727 /* |
| 824 * Implementation of table super_cop. | 728 * Implementation of table super_cop. |
| 825 * Specified by: See Section A5.6. | 729 * Specified by: See Section A5.6. |
| 826 */ | 730 */ |
| 827 static inline const ClassDecoder &decode_super_cop( | 731 const ClassDecoder &Arm32DecoderState::decode_super_cop(const Instruction insn) const { |
| 828 const Instruction insn, const Arm32DecoderState *state) { | |
| 829 if (((insn & 0x03F00000) == 0x00400000) && (true)) { | 732 if (((insn & 0x03F00000) == 0x00400000) && (true)) { |
| 830 return state->CoprocessorOp_instance_; | 733 return CoprocessorOp_instance_; |
| 831 } | 734 } |
| 832 | 735 |
| 833 if (((insn & 0x03F00000) == 0x00500000) && (true)) { | 736 if (((insn & 0x03F00000) == 0x00500000) && (true)) { |
| 834 return state->MoveDoubleFromCoprocessor_instance_; | 737 return MoveDoubleFromCoprocessor_instance_; |
| 835 } | 738 } |
| 836 | 739 |
| 837 if (((insn & 0x03E00000) == 0x00000000) && (true)) { | 740 if (((insn & 0x03E00000) == 0x00000000) && (true)) { |
| 838 return state->Undefined_instance_; | 741 return Undefined_instance_; |
| 839 } | 742 } |
| 840 | 743 |
| 841 if (((insn & 0x03100000) == 0x02000000) && ((insn & 0x00000010) == 0x00000010) ) { | 744 if (((insn & 0x03100000) == 0x02000000) && ((insn & 0x00000010) == 0x00000010) ) { |
| 842 return state->CoprocessorOp_instance_; | 745 return CoprocessorOp_instance_; |
| 843 } | 746 } |
| 844 | 747 |
| 845 if (((insn & 0x03100000) == 0x02100000) && ((insn & 0x00000010) == 0x00000010) ) { | 748 if (((insn & 0x03100000) == 0x02100000) && ((insn & 0x00000010) == 0x00000010) ) { |
| 846 return state->MoveFromCoprocessor_instance_; | 749 return MoveFromCoprocessor_instance_; |
| 847 } | 750 } |
| 848 | 751 |
| 849 if (((insn & 0x02100000) == 0x00000000) && (true)) { | 752 if (((insn & 0x02100000) == 0x00000000) && (true)) { |
| 850 return state->StoreCoprocessor_instance_; | 753 return StoreCoprocessor_instance_; |
| 851 } | 754 } |
| 852 | 755 |
| 853 if (((insn & 0x02100000) == 0x00100000) && (true)) { | 756 if (((insn & 0x02100000) == 0x00100000) && (true)) { |
| 854 return state->LoadCoprocessor_instance_; | 757 return LoadCoprocessor_instance_; |
| 855 } | 758 } |
| 856 | 759 |
| 857 if (((insn & 0x03000000) == 0x02000000) && ((insn & 0x00000010) == 0x00000000) ) { | 760 if (((insn & 0x03000000) == 0x02000000) && ((insn & 0x00000010) == 0x00000000) ) { |
| 858 return state->CoprocessorOp_instance_; | 761 return CoprocessorOp_instance_; |
| 859 } | 762 } |
| 860 | 763 |
| 861 if (((insn & 0x03000000) == 0x03000000) && (true)) { | 764 if (((insn & 0x03000000) == 0x03000000) && (true)) { |
| 862 return state->Forbidden_instance_; | 765 return Forbidden_instance_; |
| 863 } | 766 } |
| 864 | 767 |
| 865 // Catch any attempt to fall through... | 768 // Catch any attempt to fall through... |
| 866 fprintf(stderr, "TABLE IS INCOMPLETE: super_cop could not parse %08X",insn.bit s(31,0)); | 769 fprintf(stderr, "TABLE IS INCOMPLETE: super_cop could not parse %08X",insn.bit s(31,0)); |
| 867 return state->Forbidden_instance_; | 770 return Forbidden_instance_; |
| 868 } | 771 } |
| 772 | |
| 869 | 773 |
| 870 /* | 774 /* |
| 871 * Implementation of table unconditional. | 775 * Implementation of table unconditional. |
| 872 * Specified by: See Section A5.7. | 776 * Specified by: See Section A5.7. |
| 873 */ | 777 */ |
| 874 static inline const ClassDecoder &decode_unconditional( | 778 const ClassDecoder &Arm32DecoderState::decode_unconditional(const Instruction in sn) const { |
| 875 const Instruction insn, const Arm32DecoderState *state) { | |
| 876 if (((insn & 0x0FF00000) == 0x0C400000) && (true) && (true)) { | 779 if (((insn & 0x0FF00000) == 0x0C400000) && (true) && (true)) { |
| 877 return state->CoprocessorOp_instance_; | 780 return CoprocessorOp_instance_; |
| 878 } | 781 } |
| 879 | 782 |
| 880 if (((insn & 0x0FF00000) == 0x0C500000) && (true) && (true)) { | 783 if (((insn & 0x0FF00000) == 0x0C500000) && (true) && (true)) { |
| 881 return state->MoveDoubleFromCoprocessor_instance_; | 784 return MoveDoubleFromCoprocessor_instance_; |
| 882 } | 785 } |
| 883 | 786 |
| 884 if (((insn & 0x0FB00000) == 0x0C200000) && (true) && (true)) { | 787 if (((insn & 0x0FB00000) == 0x0C200000) && (true) && (true)) { |
| 885 return state->StoreCoprocessor_instance_; | 788 return StoreCoprocessor_instance_; |
| 886 } | 789 } |
| 887 | 790 |
| 888 if (((insn & 0x0FB00000) == 0x0C300000) && (true) && ((insn & 0x000F0000) != 0 x000F0000)) { | 791 if (((insn & 0x0FB00000) == 0x0C300000) && (true) && ((insn & 0x000F0000) != 0 x000F0000)) { |
| 889 return state->LoadCoprocessor_instance_; | 792 return LoadCoprocessor_instance_; |
| 890 } | 793 } |
| 891 | 794 |
| 892 if (((insn & 0x0F900000) == 0x0C800000) && (true) && (true)) { | 795 if (((insn & 0x0F900000) == 0x0C800000) && (true) && (true)) { |
| 893 return state->StoreCoprocessor_instance_; | 796 return StoreCoprocessor_instance_; |
| 894 } | 797 } |
| 895 | 798 |
| 896 if (((insn & 0x0F900000) == 0x0C900000) && (true) && ((insn & 0x000F0000) == 0 x000F0000)) { | 799 if (((insn & 0x0F900000) == 0x0C900000) && (true) && ((insn & 0x000F0000) == 0 x000F0000)) { |
| 897 return state->LoadCoprocessor_instance_; | 800 return LoadCoprocessor_instance_; |
| 898 } | 801 } |
| 899 | 802 |
| 900 if (((insn & 0x0E500000) == 0x08100000) && (true) && (true)) { | 803 if (((insn & 0x0E500000) == 0x08100000) && (true) && (true)) { |
| 901 return state->Forbidden_instance_; | 804 return Forbidden_instance_; |
| 902 } | 805 } |
| 903 | 806 |
| 904 if (((insn & 0x0E500000) == 0x08400000) && (true) && (true)) { | 807 if (((insn & 0x0E500000) == 0x08400000) && (true) && (true)) { |
| 905 return state->Forbidden_instance_; | 808 return Forbidden_instance_; |
| 906 } | 809 } |
| 907 | 810 |
| 908 if (((insn & 0x0F100000) == 0x0D000000) && (true) && (true)) { | 811 if (((insn & 0x0F100000) == 0x0D000000) && (true) && (true)) { |
| 909 return state->StoreCoprocessor_instance_; | 812 return StoreCoprocessor_instance_; |
| 910 } | 813 } |
| 911 | 814 |
| 912 if (((insn & 0x0F100000) == 0x0D100000) && (true) && ((insn & 0x000F0000) == 0 x000F0000)) { | 815 if (((insn & 0x0F100000) == 0x0D100000) && (true) && ((insn & 0x000F0000) == 0 x000F0000)) { |
| 913 return state->LoadCoprocessor_instance_; | 816 return LoadCoprocessor_instance_; |
| 914 } | 817 } |
| 915 | 818 |
| 916 if (((insn & 0x0F100000) == 0x0E000000) && ((insn & 0x00000010) == 0x00000010) && (true)) { | 819 if (((insn & 0x0F100000) == 0x0E000000) && ((insn & 0x00000010) == 0x00000010) && (true)) { |
| 917 return state->CoprocessorOp_instance_; | 820 return CoprocessorOp_instance_; |
| 918 } | 821 } |
| 919 | 822 |
| 920 if (((insn & 0x0F100000) == 0x0E100000) && ((insn & 0x00000010) == 0x00000010) && (true)) { | 823 if (((insn & 0x0F100000) == 0x0E100000) && ((insn & 0x00000010) == 0x00000010) && (true)) { |
| 921 return state->MoveFromCoprocessor_instance_; | 824 return MoveFromCoprocessor_instance_; |
| 922 } | 825 } |
| 923 | 826 |
| 924 if (((insn & 0x0F000000) == 0x0E000000) && ((insn & 0x00000010) == 0x00000000) && (true)) { | 827 if (((insn & 0x0F000000) == 0x0E000000) && ((insn & 0x00000010) == 0x00000000) && (true)) { |
| 925 return state->CoprocessorOp_instance_; | 828 return CoprocessorOp_instance_; |
| 926 } | 829 } |
| 927 | 830 |
| 928 if (((insn & 0x0E000000) == 0x0A000000) && (true) && (true)) { | 831 if (((insn & 0x0E000000) == 0x0A000000) && (true) && (true)) { |
| 929 return state->Forbidden_instance_; | 832 return Forbidden_instance_; |
| 930 } | 833 } |
| 931 | 834 |
| 932 if (((insn & 0x08000000) == 0x00000000) && (true) && (true)) { | 835 if (((insn & 0x08000000) == 0x00000000) && (true) && (true)) { |
| 933 return decode_misc_hints_simd(insn, state); | 836 return decode_misc_hints_simd(insn); |
| 934 } | 837 } |
| 935 | 838 |
| 936 if ((true) && (true) && (true)) { | 839 if ((true) && (true) && (true)) { |
| 937 return state->Undefined_instance_; | 840 return Undefined_instance_; |
| 938 } | 841 } |
| 939 | 842 |
| 940 // Catch any attempt to fall through... | 843 // Catch any attempt to fall through... |
| 941 fprintf(stderr, "TABLE IS INCOMPLETE: unconditional could not parse %08X",insn .bits(31,0)); | 844 fprintf(stderr, "TABLE IS INCOMPLETE: unconditional could not parse %08X",insn .bits(31,0)); |
| 942 return state->Forbidden_instance_; | 845 return Forbidden_instance_; |
| 943 } | 846 } |
| 847 | |
| 944 | 848 |
| 945 /* | 849 /* |
| 946 * Implementation of table misc_hints_simd. | 850 * Implementation of table misc_hints_simd. |
| 947 * Specified by: See Section A5.7.1. | 851 * Specified by: See Section A5.7.1. |
| 948 */ | 852 */ |
| 949 static inline const ClassDecoder &decode_misc_hints_simd( | 853 const ClassDecoder &Arm32DecoderState::decode_misc_hints_simd(const Instruction insn) const { |
| 950 const Instruction insn, const Arm32DecoderState *state) { | |
| 951 if (((insn & 0x07F00000) == 0x01000000) && ((insn & 0x000000F0) == 0x00000000) && ((insn & 0x00010000) == 0x00010000)) { | 854 if (((insn & 0x07F00000) == 0x01000000) && ((insn & 0x000000F0) == 0x00000000) && ((insn & 0x00010000) == 0x00010000)) { |
| 952 return state->Forbidden_instance_; | 855 return Forbidden_instance_; |
| 953 } | 856 } |
| 954 | 857 |
| 955 if (((insn & 0x07F00000) == 0x01000000) && ((insn & 0x00000020) == 0x00000000) && ((insn & 0x00010000) == 0x00000000)) { | 858 if (((insn & 0x07F00000) == 0x01000000) && ((insn & 0x00000020) == 0x00000000) && ((insn & 0x00010000) == 0x00000000)) { |
| 956 return state->Forbidden_instance_; | 859 return Forbidden_instance_; |
| 957 } | 860 } |
| 958 | 861 |
| 959 if (((insn & 0x07F00000) == 0x05700000) && ((insn & 0x000000F0) == 0x00000010) && (true)) { | 862 if (((insn & 0x07F00000) == 0x05700000) && ((insn & 0x000000F0) == 0x00000010) && (true)) { |
| 960 return state->EffectiveNoOp_instance_; | 863 return EffectiveNoOp_instance_; |
| 961 } | 864 } |
| 962 | 865 |
| 963 if (((insn & 0x07F00000) == 0x05700000) && ((insn & 0x000000F0) == 0x00000050) && (true)) { | 866 if (((insn & 0x07F00000) == 0x05700000) && ((insn & 0x000000F0) == 0x00000050) && (true)) { |
| 964 return state->EffectiveNoOp_instance_; | 867 return EffectiveNoOp_instance_; |
| 965 } | 868 } |
| 966 | 869 |
| 967 if (((insn & 0x07F00000) == 0x05700000) && ((insn & 0x000000D0) == 0x00000040) && (true)) { | 870 if (((insn & 0x07F00000) == 0x05700000) && ((insn & 0x000000D0) == 0x00000040) && (true)) { |
| 968 return state->EffectiveNoOp_instance_; | 871 return EffectiveNoOp_instance_; |
| 969 } | 872 } |
| 970 | 873 |
| 971 if (((insn & 0x07700000) == 0x04100000) && (true) && (true)) { | 874 if (((insn & 0x07700000) == 0x04100000) && (true) && (true)) { |
| 972 return state->EffectiveNoOp_instance_; | 875 return EffectiveNoOp_instance_; |
| 973 } | 876 } |
| 974 | 877 |
| 975 if (((insn & 0x07700000) == 0x04500000) && (true) && (true)) { | 878 if (((insn & 0x07700000) == 0x04500000) && (true) && (true)) { |
| 976 return state->EffectiveNoOp_instance_; | 879 return EffectiveNoOp_instance_; |
| 977 } | 880 } |
| 978 | 881 |
| 979 if (((insn & 0x07700000) == 0x05100000) && (true) && ((insn & 0x000F0000) != 0 x000F0000)) { | 882 if (((insn & 0x07700000) == 0x05100000) && (true) && ((insn & 0x000F0000) != 0 x000F0000)) { |
| 980 return state->EffectiveNoOp_instance_; | 883 return EffectiveNoOp_instance_; |
| 981 } | 884 } |
| 982 | 885 |
| 983 if (((insn & 0x07700000) == 0x05100000) && (true) && ((insn & 0x000F0000) == 0 x000F0000)) { | 886 if (((insn & 0x07700000) == 0x05100000) && (true) && ((insn & 0x000F0000) == 0 x000F0000)) { |
| 984 return state->Unpredictable_instance_; | 887 return Unpredictable_instance_; |
| 985 } | 888 } |
| 986 | 889 |
| 987 if (((insn & 0x07700000) == 0x05500000) && (true) && (true)) { | 890 if (((insn & 0x07700000) == 0x05500000) && (true) && (true)) { |
| 988 return state->EffectiveNoOp_instance_; | 891 return EffectiveNoOp_instance_; |
| 989 } | 892 } |
| 990 | 893 |
| 991 if (((insn & 0x07700000) == 0x06500000) && ((insn & 0x00000010) == 0x00000000) && (true)) { | 894 if (((insn & 0x07700000) == 0x06500000) && ((insn & 0x00000010) == 0x00000000) && (true)) { |
| 992 return state->EffectiveNoOp_instance_; | 895 return EffectiveNoOp_instance_; |
| 993 } | 896 } |
| 994 | 897 |
| 995 if (((insn & 0x07700000) == 0x07500000) && ((insn & 0x00000010) == 0x00000000) && (true)) { | 898 if (((insn & 0x07700000) == 0x07500000) && ((insn & 0x00000010) == 0x00000000) && (true)) { |
| 996 return state->EffectiveNoOp_instance_; | 899 return EffectiveNoOp_instance_; |
| 997 } | 900 } |
| 998 | 901 |
| 999 if (((insn & 0x06700000) == 0x06100000) && ((insn & 0x00000010) == 0x00000000) && (true)) { | 902 if (((insn & 0x06700000) == 0x06100000) && ((insn & 0x00000010) == 0x00000000) && (true)) { |
| 1000 return state->EffectiveNoOp_instance_; | 903 return EffectiveNoOp_instance_; |
| 1001 } | 904 } |
| 1002 | 905 |
| 1003 if (((insn & 0x06300000) == 0x04300000) && (true) && (true)) { | 906 if (((insn & 0x06300000) == 0x04300000) && (true) && (true)) { |
| 1004 return state->Unpredictable_instance_; | 907 return Unpredictable_instance_; |
| 1005 } | 908 } |
| 1006 | 909 |
| 1007 if (((insn & 0x06300000) == 0x06300000) && ((insn & 0x00000010) == 0x00000000) && (true)) { | 910 if (((insn & 0x06300000) == 0x06300000) && ((insn & 0x00000010) == 0x00000000) && (true)) { |
| 1008 return state->Unpredictable_instance_; | 911 return Unpredictable_instance_; |
| 1009 } | 912 } |
| 1010 | 913 |
| 1011 if (((insn & 0x07100000) == 0x04000000) && (true) && (true)) { | 914 if (((insn & 0x07100000) == 0x04000000) && (true) && (true)) { |
| 1012 return decode_simd_load_store(insn, state); | 915 return decode_simd_load_store(insn); |
| 1013 } | 916 } |
| 1014 | 917 |
| 1015 if (((insn & 0x06000000) == 0x02000000) && (true) && (true)) { | 918 if (((insn & 0x06000000) == 0x02000000) && (true) && (true)) { |
| 1016 return decode_simd_dp(insn, state); | 919 return decode_simd_dp(insn); |
| 1017 } | 920 } |
| 1018 | 921 |
| 1019 if ((true) && (true) && (true)) { | 922 if ((true) && (true) && (true)) { |
| 1020 return state->Undefined_instance_; | 923 return Undefined_instance_; |
| 1021 } | 924 } |
| 1022 | 925 |
| 1023 // Catch any attempt to fall through... | 926 // Catch any attempt to fall through... |
| 1024 fprintf(stderr, "TABLE IS INCOMPLETE: misc_hints_simd could not parse %08X",in sn.bits(31,0)); | 927 fprintf(stderr, "TABLE IS INCOMPLETE: misc_hints_simd could not parse %08X",in sn.bits(31,0)); |
| 1025 return state->Forbidden_instance_; | 928 return Forbidden_instance_; |
| 1026 } | 929 } |
| 930 | |
| 1027 | 931 |
| 1028 /* | 932 /* |
| 1029 * Implementation of table simd_dp. | 933 * Implementation of table simd_dp. |
| 1030 * Specified by: See Section A7.4. | 934 * Specified by: See Section A7.4. |
| 1031 */ | 935 */ |
| 1032 static inline const ClassDecoder &decode_simd_dp( | 936 const ClassDecoder &Arm32DecoderState::decode_simd_dp(const Instruction insn) co nst { |
| 1033 const Instruction insn, const Arm32DecoderState *state) { | |
| 1034 if (((insn & 0x01000000) == 0x00000000) && ((insn & 0x00B00000) == 0x00B00000) && (true) && ((insn & 0x00000010) == 0x00000000)) { | 937 if (((insn & 0x01000000) == 0x00000000) && ((insn & 0x00B00000) == 0x00B00000) && (true) && ((insn & 0x00000010) == 0x00000000)) { |
| 1035 return state->EffectiveNoOp_instance_; | 938 return EffectiveNoOp_instance_; |
| 1036 } | 939 } |
| 1037 | 940 |
| 1038 if (((insn & 0x01000000) == 0x01000000) && ((insn & 0x00B00000) == 0x00B00000) && ((insn & 0x00000F00) == 0x00000C00) && ((insn & 0x00000090) == 0x00000000)) { | 941 if (((insn & 0x01000000) == 0x01000000) && ((insn & 0x00B00000) == 0x00B00000) && ((insn & 0x00000F00) == 0x00000C00) && ((insn & 0x00000090) == 0x00000000)) { |
| 1039 return state->EffectiveNoOp_instance_; | 942 return EffectiveNoOp_instance_; |
| 1040 } | 943 } |
| 1041 | 944 |
| 1042 if (((insn & 0x01000000) == 0x01000000) && ((insn & 0x00B00000) == 0x00B00000) && ((insn & 0x00000C00) == 0x00000800) && ((insn & 0x00000010) == 0x00000000)) { | 945 if (((insn & 0x01000000) == 0x01000000) && ((insn & 0x00B00000) == 0x00B00000) && ((insn & 0x00000C00) == 0x00000800) && ((insn & 0x00000010) == 0x00000000)) { |
| 1043 return state->EffectiveNoOp_instance_; | 946 return EffectiveNoOp_instance_; |
| 1044 } | 947 } |
| 1045 | 948 |
| 1046 if (((insn & 0x01000000) == 0x01000000) && ((insn & 0x00B00000) == 0x00B00000) && ((insn & 0x00000800) == 0x00000000) && ((insn & 0x00000010) == 0x00000000)) { | 949 if (((insn & 0x01000000) == 0x01000000) && ((insn & 0x00B00000) == 0x00B00000) && ((insn & 0x00000800) == 0x00000000) && ((insn & 0x00000010) == 0x00000000)) { |
| 1047 return decode_simd_dp_2misc(insn, state); | 950 return decode_simd_dp_2misc(insn); |
| 1048 } | 951 } |
| 1049 | 952 |
| 1050 if ((true) && ((insn & 0x00B80000) == 0x00800000) && (true) && ((insn & 0x0000 0090) == 0x00000010)) { | 953 if ((true) && ((insn & 0x00B80000) == 0x00800000) && (true) && ((insn & 0x0000 0090) == 0x00000010)) { |
| 1051 return decode_simd_dp_1imm(insn, state); | 954 return decode_simd_dp_1imm(insn); |
| 1052 } | 955 } |
| 1053 | 956 |
| 1054 if ((true) && ((insn & 0x00B80000) == 0x00880000) && (true) && ((insn & 0x0000 0090) == 0x00000010)) { | 957 if ((true) && ((insn & 0x00B80000) == 0x00880000) && (true) && ((insn & 0x0000 0090) == 0x00000010)) { |
| 1055 return decode_simd_dp_2shift(insn, state); | 958 return decode_simd_dp_2shift(insn); |
| 1056 } | 959 } |
| 1057 | 960 |
| 1058 if ((true) && ((insn & 0x00B00000) == 0x00900000) && (true) && ((insn & 0x0000 0090) == 0x00000010)) { | 961 if ((true) && ((insn & 0x00B00000) == 0x00900000) && (true) && ((insn & 0x0000 0090) == 0x00000010)) { |
| 1059 return decode_simd_dp_2shift(insn, state); | 962 return decode_simd_dp_2shift(insn); |
| 1060 } | 963 } |
| 1061 | 964 |
| 1062 if ((true) && ((insn & 0x00B00000) == 0x00A00000) && (true) && ((insn & 0x0000 0050) == 0x00000000)) { | 965 if ((true) && ((insn & 0x00B00000) == 0x00A00000) && (true) && ((insn & 0x0000 0050) == 0x00000000)) { |
| 1063 return decode_simd_dp_3diff(insn, state); | 966 return decode_simd_dp_3diff(insn); |
| 1064 } | 967 } |
| 1065 | 968 |
| 1066 if ((true) && ((insn & 0x00B00000) == 0x00A00000) && (true) && ((insn & 0x0000 0050) == 0x00000040)) { | 969 if ((true) && ((insn & 0x00B00000) == 0x00A00000) && (true) && ((insn & 0x0000 0050) == 0x00000040)) { |
| 1067 return decode_simd_dp_2scalar(insn, state); | 970 return decode_simd_dp_2scalar(insn); |
| 1068 } | 971 } |
| 1069 | 972 |
| 1070 if ((true) && ((insn & 0x00A00000) == 0x00800000) && (true) && ((insn & 0x0000 0050) == 0x00000000)) { | 973 if ((true) && ((insn & 0x00A00000) == 0x00800000) && (true) && ((insn & 0x0000 0050) == 0x00000000)) { |
| 1071 return decode_simd_dp_3diff(insn, state); | 974 return decode_simd_dp_3diff(insn); |
| 1072 } | 975 } |
| 1073 | 976 |
| 1074 if ((true) && ((insn & 0x00A00000) == 0x00800000) && (true) && ((insn & 0x0000 0050) == 0x00000040)) { | 977 if ((true) && ((insn & 0x00A00000) == 0x00800000) && (true) && ((insn & 0x0000 0050) == 0x00000040)) { |
| 1075 return decode_simd_dp_2scalar(insn, state); | 978 return decode_simd_dp_2scalar(insn); |
| 1076 } | 979 } |
| 1077 | 980 |
| 1078 if ((true) && ((insn & 0x00A00000) == 0x00A00000) && (true) && ((insn & 0x0000 0090) == 0x00000010)) { | 981 if ((true) && ((insn & 0x00A00000) == 0x00A00000) && (true) && ((insn & 0x0000 0090) == 0x00000010)) { |
| 1079 return decode_simd_dp_2shift(insn, state); | 982 return decode_simd_dp_2shift(insn); |
| 1080 } | 983 } |
| 1081 | 984 |
| 1082 if ((true) && ((insn & 0x00800000) == 0x00000000) && (true) && (true)) { | 985 if ((true) && ((insn & 0x00800000) == 0x00000000) && (true) && (true)) { |
| 1083 return decode_simd_dp_3same(insn, state); | 986 return decode_simd_dp_3same(insn); |
| 1084 } | 987 } |
| 1085 | 988 |
| 1086 if ((true) && ((insn & 0x00800000) == 0x00800000) && (true) && ((insn & 0x0000 0090) == 0x00000090)) { | 989 if ((true) && ((insn & 0x00800000) == 0x00800000) && (true) && ((insn & 0x0000 0090) == 0x00000090)) { |
| 1087 return decode_simd_dp_2shift(insn, state); | 990 return decode_simd_dp_2shift(insn); |
| 1088 } | 991 } |
| 1089 | 992 |
| 1090 if ((true) && (true) && (true) && (true)) { | 993 if ((true) && (true) && (true) && (true)) { |
| 1091 return state->Undefined_instance_; | 994 return Undefined_instance_; |
| 1092 } | 995 } |
| 1093 | 996 |
| 1094 // Catch any attempt to fall through... | 997 // Catch any attempt to fall through... |
| 1095 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp could not parse %08X",insn.bits( 31,0)); | 998 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp could not parse %08X",insn.bits( 31,0)); |
| 1096 return state->Forbidden_instance_; | 999 return Forbidden_instance_; |
| 1097 } | 1000 } |
| 1001 | |
| 1098 | 1002 |
| 1099 /* | 1003 /* |
| 1100 * Implementation of table simd_dp_3same. | 1004 * Implementation of table simd_dp_3same. |
| 1101 * Specified by: See Section A7.4.1. | 1005 * Specified by: See Section A7.4.1. |
| 1102 */ | 1006 */ |
| 1103 static inline const ClassDecoder &decode_simd_dp_3same( | 1007 const ClassDecoder &Arm32DecoderState::decode_simd_dp_3same(const Instruction in sn) const { |
| 1104 const Instruction insn, const Arm32DecoderState *state) { | |
| 1105 if (((insn & 0x00000F00) == 0x00000100) && ((insn & 0x00000010) == 0x00000010) && (true) && (true)) { | 1008 if (((insn & 0x00000F00) == 0x00000100) && ((insn & 0x00000010) == 0x00000010) && (true) && (true)) { |
| 1106 return state->EffectiveNoOp_instance_; | 1009 return EffectiveNoOp_instance_; |
| 1107 } | 1010 } |
| 1108 | 1011 |
| 1109 if (((insn & 0x00000F00) == 0x00000500) && (true) && (true) && (true)) { | 1012 if (((insn & 0x00000F00) == 0x00000500) && (true) && (true) && (true)) { |
| 1110 return state->EffectiveNoOp_instance_; | 1013 return EffectiveNoOp_instance_; |
| 1111 } | 1014 } |
| 1112 | 1015 |
| 1113 if (((insn & 0x00000F00) == 0x00000900) && (true) && (true) && (true)) { | 1016 if (((insn & 0x00000F00) == 0x00000900) && (true) && (true) && (true)) { |
| 1114 return state->EffectiveNoOp_instance_; | 1017 return EffectiveNoOp_instance_; |
| 1115 } | 1018 } |
| 1116 | 1019 |
| 1117 if (((insn & 0x00000F00) == 0x00000B00) && ((insn & 0x00000010) == 0x00000000) && (true) && (true)) { | 1020 if (((insn & 0x00000F00) == 0x00000B00) && ((insn & 0x00000010) == 0x00000000) && (true) && (true)) { |
| 1118 return state->EffectiveNoOp_instance_; | 1021 return EffectiveNoOp_instance_; |
| 1119 } | 1022 } |
| 1120 | 1023 |
| 1121 if (((insn & 0x00000F00) == 0x00000D00) && ((insn & 0x00000010) == 0x00000000) && ((insn & 0x01000000) == 0x01000000) && (true)) { | 1024 if (((insn & 0x00000F00) == 0x00000D00) && ((insn & 0x00000010) == 0x00000000) && ((insn & 0x01000000) == 0x01000000) && (true)) { |
| 1122 return state->EffectiveNoOp_instance_; | 1025 return EffectiveNoOp_instance_; |
| 1123 } | 1026 } |
| 1124 | 1027 |
| 1125 if (((insn & 0x00000F00) == 0x00000D00) && ((insn & 0x00000010) == 0x00000010) && ((insn & 0x01000000) == 0x01000000) && ((insn & 0x00200000) == 0x00000000)) { | 1028 if (((insn & 0x00000F00) == 0x00000D00) && ((insn & 0x00000010) == 0x00000010) && ((insn & 0x01000000) == 0x01000000) && ((insn & 0x00200000) == 0x00000000)) { |
| 1126 return state->EffectiveNoOp_instance_; | 1029 return EffectiveNoOp_instance_; |
| 1127 } | 1030 } |
| 1128 | 1031 |
| 1129 if (((insn & 0x00000F00) == 0x00000D00) && (true) && ((insn & 0x01000000) == 0 x00000000) && (true)) { | 1032 if (((insn & 0x00000F00) == 0x00000D00) && (true) && ((insn & 0x01000000) == 0 x00000000) && (true)) { |
| 1130 return state->EffectiveNoOp_instance_; | 1033 return EffectiveNoOp_instance_; |
| 1131 } | 1034 } |
| 1132 | 1035 |
| 1133 if (((insn & 0x00000F00) == 0x00000E00) && ((insn & 0x00000010) == 0x00000000) && ((insn & 0x01000000) == 0x01000000) && ((insn & 0x00200000) == 0x00200000)) { | 1036 if (((insn & 0x00000F00) == 0x00000E00) && ((insn & 0x00000010) == 0x00000000) && ((insn & 0x01000000) == 0x01000000) && ((insn & 0x00200000) == 0x00200000)) { |
| 1134 return state->EffectiveNoOp_instance_; | 1037 return EffectiveNoOp_instance_; |
| 1135 } | 1038 } |
| 1136 | 1039 |
| 1137 if (((insn & 0x00000F00) == 0x00000E00) && ((insn & 0x00000010) == 0x00000000) && (true) && ((insn & 0x00200000) == 0x00000000)) { | 1040 if (((insn & 0x00000F00) == 0x00000E00) && ((insn & 0x00000010) == 0x00000000) && (true) && ((insn & 0x00200000) == 0x00000000)) { |
| 1138 return state->EffectiveNoOp_instance_; | 1041 return EffectiveNoOp_instance_; |
| 1139 } | 1042 } |
| 1140 | 1043 |
| 1141 if (((insn & 0x00000F00) == 0x00000E00) && ((insn & 0x00000010) == 0x00000010) && ((insn & 0x01000000) == 0x01000000) && (true)) { | 1044 if (((insn & 0x00000F00) == 0x00000E00) && ((insn & 0x00000010) == 0x00000010) && ((insn & 0x01000000) == 0x01000000) && (true)) { |
| 1142 return state->EffectiveNoOp_instance_; | 1045 return EffectiveNoOp_instance_; |
| 1143 } | 1046 } |
| 1144 | 1047 |
| 1145 if (((insn & 0x00000700) == 0x00000700) && ((insn & 0x00000010) == 0x00000000) && (true) && (true)) { | 1048 if (((insn & 0x00000700) == 0x00000700) && ((insn & 0x00000010) == 0x00000000) && (true) && (true)) { |
| 1146 return state->EffectiveNoOp_instance_; | 1049 return EffectiveNoOp_instance_; |
| 1147 } | 1050 } |
| 1148 | 1051 |
| 1149 if (((insn & 0x00000B00) == 0x00000300) && ((insn & 0x00000010) == 0x00000010) && (true) && (true)) { | 1052 if (((insn & 0x00000B00) == 0x00000300) && ((insn & 0x00000010) == 0x00000010) && (true) && (true)) { |
| 1150 return state->EffectiveNoOp_instance_; | 1053 return EffectiveNoOp_instance_; |
| 1151 } | 1054 } |
| 1152 | 1055 |
| 1153 if (((insn & 0x00000B00) == 0x00000B00) && ((insn & 0x00000010) == 0x00000010) && ((insn & 0x01000000) == 0x00000000) && (true)) { | 1056 if (((insn & 0x00000B00) == 0x00000B00) && ((insn & 0x00000010) == 0x00000010) && ((insn & 0x01000000) == 0x00000000) && (true)) { |
| 1154 return state->EffectiveNoOp_instance_; | 1057 return EffectiveNoOp_instance_; |
| 1155 } | 1058 } |
| 1156 | 1059 |
| 1157 if (((insn & 0x00000D00) == 0x00000100) && ((insn & 0x00000010) == 0x00000000) && (true) && (true)) { | 1060 if (((insn & 0x00000D00) == 0x00000100) && ((insn & 0x00000010) == 0x00000000) && (true) && (true)) { |
| 1158 return state->EffectiveNoOp_instance_; | 1061 return EffectiveNoOp_instance_; |
| 1159 } | 1062 } |
| 1160 | 1063 |
| 1161 if (((insn & 0x00000D00) == 0x00000800) && (true) && (true) && (true)) { | 1064 if (((insn & 0x00000D00) == 0x00000800) && (true) && (true) && (true)) { |
| 1162 return state->EffectiveNoOp_instance_; | 1065 return EffectiveNoOp_instance_; |
| 1163 } | 1066 } |
| 1164 | 1067 |
| 1165 if (((insn & 0x00000900) == 0x00000000) && (true) && (true) && (true)) { | 1068 if (((insn & 0x00000900) == 0x00000000) && (true) && (true) && (true)) { |
| 1166 return state->EffectiveNoOp_instance_; | 1069 return EffectiveNoOp_instance_; |
| 1167 } | 1070 } |
| 1168 | 1071 |
| 1169 if ((true) && (true) && (true) && (true)) { | 1072 if ((true) && (true) && (true) && (true)) { |
| 1170 return state->Undefined_instance_; | 1073 return Undefined_instance_; |
| 1171 } | 1074 } |
| 1172 | 1075 |
| 1173 // Catch any attempt to fall through... | 1076 // Catch any attempt to fall through... |
| 1174 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_3same could not parse %08X",insn .bits(31,0)); | 1077 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_3same could not parse %08X",insn .bits(31,0)); |
| 1175 return state->Forbidden_instance_; | 1078 return Forbidden_instance_; |
| 1176 } | 1079 } |
| 1080 | |
| 1177 | 1081 |
| 1178 /* | 1082 /* |
| 1179 * Implementation of table simd_dp_3diff. | 1083 * Implementation of table simd_dp_3diff. |
| 1180 * Specified by: See Section A7.4.2. | 1084 * Specified by: See Section A7.4.2. |
| 1181 */ | 1085 */ |
| 1182 static inline const ClassDecoder &decode_simd_dp_3diff( | 1086 const ClassDecoder &Arm32DecoderState::decode_simd_dp_3diff(const Instruction in sn) const { |
| 1183 const Instruction insn, const Arm32DecoderState *state) { | |
| 1184 if (((insn & 0x00000F00) == 0x00000D00) && ((insn & 0x01000000) == 0x00000000) ) { | 1087 if (((insn & 0x00000F00) == 0x00000D00) && ((insn & 0x01000000) == 0x00000000) ) { |
| 1185 return state->EffectiveNoOp_instance_; | 1088 return EffectiveNoOp_instance_; |
| 1186 } | 1089 } |
| 1187 | 1090 |
| 1188 if (((insn & 0x00000D00) == 0x00000900) && ((insn & 0x01000000) == 0x00000000) ) { | 1091 if (((insn & 0x00000D00) == 0x00000900) && ((insn & 0x01000000) == 0x00000000) ) { |
| 1189 return state->EffectiveNoOp_instance_; | 1092 return EffectiveNoOp_instance_; |
| 1190 } | 1093 } |
| 1191 | 1094 |
| 1192 if (((insn & 0x00000900) == 0x00000800) && (true)) { | 1095 if (((insn & 0x00000900) == 0x00000800) && (true)) { |
| 1193 return state->EffectiveNoOp_instance_; | 1096 return EffectiveNoOp_instance_; |
| 1194 } | 1097 } |
| 1195 | 1098 |
| 1196 if (((insn & 0x00000800) == 0x00000000) && (true)) { | 1099 if (((insn & 0x00000800) == 0x00000000) && (true)) { |
| 1197 return state->EffectiveNoOp_instance_; | 1100 return EffectiveNoOp_instance_; |
| 1198 } | 1101 } |
| 1199 | 1102 |
| 1200 if ((true) && (true)) { | 1103 if ((true) && (true)) { |
| 1201 return state->Undefined_instance_; | 1104 return Undefined_instance_; |
| 1202 } | 1105 } |
| 1203 | 1106 |
| 1204 // Catch any attempt to fall through... | 1107 // Catch any attempt to fall through... |
| 1205 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_3diff could not parse %08X",insn .bits(31,0)); | 1108 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_3diff could not parse %08X",insn .bits(31,0)); |
| 1206 return state->Forbidden_instance_; | 1109 return Forbidden_instance_; |
| 1207 } | 1110 } |
| 1111 | |
| 1208 | 1112 |
| 1209 /* | 1113 /* |
| 1210 * Implementation of table simd_dp_2scalar. | 1114 * Implementation of table simd_dp_2scalar. |
| 1211 * Specified by: See Section A7.4.3. | 1115 * Specified by: See Section A7.4.3. |
| 1212 */ | 1116 */ |
| 1213 static inline const ClassDecoder &decode_simd_dp_2scalar( | 1117 const ClassDecoder &Arm32DecoderState::decode_simd_dp_2scalar(const Instruction insn) const { |
| 1214 const Instruction insn, const Arm32DecoderState *state) { | |
| 1215 if (((insn & 0x00000F00) == 0x00000A00) && (true)) { | 1118 if (((insn & 0x00000F00) == 0x00000A00) && (true)) { |
| 1216 return state->EffectiveNoOp_instance_; | 1119 return EffectiveNoOp_instance_; |
| 1217 } | 1120 } |
| 1218 | 1121 |
| 1219 if (((insn & 0x00000F00) == 0x00000B00) && ((insn & 0x01000000) == 0x00000000) ) { | 1122 if (((insn & 0x00000F00) == 0x00000B00) && ((insn & 0x01000000) == 0x00000000) ) { |
| 1220 return state->EffectiveNoOp_instance_; | 1123 return EffectiveNoOp_instance_; |
| 1221 } | 1124 } |
| 1222 | 1125 |
| 1223 if (((insn & 0x00000B00) == 0x00000200) && (true)) { | 1126 if (((insn & 0x00000B00) == 0x00000200) && (true)) { |
| 1224 return state->EffectiveNoOp_instance_; | 1127 return EffectiveNoOp_instance_; |
| 1225 } | 1128 } |
| 1226 | 1129 |
| 1227 if (((insn & 0x00000B00) == 0x00000300) && ((insn & 0x01000000) == 0x00000000) ) { | 1130 if (((insn & 0x00000B00) == 0x00000300) && ((insn & 0x01000000) == 0x00000000) ) { |
| 1228 return state->EffectiveNoOp_instance_; | 1131 return EffectiveNoOp_instance_; |
| 1229 } | 1132 } |
| 1230 | 1133 |
| 1231 if (((insn & 0x00000200) == 0x00000000) && (true)) { | 1134 if (((insn & 0x00000200) == 0x00000000) && (true)) { |
| 1232 return state->EffectiveNoOp_instance_; | 1135 return EffectiveNoOp_instance_; |
| 1233 } | 1136 } |
| 1234 | 1137 |
| 1235 if ((true) && (true)) { | 1138 if ((true) && (true)) { |
| 1236 return state->Undefined_instance_; | 1139 return Undefined_instance_; |
| 1237 } | 1140 } |
| 1238 | 1141 |
| 1239 // Catch any attempt to fall through... | 1142 // Catch any attempt to fall through... |
| 1240 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_2scalar could not parse %08X",in sn.bits(31,0)); | 1143 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_2scalar could not parse %08X",in sn.bits(31,0)); |
| 1241 return state->Forbidden_instance_; | 1144 return Forbidden_instance_; |
| 1242 } | 1145 } |
| 1146 | |
| 1243 | 1147 |
| 1244 /* | 1148 /* |
| 1245 * Implementation of table simd_dp_2shift. | 1149 * Implementation of table simd_dp_2shift. |
| 1246 * Specified by: See Section A7.4.4. | 1150 * Specified by: See Section A7.4.4. |
| 1247 */ | 1151 */ |
| 1248 static inline const ClassDecoder &decode_simd_dp_2shift( | 1152 const ClassDecoder &Arm32DecoderState::decode_simd_dp_2shift(const Instruction i nsn) const { |
| 1249 const Instruction insn, const Arm32DecoderState *state) { | |
| 1250 if (((insn & 0x00000F00) == 0x00000500) && ((insn & 0x01000000) == 0x00000000) && (true) && (true)) { | 1153 if (((insn & 0x00000F00) == 0x00000500) && ((insn & 0x01000000) == 0x00000000) && (true) && (true)) { |
| 1251 return state->EffectiveNoOp_instance_; | 1154 return EffectiveNoOp_instance_; |
| 1252 } | 1155 } |
| 1253 | 1156 |
| 1254 if (((insn & 0x00000F00) == 0x00000800) && ((insn & 0x01000000) == 0x00000000) && ((insn & 0x00000040) == 0x00000000) && ((insn & 0x00000080) == 0x00000000)) { | 1157 if (((insn & 0x00000F00) == 0x00000800) && ((insn & 0x01000000) == 0x00000000) && ((insn & 0x00000040) == 0x00000000) && ((insn & 0x00000080) == 0x00000000)) { |
| 1255 return state->EffectiveNoOp_instance_; | 1158 return EffectiveNoOp_instance_; |
| 1256 } | 1159 } |
| 1257 | 1160 |
| 1258 if (((insn & 0x00000F00) == 0x00000800) && ((insn & 0x01000000) == 0x01000000) && ((insn & 0x00000040) == 0x00000000) && (true)) { | 1161 if (((insn & 0x00000F00) == 0x00000800) && ((insn & 0x01000000) == 0x01000000) && ((insn & 0x00000040) == 0x00000000) && (true)) { |
| 1259 return state->EffectiveNoOp_instance_; | 1162 return EffectiveNoOp_instance_; |
| 1260 } | 1163 } |
| 1261 | 1164 |
| 1262 if (((insn & 0x00000F00) == 0x00000800) && (true) && ((insn & 0x00000040) == 0 x00000040) && (true)) { | 1165 if (((insn & 0x00000F00) == 0x00000800) && (true) && ((insn & 0x00000040) == 0 x00000040) && (true)) { |
| 1263 return state->EffectiveNoOp_instance_; | 1166 return EffectiveNoOp_instance_; |
| 1264 } | 1167 } |
| 1265 | 1168 |
| 1266 if (((insn & 0x00000F00) == 0x00000900) && (true) && (true) && (true)) { | 1169 if (((insn & 0x00000F00) == 0x00000900) && (true) && (true) && (true)) { |
| 1267 return state->EffectiveNoOp_instance_; | 1170 return EffectiveNoOp_instance_; |
| 1268 } | 1171 } |
| 1269 | 1172 |
| 1270 if (((insn & 0x00000F00) == 0x00000A00) && (true) && ((insn & 0x00000040) == 0 x00000000) && (true)) { | 1173 if (((insn & 0x00000F00) == 0x00000A00) && (true) && ((insn & 0x00000040) == 0 x00000000) && (true)) { |
| 1271 return state->EffectiveNoOp_instance_; | 1174 return EffectiveNoOp_instance_; |
| 1272 } | 1175 } |
| 1273 | 1176 |
| 1274 if (((insn & 0x00000E00) == 0x00000400) && ((insn & 0x01000000) == 0x01000000) && (true) && (true)) { | 1177 if (((insn & 0x00000E00) == 0x00000400) && ((insn & 0x01000000) == 0x01000000) && (true) && (true)) { |
| 1275 return state->EffectiveNoOp_instance_; | 1178 return EffectiveNoOp_instance_; |
| 1276 } | 1179 } |
| 1277 | 1180 |
| 1278 if (((insn & 0x00000600) == 0x00000600) && (true) && (true) && (true)) { | 1181 if (((insn & 0x00000600) == 0x00000600) && (true) && (true) && (true)) { |
| 1279 return state->EffectiveNoOp_instance_; | 1182 return EffectiveNoOp_instance_; |
| 1280 } | 1183 } |
| 1281 | 1184 |
| 1282 if (((insn & 0x00000C00) == 0x00000000) && (true) && (true) && (true)) { | 1185 if (((insn & 0x00000C00) == 0x00000000) && (true) && (true) && (true)) { |
| 1283 return state->EffectiveNoOp_instance_; | 1186 return EffectiveNoOp_instance_; |
| 1284 } | 1187 } |
| 1285 | 1188 |
| 1286 if ((true) && (true) && (true) && (true)) { | 1189 if ((true) && (true) && (true) && (true)) { |
| 1287 return state->Undefined_instance_; | 1190 return Undefined_instance_; |
| 1288 } | 1191 } |
| 1289 | 1192 |
| 1290 // Catch any attempt to fall through... | 1193 // Catch any attempt to fall through... |
| 1291 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_2shift could not parse %08X",ins n.bits(31,0)); | 1194 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_2shift could not parse %08X",ins n.bits(31,0)); |
| 1292 return state->Forbidden_instance_; | 1195 return Forbidden_instance_; |
| 1293 } | 1196 } |
| 1197 | |
| 1294 | 1198 |
| 1295 /* | 1199 /* |
| 1296 * Implementation of table simd_dp_2misc. | 1200 * Implementation of table simd_dp_2misc. |
| 1297 * Specified by: See Section A7.4.5. | 1201 * Specified by: See Section A7.4.5. |
| 1298 */ | 1202 */ |
| 1299 static inline const ClassDecoder &decode_simd_dp_2misc( | 1203 const ClassDecoder &Arm32DecoderState::decode_simd_dp_2misc(const Instruction in sn) const { |
| 1300 const Instruction insn, const Arm32DecoderState *state) { | |
| 1301 if (((insn & 0x00030000) == 0x00000000) && ((insn & 0x00000780) == 0x00000700) ) { | 1204 if (((insn & 0x00030000) == 0x00000000) && ((insn & 0x00000780) == 0x00000700) ) { |
| 1302 return state->EffectiveNoOp_instance_; | 1205 return EffectiveNoOp_instance_; |
| 1303 } | 1206 } |
| 1304 | 1207 |
| 1305 if (((insn & 0x00030000) == 0x00000000) && ((insn & 0x00000380) == 0x00000100) ) { | 1208 if (((insn & 0x00030000) == 0x00000000) && ((insn & 0x00000380) == 0x00000100) ) { |
| 1306 return state->EffectiveNoOp_instance_; | 1209 return EffectiveNoOp_instance_; |
| 1307 } | 1210 } |
| 1308 | 1211 |
| 1309 if (((insn & 0x00030000) == 0x00000000) && ((insn & 0x00000580) == 0x00000580) ) { | 1212 if (((insn & 0x00030000) == 0x00000000) && ((insn & 0x00000580) == 0x00000580) ) { |
| 1310 return state->EffectiveNoOp_instance_; | 1213 return EffectiveNoOp_instance_; |
| 1311 } | 1214 } |
| 1312 | 1215 |
| 1313 if (((insn & 0x00030000) == 0x00000000) && ((insn & 0x00000100) == 0x00000000) ) { | 1216 if (((insn & 0x00030000) == 0x00000000) && ((insn & 0x00000100) == 0x00000000) ) { |
| 1314 return state->EffectiveNoOp_instance_; | 1217 return EffectiveNoOp_instance_; |
| 1315 } | 1218 } |
| 1316 | 1219 |
| 1317 if (((insn & 0x00030000) == 0x00010000) && ((insn & 0x00000380) == 0x00000380) ) { | 1220 if (((insn & 0x00030000) == 0x00010000) && ((insn & 0x00000380) == 0x00000380) ) { |
| 1318 return state->EffectiveNoOp_instance_; | 1221 return EffectiveNoOp_instance_; |
| 1319 } | 1222 } |
| 1320 | 1223 |
| 1321 if (((insn & 0x00030000) == 0x00010000) && ((insn & 0x00000280) == 0x00000200) ) { | 1224 if (((insn & 0x00030000) == 0x00010000) && ((insn & 0x00000280) == 0x00000200) ) { |
| 1322 return state->EffectiveNoOp_instance_; | 1225 return EffectiveNoOp_instance_; |
| 1323 } | 1226 } |
| 1324 | 1227 |
| 1325 if (((insn & 0x00030000) == 0x00010000) && ((insn & 0x00000200) == 0x00000000) ) { | 1228 if (((insn & 0x00030000) == 0x00010000) && ((insn & 0x00000200) == 0x00000000) ) { |
| 1326 return state->EffectiveNoOp_instance_; | 1229 return EffectiveNoOp_instance_; |
| 1327 } | 1230 } |
| 1328 | 1231 |
| 1329 if (((insn & 0x00030000) == 0x00020000) && ((insn & 0x000007C0) == 0x00000300) ) { | 1232 if (((insn & 0x00030000) == 0x00020000) && ((insn & 0x000007C0) == 0x00000300) ) { |
| 1330 return state->EffectiveNoOp_instance_; | 1233 return EffectiveNoOp_instance_; |
| 1331 } | 1234 } |
| 1332 | 1235 |
| 1333 if (((insn & 0x00030000) == 0x00020000) && ((insn & 0x000006C0) == 0x00000600) ) { | 1236 if (((insn & 0x00030000) == 0x00020000) && ((insn & 0x000006C0) == 0x00000600) ) { |
| 1334 return state->EffectiveNoOp_instance_; | 1237 return EffectiveNoOp_instance_; |
| 1335 } | 1238 } |
| 1336 | 1239 |
| 1337 if (((insn & 0x00030000) == 0x00020000) && ((insn & 0x00000700) == 0x00000200) ) { | 1240 if (((insn & 0x00030000) == 0x00020000) && ((insn & 0x00000700) == 0x00000200) ) { |
| 1338 return state->EffectiveNoOp_instance_; | 1241 return EffectiveNoOp_instance_; |
| 1339 } | 1242 } |
| 1340 | 1243 |
| 1341 if (((insn & 0x00030000) == 0x00020000) && ((insn & 0x00000600) == 0x00000000) ) { | 1244 if (((insn & 0x00030000) == 0x00020000) && ((insn & 0x00000600) == 0x00000000) ) { |
| 1342 return state->EffectiveNoOp_instance_; | 1245 return EffectiveNoOp_instance_; |
| 1343 } | 1246 } |
| 1344 | 1247 |
| 1345 if (((insn & 0x00030000) == 0x00030000) && ((insn & 0x00000400) == 0x00000400) ) { | 1248 if (((insn & 0x00030000) == 0x00030000) && ((insn & 0x00000400) == 0x00000400) ) { |
| 1346 return state->EffectiveNoOp_instance_; | 1249 return EffectiveNoOp_instance_; |
| 1347 } | 1250 } |
| 1348 | 1251 |
| 1349 if ((true) && (true)) { | 1252 if ((true) && (true)) { |
| 1350 return state->Undefined_instance_; | 1253 return Undefined_instance_; |
| 1351 } | 1254 } |
| 1352 | 1255 |
| 1353 // Catch any attempt to fall through... | 1256 // Catch any attempt to fall through... |
| 1354 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_2misc could not parse %08X",insn .bits(31,0)); | 1257 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_2misc could not parse %08X",insn .bits(31,0)); |
| 1355 return state->Forbidden_instance_; | 1258 return Forbidden_instance_; |
| 1356 } | 1259 } |
| 1260 | |
| 1357 | 1261 |
| 1358 /* | 1262 /* |
| 1359 * Implementation of table simd_dp_1imm. | 1263 * Implementation of table simd_dp_1imm. |
| 1360 * Specified by: See Section A7.4.6. | 1264 * Specified by: See Section A7.4.6. |
| 1361 */ | 1265 */ |
| 1362 static inline const ClassDecoder &decode_simd_dp_1imm( | 1266 const ClassDecoder &Arm32DecoderState::decode_simd_dp_1imm(const Instruction ins n) const { |
| 1363 const Instruction insn, const Arm32DecoderState *state) { | |
| 1364 if (((insn & 0x00000020) == 0x00000000) && (true)) { | 1267 if (((insn & 0x00000020) == 0x00000000) && (true)) { |
| 1365 return state->EffectiveNoOp_instance_; | 1268 return EffectiveNoOp_instance_; |
| 1366 } | 1269 } |
| 1367 | 1270 |
| 1368 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00000F00) == 0x00000E00) ) { | 1271 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00000F00) == 0x00000E00) ) { |
| 1369 return state->EffectiveNoOp_instance_; | 1272 return EffectiveNoOp_instance_; |
| 1370 } | 1273 } |
| 1371 | 1274 |
| 1372 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00000F00) == 0x00000F00) ) { | 1275 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00000F00) == 0x00000F00) ) { |
| 1373 return state->Undefined_instance_; | 1276 return Undefined_instance_; |
| 1374 } | 1277 } |
| 1375 | 1278 |
| 1376 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00000E00) == 0x00000C00) ) { | 1279 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00000E00) == 0x00000C00) ) { |
| 1377 return state->EffectiveNoOp_instance_; | 1280 return EffectiveNoOp_instance_; |
| 1378 } | 1281 } |
| 1379 | 1282 |
| 1380 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00000C00) == 0x00000800) ) { | 1283 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00000C00) == 0x00000800) ) { |
| 1381 return state->EffectiveNoOp_instance_; | 1284 return EffectiveNoOp_instance_; |
| 1382 } | 1285 } |
| 1383 | 1286 |
| 1384 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00000800) == 0x00000000) ) { | 1287 if (((insn & 0x00000020) == 0x00000020) && ((insn & 0x00000800) == 0x00000000) ) { |
| 1385 return state->EffectiveNoOp_instance_; | 1288 return EffectiveNoOp_instance_; |
| 1386 } | 1289 } |
| 1387 | 1290 |
| 1388 // Catch any attempt to fall through... | 1291 // Catch any attempt to fall through... |
| 1389 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_1imm could not parse %08X",insn. bits(31,0)); | 1292 fprintf(stderr, "TABLE IS INCOMPLETE: simd_dp_1imm could not parse %08X",insn. bits(31,0)); |
| 1390 return state->Forbidden_instance_; | 1293 return Forbidden_instance_; |
| 1391 } | 1294 } |
| 1295 | |
| 1392 | 1296 |
| 1393 /* | 1297 /* |
| 1394 * Implementation of table simd_load_store. | 1298 * Implementation of table simd_load_store. |
| 1395 * Specified by: See Section A7.7. | 1299 * Specified by: See Section A7.7. |
| 1396 */ | 1300 */ |
| 1397 static inline const ClassDecoder &decode_simd_load_store( | 1301 const ClassDecoder &Arm32DecoderState::decode_simd_load_store(const Instruction insn) const { |
| 1398 const Instruction insn, const Arm32DecoderState *state) { | |
| 1399 if (((insn & 0x00200000) == 0x00000000)) { | 1302 if (((insn & 0x00200000) == 0x00000000)) { |
| 1400 return decode_simd_load_store_l0(insn, state); | 1303 return decode_simd_load_store_l0(insn); |
| 1401 } | 1304 } |
| 1402 | 1305 |
| 1403 if (((insn & 0x00200000) == 0x00200000)) { | 1306 if (((insn & 0x00200000) == 0x00200000)) { |
| 1404 return decode_simd_load_store_l1(insn, state); | 1307 return decode_simd_load_store_l1(insn); |
| 1405 } | 1308 } |
| 1406 | 1309 |
| 1407 // Catch any attempt to fall through... | 1310 // Catch any attempt to fall through... |
| 1408 fprintf(stderr, "TABLE IS INCOMPLETE: simd_load_store could not parse %08X",in sn.bits(31,0)); | 1311 fprintf(stderr, "TABLE IS INCOMPLETE: simd_load_store could not parse %08X",in sn.bits(31,0)); |
| 1409 return state->Forbidden_instance_; | 1312 return Forbidden_instance_; |
| 1410 } | 1313 } |
| 1314 | |
| 1411 | 1315 |
| 1412 /* | 1316 /* |
| 1413 * Implementation of table simd_load_store_l0. | 1317 * Implementation of table simd_load_store_l0. |
| 1414 * Specified by: See Section A7.7, Table A7-20. | 1318 * Specified by: See Section A7.7, Table A7-20. |
| 1415 */ | 1319 */ |
| 1416 static inline const ClassDecoder &decode_simd_load_store_l0( | 1320 const ClassDecoder &Arm32DecoderState::decode_simd_load_store_l0(const Instructi on insn) const { |
| 1417 const Instruction insn, const Arm32DecoderState *state) { | |
| 1418 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000F00) == 0x00000300) ) { | 1321 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000F00) == 0x00000300) ) { |
| 1419 return state->VectorStore_instance_; | 1322 return VectorStore_instance_; |
| 1420 } | 1323 } |
| 1421 | 1324 |
| 1422 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000700) == 0x00000200) ) { | 1325 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000700) == 0x00000200) ) { |
| 1423 return state->VectorStore_instance_; | 1326 return VectorStore_instance_; |
| 1424 } | 1327 } |
| 1425 | 1328 |
| 1426 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000600) == 0x00000000) ) { | 1329 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000600) == 0x00000000) ) { |
| 1427 return state->VectorStore_instance_; | 1330 return VectorStore_instance_; |
| 1428 } | 1331 } |
| 1429 | 1332 |
| 1430 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000C00) == 0x00000400) ) { | 1333 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000C00) == 0x00000400) ) { |
| 1431 return state->VectorStore_instance_; | 1334 return VectorStore_instance_; |
| 1432 } | 1335 } |
| 1433 | 1336 |
| 1434 if (((insn & 0x00800000) == 0x00800000) && ((insn & 0x00000C00) == 0x00000800) ) { | 1337 if (((insn & 0x00800000) == 0x00800000) && ((insn & 0x00000C00) == 0x00000800) ) { |
| 1435 return state->VectorStore_instance_; | 1338 return VectorStore_instance_; |
| 1436 } | 1339 } |
| 1437 | 1340 |
| 1438 if (((insn & 0x00800000) == 0x00800000) && ((insn & 0x00000800) == 0x00000000) ) { | 1341 if (((insn & 0x00800000) == 0x00800000) && ((insn & 0x00000800) == 0x00000000) ) { |
| 1439 return state->VectorStore_instance_; | 1342 return VectorStore_instance_; |
| 1440 } | 1343 } |
| 1441 | 1344 |
| 1442 if ((true) && (true)) { | 1345 if ((true) && (true)) { |
| 1443 return state->Undefined_instance_; | 1346 return Undefined_instance_; |
| 1444 } | 1347 } |
| 1445 | 1348 |
| 1446 // Catch any attempt to fall through... | 1349 // Catch any attempt to fall through... |
| 1447 fprintf(stderr, "TABLE IS INCOMPLETE: simd_load_store_l0 could not parse %08X" ,insn.bits(31,0)); | 1350 fprintf(stderr, "TABLE IS INCOMPLETE: simd_load_store_l0 could not parse %08X" ,insn.bits(31,0)); |
| 1448 return state->Forbidden_instance_; | 1351 return Forbidden_instance_; |
| 1449 } | 1352 } |
| 1353 | |
| 1450 | 1354 |
| 1451 /* | 1355 /* |
| 1452 * Implementation of table simd_load_store_l1. | 1356 * Implementation of table simd_load_store_l1. |
| 1453 * Specified by: See Section A7.7, Table A7-21. | 1357 * Specified by: See Section A7.7, Table A7-21. |
| 1454 */ | 1358 */ |
| 1455 static inline const ClassDecoder &decode_simd_load_store_l1( | 1359 const ClassDecoder &Arm32DecoderState::decode_simd_load_store_l1(const Instructi on insn) const { |
| 1456 const Instruction insn, const Arm32DecoderState *state) { | |
| 1457 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000F00) == 0x00000300) ) { | 1360 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000F00) == 0x00000300) ) { |
| 1458 return state->VectorLoad_instance_; | 1361 return VectorLoad_instance_; |
| 1459 } | 1362 } |
| 1460 | 1363 |
| 1461 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000700) == 0x00000200) ) { | 1364 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000700) == 0x00000200) ) { |
| 1462 return state->VectorLoad_instance_; | 1365 return VectorLoad_instance_; |
| 1463 } | 1366 } |
| 1464 | 1367 |
| 1465 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000600) == 0x00000000) ) { | 1368 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000600) == 0x00000000) ) { |
| 1466 return state->VectorLoad_instance_; | 1369 return VectorLoad_instance_; |
| 1467 } | 1370 } |
| 1468 | 1371 |
| 1469 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000C00) == 0x00000400) ) { | 1372 if (((insn & 0x00800000) == 0x00000000) && ((insn & 0x00000C00) == 0x00000400) ) { |
| 1470 return state->VectorLoad_instance_; | 1373 return VectorLoad_instance_; |
| 1471 } | 1374 } |
| 1472 | 1375 |
| 1473 if (((insn & 0x00800000) == 0x00800000) && (true)) { | 1376 if (((insn & 0x00800000) == 0x00800000) && (true)) { |
| 1474 return state->VectorLoad_instance_; | 1377 return VectorLoad_instance_; |
| 1475 } | 1378 } |
| 1476 | 1379 |
| 1477 if ((true) && (true)) { | 1380 if ((true) && (true)) { |
| 1478 return state->Undefined_instance_; | 1381 return Undefined_instance_; |
| 1479 } | 1382 } |
| 1480 | 1383 |
| 1481 // Catch any attempt to fall through... | 1384 // Catch any attempt to fall through... |
| 1482 fprintf(stderr, "TABLE IS INCOMPLETE: simd_load_store_l1 could not parse %08X" ,insn.bits(31,0)); | 1385 fprintf(stderr, "TABLE IS INCOMPLETE: simd_load_store_l1 could not parse %08X" ,insn.bits(31,0)); |
| 1483 return state->Forbidden_instance_; | 1386 return Forbidden_instance_; |
| 1484 } | 1387 } |
| 1485 | 1388 |
| 1486 Arm32DecoderState::Arm32DecoderState() : | 1389 Arm32DecoderState::Arm32DecoderState() : |
| 1487 DecoderState() | 1390 DecoderState() |
| 1488 , CoprocessorOp_instance_() | 1391 , CoprocessorOp_instance_() |
| 1392 , MoveToStatusRegister_instance_() | |
| 1489 , ImmediateBic_instance_() | 1393 , ImmediateBic_instance_() |
| 1490 , LoadMultiple_instance_() | 1394 , LoadMultiple_instance_() |
| 1491 , LoadCoprocessor_instance_() | 1395 , LoadCoprocessor_instance_() |
| 1492 , LoadDoubleExclusive_instance_() | 1396 , LongMultiply_instance_() |
| 1493 , Branch_instance_() | 1397 , Branch_instance_() |
| 1494 , Test_instance_() | 1398 , Test_instance_() |
| 1495 , StoreRegister_instance_() | 1399 , StoreRegister_instance_() |
| 1496 , MoveDoubleFromCoprocessor_instance_() | 1400 , LoadRegister_instance_() |
| 1497 , TestImmediate_instance_() | 1401 , TestImmediate_instance_() |
| 1498 , BxBlx_instance_() | 1402 , VectorLoad_instance_() |
| 1499 , EffectiveNoOp_instance_() | 1403 , EffectiveNoOp_instance_() |
| 1500 , LongMultiply_instance_() | 1404 , LoadDoubleExclusive_instance_() |
| 1501 , Binary4RegisterShiftedOp_instance_() | 1405 , Binary4RegisterShiftedOp_instance_() |
| 1502 , Breakpoint_instance_() | 1406 , Breakpoint_instance_() |
| 1503 , Multiply_instance_() | 1407 , Multiply_instance_() |
| 1504 , PackSatRev_instance_() | 1408 , PackSatRev_instance_() |
| 1505 , LoadExclusive_instance_() | 1409 , LoadExclusive_instance_() |
| 1506 , VectorStore_instance_() | 1410 , VectorStore_instance_() |
| 1507 , Unary3RegisterShiftedOp_instance_() | 1411 , Unary3RegisterShiftedOp_instance_() |
| 1508 , Undefined_instance_() | 1412 , Undefined_instance_() |
| 1509 , DataProc_instance_() | 1413 , DataProc_instance_() |
| 1510 , Deprecated_instance_() | 1414 , Deprecated_instance_() |
| 1511 , LoadImmediate_instance_() | 1415 , LoadImmediate_instance_() |
| 1512 , StoreCoprocessor_instance_() | 1416 , StoreCoprocessor_instance_() |
| 1513 , Roadblock_instance_() | 1417 , Roadblock_instance_() |
| 1514 , LoadDoubleR_instance_() | 1418 , MoveFromCoprocessor_instance_() |
| 1515 , StoreExclusive_instance_() | 1419 , StoreExclusive_instance_() |
| 1516 , StoreImmediate_instance_() | 1420 , StoreImmediate_instance_() |
| 1517 , MoveFromCoprocessor_instance_() | 1421 , MoveDoubleFromCoprocessor_instance_() |
| 1518 , LoadRegister_instance_() | 1422 , SatAddSub_instance_() |
| 1519 , LoadDoubleI_instance_() | 1423 , LoadDoubleI_instance_() |
| 1520 , Binary3RegisterShiftedTest_instance_() | 1424 , Binary3RegisterShiftedTest_instance_() |
| 1521 , Unpredictable_instance_() | 1425 , Unpredictable_instance_() |
| 1522 , Forbidden_instance_() | 1426 , Forbidden_instance_() |
| 1523 , VectorLoad_instance_() | 1427 , BxBlx_instance_() |
| 1524 , MoveToStatusRegister_instance_() | 1428 , LoadDoubleR_instance_() |
| 1525 , SatAddSub_instance_() | |
| 1526 { | 1429 { |
| 1527 } | 1430 } |
| 1528 | 1431 |
| 1529 Arm32DecoderState::~Arm32DecoderState() { | 1432 Arm32DecoderState::~Arm32DecoderState() { |
| 1530 } | 1433 } |
| 1531 | 1434 |
| 1532 const ClassDecoder &Arm32DecoderState::decode(const Instruction insn) const { | 1435 const ClassDecoder &Arm32DecoderState::decode(const Instruction insn) const { |
| 1533 return decode_ARMv7(insn, this); | 1436 return decode_ARMv7(insn); |
| 1534 } | 1437 } |
| 1535 | 1438 |
| 1536 } // namespace | 1439 } // namespace |
| OLD | NEW |