constants-aarch32.h revision 7f4a230cbb795755d24e1d4658e99a7ccf1eb24b
1// Copyright 2015, VIXL authors 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are met: 6// 7// * Redistributions of source code must retain the above copyright notice, 8// this list of conditions and the following disclaimer. 9// * Redistributions in binary form must reproduce the above copyright 10// notice, this list of conditions and the following disclaimer in the 11// documentation and/or other materials provided with the distribution. 12// * Neither the name of ARM Limited nor the names of its contributors may 13// be used to endorse or promote products derived from this software 14// without specific prior written permission. 15// 16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND 17// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 20// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26// POSSIBILITY OF SUCH DAMAGE. 27 28#ifndef VIXL_CONSTANTS_AARCH32_H_ 29#define VIXL_CONSTANTS_AARCH32_H_ 30 31extern "C" { 32#include <stdint.h> 33} 34 35namespace vixl { 36namespace aarch32 { 37 38const unsigned kRegSizeInBits = 32; 39const unsigned kRegSizeInBytes = kRegSizeInBits / 8; 40const unsigned kSRegSizeInBits = 32; 41const unsigned kSRegSizeInBytes = kSRegSizeInBits / 8; 42const unsigned kDRegSizeInBits = 64; 43const unsigned kDRegSizeInBytes = kDRegSizeInBits / 8; 44const unsigned kQRegSizeInBits = 128; 45const unsigned kQRegSizeInBytes = kQRegSizeInBits / 8; 46 47const unsigned kNumberOfRegisters = 16; 48const unsigned kNumberOfSRegisters = 32; 49const unsigned kMaxNumberOfDRegisters = 32; 50const unsigned kNumberOfQRegisters = 16; 51const unsigned kNumberOfT32LowRegisters = 8; 52 53const unsigned kIpCode = 12; 54const unsigned kSpCode = 13; 55const unsigned kLrCode = 14; 56const unsigned kPcCode = 15; 57 58const unsigned kT32PcDelta = 4; 59const unsigned kA32PcDelta = 8; 60 61const unsigned kRRXEncodedValue = 3; 62 63const unsigned kCoprocMask = 0xe; 64const unsigned kInvalidCoprocMask = 0xa; 65 66const unsigned kLowestT32_32Opcode = 0xe8000000; 67 68const uint32_t kUnknownValue = 0xdeadbeef; 69 70const uint32_t kMaxInstructionSizeInBytes = 4; 71const uint32_t kA32InstructionSizeInBytes = 4; 72const uint32_t k32BitT32InstructionSizeInBytes = 4; 73const uint32_t k16BitT32InstructionSizeInBytes = 2; 74 75// Maximum size emitted by a single T32 unconditional macro-instruction. 76const uint32_t kMaxT32MacroInstructionSizeInBytes = 32; 77 78const uint32_t kCallerSavedRegistersMask = 0x500f; 79 80enum SystemFunctionsOpcodes { kPrintfCode }; 81 82// Start of generated code. 83enum InstructionAttribute { 84 kNoAttribute = 0, 85 kArithmetic = 0x1, 86 kBitwise = 0x2, 87 kShift = 0x4, 88 kAddress = 0x8, 89 kBranch = 0x10, 90 kSystem = 0x20, 91 kFpNeon = 0x40, 92 kLoadStore = 0x80, 93 kLoadStoreMultiple = 0x100 94}; 95 96enum InstructionType { 97 kUndefInstructionType, 98 kAdc, 99 kAdcs, 100 kAdd, 101 kAdds, 102 kAddw, 103 kAdr, 104 kAnd, 105 kAnds, 106 kAsr, 107 kAsrs, 108 kB, 109 kBfc, 110 kBfi, 111 kBic, 112 kBics, 113 kBkpt, 114 kBl, 115 kBlx, 116 kBx, 117 kBxj, 118 kCbnz, 119 kCbz, 120 kClrex, 121 kClz, 122 kCmn, 123 kCmp, 124 kCrc32b, 125 kCrc32cb, 126 kCrc32ch, 127 kCrc32cw, 128 kCrc32h, 129 kCrc32w, 130 kDmb, 131 kDsb, 132 kEor, 133 kEors, 134 kFldmdbx, 135 kFldmiax, 136 kFstmdbx, 137 kFstmiax, 138 kHlt, 139 kHvc, 140 kIsb, 141 kIt, 142 kLda, 143 kLdab, 144 kLdaex, 145 kLdaexb, 146 kLdaexd, 147 kLdaexh, 148 kLdah, 149 kLdm, 150 kLdmda, 151 kLdmdb, 152 kLdmea, 153 kLdmed, 154 kLdmfa, 155 kLdmfd, 156 kLdmib, 157 kLdr, 158 kLdrb, 159 kLdrd, 160 kLdrex, 161 kLdrexb, 162 kLdrexd, 163 kLdrexh, 164 kLdrh, 165 kLdrsb, 166 kLdrsh, 167 kLsl, 168 kLsls, 169 kLsr, 170 kLsrs, 171 kMla, 172 kMlas, 173 kMls, 174 kMov, 175 kMovs, 176 kMovt, 177 kMovw, 178 kMrs, 179 kMsr, 180 kMul, 181 kMuls, 182 kMvn, 183 kMvns, 184 kNop, 185 kOrn, 186 kOrns, 187 kOrr, 188 kOrrs, 189 kPkhbt, 190 kPkhtb, 191 kPld, 192 kPldw, 193 kPli, 194 kPop, 195 kPush, 196 kQadd, 197 kQadd16, 198 kQadd8, 199 kQasx, 200 kQdadd, 201 kQdsub, 202 kQsax, 203 kQsub, 204 kQsub16, 205 kQsub8, 206 kRbit, 207 kRev, 208 kRev16, 209 kRevsh, 210 kRor, 211 kRors, 212 kRrx, 213 kRrxs, 214 kRsb, 215 kRsbs, 216 kRsc, 217 kRscs, 218 kSadd16, 219 kSadd8, 220 kSasx, 221 kSbc, 222 kSbcs, 223 kSbfx, 224 kSdiv, 225 kSel, 226 kShadd16, 227 kShadd8, 228 kShasx, 229 kShsax, 230 kShsub16, 231 kShsub8, 232 kSmlabb, 233 kSmlabt, 234 kSmlad, 235 kSmladx, 236 kSmlal, 237 kSmlalbb, 238 kSmlalbt, 239 kSmlald, 240 kSmlaldx, 241 kSmlals, 242 kSmlaltb, 243 kSmlaltt, 244 kSmlatb, 245 kSmlatt, 246 kSmlawb, 247 kSmlawt, 248 kSmlsd, 249 kSmlsdx, 250 kSmlsld, 251 kSmlsldx, 252 kSmmla, 253 kSmmlar, 254 kSmmls, 255 kSmmlsr, 256 kSmmul, 257 kSmmulr, 258 kSmuad, 259 kSmuadx, 260 kSmulbb, 261 kSmulbt, 262 kSmull, 263 kSmulls, 264 kSmultb, 265 kSmultt, 266 kSmulwb, 267 kSmulwt, 268 kSmusd, 269 kSmusdx, 270 kSsat, 271 kSsat16, 272 kSsax, 273 kSsub16, 274 kSsub8, 275 kStl, 276 kStlb, 277 kStlex, 278 kStlexb, 279 kStlexd, 280 kStlexh, 281 kStlh, 282 kStm, 283 kStmda, 284 kStmdb, 285 kStmea, 286 kStmed, 287 kStmfa, 288 kStmfd, 289 kStmib, 290 kStr, 291 kStrb, 292 kStrd, 293 kStrex, 294 kStrexb, 295 kStrexd, 296 kStrexh, 297 kStrh, 298 kSub, 299 kSubs, 300 kSubw, 301 kSvc, 302 kSxtab, 303 kSxtab16, 304 kSxtah, 305 kSxtb, 306 kSxtb16, 307 kSxth, 308 kTbb, 309 kTbh, 310 kTeq, 311 kTst, 312 kUadd16, 313 kUadd8, 314 kUasx, 315 kUbfx, 316 kUdf, 317 kUdiv, 318 kUhadd16, 319 kUhadd8, 320 kUhasx, 321 kUhsax, 322 kUhsub16, 323 kUhsub8, 324 kUmaal, 325 kUmlal, 326 kUmlals, 327 kUmull, 328 kUmulls, 329 kUqadd16, 330 kUqadd8, 331 kUqasx, 332 kUqsax, 333 kUqsub16, 334 kUqsub8, 335 kUsad8, 336 kUsada8, 337 kUsat, 338 kUsat16, 339 kUsax, 340 kUsub16, 341 kUsub8, 342 kUxtab, 343 kUxtab16, 344 kUxtah, 345 kUxtb, 346 kUxtb16, 347 kUxth, 348 kVaba, 349 kVabal, 350 kVabd, 351 kVabdl, 352 kVabs, 353 kVacge, 354 kVacgt, 355 kVacle, 356 kVaclt, 357 kVadd, 358 kVaddhn, 359 kVaddl, 360 kVaddw, 361 kVand, 362 kVbic, 363 kVbif, 364 kVbit, 365 kVbsl, 366 kVceq, 367 kVcge, 368 kVcgt, 369 kVcle, 370 kVcls, 371 kVclt, 372 kVclz, 373 kVcmp, 374 kVcmpe, 375 kVcnt, 376 kVcvt, 377 kVcvta, 378 kVcvtb, 379 kVcvtm, 380 kVcvtn, 381 kVcvtp, 382 kVcvtr, 383 kVcvtt, 384 kVdiv, 385 kVdup, 386 kVeor, 387 kVext, 388 kVfma, 389 kVfms, 390 kVfnma, 391 kVfnms, 392 kVhadd, 393 kVhsub, 394 kVld1, 395 kVld2, 396 kVld3, 397 kVld4, 398 kVldm, 399 kVldmdb, 400 kVldmia, 401 kVldr, 402 kVmax, 403 kVmaxnm, 404 kVmin, 405 kVminnm, 406 kVmla, 407 kVmlal, 408 kVmls, 409 kVmlsl, 410 kVmov, 411 kVmovl, 412 kVmovn, 413 kVmrs, 414 kVmsr, 415 kVmul, 416 kVmull, 417 kVmvn, 418 kVneg, 419 kVnmla, 420 kVnmls, 421 kVnmul, 422 kVorn, 423 kVorr, 424 kVpadal, 425 kVpadd, 426 kVpaddl, 427 kVpmax, 428 kVpmin, 429 kVpop, 430 kVpush, 431 kVqabs, 432 kVqadd, 433 kVqdmlal, 434 kVqdmlsl, 435 kVqdmulh, 436 kVqdmull, 437 kVqmovn, 438 kVqmovun, 439 kVqneg, 440 kVqrdmulh, 441 kVqrshl, 442 kVqrshrn, 443 kVqrshrun, 444 kVqshl, 445 kVqshlu, 446 kVqshrn, 447 kVqshrun, 448 kVqsub, 449 kVraddhn, 450 kVrecpe, 451 kVrecps, 452 kVrev16, 453 kVrev32, 454 kVrev64, 455 kVrhadd, 456 kVrinta, 457 kVrintm, 458 kVrintn, 459 kVrintp, 460 kVrintr, 461 kVrintx, 462 kVrintz, 463 kVrshl, 464 kVrshr, 465 kVrshrn, 466 kVrsqrte, 467 kVrsqrts, 468 kVrsra, 469 kVrsubhn, 470 kVseleq, 471 kVselge, 472 kVselgt, 473 kVselvs, 474 kVshl, 475 kVshll, 476 kVshr, 477 kVshrn, 478 kVsli, 479 kVsqrt, 480 kVsra, 481 kVsri, 482 kVst1, 483 kVst2, 484 kVst3, 485 kVst4, 486 kVstm, 487 kVstmdb, 488 kVstmia, 489 kVstr, 490 kVsub, 491 kVsubhn, 492 kVsubl, 493 kVsubw, 494 kVswp, 495 kVtbl, 496 kVtbx, 497 kVtrn, 498 kVtst, 499 kVuzp, 500 kVzip, 501 kYield 502}; 503// End of generated code. 504 505inline InstructionAttribute operator|(InstructionAttribute left, 506 InstructionAttribute right) { 507 return static_cast<InstructionAttribute>(static_cast<uint32_t>(left) | 508 static_cast<uint32_t>(right)); 509} 510 511} // namespace aarch32 512} // namespace vixl 513 514#endif // VIXL_CONSTANTS_AARCH32_H_ 515