diff --git a/components/xtensa/include/xtensa/xtensa_context.h b/components/xtensa/include/xtensa/xtensa_context.h index b869a105c6..ee87d2741f 100644 --- a/components/xtensa/include/xtensa/xtensa_context.h +++ b/components/xtensa/include/xtensa/xtensa_context.h @@ -71,10 +71,18 @@ We need to undef due to redefinition from xtruntime.h #if defined(_ASMLANGUAGE) || defined(__ASSEMBLER__) +#ifdef __clang__ +#define STRUCT_BEGIN .set XT_STRUCT_OFFSET, 0 +#define STRUCT_FIELD(ctype,size,asname,name) .set asname, XT_STRUCT_OFFSET; .set XT_STRUCT_OFFSET, asname + size +#define STRUCT_AFIELD(ctype,size,asname,name,n) .set asname, XT_STRUCT_OFFSET;\ + .set XT_STRUCT_OFFSET, asname + (size)*(n); +#define STRUCT_END(sname) .set sname##Size, XT_STRUCT_OFFSET; +#else // __clang__ #define STRUCT_BEGIN .pushsection .text; .struct 0 #define STRUCT_FIELD(ctype,size,asname,name) asname: .space size #define STRUCT_AFIELD(ctype,size,asname,name,n) asname: .space (size)*(n) #define STRUCT_END(sname) sname##Size:; .popsection +#endif // __clang__ #else diff --git a/components/xtensa/include/xtensa/xtruntime-frames.h b/components/xtensa/include/xtensa/xtruntime-frames.h index d0eb368735..b78095e0dd 100644 --- a/components/xtensa/include/xtensa/xtruntime-frames.h +++ b/components/xtensa/include/xtensa/xtruntime-frames.h @@ -31,11 +31,24 @@ /* Macros that help define structures for both C and assembler: */ #if defined(_ASMLANGUAGE) || defined(__ASSEMBLER__) + +#ifdef __clang__ +#define STRUCT_BEGIN .set XT_STRUCT_OFFSET, 0 +#define STRUCT_FIELD(ctype,size,pre,name) .set pre##name, XT_STRUCT_OFFSET; .set XT_STRUCT_OFFSET, pre##name + size +#define STRUCT_AFIELD(ctype,size,pre,name,n) .set pre##name, XT_STRUCT_OFFSET;\ + .set XT_STRUCT_OFFSET, pre##name + (size)*(n); +#define STRUCT_AFIELD_A(ctype,size,align,pre,name,n) .set pre##name, XT_STRUCT_OFFSET\ + .ifgt (align-1); .set pre##name, XT_STRUCT_OFFSET + (align - (XT_STRUCT_OFFSET & (align-1))); .endif\ + .set XT_STRUCT_OFFSET, pre##name + (size)*(n); +#define STRUCT_END(sname) .set sname##Size, XT_STRUCT_OFFSET; +#else /* __clang__ */ #define STRUCT_BEGIN .pushsection .text; .struct 0 #define STRUCT_FIELD(ctype,size,pre,name) pre##name: .space size #define STRUCT_AFIELD(ctype,size,pre,name,n) pre##name: .if n ; .space (size)*(n) ; .endif #define STRUCT_AFIELD_A(ctype,size,align,pre,name,n) .balign align ; pre##name: .if n ; .space (size)*(n) ; .endif #define STRUCT_END(sname) sname##Size:; .popsection +#endif /* __clang__ */ + #else /*_ASMLANGUAGE||__ASSEMBLER__*/ #define STRUCT_BEGIN typedef struct { #define STRUCT_FIELD(ctype,size,pre,name) ctype name;