#if __ELF__
+// Special arrangements for position-independent code.
#if __PIC__ || __PIE__
# define WANT_PIC 1
#endif
+// Additional symbol metadata.
#define TYPE_FUNC(name) .type name, STT_FUNC
-
+#define TYPE_OBJ(name) .type name, STT_OBJECT
#define SIZE_OBJ(name) .size name, . - name
#endif
#if ABI_WIN
+// Function names need decorating on 32-bit i386.
#if CPUFAM_X86
# define F(name) _##name
#endif
.macro endprologue
.endm
+// cmov RD, RN, CC: set RD to RN if CC is satisfied, otherwise do nothing
+.macro cmov rd, rn, cc
+ csel \rd, \rn, \rd, \cc
+.endm
+
// Notational improvement: write `csel.CC' etc., rather than `csel ..., CC'.
#define _COND(_) \
_(eq) _(ne) _(cs) _(cc) _(vs) _(vc) _(mi) _(pl) \
_(hs) _(lo)
#define _INST(_) \
_(ccmp) _(ccmn) \
- _(csel) \
+ _(csel) _(cmov) \
_(csinc) _(cinc) _(cset) \
_(csneg) _(cneg) \
_(csinv) _(cinv) _(csetm)
#ifndef TYPE_FUNC
# define TYPE_FUNC(name)
#endif
-
+#ifndef TYPE_OBJ
+# define TYPE_OBJ(name)
+#endif
#ifndef SIZE_OBJ
# define SIZE_OBJ(name)
#endif
-#if __ELF__ && !defined(WANT_EXECUTABLE_STACK)
+#if __ELF__ && !defined(FORCE_EXECUTABLE_STACK)
.pushsection .note.GNU-stack, "", _SECTTY(progbits)
.popsection
#endif