1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Copyright (C) 2013 The Android Open Source Project 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Licensed under the Apache License, Version 2.0 (the "License"); 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * you may not use this file except in compliance with the License. 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * You may obtain a copy of the License at 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * http://www.apache.org/licenses/LICENSE-2.0 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Unless required by applicable law or agreed to in writing, software 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * distributed under the License is distributed on an "AS IS" BASIS, 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * See the License for the specific language governing permissions and 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * limitations under the License. 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef ART_RUNTIME_ARCH_ARM_ASM_SUPPORT_ARM_S_ 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define ART_RUNTIME_ARCH_ARM_ASM_SUPPORT_ARM_S_ 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "asm_support_arm.h" 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// Define special registers. 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// Register holding suspend check count down. 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define rSUSPEND r4 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// Register holding Thread::Current(). 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define rSELF r9 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.syntax unified 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.arch armv7-a 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.thumb 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.macro ENTRY name 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .thumb_func 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .type \name, #function 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .hidden \name // Hide this as a global symbol, so we do not incur plt calls. 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .global \name 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Cache alignment for function entry */ 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .balign 16 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru\name: 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .cfi_startproc 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .fnstart 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.endm 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.macro ENTRY_NO_HIDE name 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .thumb_func 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .type \name, #function 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .global \name 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Cache alignment for function entry */ 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .balign 16 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru\name: 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .cfi_startproc 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .fnstart 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.endm 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.macro ARM_ENTRY name 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .arm 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .type \name, #function 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .hidden \name // Hide this as a global symbol, so we do not incur plt calls. 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .global \name 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Cache alignment for function entry */ 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .balign 16 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru\name: 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .cfi_startproc 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Ensure we get a sane starting CFA. */ 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .cfi_def_cfa sp,0 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .fnstart 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.endm 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.macro ARM_ENTRY_NO_HIDE name 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .arm 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .type \name, #function 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .global \name 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Cache alignment for function entry */ 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .balign 16 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru\name: 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .cfi_startproc 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Ensure we get a sane starting CFA. */ 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .cfi_def_cfa sp,0 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .fnstart 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.endm 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.macro END name 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .fnend 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .cfi_endproc 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru .size \name, .-\name 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.endm 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.macro UNIMPLEMENTED name 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ENTRY \name 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru bkpt 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru bkpt 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru END \name 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru.endm 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif // ART_RUNTIME_ARCH_X86_ASM_SUPPORT_X86_S_ 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru