// Copyright 2020 The Marl Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #if defined(__mips__) && _MIPS_SIM == _ABI64 #define MARL_BUILD_ASM 1 #include "osfiber_asm_mips64.h" // void marl_fiber_swap(marl_fiber_context* from, const marl_fiber_context* to) // a0: from // v0: to .text .global MARL_ASM_SYMBOL(marl_fiber_swap) .align 4 MARL_ASM_SYMBOL(marl_fiber_swap): // Save context 'from' // Store callee-preserved registers sd $s0, MARL_REG_s0($a0) sd $s1, MARL_REG_s1($a0) sd $s2, MARL_REG_s2($a0) sd $s3, MARL_REG_s3($a0) sd $s4, MARL_REG_s4($a0) sd $s5, MARL_REG_s5($a0) sd $s6, MARL_REG_s6($a0) sd $s7, MARL_REG_s7($a0) s.d $f24, MARL_REG_f24($a0) s.d $f25, MARL_REG_f25($a0) s.d $f26, MARL_REG_f26($a0) s.d $f27, MARL_REG_f27($a0) s.d $f28, MARL_REG_f28($a0) s.d $f29, MARL_REG_f29($a0) s.d $f31, MARL_REG_f30($a0) s.d $f31, MARL_REG_f31($a0) sd $gp, MARL_REG_gp($a0) sd $sp, MARL_REG_sp($a0) sd $fp, MARL_REG_fp($a0) sd $ra, MARL_REG_ra($a0) move $v0, $a1 // Function have no return, so safe to touch v0 // Recover callee-preserved registers ld $s0, MARL_REG_s0($v0) ld $s1, MARL_REG_s1($v0) ld $s2, MARL_REG_s2($v0) ld $s3, MARL_REG_s3($v0) ld $s4, MARL_REG_s4($v0) ld $s5, MARL_REG_s5($v0) ld $s6, MARL_REG_s6($v0) ld $s7, MARL_REG_s7($v0) l.d $f24, MARL_REG_f24($v0) l.d $f25, MARL_REG_f25($v0) l.d $f26, MARL_REG_f26($v0) l.d $f27, MARL_REG_f27($v0) l.d $f28, MARL_REG_f28($v0) l.d $f29, MARL_REG_f29($v0) l.d $f31, MARL_REG_f30($v0) l.d $f31, MARL_REG_f31($v0) ld $gp, MARL_REG_gp($v0) ld $sp, MARL_REG_sp($v0) ld $fp, MARL_REG_fp($v0) ld $ra, MARL_REG_ra($v0) // Recover arguments ld $a0, MARL_REG_a0($v0) ld $a1, MARL_REG_a1($v0) jr $ra #endif // defined(__mips__) && _MIPS_SIM == _ABI64