summaryrefslogtreecommitdiff
path: root/src/compiler/codegen/CodegenFactory.cc
diff options
context:
space:
mode:
author Ian Rogers <irogers@google.com> 2012-03-21 20:40:33 -0700
committer Ian Rogers <irogers@google.com> 2012-03-21 20:41:16 -0700
commitc6f3bb87ffbb44d902c4a1f67a71bb108bd01560 (patch)
treec423db1d6e7914e57559ab5a4325094e6f1ea5c0 /src/compiler/codegen/CodegenFactory.cc
parente5b7894351ecc5ef99442eea0700c913178c95ce (diff)
Further x86 progress and image creation.
Change-Id: Idafadfc55228541536f25d2c92d40d9e0510b602
Diffstat (limited to 'src/compiler/codegen/CodegenFactory.cc')
-rw-r--r--src/compiler/codegen/CodegenFactory.cc9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/compiler/codegen/CodegenFactory.cc b/src/compiler/codegen/CodegenFactory.cc
index e1df1a5b45..1b64af2b37 100644
--- a/src/compiler/codegen/CodegenFactory.cc
+++ b/src/compiler/codegen/CodegenFactory.cc
@@ -273,14 +273,16 @@ void storeValueWide(CompilationUnit* cUnit, RegLocation rlDest,
*/
void markGCCard(CompilationUnit* cUnit, int valReg, int tgtAddrReg)
{
-#if defined(TARGET_X86)
- UNIMPLEMENTED(WARNING) << "markGCCard";
-#else
int regCardBase = oatAllocTemp(cUnit);
int regCardNo = oatAllocTemp(cUnit);
LIR* branchOver = opCmpImmBranch(cUnit, kCondEq, valReg, 0, NULL);
+#if !defined(TARGET_X86)
loadWordDisp(cUnit, rSELF, Thread::CardTableOffset().Int32Value(),
regCardBase);
+#else
+ newLIR2(cUnit, kX86Mov32RT, regCardBase,
+ Thread::CardTableOffset().Int32Value());
+#endif
opRegRegImm(cUnit, kOpLsr, regCardNo, tgtAddrReg, GC_CARD_SHIFT);
storeBaseIndexed(cUnit, regCardBase, regCardNo, regCardBase, 0,
kUnsignedByte);
@@ -288,7 +290,6 @@ void markGCCard(CompilationUnit* cUnit, int valReg, int tgtAddrReg)
branchOver->target = (LIR*)target;
oatFreeTemp(cUnit, regCardBase);
oatFreeTemp(cUnit, regCardNo);
-#endif
}
/* Utilities to load the current Method* */