X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Femul%2Fswitch_i386.S;h=b605c15edde69ee29af960b6f9ce9bdcf4f76fe2;hb=32d1445272120a254d77ce8d1af1f527da7a2c17;hp=6570f8e83904e03903ec80a79963eff37b34086e;hpb=a2fc2366ad564f11e705703ed1f42b7dc499a47c;p=bertos.git diff --git a/bertos/emul/switch_i386.S b/bertos/emul/switch_i386.S index 6570f8e8..b605c15e 100644 --- a/bertos/emul/switch_i386.S +++ b/bertos/emul/switch_i386.S @@ -1,55 +1,61 @@ -/*! +/** * \file * + * This file is part of BeRTOS. * - * \brief i386 context switch + * Bertos is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * As a special exception, you may use this file as part of a free software + * library without restriction. Specifically, if other files instantiate + * templates or use macros or inline functions from this file, or you compile + * this file and link it with other files to produce an executable, this + * file does not by itself cause the resulting executable to be covered by + * the GNU General Public License. This exception does not however + * invalidate any other reasons why the executable file might be covered by + * the GNU General Public License. + * + * Copyright 2004, 2008 Develer S.r.l. (http://www.develer.com/) + * Copyright 1999, 2000, 2001 Bernie Innocenti + * --> * * \version $Id$ + * \author Bernie Innocenti * - * \author Bernardo Innocenti + * \brief i386 context switch */ - - #ifdef __APPLE__ - //This workaround is necessary to compile under OS X assembler. + // This workaround is necessary to compile under OS X assembler. #define SWITCH_CONTEXT _asm_switch_context - #define SWITCH_VERSION _asm_switch_version #else #define SWITCH_CONTEXT asm_switch_context - #define SWITCH_VERSION asm_switch_version #endif -/* void asm_switch_context(void ** new_sp, void ** save_sp) */ +/* void asm_switch_context(void ** new_sp [sp+4], void ** save_sp [sp+8]) */ .globl SWITCH_CONTEXT SWITCH_CONTEXT: - pushl %eax - pushl %ebx - pushl %ecx - pushl %edx - pushl %esi - pushl %edi pushl %ebp + pushl %edi + pushl %esi + pushl %ebx movl 0x24(%esp),%ebp /* ebp = save_sp */ movl %esp,(%ebp) /* *save_sp = esp */ movl 0x20(%esp),%ebp /* ebp = new_sp */ movl (%ebp),%esp /* esp = *new_sp */ - popl %ebp - popl %edi - popl %esi - popl %edx - popl %ecx popl %ebx - popl %eax - ret - -/* int asm_switch_version(void) */ -.globl SWITCH_VERSION -SWITCH_VERSION: - mov $1,%eax + popl %esi + popl %edi + popl %ebp ret -