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