710426024a
No functionality change is intended with this commit, it just consolidates the separate implementations of GC helper code to the lib/utils/ directory as a general set of helper functions useful for any port. This reduces duplication of code, and makes it easier for future ports or embedders to get the GC implementation correct. Ports should now link against gchelper_native.c and either gchelper_m0.s or gchelper_m3.s (currently only Cortex-M is supported but other architectures can follow), or use the fallback gchelper_generic.c which will work on x86/x64/ARM. The gc_helper_get_sp function from gchelper_m3.s is not really GC related and was only used by cc3200, so it has been moved to that port and renamed to cortex_m3_get_sp.
56 lines
1.8 KiB
ArmAsm
56 lines
1.8 KiB
ArmAsm
/*
|
|
* This file is part of the MicroPython project, http://micropython.org/
|
|
*
|
|
* The MIT License (MIT)
|
|
*
|
|
* Copyright (c) 2013-2014 Damien P. George
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
|
|
.syntax unified
|
|
.cpu cortex-m3
|
|
.thumb
|
|
|
|
.section .text
|
|
.align 2
|
|
|
|
.global gc_helper_get_regs_and_sp
|
|
.type gc_helper_get_regs_and_sp, %function
|
|
|
|
@ uint gc_helper_get_regs_and_sp(r0=uint regs[10])
|
|
gc_helper_get_regs_and_sp:
|
|
@ store registers into given array
|
|
str r4, [r0], #4
|
|
str r5, [r0], #4
|
|
str r6, [r0], #4
|
|
str r7, [r0], #4
|
|
str r8, [r0], #4
|
|
str r9, [r0], #4
|
|
str r10, [r0], #4
|
|
str r11, [r0], #4
|
|
str r12, [r0], #4
|
|
str r13, [r0], #4
|
|
|
|
@ return the sp
|
|
mov r0, sp
|
|
bx lr
|
|
|
|
.size gc_helper_get_regs_and_sp, .-gc_helper_get_regs_and_sp
|