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