diff options
| author | Raghu Gandham <raghu@mips.com> | 2012-05-02 14:27:16 -0700 |
|---|---|---|
| committer | Raghu Gandham <raghu@mips.com> | 2012-05-02 14:27:16 -0700 |
| commit | a8b91c52fd8a90b784835dfe1f8898035266c4dd (patch) | |
| tree | 8a9bb58ee3b78c10cf88a3bac21b7f96d75cd1f7 /vm/compiler/codegen/mips/Codegen.h | |
| parent | a14639df65cc0aefafcddda5aae8b591204e45f9 (diff) | |
[MIPS] Dalvik fast interpreter support and JIT implementation
Change-Id: I9bb4f6875b7061d3ffaee73f204026cb8ba3ed39
Signed-off-by: Raghu Gandham <raghu@mips.com>
Signed-off-by: Chris Dearman <chris@mips.com>
Signed-off-by: Douglas Leung <douglas@mips.com>
Signed-off-by: Don Padgett <don@mips.com>
Diffstat (limited to 'vm/compiler/codegen/mips/Codegen.h')
| -rw-r--r-- | vm/compiler/codegen/mips/Codegen.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/vm/compiler/codegen/mips/Codegen.h b/vm/compiler/codegen/mips/Codegen.h new file mode 100644 index 000000000..107fa8654 --- /dev/null +++ b/vm/compiler/codegen/mips/Codegen.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * This file contains register alloction support and is intended to be + * included by: + * + * Codegen-$(TARGET_ARCH_VARIANT).c + * + */ + +#include "compiler/CompilerIR.h" +#include "CalloutHelper.h" + +#if defined(_CODEGEN_C) +/* + * loadConstant() sometimes needs to add a small imm to a pre-existing constant + */ +static MipsLIR *opRegImm(CompilationUnit *cUnit, OpKind op, int rDestSrc1, + int value); +static MipsLIR *opRegReg(CompilationUnit *cUnit, OpKind op, int rDestSrc1, + int rSrc2); + +/* Forward-declare the portable versions due to circular dependency */ +static bool genArithOpFloatPortable(CompilationUnit *cUnit, MIR *mir, + RegLocation rlDest, RegLocation rlSrc1, + RegLocation rlSrc2); + +static bool genArithOpDoublePortable(CompilationUnit *cUnit, MIR *mir, + RegLocation rlDest, RegLocation rlSrc1, + RegLocation rlSrc2); + +static bool genConversionPortable(CompilationUnit *cUnit, MIR *mir); + +static void genMonitorPortable(CompilationUnit *cUnit, MIR *mir); + +static void genInterpSingleStep(CompilationUnit *cUnit, MIR *mir); + + +#endif + +#if defined(WITH_SELF_VERIFICATION) +/* Self Verification memory instruction decoder */ +extern "C" void dvmSelfVerificationMemOpDecode(int lr, int* sp); +#endif + +/* + * Architecture-dependent register allocation routines implemented in + * Mips/Ralloc.c + */ +extern int dvmCompilerAllocTypedTempPair(CompilationUnit *cUnit, + bool fpHint, int regClass); + +extern int dvmCompilerAllocTypedTemp(CompilationUnit *cUnit, bool fpHint, + int regClass); + +extern MipsLIR* dvmCompilerRegCopyNoInsert(CompilationUnit *cUnit, int rDest, + int rSrc); + +extern MipsLIR* dvmCompilerRegCopy(CompilationUnit *cUnit, int rDest, int rSrc); + +extern void dvmCompilerRegCopyWide(CompilationUnit *cUnit, int destLo, + int destHi, int srcLo, int srcHi); + +extern void dvmCompilerSetupResourceMasks(MipsLIR *lir); + +extern void dvmCompilerFlushRegImpl(CompilationUnit *cUnit, int rBase, + int displacement, int rSrc, OpSize size); + +extern void dvmCompilerFlushRegWideImpl(CompilationUnit *cUnit, int rBase, + int displacement, int rSrcLo, + int rSrcHi); |
