1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2017 Cavium, Inc 3 */ 4 5 #include <rte_common.h> 6 #include <ctx.h> 7 8 void 9 ctx_switch(struct ctx *new_ctx __rte_unused, struct ctx *curr_ctx __rte_unused) 10 { 11 /* SAVE CURRENT CONTEXT */ 12 asm volatile ( 13 /* Save SP */ 14 "mov x3, sp\n" 15 "str x3, [x1, #0]\n" 16 17 /* Save FP and LR */ 18 "stp x29, x30, [x1, #8]\n" 19 20 /* Save Callee Saved Regs x19 - x28 */ 21 "stp x19, x20, [x1, #24]\n" 22 "stp x21, x22, [x1, #40]\n" 23 "stp x23, x24, [x1, #56]\n" 24 "stp x25, x26, [x1, #72]\n" 25 "stp x27, x28, [x1, #88]\n" 26 27 /* 28 * Save bottom 64-bits of Callee Saved 29 * SIMD Regs v8 - v15 30 */ 31 "stp d8, d9, [x1, #104]\n" 32 "stp d10, d11, [x1, #120]\n" 33 "stp d12, d13, [x1, #136]\n" 34 "stp d14, d15, [x1, #152]\n" 35 ); 36 37 /* RESTORE NEW CONTEXT */ 38 asm volatile ( 39 /* Restore SP */ 40 "ldr x3, [x0, #0]\n" 41 "mov sp, x3\n" 42 43 /* Restore FP and LR */ 44 "ldp x29, x30, [x0, #8]\n" 45 46 /* Restore Callee Saved Regs x19 - x28 */ 47 "ldp x19, x20, [x0, #24]\n" 48 "ldp x21, x22, [x0, #40]\n" 49 "ldp x23, x24, [x0, #56]\n" 50 "ldp x25, x26, [x0, #72]\n" 51 "ldp x27, x28, [x0, #88]\n" 52 53 /* 54 * Restore bottom 64-bits of Callee Saved 55 * SIMD Regs v8 - v15 56 */ 57 "ldp d8, d9, [x0, #104]\n" 58 "ldp d10, d11, [x0, #120]\n" 59 "ldp d12, d13, [x0, #136]\n" 60 "ldp d14, d15, [x0, #152]\n" 61 ); 62 } 63