ia64-defs.m4
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:3k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. divert(-1)
  2. dnl  Copyright 2000, 2002, 2003 Free Software Foundation, Inc.
  3. dnl
  4. dnl  This file is part of the GNU MP Library.
  5. dnl
  6. dnl  The GNU MP Library is free software; you can redistribute it and/or
  7. dnl  modify it under the terms of the GNU Lesser General Public License as
  8. dnl  published by the Free Software Foundation; either version 3 of the
  9. dnl  License, or (at your option) any later version.
  10. dnl
  11. dnl  The GNU MP Library is distributed in the hope that it will be useful,
  12. dnl  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14. dnl  Lesser General Public License for more details.
  15. dnl
  16. dnl  You should have received a copy of the GNU Lesser General Public License
  17. dnl  along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
  18. dnl  ia64 assembler comments are C++ style "//" to the end of line.  gas
  19. dnl  also accepts "#" as a comment, if it's the first non-blank on a line.
  20. dnl
  21. dnl  BSD m4 can't handle a multi-character comment like "//" (see notes in
  22. dnl  mpn/asm-defs.m4).  For now the default "#" is left, but with care taken
  23. dnl  not to put any macros after "foo#" (since of course they won't expand).
  24. define(`ASM_START',
  25. m4_assert_numargs(0)
  26. `')
  27. dnl  Called: PROLOGUE_cpu(GSYM_PREFIX`'foo)
  28. dnl          EPILOGUE_cpu(GSYM_PREFIX`'foo)
  29. dnl
  30. dnl  32-byte alignment is used for the benefit of itanium-2, where the code
  31. dnl  fetcher will only take 2 bundles from a 32-byte aligned target.  At
  32. dnl  16mod32 it only reads 1 in the first cycle.  This might not make any
  33. dnl  difference if the rotate buffers are full or there's other work holding
  34. dnl  up execution, but we use 32-bytes to give the best chance of peak
  35. dnl  throughput.
  36. dnl
  37. dnl  We can use .align here despite the gas bug noted in mpn/ia64/README,
  38. dnl  since we're not expecting to execute across a PROLOGUE(), at least not
  39. dnl  currently.
  40. define(`PROLOGUE_cpu',
  41. m4_assert_numargs(1)
  42. `
  43. .text
  44. .align 32
  45. .global $1#
  46. .proc $1#
  47. $1:')
  48. define(`EPILOGUE_cpu',
  49. m4_assert_numargs(1)
  50. `
  51. .endp $1#
  52. ')
  53. define(`DATASTART',
  54. `dnl
  55. DATA
  56. $1:')
  57. define(`DATAEND',`dnl')
  58. define(`ASM_END',`dnl')
  59. dnl  Usage: ALIGN(bytes)
  60. dnl
  61. dnl  Emit a ".align" directive.  "bytes" is eval()ed, so can be an
  62. dnl  expression.
  63. dnl
  64. dnl  This version overrides the definition in mpn/asm-defs.m4.  We suppress
  65. dnl  any .align if the gas byte-swapped-nops bug was detected by configure
  66. dnl  GMP_ASM_IA64_ALIGN_OK.
  67. define(`ALIGN',
  68. m4_assert_numargs(1)
  69. m4_assert_defined(`IA64_ALIGN_OK')
  70. `ifelse(IA64_ALIGN_OK,no,,
  71. `.align eval($1)')')
  72. dnl  Usage: ASSERT([pr] [,code])
  73. dnl
  74. dnl  Require that the given predictate register is true after executing the
  75. dnl  test code.  For example,
  76. dnl
  77. dnl         ASSERT(p6,
  78. dnl         `       cmp.eq  p6,p0 = r3, r4')
  79. dnl
  80. dnl  If the predicate register argument is empty then nothing is tested, the
  81. dnl  code is just executed.  This can be used for setups required by later
  82. dnl  ASSERTs.  The code argument can be omitted to just test a predicate
  83. dnl  with no special setup code.
  84. dnl
  85. dnl  For convenience, stops are inserted before and after the code emitted.
  86. define(ASSERT,
  87. m4_assert_numargs_range(1,2)
  88. m4_assert_defined(`WANT_ASSERT')
  89. `ifelse(WANT_ASSERT,1,
  90. ` ;;
  91. ifelse(`$2',,,
  92. `$2
  93. ;;
  94. ')
  95. ifelse(`$1',,,
  96. `($1) br .LASSERTok`'ASSERT_label_counter ;;
  97. cmp.ne p6,p6 = r0, r0 C illegal instruction
  98. ;;
  99. .LASSERTok`'ASSERT_label_counter:
  100. define(`ASSERT_label_counter',eval(ASSERT_label_counter+1))
  101. ')
  102. ')')
  103. define(`ASSERT_label_counter',1)
  104. divert