166 |
166 |
167 #ifdef __cplusplus |
167 #ifdef __cplusplus |
168 // Support for throwing exceptions through embedded assembler |
168 // Support for throwing exceptions through embedded assembler |
169 // Should only be needed user side |
169 // Should only be needed user side |
170 |
170 |
171 #define __EH_FRAME_ADDRESS(reg,offset) FRAME ADDRESS reg, offset |
171 #define __VSTR(x) #x |
172 #define __EH_FRAME_PUSH2(reg1,reg2) FRAME PUSH {reg1, reg2} |
172 #define __STR(x) __VSTR(x) |
173 #define __EH_FRAME_SAVE1(reg,offset) FRAME SAVE {reg}, offset |
173 #define __GAS_SAVE_REG(reg) ".save {" __STR(reg) " }" |
|
174 #define __ASM_GAS_SAVE_REG(reg) asm( __GAS_SAVE_REG(reg) ); |
|
175 #define __GAS_SAVE_REGS2(reg1,reg2) ".save {" __STR(reg1) "," __STR(reg2) "}" |
|
176 #define __ASM_GAS_SAVE_REGS2(reg1,reg2) asm( __GAS_SAVE_REGS2(reg1,reg2) ); |
|
177 #define __GAS_SETFP(reg,offset) ".setfp fp," __STR(reg) ",#" __STR(offset) |
|
178 #define __ASM_GAS_SETFP(reg,offset) asm( __GAS_SETFP(reg,offset) ); |
|
179 |
|
180 #define __EH_FRAME_ADDRESS(reg,offset) \ |
|
181 __ASM_GAS_SETFP(reg,offset) |
|
182 #define __EH_FRAME_PUSH2(reg1,reg2) __ASM_GAS_SAVE_REGS2(reg1,reg2) |
|
183 #define __EH_FRAME_SAVE1(reg,offset) \ |
|
184 __EH_FRAME_ADDRESS(fp,offset) \ |
|
185 __ASM_GAS_SAVE_REG(reg) |
174 |
186 |
175 #endif |
187 #endif |
176 |
188 |