gdb/common/x86-xstate.h - gdb

Macros defined

Source code

  1. /* Common code for x86 XSAVE extended state.

  2.    Copyright (C) 2010-2015 Free Software Foundation, Inc.

  3.    This file is part of GDB.

  4.    This program is free software; you can redistribute it and/or modify
  5.    it under the terms of the GNU General Public License as published by
  6.    the Free Software Foundation; either version 3 of the License, or
  7.    (at your option) any later version.

  8.    This program is distributed in the hope that it will be useful,
  9.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.    GNU General Public License for more details.

  12.    You should have received a copy of the GNU General Public License
  13.    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

  14. #ifndef X86_XSTATE_H
  15. #define X86_XSTATE_H 1

  16. /* The extended state feature bits.  */
  17. #define X86_XSTATE_X87                (1ULL << 0)
  18. #define X86_XSTATE_SSE                (1ULL << 1)
  19. #define X86_XSTATE_AVX                (1ULL << 2)
  20. #define X86_XSTATE_BNDREGS        (1ULL << 3)
  21. #define X86_XSTATE_BNDCFG        (1ULL << 4)
  22. #define X86_XSTATE_MPX                (X86_XSTATE_BNDREGS | X86_XSTATE_BNDCFG)

  23. /* AVX 512 adds three feature bits.  All three must be enabled.  */
  24. #define X86_XSTATE_K                (1ULL << 5)
  25. #define X86_XSTATE_ZMM_H        (1ULL << 6)
  26. #define X86_XSTATE_ZMM                (1ULL << 7)
  27. #define X86_XSTATE_AVX512        (X86_XSTATE_K | X86_XSTATE_ZMM_H \
  28.                                  | X86_XSTATE_ZMM)

  29. /* Supported mask and size of the extended state.  */
  30. #define X86_XSTATE_X87_MASK        X86_XSTATE_X87
  31. #define X86_XSTATE_SSE_MASK        (X86_XSTATE_X87 | X86_XSTATE_SSE)
  32. #define X86_XSTATE_AVX_MASK        (X86_XSTATE_SSE_MASK | X86_XSTATE_AVX)
  33. #define X86_XSTATE_MPX_MASK        (X86_XSTATE_AVX_MASK | X86_XSTATE_MPX)
  34. #define X86_XSTATE_AVX512_MASK        (X86_XSTATE_AVX_MASK | X86_XSTATE_AVX512)
  35. #define X86_XSTATE_MPX_AVX512_MASK (X86_XSTATE_MPX_MASK | X86_XSTATE_AVX512)

  36. #define X86_XSTATE_ALL_MASK        (X86_XSTATE_MPX_AVX512_MASK)

  37. #define X86_XSTATE_SSE_SIZE        576
  38. #define X86_XSTATE_AVX_SIZE        832
  39. #define X86_XSTATE_BNDREGS_SIZE        1024
  40. #define X86_XSTATE_BNDCFG_SIZE        1088
  41. #define X86_XSTATE_AVX512_SIZE        2688
  42. #define X86_XSTATE_MAX_SIZE        2688


  43. /* In case one of the MPX XCR0 bits is set we consider we have MPX.  */
  44. #define HAS_MPX(XCR0) (((XCR0) & X86_XSTATE_MPX) != 0)
  45. #define HAS_AVX(XCR0) (((XCR0) & X86_XSTATE_AVX) != 0)
  46. #define HAS_AVX512(XCR0) (((XCR0) & X86_XSTATE_AVX512) != 0)

  47. /* Get I386 XSAVE extended state size.  */
  48. #define X86_XSTATE_SIZE(XCR0) \
  49.     (HAS_AVX512 (XCR0) ? X86_XSTATE_AVX512_SIZE : \
  50.      (HAS_MPX (XCR0) ? X86_XSTATE_BNDCFG_SIZE : \
  51.       (HAS_AVX (XCR0) ? X86_XSTATE_AVX_SIZE : X86_XSTATE_SSE_SIZE)))

  52. #endif /* X86_XSTATE_H */