19bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee/* 29bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * Copyright (C) 2009 The Android Open Source Project 39bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * 49bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * Licensed under the Apache License, Version 2.0 (the "License"); 59bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * you may not use this file except in compliance with the License. 69bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * You may obtain a copy of the License at 79bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * 89bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * http://www.apache.org/licenses/LICENSE-2.0 99bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * 109bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * Unless required by applicable law or agreed to in writing, software 119bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * distributed under the License is distributed on an "AS IS" BASIS, 129bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * See the License for the specific language governing permissions and 149bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee * limitations under the License. 159bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee */ 169bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee 175d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng/* 185d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng * This file contains register alloction support and is intended to be 195d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng * included by: 205d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng * 215d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng * Codegen-$(TARGET_ARCH_VARIANT).c 225d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng * 235d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng */ 245d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng 255d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng#include "compiler/CompilerIR.h" 26bd1326d0e6b82a24ee80d50921e62152ea919151Ben Cheng#include "CalloutHelper.h" 275d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng 28fc075c2d1ae63c26f96e0c6eeb72efc898dbebbfBen Cheng#if defined(_CODEGEN_C) 295d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng/* 305d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng * loadConstant() sometimes needs to add a small imm to a pre-existing constant 315d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng */ 325d90c20bd7903d7bba966b224e576bf137bf8b4bBen Chengstatic ArmLIR *opRegImm(CompilationUnit *cUnit, OpKind op, int rDestSrc1, 335d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng int value); 345d90c20bd7903d7bba966b224e576bf137bf8b4bBen Chengstatic ArmLIR *opRegReg(CompilationUnit *cUnit, OpKind op, int rDestSrc1, 355d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng int rSrc2); 365d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng 375d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng/* Forward decalraton the portable versions due to circular dependency */ 385d90c20bd7903d7bba966b224e576bf137bf8b4bBen Chengstatic bool genArithOpFloatPortable(CompilationUnit *cUnit, MIR *mir, 395d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng RegLocation rlDest, RegLocation rlSrc1, 405d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng RegLocation rlSrc2); 415d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng 425d90c20bd7903d7bba966b224e576bf137bf8b4bBen Chengstatic bool genArithOpDoublePortable(CompilationUnit *cUnit, MIR *mir, 435d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng RegLocation rlDest, RegLocation rlSrc1, 445d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng RegLocation rlSrc2); 455d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng 465d90c20bd7903d7bba966b224e576bf137bf8b4bBen Chengstatic bool genConversionPortable(CompilationUnit *cUnit, MIR *mir); 475d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng 4801605d2b668e8e1701cfdfa302dde847b9171fc9Carl Shapiro#if defined(__ARM_ARCH_5__) 495d90c20bd7903d7bba966b224e576bf137bf8b4bBen Chengstatic void genMonitorPortable(CompilationUnit *cUnit, MIR *mir); 50fc075c2d1ae63c26f96e0c6eeb72efc898dbebbfBen Cheng#endif 515d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng 52434bae646046871c334b95bd9123a78da66c27c3Bill Buzbeestatic void genInterpSingleStep(CompilationUnit *cUnit, MIR *mir); 53434bae646046871c334b95bd9123a78da66c27c3Bill Buzbee 54fc075c2d1ae63c26f96e0c6eeb72efc898dbebbfBen Cheng#endif 55fc075c2d1ae63c26f96e0c6eeb72efc898dbebbfBen Cheng 56fc075c2d1ae63c26f96e0c6eeb72efc898dbebbfBen Cheng 579e45c0b968d63ea38353c99252d233879c2efdafjeffhao#if defined(WITH_SELF_VERIFICATION) 589e45c0b968d63ea38353c99252d233879c2efdafjeffhao/* Self Verification memory instruction decoder */ 59d862faa2ceae186da5518607505eb942d634ced9Carl Shapiroextern "C" void dvmSelfVerificationMemOpDecode(int lr, int* sp); 609e45c0b968d63ea38353c99252d233879c2efdafjeffhao#endif 619bc3df373ae6f4f7e6e97d554884d4e0dbad5494Bill Buzbee 62f6789277a9d25379bf43ffc39ef091db722dd5afbuzbeeextern void dvmCompilerSetupResourceMasks(ArmLIR *lir); 635d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng 645d90c20bd7903d7bba966b224e576bf137bf8b4bBen Chengextern ArmLIR* dvmCompilerRegCopyNoInsert(CompilationUnit *cUnit, int rDest, 655d90c20bd7903d7bba966b224e576bf137bf8b4bBen Cheng int rSrc); 66