1 //===-- lldb-x86-register-enums.h -------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_LLDB_X86_REGISTER_ENUMS_H 10 #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_LLDB_X86_REGISTER_ENUMS_H 11 12 namespace lldb_private { 13 // LLDB register codes (e.g. RegisterKind == eRegisterKindLLDB) 14 15 // Internal codes for all i386 registers. 16 enum { 17 k_first_gpr_i386, 18 lldb_eax_i386 = k_first_gpr_i386, 19 lldb_ebx_i386, 20 lldb_ecx_i386, 21 lldb_edx_i386, 22 lldb_edi_i386, 23 lldb_esi_i386, 24 lldb_ebp_i386, 25 lldb_esp_i386, 26 lldb_eip_i386, 27 lldb_eflags_i386, 28 lldb_cs_i386, 29 lldb_fs_i386, 30 lldb_gs_i386, 31 lldb_ss_i386, 32 lldb_ds_i386, 33 lldb_es_i386, 34 35 k_first_alias_i386, 36 lldb_ax_i386 = k_first_alias_i386, 37 lldb_bx_i386, 38 lldb_cx_i386, 39 lldb_dx_i386, 40 lldb_di_i386, 41 lldb_si_i386, 42 lldb_bp_i386, 43 lldb_sp_i386, 44 lldb_ah_i386, 45 lldb_bh_i386, 46 lldb_ch_i386, 47 lldb_dh_i386, 48 lldb_al_i386, 49 lldb_bl_i386, 50 lldb_cl_i386, 51 lldb_dl_i386, 52 k_last_alias_i386 = lldb_dl_i386, 53 54 k_last_gpr_i386 = k_last_alias_i386, 55 56 k_first_fpr_i386, 57 lldb_fctrl_i386 = k_first_fpr_i386, 58 lldb_fstat_i386, 59 lldb_ftag_i386, 60 lldb_fop_i386, 61 lldb_fiseg_i386, 62 lldb_fioff_i386, 63 lldb_foseg_i386, 64 lldb_fooff_i386, 65 lldb_mxcsr_i386, 66 lldb_mxcsrmask_i386, 67 lldb_st0_i386, 68 lldb_st1_i386, 69 lldb_st2_i386, 70 lldb_st3_i386, 71 lldb_st4_i386, 72 lldb_st5_i386, 73 lldb_st6_i386, 74 lldb_st7_i386, 75 lldb_mm0_i386, 76 lldb_mm1_i386, 77 lldb_mm2_i386, 78 lldb_mm3_i386, 79 lldb_mm4_i386, 80 lldb_mm5_i386, 81 lldb_mm6_i386, 82 lldb_mm7_i386, 83 lldb_xmm0_i386, 84 lldb_xmm1_i386, 85 lldb_xmm2_i386, 86 lldb_xmm3_i386, 87 lldb_xmm4_i386, 88 lldb_xmm5_i386, 89 lldb_xmm6_i386, 90 lldb_xmm7_i386, 91 k_last_fpr_i386 = lldb_xmm7_i386, 92 93 k_first_avx_i386, 94 lldb_ymm0_i386 = k_first_avx_i386, 95 lldb_ymm1_i386, 96 lldb_ymm2_i386, 97 lldb_ymm3_i386, 98 lldb_ymm4_i386, 99 lldb_ymm5_i386, 100 lldb_ymm6_i386, 101 lldb_ymm7_i386, 102 k_last_avx_i386 = lldb_ymm7_i386, 103 104 k_first_mpxr_i386, 105 lldb_bnd0_i386 = k_first_mpxr_i386, 106 lldb_bnd1_i386, 107 lldb_bnd2_i386, 108 lldb_bnd3_i386, 109 k_last_mpxr_i386 = lldb_bnd3_i386, 110 111 k_first_mpxc_i386, 112 lldb_bndcfgu_i386 = k_first_mpxc_i386, 113 lldb_bndstatus_i386, 114 k_last_mpxc_i386 = lldb_bndstatus_i386, 115 116 k_first_dbr_i386, 117 lldb_dr0_i386 = k_first_dbr_i386, 118 lldb_dr1_i386, 119 lldb_dr2_i386, 120 lldb_dr3_i386, 121 lldb_dr4_i386, 122 lldb_dr5_i386, 123 lldb_dr6_i386, 124 lldb_dr7_i386, 125 k_last_dbr_i386 = lldb_dr7_i386, 126 127 k_num_registers_i386, 128 k_num_gpr_registers_i386 = k_last_gpr_i386 - k_first_gpr_i386 + 1, 129 k_num_fpr_registers_i386 = k_last_fpr_i386 - k_first_fpr_i386 + 1, 130 k_num_avx_registers_i386 = k_last_avx_i386 - k_first_avx_i386 + 1, 131 k_num_mpx_registers_i386 = k_last_mpxc_i386 - k_first_mpxr_i386 + 1, 132 k_num_user_registers_i386 = k_num_gpr_registers_i386 + 133 k_num_fpr_registers_i386 + 134 k_num_avx_registers_i386 + 135 k_num_mpx_registers_i386, 136 k_num_dbr_registers_i386 = k_last_dbr_i386 - k_first_dbr_i386 + 1, 137 }; 138 139 // Internal codes for all x86_64 registers. 140 enum { 141 k_first_gpr_x86_64, 142 lldb_rax_x86_64 = k_first_gpr_x86_64, 143 lldb_rbx_x86_64, 144 lldb_rcx_x86_64, 145 lldb_rdx_x86_64, 146 lldb_rdi_x86_64, 147 lldb_rsi_x86_64, 148 lldb_rbp_x86_64, 149 lldb_rsp_x86_64, 150 lldb_r8_x86_64, 151 lldb_r9_x86_64, 152 lldb_r10_x86_64, 153 lldb_r11_x86_64, 154 lldb_r12_x86_64, 155 lldb_r13_x86_64, 156 lldb_r14_x86_64, 157 lldb_r15_x86_64, 158 lldb_rip_x86_64, 159 lldb_rflags_x86_64, 160 lldb_cs_x86_64, 161 lldb_fs_x86_64, 162 lldb_gs_x86_64, 163 lldb_ss_x86_64, 164 lldb_ds_x86_64, 165 lldb_es_x86_64, 166 167 k_first_alias_x86_64, 168 lldb_eax_x86_64 = k_first_alias_x86_64, 169 lldb_ebx_x86_64, 170 lldb_ecx_x86_64, 171 lldb_edx_x86_64, 172 lldb_edi_x86_64, 173 lldb_esi_x86_64, 174 lldb_ebp_x86_64, 175 lldb_esp_x86_64, 176 lldb_r8d_x86_64, // Low 32 bits of r8 177 lldb_r9d_x86_64, // Low 32 bits of r9 178 lldb_r10d_x86_64, // Low 32 bits of r10 179 lldb_r11d_x86_64, // Low 32 bits of r11 180 lldb_r12d_x86_64, // Low 32 bits of r12 181 lldb_r13d_x86_64, // Low 32 bits of r13 182 lldb_r14d_x86_64, // Low 32 bits of r14 183 lldb_r15d_x86_64, // Low 32 bits of r15 184 lldb_ax_x86_64, 185 lldb_bx_x86_64, 186 lldb_cx_x86_64, 187 lldb_dx_x86_64, 188 lldb_di_x86_64, 189 lldb_si_x86_64, 190 lldb_bp_x86_64, 191 lldb_sp_x86_64, 192 lldb_r8w_x86_64, // Low 16 bits of r8 193 lldb_r9w_x86_64, // Low 16 bits of r9 194 lldb_r10w_x86_64, // Low 16 bits of r10 195 lldb_r11w_x86_64, // Low 16 bits of r11 196 lldb_r12w_x86_64, // Low 16 bits of r12 197 lldb_r13w_x86_64, // Low 16 bits of r13 198 lldb_r14w_x86_64, // Low 16 bits of r14 199 lldb_r15w_x86_64, // Low 16 bits of r15 200 lldb_ah_x86_64, 201 lldb_bh_x86_64, 202 lldb_ch_x86_64, 203 lldb_dh_x86_64, 204 lldb_al_x86_64, 205 lldb_bl_x86_64, 206 lldb_cl_x86_64, 207 lldb_dl_x86_64, 208 lldb_dil_x86_64, 209 lldb_sil_x86_64, 210 lldb_bpl_x86_64, 211 lldb_spl_x86_64, 212 lldb_r8l_x86_64, // Low 8 bits of r8 213 lldb_r9l_x86_64, // Low 8 bits of r9 214 lldb_r10l_x86_64, // Low 8 bits of r10 215 lldb_r11l_x86_64, // Low 8 bits of r11 216 lldb_r12l_x86_64, // Low 8 bits of r12 217 lldb_r13l_x86_64, // Low 8 bits of r13 218 lldb_r14l_x86_64, // Low 8 bits of r14 219 lldb_r15l_x86_64, // Low 8 bits of r15 220 k_last_alias_x86_64 = lldb_r15l_x86_64, 221 222 k_last_gpr_x86_64 = k_last_alias_x86_64, 223 224 k_first_fpr_x86_64, 225 lldb_fctrl_x86_64 = k_first_fpr_x86_64, 226 lldb_fstat_x86_64, 227 lldb_ftag_x86_64, 228 lldb_fop_x86_64, 229 lldb_fiseg_x86_64, 230 lldb_fioff_x86_64, 231 lldb_fip_x86_64, 232 lldb_foseg_x86_64, 233 lldb_fooff_x86_64, 234 lldb_fdp_x86_64, 235 lldb_mxcsr_x86_64, 236 lldb_mxcsrmask_x86_64, 237 lldb_st0_x86_64, 238 lldb_st1_x86_64, 239 lldb_st2_x86_64, 240 lldb_st3_x86_64, 241 lldb_st4_x86_64, 242 lldb_st5_x86_64, 243 lldb_st6_x86_64, 244 lldb_st7_x86_64, 245 lldb_mm0_x86_64, 246 lldb_mm1_x86_64, 247 lldb_mm2_x86_64, 248 lldb_mm3_x86_64, 249 lldb_mm4_x86_64, 250 lldb_mm5_x86_64, 251 lldb_mm6_x86_64, 252 lldb_mm7_x86_64, 253 lldb_xmm0_x86_64, 254 lldb_xmm1_x86_64, 255 lldb_xmm2_x86_64, 256 lldb_xmm3_x86_64, 257 lldb_xmm4_x86_64, 258 lldb_xmm5_x86_64, 259 lldb_xmm6_x86_64, 260 lldb_xmm7_x86_64, 261 lldb_xmm8_x86_64, 262 lldb_xmm9_x86_64, 263 lldb_xmm10_x86_64, 264 lldb_xmm11_x86_64, 265 lldb_xmm12_x86_64, 266 lldb_xmm13_x86_64, 267 lldb_xmm14_x86_64, 268 lldb_xmm15_x86_64, 269 k_last_fpr_x86_64 = lldb_xmm15_x86_64, 270 271 k_first_avx_x86_64, 272 lldb_ymm0_x86_64 = k_first_avx_x86_64, 273 lldb_ymm1_x86_64, 274 lldb_ymm2_x86_64, 275 lldb_ymm3_x86_64, 276 lldb_ymm4_x86_64, 277 lldb_ymm5_x86_64, 278 lldb_ymm6_x86_64, 279 lldb_ymm7_x86_64, 280 lldb_ymm8_x86_64, 281 lldb_ymm9_x86_64, 282 lldb_ymm10_x86_64, 283 lldb_ymm11_x86_64, 284 lldb_ymm12_x86_64, 285 lldb_ymm13_x86_64, 286 lldb_ymm14_x86_64, 287 lldb_ymm15_x86_64, 288 k_last_avx_x86_64 = lldb_ymm15_x86_64, 289 290 k_first_mpxr_x86_64, 291 lldb_bnd0_x86_64 = k_first_mpxr_x86_64, 292 lldb_bnd1_x86_64, 293 lldb_bnd2_x86_64, 294 lldb_bnd3_x86_64, 295 k_last_mpxr_x86_64 = lldb_bnd3_x86_64, 296 297 k_first_mpxc_x86_64, 298 lldb_bndcfgu_x86_64 = k_first_mpxc_x86_64, 299 lldb_bndstatus_x86_64, 300 k_last_mpxc_x86_64 = lldb_bndstatus_x86_64, 301 302 k_first_dbr_x86_64, 303 lldb_dr0_x86_64 = k_first_dbr_x86_64, 304 lldb_dr1_x86_64, 305 lldb_dr2_x86_64, 306 lldb_dr3_x86_64, 307 lldb_dr4_x86_64, 308 lldb_dr5_x86_64, 309 lldb_dr6_x86_64, 310 lldb_dr7_x86_64, 311 k_last_dbr_x86_64 = lldb_dr7_x86_64, 312 313 k_num_registers_x86_64, 314 k_num_gpr_registers_x86_64 = k_last_gpr_x86_64 - k_first_gpr_x86_64 + 1, 315 k_num_fpr_registers_x86_64 = k_last_fpr_x86_64 - k_first_fpr_x86_64 + 1, 316 k_num_avx_registers_x86_64 = k_last_avx_x86_64 - k_first_avx_x86_64 + 1, 317 k_num_mpx_registers_x86_64 = k_last_mpxc_x86_64 - k_first_mpxr_x86_64 + 1, 318 k_num_user_registers_x86_64 = k_num_gpr_registers_x86_64 + 319 k_num_fpr_registers_x86_64 + 320 k_num_avx_registers_x86_64 + 321 k_num_mpx_registers_x86_64, 322 k_num_dbr_registers_x86_64 = k_last_dbr_x86_64 - k_first_dbr_x86_64 + 1, 323 }; 324 325 // For platform that supports fs_base/gs_base registers. 326 namespace x86_64_with_base { 327 enum { 328 k_first_gpr, 329 lldb_rax = k_first_gpr, 330 lldb_rbx, 331 lldb_rcx, 332 lldb_rdx, 333 lldb_rdi, 334 lldb_rsi, 335 lldb_rbp, 336 lldb_rsp, 337 lldb_r8, 338 lldb_r9, 339 lldb_r10, 340 lldb_r11, 341 lldb_r12, 342 lldb_r13, 343 lldb_r14, 344 lldb_r15, 345 lldb_rip, 346 lldb_rflags, 347 lldb_cs, 348 lldb_fs, 349 lldb_gs, 350 lldb_ss, 351 lldb_fs_base, 352 lldb_gs_base, 353 lldb_ds, 354 lldb_es, 355 356 k_first_alias, 357 lldb_eax = k_first_alias, 358 lldb_ebx, 359 lldb_ecx, 360 lldb_edx, 361 lldb_edi, 362 lldb_esi, 363 lldb_ebp, 364 lldb_esp, 365 lldb_r8d, // Low 32 bits of r8 366 lldb_r9d, // Low 32 bits of r9 367 lldb_r10d, // Low 32 bits of r10 368 lldb_r11d, // Low 32 bits of r11 369 lldb_r12d, // Low 32 bits of r12 370 lldb_r13d, // Low 32 bits of r13 371 lldb_r14d, // Low 32 bits of r14 372 lldb_r15d, // Low 32 bits of r15 373 lldb_ax, 374 lldb_bx, 375 lldb_cx, 376 lldb_dx, 377 lldb_di, 378 lldb_si, 379 lldb_bp, 380 lldb_sp, 381 lldb_r8w, // Low 16 bits of r8 382 lldb_r9w, // Low 16 bits of r9 383 lldb_r10w, // Low 16 bits of r10 384 lldb_r11w, // Low 16 bits of r11 385 lldb_r12w, // Low 16 bits of r12 386 lldb_r13w, // Low 16 bits of r13 387 lldb_r14w, // Low 16 bits of r14 388 lldb_r15w, // Low 16 bits of r15 389 lldb_ah, 390 lldb_bh, 391 lldb_ch, 392 lldb_dh, 393 lldb_al, 394 lldb_bl, 395 lldb_cl, 396 lldb_dl, 397 lldb_dil, 398 lldb_sil, 399 lldb_bpl, 400 lldb_spl, 401 lldb_r8l, // Low 8 bits of r8 402 lldb_r9l, // Low 8 bits of r9 403 lldb_r10l, // Low 8 bits of r10 404 lldb_r11l, // Low 8 bits of r11 405 lldb_r12l, // Low 8 bits of r12 406 lldb_r13l, // Low 8 bits of r13 407 lldb_r14l, // Low 8 bits of r14 408 lldb_r15l, // Low 8 bits of r15 409 k_last_alias = lldb_r15l, 410 411 k_last_gpr = k_last_alias, 412 413 k_first_fpr, 414 lldb_fctrl = k_first_fpr, 415 lldb_fstat, 416 lldb_ftag, 417 lldb_fop, 418 lldb_fiseg, 419 lldb_fioff, 420 lldb_fip, 421 lldb_foseg, 422 lldb_fooff, 423 lldb_fdp, 424 lldb_mxcsr, 425 lldb_mxcsrmask, 426 lldb_st0, 427 lldb_st1, 428 lldb_st2, 429 lldb_st3, 430 lldb_st4, 431 lldb_st5, 432 lldb_st6, 433 lldb_st7, 434 lldb_mm0, 435 lldb_mm1, 436 lldb_mm2, 437 lldb_mm3, 438 lldb_mm4, 439 lldb_mm5, 440 lldb_mm6, 441 lldb_mm7, 442 lldb_xmm0, 443 lldb_xmm1, 444 lldb_xmm2, 445 lldb_xmm3, 446 lldb_xmm4, 447 lldb_xmm5, 448 lldb_xmm6, 449 lldb_xmm7, 450 lldb_xmm8, 451 lldb_xmm9, 452 lldb_xmm10, 453 lldb_xmm11, 454 lldb_xmm12, 455 lldb_xmm13, 456 lldb_xmm14, 457 lldb_xmm15, 458 k_last_fpr = lldb_xmm15, 459 460 k_first_avx, 461 lldb_ymm0 = k_first_avx, 462 lldb_ymm1, 463 lldb_ymm2, 464 lldb_ymm3, 465 lldb_ymm4, 466 lldb_ymm5, 467 lldb_ymm6, 468 lldb_ymm7, 469 lldb_ymm8, 470 lldb_ymm9, 471 lldb_ymm10, 472 lldb_ymm11, 473 lldb_ymm12, 474 lldb_ymm13, 475 lldb_ymm14, 476 lldb_ymm15, 477 k_last_avx = lldb_ymm15, 478 479 k_first_mpxr, 480 lldb_bnd0 = k_first_mpxr, 481 lldb_bnd1, 482 lldb_bnd2, 483 lldb_bnd3, 484 k_last_mpxr = lldb_bnd3, 485 486 k_first_mpxc, 487 lldb_bndcfgu = k_first_mpxc, 488 lldb_bndstatus, 489 k_last_mpxc = lldb_bndstatus, 490 491 k_first_dbr, 492 lldb_dr0 = k_first_dbr, 493 lldb_dr1, 494 lldb_dr2, 495 lldb_dr3, 496 lldb_dr4, 497 lldb_dr5, 498 lldb_dr6, 499 lldb_dr7, 500 k_last_dbr = lldb_dr7, 501 502 k_num_registers, 503 k_num_gpr_registers = k_last_gpr - k_first_gpr + 1, 504 k_num_fpr_registers = k_last_fpr - k_first_fpr + 1, 505 k_num_avx_registers = k_last_avx - k_first_avx + 1, 506 k_num_mpx_registers = k_last_mpxc - k_first_mpxr + 1, 507 k_num_user_registers = k_num_gpr_registers + 508 k_num_fpr_registers + 509 k_num_avx_registers + 510 k_num_mpx_registers, 511 k_num_dbr_registers = k_last_dbr - k_first_dbr + 1, 512 }; 513 } // namespace x86_64_with_base 514 515 } 516 517 #endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_LLDB_X86_REGISTER_ENUMS_H 518