| /* ANSI concatenation macros. */ |
| |
| #define CONCAT1(a, b) CONCAT2(a, b) |
| #define CONCAT2(a, b) a ## b |
| |
| /* Use the right prefix for global labels. */ |
| |
| #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x) |
| |
| #define d0 %d0 |
| #define d1 %d1 |
| #define d2 %d2 |
| #define d3 %d3 |
| #define d4 %d4 |
| #define d5 %d5 |
| #define d6 %d6 |
| #define d7 %d7 |
| #define a0 %a0 |
| #define a1 %a1 |
| #define a2 %a2 |
| #define a3 %a3 |
| #define a4 %a4 |
| #define a5 %a5 |
| #define a6 %a6 |
| #define fp %fp |
| #define sp %sp |
| |
| |
| .global SYM (setjmp) |
| .global SYM (longjmp) |
| |
| SYM (setjmp): |
| moveal sp@(4),a0 |
| movel sp@(0),a0@(12) |
| movel sp,a0@(8) |
| moveml d2-d7/a2-a6,a0@(20) |
| clrl d0 |
| rts |
| |
| SYM (longjmp): |
| moveal sp@(4),a0 |
| movel sp@(8),d0 |
| bne 1f |
| movel &1,d0 |
| 1: |
| moveml a0@(20),d2-d7/a2-a6 |
| moveal a0@(8),sp |
| movel a0@(12),sp@ |
| rts |
| |
| #ifdef M68881 |
| .global SYM (setjmp_68881) |
| .global SYM (longjmp_68881) |
| |
| SYM (setjmp_68881): |
| moveal sp@(4),a0 |
| movel sp@(0),a0@(12) |
| movel sp,a0@(8) |
| moveml d2-d7/a2-a6,a0@(20) |
| fmovemx fp2-fp7,a0@(64) |
| clrl d0 |
| rts |
| |
| SYM (longjmp_68881): |
| moveal sp@(4),a0 |
| fmovemx a0@(64),fp2-fp7 |
| movel sp@(8),d0 |
| bne 1f |
| movel &1,d0 |
| 1: |
| moveml a0@(20),d2-d7/a2-a6 |
| moveal a0@(8),sp |
| movel a0@(12),sp@ |
| rts |
| #endif |