Remove _ARCH_INDIRECT, it was the glue to enable having both hardware
and software versions of the floating point code in libm. The runtime selection was done by reading the hw.floatingpoint sysctl via __get_hw_float().
This commit is contained in:
parent
d48084b9e5
commit
461d4da338
@ -101,71 +101,4 @@
|
||||
#define __FBSDID(s) /* nothing */
|
||||
#endif /* not lint and not STRIP_FBSDID */
|
||||
|
||||
#ifdef _ARCH_INDIRECT
|
||||
/*
|
||||
* Generate code to select between the generic functions and _ARCH_INDIRECT
|
||||
* specific ones.
|
||||
* XXX nested __CONCATs don't work with non-ANSI cpp's.
|
||||
*/
|
||||
#define ANAME(x) CNAME(__CONCAT(__CONCAT(__,_ARCH_INDIRECT),x))
|
||||
#define ASELNAME(x) CNAME(__CONCAT(__arch_select_,x))
|
||||
#define AVECNAME(x) CNAME(__CONCAT(__arch_,x))
|
||||
#define GNAME(x) CNAME(__CONCAT(__generic_,x))
|
||||
|
||||
/* Don't bother profiling this. */
|
||||
#ifdef PIC
|
||||
#define ARCH_DISPATCH(x) \
|
||||
_START_ENTRY; \
|
||||
.globl CNAME(x); .type CNAME(x),@function; CNAME(x): ; \
|
||||
PIC_PROLOGUE; \
|
||||
movl PIC_GOT(AVECNAME(x)),%eax; \
|
||||
PIC_EPILOGUE; \
|
||||
jmpl *(%eax)
|
||||
|
||||
#define ARCH_SELECT(x) _START_ENTRY; \
|
||||
.type ASELNAME(x),@function; \
|
||||
ASELNAME(x): \
|
||||
PIC_PROLOGUE; \
|
||||
call PIC_PLT(CNAME(__get_hw_float)); \
|
||||
testl %eax,%eax; \
|
||||
movl PIC_GOT(ANAME(x)),%eax; \
|
||||
jne 8f; \
|
||||
movl PIC_GOT(GNAME(x)),%eax; \
|
||||
8: \
|
||||
movl PIC_GOT(AVECNAME(x)),%edx; \
|
||||
movl %eax,(%edx); \
|
||||
PIC_EPILOGUE; \
|
||||
jmpl *%eax
|
||||
#else /* !PIC */
|
||||
#define ARCH_DISPATCH(x) \
|
||||
_START_ENTRY; \
|
||||
.globl CNAME(x); .type CNAME(x),@function; CNAME(x): ; \
|
||||
jmpl *AVECNAME(x)
|
||||
|
||||
#define ARCH_SELECT(x) _START_ENTRY; \
|
||||
.type ASELNAME(x),@function; \
|
||||
ASELNAME(x): \
|
||||
call CNAME(__get_hw_float); \
|
||||
testl %eax,%eax; \
|
||||
movl $ANAME(x),%eax; \
|
||||
jne 8f; \
|
||||
movl $GNAME(x),%eax; \
|
||||
8: \
|
||||
movl %eax,AVECNAME(x); \
|
||||
jmpl *%eax
|
||||
#endif /* PIC */
|
||||
|
||||
#define ARCH_VECTOR(x) .data; .p2align 2; \
|
||||
.globl AVECNAME(x); \
|
||||
.type AVECNAME(x),@object; \
|
||||
.size AVECNAME(x),4; \
|
||||
AVECNAME(x): .long ASELNAME(x)
|
||||
|
||||
#undef _ENTRY
|
||||
#define _ENTRY(x) ARCH_VECTOR(x); ARCH_SELECT(x); ARCH_DISPATCH(x); \
|
||||
_START_ENTRY; \
|
||||
.globl ANAME(x); .type ANAME(x),@function; ANAME(x):
|
||||
|
||||
#endif /* _ARCH_INDIRECT */
|
||||
|
||||
#endif /* !_MACHINE_ASM_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user