ptrace-vsx.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Copyright (C) 2015 Anshuman Khandual, IBM Corporation.
  4. */
  5. #define VEC_MAX 128
  6. #define VSX_MAX 32
  7. #define VMX_MAX 32
  8. /*
  9. * unsigned long vsx[32]
  10. * unsigned long load[128]
  11. */
  12. int validate_vsx(unsigned long *vsx, unsigned long *load)
  13. {
  14. int i;
  15. for (i = 0; i < VSX_MAX; i++) {
  16. if (vsx[i] != load[2 * i + 1]) {
  17. printf("vsx[%d]: %lx load[%d] %lx\n",
  18. i, vsx[i], 2 * i + 1, load[2 * i + 1]);
  19. return TEST_FAIL;
  20. }
  21. }
  22. return TEST_PASS;
  23. }
  24. /*
  25. * unsigned long vmx[32][2]
  26. * unsigned long load[128]
  27. */
  28. int validate_vmx(unsigned long vmx[][2], unsigned long *load)
  29. {
  30. int i;
  31. for (i = 0; i < VMX_MAX; i++) {
  32. #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
  33. if ((vmx[i][0] != load[64 + 2 * i]) ||
  34. (vmx[i][1] != load[65 + 2 * i])) {
  35. printf("vmx[%d][0]: %lx load[%d] %lx\n",
  36. i, vmx[i][0], 64 + 2 * i,
  37. load[64 + 2 * i]);
  38. printf("vmx[%d][1]: %lx load[%d] %lx\n",
  39. i, vmx[i][1], 65 + 2 * i,
  40. load[65 + 2 * i]);
  41. return TEST_FAIL;
  42. }
  43. #else /*
  44. * In LE each value pair is stored in an
  45. * alternate manner.
  46. */
  47. if ((vmx[i][0] != load[65 + 2 * i]) ||
  48. (vmx[i][1] != load[64 + 2 * i])) {
  49. printf("vmx[%d][0]: %lx load[%d] %lx\n",
  50. i, vmx[i][0], 65 + 2 * i,
  51. load[65 + 2 * i]);
  52. printf("vmx[%d][1]: %lx load[%d] %lx\n",
  53. i, vmx[i][1], 64 + 2 * i,
  54. load[64 + 2 * i]);
  55. return TEST_FAIL;
  56. }
  57. #endif
  58. }
  59. return TEST_PASS;
  60. }
  61. /*
  62. * unsigned long store[128]
  63. * unsigned long load[128]
  64. */
  65. int compare_vsx_vmx(unsigned long *store, unsigned long *load)
  66. {
  67. int i;
  68. for (i = 0; i < VSX_MAX; i++) {
  69. if (store[1 + 2 * i] != load[1 + 2 * i]) {
  70. printf("store[%d]: %lx load[%d] %lx\n",
  71. 1 + 2 * i, store[i],
  72. 1 + 2 * i, load[i]);
  73. return TEST_FAIL;
  74. }
  75. }
  76. #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
  77. for (i = 64; i < VEC_MAX; i++) {
  78. if (store[i] != load[i]) {
  79. printf("store[%d]: %lx load[%d] %lx\n",
  80. i, store[i], i, load[i]);
  81. return TEST_FAIL;
  82. }
  83. }
  84. #else /* In LE each value pair is stored in an alternate manner */
  85. for (i = 64; i < VEC_MAX; i++) {
  86. if (!(i % 2) && (store[i] != load[i+1])) {
  87. printf("store[%d]: %lx load[%d] %lx\n",
  88. i, store[i], i+1, load[i+1]);
  89. return TEST_FAIL;
  90. }
  91. if ((i % 2) && (store[i] != load[i-1])) {
  92. printf("here store[%d]: %lx load[%d] %lx\n",
  93. i, store[i], i-1, load[i-1]);
  94. return TEST_FAIL;
  95. }
  96. }
  97. #endif
  98. return TEST_PASS;
  99. }
  100. void load_vsx_vmx(unsigned long *load, unsigned long *vsx,
  101. unsigned long vmx[][2])
  102. {
  103. int i;
  104. for (i = 0; i < VSX_MAX; i++)
  105. vsx[i] = load[1 + 2 * i];
  106. for (i = 0; i < VMX_MAX; i++) {
  107. vmx[i][0] = load[64 + 2 * i];
  108. vmx[i][1] = load[65 + 2 * i];
  109. }
  110. }
  111. void loadvsx(void *p, int tmp);
  112. void storevsx(void *p, int tmp);