1*d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*d30ea906Sjfb8856606 * Copyright(c) 2017 Cavium, Inc
32bfe3f2eSlogwang */
42bfe3f2eSlogwang
52bfe3f2eSlogwang #include <rte_common.h>
62bfe3f2eSlogwang #include <ctx.h>
72bfe3f2eSlogwang
82bfe3f2eSlogwang void
ctx_switch(struct ctx * new_ctx __rte_unused,struct ctx * curr_ctx __rte_unused)92bfe3f2eSlogwang ctx_switch(struct ctx *new_ctx __rte_unused, struct ctx *curr_ctx __rte_unused)
102bfe3f2eSlogwang {
112bfe3f2eSlogwang /* SAVE CURRENT CONTEXT */
122bfe3f2eSlogwang asm volatile (
132bfe3f2eSlogwang /* Save SP */
142bfe3f2eSlogwang "mov x3, sp\n"
152bfe3f2eSlogwang "str x3, [x1, #0]\n"
162bfe3f2eSlogwang
172bfe3f2eSlogwang /* Save FP and LR */
182bfe3f2eSlogwang "stp x29, x30, [x1, #8]\n"
192bfe3f2eSlogwang
202bfe3f2eSlogwang /* Save Callee Saved Regs x19 - x28 */
212bfe3f2eSlogwang "stp x19, x20, [x1, #24]\n"
222bfe3f2eSlogwang "stp x21, x22, [x1, #40]\n"
232bfe3f2eSlogwang "stp x23, x24, [x1, #56]\n"
242bfe3f2eSlogwang "stp x25, x26, [x1, #72]\n"
252bfe3f2eSlogwang "stp x27, x28, [x1, #88]\n"
262bfe3f2eSlogwang
272bfe3f2eSlogwang /*
282bfe3f2eSlogwang * Save bottom 64-bits of Callee Saved
292bfe3f2eSlogwang * SIMD Regs v8 - v15
302bfe3f2eSlogwang */
312bfe3f2eSlogwang "stp d8, d9, [x1, #104]\n"
322bfe3f2eSlogwang "stp d10, d11, [x1, #120]\n"
332bfe3f2eSlogwang "stp d12, d13, [x1, #136]\n"
342bfe3f2eSlogwang "stp d14, d15, [x1, #152]\n"
352bfe3f2eSlogwang );
362bfe3f2eSlogwang
372bfe3f2eSlogwang /* RESTORE NEW CONTEXT */
382bfe3f2eSlogwang asm volatile (
392bfe3f2eSlogwang /* Restore SP */
402bfe3f2eSlogwang "ldr x3, [x0, #0]\n"
412bfe3f2eSlogwang "mov sp, x3\n"
422bfe3f2eSlogwang
432bfe3f2eSlogwang /* Restore FP and LR */
442bfe3f2eSlogwang "ldp x29, x30, [x0, #8]\n"
452bfe3f2eSlogwang
462bfe3f2eSlogwang /* Restore Callee Saved Regs x19 - x28 */
472bfe3f2eSlogwang "ldp x19, x20, [x0, #24]\n"
482bfe3f2eSlogwang "ldp x21, x22, [x0, #40]\n"
492bfe3f2eSlogwang "ldp x23, x24, [x0, #56]\n"
502bfe3f2eSlogwang "ldp x25, x26, [x0, #72]\n"
512bfe3f2eSlogwang "ldp x27, x28, [x0, #88]\n"
522bfe3f2eSlogwang
532bfe3f2eSlogwang /*
542bfe3f2eSlogwang * Restore bottom 64-bits of Callee Saved
552bfe3f2eSlogwang * SIMD Regs v8 - v15
562bfe3f2eSlogwang */
572bfe3f2eSlogwang "ldp d8, d9, [x0, #104]\n"
582bfe3f2eSlogwang "ldp d10, d11, [x0, #120]\n"
592bfe3f2eSlogwang "ldp d12, d13, [x0, #136]\n"
602bfe3f2eSlogwang "ldp d14, d15, [x0, #152]\n"
612bfe3f2eSlogwang );
622bfe3f2eSlogwang }
63