Darwin/iOS: Improve unified syntax use for LLVM
This commit is contained in:
@@ -109,42 +109,27 @@
|
|||||||
#define UNWIND @
|
#define UNWIND @
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
.syntax unified
|
||||||
|
|
||||||
#if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
|
#if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
|
||||||
.macro ARM_FUNC_START name
|
#define ARM_FUNC_START(name) \
|
||||||
.text
|
.text; \
|
||||||
.align 0
|
.align 2; \
|
||||||
.thumb
|
.thumb; \
|
||||||
.thumb_func
|
.thumb_func; \
|
||||||
#ifdef __APPLE__
|
ENTRY(name); \
|
||||||
ENTRY($0)
|
bx pc; \
|
||||||
|
nop; \
|
||||||
|
.arm; \
|
||||||
|
UNWIND .fnstart; \
|
||||||
|
_L__##name:
|
||||||
#else
|
#else
|
||||||
ENTRY(\name)
|
#define ARM_FUNC_START(name) \
|
||||||
#endif
|
.text; \
|
||||||
bx pc
|
.align 2; \
|
||||||
nop
|
.arm; \
|
||||||
.arm
|
ENTRY(name); \
|
||||||
UNWIND .fnstart
|
UNWIND .fnstart
|
||||||
/* A hook to tell gdb that we've switched to ARM mode. Also used to call
|
|
||||||
directly from other local arm routines. */
|
|
||||||
#ifdef __APPLE__
|
|
||||||
_L__$0:
|
|
||||||
#else
|
|
||||||
_L__\name:
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
#else
|
|
||||||
.macro ARM_FUNC_START name
|
|
||||||
.text
|
|
||||||
.align 0
|
|
||||||
.arm
|
|
||||||
#ifdef __APPLE__
|
|
||||||
ENTRY($0)
|
|
||||||
#else
|
|
||||||
ENTRY(\name)
|
|
||||||
#endif
|
|
||||||
UNWIND .fnstart
|
|
||||||
.endm
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.macro RETLDM regs=, cond=, dirn=ia
|
.macro RETLDM regs=, cond=, dirn=ia
|
||||||
@@ -171,7 +156,7 @@ _L__\name:
|
|||||||
@ sp+0: ecif.rvalue
|
@ sp+0: ecif.rvalue
|
||||||
|
|
||||||
@ This assumes we are using gas.
|
@ This assumes we are using gas.
|
||||||
ARM_FUNC_START ffi_call_SYSV
|
ARM_FUNC_START(ffi_call_SYSV)
|
||||||
@ Save registers
|
@ Save registers
|
||||||
stmfd sp!, {r0-r3, fp, lr}
|
stmfd sp!, {r0-r3, fp, lr}
|
||||||
UNWIND .save {r0-r3, fp, lr}
|
UNWIND .save {r0-r3, fp, lr}
|
||||||
@@ -228,7 +213,7 @@ ARM_FUNC_START ffi_call_SYSV
|
|||||||
#if defined(__SOFTFP__) || defined(__ARM_EABI__)
|
#if defined(__SOFTFP__) || defined(__ARM_EABI__)
|
||||||
cmpne r3, #FFI_TYPE_DOUBLE
|
cmpne r3, #FFI_TYPE_DOUBLE
|
||||||
#endif
|
#endif
|
||||||
stmeqia r2, {r0, r1}
|
stmiaeq r2, {r0, r1}
|
||||||
|
|
||||||
#if !defined(__SOFTFP__) && !defined(__ARM_EABI__)
|
#if !defined(__SOFTFP__) && !defined(__ARM_EABI__)
|
||||||
beq LSYM(Lepilogue)
|
beq LSYM(Lepilogue)
|
||||||
@@ -266,7 +251,7 @@ LSYM(Lepilogue):
|
|||||||
void *args;
|
void *args;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ARM_FUNC_START ffi_closure_SYSV
|
ARM_FUNC_START(ffi_closure_SYSV)
|
||||||
UNWIND .pad #16
|
UNWIND .pad #16
|
||||||
add ip, sp, #16
|
add ip, sp, #16
|
||||||
stmfd sp!, {ip, lr}
|
stmfd sp!, {ip, lr}
|
||||||
@@ -345,7 +330,7 @@ ARM_FUNC_START ffi_closure_SYSV
|
|||||||
@ r3: fig->flags
|
@ r3: fig->flags
|
||||||
@ sp+0: ecif.rvalue
|
@ sp+0: ecif.rvalue
|
||||||
|
|
||||||
ARM_FUNC_START ffi_call_VFP
|
ARM_FUNC_START(ffi_call_VFP)
|
||||||
@ Save registers
|
@ Save registers
|
||||||
stmfd sp!, {r0-r3, fp, lr}
|
stmfd sp!, {r0-r3, fp, lr}
|
||||||
UNWIND .save {r0-r3, fp, lr}
|
UNWIND .save {r0-r3, fp, lr}
|
||||||
@@ -433,7 +418,7 @@ LSYM(Lepilogue_vfp):
|
|||||||
.size CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP)
|
.size CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP)
|
||||||
|
|
||||||
|
|
||||||
ARM_FUNC_START ffi_closure_VFP
|
ARM_FUNC_START(ffi_closure_VFP)
|
||||||
fstmfdd sp!, {d0-d7}
|
fstmfdd sp!, {d0-d7}
|
||||||
@ r0-r3, then d0-d7
|
@ r0-r3, then d0-d7
|
||||||
UNWIND .pad #80
|
UNWIND .pad #80
|
||||||
|
|||||||
Reference in New Issue
Block a user