#ifdef ENABLE_LLVM
#define TARGET_ADJUST_LLVM_CC(CC, type) \
{ \
if (TARGET_AAPCS_BASED) \
CC = ((TARGET_VFP && TARGET_HARD_FLOAT_ABI && \
((TYPE_ARG_TYPES(type) == 0) || \
(TREE_VALUE(tree_last(TYPE_ARG_TYPES(type))) == \
void_type_node))) ? \
CallingConv::ARM_AAPCS_VFP : \
CallingConv::ARM_AAPCS); \
else \
CC = CallingConv::ARM_APCS; \
}
#ifdef LLVM_ABI_H
extern bool
llvm_arm_should_pass_aggregate_in_mixed_regs(tree, const Type *Ty,
CallingConv::ID&,
std::vector<const Type*>&);
#define LLVM_SHOULD_PASS_AGGREGATE_IN_MIXED_REGS(T, TY, CC, E) \
llvm_arm_should_pass_aggregate_in_mixed_regs((T), (TY), (CC), (E))
extern
bool llvm_arm_aggregate_partially_passed_in_regs(std::vector<const Type*>&,
std::vector<const Type*>&,
bool, CallingConv::ID&);
#define LLVM_AGGREGATE_PARTIALLY_PASSED_IN_REGS(E, SE, ISR, CC) \
llvm_arm_aggregate_partially_passed_in_regs((E), (SE), (ISR), (CC))
extern const Type *llvm_arm_aggr_type_for_struct_return(tree type,
CallingConv::ID &CC);
#define LLVM_AGGR_TYPE_FOR_STRUCT_RETURN(X, CC) \
llvm_arm_aggr_type_for_struct_return((X), (CC))
extern void llvm_arm_extract_multiple_return_value(Value *Src, Value *Dest,
bool isVolatile,
LLVMBuilder &B);
#define LLVM_EXTRACT_MULTIPLE_RETURN_VALUE(Src,Dest,V,B) \
llvm_arm_extract_multiple_return_value((Src),(Dest),(V),(B))
extern
bool llvm_arm_should_pass_or_return_aggregate_in_regs(tree TreeType,
CallingConv::ID &CC);
#define LLVM_SHOULD_NOT_USE_SHADOW_RETURN(X, CC) \
llvm_arm_should_pass_or_return_aggregate_in_regs((X), (CC))
#define LLVM_SHOULD_RETURN_VECTOR_AS_SHADOW(X, isBuiltin) \
(TREE_INT_CST_LOW(TYPE_SIZE(X)) > 128)
#endif
#endif