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