OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 | 135 |
136 | 136 |
137 // ----------------------------------------------------------------------------- | 137 // ----------------------------------------------------------------------------- |
138 // Instructions encoding. | 138 // Instructions encoding. |
139 | 139 |
140 // Instr is merely used by the Assembler to distinguish 32bit integers | 140 // Instr is merely used by the Assembler to distinguish 32bit integers |
141 // representing instructions from usual 32 bit values. | 141 // representing instructions from usual 32 bit values. |
142 // Instruction objects are pointers to 32bit values, and provide methods to | 142 // Instruction objects are pointers to 32bit values, and provide methods to |
143 // access the various ISA fields. | 143 // access the various ISA fields. |
144 typedef int32_t Instr; | 144 typedef int32_t Instr; |
145 | 145 typedef int16_t Instr16; |
146 | 146 |
147 // Opcodes for Data-processing instructions (instructions with a type 0 and 1) | 147 // Opcodes for Data-processing instructions (instructions with a type 0 and 1) |
148 // as defined in section A3.4 | 148 // as defined in section A3.4 |
149 enum Opcode { | 149 enum Opcode { |
150 AND = 0 << 21, // Logical AND. | 150 AND = 0 << 21, // Logical AND. |
151 EOR = 1 << 21, // Logical Exclusive OR. | 151 EOR = 1 << 21, // Logical Exclusive OR. |
152 SUB = 2 << 21, // Subtract. | 152 SUB = 2 << 21, // Subtract. |
153 RSB = 3 << 21, // Reverse Subtract. | 153 RSB = 3 << 21, // Reverse Subtract. |
154 ADD = 4 << 21, // Add. | 154 ADD = 4 << 21, // Add. |
155 ADC = 5 << 21, // Add with Carry. | 155 ADC = 5 << 21, // Add with Carry. |
156 SBC = 6 << 21, // Subtract with Carry. | 156 SBC = 6 << 21, // Subtract with Carry. |
157 RSC = 7 << 21, // Reverse Subtract with Carry. | 157 RSC = 7 << 21, // Reverse Subtract with Carry. |
158 TST = 8 << 21, // Test. | 158 TST = 8 << 21, // Test. |
159 TEQ = 9 << 21, // Test Equivalence. | 159 TEQ = 9 << 21, // Test Equivalence. |
160 CMP = 10 << 21, // Compare. | 160 CMP = 10 << 21, // Compare. |
161 CMN = 11 << 21, // Compare Negated. | 161 CMN = 11 << 21, // Compare Negated. |
162 ORR = 12 << 21, // Logical (inclusive) OR. | 162 ORR = 12 << 21, // Logical (inclusive) OR. |
163 MOV = 13 << 21, // Move. | 163 MOV = 13 << 21, // Move. |
164 BIC = 14 << 21, // Bit Clear. | 164 BIC = 14 << 21, // Bit Clear. |
165 MVN = 15 << 21 // Move Not. | 165 MVN = 15 << 21 // Move Not. |
166 }; | 166 }; |
167 | 167 |
168 | 168 |
| 169 // NOTE: these are opcode or opB |
| 170 enum ThumbMode1Opcode16 { |
| 171 ADD_REG_1 = 3 << 2, |
| 172 ADD_IMM_1 = 7 << 1, |
| 173 ADD_IMM_2 = 3 << 3, |
| 174 SUB_REG = 13, |
| 175 SUB_IMM_1 = 15, |
| 176 SUB_IMM_2 = 7 << 2, |
| 177 MOV_IMM = 4 << 2, |
| 178 CMP_IMM = 5 << 2, |
| 179 LSL_IMM = 0, |
| 180 LSR_IMM = 4, |
| 181 ROR_IMM = 3 << 2, |
| 182 RRX_IMM = 3 << 2, |
| 183 ASR_IMM = 8 |
| 184 }; |
| 185 |
| 186 |
| 187 // NOTE: these are opcodes |
| 188 enum ThumbMode2Opcode16 { |
| 189 CMP_REG_1 = 10, |
| 190 AND_REG = 0, |
| 191 EOR_REG = 1, |
| 192 LSL_REG = 2, |
| 193 LSR_REG = 3, |
| 194 ASR_REG = 4, |
| 195 ADC_REG = 5, |
| 196 SBC_REG = 6, |
| 197 ROR_REG = 7, |
| 198 TST_REG = 8, |
| 199 RSB_IMM = 9, |
| 200 CMN_REG = 11, |
| 201 ORR_REG = 12, |
| 202 MUL_REG = 13, |
| 203 BIC_REG = 14, |
| 204 MVN_REG = 15 |
| 205 }; |
| 206 |
| 207 |
| 208 // NOTE: these are opcodes |
| 209 enum ThumbMode3Opcode16 { |
| 210 ADD_REG_2 = 0, |
| 211 CMP_REG_2 = 4, |
| 212 MOV_REG_1 = 8, |
| 213 MOV_REG_2 = 0, // all zeros - so do not call mode function |
| 214 BX_REG = 12, |
| 215 BLX_REG = 14 |
| 216 }; |
| 217 |
| 218 |
| 219 // NOTE: for mode_4 these are opB codes |
| 220 enum ThumbMode4_1Opcode16 { |
| 221 STR_REG = 0, |
| 222 STRH_REG = 1, |
| 223 STRB_REG = 2, |
| 224 LDR_REG_1 = 4, |
| 225 LDR_REG_2 = 4, |
| 226 LDRH_REG = 5, |
| 227 LDRB_REG = 6, |
| 228 LDRSB_REG = 3, |
| 229 LDRSH_REG = 7 |
| 230 }; |
| 231 |
| 232 |
| 233 enum ThumbMode4_2Opcode16 { |
| 234 LDR_IMM_1 = 4, |
| 235 STR_IMM_1 = 0 |
| 236 }; |
| 237 |
| 238 |
| 239 enum ThumbMode4_3Opcode16 { |
| 240 LDRB_IMM = 4, |
| 241 STRB_IMM = 0 |
| 242 }; |
| 243 |
| 244 |
| 245 enum ThumbMode4_4Opcode16 { |
| 246 LDRH_IMM = 4, |
| 247 STRH_IMM = 0 |
| 248 }; |
| 249 |
| 250 |
| 251 enum ThumbMode4_5Opcode16 { |
| 252 LDR_IMM_2 = 4, |
| 253 STR_IMM_2 = 0 |
| 254 }; |
| 255 |
| 256 |
169 // The bits for bit 7-4 for some type 0 miscellaneous instructions. | 257 // The bits for bit 7-4 for some type 0 miscellaneous instructions. |
170 enum MiscInstructionsBits74 { | 258 enum MiscInstructionsBits74 { |
171 // With bits 22-21 01. | 259 // With bits 22-21 01. |
172 BX = 1 << 4, | 260 BX = 1 << 4, |
173 BXJ = 2 << 4, | 261 BXJ = 2 << 4, |
174 BLX = 3 << 4, | 262 BLX = 3 << 4, |
175 BKPT = 7 << 4, | 263 BKPT = 7 << 4, |
176 | 264 |
177 // With bits 22-21 11. | 265 // With bits 22-21 11. |
178 CLZ = 1 << 4 | 266 CLZ = 1 << 4 |
179 }; | 267 }; |
180 | 268 |
181 | 269 |
182 // Instruction encoding bits and masks. | 270 // Instruction encoding bits and masks. |
183 enum { | 271 enum { |
184 H = 1 << 5, // Halfword (or byte). | 272 H = 1 << 5, // Halfword (or byte). |
185 S6 = 1 << 6, // Signed (or unsigned). | 273 S6 = 1 << 6, // Signed (or unsigned). |
186 L = 1 << 20, // Load (or store). | 274 L = 1 << 20, // Load (or store). |
187 S = 1 << 20, // Set condition code (or leave unchanged). | 275 S = 1 << 20, // Set condition code (or leave unchanged). |
188 W = 1 << 21, // Writeback base register (or leave unchanged). | 276 W = 1 << 21, // Writeback base register (or leave unchanged). |
189 A = 1 << 21, // Accumulate in multiply instruction (or not). | 277 A = 1 << 21, // Accumulate in multiply instruction (or not). |
190 B = 1 << 22, // Unsigned byte (or word). | 278 B = 1 << 22, // Unsigned byte (or word). |
191 N = 1 << 22, // Long (or short). | 279 N = 1 << 22, // Long (or short). |
192 U = 1 << 23, // Positive (or negative) offset/index. | 280 U = 1 << 23, // Positive (or negative) offset/index. |
193 P = 1 << 24, // Offset/pre-indexed addressing (or post-indexed addressing). | 281 P = 1 << 24, // Offset/pre-indexed addressing (or post-indexed addressing). |
194 I = 1 << 25, // Immediate shifter operand (or not). | 282 I = 1 << 25, // Immediate shifter operand (or not). |
195 | 283 |
| 284 B3 = 1 << 3, |
196 B4 = 1 << 4, | 285 B4 = 1 << 4, |
197 B5 = 1 << 5, | 286 B5 = 1 << 5, |
198 B6 = 1 << 6, | 287 B6 = 1 << 6, |
199 B7 = 1 << 7, | 288 B7 = 1 << 7, |
200 B8 = 1 << 8, | 289 B8 = 1 << 8, |
201 B9 = 1 << 9, | 290 B9 = 1 << 9, |
| 291 B10 = 1 << 10, |
| 292 B11 = 1 << 11, |
202 B12 = 1 << 12, | 293 B12 = 1 << 12, |
| 294 B13 = 1 << 13, |
| 295 B14 = 1 << 14, |
| 296 B15 = 1 << 15, |
203 B16 = 1 << 16, | 297 B16 = 1 << 16, |
204 B18 = 1 << 18, | 298 B18 = 1 << 18, |
205 B19 = 1 << 19, | 299 B19 = 1 << 19, |
206 B20 = 1 << 20, | 300 B20 = 1 << 20, |
207 B21 = 1 << 21, | 301 B21 = 1 << 21, |
208 B22 = 1 << 22, | 302 B22 = 1 << 22, |
209 B23 = 1 << 23, | 303 B23 = 1 << 23, |
210 B24 = 1 << 24, | 304 B24 = 1 << 24, |
211 B25 = 1 << 25, | 305 B25 = 1 << 25, |
212 B26 = 1 << 26, | 306 B26 = 1 << 26, |
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
761 static int Number(const char* name, bool* is_double); | 855 static int Number(const char* name, bool* is_double); |
762 | 856 |
763 private: | 857 private: |
764 static const char* names_[kNumVFPRegisters]; | 858 static const char* names_[kNumVFPRegisters]; |
765 }; | 859 }; |
766 | 860 |
767 | 861 |
768 } } // namespace v8::internal | 862 } } // namespace v8::internal |
769 | 863 |
770 #endif // V8_ARM_CONSTANTS_ARM_H_ | 864 #endif // V8_ARM_CONSTANTS_ARM_H_ |
OLD | NEW |