1/* setjmp for the Blackfin project 2 * 3 * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> 4 * Copyright (C) 2003 Metrowerks 5 * Based on code from Analog Devices. 6 * 7 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. 8 */ 9 10.text 11.global ___sigsetjmp; 12.type ___sigsetjmp,STT_FUNC; 13.align 4; 14 15___sigsetjmp: 16 [--SP] = P0; /* Save P0 */ 17 P0 = R0; 18 R0 = [SP++]; 19 [P0 + 0x00] = R0; /* Save saved P0 */ 20 [P0 + 0x04] = P1; 21 [P0 + 0x08] = P2; 22 [P0 + 0x0C] = P3; 23 [P0 + 0x10] = P4; 24 [P0 + 0x14] = P5; 25 26 [P0 + 0x18] = FP; /* Frame Pointer */ 27 [P0 + 0x1C] = SP; /* Stack Pointer */ 28 29 [P0 + 0x20] = P0; /* Data Registers */ 30 [P0 + 0x24] = R1; 31 [P0 + 0x28] = R2; 32 [P0 + 0x2C] = R3; 33 [P0 + 0x30] = R4; 34 [P0 + 0x34] = R5; 35 [P0 + 0x38] = R6; 36 [P0 + 0x3C] = R7; 37 38 R0 = ASTAT; 39 [P0 + 0x40] = R0; 40 41 R0 = LC0; /* Loop Counters */ 42 [P0 + 0x44] = R0; 43 R0 = LC1; 44 [P0 + 0x48] = R0; 45 46 R0 = A0.W; /* Accumulators */ 47 [P0 + 0x4C] = R0; 48 R0 = A0.X; 49 [P0 + 0x50] = R0; 50 R0 = A1.W; 51 [P0 + 0x54] = R0; 52 R0 = A1.X; 53 [P0 + 0x58] = R0; 54 55 R0 = I0; /* Index Registers */ 56 [P0 + 0x5C] = R0; 57 R0 = I1; 58 [P0 + 0x60] = R0; 59 R0 = I2; 60 [P0 + 0x64] = R0; 61 R0 = I3; 62 [P0 + 0x68] = R0; 63 64 R0 = M0; /* Modifier Registers */ 65 [P0 + 0x6C] = R0; 66 R0 = M1; 67 [P0 + 0x70] = R0; 68 R0 = M2; 69 [P0 + 0x74] = R0; 70 R0 = M3; 71 [P0 + 0x78] = R0; 72 73 R0 = L0; /* Length Registers */ 74 [P0 + 0x7c] = R0; 75 R0 = L1; 76 [P0 + 0x80] = R0; 77 R0 = L2; 78 [P0 + 0x84] = R0; 79 R0 = L3; 80 [P0 + 0x88] = R0; 81 82 R0 = B0; /* Base Registers */ 83 [P0 + 0x8C] = R0; 84 R0 = B1; 85 [P0 + 0x90] = R0; 86 R0 = B2; 87 [P0 + 0x94] = R0; 88 R0 = B3; 89 [P0 + 0x98] = R0; 90 91 R0 = RETS; 92 [P0 + 0x9C] = R0; 93 94 R0 = [P0 + 0x20]; 95 JUMP.L ___sigjmp_save; 96.size ___sigsetjmp, .-___sigsetjmp 97 98.section .note.GNU-stack,"",%progbits 99