asm.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /* $OpenBSD: asm.h,v 1.7 2013/03/28 17:41:04 martynas Exp $ */
  2. /* $NetBSD: asm.h,v 1.5 1997/07/16 15:16:43 christos Exp $ */
  3. /*
  4. * Copyright (c) 1994 Allen Briggs
  5. * All rights reserved.
  6. *
  7. * Gleaned from locore.s and sun3 asm.h which had the following copyrights:
  8. * locore.s:
  9. * Copyright (c) 1988 University of Utah.
  10. * Copyright (c) 1982, 1990 The Regents of the University of California.
  11. * sun3/include/asm.h:
  12. * Copyright (c) 1993 Adam Glass
  13. * Copyright (c) 1990 The Regents of the University of California.
  14. *
  15. * Redistribution and use in source and binary forms, with or without
  16. * modification, are permitted provided that the following conditions
  17. * are met:
  18. * 1. Redistributions of source code must retain the above copyright
  19. * notice, this list of conditions and the following disclaimer.
  20. * 2. Redistributions in binary form must reproduce the above copyright
  21. * notice, this list of conditions and the following disclaimer in the
  22. * documentation and/or other materials provided with the distribution.
  23. * 3. Neither the name of the University nor the names of its contributors
  24. * may be used to endorse or promote products derived from this software
  25. * without specific prior written permission.
  26. *
  27. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  28. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  29. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  30. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  31. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  32. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  33. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  34. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  35. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  36. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  37. * SUCH DAMAGE.
  38. */
  39. #ifndef _MACHINE_ASM_H_
  40. #define _MACHINE_ASM_H_
  41. #ifdef __ELF__
  42. #define _C_LABEL(name) name
  43. #else
  44. #ifdef __STDC__
  45. #define _C_LABEL(name) _ ## name
  46. #else
  47. #define _C_LABEL(name) _/**/name
  48. #endif
  49. #endif
  50. #define _ASM_LABEL(name) name
  51. /*
  52. * STRONG_ALIAS, WEAK_ALIAS
  53. * Create a strong or weak alias.
  54. */
  55. #ifdef __ELF__
  56. #define STRONG_ALIAS(alias,sym) \
  57. .global alias; \
  58. alias = sym
  59. #define WEAK_ALIAS(alias,sym) \
  60. .weak alias; \
  61. alias = sym
  62. #endif
  63. /*
  64. * WARN_REFERENCES: create a warning if the specified symbol is referenced
  65. * (ELF only).
  66. */
  67. #ifdef __ELF__
  68. #define WARN_REFERENCES(_sym,_msg) \
  69. .section .gnu.warning. ## _sym ; .ascii _msg ; .text
  70. #endif /* __ELF__ */
  71. #ifdef __PIC__
  72. /*
  73. * PIC_PROLOGUE() is akin to the compiler generated function prologue for
  74. * PIC code. It leaves the address of the Global Offset Table in DEST,
  75. * clobbering register TMP in the process. Using the temporary enables us
  76. * to work without a stack frame (doing so requires saving %o7) .
  77. */
  78. #define PIC_PROLOGUE(dest,tmp) \
  79. mov %o7,tmp; 3: call 4f; nop; 4: \
  80. sethi %hi(_C_LABEL(_GLOBAL_OFFSET_TABLE_)-(3b-.)),dest; \
  81. or dest,%lo(_C_LABEL(_GLOBAL_OFFSET_TABLE_)-(3b-.)),dest; \
  82. add dest,%o7,dest; mov tmp,%o7
  83. /*
  84. * PICCY_SET() does the equivalent of a `set var, %dest' instruction in
  85. * a PIC-like way, but without involving the Global Offset Table. This
  86. * only works for VARs defined in the same file *and* in the text segment.
  87. */
  88. #define PICCY_SET(var,dest,tmp) \
  89. mov %o7,tmp; 3: call 4f; nop; 4: \
  90. add %o7,(var-3b),dest; mov tmp,%o7
  91. #else
  92. #define PIC_PROLOGUE(dest,tmp)
  93. #define PICCY_OFFSET(var,dest,tmp)
  94. #endif
  95. #define FTYPE(x) .type x,@function
  96. #define OTYPE(x) .type x,@object
  97. #define _ENTRY(name) \
  98. .align 4; .globl name; .proc 1; FTYPE(name); name:
  99. #ifdef GPROF
  100. #define _PROF_PROLOGUE \
  101. .data; .align 4; 1: .long 0; \
  102. .text; save %sp,-96,%sp; sethi %hi(1b),%o0; call mcount; \
  103. or %o0,%lo(1b),%o0; restore
  104. #else
  105. #define _PROF_PROLOGUE
  106. #endif
  107. #define ENTRY(name) _ENTRY(_C_LABEL(name)); _PROF_PROLOGUE
  108. #define ASENTRY(name) _ENTRY(_ASM_LABEL(name)); _PROF_PROLOGUE
  109. #define FUNC(name) ASENTRY(name)
  110. #define ASMSTR .asciz
  111. #define RCSID(name) .asciz name
  112. #endif /* _MACHINE_ASM_H_ */