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