1/* longjmp for the Blackfin project 2 * 3 * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> 4 * Copyright (C) 2004 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 ___longjmp; 12.type ___longjmp,STT_FUNC; 13.align 4; 14 15___longjmp: 16 P0 = R0; 17 R0 = [P0 + 0x00]; 18 [--SP] = R0; /* Put P0 on the stack */ 19 20 P1 = [P0 + 0x04]; 21 P2 = [P0 + 0x08]; 22 P3 = [P0 + 0x0C]; 23 P4 = [P0 + 0x10]; 24 P5 = [P0 + 0x14]; 25 26 FP = [P0 + 0x18]; 27 R0 = [SP++]; /* Grab P0 from old stack */ 28 SP = [P0 + 0x1C]; /* Update Stack Pointer */ 29 [--SP] = R0; /* Put P0 on new stack */ 30 [--SP] = R1; /* Put VAL arg on new stack */ 31 32 R0 = [P0 + 0x20]; /* Data Registers */ 33 R1 = [P0 + 0x24]; 34 R2 = [P0 + 0x28]; 35 R3 = [P0 + 0x2C]; 36 R4 = [P0 + 0x30]; 37 R5 = [P0 + 0x34]; 38 R6 = [P0 + 0x38]; 39 R7 = [P0 + 0x3C]; 40 41 R0 = [P0 + 0x40]; 42 ASTAT = R0; 43 44 R0 = [P0 + 0x44]; /* Loop Counters */ 45 LC0 = R0; 46 R0 = [P0 + 0x48]; 47 LC1 = R0; 48 49 R0 = [P0 + 0x4C]; /* Accumulators */ 50 A0.W = R0; 51 R0 = [P0 + 0x50]; 52 A0.X = R0; 53 R0 = [P0 + 0x54]; 54 A1.W = R0; 55 R0 = [P0 + 0x58]; 56 A1.X = R0; 57 58 R0 = [P0 + 0x5C]; /* Index Registers */ 59 I0 = R0; 60 R0 = [P0 + 0x60]; 61 I1 = R0; 62 R0 = [P0 + 0x64]; 63 I2 = R0; 64 R0 = [P0 + 0x68]; 65 I3 = R0; 66 67 R0 = [P0 + 0x6C]; /* Modifier Registers */ 68 M0 = R0; 69 R0 = [P0 + 0x70]; 70 M1 = R0; 71 R0 = [P0 + 0x74]; 72 M2 = R0; 73 R0 = [P0 + 0x78]; 74 M3 = R0; 75 76 R0 = [P0 + 0x7C]; /* Length Registers */ 77 L0 = R0; 78 R0 = [P0 + 0x80]; 79 L1 = R0; 80 R0 = [P0 + 0x84]; 81 L2 = R0; 82 R0 = [P0 + 0x88]; 83 L3 = R0; 84 85 R0 = [P0 + 0x8C]; /* Base Registers */ 86 B0 = R0; 87 R0 = [P0 + 0x90]; 88 B1 = R0; 89 R0 = [P0 + 0x94]; 90 B2 = R0; 91 R0 = [P0 + 0x98]; 92 B3 = R0; 93 94 R0 = [P0 + 0x9C]; /* Return Address (PC) */ 95 RETS = R0; 96 97 R0 = [SP++]; 98 P0 = [SP++]; 99 100 CC = R0 == 0; 101 IF !CC JUMP .Lfinished; 102 R0 = 1; 103.Lfinished: 104 RTS; 105.size ___longjmp,.-___longjmp 106 107libc_hidden_def(__longjmp) 108 109.section .note.GNU-stack,"",%progbits 110