17520ee7ff226e12e06818561b15741d2575072e3buzbee/*
27520ee7ff226e12e06818561b15741d2575072e3buzbee * This file was generated automatically by gen-template.py for 'ia32'.
37520ee7ff226e12e06818561b15741d2575072e3buzbee *
47520ee7ff226e12e06818561b15741d2575072e3buzbee * --> DO NOT EDIT <--
57520ee7ff226e12e06818561b15741d2575072e3buzbee */
67520ee7ff226e12e06818561b15741d2575072e3buzbee
77520ee7ff226e12e06818561b15741d2575072e3buzbee/* File: ia32/header.S */
87520ee7ff226e12e06818561b15741d2575072e3buzbee/*
98c9ac9ab0ab6fd75b73cb0d99005da3aa90c167cBen Cheng * Copyright (C) 2010 The Android Open Source Project
107520ee7ff226e12e06818561b15741d2575072e3buzbee *
117520ee7ff226e12e06818561b15741d2575072e3buzbee * Licensed under the Apache License, Version 2.0 (the "License");
127520ee7ff226e12e06818561b15741d2575072e3buzbee * you may not use this file except in compliance with the License.
137520ee7ff226e12e06818561b15741d2575072e3buzbee * You may obtain a copy of the License at
147520ee7ff226e12e06818561b15741d2575072e3buzbee *
157520ee7ff226e12e06818561b15741d2575072e3buzbee *      http://www.apache.org/licenses/LICENSE-2.0
167520ee7ff226e12e06818561b15741d2575072e3buzbee *
177520ee7ff226e12e06818561b15741d2575072e3buzbee * Unless required by applicable law or agreed to in writing, software
187520ee7ff226e12e06818561b15741d2575072e3buzbee * distributed under the License is distributed on an "AS IS" BASIS,
197520ee7ff226e12e06818561b15741d2575072e3buzbee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
207520ee7ff226e12e06818561b15741d2575072e3buzbee * See the License for the specific language governing permissions and
217520ee7ff226e12e06818561b15741d2575072e3buzbee * limitations under the License.
227520ee7ff226e12e06818561b15741d2575072e3buzbee */
237520ee7ff226e12e06818561b15741d2575072e3buzbee
247520ee7ff226e12e06818561b15741d2575072e3buzbee#if defined(WITH_JIT)
257520ee7ff226e12e06818561b15741d2575072e3buzbee
26dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee/* Subset of defines from mterp/x86/header.S */
279f601a917c8878204482c37aec7005054b6776fabuzbee#define rSELF (%ebp)
28dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#define rPC   %esi
29dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#define rFP   %edi
30dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee#define rINST %ebx
31dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee
327520ee7ff226e12e06818561b15741d2575072e3buzbee/*
337520ee7ff226e12e06818561b15741d2575072e3buzbee * This is a #include, not a %include, because we want the C pre-processor
347520ee7ff226e12e06818561b15741d2575072e3buzbee * to expand the macros into assembler assignment statements.
357520ee7ff226e12e06818561b15741d2575072e3buzbee */
367520ee7ff226e12e06818561b15741d2575072e3buzbee#include "../../../mterp/common/asm-constants.h"
377520ee7ff226e12e06818561b15741d2575072e3buzbee
387520ee7ff226e12e06818561b15741d2575072e3buzbee/* File: ia32/platform.S */
397520ee7ff226e12e06818561b15741d2575072e3buzbee/*
407520ee7ff226e12e06818561b15741d2575072e3buzbee * ===========================================================================
417520ee7ff226e12e06818561b15741d2575072e3buzbee *  CPU-version-specific defines and utility
427520ee7ff226e12e06818561b15741d2575072e3buzbee * ===========================================================================
437520ee7ff226e12e06818561b15741d2575072e3buzbee */
447520ee7ff226e12e06818561b15741d2575072e3buzbee
457520ee7ff226e12e06818561b15741d2575072e3buzbee
467520ee7ff226e12e06818561b15741d2575072e3buzbee
477520ee7ff226e12e06818561b15741d2575072e3buzbee
487520ee7ff226e12e06818561b15741d2575072e3buzbee    .global dvmCompilerTemplateStart
497520ee7ff226e12e06818561b15741d2575072e3buzbee    .type   dvmCompilerTemplateStart, %function
505dfcc78af479937ba8dafceefd9b1931a88dfaafArd Biesheuvel    .section .data.rel.ro
517520ee7ff226e12e06818561b15741d2575072e3buzbee
527520ee7ff226e12e06818561b15741d2575072e3buzbeedvmCompilerTemplateStart:
537520ee7ff226e12e06818561b15741d2575072e3buzbee
547520ee7ff226e12e06818561b15741d2575072e3buzbee/* ------------------------------ */
557520ee7ff226e12e06818561b15741d2575072e3buzbee    .balign 4
567520ee7ff226e12e06818561b15741d2575072e3buzbee    .global dvmCompiler_TEMPLATE_INTERPRET
577520ee7ff226e12e06818561b15741d2575072e3buzbeedvmCompiler_TEMPLATE_INTERPRET:
587520ee7ff226e12e06818561b15741d2575072e3buzbee/* File: ia32/TEMPLATE_INTERPRET.S */
597520ee7ff226e12e06818561b15741d2575072e3buzbee    /*
60dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * This handler is a bit odd - it may be called via chaining or
61dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * from static code and is expected to cause control to flow
62dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * to the interpreter.  The problem is where to find the Dalvik
63dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * PC of the next instruction.  When called via chaining, the dPC
64dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * will be located at *rp.  When called from static code, rPC is
65dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * valid and rp is a real return pointer (that should be ignored).
66dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * The Arm target deals with this by using the link register as
67dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * a flag.  If it is zero, we know we were called from static code.
68dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * If non-zero, it points to the chain cell containing dPC.
69dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * For x86, we'll infer the source by looking where rp points.
70dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * If it points to anywhere within the code cache, we'll assume
71dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     * we got here via chaining.  Otherwise, we'll assume rPC is valid.
727520ee7ff226e12e06818561b15741d2575072e3buzbee     *
737520ee7ff226e12e06818561b15741d2575072e3buzbee     * On entry:
74dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     *    (TOS)<- return pointer or pointer to dPC
757520ee7ff226e12e06818561b15741d2575072e3buzbee     */
769f601a917c8878204482c37aec7005054b6776fabuzbee
779f601a917c8878204482c37aec7005054b6776fabuzbee/*
789f601a917c8878204482c37aec7005054b6776fabuzbee * FIXME - this won't work as-is.  The cache boundaries are not
799f601a917c8878204482c37aec7005054b6776fabuzbee * set up until later.  Perhaps rething this whole thing.  Do we
809f601a917c8878204482c37aec7005054b6776fabuzbee * really need an interpret teplate?
819f601a917c8878204482c37aec7005054b6776fabuzbee */
829f601a917c8878204482c37aec7005054b6776fabuzbee
839f601a917c8878204482c37aec7005054b6776fabuzbee
849f601a917c8878204482c37aec7005054b6776fabuzbee     movl   rSELF,%ecx
85dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     movl   $.LinterpPunt,%edx
86dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     pop    %eax
879f601a917c8878204482c37aec7005054b6776fabuzbee     /*cmpl   %eax,offThread_jitCacheEnd(%ecx)*/
88dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     ja     1f
899f601a917c8878204482c37aec7005054b6776fabuzbee     /*cmpl   %eax,offThread_jitCacheStart(%ecx)*/
90dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     jb     1f
91dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     movl   %eax,rPC
92dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee1:
93dfd1bbf07d98c82a6072182f705f64a30ebf480bbuzbee     jmp    *(%edx)
947520ee7ff226e12e06818561b15741d2575072e3buzbee
957520ee7ff226e12e06818561b15741d2575072e3buzbee.LinterpPunt:
967520ee7ff226e12e06818561b15741d2575072e3buzbee    .long   dvmJitToInterpPunt
977520ee7ff226e12e06818561b15741d2575072e3buzbee
987520ee7ff226e12e06818561b15741d2575072e3buzbee    .size   dvmCompilerTemplateStart, .-dvmCompilerTemplateStart
997520ee7ff226e12e06818561b15741d2575072e3buzbee/* File: ia32/footer.S */
1007520ee7ff226e12e06818561b15741d2575072e3buzbee/*
1017520ee7ff226e12e06818561b15741d2575072e3buzbee * ===========================================================================
1027520ee7ff226e12e06818561b15741d2575072e3buzbee *  Common subroutines and data
1037520ee7ff226e12e06818561b15741d2575072e3buzbee * ===========================================================================
1047520ee7ff226e12e06818561b15741d2575072e3buzbee */
1057520ee7ff226e12e06818561b15741d2575072e3buzbee
1065dfcc78af479937ba8dafceefd9b1931a88dfaafArd Biesheuvel    .section .data.rel.ro
1077520ee7ff226e12e06818561b15741d2575072e3buzbee    .align  4
1087520ee7ff226e12e06818561b15741d2575072e3buzbee
109d585beda3690b8b5b978e3c59af224336614ba72Yanchuan Nian    .global dvmCompilerTemplateEnd
110d585beda3690b8b5b978e3c59af224336614ba72Yanchuan NiandvmCompilerTemplateEnd:
1117520ee7ff226e12e06818561b15741d2575072e3buzbee
1127520ee7ff226e12e06818561b15741d2575072e3buzbee#endif /* WITH_JIT */
1137520ee7ff226e12e06818561b15741d2575072e3buzbee
114