diff --git a/build/Android.cpplint.mk b/build/Android.cpplint.mk
index eabaf31..adb87cb 100644
--- a/build/Android.cpplint.mk
+++ b/build/Android.cpplint.mk
@@ -15,7 +15,7 @@
 #
 
 ART_CPPLINT := art/tools/cpplint.py
-ART_CPPLINT_FILTER := --filter=-whitespace/comments,-whitespace/line_length,-build/include,-readability/function,-readability/streams,-readability/todo,-runtime/references,-runtime/sizeof,-runtime/threadsafe_fn,-runtime/printf
+ART_CPPLINT_FILTER := --filter=-whitespace/line_length,-build/include,-readability/function,-readability/streams,-readability/todo,-runtime/references,-runtime/sizeof,-runtime/threadsafe_fn,-runtime/printf
 ART_CPPLINT_SRC := $(shell find art -name *.h -o -name *$(ART_CPP_EXTENSION) | grep -v art/compiler/llvm/generated/)
 
 # "mm cpplint-art" to verify we aren't regressing
diff --git a/compiler/dex/arena_allocator.h b/compiler/dex/arena_allocator.h
index 3bd733e..e8e2c02 100644
--- a/compiler/dex/arena_allocator.h
+++ b/compiler/dex/arena_allocator.h
@@ -86,7 +86,7 @@
      explicit MemStats(const ArenaAllocator &arena) : arena_(arena) {}
   private:
     const ArenaAllocator &arena_;
-}; // MemStats
+};  // MemStats
 
 }  // namespace art
 
diff --git a/compiler/dex/compiler_enums.h b/compiler/dex/compiler_enums.h
index 88240e8..97a682f 100644
--- a/compiler/dex/compiler_enums.h
+++ b/compiler/dex/compiler_enums.h
@@ -48,7 +48,7 @@
 };
 
 enum RegLocationType {
-  kLocDalvikFrame = 0, // Normal Dalvik register
+  kLocDalvikFrame = 0,  // Normal Dalvik register
   kLocPhysReg,
   kLocCompilerTemp,
   kLocInvalid
@@ -249,20 +249,20 @@
   kX86CondC   = kX86CondB,  // carry
 
   kX86CondNb  = 0x3,    // not-below
-  kX86CondAe  = kX86CondNb, // above-equal
-  kX86CondNc  = kX86CondNb, // not-carry
+  kX86CondAe  = kX86CondNb,  // above-equal
+  kX86CondNc  = kX86CondNb,  // not-carry
 
   kX86CondZ   = 0x4,    // zero
   kX86CondEq  = kX86CondZ,  // equal
 
   kX86CondNz  = 0x5,    // not-zero
-  kX86CondNe  = kX86CondNz, // not-equal
+  kX86CondNe  = kX86CondNz,  // not-equal
 
   kX86CondBe  = 0x6,    // below-equal
-  kX86CondNa  = kX86CondBe, // not-above
+  kX86CondNa  = kX86CondBe,  // not-above
 
   kX86CondNbe = 0x7,    // not-below-equal
-  kX86CondA   = kX86CondNbe,// above
+  kX86CondA   = kX86CondNbe,  // above
 
   kX86CondS   = 0x8,    // sign
   kX86CondNs  = 0x9,    // not-sign
@@ -277,13 +277,13 @@
   kX86CondNge = kX86CondL,  // not-greater-equal
 
   kX86CondNl  = 0xd,    // not-less-than
-  kX86CondGe  = kX86CondNl, // not-greater-equal
+  kX86CondGe  = kX86CondNl,  // not-greater-equal
 
   kX86CondLe  = 0xe,    // less-than-equal
-  kX86CondNg  = kX86CondLe, // not-greater
+  kX86CondNg  = kX86CondLe,  // not-greater
 
   kX86CondNle = 0xf,    // not-less-than
-  kX86CondG   = kX86CondNle,// greater
+  kX86CondG   = kX86CondNle,  // greater
 };
 
 std::ostream& operator<<(std::ostream& os, const X86ConditionCode& kind);
@@ -349,7 +349,7 @@
   kIsIT,
   kMemLoad,
   kMemStore,
-  kPCRelFixup, // x86 FIXME: add NEEDS_FIXUP to instruction attributes.
+  kPCRelFixup,  // x86 FIXME: add NEEDS_FIXUP to instruction attributes.
   kRegDef0,
   kRegDef1,
   kRegDefA,
diff --git a/compiler/dex/dataflow_iterator.h b/compiler/dex/dataflow_iterator.h
index 847a614..da44ffd 100644
--- a/compiler/dex/dataflow_iterator.h
+++ b/compiler/dex/dataflow_iterator.h
@@ -80,7 +80,7 @@
       GrowableArray<int>* block_id_list_;
       int idx_;
       bool changed_;
-  }; // DataflowIterator
+  };  // DataflowIterator
 
   class ReachableNodesIterator : public DataflowIterator {
     public:
diff --git a/compiler/dex/dex_to_dex_compiler.cc b/compiler/dex/dex_to_dex_compiler.cc
index 28c3257..3c491ce 100644
--- a/compiler/dex/dex_to_dex_compiler.cc
+++ b/compiler/dex/dex_to_dex_compiler.cc
@@ -240,12 +240,12 @@
   // We are modifying 4 consecutive bytes.
   ScopedDexWriteAccess sdwa(GetModifiableDexFile(), inst, 4u);
   inst->SetOpcode(Instruction::NOP);
-  inst->SetVRegA_10x(0u); // keep compliant with verifier.
+  inst->SetVRegA_10x(0u);  // keep compliant with verifier.
   // Get to next instruction which is the second half of check-cast and replace
   // it by a NOP.
   inst = const_cast<Instruction*>(inst->Next());
   inst->SetOpcode(Instruction::NOP);
-  inst->SetVRegA_10x(0u); // keep compliant with verifier.
+  inst->SetVRegA_10x(0u);  // keep compliant with verifier.
   return inst;
 }
 
diff --git a/compiler/dex/frontend.cc b/compiler/dex/frontend.cc
index 113a80a..9cc4d18 100644
--- a/compiler/dex/frontend.cc
+++ b/compiler/dex/frontend.cc
@@ -72,37 +72,37 @@
 }
 
 /* Default optimizer/debug setting for the compiler. */
-static uint32_t kCompilerOptimizerDisableFlags = 0 | // Disable specific optimizations
+static uint32_t kCompilerOptimizerDisableFlags = 0 |  // Disable specific optimizations
   (1 << kLoadStoreElimination) |
-  //(1 << kLoadHoisting) |
-  //(1 << kSuppressLoads) |
-  //(1 << kNullCheckElimination) |
-  //(1 << kPromoteRegs) |
-  //(1 << kTrackLiveTemps) |
-  //(1 << kSafeOptimizations) |
-  //(1 << kBBOpt) |
-  //(1 << kMatch) |
-  //(1 << kPromoteCompilerTemps) |
+  // (1 << kLoadHoisting) |
+  // (1 << kSuppressLoads) |
+  // (1 << kNullCheckElimination) |
+  // (1 << kPromoteRegs) |
+  // (1 << kTrackLiveTemps) |
+  // (1 << kSafeOptimizations) |
+  // (1 << kBBOpt) |
+  // (1 << kMatch) |
+  // (1 << kPromoteCompilerTemps) |
   0;
 
 static uint32_t kCompilerDebugFlags = 0 |     // Enable debug/testing modes
-  //(1 << kDebugDisplayMissingTargets) |
-  //(1 << kDebugVerbose) |
-  //(1 << kDebugDumpCFG) |
-  //(1 << kDebugSlowFieldPath) |
-  //(1 << kDebugSlowInvokePath) |
-  //(1 << kDebugSlowStringPath) |
-  //(1 << kDebugSlowestFieldPath) |
-  //(1 << kDebugSlowestStringPath) |
-  //(1 << kDebugExerciseResolveMethod) |
-  //(1 << kDebugVerifyDataflow) |
-  //(1 << kDebugShowMemoryUsage) |
-  //(1 << kDebugShowNops) |
-  //(1 << kDebugCountOpcodes) |
-  //(1 << kDebugDumpCheckStats) |
-  //(1 << kDebugDumpBitcodeFile) |
-  //(1 << kDebugVerifyBitcode) |
-  //(1 << kDebugShowSummaryMemoryUsage) |
+  // (1 << kDebugDisplayMissingTargets) |
+  // (1 << kDebugVerbose) |
+  // (1 << kDebugDumpCFG) |
+  // (1 << kDebugSlowFieldPath) |
+  // (1 << kDebugSlowInvokePath) |
+  // (1 << kDebugSlowStringPath) |
+  // (1 << kDebugSlowestFieldPath) |
+  // (1 << kDebugSlowestStringPath) |
+  // (1 << kDebugExerciseResolveMethod) |
+  // (1 << kDebugVerifyDataflow) |
+  // (1 << kDebugShowMemoryUsage) |
+  // (1 << kDebugShowNops) |
+  // (1 << kDebugCountOpcodes) |
+  // (1 << kDebugDumpCheckStats) |
+  // (1 << kDebugDumpBitcodeFile) |
+  // (1 << kDebugVerifyBitcode) |
+  // (1 << kDebugShowSummaryMemoryUsage) |
   0;
 
 static CompiledMethod* CompileMethod(CompilerDriver& compiler,
@@ -277,7 +277,7 @@
 #if defined(ART_USE_PORTABLE_COMPILER)
                        , llvm_compilation_unit
 #endif
-                       ); // NOLINT(whitespace/parens)
+                       );  // NOLINT(whitespace/parens)
 }
 
 }  // namespace art
diff --git a/compiler/dex/frontend.h b/compiler/dex/frontend.h
index a863389..5c68ab4 100644
--- a/compiler/dex/frontend.h
+++ b/compiler/dex/frontend.h
@@ -102,7 +102,7 @@
 
   private:
     UniquePtr< ::llvm::LLVMContext> llvm_context_;
-    ::llvm::Module* llvm_module_; // Managed by context_.
+    ::llvm::Module* llvm_module_;  // Managed by context_.
     UniquePtr<art::llvm::IntrinsicHelper> intrinsic_helper_;
     UniquePtr<art::llvm::IRBuilder> ir_builder_;
 };
diff --git a/compiler/dex/local_value_numbering.h b/compiler/dex/local_value_numbering.h
index e3fd7ad..33ca8f1 100644
--- a/compiler/dex/local_value_numbering.h
+++ b/compiler/dex/local_value_numbering.h
@@ -137,6 +137,6 @@
   std::set<uint16_t> null_checked_;
 };
 
-} // namespace art
+}  // namespace art
 
 #endif  // ART_COMPILER_DEX_LOCAL_VALUE_NUMBERING_H_
diff --git a/compiler/dex/mir_graph.cc b/compiler/dex/mir_graph.cc
index 264604c..6b010ed 100644
--- a/compiler/dex/mir_graph.cc
+++ b/compiler/dex/mir_graph.cc
@@ -972,23 +972,23 @@
       }
     }
     switch (dalvik_format) {
-      case Instruction::k11n: // Add one immediate from vB
+      case Instruction::k11n:  // Add one immediate from vB
       case Instruction::k21s:
       case Instruction::k31i:
       case Instruction::k21h:
         str.append(StringPrintf(", #%d", insn.vB));
         break;
-      case Instruction::k51l: // Add one wide immediate
+      case Instruction::k51l:  // Add one wide immediate
         str.append(StringPrintf(", #%lld", insn.vB_wide));
         break;
-      case Instruction::k21c: // One register, one string/type/method index
+      case Instruction::k21c:  // One register, one string/type/method index
       case Instruction::k31c:
         str.append(StringPrintf(", index #%d", insn.vB));
         break;
-      case Instruction::k22c: // Two registers, one string/type/method index
+      case Instruction::k22c:  // Two registers, one string/type/method index
         str.append(StringPrintf(", index #%d", insn.vC));
         break;
-      case Instruction::k22s: // Add one immediate from vC
+      case Instruction::k22s:  // Add one immediate from vC
       case Instruction::k22b:
         str.append(StringPrintf(", #%d", insn.vC));
         break;
@@ -1154,4 +1154,4 @@
   return bb;
 }
 
-} // namespace art
+}  // namespace art
diff --git a/compiler/dex/mir_graph.h b/compiler/dex/mir_graph.h
index 342d2a2..e9ec949 100644
--- a/compiler/dex/mir_graph.h
+++ b/compiler/dex/mir_graph.h
@@ -273,7 +273,7 @@
   unsigned fp:1;        // Floating point?
   unsigned core:1;      // Non-floating point?
   unsigned ref:1;       // Something GC cares about.
-  unsigned high_word:1; // High word of pair?
+  unsigned high_word:1;  // High word of pair?
   unsigned home:1;      // Does this represent the home location?
   uint8_t low_reg;      // First physical register.
   uint8_t high_reg;     // 2nd physical register (if wide).
@@ -650,7 +650,7 @@
   BasicBlock* cur_block_;
   int num_blocks_;
   const DexFile::CodeItem* current_code_item_;
-  SafeMap<unsigned int, BasicBlock*> block_map_; // FindBlock lookup cache.
+  SafeMap<unsigned int, BasicBlock*> block_map_;  // FindBlock lookup cache.
   std::vector<DexCompilationUnit*> m_units_;     // List of methods included in this graph
   typedef std::pair<int, int> MIRLocation;       // Insert point, (m_unit_ index, offset)
   std::vector<MIRLocation> method_stack_;        // Include stack
@@ -659,7 +659,7 @@
   int def_count_;                                // Used to estimate size of ssa name storage.
   int* opcode_count_;                            // Dex opcode coverage stats.
   int num_ssa_regs_;                             // Number of names following SSA transformation.
-  std::vector<BasicBlock*> extended_basic_blocks_; // Heads of block "traces".
+  std::vector<BasicBlock*> extended_basic_blocks_;  // Heads of block "traces".
   int method_sreg_;
   unsigned int attributes_;
   Checkstats* checkstats_;
diff --git a/compiler/dex/mir_optimization.cc b/compiler/dex/mir_optimization.cc
index d79b26e..a6314f4 100644
--- a/compiler/dex/mir_optimization.cc
+++ b/compiler/dex/mir_optimization.cc
@@ -845,7 +845,7 @@
       bb = NextDominatedBlock(bb);
     }
   }
-  return false; // Not iterative - return value will be ignored
+  return false;  // Not iterative - return value will be ignored
 }
 
 
diff --git a/compiler/dex/portable/mir_to_gbc.cc b/compiler/dex/portable/mir_to_gbc.cc
index 6fc01bd..7831cf6 100644
--- a/compiler/dex/portable/mir_to_gbc.cc
+++ b/compiler/dex/portable/mir_to_gbc.cc
@@ -1648,7 +1648,7 @@
   if (bb->block_type == kEntryBlock) {
     SetMethodInfo();
 
-    { // Allocate shadowframe.
+    {  // Allocate shadowframe.
       art::llvm::IntrinsicHelper::IntrinsicId id =
               art::llvm::IntrinsicHelper::AllocaShadowFrame;
       ::llvm::Function* func = intrinsic_helper_->GetIntrinsicFunction(id);
@@ -1656,7 +1656,7 @@
       irb_->CreateCall(func, entries);
     }
 
-    { // Store arguments to vregs.
+    {  // Store arguments to vregs.
       uint16_t arg_reg = cu_->num_regs;
 
       ::llvm::Function::arg_iterator arg_iter(func_->arg_begin());
@@ -1666,7 +1666,7 @@
       uint32_t shorty_size = strlen(shorty);
       CHECK_GE(shorty_size, 1u);
 
-      ++arg_iter; // skip method object
+      ++arg_iter;  // skip method object
 
       if ((cu_->access_flags & kAccStatic) == 0) {
         SetVregOnValue(arg_iter, arg_reg);
diff --git a/compiler/dex/quick/arm/arm_lir.h b/compiler/dex/quick/arm/arm_lir.h
index 93fee05..2f54190 100644
--- a/compiler/dex/quick/arm/arm_lir.h
+++ b/compiler/dex/quick/arm/arm_lir.h
@@ -239,7 +239,7 @@
  */
 enum ArmOpcode {
   kArmFirst = 0,
-  kArm16BitData = kArmFirst, // DATA   [0] rd[15..0].
+  kArm16BitData = kArmFirst,  // DATA   [0] rd[15..0].
   kThumbAdcRR,       // adc   [0100000101] rm[5..3] rd[2..0].
   kThumbAddRRI3,     // add(1)  [0001110] imm_3[8..6] rn[5..3] rd[2..0]*/
   kThumbAddRI8,      // add(2)  [00110] rd[10..8] imm_8[7..0].
@@ -332,12 +332,12 @@
   kThumb2VcvtDF,     // vcvt.F32.F64 vd, vm [1110111010110111] vd[15..12] [10111100] vm[3..0].
   kThumb2Vsqrts,     // vsqrt.f32 vd, vm [1110111010110001] vd[15..12] [10101100] vm[3..0].
   kThumb2Vsqrtd,     // vsqrt.f64 vd, vm [1110111010110001] vd[15..12] [10111100] vm[3..0].
-  kThumb2MovImmShift,// mov(T2) rd, #<const> [11110] i [00001001111] imm3 rd[11..8] imm8.
+  kThumb2MovImmShift,  // mov(T2) rd, #<const> [11110] i [00001001111] imm3 rd[11..8] imm8.
   kThumb2MovImm16,   // mov(T3) rd, #<const> [11110] i [0010100] imm4 [0] imm3 rd[11..8] imm8.
   kThumb2StrRRI12,   // str(Imm,T3) rd,[rn,#imm12] [111110001100] rn[19..16] rt[15..12] imm12[11..0].
   kThumb2LdrRRI12,   // str(Imm,T3) rd,[rn,#imm12] [111110001100] rn[19..16] rt[15..12] imm12[11..0].
-  kThumb2StrRRI8Predec, // str(Imm,T4) rd,[rn,#-imm8] [111110000100] rn[19..16] rt[15..12] [1100] imm[7..0]*/
-  kThumb2LdrRRI8Predec, // ldr(Imm,T4) rd,[rn,#-imm8] [111110000101] rn[19..16] rt[15..12] [1100] imm[7..0]*/
+  kThumb2StrRRI8Predec,  // str(Imm,T4) rd,[rn,#-imm8] [111110000100] rn[19..16] rt[15..12] [1100] imm[7..0]*/
+  kThumb2LdrRRI8Predec,  // ldr(Imm,T4) rd,[rn,#-imm8] [111110000101] rn[19..16] rt[15..12] [1100] imm[7..0]*/
   kThumb2Cbnz,       // cbnz rd,<label> [101110] i [1] imm5[7..3] rn[2..0].
   kThumb2Cbz,        // cbn rd,<label> [101100] i [1] imm5[7..3] rn[2..0].
   kThumb2AddRRI12,   // add rd, rn, #imm12 [11110] i [100000] rn[19..16] [0] imm3[14..12] rd[11..8] imm8[7..0].
@@ -364,9 +364,9 @@
   kThumb2StrhRRR,    // str rt,[rn,rm,LSL #imm] [111110000010] rn[19-16] rt[15-12] [000000] imm[5-4] rm[3-0].
   kThumb2StrbRRR,    // str rt,[rn,rm,LSL #imm] [111110000000] rn[19-16] rt[15-12] [000000] imm[5-4] rm[3-0].
   kThumb2LdrhRRI12,  // ldrh rt,[rn,#imm12] [111110001011] rt[15..12] rn[19..16] imm12[11..0].
-  kThumb2LdrshRRI12, // ldrsh rt,[rn,#imm12] [111110011011] rt[15..12] rn[19..16] imm12[11..0].
+  kThumb2LdrshRRI12,  // ldrsh rt,[rn,#imm12] [111110011011] rt[15..12] rn[19..16] imm12[11..0].
   kThumb2LdrbRRI12,  // ldrb rt,[rn,#imm12] [111110001001] rt[15..12] rn[19..16] imm12[11..0].
-  kThumb2LdrsbRRI12, // ldrsb rt,[rn,#imm12] [111110011001] rt[15..12] rn[19..16] imm12[11..0].
+  kThumb2LdrsbRRI12,  // ldrsb rt,[rn,#imm12] [111110011001] rt[15..12] rn[19..16] imm12[11..0].
   kThumb2StrhRRI12,  // strh rt,[rn,#imm12] [111110001010] rt[15..12] rn[19..16] imm12[11..0].
   kThumb2StrbRRI12,  // strb rt,[rn,#imm12] [111110001000] rt[15..12] rn[19..16] imm12[11..0].
   kThumb2Pop,        // pop   [1110100010111101] list[15-0]*/
@@ -403,7 +403,7 @@
   kThumb2Fmstat,     // fmstat [11101110111100011111101000010000].
   kThumb2Vcmpd,      // vcmp [111011101] D [11011] rd[15-12] [1011] E [1] M [0] rm[3-0].
   kThumb2Vcmps,      // vcmp [111011101] D [11010] rd[15-12] [1011] E [1] M [0] rm[3-0].
-  kThumb2LdrPcRel12, // ldr rd,[pc,#imm12] [1111100011011111] rt[15-12] imm12[11-0].
+  kThumb2LdrPcRel12,  // ldr rd,[pc,#imm12] [1111100011011111] rt[15-12] imm12[11-0].
   kThumb2BCond,      // b<c> [1110] S cond[25-22] imm6[21-16] [10] J1 [0] J2 imm11[10..0].
   kThumb2Vmovd_RR,   // vmov [111011101] D [110000] vd[15-12 [101101] M [0] vm[3-0].
   kThumb2Vmovs_RR,   // vmov [111011101] D [110000] vd[15-12 [101001] M [0] vm[3-0].
@@ -415,8 +415,8 @@
   kThumb2Vabss,      // vabs.f32 [111011101] D [110000] rd[15-12] [1010110] M [0] vm[3-0].
   kThumb2Vnegd,      // vneg.f64 [111011101] D [110000] rd[15-12] [1011110] M [0] vm[3-0].
   kThumb2Vnegs,      // vneg.f32 [111011101] D [110000] rd[15-12] [1010110] M [0] vm[3-0].
-  kThumb2Vmovs_IMM8, // vmov.f32 [111011101] D [11] imm4h[19-16] vd[15-12] [10100000] imm4l[3-0].
-  kThumb2Vmovd_IMM8, // vmov.f64 [111011101] D [11] imm4h[19-16] vd[15-12] [10110000] imm4l[3-0].
+  kThumb2Vmovs_IMM8,  // vmov.f32 [111011101] D [11] imm4h[19-16] vd[15-12] [10100000] imm4l[3-0].
+  kThumb2Vmovd_IMM8,  // vmov.f64 [111011101] D [11] imm4h[19-16] vd[15-12] [10110000] imm4l[3-0].
   kThumb2Mla,        // mla [111110110000] rn[19-16] ra[15-12] rd[7-4] [0000] rm[3-0].
   kThumb2Umull,      // umull [111110111010] rn[19-16], rdlo[15-12] rdhi[11-8] [0000] rm[3-0].
   kThumb2Ldrex,      // ldrex [111010000101] rn[19-16] rt[11-8] [1111] imm8[7-0].
@@ -425,7 +425,7 @@
   kThumb2Bfi,        // bfi [111100110110] rn[19-16] [0] imm3[14-12] rd[11-8] imm2[7-6] [0] msb[4-0].
   kThumb2Bfc,        // bfc [11110011011011110] [0] imm3[14-12] rd[11-8] imm2[7-6] [0] msb[4-0].
   kThumb2Dmb,        // dmb [1111001110111111100011110101] option[3-0].
-  kThumb2LdrPcReln12,// ldr rd,[pc,-#imm12] [1111100011011111] rt[15-12] imm12[11-0].
+  kThumb2LdrPcReln12,  // ldr rd,[pc,-#imm12] [1111100011011111] rt[15-12] imm12[11-0].
   kThumb2Stm,        // stm <list> [111010010000] rn[19-16] 000 rl[12-0].
   kThumbUndefined,   // undefined [11011110xxxxxxxx].
   kThumb2VPopCS,     // vpop <list of callee save fp singles (s16+).
@@ -436,8 +436,8 @@
   kThumb2MovImm16H,  // similar to kThumb2MovImm16, but target high hw.
   kThumb2AddPCR,     // Thumb2 2-operand add with hard-coded PC target.
   kThumb2Adr,        // Special purpose encoding of ADR for switch tables.
-  kThumb2MovImm16LST,// Special purpose version for switch table use.
-  kThumb2MovImm16HST,// Special purpose version for switch table use.
+  kThumb2MovImm16LST,  // Special purpose version for switch table use.
+  kThumb2MovImm16HST,  // Special purpose version for switch table use.
   kThumb2LdmiaWB,    // ldmia  [111010011001[ rn[19..16] mask[15..0].
   kThumb2SubsRRI12,  // setflags encoding.
   kThumb2OrrRRRs,    // orrx [111010100101] rn[19..16] [0000] rd[11..8] [0000] rm[3..0].
@@ -445,7 +445,7 @@
   kThumb2Pop1,       // t3 encoding of pop.
   kThumb2RsubRRR,    // rsb [111010111101] rn[19..16] [0000] rd[11..8] [0000] rm[3..0].
   kThumb2Smull,      // smull [111110111000] rn[19-16], rdlo[15-12] rdhi[11-8] [0000] rm[3-0].
-  kThumb2LdrdPcRel8, // ldrd rt, rt2, pc +-/1024.
+  kThumb2LdrdPcRel8,  // ldrd rt, rt2, pc +-/1024.
   kThumb2LdrdI8,     // ldrd rt, rt2, [rn +-/1024].
   kThumb2StrdI8,     // strd rt, rt2, [rn +-/1024].
   kArmLast,
@@ -485,7 +485,7 @@
   struct {
     ArmEncodingKind kind;
     int end;   // end for kFmtBitBlt, 1-bit slice end for FP regs.
-    int start; // start for kFmtBitBlt, 4-bit slice end for FP regs.
+    int start;  // start for kFmtBitBlt, 4-bit slice end for FP regs.
   } field_loc[4];
   ArmOpcode opcode;
   uint64_t flags;
diff --git a/compiler/dex/quick/arm/call_arm.cc b/compiler/dex/quick/arm/call_arm.cc
index 1416c61..64ebb6a 100644
--- a/compiler/dex/quick/arm/call_arm.cc
+++ b/compiler/dex/quick/arm/call_arm.cc
@@ -117,7 +117,7 @@
 }
 
 /* Used for the "verbose" listing */
-//TODO:  move to common code
+// TODO:  move to common code
 void ArmMir2Lir::GenPrintLabel(MIR* mir) {
   /* Mark the beginning of a Dalvik instruction for line tracking */
   char* inst_str = cu_->verbose ?
@@ -475,7 +475,7 @@
   GenNullCheck(rl_src.s_reg_low, r0, opt_flags);
   LoadWordDisp(rARM_SELF, Thread::ThinLockIdOffset().Int32Value(), r2);
   NewLIR3(kThumb2Ldrex, r1, r0,
-          mirror::Object::MonitorOffset().Int32Value() >> 2); // Get object->lock
+          mirror::Object::MonitorOffset().Int32Value() >> 2);  // Get object->lock
   // Align owner
   OpRegImm(kOpLsl, r2, LW_LOCK_OWNER_SHIFT);
   // Is lock unheld on lock or held by us (==thread_id) on unlock?
@@ -507,7 +507,7 @@
   LoadValueDirectFixed(rl_src, r0);  // Get obj
   LockCallTemps();  // Prepare for explicit register usage
   GenNullCheck(rl_src.s_reg_low, r0, opt_flags);
-  LoadWordDisp(r0, mirror::Object::MonitorOffset().Int32Value(), r1); // Get lock
+  LoadWordDisp(r0, mirror::Object::MonitorOffset().Int32Value(), r1);  // Get lock
   LoadWordDisp(rARM_SELF, Thread::ThinLockIdOffset().Int32Value(), r2);
   // Is lock unheld on lock or held by us (==thread_id) on unlock?
   OpRegRegImm(kOpAnd, r3, r1,
diff --git a/compiler/dex/quick/arm/fp_arm.cc b/compiler/dex/quick/arm/fp_arm.cc
index 8f73f0c..1bb08c4 100644
--- a/compiler/dex/quick/arm/fp_arm.cc
+++ b/compiler/dex/quick/arm/fp_arm.cc
@@ -273,7 +273,7 @@
 
   OpIT((default_result == -1) ? kCondGt : kCondMi, "");
   NewLIR2(kThumb2MovImmShift, rl_result.low_reg,
-          ModifiedImmediate(-default_result)); // Must not alter ccodes
+          ModifiedImmediate(-default_result));  // Must not alter ccodes
   GenBarrier();
 
   OpIT(kCondEq, "");
diff --git a/compiler/dex/quick/arm/int_arm.cc b/compiler/dex/quick/arm/int_arm.cc
index 15d361e..e1a77da 100644
--- a/compiler/dex/quick/arm/int_arm.cc
+++ b/compiler/dex/quick/arm/int_arm.cc
@@ -49,7 +49,7 @@
   int cond_bit = code & 1;
   int alt_bit = cond_bit ^ 1;
 
-  //Note: case fallthroughs intentional
+  // Note: case fallthroughs intentional
   switch (strlen(guide)) {
     case 3:
       mask1 = (guide[2] == 'T') ? cond_bit : alt_bit;
@@ -107,7 +107,7 @@
 
   target1 = NewLIR0(kPseudoTargetLabel);
 
-  RegLocation rl_temp = LocCReturn(); // Just using as template, will change
+  RegLocation rl_temp = LocCReturn();  // Just using as template, will change
   rl_temp.low_reg = t_reg;
   StoreValue(rl_dest, rl_temp);
   FreeTemp(t_reg);
@@ -207,13 +207,13 @@
       OpRegRegImm(kOpRsub, rl_result.low_reg, rl_src.low_reg, 1);
       OpIT(kCondCc, "");
       LoadConstant(rl_result.low_reg, 0);
-      GenBarrier(); // Add a scheduling barrier to keep the IT shadow intact
+      GenBarrier();  // Add a scheduling barrier to keep the IT shadow intact
     } else if (InexpensiveConstantInt(true_val) && InexpensiveConstantInt(false_val)) {
       OpRegImm(kOpCmp, rl_src.low_reg, 0);
       OpIT(kCondEq, "E");
       LoadConstant(rl_result.low_reg, true_val);
       LoadConstant(rl_result.low_reg, false_val);
-      GenBarrier(); // Add a scheduling barrier to keep the IT shadow intact
+      GenBarrier();  // Add a scheduling barrier to keep the IT shadow intact
     } else {
       // Unlikely case - could be tuned.
       int t_reg1 = AllocTemp();
@@ -224,7 +224,7 @@
       OpIT(kCondEq, "E");
       OpRegCopy(rl_result.low_reg, t_reg1);
       OpRegCopy(rl_result.low_reg, t_reg2);
-      GenBarrier(); // Add a scheduling barrier to keep the IT shadow intact
+      GenBarrier();  // Add a scheduling barrier to keep the IT shadow intact
     }
   } else {
     // MOVE case
@@ -239,7 +239,7 @@
     l1->flags.is_nop = false;  // Make sure this instruction isn't optimized away
     LIR* l2 = OpRegCopy(rl_result.low_reg, rl_false.low_reg);
     l2->flags.is_nop = false;  // Make sure this instruction isn't optimized away
-    GenBarrier(); // Add a scheduling barrier to keep the IT shadow intact
+    GenBarrier();  // Add a scheduling barrier to keep the IT shadow intact
   }
   StoreValue(rl_dest, rl_result);
 }
@@ -716,7 +716,7 @@
       }
     }
     FreeTemp(tmp1);
-    rl_result = GetReturnWide(false); // Just using as a template.
+    rl_result = GetReturnWide(false);  // Just using as a template.
     rl_result.low_reg = res_lo;
     rl_result.high_reg = res_hi;
     StoreValueWide(rl_dest, rl_result);
@@ -883,7 +883,7 @@
   int reg_len = INVALID_REG;
   if (needs_range_check) {
     reg_len = AllocTemp();
-    //NOTE: max live temps(4) here.
+    // NOTE: max live temps(4) here.
     /* Get len */
     LoadWordDisp(rl_array.low_reg, len_offset, reg_len);
   }
diff --git a/compiler/dex/quick/arm/target_arm.cc b/compiler/dex/quick/arm/target_arm.cc
index 5296f30..6f37798 100644
--- a/compiler/dex/quick/arm/target_arm.cc
+++ b/compiler/dex/quick/arm/target_arm.cc
@@ -553,7 +553,7 @@
   // Keep special registers from being allocated
   for (int i = 0; i < num_reserved; i++) {
     if (NO_SUSPEND && (ReservedRegs[i] == rARM_SUSPEND)) {
-      //To measure cost of suspend check
+      // To measure cost of suspend check
       continue;
     }
     MarkInUse(ReservedRegs[i]);
diff --git a/compiler/dex/quick/arm/utility_arm.cc b/compiler/dex/quick/arm/utility_arm.cc
index 1ea0a64..afc8a66 100644
--- a/compiler/dex/quick/arm/utility_arm.cc
+++ b/compiler/dex/quick/arm/utility_arm.cc
@@ -507,7 +507,7 @@
       alt_opcode = kThumb2EorRRR;
       break;
     case kOpMul:
-      //TUNING: power of 2, shift & add
+      // TUNING: power of 2, shift & add
       mod_imm = -1;
       alt_opcode = kThumb2MulRRR;
       break;
@@ -662,7 +662,7 @@
   }
 
   switch (size) {
-    case kDouble: // fall-through
+    case kDouble:  // fall-through
     case kSingle:
       reg_ptr = AllocTemp();
       if (scale) {
@@ -726,7 +726,7 @@
   }
 
   switch (size) {
-    case kDouble: // fall-through
+    case kDouble:  // fall-through
     case kSingle:
       reg_ptr = AllocTemp();
       if (scale) {
diff --git a/compiler/dex/quick/codegen_util.cc b/compiler/dex/quick/codegen_util.cc
index 9e9b39e..c9780fa 100644
--- a/compiler/dex/quick/codegen_util.cc
+++ b/compiler/dex/quick/codegen_util.cc
@@ -1063,4 +1063,4 @@
 }
 
 
-} // namespace art
+}  // namespace art
diff --git a/compiler/dex/quick/gen_common.cc b/compiler/dex/quick/gen_common.cc
index bc49b70..40db2c6 100644
--- a/compiler/dex/quick/gen_common.cc
+++ b/compiler/dex/quick/gen_common.cc
@@ -547,7 +547,7 @@
       case kThrowNullPointer:
         func_offset = ENTRYPOINT_OFFSET(pThrowNullPointerFromCode);
         break;
-      case kThrowConstantArrayBounds: // v1 is length reg (for Arm/Mips), v2 constant index
+      case kThrowConstantArrayBounds:  // v1 is length reg (for Arm/Mips), v2 constant index
         // v1 holds the constant array index.  Mips/Arm uses v2 for length, x86 reloads.
         if (target_x86) {
           OpRegMem(kOpMov, TargetReg(kArg1), v1, mirror::Array::LengthOffset().Int32Value());
@@ -792,7 +792,7 @@
       *cu_->dex_file, string_idx) || SLOW_STRING_PATH) {
     // slow path, resolve string if not in dex cache
     FlushAllRegs();
-    LockCallTemps(); // Using explicit registers
+    LockCallTemps();  // Using explicit registers
     LoadCurrMethodDirect(TargetReg(kArg2));
     LoadWordDisp(TargetReg(kArg2),
                  mirror::AbstractMethod::DexCacheStringsOffset().Int32Value(), TargetReg(kArg0));
@@ -951,7 +951,7 @@
       // Not resolved
       // Call out to helper, which will return resolved type in kRet0
       CallRuntimeHelperImm(ENTRYPOINT_OFFSET(pInitializeTypeFromCode), type_idx, true);
-      OpRegCopy(TargetReg(kArg2), TargetReg(kRet0)); // Align usage with fast path
+      OpRegCopy(TargetReg(kArg2), TargetReg(kRet0));  // Align usage with fast path
       LoadValueDirectFixed(rl_src, TargetReg(kArg0));  /* reload Ref */
       // Rejoin code paths
       LIR* hop_target = NewLIR0(kPseudoTargetLabel);
@@ -1090,7 +1090,7 @@
       // InitializeTypeFromCode(idx, method)
       CallRuntimeHelperImmReg(ENTRYPOINT_OFFSET(pInitializeTypeFromCode), type_idx, TargetReg(kArg1),
                               true);
-      OpRegCopy(class_reg, TargetReg(kRet0)); // Align usage with fast path
+      OpRegCopy(class_reg, TargetReg(kRet0));  // Align usage with fast path
       // Rejoin code paths
       LIR* hop_target = NewLIR0(kPseudoTargetLabel);
       hop_branch->target = hop_target;
@@ -1167,7 +1167,7 @@
 
 void Mir2Lir::GenShiftOpLong(Instruction::Code opcode, RegLocation rl_dest,
                              RegLocation rl_src1, RegLocation rl_shift) {
-  int func_offset = -1; // Make gcc happy
+  int func_offset = -1;  // Make gcc happy
 
   switch (opcode) {
     case Instruction::SHL_LONG:
diff --git a/compiler/dex/quick/gen_invoke.cc b/compiler/dex/quick/gen_invoke.cc
index 13a59bf..cae1319 100644
--- a/compiler/dex/quick/gen_invoke.cc
+++ b/compiler/dex/quick/gen_invoke.cc
@@ -428,22 +428,22 @@
       cg->LoadValueDirectFixed(rl_arg, cg->TargetReg(kArg1));
       break;
     }
-    case 1: // Is "this" null? [use kArg1]
+    case 1:  // Is "this" null? [use kArg1]
       cg->GenNullCheck(info->args[0].s_reg_low, cg->TargetReg(kArg1), info->opt_flags);
       // get this->klass_ [use kArg1, set kInvokeTgt]
       cg->LoadWordDisp(cg->TargetReg(kArg1), mirror::Object::ClassOffset().Int32Value(),
                        cg->TargetReg(kInvokeTgt));
       break;
-    case 2: // Get this->klass_->vtable [usr kInvokeTgt, set kInvokeTgt]
+    case 2:  // Get this->klass_->vtable [usr kInvokeTgt, set kInvokeTgt]
       cg->LoadWordDisp(cg->TargetReg(kInvokeTgt), mirror::Class::VTableOffset().Int32Value(),
                        cg->TargetReg(kInvokeTgt));
       break;
-    case 3: // Get target method [use kInvokeTgt, set kArg0]
+    case 3:  // Get target method [use kInvokeTgt, set kArg0]
       cg->LoadWordDisp(cg->TargetReg(kInvokeTgt), (method_idx * 4) +
                        mirror::Array::DataOffset(sizeof(mirror::Object*)).Int32Value(),
                        cg->TargetReg(kArg0));
       break;
-    case 4: // Get the compiled code address [uses kArg0, sets kInvokeTgt]
+    case 4:  // Get the compiled code address [uses kArg0, sets kInvokeTgt]
       if (cu->instruction_set != kX86) {
         cg->LoadWordDisp(cg->TargetReg(kArg0),
                          mirror::AbstractMethod::GetEntryPointFromCompiledCodeOffset().Int32Value(),
@@ -649,7 +649,7 @@
   DCHECK_LE(info->num_arg_words, 5);
   if (info->num_arg_words > 3) {
     int32_t next_use = 3;
-    //Detect special case of wide arg spanning arg3/arg4
+    // Detect special case of wide arg spanning arg3/arg4
     RegLocation rl_use0 = info->args[0];
     RegLocation rl_use1 = info->args[1];
     RegLocation rl_use2 = info->args[2];
@@ -789,7 +789,7 @@
                                direct_code, direct_method, type);
       OpRegRegImm(kOpAdd, TargetReg(kArg3), TargetReg(kSp), start_offset);
       LIR* ld = OpVldm(TargetReg(kArg3), regs_left);
-      //TUNING: loosen barrier
+      // TUNING: loosen barrier
       ld->def_mask = ENCODE_ALL;
       SetMemRefType(ld, true /* is_load */, kDalvikReg);
       call_state = next_call_insn(cu_, info, call_state, target_method, vtable_idx,
@@ -1086,7 +1086,7 @@
   int r_tgt = (cu_->instruction_set != kX86) ?
       LoadHelper(ENTRYPOINT_OFFSET(pStringCompareTo)) : 0;
   GenNullCheck(rl_this.s_reg_low, reg_this, info->opt_flags);
-  //TUNING: check if rl_cmp.s_reg_low is already null checked
+  // TUNING: check if rl_cmp.s_reg_low is already null checked
   LIR* launch_pad = RawLIR(0, kPseudoIntrinsicRetry, reinterpret_cast<uintptr_t>(info));
   intrinsic_launchpads_.Insert(launch_pad);
   OpCmpImmBranch(kCondEq, reg_cmp, 0, launch_pad);
diff --git a/compiler/dex/quick/mips/call_mips.cc b/compiler/dex/quick/mips/call_mips.cc
index db57643..8b375ea 100644
--- a/compiler/dex/quick/mips/call_mips.cc
+++ b/compiler/dex/quick/mips/call_mips.cc
@@ -259,7 +259,7 @@
 
   // And go...
   ClobberCalleeSave();
-  LIR* call_inst = OpReg(kOpBlx, r_tgt); // ( array*, fill_data* )
+  LIR* call_inst = OpReg(kOpBlx, r_tgt);  // ( array*, fill_data* )
   MarkSafepointPC(call_inst);
 }
 
diff --git a/compiler/dex/quick/mips/fp_mips.cc b/compiler/dex/quick/mips/fp_mips.cc
index 2e744a2..6cd9acc 100644
--- a/compiler/dex/quick/mips/fp_mips.cc
+++ b/compiler/dex/quick/mips/fp_mips.cc
@@ -174,7 +174,7 @@
 void MipsMir2Lir::GenCmpFP(Instruction::Code opcode, RegLocation rl_dest,
                            RegLocation rl_src1, RegLocation rl_src2) {
   bool wide = true;
-  int offset = -1; // Make gcc happy.
+  int offset = -1;  // Make gcc happy.
 
   switch (opcode) {
     case Instruction::CMPL_FLOAT:
@@ -237,4 +237,4 @@
   return false;
 }
 
-} //  namespace art
+}  // namespace art
diff --git a/compiler/dex/quick/mips/int_mips.cc b/compiler/dex/quick/mips/int_mips.cc
index 03a58cc..ea7da60 100644
--- a/compiler/dex/quick/mips/int_mips.cc
+++ b/compiler/dex/quick/mips/int_mips.cc
@@ -145,7 +145,7 @@
     case kCondGe: opc = kMipsBgez; break;
     case kCondGt: opc = kMipsBgtz; break;
     case kCondLe: opc = kMipsBlez; break;
-    //case KCondMi:
+    // case KCondMi:
     case kCondLt: opc = kMipsBltz; break;
     case kCondNe: opc = kMipsBnez; break;
     default:
@@ -513,7 +513,7 @@
   int reg_len = INVALID_REG;
   if (needs_range_check) {
     reg_len = AllocTemp();
-    //NOTE: max live temps(4) here.
+    // NOTE: max live temps(4) here.
     /* Get len */
     LoadWordDisp(rl_array.low_reg, len_offset, reg_len);
   }
@@ -521,7 +521,7 @@
   OpRegImm(kOpAdd, reg_ptr, data_offset);
   /* at this point, reg_ptr points to array, 2 live temps */
   if ((size == kLong) || (size == kDouble)) {
-    //TUNING: specific wide routine that can handle fp regs
+    // TUNING: specific wide routine that can handle fp regs
     if (scale) {
       int r_new_index = AllocTemp();
       OpRegRegImm(kOpLsl, r_new_index, rl_index.low_reg, scale);
diff --git a/compiler/dex/quick/mips/mips_lir.h b/compiler/dex/quick/mips/mips_lir.h
index c3709b7..278fcef 100644
--- a/compiler/dex/quick/mips/mips_lir.h
+++ b/compiler/dex/quick/mips/mips_lir.h
@@ -155,7 +155,7 @@
   kMipsGPReg0   = 0,
   kMipsRegSP    = 29,
   kMipsRegLR    = 31,
-  kMipsFPReg0   = 32, // only 16 fp regs supported currently.
+  kMipsFPReg0   = 32,  // only 16 fp regs supported currently.
   kMipsFPRegEnd   = 48,
   kMipsRegHI    = kMipsFPRegEnd,
   kMipsRegLO,
@@ -248,7 +248,7 @@
   r_DF5 = r_F10 + MIPS_FP_DOUBLE,
   r_DF6 = r_F12 + MIPS_FP_DOUBLE,
   r_DF7 = r_F14 + MIPS_FP_DOUBLE,
-#if 0 // TODO: expand resource mask to enable use of all MIPS fp registers.
+#if 0  // TODO: expand resource mask to enable use of all MIPS fp registers.
   r_DF8 = r_F16 + MIPS_FP_DOUBLE,
   r_DF9 = r_F18 + MIPS_FP_DOUBLE,
   r_DF10 = r_F20 + MIPS_FP_DOUBLE,
@@ -305,8 +305,8 @@
  */
 enum MipsOpCode {
   kMipsFirst = 0,
-  kMips32BitData = kMipsFirst, // data [31..0].
-  kMipsAddiu, // addiu t,s,imm16 [001001] s[25..21] t[20..16] imm16[15..0].
+  kMips32BitData = kMipsFirst,  // data [31..0].
+  kMipsAddiu,  // addiu t,s,imm16 [001001] s[25..21] t[20..16] imm16[15..0].
   kMipsAddu,  // add d,s,t [000000] s[25..21] t[20..16] d[15..11] [00000100001].
   kMipsAnd,   // and d,s,t [000000] s[25..21] t[20..16] d[15..11] [00000100100].
   kMipsAndi,  // andi t,s,imm16 [001100] s[25..21] t[20..16] imm16[15..0].
@@ -366,31 +366,31 @@
   kMipsSw,    // sw t,o(b) [101011] b[25..21] t[20..16] o[15..0].
   kMipsXor,   // xor d,s,t [000000] s[25..21] t[20..16] d[15..11] [00000100110].
   kMipsXori,  // xori t,s,imm16 [001110] s[25..21] t[20..16] imm16[15..0].
-  kMipsFadds, // add.s d,s,t [01000110000] t[20..16] s[15..11] d[10..6] [000000].
-  kMipsFsubs, // sub.s d,s,t [01000110000] t[20..16] s[15..11] d[10..6] [000001].
-  kMipsFmuls, // mul.s d,s,t [01000110000] t[20..16] s[15..11] d[10..6] [000010].
-  kMipsFdivs, // div.s d,s,t [01000110000] t[20..16] s[15..11] d[10..6] [000011].
-  kMipsFaddd, // add.d d,s,t [01000110001] t[20..16] s[15..11] d[10..6] [000000].
-  kMipsFsubd, // sub.d d,s,t [01000110001] t[20..16] s[15..11] d[10..6] [000001].
-  kMipsFmuld, // mul.d d,s,t [01000110001] t[20..16] s[15..11] d[10..6] [000010].
-  kMipsFdivd, // div.d d,s,t [01000110001] t[20..16] s[15..11] d[10..6] [000011].
-  kMipsFcvtsd,// cvt.s.d d,s [01000110001] [00000] s[15..11] d[10..6] [100000].
-  kMipsFcvtsw,// cvt.s.w d,s [01000110100] [00000] s[15..11] d[10..6] [100000].
-  kMipsFcvtds,// cvt.d.s d,s [01000110000] [00000] s[15..11] d[10..6] [100001].
-  kMipsFcvtdw,// cvt.d.w d,s [01000110100] [00000] s[15..11] d[10..6] [100001].
-  kMipsFcvtws,// cvt.w.d d,s [01000110000] [00000] s[15..11] d[10..6] [100100].
-  kMipsFcvtwd,// cvt.w.d d,s [01000110001] [00000] s[15..11] d[10..6] [100100].
-  kMipsFmovs, // mov.s d,s [01000110000] [00000] s[15..11] d[10..6] [000110].
-  kMipsFmovd, // mov.d d,s [01000110001] [00000] s[15..11] d[10..6] [000110].
-  kMipsFlwc1, // lwc1 t,o(b) [110001] b[25..21] t[20..16] o[15..0].
-  kMipsFldc1, // ldc1 t,o(b) [110101] b[25..21] t[20..16] o[15..0].
-  kMipsFswc1, // swc1 t,o(b) [111001] b[25..21] t[20..16] o[15..0].
-  kMipsFsdc1, // sdc1 t,o(b) [111101] b[25..21] t[20..16] o[15..0].
+  kMipsFadds,  // add.s d,s,t [01000110000] t[20..16] s[15..11] d[10..6] [000000].
+  kMipsFsubs,  // sub.s d,s,t [01000110000] t[20..16] s[15..11] d[10..6] [000001].
+  kMipsFmuls,  // mul.s d,s,t [01000110000] t[20..16] s[15..11] d[10..6] [000010].
+  kMipsFdivs,  // div.s d,s,t [01000110000] t[20..16] s[15..11] d[10..6] [000011].
+  kMipsFaddd,  // add.d d,s,t [01000110001] t[20..16] s[15..11] d[10..6] [000000].
+  kMipsFsubd,  // sub.d d,s,t [01000110001] t[20..16] s[15..11] d[10..6] [000001].
+  kMipsFmuld,  // mul.d d,s,t [01000110001] t[20..16] s[15..11] d[10..6] [000010].
+  kMipsFdivd,  // div.d d,s,t [01000110001] t[20..16] s[15..11] d[10..6] [000011].
+  kMipsFcvtsd,  // cvt.s.d d,s [01000110001] [00000] s[15..11] d[10..6] [100000].
+  kMipsFcvtsw,  // cvt.s.w d,s [01000110100] [00000] s[15..11] d[10..6] [100000].
+  kMipsFcvtds,  // cvt.d.s d,s [01000110000] [00000] s[15..11] d[10..6] [100001].
+  kMipsFcvtdw,  // cvt.d.w d,s [01000110100] [00000] s[15..11] d[10..6] [100001].
+  kMipsFcvtws,  // cvt.w.d d,s [01000110000] [00000] s[15..11] d[10..6] [100100].
+  kMipsFcvtwd,  // cvt.w.d d,s [01000110001] [00000] s[15..11] d[10..6] [100100].
+  kMipsFmovs,  // mov.s d,s [01000110000] [00000] s[15..11] d[10..6] [000110].
+  kMipsFmovd,  // mov.d d,s [01000110001] [00000] s[15..11] d[10..6] [000110].
+  kMipsFlwc1,  // lwc1 t,o(b) [110001] b[25..21] t[20..16] o[15..0].
+  kMipsFldc1,  // ldc1 t,o(b) [110101] b[25..21] t[20..16] o[15..0].
+  kMipsFswc1,  // swc1 t,o(b) [111001] b[25..21] t[20..16] o[15..0].
+  kMipsFsdc1,  // sdc1 t,o(b) [111101] b[25..21] t[20..16] o[15..0].
   kMipsMfc1,  // mfc1 t,s [01000100000] t[20..16] s[15..11] [00000000000].
   kMipsMtc1,  // mtc1 t,s [01000100100] t[20..16] s[15..11] [00000000000].
-  kMipsDelta, // Psuedo for ori t, s, <label>-<label>.
-  kMipsDeltaHi, // Pseudo for lui t, high16(<label>-<label>).
-  kMipsDeltaLo, // Pseudo for ori t, s, low16(<label>-<label>).
+  kMipsDelta,  // Psuedo for ori t, s, <label>-<label>.
+  kMipsDeltaHi,  // Pseudo for lui t, high16(<label>-<label>).
+  kMipsDeltaLo,  // Pseudo for ori t, s, low16(<label>-<label>).
   kMipsCurrPC,  // jal to .+8 to materialize pc.
   kMipsSync,    // sync kind [000000] [0000000000000000] s[10..6] [001111].
   kMipsUndefined,  // undefined [011001xxxxxxxxxxxxxxxx].
@@ -412,7 +412,7 @@
   struct {
     MipsEncodingKind kind;
     int end;   // end for kFmtBitBlt, 1-bit slice end for FP regs.
-    int start; // start for kFmtBitBlt, 4-bit slice end for FP regs.
+    int start;  // start for kFmtBitBlt, 4-bit slice end for FP regs.
   } field_loc[4];
   MipsOpCode opcode;
   uint64_t flags;
@@ -425,7 +425,7 @@
 
 #define IS_UIMM16(v) ((0 <= (v)) && ((v) <= 65535))
 #define IS_SIMM16(v) ((-32768 <= (v)) && ((v) <= 32766))
-#define IS_SIMM16_2WORD(v) ((-32764 <= (v)) && ((v) <= 32763)) // 2 offsets must fit.
+#define IS_SIMM16_2WORD(v) ((-32764 <= (v)) && ((v) <= 32763))  // 2 offsets must fit.
 
 }  // namespace art
 
diff --git a/compiler/dex/quick/mips/target_mips.cc b/compiler/dex/quick/mips/target_mips.cc
index 21ba69c..0a17fb1 100644
--- a/compiler/dex/quick/mips/target_mips.cc
+++ b/compiler/dex/quick/mips/target_mips.cc
@@ -477,7 +477,7 @@
   // Keep special registers from being allocated
   for (int i = 0; i < num_reserved; i++) {
     if (NO_SUSPEND && (ReservedRegs[i] == rMIPS_SUSPEND)) {
-      //To measure cost of suspend check
+      // To measure cost of suspend check
       continue;
     }
     MarkInUse(ReservedRegs[i]);
@@ -572,4 +572,4 @@
   return MipsMir2Lir::EncodingMap[opcode].fmt;
 }
 
-} // namespace art
+}  // namespace art
diff --git a/compiler/dex/quick/mips/utility_mips.cc b/compiler/dex/quick/mips/utility_mips.cc
index 79f6f16..68b26f1 100644
--- a/compiler/dex/quick/mips/utility_mips.cc
+++ b/compiler/dex/quick/mips/utility_mips.cc
@@ -63,7 +63,7 @@
 }
 
 bool MipsMir2Lir::InexpensiveConstantDouble(int64_t value) {
-  return false; // TUNING
+  return false;  // TUNING
 }
 
 /*
diff --git a/compiler/dex/quick/mir_to_lir.h b/compiler/dex/quick/mir_to_lir.h
index 4774456..a34e929 100644
--- a/compiler/dex/quick/mir_to_lir.h
+++ b/compiler/dex/quick/mir_to_lir.h
@@ -157,7 +157,7 @@
 #define ENCODE_ALL              (~0ULL)
 #define ENCODE_MEM              (ENCODE_DALVIK_REG | ENCODE_LITERAL | \
                                  ENCODE_HEAP_REF | ENCODE_MUST_NOT_ALIAS)
-//TODO: replace these macros
+// TODO: replace these macros
 #define SLOW_FIELD_PATH (cu_->enable_debug & (1 << kDebugSlowFieldPath))
 #define SLOW_INVOKE_PATH (cu_->enable_debug & (1 << kDebugSlowInvokePath))
 #define SLOW_STRING_PATH (cu_->enable_debug & (1 << kDebugSlowStringPath))
@@ -726,7 +726,7 @@
     GrowableArray<LIR*> throw_launchpads_;
     GrowableArray<LIR*> suspend_launchpads_;
     GrowableArray<LIR*> intrinsic_launchpads_;
-    SafeMap<unsigned int, LIR*> boundary_map_; // boundary lookup cache.
+    SafeMap<unsigned int, LIR*> boundary_map_;  // boundary lookup cache.
     /*
      * Holds mapping from native PC to dex PC for safepoints where we may deoptimize.
      * Native PC is on the return address of the safepointed operation.  Dex PC is for
diff --git a/compiler/dex/quick/ralloc_util.cc b/compiler/dex/quick/ralloc_util.cc
index 4542f8f..d59c986 100644
--- a/compiler/dex/quick/ralloc_util.cc
+++ b/compiler/dex/quick/ralloc_util.cc
@@ -198,7 +198,7 @@
  * s_reg<=sX[even] & (s_reg+1)<= sX+1.
  */
 int Mir2Lir::AllocPreservedDouble(int s_reg) {
-  int res = -1; // Assume failure
+  int res = -1;  // Assume failure
   int v_reg = mir_graph_->SRegToVReg(s_reg);
   int p_map_idx = SRegToPMap(s_reg);
   if (promotion_map_[p_map_idx+1].fp_location == kLocPhysReg) {
@@ -303,7 +303,7 @@
   return -1;  // No register available
 }
 
-//REDO: too many assumptions.
+// REDO: too many assumptions.
 int Mir2Lir::AllocTempDouble() {
   RegisterInfo* p = reg_pool_->FPRegs;
   int num_regs = reg_pool_->num_fp_regs;
@@ -629,7 +629,7 @@
 }
 
 
-//TUNING: rewrite all of this reg stuff.  Probably use an attribute table
+// TUNING: rewrite all of this reg stuff.  Probably use an attribute table
 bool Mir2Lir::RegClassMatches(int reg_class, int reg) {
   if (reg_class == kAnyReg) {
     return true;
@@ -917,7 +917,7 @@
     RegLocation loc = mir_graph_->reg_location_[i];
     RefCounts* counts = loc.fp ? fp_counts : core_counts;
     int p_map_idx = SRegToPMap(loc.s_reg_low);
-    //Don't count easily regenerated immediates
+    // Don't count easily regenerated immediates
     if (loc.fp || !IsInexpensiveConstant(loc)) {
       counts[p_map_idx].count += mir_graph_->GetUseCount(i);
     }
@@ -1152,7 +1152,7 @@
 }
 
 bool Mir2Lir::oat_live_out(int s_reg) {
-  //For now.
+  // For now.
   return true;
 }
 
diff --git a/compiler/dex/quick/x86/assemble_x86.cc b/compiler/dex/quick/x86/assemble_x86.cc
index d864115..e883432 100644
--- a/compiler/dex/quick/x86/assemble_x86.cc
+++ b/compiler/dex/quick/x86/assemble_x86.cc
@@ -474,7 +474,7 @@
         return ComputeSize(entry, lir->operands[1], 0x12345678, true);
       } else {
         DCHECK(entry->opcode == kX86PcRelAdr);
-        return 5; // opcode with reg + 4 byte immediate
+        return 5;  // opcode with reg + 4 byte immediate
       }
     case kMacro:
       DCHECK_EQ(lir->opcode, static_cast<int>(kX86StartOfMethod));
@@ -1342,7 +1342,7 @@
       case kShiftRegImm:  // lir operands - 0: reg, 1: immediate
         EmitShiftRegImm(entry, lir->operands[0], lir->operands[1]);
         break;
-      case kShiftRegCl: // lir operands - 0: reg, 1: cl
+      case kShiftRegCl:  // lir operands - 0: reg, 1: cl
         EmitShiftRegCl(entry, lir->operands[0], lir->operands[1]);
         break;
       case kRegCond:  // lir operands - 0: reg, 1: condition
diff --git a/compiler/dex/quick/x86/call_x86.cc b/compiler/dex/quick/x86/call_x86.cc
index 1aeb39a..d530a1c 100644
--- a/compiler/dex/quick/x86/call_x86.cc
+++ b/compiler/dex/quick/x86/call_x86.cc
@@ -87,7 +87,7 @@
   rl_src = LoadValue(rl_src, kCoreReg);
   int start_of_method_reg = AllocTemp();
   // Materialize a pointer to the switch table
-  //NewLIR0(kX86Bkpt);
+  // NewLIR0(kX86Bkpt);
   NewLIR1(kX86StartOfMethod, start_of_method_reg);
   int low_key = s4FromSwitchData(&table[2]);
   int keyReg;
diff --git a/compiler/dex/quick/x86/fp_x86.cc b/compiler/dex/quick/x86/fp_x86.cc
index f2ecf6c..cc6f374 100644
--- a/compiler/dex/quick/x86/fp_x86.cc
+++ b/compiler/dex/quick/x86/fp_x86.cc
@@ -373,4 +373,4 @@
 
 
 
-} //  namespace art
+}  // namespace art
diff --git a/compiler/dex/quick/x86/target_x86.cc b/compiler/dex/quick/x86/target_x86.cc
index 5b64a6b..2c9b3c8 100644
--- a/compiler/dex/quick/x86/target_x86.cc
+++ b/compiler/dex/quick/x86/target_x86.cc
@@ -23,7 +23,7 @@
 
 namespace art {
 
-//FIXME: restore "static" when usage uncovered
+// FIXME: restore "static" when usage uncovered
 /*static*/ int core_regs[] = {
   rAX, rCX, rDX, rBX, rX86_SP, rBP, rSI, rDI
 #ifdef TARGET_REX_SUPPORT
@@ -541,4 +541,4 @@
   return X86Mir2Lir::EncodingMap[opcode].fmt;
 }
 
-} // namespace art
+}  // namespace art
diff --git a/compiler/dex/quick/x86/utility_x86.cc b/compiler/dex/quick/x86/utility_x86.cc
index 75367a3..e15995f 100644
--- a/compiler/dex/quick/x86/utility_x86.cc
+++ b/compiler/dex/quick/x86/utility_x86.cc
@@ -61,7 +61,7 @@
 }
 
 bool X86Mir2Lir::InexpensiveConstantDouble(int64_t value) {
-  return false; // TUNING
+  return false;  // TUNING
 }
 
 /*
@@ -135,7 +135,7 @@
     case kOpAdd: opcode = byte_imm ? kX86Add32RI8 : kX86Add32RI; break;
     case kOpOr:  opcode = byte_imm ? kX86Or32RI8  : kX86Or32RI;  break;
     case kOpAdc: opcode = byte_imm ? kX86Adc32RI8 : kX86Adc32RI; break;
-    //case kOpSbb: opcode = kX86Sbb32RI; break;
+    // case kOpSbb: opcode = kX86Sbb32RI; break;
     case kOpAnd: opcode = byte_imm ? kX86And32RI8 : kX86And32RI; break;
     case kOpSub: opcode = byte_imm ? kX86Sub32RI8 : kX86Sub32RI; break;
     case kOpXor: opcode = byte_imm ? kX86Xor32RI8 : kX86Xor32RI; break;
@@ -221,7 +221,7 @@
 LIR* X86Mir2Lir::OpRegRegReg(OpKind op, int r_dest, int r_src1,
                  int r_src2) {
   if (r_dest != r_src1 && r_dest != r_src2) {
-    if (op == kOpAdd) { // lea special case, except can't encode rbp as base
+    if (op == kOpAdd) {  // lea special case, except can't encode rbp as base
       if (r_src1 == r_src2) {
         OpRegCopy(r_dest, r_src1);
         return OpRegImm(kOpLsl, r_dest, 1);
@@ -279,11 +279,11 @@
     }
   }
   if (r_dest != r_src) {
-    if (false && op == kOpLsl && value >= 0 && value <= 3) { // lea shift special case
+    if (false && op == kOpLsl && value >= 0 && value <= 3) {  // lea shift special case
       // TODO: fix bug in LEA encoding when disp == 0
       return NewLIR5(kX86Lea32RA, r_dest,  r5sib_no_base /* base */,
                      r_src /* index */, value /* scale */, 0 /* disp */);
-    } else if (op == kOpAdd) { // lea add special case
+    } else if (op == kOpAdd) {  // lea add special case
       return NewLIR5(kX86Lea32RA, r_dest, r_src /* base */,
                      r4sib_no_index /* index */, 0 /* scale */, value /* disp */);
     }
diff --git a/compiler/dex/quick/x86/x86_lir.h b/compiler/dex/quick/x86/x86_lir.h
index 73e562e..643a3d5 100644
--- a/compiler/dex/quick/x86/x86_lir.h
+++ b/compiler/dex/quick/x86/x86_lir.h
@@ -219,7 +219,7 @@
  */
 enum X86OpCode {
   kX86First = 0,
-  kX8632BitData = kX86First, // data [31..0].
+  kX8632BitData = kX86First,  // data [31..0].
   kX86Bkpt,
   kX86Nop,
   // Define groups of binary operations
@@ -322,12 +322,12 @@
   Binary0fOpCode(kX86Movss),
   kX86MovssMR,
   kX86MovssAR,
-  Binary0fOpCode(kX86Cvtsi2sd), // int to double
-  Binary0fOpCode(kX86Cvtsi2ss), // int to float
-  Binary0fOpCode(kX86Cvttsd2si),// truncating double to int
-  Binary0fOpCode(kX86Cvttss2si),// truncating float to int
-  Binary0fOpCode(kX86Cvtsd2si), // rounding double to int
-  Binary0fOpCode(kX86Cvtss2si), // rounding float to int
+  Binary0fOpCode(kX86Cvtsi2sd),  // int to double
+  Binary0fOpCode(kX86Cvtsi2ss),  // int to float
+  Binary0fOpCode(kX86Cvttsd2si),  // truncating double to int
+  Binary0fOpCode(kX86Cvttss2si),  // truncating float to int
+  Binary0fOpCode(kX86Cvtsd2si),  // rounding double to int
+  Binary0fOpCode(kX86Cvtss2si),  // rounding float to int
   Binary0fOpCode(kX86Ucomisd),  // unordered double compare
   Binary0fOpCode(kX86Ucomiss),  // unordered float compare
   Binary0fOpCode(kX86Comisd),   // double compare
@@ -338,8 +338,8 @@
   Binary0fOpCode(kX86Addss),    // float add
   Binary0fOpCode(kX86Mulsd),    // double multiply
   Binary0fOpCode(kX86Mulss),    // float multiply
-  Binary0fOpCode(kX86Cvtsd2ss), // double to float
-  Binary0fOpCode(kX86Cvtss2sd), // float to double
+  Binary0fOpCode(kX86Cvtsd2ss),  // double to float
+  Binary0fOpCode(kX86Cvtss2sd),  // float to double
   Binary0fOpCode(kX86Subsd),    // double subtract
   Binary0fOpCode(kX86Subss),    // float subtract
   Binary0fOpCode(kX86Divsd),    // double divide
@@ -347,13 +347,13 @@
   kX86PsrlqRI,                  // right shift of floating point registers
   kX86PsllqRI,                  // left shift of floating point registers
   Binary0fOpCode(kX86Movdxr),   // move into xmm from gpr
-  kX86MovdrxRR, kX86MovdrxMR, kX86MovdrxAR,// move into reg from xmm
-  kX86Set8R, kX86Set8M, kX86Set8A,// set byte depending on condition operand
+  kX86MovdrxRR, kX86MovdrxMR, kX86MovdrxAR,  // move into reg from xmm
+  kX86Set8R, kX86Set8M, kX86Set8A,  // set byte depending on condition operand
   kX86Mfence,                   // memory barrier
   Binary0fOpCode(kX86Imul16),   // 16bit multiply
   Binary0fOpCode(kX86Imul32),   // 32bit multiply
-  kX86CmpxchgRR, kX86CmpxchgMR, kX86CmpxchgAR,// compare and exchange
-  kX86LockCmpxchgRR, kX86LockCmpxchgMR, kX86LockCmpxchgAR,// locked compare and exchange
+  kX86CmpxchgRR, kX86CmpxchgMR, kX86CmpxchgAR,  // compare and exchange
+  kX86LockCmpxchgRR, kX86LockCmpxchgMR, kX86LockCmpxchgAR,  // locked compare and exchange
   Binary0fOpCode(kX86Movzx8),   // zero-extend 8-bit value
   Binary0fOpCode(kX86Movzx16),  // zero-extend 16-bit value
   Binary0fOpCode(kX86Movsx8),   // sign-extend 8-bit value
@@ -383,9 +383,9 @@
   kNullary,                                // Opcode that takes no arguments.
   kReg, kMem, kArray,                      // R, M and A instruction kinds.
   kMemReg, kArrayReg, kThreadReg,          // MR, AR and TR instruction kinds.
-  kRegReg, kRegMem, kRegArray, kRegThread, // RR, RM, RA and RT instruction kinds.
+  kRegReg, kRegMem, kRegArray, kRegThread,  // RR, RM, RA and RT instruction kinds.
   kRegRegStore,                            // RR following the store modrm reg-reg encoding rather than the load.
-  kRegImm, kMemImm, kArrayImm, kThreadImm, // RI, MI, AI and TI instruction kinds.
+  kRegImm, kMemImm, kArrayImm, kThreadImm,  // RI, MI, AI and TI instruction kinds.
   kRegRegImm, kRegMemImm, kRegArrayImm,    // RRI, RMI and RAI instruction kinds.
   kMovRegImm,                              // Shorter form move RI.
   kShiftRegImm, kShiftMemImm, kShiftArrayImm,  // Shift opcode with immediate.
@@ -407,13 +407,13 @@
   uint8_t prefix1;       // non-zero => a prefix byte
   uint8_t prefix2;       // non-zero => a second prefix byte
   uint8_t opcode;        // 1 byte opcode
-  uint8_t extra_opcode1; // possible extra opcode byte
-  uint8_t extra_opcode2; // possible second extra opcode byte
+  uint8_t extra_opcode1;  // possible extra opcode byte
+  uint8_t extra_opcode2;  // possible second extra opcode byte
   // 3bit opcode that gets encoded in the register bits of the modrm byte, use determined by the
   // encoding kind
   uint8_t modrm_opcode;
   uint8_t ax_opcode;  // non-zero => shorter encoding for AX as a destination
-  uint8_t immediate_bytes; // number of bytes of immediate
+  uint8_t immediate_bytes;  // number of bytes of immediate
   } skeleton;
   const char *name;
   const char* fmt;
diff --git a/compiler/dex/ssa_transformation.cc b/compiler/dex/ssa_transformation.cc
index 7739e29..18d8e93 100644
--- a/compiler/dex/ssa_transformation.cc
+++ b/compiler/dex/ssa_transformation.cc
@@ -241,7 +241,7 @@
   /* Calculate DF_up */
   ArenaBitVector::Iterator bv_iterator(bb->i_dominated);
   while (true) {
-    //TUNING: hot call to BitVectorIteratorNext
+    // TUNING: hot call to BitVectorIteratorNext
     int dominated_idx = bv_iterator.Next();
     if (dominated_idx == -1) {
       break;
@@ -249,7 +249,7 @@
     BasicBlock* dominated_bb = GetBasicBlock(dominated_idx);
     ArenaBitVector::Iterator df_iterator(dominated_bb->dom_frontier);
     while (true) {
-      //TUNING: hot call to BitVectorIteratorNext
+      // TUNING: hot call to BitVectorIteratorNext
       int df_up_idx = df_iterator.Next();
       if (df_up_idx == -1) {
         break;
@@ -530,7 +530,7 @@
         BasicBlock* def_bb = GetBasicBlock(idx);
 
         /* Merge the dominance frontier to tmp_blocks */
-        //TUNING: hot call to Union().
+        // TUNING: hot call to Union().
         if (def_bb->dom_frontier != NULL) {
           tmp_blocks->Union(def_bb->dom_frontier);
         }
@@ -568,7 +568,7 @@
       phi->dalvikInsn.opcode = static_cast<Instruction::Code>(kMirOpPhi);
       phi->dalvikInsn.vA = dalvik_reg;
       phi->offset = phi_bb->start_offset;
-      phi->m_unit_index = 0; // Arbitrarily assign all Phi nodes to outermost method.
+      phi->m_unit_index = 0;  // Arbitrarily assign all Phi nodes to outermost method.
       PrependMIR(phi_bb, phi);
     }
   }
diff --git a/compiler/dex/vreg_analysis.cc b/compiler/dex/vreg_analysis.cc
index b50fe71..5ee6753 100644
--- a/compiler/dex/vreg_analysis.cc
+++ b/compiler/dex/vreg_analysis.cc
@@ -333,7 +333,7 @@
 static const char* storage_name[] = {" Frame ", "PhysReg", " Spill "};
 
 void MIRGraph::DumpRegLocTable(RegLocation* table, int count) {
-  //FIXME: Quick-specific.  Move to Quick (and make a generic version for MIRGraph?
+  // FIXME: Quick-specific.  Move to Quick (and make a generic version for MIRGraph?
   Mir2Lir* cg = static_cast<Mir2Lir*>(cu_->cg.get());
   if (cg != NULL) {
     for (int i = 0; i < count; i++) {
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc
index 8ce0aa9..49aba4d 100644
--- a/compiler/driver/compiler_driver.cc
+++ b/compiler/driver/compiler_driver.cc
@@ -1629,416 +1629,416 @@
 }
 
 static const char* class_initializer_black_list[] = {
-  "Landroid/app/ActivityThread;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/bluetooth/BluetoothAudioGateway;", // Calls android.bluetooth.BluetoothAudioGateway.classInitNative().
-  "Landroid/bluetooth/HeadsetBase;", // Calls android.bluetooth.HeadsetBase.classInitNative().
-  "Landroid/content/res/CompatibilityInfo;", // Requires android.util.DisplayMetrics -..-> android.os.SystemProperties.native_get_int.
-  "Landroid/content/res/CompatibilityInfo$1;", // Requires android.util.DisplayMetrics -..-> android.os.SystemProperties.native_get_int.
-  "Landroid/content/UriMatcher;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/database/CursorWindow;", // Requires android.util.DisplayMetrics -..-> android.os.SystemProperties.native_get_int.
-  "Landroid/database/sqlite/SQLiteConnection;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/database/sqlite/SQLiteConnection$Operation;", // Requires SimpleDateFormat -> java.util.Locale.
-  "Landroid/database/sqlite/SQLiteDatabaseConfiguration;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/database/sqlite/SQLiteDebug;", // Calls android.util.Log.isLoggable.
-  "Landroid/database/sqlite/SQLiteOpenHelper;", // Calls Class.getSimpleName -> Class.isAnonymousClass -> Class.getDex.
-  "Landroid/database/sqlite/SQLiteQueryBuilder;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/drm/DrmManagerClient;", // Calls System.loadLibrary.
-  "Landroid/graphics/drawable/AnimatedRotateDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/AnimationDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/BitmapDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/ClipDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/ColorDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/Drawable;", // Requires android.graphics.Rect.
-  "Landroid/graphics/drawable/DrawableContainer;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/GradientDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/LayerDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/NinePatchDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/RotateDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/ScaleDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/ShapeDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/StateListDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/drawable/TransitionDrawable;", // Sub-class of Drawable.
-  "Landroid/graphics/Matrix;", // Calls android.graphics.Matrix.native_create.
-  "Landroid/graphics/Matrix$1;", // Requires Matrix.
-  "Landroid/graphics/PixelFormat;", // Calls android.graphics.PixelFormat.nativeClassInit().
-  "Landroid/graphics/Rect;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/graphics/SurfaceTexture;", // Calls android.graphics.SurfaceTexture.nativeClassInit().
-  "Landroid/graphics/Typeface;", // Calls android.graphics.Typeface.nativeCreate.
-  "Landroid/inputmethodservice/ExtractEditText;", // Requires android.widget.TextView.
-  "Landroid/media/AmrInputStream;", // Calls OsConstants.initConstants.
-  "Landroid/media/CamcorderProfile;", // Calls OsConstants.initConstants.
-  "Landroid/media/CameraProfile;", // Calls System.loadLibrary.
-  "Landroid/media/DecoderCapabilities;", // Calls System.loadLibrary.
-  "Landroid/media/EncoderCapabilities;", // Calls OsConstants.initConstants.
-  "Landroid/media/ExifInterface;", // Calls OsConstants.initConstants.
-  "Landroid/media/MediaCodec;", // Calls OsConstants.initConstants.
-  "Landroid/media/MediaCodecList;", // Calls OsConstants.initConstants.
-  "Landroid/media/MediaCrypto;", // Calls OsConstants.initConstants.
-  "Landroid/media/MediaDrm;", // Calls OsConstants.initConstants.
-  "Landroid/media/MediaExtractor;", // Calls OsConstants.initConstants.
-  "Landroid/media/MediaFile;", // Requires DecoderCapabilities.
-  "Landroid/media/MediaMetadataRetriever;", // Calls OsConstants.initConstants.
-  "Landroid/media/MediaMuxer;", // Calls OsConstants.initConstants.
-  "Landroid/media/MediaPlayer;", // Calls System.loadLibrary.
-  "Landroid/media/MediaRecorder;", // Calls System.loadLibrary.
-  "Landroid/media/MediaScanner;", // Calls System.loadLibrary.
-  "Landroid/media/ResampleInputStream;", // Calls OsConstants.initConstants.
-  "Landroid/media/SoundPool;", // Calls OsConstants.initConstants.
-  "Landroid/media/videoeditor/MediaArtistNativeHelper;", // Calls OsConstants.initConstants.
-  "Landroid/media/videoeditor/VideoEditorProfile;", // Calls OsConstants.initConstants.
-  "Landroid/mtp/MtpDatabase;", // Calls OsConstants.initConstants.
-  "Landroid/mtp/MtpDevice;", // Calls OsConstants.initConstants.
-  "Landroid/mtp/MtpServer;", // Calls OsConstants.initConstants.
-  "Landroid/net/NetworkInfo;", // Calls java.util.EnumMap.<init> -> java.lang.Enum.getSharedConstants -> System.identityHashCode.
-  "Landroid/net/Proxy;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/net/SSLCertificateSocketFactory;", // Requires javax.net.ssl.HttpsURLConnection.
-  "Landroid/net/Uri;", // Calls Class.getSimpleName -> Class.isAnonymousClass -> Class.getDex.
-  "Landroid/net/Uri$AbstractHierarchicalUri;", // Requires Uri.
-  "Landroid/net/Uri$HierarchicalUri;", // Requires Uri.
-  "Landroid/net/Uri$OpaqueUri;", // Requires Uri.
-  "Landroid/net/Uri$StringUri;", // Requires Uri.
-  "Landroid/net/WebAddress;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/nfc/NdefRecord;", // Calls String.getBytes -> java.nio.charset.Charset.
-  "Landroid/opengl/EGL14;", // Calls android.opengl.EGL14._nativeClassInit.
-  "Landroid/opengl/GLES10;", // Calls android.opengl.GLES10._nativeClassInit.
-  "Landroid/opengl/GLES10Ext;", // Calls android.opengl.GLES10Ext._nativeClassInit.
-  "Landroid/opengl/GLES11;", // Requires GLES10.
-  "Landroid/opengl/GLES11Ext;", // Calls android.opengl.GLES11Ext._nativeClassInit.
-  "Landroid/opengl/GLES20;", // Calls android.opengl.GLES20._nativeClassInit.
-  "Landroid/opengl/GLUtils;", // Calls android.opengl.GLUtils.nativeClassInit.
-  "Landroid/os/Build;", // Calls -..-> android.os.SystemProperties.native_get.
-  "Landroid/os/Build$VERSION;", // Requires Build.
-  "Landroid/os/Debug;", // Requires android.os.Environment.
-  "Landroid/os/Environment;", // Calls System.getenv.
-  "Landroid/os/FileUtils;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/os/StrictMode;", // Calls android.util.Log.isLoggable.
-  "Landroid/os/StrictMode$VmPolicy;", // Requires StrictMode.
-  "Landroid/os/Trace;", // Calls android.os.Trace.nativeGetEnabledTags.
-  "Landroid/os/UEventObserver;", // Calls Class.getSimpleName -> Class.isAnonymousClass -> Class.getDex.
-  "Landroid/provider/ContactsContract;", // Calls OsConstants.initConstants.
-  "Landroid/provider/Settings$Global;", // Calls OsConstants.initConstants.
-  "Landroid/provider/Settings$Secure;", // Requires android.net.Uri.
-  "Landroid/provider/Settings$System;", // Requires android.net.Uri.
-  "Landroid/renderscript/RenderScript;", // Calls System.loadLibrary.
-  "Landroid/server/BluetoothService;", // Calls android.server.BluetoothService.classInitNative.
-  "Landroid/server/BluetoothEventLoop;", // Calls android.server.BluetoothEventLoop.classInitNative.
-  "Landroid/telephony/PhoneNumberUtils;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/telephony/TelephonyManager;", // Calls OsConstants.initConstants.
-  "Landroid/text/AutoText;", // Requires android.util.DisplayMetrics -..-> android.os.SystemProperties.native_get_int.
-  "Landroid/text/Layout;", // Calls com.android.internal.util.ArrayUtils.emptyArray -> System.identityHashCode.
-  "Landroid/text/BoringLayout;", // Requires Layout.
-  "Landroid/text/DynamicLayout;", // Requires Layout.
-  "Landroid/text/Html$HtmlParser;", // Calls -..-> String.toLowerCase -> java.util.Locale.
-  "Landroid/text/StaticLayout;", // Requires Layout.
-  "Landroid/text/TextUtils;", // Requires android.util.DisplayMetrics.
-  "Landroid/util/DisplayMetrics;", // Calls SystemProperties.native_get_int.
-  "Landroid/util/Patterns;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/view/Choreographer;", // Calls SystemProperties.native_get_boolean.
-  "Landroid/util/Patterns;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/view/GLES20Canvas;", // Calls GLES20Canvas.nIsAvailable().
-  "Landroid/view/GLES20RecordingCanvas;", // Requires android.view.GLES20Canvas.
-  "Landroid/view/GestureDetector;", // Calls android.view.GLES20Canvas.nIsAvailable.
-  "Landroid/view/HardwareRenderer$Gl20Renderer;", // Requires SystemProperties.native_get.
-  "Landroid/view/HardwareRenderer$GlRenderer;", // Requires SystemProperties.native_get.
-  "Landroid/view/InputEventConsistencyVerifier;", // Requires android.os.Build.
-  "Landroid/view/Surface;", // Requires SystemProperties.native_get.
-  "Landroid/view/SurfaceControl;", // Calls OsConstants.initConstants.
-  "Landroid/view/animation/AlphaAnimation;", // Requires Animation.
-  "Landroid/view/animation/Animation;", // Calls SystemProperties.native_get_boolean.
-  "Landroid/view/animation/AnimationSet;", // Calls OsConstants.initConstants.
-  "Landroid/view/textservice/SpellCheckerSubtype;", // Calls Class.getDex().
-  "Landroid/webkit/JniUtil;", // Calls System.loadLibrary.
-  "Landroid/webkit/PluginManager;", // // Calls OsConstants.initConstants.
-  "Landroid/webkit/WebViewCore;", // Calls System.loadLibrary.
+  "Landroid/app/ActivityThread;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/bluetooth/BluetoothAudioGateway;",  // Calls android.bluetooth.BluetoothAudioGateway.classInitNative().
+  "Landroid/bluetooth/HeadsetBase;",  // Calls android.bluetooth.HeadsetBase.classInitNative().
+  "Landroid/content/res/CompatibilityInfo;",  // Requires android.util.DisplayMetrics -..-> android.os.SystemProperties.native_get_int.
+  "Landroid/content/res/CompatibilityInfo$1;",  // Requires android.util.DisplayMetrics -..-> android.os.SystemProperties.native_get_int.
+  "Landroid/content/UriMatcher;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/database/CursorWindow;",  // Requires android.util.DisplayMetrics -..-> android.os.SystemProperties.native_get_int.
+  "Landroid/database/sqlite/SQLiteConnection;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/database/sqlite/SQLiteConnection$Operation;",  // Requires SimpleDateFormat -> java.util.Locale.
+  "Landroid/database/sqlite/SQLiteDatabaseConfiguration;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/database/sqlite/SQLiteDebug;",  // Calls android.util.Log.isLoggable.
+  "Landroid/database/sqlite/SQLiteOpenHelper;",  // Calls Class.getSimpleName -> Class.isAnonymousClass -> Class.getDex.
+  "Landroid/database/sqlite/SQLiteQueryBuilder;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/drm/DrmManagerClient;",  // Calls System.loadLibrary.
+  "Landroid/graphics/drawable/AnimatedRotateDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/AnimationDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/BitmapDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/ClipDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/ColorDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/Drawable;",  // Requires android.graphics.Rect.
+  "Landroid/graphics/drawable/DrawableContainer;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/GradientDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/LayerDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/NinePatchDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/RotateDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/ScaleDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/ShapeDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/StateListDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/drawable/TransitionDrawable;",  // Sub-class of Drawable.
+  "Landroid/graphics/Matrix;",  // Calls android.graphics.Matrix.native_create.
+  "Landroid/graphics/Matrix$1;",  // Requires Matrix.
+  "Landroid/graphics/PixelFormat;",  // Calls android.graphics.PixelFormat.nativeClassInit().
+  "Landroid/graphics/Rect;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/graphics/SurfaceTexture;",  // Calls android.graphics.SurfaceTexture.nativeClassInit().
+  "Landroid/graphics/Typeface;",  // Calls android.graphics.Typeface.nativeCreate.
+  "Landroid/inputmethodservice/ExtractEditText;",  // Requires android.widget.TextView.
+  "Landroid/media/AmrInputStream;",  // Calls OsConstants.initConstants.
+  "Landroid/media/CamcorderProfile;",  // Calls OsConstants.initConstants.
+  "Landroid/media/CameraProfile;",  // Calls System.loadLibrary.
+  "Landroid/media/DecoderCapabilities;",  // Calls System.loadLibrary.
+  "Landroid/media/EncoderCapabilities;",  // Calls OsConstants.initConstants.
+  "Landroid/media/ExifInterface;",  // Calls OsConstants.initConstants.
+  "Landroid/media/MediaCodec;",  // Calls OsConstants.initConstants.
+  "Landroid/media/MediaCodecList;",  // Calls OsConstants.initConstants.
+  "Landroid/media/MediaCrypto;",  // Calls OsConstants.initConstants.
+  "Landroid/media/MediaDrm;",  // Calls OsConstants.initConstants.
+  "Landroid/media/MediaExtractor;",  // Calls OsConstants.initConstants.
+  "Landroid/media/MediaFile;",  // Requires DecoderCapabilities.
+  "Landroid/media/MediaMetadataRetriever;",  // Calls OsConstants.initConstants.
+  "Landroid/media/MediaMuxer;",  // Calls OsConstants.initConstants.
+  "Landroid/media/MediaPlayer;",  // Calls System.loadLibrary.
+  "Landroid/media/MediaRecorder;",  // Calls System.loadLibrary.
+  "Landroid/media/MediaScanner;",  // Calls System.loadLibrary.
+  "Landroid/media/ResampleInputStream;",  // Calls OsConstants.initConstants.
+  "Landroid/media/SoundPool;",  // Calls OsConstants.initConstants.
+  "Landroid/media/videoeditor/MediaArtistNativeHelper;",  // Calls OsConstants.initConstants.
+  "Landroid/media/videoeditor/VideoEditorProfile;",  // Calls OsConstants.initConstants.
+  "Landroid/mtp/MtpDatabase;",  // Calls OsConstants.initConstants.
+  "Landroid/mtp/MtpDevice;",  // Calls OsConstants.initConstants.
+  "Landroid/mtp/MtpServer;",  // Calls OsConstants.initConstants.
+  "Landroid/net/NetworkInfo;",  // Calls java.util.EnumMap.<init> -> java.lang.Enum.getSharedConstants -> System.identityHashCode.
+  "Landroid/net/Proxy;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/net/SSLCertificateSocketFactory;",  // Requires javax.net.ssl.HttpsURLConnection.
+  "Landroid/net/Uri;",  // Calls Class.getSimpleName -> Class.isAnonymousClass -> Class.getDex.
+  "Landroid/net/Uri$AbstractHierarchicalUri;",  // Requires Uri.
+  "Landroid/net/Uri$HierarchicalUri;",  // Requires Uri.
+  "Landroid/net/Uri$OpaqueUri;",  // Requires Uri.
+  "Landroid/net/Uri$StringUri;",  // Requires Uri.
+  "Landroid/net/WebAddress;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/nfc/NdefRecord;",  // Calls String.getBytes -> java.nio.charset.Charset.
+  "Landroid/opengl/EGL14;",  // Calls android.opengl.EGL14._nativeClassInit.
+  "Landroid/opengl/GLES10;",  // Calls android.opengl.GLES10._nativeClassInit.
+  "Landroid/opengl/GLES10Ext;",  // Calls android.opengl.GLES10Ext._nativeClassInit.
+  "Landroid/opengl/GLES11;",  // Requires GLES10.
+  "Landroid/opengl/GLES11Ext;",  // Calls android.opengl.GLES11Ext._nativeClassInit.
+  "Landroid/opengl/GLES20;",  // Calls android.opengl.GLES20._nativeClassInit.
+  "Landroid/opengl/GLUtils;",  // Calls android.opengl.GLUtils.nativeClassInit.
+  "Landroid/os/Build;",  // Calls -..-> android.os.SystemProperties.native_get.
+  "Landroid/os/Build$VERSION;",  // Requires Build.
+  "Landroid/os/Debug;",  // Requires android.os.Environment.
+  "Landroid/os/Environment;",  // Calls System.getenv.
+  "Landroid/os/FileUtils;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/os/StrictMode;",  // Calls android.util.Log.isLoggable.
+  "Landroid/os/StrictMode$VmPolicy;",  // Requires StrictMode.
+  "Landroid/os/Trace;",  // Calls android.os.Trace.nativeGetEnabledTags.
+  "Landroid/os/UEventObserver;",  // Calls Class.getSimpleName -> Class.isAnonymousClass -> Class.getDex.
+  "Landroid/provider/ContactsContract;",  // Calls OsConstants.initConstants.
+  "Landroid/provider/Settings$Global;",  // Calls OsConstants.initConstants.
+  "Landroid/provider/Settings$Secure;",  // Requires android.net.Uri.
+  "Landroid/provider/Settings$System;",  // Requires android.net.Uri.
+  "Landroid/renderscript/RenderScript;",  // Calls System.loadLibrary.
+  "Landroid/server/BluetoothService;",  // Calls android.server.BluetoothService.classInitNative.
+  "Landroid/server/BluetoothEventLoop;",  // Calls android.server.BluetoothEventLoop.classInitNative.
+  "Landroid/telephony/PhoneNumberUtils;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/telephony/TelephonyManager;",  // Calls OsConstants.initConstants.
+  "Landroid/text/AutoText;",  // Requires android.util.DisplayMetrics -..-> android.os.SystemProperties.native_get_int.
+  "Landroid/text/Layout;",  // Calls com.android.internal.util.ArrayUtils.emptyArray -> System.identityHashCode.
+  "Landroid/text/BoringLayout;",  // Requires Layout.
+  "Landroid/text/DynamicLayout;",  // Requires Layout.
+  "Landroid/text/Html$HtmlParser;",  // Calls -..-> String.toLowerCase -> java.util.Locale.
+  "Landroid/text/StaticLayout;",  // Requires Layout.
+  "Landroid/text/TextUtils;",  // Requires android.util.DisplayMetrics.
+  "Landroid/util/DisplayMetrics;",  // Calls SystemProperties.native_get_int.
+  "Landroid/util/Patterns;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/view/Choreographer;",  // Calls SystemProperties.native_get_boolean.
+  "Landroid/util/Patterns;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/view/GLES20Canvas;",  // Calls GLES20Canvas.nIsAvailable().
+  "Landroid/view/GLES20RecordingCanvas;",  // Requires android.view.GLES20Canvas.
+  "Landroid/view/GestureDetector;",  // Calls android.view.GLES20Canvas.nIsAvailable.
+  "Landroid/view/HardwareRenderer$Gl20Renderer;",  // Requires SystemProperties.native_get.
+  "Landroid/view/HardwareRenderer$GlRenderer;",  // Requires SystemProperties.native_get.
+  "Landroid/view/InputEventConsistencyVerifier;",  // Requires android.os.Build.
+  "Landroid/view/Surface;",  // Requires SystemProperties.native_get.
+  "Landroid/view/SurfaceControl;",  // Calls OsConstants.initConstants.
+  "Landroid/view/animation/AlphaAnimation;",  // Requires Animation.
+  "Landroid/view/animation/Animation;",  // Calls SystemProperties.native_get_boolean.
+  "Landroid/view/animation/AnimationSet;",  // Calls OsConstants.initConstants.
+  "Landroid/view/textservice/SpellCheckerSubtype;",  // Calls Class.getDex().
+  "Landroid/webkit/JniUtil;",  // Calls System.loadLibrary.
+  "Landroid/webkit/PluginManager;",  // // Calls OsConstants.initConstants.
+  "Landroid/webkit/WebViewCore;",  // Calls System.loadLibrary.
   "Landroid/webkit/WebViewFactory$Preloader;",  // Calls to Class.forName.
-  "Landroid/webkit/WebViewInputDispatcher;", // Calls Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/webkit/URLUtil;", // Calls Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Landroid/widget/AutoCompleteTextView;", // Requires TextView.
-  "Landroid/widget/Button;", // Requires TextView.
-  "Landroid/widget/CheckBox;", // Requires TextView.
-  "Landroid/widget/CheckedTextView;", // Requires TextView.
-  "Landroid/widget/CompoundButton;", // Requires TextView.
-  "Landroid/widget/EditText;", // Requires TextView.
-  "Landroid/widget/NumberPicker;", // Requires java.util.Locale.
-  "Landroid/widget/ScrollBarDrawable;", // Sub-class of Drawable.
-  "Landroid/widget/SearchView$SearchAutoComplete;", // Requires TextView.
-  "Landroid/widget/Switch;", // Requires TextView.
-  "Landroid/widget/TextView;", // Calls Paint.<init> -> Paint.native_init.
-  "Lcom/android/i18n/phonenumbers/AsYouTypeFormatter;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Lcom/android/i18n/phonenumbers/MetadataManager;", // Calls OsConstants.initConstants.
-  "Lcom/android/i18n/phonenumbers/PhoneNumberMatcher;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Lcom/android/i18n/phonenumbers/PhoneNumberUtil;", // Requires java.util.logging.LogManager.
-  "Lcom/android/i18n/phonenumbers/geocoding/AreaCodeMap;", // Calls OsConstants.initConstants.
-  "Lcom/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder;", // Calls OsConstants.initConstants.
-  "Lcom/android/internal/os/SamplingProfilerIntegration;", // Calls SystemProperties.native_get_int.
-  "Lcom/android/internal/policy/impl/PhoneWindow;", // Calls android.os.Binder.init.
-  "Lcom/android/internal/view/menu/ActionMenuItemView;", // Requires TextView.
-  "Lcom/android/internal/widget/DialogTitle;", // Requires TextView.
-  "Lcom/android/org/bouncycastle/asn1/StreamUtil;", // Calls Runtime.getRuntime().maxMemory().
-  "Lcom/android/org/bouncycastle/asn1/pkcs/MacData;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/asn1/pkcs/RSASSAPSSparams;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/asn1/cms/SignedData;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/asn1/x509/GeneralSubtree;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/asn1/x9/X9ECParameters;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$MD5;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA1;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA256;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA384;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA512;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/bouncycastle/crypto/engines/RSABlindedEngine;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/crypto/generators/DHKeyGeneratorHelper;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/crypto/generators/DHParametersGenerator;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/crypto/generators/DHParametersHelper;", // Calls System.getenv -> OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/crypto/generators/DSAKeyPairGenerator;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/crypto/generators/DSAParametersGenerator;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/crypto/generators/RSAKeyPairGenerator;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyPairGeneratorSpi;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$EC;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDH;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDHC;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDSA;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECMQV;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyPairGeneratorSpi;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$BCPKCS12KeyStore;", // Calls Thread.currentThread.
-  "Lcom/android/org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi;", // Calls Thread.currentThread.
-  "Lcom/android/org/bouncycastle/jce/PKCS10CertificationRequest;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/jce/provider/CertBlacklist;", // Calls System.getenv -> OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/jce/provider/JCERSAPrivateKey;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi;", // Calls System.getenv -> OsConstants.initConstants.
-  "Lcom/android/org/bouncycastle/math/ec/ECConstants;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/math/ec/Tnaf;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/util/BigIntegers;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/bouncycastle/x509/X509Util;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lcom/android/org/conscrypt/CipherSuite;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/conscrypt/FileClientSessionCache$CacheFile;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/conscrypt/HandshakeIODataStream;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/conscrypt/Logger;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/conscrypt/NativeCrypto;", // Calls native NativeCrypto.clinit().
-  "Lcom/android/org/conscrypt/OpenSSLECKeyPairGenerator;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/conscrypt/OpenSSLEngine;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/conscrypt/OpenSSLMac$HmacMD5;", // Calls native NativeCrypto.clinit().
-  "Lcom/android/org/conscrypt/OpenSSLMac$HmacSHA1;", // Calls native NativeCrypto.clinit().
-  "Lcom/android/org/conscrypt/OpenSSLMac$HmacSHA256;", // Calls native NativeCrypto.clinit().
-  "Lcom/android/org/conscrypt/OpenSSLMac$HmacSHA384;", // Calls native NativeCrypto.clinit().
-  "Lcom/android/org/conscrypt/OpenSSLMac$HmacSHA512;", // Calls native NativeCrypto.clinit().
-  "Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$MD5;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA1;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA256;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA384;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA512;", // Requires com.android.org.conscrypt.NativeCrypto.
-  "Lcom/android/org/conscrypt/OpenSSLX509CertPath;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/conscrypt/PRF;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/conscrypt/SSLSessionImpl;", // Calls OsConstants.initConstants.
-  "Lcom/android/org/conscrypt/TrustedCertificateStore;", // Calls System.getenv -> OsConstants.initConstants.
-  "Lcom/android/okhttp/ConnectionPool;", // Calls OsConstants.initConstants.
-  "Lcom/android/okhttp/OkHttpClient;", // Calls OsConstants.initConstants.
-  "Lcom/android/okhttp/internal/DiskLruCache;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Lcom/android/okhttp/internal/Util;", // Calls OsConstants.initConstants.
-  "Lcom/android/okhttp/internal/http/HttpsURLConnectionImpl;", // Calls VMClassLoader.getBootClassPathSize.
-  "Lcom/android/okhttp/internal/spdy/SpdyConnection;", // Calls OsConstants.initConstants.
-  "Lcom/android/okhttp/internal/spdy/SpdyReader;", // Calls OsConstants.initConstants.
-  "Lcom/android/okhttp/internal/tls/OkHostnameVerifier;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Lcom/google/android/gles_jni/EGLContextImpl;", // Calls com.google.android.gles_jni.EGLImpl._nativeClassInit.
-  "Lcom/google/android/gles_jni/EGLImpl;", // Calls com.google.android.gles_jni.EGLImpl._nativeClassInit.
-  "Lcom/google/android/gles_jni/GLImpl;", // Calls com.google.android.gles_jni.GLImpl._nativeClassInit.
-  "Lgov/nist/core/GenericObject;", // Calls OsConstants.initConstants.
-  "Lgov/nist/core/Host;", // Calls OsConstants.initConstants.
-  "Lgov/nist/core/HostPort;", // Calls OsConstants.initConstants.
-  "Lgov/nist/core/NameValue;", // Calls OsConstants.initConstants.
-  "Lgov/nist/core/net/DefaultNetworkLayer;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/Utils;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/address/AddressImpl;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/address/Authority;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/address/GenericURI;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/address/NetObject;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/address/SipUri;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/address/TelephoneNumber;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/address/UserInfo;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/Accept;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/AcceptEncoding;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/AcceptLanguage;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/AddressParametersHeader;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/AlertInfoList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/AllowEvents;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/AllowEventsList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/AuthenticationInfo;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/Authorization;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/CSeq;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/CallIdentifier;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/Challenge;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ContactList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ContentEncoding;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ContentEncodingList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ContentLanguageList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ContentType;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/Credentials;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ErrorInfoList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/Expires;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/From;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/MimeVersion;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/NameMap;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/Priority;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/Protocol;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ProxyAuthenticate;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ProxyAuthenticateList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ProxyAuthorizationList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ProxyRequire;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ProxyRequireList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/RSeq;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/RecordRoute;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ReferTo;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/RequestLine;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/Require;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/RetryAfter;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/SIPETag;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/SIPHeader;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/SIPHeaderNamesCache;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/StatusLine;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/SubscriptionState;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/TimeStamp;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/UserAgent;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/Unsupported;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/Warning;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ViaList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/extensions/Join;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/extensions/References;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/extensions/Replaces;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ims/PAccessNetworkInfo;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ims/PAssertedIdentity;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ims/PAssertedIdentityList;", // Calls OsConstants.initConstants.
+  "Landroid/webkit/WebViewInputDispatcher;",  // Calls Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/webkit/URLUtil;",  // Calls Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Landroid/widget/AutoCompleteTextView;",  // Requires TextView.
+  "Landroid/widget/Button;",  // Requires TextView.
+  "Landroid/widget/CheckBox;",  // Requires TextView.
+  "Landroid/widget/CheckedTextView;",  // Requires TextView.
+  "Landroid/widget/CompoundButton;",  // Requires TextView.
+  "Landroid/widget/EditText;",  // Requires TextView.
+  "Landroid/widget/NumberPicker;",  // Requires java.util.Locale.
+  "Landroid/widget/ScrollBarDrawable;",  // Sub-class of Drawable.
+  "Landroid/widget/SearchView$SearchAutoComplete;",  // Requires TextView.
+  "Landroid/widget/Switch;",  // Requires TextView.
+  "Landroid/widget/TextView;",  // Calls Paint.<init> -> Paint.native_init.
+  "Lcom/android/i18n/phonenumbers/AsYouTypeFormatter;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Lcom/android/i18n/phonenumbers/MetadataManager;",  // Calls OsConstants.initConstants.
+  "Lcom/android/i18n/phonenumbers/PhoneNumberMatcher;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Lcom/android/i18n/phonenumbers/PhoneNumberUtil;",  // Requires java.util.logging.LogManager.
+  "Lcom/android/i18n/phonenumbers/geocoding/AreaCodeMap;",  // Calls OsConstants.initConstants.
+  "Lcom/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder;",  // Calls OsConstants.initConstants.
+  "Lcom/android/internal/os/SamplingProfilerIntegration;",  // Calls SystemProperties.native_get_int.
+  "Lcom/android/internal/policy/impl/PhoneWindow;",  // Calls android.os.Binder.init.
+  "Lcom/android/internal/view/menu/ActionMenuItemView;",  // Requires TextView.
+  "Lcom/android/internal/widget/DialogTitle;",  // Requires TextView.
+  "Lcom/android/org/bouncycastle/asn1/StreamUtil;",  // Calls Runtime.getRuntime().maxMemory().
+  "Lcom/android/org/bouncycastle/asn1/pkcs/MacData;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/asn1/pkcs/RSASSAPSSparams;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/asn1/cms/SignedData;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/asn1/x509/GeneralSubtree;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/asn1/x9/X9ECParameters;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$MD5;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA1;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA256;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA384;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA512;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/bouncycastle/crypto/engines/RSABlindedEngine;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/crypto/generators/DHKeyGeneratorHelper;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/crypto/generators/DHParametersGenerator;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/crypto/generators/DHParametersHelper;",  // Calls System.getenv -> OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/crypto/generators/DSAKeyPairGenerator;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/crypto/generators/DSAParametersGenerator;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/crypto/generators/RSAKeyPairGenerator;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyPairGeneratorSpi;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$EC;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDH;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDHC;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDSA;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECMQV;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyPairGeneratorSpi;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$BCPKCS12KeyStore;",  // Calls Thread.currentThread.
+  "Lcom/android/org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi;",  // Calls Thread.currentThread.
+  "Lcom/android/org/bouncycastle/jce/PKCS10CertificationRequest;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/jce/provider/CertBlacklist;",  // Calls System.getenv -> OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/jce/provider/JCERSAPrivateKey;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi;",  // Calls System.getenv -> OsConstants.initConstants.
+  "Lcom/android/org/bouncycastle/math/ec/ECConstants;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/math/ec/Tnaf;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/util/BigIntegers;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/bouncycastle/x509/X509Util;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lcom/android/org/conscrypt/CipherSuite;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/conscrypt/FileClientSessionCache$CacheFile;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/conscrypt/HandshakeIODataStream;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/conscrypt/Logger;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/conscrypt/NativeCrypto;",  // Calls native NativeCrypto.clinit().
+  "Lcom/android/org/conscrypt/OpenSSLECKeyPairGenerator;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/conscrypt/OpenSSLEngine;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/conscrypt/OpenSSLMac$HmacMD5;",  // Calls native NativeCrypto.clinit().
+  "Lcom/android/org/conscrypt/OpenSSLMac$HmacSHA1;",  // Calls native NativeCrypto.clinit().
+  "Lcom/android/org/conscrypt/OpenSSLMac$HmacSHA256;",  // Calls native NativeCrypto.clinit().
+  "Lcom/android/org/conscrypt/OpenSSLMac$HmacSHA384;",  // Calls native NativeCrypto.clinit().
+  "Lcom/android/org/conscrypt/OpenSSLMac$HmacSHA512;",  // Calls native NativeCrypto.clinit().
+  "Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$MD5;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA1;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA256;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA384;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA512;",  // Requires com.android.org.conscrypt.NativeCrypto.
+  "Lcom/android/org/conscrypt/OpenSSLX509CertPath;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/conscrypt/PRF;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/conscrypt/SSLSessionImpl;",  // Calls OsConstants.initConstants.
+  "Lcom/android/org/conscrypt/TrustedCertificateStore;",  // Calls System.getenv -> OsConstants.initConstants.
+  "Lcom/android/okhttp/ConnectionPool;",  // Calls OsConstants.initConstants.
+  "Lcom/android/okhttp/OkHttpClient;",  // Calls OsConstants.initConstants.
+  "Lcom/android/okhttp/internal/DiskLruCache;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Lcom/android/okhttp/internal/Util;",  // Calls OsConstants.initConstants.
+  "Lcom/android/okhttp/internal/http/HttpsURLConnectionImpl;",  // Calls VMClassLoader.getBootClassPathSize.
+  "Lcom/android/okhttp/internal/spdy/SpdyConnection;",  // Calls OsConstants.initConstants.
+  "Lcom/android/okhttp/internal/spdy/SpdyReader;",  // Calls OsConstants.initConstants.
+  "Lcom/android/okhttp/internal/tls/OkHostnameVerifier;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Lcom/google/android/gles_jni/EGLContextImpl;",  // Calls com.google.android.gles_jni.EGLImpl._nativeClassInit.
+  "Lcom/google/android/gles_jni/EGLImpl;",  // Calls com.google.android.gles_jni.EGLImpl._nativeClassInit.
+  "Lcom/google/android/gles_jni/GLImpl;",  // Calls com.google.android.gles_jni.GLImpl._nativeClassInit.
+  "Lgov/nist/core/GenericObject;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/core/Host;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/core/HostPort;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/core/NameValue;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/core/net/DefaultNetworkLayer;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/Utils;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/address/AddressImpl;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/address/Authority;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/address/GenericURI;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/address/NetObject;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/address/SipUri;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/address/TelephoneNumber;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/address/UserInfo;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/Accept;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/AcceptEncoding;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/AcceptLanguage;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/AddressParametersHeader;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/AlertInfoList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/AllowEvents;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/AllowEventsList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/AuthenticationInfo;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/Authorization;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/CSeq;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/CallIdentifier;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/Challenge;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ContactList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ContentEncoding;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ContentEncodingList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ContentLanguageList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ContentType;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/Credentials;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ErrorInfoList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/Expires;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/From;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/MimeVersion;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/NameMap;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/Priority;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/Protocol;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ProxyAuthenticate;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ProxyAuthenticateList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ProxyAuthorizationList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ProxyRequire;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ProxyRequireList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/RSeq;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/RecordRoute;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ReferTo;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/RequestLine;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/Require;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/RetryAfter;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/SIPETag;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/SIPHeader;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/SIPHeaderNamesCache;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/StatusLine;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/SubscriptionState;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/TimeStamp;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/UserAgent;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/Unsupported;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/Warning;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ViaList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/extensions/Join;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/extensions/References;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/extensions/Replaces;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ims/PAccessNetworkInfo;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ims/PAssertedIdentity;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ims/PAssertedIdentityList;",  // Calls OsConstants.initConstants.
   "Lgov/nist/javax/sip/header/ims/PAssociatedURI;",  // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ims/PCalledPartyID;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ims/PChargingVector;", // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ims/PCalledPartyID;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ims/PChargingVector;",  // Calls OsConstants.initConstants.
   "Lgov/nist/javax/sip/header/ims/PPreferredIdentity;",  // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ims/PVisitedNetworkIDList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ims/PathList;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ims/SecurityAgree;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ims/SecurityClient;", // Calls OsConstants.initConstants.
-  "Lgov/nist/javax/sip/header/ims/ServiceRoute;", // Calls OsConstants.initConstants.
-  "Ljava/io/Console;", // Has FileDescriptor(s).
-  "Ljava/io/File;", // Calls to Random.<init> -> System.currentTimeMillis -> OsConstants.initConstants.
-  "Ljava/io/FileDescriptor;", // Requires libcore.io.OsConstants.
-  "Ljava/io/ObjectInputStream;", // Requires java.lang.ClassLoader$SystemClassLoader.
+  "Lgov/nist/javax/sip/header/ims/PVisitedNetworkIDList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ims/PathList;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ims/SecurityAgree;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ims/SecurityClient;",  // Calls OsConstants.initConstants.
+  "Lgov/nist/javax/sip/header/ims/ServiceRoute;",  // Calls OsConstants.initConstants.
+  "Ljava/io/Console;",  // Has FileDescriptor(s).
+  "Ljava/io/File;",  // Calls to Random.<init> -> System.currentTimeMillis -> OsConstants.initConstants.
+  "Ljava/io/FileDescriptor;",  // Requires libcore.io.OsConstants.
+  "Ljava/io/ObjectInputStream;",  // Requires java.lang.ClassLoader$SystemClassLoader.
   "Ljava/io/ObjectStreamClass;",  // Calls to Class.forName -> java.io.FileDescriptor.
-  "Ljava/io/ObjectStreamConstants;", // Instance of non-image class SerializablePermission.
-  "Ljava/lang/ClassLoader$SystemClassLoader;", // Calls System.getProperty -> OsConstants.initConstants.
-  "Ljava/lang/HexStringParser;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Ljava/lang/ProcessManager;", // Calls Thread.currentThread.
-  "Ljava/lang/Runtime;", // Calls System.getProperty -> OsConstants.initConstants.
-  "Ljava/lang/System;", // Calls OsConstants.initConstants.
-  "Ljava/math/BigDecimal;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Ljava/math/BigInteger;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Ljava/math/Primality;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Ljava/math/Multiplication;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Ljava/net/InetAddress;", // Requires libcore.io.OsConstants.
-  "Ljava/net/Inet4Address;", // Sub-class of InetAddress.
-  "Ljava/net/Inet6Address;", // Sub-class of InetAddress.
-  "Ljava/net/InetUnixAddress;", // Sub-class of InetAddress.
-  "Ljava/nio/charset/Charset;", // Calls Charset.getDefaultCharset -> System.getProperty -> OsConstants.initConstants.
-  "Ljava/nio/charset/CharsetICU;", // Sub-class of Charset.
-  "Ljava/nio/charset/Charsets;", // Calls Charset.forName.
-  "Ljava/nio/charset/StandardCharsets;", // Calls OsConstants.initConstants.
-  "Ljava/security/AlgorithmParameterGenerator;", // Calls OsConstants.initConstants.
-  "Ljava/security/KeyPairGenerator$KeyPairGeneratorImpl;", // Calls OsConstants.initConstants.
-  "Ljava/security/KeyPairGenerator;", // Calls OsConstants.initConstants.
-  "Ljava/security/Security;", // Tries to do disk IO for "security.properties".
-  "Ljava/security/spec/RSAKeyGenParameterSpec;", // java.math.NativeBN.BN_new()
-  "Ljava/sql/Date;", // Calls OsConstants.initConstants.
-  "Ljava/sql/DriverManager;", // Calls OsConstants.initConstants.
-  "Ljava/sql/Time;", // Calls OsConstants.initConstants.
-  "Ljava/sql/Timestamp;", // Calls OsConstants.initConstants.
-  "Ljava/util/Date;", // Calls Date.<init> -> System.currentTimeMillis -> OsConstants.initConstants.
-  "Ljava/util/ListResourceBundle;", // Calls OsConstants.initConstants.
-  "Ljava/util/Locale;", // Calls System.getProperty -> OsConstants.initConstants.
-  "Ljava/util/PropertyResourceBundle;", // Calls OsConstants.initConstants.
-  "Ljava/util/ResourceBundle;", // Calls OsConstants.initConstants.
-  "Ljava/util/ResourceBundle$MissingBundle;", // Calls OsConstants.initConstants.
-  "Ljava/util/Scanner;", // regex.Pattern.compileImpl.
-  "Ljava/util/SimpleTimeZone;", // Sub-class of TimeZone.
-  "Ljava/util/TimeZone;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
-  "Ljava/util/concurrent/ConcurrentHashMap$Segment;", // Calls Runtime.getRuntime().availableProcessors().
-  "Ljava/util/concurrent/ConcurrentSkipListMap;", // Calls OsConstants.initConstants.
-  "Ljava/util/concurrent/Exchanger;", // Calls OsConstants.initConstants.
-  "Ljava/util/concurrent/ForkJoinPool;", // Calls OsConstants.initConstants.
-  "Ljava/util/concurrent/LinkedTransferQueue;", // Calls OsConstants.initConstants.
-  "Ljava/util/concurrent/Phaser;", // Calls OsConstants.initConstants.
-  "Ljava/util/concurrent/ScheduledThreadPoolExecutor;", // Calls AtomicLong.VMSupportsCS8()
-  "Ljava/util/concurrent/SynchronousQueue;", // Calls OsConstants.initConstants.
-  "Ljava/util/concurrent/atomic/AtomicLong;", // Calls AtomicLong.VMSupportsCS8()
-  "Ljava/util/logging/LogManager;", // Calls System.getProperty -> OsConstants.initConstants.
-  "Ljava/util/prefs/AbstractPreferences;", // Calls OsConstants.initConstants.
-  "Ljava/util/prefs/FilePreferencesImpl;", // Calls OsConstants.initConstants.
-  "Ljava/util/prefs/FilePreferencesFactoryImpl;", // Calls OsConstants.initConstants.
-  "Ljava/util/prefs/Preferences;", // Calls OsConstants.initConstants.
-  "Ljavax/crypto/KeyAgreement;", // Calls OsConstants.initConstants.
-  "Ljavax/crypto/KeyGenerator;", // Calls OsConstants.initConstants.
-  "Ljavax/security/cert/X509Certificate;", // Calls VMClassLoader.getBootClassPathSize.
-  "Ljavax/security/cert/X509Certificate$1;", // Calls VMClassLoader.getBootClassPathSize.
-  "Ljavax/microedition/khronos/egl/EGL10;", // Requires EGLContext.
-  "Ljavax/microedition/khronos/egl/EGLContext;", // Requires com.google.android.gles_jni.EGLImpl.
-  "Ljavax/xml/datatype/DatatypeConstants;", // Calls OsConstants.initConstants.
-  "Ljavax/xml/datatype/FactoryFinder;", // Calls OsConstants.initConstants.
-  "Ljavax/xml/namespace/QName;", // Calls OsConstants.initConstants.
-  "Ljavax/xml/validation/SchemaFactoryFinder;", // Calls OsConstants.initConstants.
-  "Ljavax/xml/xpath/XPathConstants;", // Calls OsConstants.initConstants.
-  "Ljavax/xml/xpath/XPathFactoryFinder;", // Calls OsConstants.initConstants.
-  "Llibcore/icu/LocaleData;", // Requires java.util.Locale.
-  "Llibcore/icu/TimeZoneNames;", // Requires java.util.TimeZone.
+  "Ljava/io/ObjectStreamConstants;",  // Instance of non-image class SerializablePermission.
+  "Ljava/lang/ClassLoader$SystemClassLoader;",  // Calls System.getProperty -> OsConstants.initConstants.
+  "Ljava/lang/HexStringParser;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Ljava/lang/ProcessManager;",  // Calls Thread.currentThread.
+  "Ljava/lang/Runtime;",  // Calls System.getProperty -> OsConstants.initConstants.
+  "Ljava/lang/System;",  // Calls OsConstants.initConstants.
+  "Ljava/math/BigDecimal;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Ljava/math/BigInteger;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Ljava/math/Primality;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Ljava/math/Multiplication;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Ljava/net/InetAddress;",  // Requires libcore.io.OsConstants.
+  "Ljava/net/Inet4Address;",  // Sub-class of InetAddress.
+  "Ljava/net/Inet6Address;",  // Sub-class of InetAddress.
+  "Ljava/net/InetUnixAddress;",  // Sub-class of InetAddress.
+  "Ljava/nio/charset/Charset;",  // Calls Charset.getDefaultCharset -> System.getProperty -> OsConstants.initConstants.
+  "Ljava/nio/charset/CharsetICU;",  // Sub-class of Charset.
+  "Ljava/nio/charset/Charsets;",  // Calls Charset.forName.
+  "Ljava/nio/charset/StandardCharsets;",  // Calls OsConstants.initConstants.
+  "Ljava/security/AlgorithmParameterGenerator;",  // Calls OsConstants.initConstants.
+  "Ljava/security/KeyPairGenerator$KeyPairGeneratorImpl;",  // Calls OsConstants.initConstants.
+  "Ljava/security/KeyPairGenerator;",  // Calls OsConstants.initConstants.
+  "Ljava/security/Security;",  // Tries to do disk IO for "security.properties".
+  "Ljava/security/spec/RSAKeyGenParameterSpec;",  // java.math.NativeBN.BN_new()
+  "Ljava/sql/Date;",  // Calls OsConstants.initConstants.
+  "Ljava/sql/DriverManager;",  // Calls OsConstants.initConstants.
+  "Ljava/sql/Time;",  // Calls OsConstants.initConstants.
+  "Ljava/sql/Timestamp;",  // Calls OsConstants.initConstants.
+  "Ljava/util/Date;",  // Calls Date.<init> -> System.currentTimeMillis -> OsConstants.initConstants.
+  "Ljava/util/ListResourceBundle;",  // Calls OsConstants.initConstants.
+  "Ljava/util/Locale;",  // Calls System.getProperty -> OsConstants.initConstants.
+  "Ljava/util/PropertyResourceBundle;",  // Calls OsConstants.initConstants.
+  "Ljava/util/ResourceBundle;",  // Calls OsConstants.initConstants.
+  "Ljava/util/ResourceBundle$MissingBundle;",  // Calls OsConstants.initConstants.
+  "Ljava/util/Scanner;",  // regex.Pattern.compileImpl.
+  "Ljava/util/SimpleTimeZone;",  // Sub-class of TimeZone.
+  "Ljava/util/TimeZone;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Ljava/util/concurrent/ConcurrentHashMap$Segment;",  // Calls Runtime.getRuntime().availableProcessors().
+  "Ljava/util/concurrent/ConcurrentSkipListMap;",  // Calls OsConstants.initConstants.
+  "Ljava/util/concurrent/Exchanger;",  // Calls OsConstants.initConstants.
+  "Ljava/util/concurrent/ForkJoinPool;",  // Calls OsConstants.initConstants.
+  "Ljava/util/concurrent/LinkedTransferQueue;",  // Calls OsConstants.initConstants.
+  "Ljava/util/concurrent/Phaser;",  // Calls OsConstants.initConstants.
+  "Ljava/util/concurrent/ScheduledThreadPoolExecutor;",  // Calls AtomicLong.VMSupportsCS8()
+  "Ljava/util/concurrent/SynchronousQueue;",  // Calls OsConstants.initConstants.
+  "Ljava/util/concurrent/atomic/AtomicLong;",  // Calls AtomicLong.VMSupportsCS8()
+  "Ljava/util/logging/LogManager;",  // Calls System.getProperty -> OsConstants.initConstants.
+  "Ljava/util/prefs/AbstractPreferences;",  // Calls OsConstants.initConstants.
+  "Ljava/util/prefs/FilePreferencesImpl;",  // Calls OsConstants.initConstants.
+  "Ljava/util/prefs/FilePreferencesFactoryImpl;",  // Calls OsConstants.initConstants.
+  "Ljava/util/prefs/Preferences;",  // Calls OsConstants.initConstants.
+  "Ljavax/crypto/KeyAgreement;",  // Calls OsConstants.initConstants.
+  "Ljavax/crypto/KeyGenerator;",  // Calls OsConstants.initConstants.
+  "Ljavax/security/cert/X509Certificate;",  // Calls VMClassLoader.getBootClassPathSize.
+  "Ljavax/security/cert/X509Certificate$1;",  // Calls VMClassLoader.getBootClassPathSize.
+  "Ljavax/microedition/khronos/egl/EGL10;",  // Requires EGLContext.
+  "Ljavax/microedition/khronos/egl/EGLContext;",  // Requires com.google.android.gles_jni.EGLImpl.
+  "Ljavax/xml/datatype/DatatypeConstants;",  // Calls OsConstants.initConstants.
+  "Ljavax/xml/datatype/FactoryFinder;",  // Calls OsConstants.initConstants.
+  "Ljavax/xml/namespace/QName;",  // Calls OsConstants.initConstants.
+  "Ljavax/xml/validation/SchemaFactoryFinder;",  // Calls OsConstants.initConstants.
+  "Ljavax/xml/xpath/XPathConstants;",  // Calls OsConstants.initConstants.
+  "Ljavax/xml/xpath/XPathFactoryFinder;",  // Calls OsConstants.initConstants.
+  "Llibcore/icu/LocaleData;",  // Requires java.util.Locale.
+  "Llibcore/icu/TimeZoneNames;",  // Requires java.util.TimeZone.
   "Llibcore/io/IoUtils;",  // Calls Random.<init> -> System.currentTimeMillis -> FileDescriptor -> OsConstants.initConstants.
-  "Llibcore/io/OsConstants;", // Platform specific.
-  "Llibcore/net/MimeUtils;", // Calls libcore.net.MimeUtils.getContentTypesPropertiesStream -> System.getProperty.
-  "Llibcore/reflect/Types;", // Calls OsConstants.initConstants.
-  "Llibcore/util/ZoneInfo;", // Sub-class of TimeZone.
-  "Llibcore/util/ZoneInfoDB;", // Calls System.getenv -> OsConstants.initConstants.
-  "Lorg/apache/commons/logging/LogFactory;", // Calls System.getProperty.
-  "Lorg/apache/commons/logging/impl/LogFactoryImpl;", // Calls OsConstants.initConstants.
-  "Lorg/apache/harmony/security/fortress/Services;", // Calls ClassLoader.getSystemClassLoader -> System.getProperty.
-  "Lorg/apache/harmony/security/provider/cert/X509CertFactoryImpl;", // Requires java.nio.charsets.Charsets.
-  "Lorg/apache/harmony/security/provider/crypto/RandomBitsSupplier;", // Requires java.io.File.
-  "Lorg/apache/harmony/security/utils/AlgNameMapper;", // Requires java.util.Locale.
-  "Lorg/apache/harmony/security/pkcs10/CertificationRequest;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/pkcs10/CertificationRequestInfo;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/pkcs7/AuthenticatedAttributes;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/pkcs7/SignedData;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/pkcs7/SignerInfo;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/pkcs8/PrivateKeyInfo;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/provider/crypto/SHA1PRNG_SecureRandomImpl;", // Calls OsConstants.initConstants.
-  "Lorg/apache/harmony/security/x501/AttributeTypeAndValue;", // Calls IntegralToString.convertInt -> Thread.currentThread.
-  "Lorg/apache/harmony/security/x501/DirectoryString;", // Requires BigInteger.
-  "Lorg/apache/harmony/security/x501/Name;", // Requires org.apache.harmony.security.x501.AttributeTypeAndValue.
-  "Lorg/apache/harmony/security/x509/AccessDescription;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/AuthorityKeyIdentifier;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/CRLDistributionPoints;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/Certificate;", // Requires org.apache.harmony.security.x509.TBSCertificate.
-  "Lorg/apache/harmony/security/x509/CertificateIssuer;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/CertificateList;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/DistributionPoint;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/DistributionPointName;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/EDIPartyName;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lorg/apache/harmony/security/x509/GeneralName;", // Requires org.apache.harmony.security.x501.Name.
-  "Lorg/apache/harmony/security/x509/GeneralNames;", // Requires GeneralName.
-  "Lorg/apache/harmony/security/x509/GeneralSubtree;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/GeneralSubtrees;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/InfoAccessSyntax;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/IssuingDistributionPoint;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/NameConstraints;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/security/x509/TBSCertList$RevokedCertificate;", // Calls NativeBN.BN_new().
-  "Lorg/apache/harmony/security/x509/TBSCertList;", // Calls Thread.currentThread.
+  "Llibcore/io/OsConstants;",  // Platform specific.
+  "Llibcore/net/MimeUtils;",  // Calls libcore.net.MimeUtils.getContentTypesPropertiesStream -> System.getProperty.
+  "Llibcore/reflect/Types;",  // Calls OsConstants.initConstants.
+  "Llibcore/util/ZoneInfo;",  // Sub-class of TimeZone.
+  "Llibcore/util/ZoneInfoDB;",  // Calls System.getenv -> OsConstants.initConstants.
+  "Lorg/apache/commons/logging/LogFactory;",  // Calls System.getProperty.
+  "Lorg/apache/commons/logging/impl/LogFactoryImpl;",  // Calls OsConstants.initConstants.
+  "Lorg/apache/harmony/security/fortress/Services;",  // Calls ClassLoader.getSystemClassLoader -> System.getProperty.
+  "Lorg/apache/harmony/security/provider/cert/X509CertFactoryImpl;",  // Requires java.nio.charsets.Charsets.
+  "Lorg/apache/harmony/security/provider/crypto/RandomBitsSupplier;",  // Requires java.io.File.
+  "Lorg/apache/harmony/security/utils/AlgNameMapper;",  // Requires java.util.Locale.
+  "Lorg/apache/harmony/security/pkcs10/CertificationRequest;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/pkcs10/CertificationRequestInfo;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/pkcs7/AuthenticatedAttributes;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/pkcs7/SignedData;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/pkcs7/SignerInfo;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/pkcs8/PrivateKeyInfo;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/provider/crypto/SHA1PRNG_SecureRandomImpl;",  // Calls OsConstants.initConstants.
+  "Lorg/apache/harmony/security/x501/AttributeTypeAndValue;",  // Calls IntegralToString.convertInt -> Thread.currentThread.
+  "Lorg/apache/harmony/security/x501/DirectoryString;",  // Requires BigInteger.
+  "Lorg/apache/harmony/security/x501/Name;",  // Requires org.apache.harmony.security.x501.AttributeTypeAndValue.
+  "Lorg/apache/harmony/security/x509/AccessDescription;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/AuthorityKeyIdentifier;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/CRLDistributionPoints;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/Certificate;",  // Requires org.apache.harmony.security.x509.TBSCertificate.
+  "Lorg/apache/harmony/security/x509/CertificateIssuer;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/CertificateList;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/DistributionPoint;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/DistributionPointName;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/EDIPartyName;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lorg/apache/harmony/security/x509/GeneralName;",  // Requires org.apache.harmony.security.x501.Name.
+  "Lorg/apache/harmony/security/x509/GeneralNames;",  // Requires GeneralName.
+  "Lorg/apache/harmony/security/x509/GeneralSubtree;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/GeneralSubtrees;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/InfoAccessSyntax;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/IssuingDistributionPoint;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/NameConstraints;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/security/x509/TBSCertList$RevokedCertificate;",  // Calls NativeBN.BN_new().
+  "Lorg/apache/harmony/security/x509/TBSCertList;",  // Calls Thread.currentThread.
   "Lorg/apache/harmony/security/x509/TBSCertificate;",  // Requires org.apache.harmony.security.x501.Name.
-  "Lorg/apache/harmony/security/x509/Time;", // Calls native ... -> java.math.NativeBN.BN_new().
-  "Lorg/apache/harmony/security/x509/Validity;", // Requires x509.Time.
-  "Lorg/apache/harmony/security/x509/tsp/TSTInfo;", // Calls Thread.currentThread.
-  "Lorg/apache/harmony/xml/ExpatParser;", // Calls native ExpatParser.staticInitialize.
-  "Lorg/apache/harmony/xml/ExpatParser$EntityParser;", // Calls ExpatParser.staticInitialize.
-  "Lorg/apache/http/conn/params/ConnRouteParams;", // Requires java.util.Locale.
-  "Lorg/apache/http/conn/ssl/SSLSocketFactory;", // Calls java.security.Security.getProperty.
-  "Lorg/apache/http/conn/util/InetAddressUtils;", // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
+  "Lorg/apache/harmony/security/x509/Time;",  // Calls native ... -> java.math.NativeBN.BN_new().
+  "Lorg/apache/harmony/security/x509/Validity;",  // Requires x509.Time.
+  "Lorg/apache/harmony/security/x509/tsp/TSTInfo;",  // Calls Thread.currentThread.
+  "Lorg/apache/harmony/xml/ExpatParser;",  // Calls native ExpatParser.staticInitialize.
+  "Lorg/apache/harmony/xml/ExpatParser$EntityParser;",  // Calls ExpatParser.staticInitialize.
+  "Lorg/apache/http/conn/params/ConnRouteParams;",  // Requires java.util.Locale.
+  "Lorg/apache/http/conn/ssl/SSLSocketFactory;",  // Calls java.security.Security.getProperty.
+  "Lorg/apache/http/conn/util/InetAddressUtils;",  // Calls regex.Pattern.compile -..-> regex.Pattern.compileImpl.
 };
 
 static void InitializeClass(const ParallelCompilationManager* manager, size_t class_def_index)
diff --git a/compiler/driver/dex_compilation_unit.cc b/compiler/driver/dex_compilation_unit.cc
index 6ba338a..eb8941b 100644
--- a/compiler/driver/dex_compilation_unit.cc
+++ b/compiler/driver/dex_compilation_unit.cc
@@ -60,4 +60,4 @@
   return symbol_;
 }
 
-} // namespace art
+}  // namespace art
diff --git a/compiler/driver/dex_compilation_unit.h b/compiler/driver/dex_compilation_unit.h
index facc9cb..5bf0086 100644
--- a/compiler/driver/dex_compilation_unit.h
+++ b/compiler/driver/dex_compilation_unit.h
@@ -111,6 +111,6 @@
   std::string symbol_;
 };
 
-} // namespace art
+}  // namespace art
 
 #endif  // ART_COMPILER_DRIVER_DEX_COMPILATION_UNIT_H_
diff --git a/compiler/elf_fixup.cc b/compiler/elf_fixup.cc
index 127bc85..6c090fd 100644
--- a/compiler/elf_fixup.cc
+++ b/compiler/elf_fixup.cc
@@ -62,22 +62,22 @@
 }
 
 // MIPS seems to break the rules d_val vs d_ptr even though their values are between DT_LOPROC and DT_HIPROC
-#define DT_MIPS_RLD_VERSION  0x70000001 // d_val
-#define DT_MIPS_TIME_STAMP   0x70000002 // d_val
-#define DT_MIPS_ICHECKSUM    0x70000003 // d_val
-#define DT_MIPS_IVERSION     0x70000004 // d_val
-#define DT_MIPS_FLAGS        0x70000005 // d_val
-#define DT_MIPS_BASE_ADDRESS 0x70000006 // d_ptr
-#define DT_MIPS_CONFLICT     0x70000008 // d_ptr
-#define DT_MIPS_LIBLIST      0x70000009 // d_ptr
-#define DT_MIPS_LOCAL_GOTNO  0x7000000A // d_val
-#define DT_MIPS_CONFLICTNO   0x7000000B // d_val
-#define DT_MIPS_LIBLISTNO    0x70000010 // d_val
-#define DT_MIPS_SYMTABNO     0x70000011 // d_val
-#define DT_MIPS_UNREFEXTNO   0x70000012 // d_val
-#define DT_MIPS_GOTSYM       0x70000013 // d_val
-#define DT_MIPS_HIPAGENO     0x70000014 // d_val
-#define DT_MIPS_RLD_MAP      0x70000016 // d_ptr
+#define DT_MIPS_RLD_VERSION  0x70000001  // d_val
+#define DT_MIPS_TIME_STAMP   0x70000002  // d_val
+#define DT_MIPS_ICHECKSUM    0x70000003  // d_val
+#define DT_MIPS_IVERSION     0x70000004  // d_val
+#define DT_MIPS_FLAGS        0x70000005  // d_val
+#define DT_MIPS_BASE_ADDRESS 0x70000006  // d_ptr
+#define DT_MIPS_CONFLICT     0x70000008  // d_ptr
+#define DT_MIPS_LIBLIST      0x70000009  // d_ptr
+#define DT_MIPS_LOCAL_GOTNO  0x7000000A  // d_val
+#define DT_MIPS_CONFLICTNO   0x7000000B  // d_val
+#define DT_MIPS_LIBLISTNO    0x70000010  // d_val
+#define DT_MIPS_SYMTABNO     0x70000011  // d_val
+#define DT_MIPS_UNREFEXTNO   0x70000012  // d_val
+#define DT_MIPS_GOTSYM       0x70000013  // d_val
+#define DT_MIPS_HIPAGENO     0x70000014  // d_val
+#define DT_MIPS_RLD_MAP      0x70000016  // d_ptr
 
 bool ElfFixup::FixupDynamic(ElfFile& elf_file, uintptr_t base_address) {
   // TODO: C++0x auto.
diff --git a/compiler/elf_writer_mclinker.h b/compiler/elf_writer_mclinker.h
index bdadf8f..5da178c 100644
--- a/compiler/elf_writer_mclinker.h
+++ b/compiler/elf_writer_mclinker.h
@@ -30,7 +30,7 @@
 class Linker;
 class LinkerConfig;
 class Module;
-} // namespace mcld
+}  // namespace mcld
 
 namespace art {
 
diff --git a/compiler/elf_writer_quick.cc b/compiler/elf_writer_quick.cc
index f2db5d8..29963fe 100644
--- a/compiler/elf_writer_quick.cc
+++ b/compiler/elf_writer_quick.cc
@@ -137,7 +137,7 @@
   // .dynsym
   uint32_t dynsym_alignment = sizeof(llvm::ELF::Elf32_Word);
   uint32_t dynsym_offset = expected_offset = RoundUp(expected_offset, dynsym_alignment);
-  const uint8_t SYM_UNDEF       = 0; // aka STN_UNDEF
+  const uint8_t SYM_UNDEF       = 0;  // aka STN_UNDEF
   const uint8_t SYM_OATDATA     = 1;
   const uint8_t SYM_OATEXEC     = 2;
   const uint8_t SYM_OATLASTWORD = 3;
@@ -510,7 +510,7 @@
   section_headers[SH_HASH].sh_link      = SH_DYNSYM;
   section_headers[SH_HASH].sh_info      = 0;
   section_headers[SH_HASH].sh_addralign = hash_alignment;
-  section_headers[SH_HASH].sh_entsize   = sizeof(llvm::ELF::Elf32_Word); // This is Elf32_Word even on 64-bit
+  section_headers[SH_HASH].sh_entsize   = sizeof(llvm::ELF::Elf32_Word);  // This is Elf32_Word even on 64-bit
 
   section_headers[SH_RODATA].sh_name      = shstrtab_rodata_offset;
   section_headers[SH_RODATA].sh_type      = llvm::ELF::SHT_PROGBITS;
diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc
index 1612f7e..e73d021 100644
--- a/compiler/image_writer.cc
+++ b/compiler/image_writer.cc
@@ -119,7 +119,7 @@
     return false;
   }
 #ifndef NDEBUG
-  { // NOLINT(whitespace/braces)
+  {  // NOLINT(whitespace/braces)
     ScopedObjectAccess soa(Thread::Current());
     CheckNonImageClassesRemoved();
   }
@@ -397,7 +397,7 @@
 
   // leave space for the header, but do not write it yet, we need to
   // know where image_roots is going to end up
-  image_end_ += RoundUp(sizeof(ImageHeader), 8); // 64-bit-alignment
+  image_end_ += RoundUp(sizeof(ImageHeader), 8);  // 64-bit-alignment
 
   {
     WriterMutexLock mu(self, *Locks::heap_bitmap_lock_);
@@ -462,7 +462,7 @@
   DCHECK_LT(offset + n, image_writer->image_->Size());
   memcpy(dst, src, n);
   Object* copy = reinterpret_cast<Object*>(dst);
-  copy->SetField32(Object::MonitorOffset(), 0, false); // We may have inflated the lock during compilation.
+  copy->SetField32(Object::MonitorOffset(), 0, false);  // We may have inflated the lock during compilation.
   image_writer->FixupObject(obj, copy);
 }
 
diff --git a/compiler/jni/portable/jni_compiler.cc b/compiler/jni/portable/jni_compiler.cc
index 0e58378..e05f291 100644
--- a/compiler/jni/portable/jni_compiler.cc
+++ b/compiler/jni/portable/jni_compiler.cc
@@ -148,8 +148,8 @@
 
   // Variables for GetElementPtr
   ::llvm::Value* gep_index[] = {
-    irb_.getInt32(0), // No displacement for shadow frame pointer
-    irb_.getInt32(1), // SIRT
+    irb_.getInt32(0),  // No displacement for shadow frame pointer
+    irb_.getInt32(1),  // SIRT
     NULL,
   };
 
@@ -185,7 +185,7 @@
   }
 
   ::llvm::Value* saved_local_ref_cookie;
-  { // JniMethodStart
+  {  // JniMethodStart
     RuntimeId func_id = is_synchronized ? JniMethodStartSynchronized
                                         : JniMethodStart;
     ::llvm::SmallVector< ::llvm::Value*, 2> args;
@@ -200,7 +200,7 @@
   // Call!!!
   ::llvm::Value* retval = irb_.CreateCall(code_addr, args);
 
-  { // JniMethodEnd
+  {  // JniMethodEnd
     bool is_return_ref = return_shorty == 'L';
     RuntimeId func_id =
         is_return_ref ? (is_synchronized ? JniMethodEndWithReferenceSynchronized
@@ -281,7 +281,7 @@
   // Get argument type
   std::vector< ::llvm::Type*> args_type;
 
-  args_type.push_back(irb_.getJObjectTy()); // method object pointer
+  args_type.push_back(irb_.getJObjectTy());  // method object pointer
 
   if (!is_static || is_native_function) {
     // "this" object pointer for non-static
@@ -296,5 +296,5 @@
   return ::llvm::FunctionType::get(ret_type, args_type, false);
 }
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/backend_types.h b/compiler/llvm/backend_types.h
index 095040e..8ca88dd 100644
--- a/compiler/llvm/backend_types.h
+++ b/compiler/llvm/backend_types.h
@@ -97,8 +97,8 @@
   }
 }
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 
 #endif  // ART_COMPILER_LLVM_BACKEND_TYPES_H_
diff --git a/compiler/llvm/compiler_llvm.cc b/compiler/llvm/compiler_llvm.cc
index 4475b25..6b19a37 100644
--- a/compiler/llvm/compiler_llvm.cc
+++ b/compiler/llvm/compiler_llvm.cc
@@ -57,7 +57,7 @@
   llvm::llvm_start_multithreaded();
 
   // NOTE: Uncomment following line to show the time consumption of LLVM passes
-  //llvm::TimePassesIsEnabled = true;
+  // llvm::TimePassesIsEnabled = true;
 
   // Initialize LLVM target-specific options.
   art::llvm::InitialBackendOptions();
@@ -96,7 +96,7 @@
 // Two reasons: (1) the order of the destruction of static objects, or
 //              (2) dlopen/dlclose side-effect on static objects.
 
-} // anonymous namespace
+}  // anonymous namespace
 
 
 namespace art {
@@ -171,8 +171,8 @@
 }
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 inline static art::llvm::CompilerLLVM* ContextOf(art::CompilerDriver& driver) {
   void *compiler_context = driver.GetCompilerContext();
diff --git a/compiler/llvm/compiler_llvm.h b/compiler/llvm/compiler_llvm.h
index 77841d8..20934ab 100644
--- a/compiler/llvm/compiler_llvm.h
+++ b/compiler/llvm/compiler_llvm.h
@@ -97,7 +97,7 @@
 };
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 #endif  // ART_COMPILER_LLVM_COMPILER_LLVM_H_
diff --git a/compiler/llvm/gbc_expander.cc b/compiler/llvm/gbc_expander.cc
index c990ee6..a727d06 100644
--- a/compiler/llvm/gbc_expander.cc
+++ b/compiler/llvm/gbc_expander.cc
@@ -439,7 +439,7 @@
   shadow_frame_ = NULL;
   old_shadow_frame_ = NULL;
   func_ = &func;
-  changed_ = false; // Assume unchanged
+  changed_ = false;  // Assume unchanged
 
   shadow_frame_vreg_addresses_.resize(dex_compilation_unit_->GetCodeItem()->registers_size_, NULL);
   basic_blocks_.resize(dex_compilation_unit_->GetCodeItem()->insns_size_in_code_units_);
@@ -456,7 +456,7 @@
   }
 
   // Insert stack overflow check
-  InsertStackOverflowCheck(func); // TODO: Use intrinsic.
+  InsertStackOverflowCheck(func);  // TODO: Use intrinsic.
 
   // Rewrite the intrinsics
   RewriteFunction();
@@ -565,7 +565,7 @@
         llvm::PHINode *phi = llvm::dyn_cast<llvm::PHINode>(inst_iter);
 
         if (!phi) {
-          break; // Meet non-phi instruction.  Done.
+          break;  // Meet non-phi instruction.  Done.
         }
 
         if (handler_phi[phi] == NULL) {
@@ -611,7 +611,7 @@
   llvm::TerminatorInst* term_inst = new_basic_block->getTerminator();
 
   if (!term_inst) {
-    return; // No terminating instruction in new_basic_block.  Nothing to do.
+    return;  // No terminating instruction in new_basic_block.  Nothing to do.
   }
 
   // Iterate every succeeding basic block
@@ -627,7 +627,7 @@
       llvm::PHINode *phi = llvm::dyn_cast<llvm::PHINode>(inst_iter);
 
       if (!phi) {
-        break; // Meet non-phi instruction.  Done.
+        break;  // Meet non-phi instruction.  Done.
       }
 
       // Update the incoming block of this phi instruction
@@ -895,7 +895,7 @@
   // Load the actual parameter
   std::vector<llvm::Value*> args;
 
-  args.push_back(callee_method_object_addr); // method object for callee
+  args.push_back(callee_method_object_addr);  // method object for callee
 
   for (uint32_t i = 3; i < call_inst.getNumArgOperands(); ++i) {
     args.push_back(call_inst.getArgOperand(i));
@@ -1378,9 +1378,9 @@
     DCHECK(shadow_frame_ != NULL);
 
     llvm::Value* gep_index[] = {
-      irb_.getInt32(0), // No pointer displacement
-      irb_.getInt32(1), // VRegs
-      entry_idx // Pointer field
+      irb_.getInt32(0),  // No pointer displacement
+      irb_.getInt32(1),  // VRegs
+      entry_idx  // Pointer field
     };
 
     // A shadow frame address must dominate every use in the function so we
@@ -1601,7 +1601,7 @@
 
   llvm::Value* array_elem_addr = EmitArrayGEP(array_addr, index_value, elem_jty);
 
-  if (elem_jty == kObject) { // If put an object, check the type, and mark GC card table.
+  if (elem_jty == kObject) {  // If put an object, check the type, and mark GC card table.
     llvm::Function* runtime_func = irb_.GetRuntime(CheckPutArrayElement);
 
     irb_.CreateCall2(runtime_func, new_value, array_addr);
@@ -1744,7 +1744,7 @@
       irb_.CreateMemoryBarrier(art::kLoadLoad);
     }
 
-    if (field_jty == kObject) { // If put an object, mark the GC card table.
+    if (field_jty == kObject) {  // If put an object, mark the GC card table.
       EmitMarkGCCard(new_value, object_addr);
     }
   }
@@ -2050,7 +2050,7 @@
       irb_.CreateMemoryBarrier(art::kStoreLoad);
     }
 
-    if (field_jty == kObject) { // If put an object, mark the GC card table.
+    if (field_jty == kObject) {  // If put an object, mark the GC card table.
       EmitMarkGCCard(new_value, static_storage_addr);
     }
   }
@@ -2368,8 +2368,8 @@
     const char* type_desc =
         dex_compilation_unit_->GetDexFile()->StringByTypeIdx(type_idx, &type_desc_len);
 
-    DCHECK_GE(type_desc_len, 2u); // should be guaranteed by verifier
-    DCHECK_EQ(type_desc[0], '['); // should be guaranteed by verifier
+    DCHECK_GE(type_desc_len, 2u);  // should be guaranteed by verifier
+    DCHECK_EQ(type_desc[0], '[');  // should be guaranteed by verifier
     bool is_elem_int_ty = (type_desc[1] == 'I');
 
     uint32_t alignment;
@@ -2683,10 +2683,10 @@
   // Get argument type
   std::vector<llvm::Type*> args_type;
 
-  args_type.push_back(irb_.getJObjectTy()); // method object pointer
+  args_type.push_back(irb_.getJObjectTy());  // method object pointer
 
   if (!is_static) {
-    args_type.push_back(irb_.getJType('L')); // "this" object pointer
+    args_type.push_back(irb_.getJType('L'));  // "this" object pointer
   }
 
   for (uint32_t i = 1; i < shorty_size; ++i) {
@@ -2732,11 +2732,11 @@
     } else if (dex_pc >= end) {
       min = mid + 1;
     } else {
-      return mid; // found
+      return mid;  // found
     }
   }
 
-  return -1; // not found
+  return -1;  // not found
 }
 
 llvm::BasicBlock* GBCExpanderPass::GetLandingPadBasicBlock(uint32_t dex_pc) {
@@ -2744,7 +2744,7 @@
   int32_t ti_offset = GetTryItemOffset(dex_pc);
 
   if (ti_offset == -1) {
-    return NULL; // No landing pad is available for this address.
+    return NULL;  // No landing pad is available for this address.
   }
 
   // Check for the existing landing pad basic block
@@ -3783,7 +3783,7 @@
     //==- Unknown Cases ----------------------------------------------------==//
     case IntrinsicHelper::MaxIntrinsicId:
     case IntrinsicHelper::UnknownId:
-    //default:
+    // default:
       // NOTE: "default" is intentionally commented so that C/C++ compiler will
       // give some warning on unmatched cases.
       // NOTE: We should not implement these cases.
@@ -3793,7 +3793,7 @@
   return NULL;
 }  // NOLINT(readability/fn_size)
 
-} // anonymous namespace
+}  // anonymous namespace
 
 namespace art {
 namespace llvm {
@@ -3804,5 +3804,5 @@
   return new GBCExpanderPass(intrinsic_helper, irb, driver, dex_compilation_unit);
 }
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/generated/art_module.cc b/compiler/llvm/generated/art_module.cc
index bcd90b9..f3c5a5a 100644
--- a/compiler/llvm/generated/art_module.cc
+++ b/compiler/llvm/generated/art_module.cc
@@ -380,7 +380,7 @@
 func___art_type_list = Function::Create(
  /*Type=*/FuncTy_0,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"__art_type_list", mod); // (external, no body)
+ /*Name=*/"__art_type_list", mod);  // (external, no body)
 func___art_type_list->setCallingConv(CallingConv::C);
 }
 AttributeSet func___art_type_list_PAL;
@@ -391,7 +391,7 @@
 func_art_portable_get_current_thread_from_code = Function::Create(
  /*Type=*/FuncTy_3,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_get_current_thread_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_get_current_thread_from_code", mod);  // (external, no body)
 func_art_portable_get_current_thread_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_get_current_thread_from_code_PAL;
@@ -402,7 +402,7 @@
 func_art_portable_set_current_thread_from_code = Function::Create(
  /*Type=*/FuncTy_4,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_set_current_thread_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_set_current_thread_from_code", mod);  // (external, no body)
 func_art_portable_set_current_thread_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_set_current_thread_from_code_PAL;
@@ -413,7 +413,7 @@
 func_art_portable_lock_object_from_code = Function::Create(
  /*Type=*/FuncTy_5,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_lock_object_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_lock_object_from_code", mod);  // (external, no body)
 func_art_portable_lock_object_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_lock_object_from_code_PAL;
@@ -424,7 +424,7 @@
 func_art_portable_unlock_object_from_code = Function::Create(
  /*Type=*/FuncTy_5,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_unlock_object_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_unlock_object_from_code", mod);  // (external, no body)
 func_art_portable_unlock_object_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_unlock_object_from_code_PAL;
@@ -435,7 +435,7 @@
 func_art_portable_test_suspend_from_code = Function::Create(
  /*Type=*/FuncTy_6,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_test_suspend_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_test_suspend_from_code", mod);  // (external, no body)
 func_art_portable_test_suspend_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_test_suspend_from_code_PAL;
@@ -446,7 +446,7 @@
 func_art_portable_push_shadow_frame_from_code = Function::Create(
  /*Type=*/FuncTy_7,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_push_shadow_frame_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_push_shadow_frame_from_code", mod);  // (external, no body)
 func_art_portable_push_shadow_frame_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_push_shadow_frame_from_code_PAL;
@@ -457,7 +457,7 @@
 func_art_portable_pop_shadow_frame_from_code = Function::Create(
  /*Type=*/FuncTy_8,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_pop_shadow_frame_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_pop_shadow_frame_from_code", mod);  // (external, no body)
 func_art_portable_pop_shadow_frame_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_pop_shadow_frame_from_code_PAL;
@@ -468,7 +468,7 @@
 func_art_portable_get_and_clear_exception = Function::Create(
  /*Type=*/FuncTy_4,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_get_and_clear_exception", mod); // (external, no body)
+ /*Name=*/"art_portable_get_and_clear_exception", mod);  // (external, no body)
 func_art_portable_get_and_clear_exception->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_get_and_clear_exception_PAL;
@@ -479,7 +479,7 @@
 func_art_portable_throw_div_zero_from_code = Function::Create(
  /*Type=*/FuncTy_9,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_throw_div_zero_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_throw_div_zero_from_code", mod);  // (external, no body)
 func_art_portable_throw_div_zero_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_throw_div_zero_from_code_PAL;
@@ -490,7 +490,7 @@
 func_art_portable_throw_array_bounds_from_code = Function::Create(
  /*Type=*/FuncTy_10,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_throw_array_bounds_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_throw_array_bounds_from_code", mod);  // (external, no body)
 func_art_portable_throw_array_bounds_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_throw_array_bounds_from_code_PAL;
@@ -501,7 +501,7 @@
 func_art_portable_throw_no_such_method_from_code = Function::Create(
  /*Type=*/FuncTy_11,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_throw_no_such_method_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_throw_no_such_method_from_code", mod);  // (external, no body)
 func_art_portable_throw_no_such_method_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_throw_no_such_method_from_code_PAL;
@@ -512,7 +512,7 @@
 func_art_portable_throw_null_pointer_exception_from_code = Function::Create(
  /*Type=*/FuncTy_11,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_throw_null_pointer_exception_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_throw_null_pointer_exception_from_code", mod);  // (external, no body)
 func_art_portable_throw_null_pointer_exception_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_throw_null_pointer_exception_from_code_PAL;
@@ -523,7 +523,7 @@
 func_art_portable_throw_stack_overflow_from_code = Function::Create(
  /*Type=*/FuncTy_9,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_throw_stack_overflow_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_throw_stack_overflow_from_code", mod);  // (external, no body)
 func_art_portable_throw_stack_overflow_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_throw_stack_overflow_from_code_PAL;
@@ -534,7 +534,7 @@
 func_art_portable_throw_exception_from_code = Function::Create(
  /*Type=*/FuncTy_6,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_throw_exception_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_throw_exception_from_code", mod);  // (external, no body)
 func_art_portable_throw_exception_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_throw_exception_from_code_PAL;
@@ -545,7 +545,7 @@
 func_art_portable_find_catch_block_from_code = Function::Create(
  /*Type=*/FuncTy_12,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_find_catch_block_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_find_catch_block_from_code", mod);  // (external, no body)
 func_art_portable_find_catch_block_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_find_catch_block_from_code_PAL;
@@ -556,7 +556,7 @@
 func_art_portable_alloc_object_from_code = Function::Create(
  /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_alloc_object_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_alloc_object_from_code", mod);  // (external, no body)
 func_art_portable_alloc_object_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_alloc_object_from_code_PAL;
@@ -567,7 +567,7 @@
 func_art_portable_alloc_object_from_code_with_access_check = Function::Create(
  /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_alloc_object_from_code_with_access_check", mod); // (external, no body)
+ /*Name=*/"art_portable_alloc_object_from_code_with_access_check", mod);  // (external, no body)
 func_art_portable_alloc_object_from_code_with_access_check->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_alloc_object_from_code_with_access_check_PAL;
@@ -578,7 +578,7 @@
 func_art_portable_alloc_array_from_code = Function::Create(
  /*Type=*/FuncTy_14,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_alloc_array_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_alloc_array_from_code", mod);  // (external, no body)
 func_art_portable_alloc_array_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_alloc_array_from_code_PAL;
@@ -589,7 +589,7 @@
 func_art_portable_alloc_array_from_code_with_access_check = Function::Create(
  /*Type=*/FuncTy_14,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_alloc_array_from_code_with_access_check", mod); // (external, no body)
+ /*Name=*/"art_portable_alloc_array_from_code_with_access_check", mod);  // (external, no body)
 func_art_portable_alloc_array_from_code_with_access_check->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_alloc_array_from_code_with_access_check_PAL;
@@ -600,7 +600,7 @@
 func_art_portable_check_and_alloc_array_from_code = Function::Create(
  /*Type=*/FuncTy_14,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_check_and_alloc_array_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_check_and_alloc_array_from_code", mod);  // (external, no body)
 func_art_portable_check_and_alloc_array_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_check_and_alloc_array_from_code_PAL;
@@ -611,7 +611,7 @@
 func_art_portable_check_and_alloc_array_from_code_with_access_check = Function::Create(
  /*Type=*/FuncTy_14,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_check_and_alloc_array_from_code_with_access_check", mod); // (external, no body)
+ /*Name=*/"art_portable_check_and_alloc_array_from_code_with_access_check", mod);  // (external, no body)
 func_art_portable_check_and_alloc_array_from_code_with_access_check->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_check_and_alloc_array_from_code_with_access_check_PAL;
@@ -622,7 +622,7 @@
 func_art_portable_find_instance_field_from_code = Function::Create(
  /*Type=*/FuncTy_15,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_find_instance_field_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_find_instance_field_from_code", mod);  // (external, no body)
 func_art_portable_find_instance_field_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_find_instance_field_from_code_PAL;
@@ -633,7 +633,7 @@
 func_art_portable_find_static_field_from_code = Function::Create(
  /*Type=*/FuncTy_15,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_find_static_field_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_find_static_field_from_code", mod);  // (external, no body)
 func_art_portable_find_static_field_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_find_static_field_from_code_PAL;
@@ -644,7 +644,7 @@
 func_art_portable_find_static_method_from_code_with_access_check = Function::Create(
  /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_find_static_method_from_code_with_access_check", mod); // (external, no body)
+ /*Name=*/"art_portable_find_static_method_from_code_with_access_check", mod);  // (external, no body)
 func_art_portable_find_static_method_from_code_with_access_check->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_find_static_method_from_code_with_access_check_PAL;
@@ -655,7 +655,7 @@
 func_art_portable_find_direct_method_from_code_with_access_check = Function::Create(
  /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_find_direct_method_from_code_with_access_check", mod); // (external, no body)
+ /*Name=*/"art_portable_find_direct_method_from_code_with_access_check", mod);  // (external, no body)
 func_art_portable_find_direct_method_from_code_with_access_check->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_find_direct_method_from_code_with_access_check_PAL;
@@ -666,7 +666,7 @@
 func_art_portable_find_virtual_method_from_code_with_access_check = Function::Create(
  /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_find_virtual_method_from_code_with_access_check", mod); // (external, no body)
+ /*Name=*/"art_portable_find_virtual_method_from_code_with_access_check", mod);  // (external, no body)
 func_art_portable_find_virtual_method_from_code_with_access_check->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_find_virtual_method_from_code_with_access_check_PAL;
@@ -677,7 +677,7 @@
 func_art_portable_find_super_method_from_code_with_access_check = Function::Create(
  /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_find_super_method_from_code_with_access_check", mod); // (external, no body)
+ /*Name=*/"art_portable_find_super_method_from_code_with_access_check", mod);  // (external, no body)
 func_art_portable_find_super_method_from_code_with_access_check->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_find_super_method_from_code_with_access_check_PAL;
@@ -688,7 +688,7 @@
 func_art_portable_find_interface_method_from_code_with_access_check = Function::Create(
  /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_find_interface_method_from_code_with_access_check", mod); // (external, no body)
+ /*Name=*/"art_portable_find_interface_method_from_code_with_access_check", mod);  // (external, no body)
 func_art_portable_find_interface_method_from_code_with_access_check->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_find_interface_method_from_code_with_access_check_PAL;
@@ -699,7 +699,7 @@
 func_art_portable_find_interface_method_from_code = Function::Create(
  /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_find_interface_method_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_find_interface_method_from_code", mod);  // (external, no body)
 func_art_portable_find_interface_method_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_find_interface_method_from_code_PAL;
@@ -710,7 +710,7 @@
 func_art_portable_initialize_static_storage_from_code = Function::Create(
  /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_initialize_static_storage_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_initialize_static_storage_from_code", mod);  // (external, no body)
 func_art_portable_initialize_static_storage_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_initialize_static_storage_from_code_PAL;
@@ -721,7 +721,7 @@
 func_art_portable_initialize_type_from_code = Function::Create(
  /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_initialize_type_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_initialize_type_from_code", mod);  // (external, no body)
 func_art_portable_initialize_type_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_initialize_type_from_code_PAL;
@@ -732,7 +732,7 @@
 func_art_portable_initialize_type_and_verify_access_from_code = Function::Create(
  /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_initialize_type_and_verify_access_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_initialize_type_and_verify_access_from_code", mod);  // (external, no body)
 func_art_portable_initialize_type_and_verify_access_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_initialize_type_and_verify_access_from_code_PAL;
@@ -743,7 +743,7 @@
 func_art_portable_resolve_string_from_code = Function::Create(
  /*Type=*/FuncTy_17,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_resolve_string_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_resolve_string_from_code", mod);  // (external, no body)
 func_art_portable_resolve_string_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_resolve_string_from_code_PAL;
@@ -754,7 +754,7 @@
 func_art_portable_set32_static_from_code = Function::Create(
  /*Type=*/FuncTy_18,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_set32_static_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_set32_static_from_code", mod);  // (external, no body)
 func_art_portable_set32_static_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_set32_static_from_code_PAL;
@@ -765,7 +765,7 @@
 func_art_portable_set64_static_from_code = Function::Create(
  /*Type=*/FuncTy_19,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_set64_static_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_set64_static_from_code", mod);  // (external, no body)
 func_art_portable_set64_static_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_set64_static_from_code_PAL;
@@ -776,7 +776,7 @@
 func_art_portable_set_obj_static_from_code = Function::Create(
  /*Type=*/FuncTy_20,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_set_obj_static_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_set_obj_static_from_code", mod);  // (external, no body)
 func_art_portable_set_obj_static_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_set_obj_static_from_code_PAL;
@@ -787,7 +787,7 @@
 func_art_portable_get32_static_from_code = Function::Create(
  /*Type=*/FuncTy_21,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_get32_static_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_get32_static_from_code", mod);  // (external, no body)
 func_art_portable_get32_static_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_get32_static_from_code_PAL;
@@ -798,7 +798,7 @@
 func_art_portable_get64_static_from_code = Function::Create(
  /*Type=*/FuncTy_22,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_get64_static_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_get64_static_from_code", mod);  // (external, no body)
 func_art_portable_get64_static_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_get64_static_from_code_PAL;
@@ -809,7 +809,7 @@
 func_art_portable_get_obj_static_from_code = Function::Create(
  /*Type=*/FuncTy_23,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_get_obj_static_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_get_obj_static_from_code", mod);  // (external, no body)
 func_art_portable_get_obj_static_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_get_obj_static_from_code_PAL;
@@ -820,7 +820,7 @@
 func_art_portable_set32_instance_from_code = Function::Create(
  /*Type=*/FuncTy_24,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_set32_instance_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_set32_instance_from_code", mod);  // (external, no body)
 func_art_portable_set32_instance_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_set32_instance_from_code_PAL;
@@ -831,7 +831,7 @@
 func_art_portable_set64_instance_from_code = Function::Create(
  /*Type=*/FuncTy_25,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_set64_instance_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_set64_instance_from_code", mod);  // (external, no body)
 func_art_portable_set64_instance_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_set64_instance_from_code_PAL;
@@ -842,7 +842,7 @@
 func_art_portable_set_obj_instance_from_code = Function::Create(
  /*Type=*/FuncTy_26,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_set_obj_instance_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_set_obj_instance_from_code", mod);  // (external, no body)
 func_art_portable_set_obj_instance_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_set_obj_instance_from_code_PAL;
@@ -853,7 +853,7 @@
 func_art_portable_get32_instance_from_code = Function::Create(
  /*Type=*/FuncTy_20,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_get32_instance_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_get32_instance_from_code", mod);  // (external, no body)
 func_art_portable_get32_instance_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_get32_instance_from_code_PAL;
@@ -864,7 +864,7 @@
 func_art_portable_get64_instance_from_code = Function::Create(
  /*Type=*/FuncTy_27,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_get64_instance_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_get64_instance_from_code", mod);  // (external, no body)
 func_art_portable_get64_instance_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_get64_instance_from_code_PAL;
@@ -875,7 +875,7 @@
 func_art_portable_get_obj_instance_from_code = Function::Create(
  /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_get_obj_instance_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_get_obj_instance_from_code", mod);  // (external, no body)
 func_art_portable_get_obj_instance_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_get_obj_instance_from_code_PAL;
@@ -886,7 +886,7 @@
 func_art_portable_decode_jobject_in_thread = Function::Create(
  /*Type=*/FuncTy_28,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_decode_jobject_in_thread", mod); // (external, no body)
+ /*Name=*/"art_portable_decode_jobject_in_thread", mod);  // (external, no body)
 func_art_portable_decode_jobject_in_thread->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_decode_jobject_in_thread_PAL;
@@ -897,7 +897,7 @@
 func_art_portable_fill_array_data_from_code = Function::Create(
  /*Type=*/FuncTy_29,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_fill_array_data_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_fill_array_data_from_code", mod);  // (external, no body)
 func_art_portable_fill_array_data_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_fill_array_data_from_code_PAL;
@@ -908,7 +908,7 @@
 func_art_portable_is_assignable_from_code = Function::Create(
  /*Type=*/FuncTy_30,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_is_assignable_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_is_assignable_from_code", mod);  // (external, no body)
 func_art_portable_is_assignable_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_is_assignable_from_code_PAL;
@@ -919,7 +919,7 @@
 func_art_portable_check_cast_from_code = Function::Create(
  /*Type=*/FuncTy_5,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_check_cast_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_check_cast_from_code", mod);  // (external, no body)
 func_art_portable_check_cast_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_check_cast_from_code_PAL;
@@ -930,7 +930,7 @@
 func_art_portable_check_put_array_element_from_code = Function::Create(
  /*Type=*/FuncTy_5,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_check_put_array_element_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_check_put_array_element_from_code", mod);  // (external, no body)
 func_art_portable_check_put_array_element_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_check_put_array_element_from_code_PAL;
@@ -941,7 +941,7 @@
 func_art_d2l = Function::Create(
  /*Type=*/FuncTy_31,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_d2l", mod); // (external, no body)
+ /*Name=*/"art_d2l", mod);  // (external, no body)
 func_art_d2l->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_d2l_PAL;
@@ -952,7 +952,7 @@
 func_art_d2i = Function::Create(
  /*Type=*/FuncTy_32,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_d2i", mod); // (external, no body)
+ /*Name=*/"art_d2i", mod);  // (external, no body)
 func_art_d2i->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_d2i_PAL;
@@ -963,7 +963,7 @@
 func_art_f2l = Function::Create(
  /*Type=*/FuncTy_33,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_f2l", mod); // (external, no body)
+ /*Name=*/"art_f2l", mod);  // (external, no body)
 func_art_f2l->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_f2l_PAL;
@@ -974,7 +974,7 @@
 func_art_f2i = Function::Create(
  /*Type=*/FuncTy_34,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_f2i", mod); // (external, no body)
+ /*Name=*/"art_f2i", mod);  // (external, no body)
 func_art_f2i->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_f2i_PAL;
@@ -985,7 +985,7 @@
 func_art_portable_jni_method_start = Function::Create(
  /*Type=*/FuncTy_35,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_jni_method_start", mod); // (external, no body)
+ /*Name=*/"art_portable_jni_method_start", mod);  // (external, no body)
 func_art_portable_jni_method_start->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_jni_method_start_PAL;
@@ -996,7 +996,7 @@
 func_art_portable_jni_method_start_synchronized = Function::Create(
  /*Type=*/FuncTy_30,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_jni_method_start_synchronized", mod); // (external, no body)
+ /*Name=*/"art_portable_jni_method_start_synchronized", mod);  // (external, no body)
 func_art_portable_jni_method_start_synchronized->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_jni_method_start_synchronized_PAL;
@@ -1007,7 +1007,7 @@
 func_art_portable_jni_method_end = Function::Create(
  /*Type=*/FuncTy_15,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_jni_method_end", mod); // (external, no body)
+ /*Name=*/"art_portable_jni_method_end", mod);  // (external, no body)
 func_art_portable_jni_method_end->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_jni_method_end_PAL;
@@ -1018,7 +1018,7 @@
 func_art_portable_jni_method_end_synchronized = Function::Create(
  /*Type=*/FuncTy_36,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_jni_method_end_synchronized", mod); // (external, no body)
+ /*Name=*/"art_portable_jni_method_end_synchronized", mod);  // (external, no body)
 func_art_portable_jni_method_end_synchronized->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_jni_method_end_synchronized_PAL;
@@ -1029,7 +1029,7 @@
 func_art_portable_jni_method_end_with_reference = Function::Create(
  /*Type=*/FuncTy_37,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_jni_method_end_with_reference", mod); // (external, no body)
+ /*Name=*/"art_portable_jni_method_end_with_reference", mod);  // (external, no body)
 func_art_portable_jni_method_end_with_reference->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_jni_method_end_with_reference_PAL;
@@ -1040,7 +1040,7 @@
 func_art_portable_jni_method_end_with_reference_synchronized = Function::Create(
  /*Type=*/FuncTy_38,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_jni_method_end_with_reference_synchronized", mod); // (external, no body)
+ /*Name=*/"art_portable_jni_method_end_with_reference_synchronized", mod);  // (external, no body)
 func_art_portable_jni_method_end_with_reference_synchronized->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_jni_method_end_with_reference_synchronized_PAL;
@@ -1051,7 +1051,7 @@
 func_art_portable_is_exception_pending_from_code = Function::Create(
  /*Type=*/FuncTy_39,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_is_exception_pending_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_is_exception_pending_from_code", mod);  // (external, no body)
 func_art_portable_is_exception_pending_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_is_exception_pending_from_code_PAL;
@@ -1062,7 +1062,7 @@
 func_art_portable_mark_gc_card_from_code = Function::Create(
  /*Type=*/FuncTy_5,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_mark_gc_card_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_mark_gc_card_from_code", mod);  // (external, no body)
 func_art_portable_mark_gc_card_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_mark_gc_card_from_code_PAL;
@@ -1073,7 +1073,7 @@
 func_art_portable_proxy_invoke_handler_from_code = Function::Create(
  /*Type=*/FuncTy_40,
  /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_portable_proxy_invoke_handler_from_code", mod); // (external, no body)
+ /*Name=*/"art_portable_proxy_invoke_handler_from_code", mod);  // (external, no body)
 func_art_portable_proxy_invoke_handler_from_code->setCallingConv(CallingConv::C);
 }
 AttributeSet func_art_portable_proxy_invoke_handler_from_code_PAL;
@@ -1092,5 +1092,5 @@
 
 }
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/intrinsic_helper.cc b/compiler/llvm/intrinsic_helper.cc
index a34cb33..e5e7998 100644
--- a/compiler/llvm/intrinsic_helper.cc
+++ b/compiler/llvm/intrinsic_helper.cc
@@ -174,5 +174,5 @@
   return;
 }
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/intrinsic_helper.h b/compiler/llvm/intrinsic_helper.h
index bb123fd..657db40 100644
--- a/compiler/llvm/intrinsic_helper.h
+++ b/compiler/llvm/intrinsic_helper.h
@@ -151,7 +151,7 @@
   ::llvm::DenseMap<const ::llvm::Function*, IntrinsicId> intrinsic_funcs_map_;
 };
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 #endif  // ART_COMPILER_LLVM_INTRINSIC_HELPER_H_
diff --git a/compiler/llvm/ir_builder.cc b/compiler/llvm/ir_builder.cc
index a65cf2b..9644ebd 100644
--- a/compiler/llvm/ir_builder.cc
+++ b/compiler/llvm/ir_builder.cc
@@ -126,5 +126,5 @@
 }
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/ir_builder.h b/compiler/llvm/ir_builder.h
index c81ba27..03498ef 100644
--- a/compiler/llvm/ir_builder.h
+++ b/compiler/llvm/ir_builder.h
@@ -482,7 +482,7 @@
 };
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 #endif  // ART_COMPILER_LLVM_IR_BUILDER_H_
diff --git a/compiler/llvm/llvm_compilation_unit.cc b/compiler/llvm/llvm_compilation_unit.cc
index d4568b5..9296fc7 100644
--- a/compiler/llvm/llvm_compilation_unit.cc
+++ b/compiler/llvm/llvm_compilation_unit.cc
@@ -134,7 +134,7 @@
 
 
 LlvmCompilationUnit::~LlvmCompilationUnit() {
-  ::llvm::LLVMContext* llvm_context = context_.release(); // Managed by llvm_info_
+  ::llvm::LLVMContext* llvm_context = context_.release();  // Managed by llvm_info_
   CHECK(llvm_context != NULL);
 }
 
@@ -274,9 +274,9 @@
   ::llvm::PassManagerBuilder pm_builder;
   // TODO: Use inliner after we can do IPO.
   pm_builder.Inliner = NULL;
-  //pm_builder.Inliner = ::llvm::createFunctionInliningPass();
-  //pm_builder.Inliner = ::llvm::createAlwaysInlinerPass();
-  //pm_builder.Inliner = ::llvm::createPartialInliningPass();
+  // pm_builder.Inliner = ::llvm::createFunctionInliningPass();
+  // pm_builder.Inliner = ::llvm::createAlwaysInlinerPass();
+  // pm_builder.Inliner = ::llvm::createPartialInliningPass();
   pm_builder.OptLevel = 3;
   pm_builder.DisableSimplifyLibCalls = 1;
   pm_builder.DisableUnitAtATime = 1;
@@ -338,5 +338,5 @@
 }
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/llvm_compilation_unit.h b/compiler/llvm/llvm_compilation_unit.h
index 9de1323..ced9f81 100644
--- a/compiler/llvm/llvm_compilation_unit.h
+++ b/compiler/llvm/llvm_compilation_unit.h
@@ -109,7 +109,7 @@
   UniquePtr< ::llvm::LLVMContext> context_;
   UniquePtr<IRBuilder> irb_;
   UniquePtr<RuntimeSupportBuilder> runtime_support_;
-  ::llvm::Module* module_; // Managed by context_
+  ::llvm::Module* module_;  // Managed by context_
   UniquePtr<IntrinsicHelper> intrinsic_helper_;
   UniquePtr<LLVMInfo> llvm_info_;
   CompilerDriver* driver_;
@@ -132,7 +132,7 @@
   friend class CompilerLLVM;  // For LlvmCompilationUnit constructor
 };
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 #endif  // ART_COMPILER_LLVM_LLVM_COMPILATION_UNIT_H_
diff --git a/compiler/llvm/md_builder.cc b/compiler/llvm/md_builder.cc
index 1bd76dd..4331557 100644
--- a/compiler/llvm/md_builder.cc
+++ b/compiler/llvm/md_builder.cc
@@ -113,5 +113,5 @@
 }
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/md_builder.h b/compiler/llvm/md_builder.h
index 65c52c9..1246f9b 100644
--- a/compiler/llvm/md_builder.h
+++ b/compiler/llvm/md_builder.h
@@ -65,7 +65,7 @@
 };
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 #endif  // ART_COMPILER_LLVM_MD_BUILDER_H_
diff --git a/compiler/llvm/runtime_support_builder.cc b/compiler/llvm/runtime_support_builder.cc
index e6479e0..7299803 100644
--- a/compiler/llvm/runtime_support_builder.cc
+++ b/compiler/llvm/runtime_support_builder.cc
@@ -276,5 +276,5 @@
 }
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/runtime_support_builder.h b/compiler/llvm/runtime_support_builder.h
index c3c0856..e92ac0a 100644
--- a/compiler/llvm/runtime_support_builder.h
+++ b/compiler/llvm/runtime_support_builder.h
@@ -92,7 +92,7 @@
 };
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 #endif  // ART_COMPILER_LLVM_RUNTIME_SUPPORT_BUILDER_H_
diff --git a/compiler/llvm/runtime_support_builder_arm.cc b/compiler/llvm/runtime_support_builder_arm.cc
index 5a9d2b8..569d825 100644
--- a/compiler/llvm/runtime_support_builder_arm.cc
+++ b/compiler/llvm/runtime_support_builder_arm.cc
@@ -52,7 +52,7 @@
   }
 }
 
-} // namespace
+}  // namespace
 
 namespace art {
 namespace llvm {
@@ -135,5 +135,5 @@
   irb_.CreateCall(func);
 }
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/runtime_support_builder_arm.h b/compiler/llvm/runtime_support_builder_arm.h
index 6aa23b2..5a353d7 100644
--- a/compiler/llvm/runtime_support_builder_arm.h
+++ b/compiler/llvm/runtime_support_builder_arm.h
@@ -40,7 +40,7 @@
   virtual void EmitUnlockObject(::llvm::Value* object);
 };
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 #endif  // ART_COMPILER_LLVM_RUNTIME_SUPPORT_BUILDER_ARM_H_
diff --git a/compiler/llvm/runtime_support_builder_thumb2.cc b/compiler/llvm/runtime_support_builder_thumb2.cc
index b8a5f05..f0cb4a2 100644
--- a/compiler/llvm/runtime_support_builder_thumb2.cc
+++ b/compiler/llvm/runtime_support_builder_thumb2.cc
@@ -77,7 +77,7 @@
   irb_.CreateBr(basic_block_cont);
 
   irb_.SetInsertPoint(basic_block_cont);
-  { // Memory barrier
+  {  // Memory barrier
     FunctionType* asm_ty = FunctionType::get(/*Result=*/Type::getVoidTy(context_),
                                               /*isVarArg=*/false);
     InlineAsm* func = InlineAsm::get(asm_ty, "dmb sy", "", true);
@@ -86,5 +86,5 @@
 }
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/runtime_support_builder_thumb2.h b/compiler/llvm/runtime_support_builder_thumb2.h
index 941bd6b..c47a274 100644
--- a/compiler/llvm/runtime_support_builder_thumb2.h
+++ b/compiler/llvm/runtime_support_builder_thumb2.h
@@ -31,7 +31,7 @@
   virtual void EmitLockObject(::llvm::Value* object);
 };
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 #endif  // ART_COMPILER_LLVM_RUNTIME_SUPPORT_BUILDER_THUMB2_H_
diff --git a/compiler/llvm/runtime_support_builder_x86.cc b/compiler/llvm/runtime_support_builder_x86.cc
index c056e58..3d11f9d 100644
--- a/compiler/llvm/runtime_support_builder_x86.cc
+++ b/compiler/llvm/runtime_support_builder_x86.cc
@@ -80,5 +80,5 @@
 }
 
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
diff --git a/compiler/llvm/runtime_support_builder_x86.h b/compiler/llvm/runtime_support_builder_x86.h
index 831d022..5f36e7c 100644
--- a/compiler/llvm/runtime_support_builder_x86.h
+++ b/compiler/llvm/runtime_support_builder_x86.h
@@ -36,7 +36,7 @@
   virtual ::llvm::Value* EmitSetCurrentThread(::llvm::Value* thread);
 };
 
-} // namespace llvm
-} // namespace art
+}  // namespace llvm
+}  // namespace art
 
 #endif  // ART_COMPILER_LLVM_RUNTIME_SUPPORT_BUILDER_X86_H_
diff --git a/compiler/llvm/runtime_support_llvm_func.h b/compiler/llvm/runtime_support_llvm_func.h
index c0e76ad..2634c68 100644
--- a/compiler/llvm/runtime_support_llvm_func.h
+++ b/compiler/llvm/runtime_support_llvm_func.h
@@ -31,8 +31,8 @@
     MAX_ID
   };
 
-} // namespace runtime_support
-} // namespace llvm
-} // namespace art
+}  // namespace runtime_support
+}  // namespace llvm
+}  // namespace art
 
 #endif  // ART_COMPILER_LLVM_RUNTIME_SUPPORT_LLVM_FUNC_H_
diff --git a/compiler/sea_ir/code_gen.cc b/compiler/sea_ir/code_gen.cc
index 41bf9a6..f359849 100644
--- a/compiler/sea_ir/code_gen.cc
+++ b/compiler/sea_ir/code_gen.cc
@@ -111,7 +111,7 @@
 
 void CodeGenVisitor::Visit(InstructionNode* instruction) {
   std::string instr = instruction->GetInstruction()->DumpString(NULL);
-  DCHECK(0); // This whole function is useful only during development.
+  DCHECK(0);  // This whole function is useful only during development.
 }
 void CodeGenVisitor::Visit(ConstInstructionNode* instruction) {
   std::string instr = instruction->GetInstruction()->DumpString(NULL);
@@ -270,4 +270,4 @@
   DCHECK_EQ(signature->GetDefinitions().size(), 1u) << "Signature nodes must correspond to a single parameter register.";
 }
 
-} // end namespace sea_ir
+}  // namespace sea_ir
diff --git a/compiler/sea_ir/code_gen.h b/compiler/sea_ir/code_gen.h
index 0f0b2f7..aba8d5c 100644
--- a/compiler/sea_ir/code_gen.h
+++ b/compiler/sea_ir/code_gen.h
@@ -103,7 +103,7 @@
   void Visit(ConstInstructionNode* instruction) { }
   void Visit(ReturnInstructionNode* instruction) { }
   void Visit(IfNeInstructionNode* instruction) { }
-  //void Visit(AddIntLitInstructionNode* instruction) { }
+  // void Visit(AddIntLitInstructionNode* instruction) { }
   void Visit(MoveResultInstructionNode* instruction) { }
   void Visit(InvokeStaticInstructionNode* instruction) { }
   void Visit(AddIntInstructionNode* instruction) { }
@@ -122,7 +122,7 @@
   void Visit(ConstInstructionNode* instruction) { }
   void Visit(ReturnInstructionNode* instruction) { }
   void Visit(IfNeInstructionNode* instruction) { }
-  //void Visit(AddIntLitInstructionNode* instruction) { }
+  // void Visit(AddIntLitInstructionNode* instruction) { }
   void Visit(MoveResultInstructionNode* instruction) { }
   void Visit(InvokeStaticInstructionNode* instruction) { }
   void Visit(AddIntInstructionNode* instruction) { }
@@ -141,7 +141,7 @@
   void Visit(ConstInstructionNode* instruction);
   void Visit(ReturnInstructionNode* instruction);
   void Visit(IfNeInstructionNode* instruction);
-  //void Visit(AddIntLitInstructionNode* instruction);
+  // void Visit(AddIntLitInstructionNode* instruction);
   void Visit(MoveResultInstructionNode* instruction);
   void Visit(InvokeStaticInstructionNode* instruction);
   void Visit(AddIntInstructionNode* instruction);
@@ -149,5 +149,5 @@
   void Visit(IfEqzInstructionNode* instruction);
   void Visit(PhiInstructionNode* region) { }
 };
-} // end namespace sea_ir
+}  // namespace sea_ir
 #endif  // ART_COMPILER_SEA_IR_CODE_GEN_H_
diff --git a/compiler/sea_ir/frontend.cc b/compiler/sea_ir/frontend.cc
index bae3cb2..8fc1cf8 100644
--- a/compiler/sea_ir/frontend.cc
+++ b/compiler/sea_ir/frontend.cc
@@ -62,7 +62,7 @@
 #if defined(ART_USE_PORTABLE_COMPILER)
                        , llvm_compilation_unit
 #endif
-                       ); // NOLINT
+                       );  // NOLINT
 }
 
 extern "C" art::CompiledMethod*
@@ -79,4 +79,4 @@
 }
 #endif
 
-} // end namespace art
+}  // namespace art
diff --git a/compiler/sea_ir/instruction_nodes.h b/compiler/sea_ir/instruction_nodes.h
index f6d2dd8..5c9cfe1 100644
--- a/compiler/sea_ir/instruction_nodes.h
+++ b/compiler/sea_ir/instruction_nodes.h
@@ -144,7 +144,7 @@
         std::stringstream ss;
         ss << def_it->first;
         result.append(ss.str());
-        result += "\"] ; // ssa edge\n";
+        result += "\"] ;  // ssa edge\n";
       }
     }
   }
@@ -179,7 +179,7 @@
  public:
   explicit MoveResultInstructionNode(const art::Instruction* inst): InstructionNode(inst) { }
   std::vector<int> GetUses() {
-    std::vector<int> uses; // Using vector<> instead of set<> because order matters.
+    std::vector<int> uses;  // Using vector<> instead of set<> because order matters.
     uses.push_back(RETURN_REGISTER);
     return uses;
   }
@@ -246,5 +246,5 @@
     v->Traverse(this);
   }
 };
-} // end namespace sea_ir
+}  // namespace sea_ir
 #endif  // ART_COMPILER_SEA_IR_INSTRUCTION_NODES_H_
diff --git a/compiler/sea_ir/instruction_tools.cc b/compiler/sea_ir/instruction_tools.cc
index 5433591..9627497 100644
--- a/compiler/sea_ir/instruction_tools.cc
+++ b/compiler/sea_ir/instruction_tools.cc
@@ -794,4 +794,4 @@
   // FF UNUSED_FF
   DF_NOP
 };
-} // end namespace sea_ir
+}  // namespace sea_ir
diff --git a/compiler/sea_ir/instruction_tools.h b/compiler/sea_ir/instruction_tools.h
index 0c22753..d387100 100644
--- a/compiler/sea_ir/instruction_tools.h
+++ b/compiler/sea_ir/instruction_tools.h
@@ -121,5 +121,5 @@
   static bool IsDefinition(const art::Instruction* instruction);
   static const int instruction_attributes_[];
 };
-} // end namespace sea_ir
+}  // namespace sea_ir
 #endif  // ART_COMPILER_SEA_IR_INSTRUCTION_TOOLS_H_
diff --git a/compiler/sea_ir/sea.cc b/compiler/sea_ir/sea.cc
index d1db7b6..3488afd 100644
--- a/compiler/sea_ir/sea.cc
+++ b/compiler/sea_ir/sea.cc
@@ -153,16 +153,16 @@
   while (finger1 != finger2) {
     while (finger1->GetRPO() > finger2->GetRPO()) {
       DCHECK(NULL != finger1);
-      finger1 = finger1->GetIDominator(); // should have: finger1 != NULL
+      finger1 = finger1->GetIDominator();  // should have: finger1 != NULL
       DCHECK(NULL != finger1);
     }
     while (finger1->GetRPO() < finger2->GetRPO()) {
       DCHECK(NULL != finger2);
-      finger2 = finger2->GetIDominator(); // should have: finger1 != NULL
+      finger2 = finger2->GetIDominator();  // should have: finger1 != NULL
       DCHECK(NULL != finger2);
     }
   }
-  return finger1; // finger1 should be equal to finger2 at this point.
+  return finger1;  // finger1 should be equal to finger2 at this point.
 }
 
 void SeaGraph::ComputeDownExposedDefs() {
@@ -248,7 +248,7 @@
         int32_t offset = inst->GetTargetOffset();
         std::map<const uint16_t*, Region*>::iterator it = target_regions.find(&code[i + offset]);
         DCHECK(it != target_regions.end());
-        AddEdge(r, it->second); // Add edge to branch target.
+        AddEdge(r, it->second);  // Add edge to branch target.
       }
 
       std::map<const uint16_t*, Region*>::iterator it = target_regions.find(&code[i]);
@@ -257,7 +257,7 @@
         Region* nextRegion = it->second;
         if (last_node->GetInstruction()->IsBranch()
             && last_node->GetInstruction()->CanFlowThrough()) {
-          AddEdge(r, it->second); // Add flow-through edge.
+          AddEdge(r, it->second);  // Add flow-through edge.
         }
         r = nextRegion;
       }
@@ -421,7 +421,7 @@
   uint32_t class_def_idx, uint32_t method_idx, const art::DexFile& dex_file) {
   // Two passes: Builds the intermediate structure (non-SSA) of the sea-ir for the function.
   BuildMethodSeaGraph(code_item, dex_file, class_def_idx, method_idx);
-  //Pass: Compute reverse post-order of regions.
+  // Pass: Compute reverse post-order of regions.
   ComputeRPO();
   // Multiple passes: compute immediate dominators.
   ComputeIDominators();
@@ -502,14 +502,14 @@
   for (std::vector<PhiInstructionNode*>::const_iterator cit = phi_instructions_.begin();
       cit != phi_instructions_.end(); cit++) {
     (*cit)->ToDot(result);
-    result += StringId() + " -> " + (*cit)->StringId() + "; // phi-function \n";
+    result += StringId() + " -> " + (*cit)->StringId() + ";  // phi-function \n";
   }
 
   // Save instruction nodes.
   for (std::vector<InstructionNode*>::const_iterator cit = instructions_.begin();
       cit != instructions_.end(); cit++) {
     (*cit)->ToDot(result);
-    result += StringId() + " -> " + (*cit)->StringId() + "; // region -> instruction \n";
+    result += StringId() + " -> " + (*cit)->StringId() + ";  // region -> instruction \n";
   }
 
   for (std::vector<Region*>::const_iterator cit = successors_.begin(); cit != successors_.end();
@@ -527,14 +527,14 @@
         reaching_set_it++) {
       result += (*reaching_set_it)->StringId() +
          " -> " + StringId() +
-         " [style=dotted]; // Reaching def.\n";
+         " [style=dotted];  // Reaching def.\n";
     }
   }
   // Save dominance frontier.
   for (std::set<Region*>::const_iterator cit = df_.begin(); cit != df_.end(); cit++) {
     result += StringId() +
         " -> " + (*cit)->StringId() +
-        " [color=gray]; // Dominance frontier.\n";
+        " [color=gray];  // Dominance frontier.\n";
   }
   result += "// End Region.\n";
 }
@@ -711,7 +711,7 @@
     if (NULL != def_it->second) {
       result += def_it->second->StringId() + " -> " + StringId() +"[color=red,label=\"";
       result += art::StringPrintf("%d", def_it->first);
-      result += "\"] ; // ssa edge\n";
+      result += "\"] ;  // ssa edge\n";
     }
   }
 }
@@ -740,7 +740,7 @@
 }
 
 std::vector<int> InstructionNode::GetUses() {
-  std::vector<int> uses; // Using vector<> instead of set<> because order matters.
+  std::vector<int> uses;  // Using vector<> instead of set<> because order matters.
   if (!InstructionTools::IsDefinition(instruction_) && (instruction_->HasVRegA())) {
     int vA = instruction_->VRegA();
     uses.push_back(vA);
@@ -770,8 +770,8 @@
         def_it != defs_from_pred->end(); def_it++) {
         result += (*def_it)->StringId() + " -> " + StringId() +"[color=red,label=\"vR = ";
         result += art::StringPrintf("%d", GetRegisterNumber());
-        result += "\"] ; // phi-ssa edge\n";
+        result += "\"] ;  // phi-ssa edge\n";
     }
   }
 }
-} // end namespace sea_ir
+}  // namespace sea_ir
diff --git a/compiler/sea_ir/sea.h b/compiler/sea_ir/sea.h
index a0a8086..25ab1fe 100644
--- a/compiler/sea_ir/sea.h
+++ b/compiler/sea_ir/sea.h
@@ -256,7 +256,7 @@
   static void ComputeRPO(Region* crt_bb, int& crt_rpo);
   // Returns the "lowest common ancestor" of @i and @j in the dominator tree.
   static Region* Intersect(Region* i, Region* j);
-  //Returns the vector of parameters of the function.
+  // Returns the vector of parameters of the function.
   std::vector<SignatureNode*>* GetParameterNodes() {
     return &parameters_;
   }
@@ -320,5 +320,5 @@
   std::vector<Region*> regions_;
   std::vector<SignatureNode*> parameters_;
 };
-} // end namespace sea_ir
+}  // namespace sea_ir
 #endif  // ART_COMPILER_SEA_IR_SEA_H_
diff --git a/compiler/sea_ir/sea_node.h b/compiler/sea_ir/sea_node.h
index efc1b0d..5d28f8a 100644
--- a/compiler/sea_ir/sea_node.h
+++ b/compiler/sea_ir/sea_node.h
@@ -76,5 +76,5 @@
   // operators because that would lead to duplication of their unique ids.
   DISALLOW_COPY_AND_ASSIGN(SeaNode);
 };
-} // end namespace sea_ir
+}  // namespace sea_ir
 #endif  // ART_COMPILER_SEA_IR_SEA_NODE_H_
diff --git a/compiler/sea_ir/visitor.h b/compiler/sea_ir/visitor.h
index 9859008..a4fec7b 100644
--- a/compiler/sea_ir/visitor.h
+++ b/compiler/sea_ir/visitor.h
@@ -59,7 +59,7 @@
   virtual void Visit(ConstInstructionNode* instruction) = 0;
   virtual void Visit(ReturnInstructionNode* instruction) = 0;
   virtual void Visit(IfNeInstructionNode* instruction) = 0;
-  //virtual void Visit(AddIntLitInstructionNode* instruction) = 0;
+  // virtual void Visit(AddIntLitInstructionNode* instruction) = 0;
   virtual void Visit(MoveResultInstructionNode* instruction) = 0;
   virtual void Visit(InvokeStaticInstructionNode* instruction) = 0;
   virtual void Visit(AddIntInstructionNode* instruction) = 0;
@@ -90,5 +90,5 @@
  protected:
   std::vector<Region*> ordered_regions_;
 };
-} // end namespace sea_ir
+}  // namespace sea_ir
 #endif  // ART_COMPILER_SEA_IR_VISITOR_H_
diff --git a/compiler/stubs/portable/stubs.cc b/compiler/stubs/portable/stubs.cc
index a7eea51..69568d7 100644
--- a/compiler/stubs/portable/stubs.cc
+++ b/compiler/stubs/portable/stubs.cc
@@ -55,7 +55,7 @@
 
   return resolution_trampoline.release();
 }
-} // namespace arm
+}  // namespace arm
 
 namespace mips {
 const std::vector<uint8_t>* CreatePortableResolutionTrampoline() {
@@ -72,7 +72,7 @@
                     ENTRYPOINT_OFFSET(pPortableResolutionTrampolineFromCode));
   __ Move(A3, S1);  // Pass Thread::Current() in A3
   __ Move(A2, SP);  // Pass SP for Method** callee_addr
-  __ Jalr(T9); // Call to resolution trampoline (callee, receiver, callee_addr, Thread*)
+  __ Jalr(T9);  // Call to resolution trampoline (callee, receiver, callee_addr, Thread*)
 
   // Restore frame, argument registers, and RA.
   __ LoadFromOffset(kLoadWord, A0, SP, 0);
@@ -84,9 +84,9 @@
 
   Label resolve_fail;
   __ EmitBranch(V0, ZERO, &resolve_fail, true);
-  __ Jr(V0); // If V0 != 0 tail call method's code
+  __ Jr(V0);  // If V0 != 0 tail call method's code
   __ Bind(&resolve_fail, false);
-  __ Jr(RA); // Return to caller to handle exception
+  __ Jr(RA);  // Return to caller to handle exception
 
   assembler->EmitSlowPaths();
   size_t cs = assembler->CodeSize();
@@ -96,7 +96,7 @@
 
   return resolution_trampoline.release();
 }
-} // namespace mips
+}  // namespace mips
 
 namespace x86 {
 const std::vector<uint8_t>* CreatePortableResolutionTrampoline() {
@@ -132,6 +132,6 @@
 
   return resolution_trampoline.release();
 }
-} // namespace x86
+}  // namespace x86
 
-} // namespace art
+}  // namespace art
diff --git a/compiler/stubs/quick/stubs.cc b/compiler/stubs/quick/stubs.cc
index 790b5d6..8fc2a81 100644
--- a/compiler/stubs/quick/stubs.cc
+++ b/compiler/stubs/quick/stubs.cc
@@ -95,7 +95,7 @@
 
   return entry_stub.release();
 }
-} // namespace arm
+}  // namespace arm
 
 namespace mips {
 const std::vector<uint8_t>* CreateQuickResolutionTrampoline() {
@@ -126,7 +126,7 @@
   __ LoadFromOffset(kLoadWord, T9, S1, ENTRYPOINT_OFFSET(pQuickResolutionTrampolineFromCode));
   __ Move(A3, S1);  // Pass Thread::Current() in A3
   __ Move(A2, SP);  // Pass SP for Method** callee_addr
-  __ Jalr(T9); // Call to resolution trampoline (method_idx, receiver, sp, Thread*)
+  __ Jalr(T9);  // Call to resolution trampoline (method_idx, receiver, sp, Thread*)
 
   // Restore registers which may have been modified by GC
   __ LoadFromOffset(kLoadWord, A0, SP, 0);
@@ -144,7 +144,7 @@
   __ LoadFromOffset(kLoadWord, RA, SP, 60);
   __ AddConstant(SP, SP, 64);
 
-  __ Move(T9, V0); // Put method's code in T9
+  __ Move(T9, V0);  // Put method's code in T9
   __ Jr(T9);  // Leaf call to method's code
 
   __ Break();
@@ -187,7 +187,7 @@
 
   return entry_stub.release();
 }
-} // namespace mips
+}  // namespace mips
 
 namespace x86 {
 const std::vector<uint8_t>* CreateQuickResolutionTrampoline() {
@@ -258,6 +258,6 @@
 
   return entry_stub.release();
 }
-} // namespace x86
+}  // namespace x86
 
-} // namespace art
+}  // namespace art
diff --git a/compiler/utils/scoped_hashtable.h b/compiler/utils/scoped_hashtable.h
index e38b90e..ccec7ba 100644
--- a/compiler/utils/scoped_hashtable.h
+++ b/compiler/utils/scoped_hashtable.h
@@ -66,6 +66,6 @@
  private:
   std::list<std::map<K, V> > scopes;
 };
-} // end namespace utils
+}  // namespace utils
 
 #endif  // ART_COMPILER_UTILS_SCOPED_HASHTABLE_H_
diff --git a/compiler/utils/scoped_hashtable_test.cc b/compiler/utils/scoped_hashtable_test.cc
index 072da8c..d5f9f7d 100644
--- a/compiler/utils/scoped_hashtable_test.cc
+++ b/compiler/utils/scoped_hashtable_test.cc
@@ -65,4 +65,4 @@
   EXPECT_TRUE(NULL == sht.Lookup(2));
 }
 
-} // end namespace art
+}  // namespace art
diff --git a/dalvikvm/dalvikvm.cc b/dalvikvm/dalvikvm.cc
index 1672099..4607f9a 100644
--- a/dalvikvm/dalvikvm.cc
+++ b/dalvikvm/dalvikvm.cc
@@ -205,7 +205,7 @@
   return rc;
 }
 
-} // namespace art
+}  // namespace art
 
 int main(int argc, char** argv) {
   return art::dalvikvm(argc, argv);
diff --git a/dex2oat/dex2oat.cc b/dex2oat/dex2oat.cc
index fb6f775..c8c4347 100644
--- a/dex2oat/dex2oat.cc
+++ b/dex2oat/dex2oat.cc
@@ -849,7 +849,7 @@
 
 #if ART_SMALL_MODE
   options.push_back(std::make_pair("-small", reinterpret_cast<void*>(NULL)));
-#endif // ART_SMALL_MODE
+#endif  // ART_SMALL_MODE
 
 
 #ifdef ART_SEA_IR_MODE
@@ -1049,7 +1049,7 @@
 
   // We wrote the oat file successfully, and want to keep it.
   LOG(INFO) << "Oat file written successfully (stripped): " << oat_location;
-#endif // ART_USE_PORTABLE_COMPILER
+#endif  // ART_USE_PORTABLE_COMPILER
 
   timings.EndSplit();
 
@@ -1060,7 +1060,7 @@
 }
 
 
-} // namespace art
+}  // namespace art
 
 int main(int argc, char** argv) {
   return art::dex2oat(argc, argv);
diff --git a/jdwpspy/Net.cpp b/jdwpspy/Net.cpp
index 5c789d8..38d4e26 100644
--- a/jdwpspy/Net.cpp
+++ b/jdwpspy/Net.cpp
@@ -510,7 +510,7 @@
         printf("%s   --> %s\n", prefix, getCommandName(cmdSet, cmd));
     } else {
         std::ostringstream ss;
-        ss << "TODO"; // get access to the operator<<, or regenerate it for jdwpspy?
+        ss << "TODO";  // get access to the operator<<, or regenerate it for jdwpspy?
         printf("%s REPLY   dataLen=%-5u id=0x%08x flags=0x%02x err=%d (%s) [%02d:%02d]\n",
             prefix, dataLen, id, flags, error, ss.str().c_str(), min,sec);
     }
diff --git a/oatdump/oatdump.cc b/oatdump/oatdump.cc
index 85eb89b..0a34686 100644
--- a/oatdump/oatdump.cc
+++ b/oatdump/oatdump.cc
@@ -1473,7 +1473,7 @@
   return EXIT_SUCCESS;
 }
 
-} // namespace art
+}  // namespace art
 
 int main(int argc, char** argv) {
   return art::oatdump(argc, argv);
diff --git a/runtime/base/histogram_test.cc b/runtime/base/histogram_test.cc
index 5592f1c..218c022 100644
--- a/runtime/base/histogram_test.cc
+++ b/runtime/base/histogram_test.cc
@@ -22,16 +22,16 @@
 
 namespace art {
 
-//Simple usage:
-//  Histogram *hist = new Histogram("SimplePercentiles");
-//  Percentile PerValue
-//  hist->AddValue(121);
-//  hist->AddValue(132);
-//  hist->AddValue(140);
-//  hist->AddValue(145);
-//  hist->AddValue(155);
-//  hist->CreateHistogram();
-//  PerValue = hist->PercentileVal(0.50); finds the 50th percentile(median).
+// Simple usage:
+//   Histogram *hist = new Histogram("SimplePercentiles");
+//   Percentile PerValue
+//   hist->AddValue(121);
+//   hist->AddValue(132);
+//   hist->AddValue(140);
+//   hist->AddValue(145);
+//   hist->AddValue(155);
+//   hist->CreateHistogram();
+//   PerValue = hist->PercentileVal(0.50); finds the 50th percentile(median).
 
 TEST(Histtest, MeanTest) {
   UniquePtr<Histogram<uint64_t> > hist(new Histogram<uint64_t>("MeanTest"));
@@ -105,7 +105,7 @@
   hist->AddValue(110);
   hist->AddValue(121);
   hist->AddValue(132);
-  hist->AddValue(140);  //Median  value
+  hist->AddValue(140);  // Median  value
   hist->AddValue(145);
   hist->AddValue(155);
   hist->AddValue(163);
@@ -148,7 +148,7 @@
   hist->AddValue(110);
   hist->AddValue(121);
   hist->AddValue(132);
-  hist->AddValue(140);  //Median  value
+  hist->AddValue(140);  // Median  value
   hist->AddValue(145);
   hist->AddValue(155);
   hist->AddValue(163);
@@ -188,7 +188,7 @@
   hist->AddValue(110);
   hist->AddValue(121);
   hist->AddValue(132);
-  hist->AddValue(140);  //Median  value
+  hist->AddValue(140);  // Median  value
   hist->AddValue(145);
   hist->AddValue(155);
   hist->AddValue(163);
@@ -265,4 +265,4 @@
   EXPECT_EQ(expected, stream.str());
 }
 
-} // namespace art
+}  // namespace art
diff --git a/runtime/base/logging.cc b/runtime/base/logging.cc
index bf19e8d..83ecca8 100644
--- a/runtime/base/logging.cc
+++ b/runtime/base/logging.cc
@@ -126,7 +126,7 @@
 
 LogMessage::~LogMessage() {
   if (data_->severity < gMinimumLogSeverity) {
-    return; // No need to format something we're not going to output.
+    return;  // No need to format something we're not going to output.
   }
 
   // Finish constructing the message.
diff --git a/runtime/base/logging.h b/runtime/base/logging.h
index af2cdb3..d641ae4 100644
--- a/runtime/base/logging.h
+++ b/runtime/base/logging.h
@@ -299,7 +299,7 @@
 // The members of this struct are the valid arguments to VLOG and VLOG_IS_ON in code,
 // and the "-verbose:" command line argument.
 struct LogVerbosity {
-  bool class_linker; // Enabled with "-verbose:class".
+  bool class_linker;  // Enabled with "-verbose:class".
   bool compiler;
   bool heap;
   bool gc;
@@ -307,7 +307,7 @@
   bool jni;
   bool monitor;
   bool startup;
-  bool third_party_jni; // Enabled with "-verbose:third-party-jni".
+  bool third_party_jni;  // Enabled with "-verbose:third-party-jni".
   bool threads;
 };
 
diff --git a/runtime/base/macros.h b/runtime/base/macros.h
index 44a7f1e..879c10c 100644
--- a/runtime/base/macros.h
+++ b/runtime/base/macros.h
@@ -196,6 +196,6 @@
 #define SHARED_TRYLOCK_FUNCTION(...)
 #define UNLOCK_FUNCTION(...)
 
-#endif // defined(__SUPPORT_TS_ANNOTATION__)
+#endif  // defined(__SUPPORT_TS_ANNOTATION__)
 
 #endif  // ART_RUNTIME_BASE_MACROS_H_
diff --git a/runtime/base/mutex-inl.h b/runtime/base/mutex-inl.h
index b3f5092..1337dff 100644
--- a/runtime/base/mutex-inl.h
+++ b/runtime/base/mutex-inl.h
@@ -167,7 +167,7 @@
     if (LIKELY(cur_state > 0)) {
       // Reduce state by 1.
       done = android_atomic_release_cas(cur_state, cur_state - 1, &state_) == 0;
-      if (done && (cur_state - 1) == 0) { // cas may fail due to noise?
+      if (done && (cur_state - 1) == 0) {  // cas may fail due to noise?
         if (num_pending_writers_ > 0 || num_pending_readers_ > 0) {
           // Wake any exclusive waiters as there are now no readers.
           futex(&state_, FUTEX_WAKE, -1, NULL, NULL, 0);
diff --git a/runtime/base/mutex.cc b/runtime/base/mutex.cc
index 1a6020b..d822eed 100644
--- a/runtime/base/mutex.cc
+++ b/runtime/base/mutex.cc
@@ -400,7 +400,7 @@
       exclusive_owner_ = 0;
       // Change state to 0.
       done = android_atomic_release_cas(cur_state, 0, &state_) == 0;
-      if (done) { // Spurious fail?
+      if (done) {  // Spurious fail?
         // Wake a contender
         if (num_contenders_ > 0) {
           futex(&state_, FUTEX_WAKE, 1, NULL, NULL, 0);
@@ -478,7 +478,7 @@
 #if ART_USE_FUTEXES
     , state_(0), exclusive_owner_(0), num_pending_readers_(0), num_pending_writers_(0)
 #endif
-{ // NOLINT(whitespace/braces)
+{  // NOLINT(whitespace/braces)
 #if !ART_USE_FUTEXES
   CHECK_MUTEX_CALL(pthread_rwlock_init, (&rwlock_, NULL));
 #endif
@@ -551,7 +551,7 @@
       exclusive_owner_ = 0;
       // Change state from -1 to 0.
       done = android_atomic_release_cas(-1, 0, &state_) == 0;
-      if (done) { // cmpxchg may fail due to noise?
+      if (done) {  // cmpxchg may fail due to noise?
         // Wake any waiters.
         if (num_pending_readers_ > 0 || num_pending_writers_ > 0) {
           futex(&state_, FUTEX_WAKE, -1, NULL, NULL, 0);
@@ -756,7 +756,7 @@
   DCHECK_EQ(guard_.GetExclusiveOwnerTid(), SafeGetTid(self));
 #if ART_USE_FUTEXES
   if (num_waiters_ > 0) {
-    android_atomic_inc(&sequence_); // Indicate the broadcast occurred.
+    android_atomic_inc(&sequence_);  // Indicate the broadcast occurred.
     bool done = false;
     do {
       int32_t cur_sequence = sequence_;
@@ -782,7 +782,7 @@
   guard_.AssertExclusiveHeld(self);
 #if ART_USE_FUTEXES
   if (num_waiters_ > 0) {
-    android_atomic_inc(&sequence_); // Indicate a signal occurred.
+    android_atomic_inc(&sequence_);  // Indicate a signal occurred.
     // Futex wake 1 waiter who will then come and in contend on mutex. It'd be nice to requeue them
     // to avoid this, however, requeueing can only move all waiters.
     int num_woken = futex(&sequence_, FUTEX_WAKE, 1, NULL, NULL, 0);
diff --git a/runtime/base/unix_file/mapped_file_test.cc b/runtime/base/unix_file/mapped_file_test.cc
index a3b097d..3dda02f 100644
--- a/runtime/base/unix_file/mapped_file_test.cc
+++ b/runtime/base/unix_file/mapped_file_test.cc
@@ -212,7 +212,7 @@
   EXPECT_EQ(0, memcmp(kContent.c_str(), file.data(), kContent.size()));
 }
 
-#if 0 // death tests don't work on android yet
+#if 0  // death tests don't work on android yet
 
 class MappedFileDeathTest : public MappedFileTest {};
 
diff --git a/runtime/check_jni.cc b/runtime/check_jni.cc
index 7429ab1..089e306 100644
--- a/runtime/check_jni.cc
+++ b/runtime/check_jni.cc
@@ -419,37 +419,37 @@
       std::string msg;
       for (const char* fmt = fmt0; *fmt;) {
         char ch = *fmt++;
-        if (ch == 'B') { // jbyte
+        if (ch == 'B') {  // jbyte
           jbyte b = va_arg(ap, int);
           if (b >= 0 && b < 10) {
             StringAppendF(&msg, "%d", b);
           } else {
             StringAppendF(&msg, "%#x (%d)", b, b);
           }
-        } else if (ch == 'C') { // jchar
+        } else if (ch == 'C') {  // jchar
           jchar c = va_arg(ap, int);
           if (c < 0x7f && c >= ' ') {
             StringAppendF(&msg, "U+%x ('%c')", c, c);
           } else {
             StringAppendF(&msg, "U+%x", c);
           }
-        } else if (ch == 'F' || ch == 'D') { // jfloat, jdouble
+        } else if (ch == 'F' || ch == 'D') {  // jfloat, jdouble
           StringAppendF(&msg, "%g", va_arg(ap, double));
-        } else if (ch == 'I' || ch == 'S') { // jint, jshort
+        } else if (ch == 'I' || ch == 'S') {  // jint, jshort
           StringAppendF(&msg, "%d", va_arg(ap, int));
-        } else if (ch == 'J') { // jlong
+        } else if (ch == 'J') {  // jlong
           StringAppendF(&msg, "%lld", va_arg(ap, jlong));
-        } else if (ch == 'Z') { // jboolean
+        } else if (ch == 'Z') {  // jboolean
           StringAppendF(&msg, "%s", va_arg(ap, int) ? "true" : "false");
-        } else if (ch == 'V') { // void
+        } else if (ch == 'V') {  // void
           msg += "void";
-        } else if (ch == 'v') { // JavaVM*
+        } else if (ch == 'v') {  // JavaVM*
           JavaVM* vm = va_arg(ap, JavaVM*);
           StringAppendF(&msg, "(JavaVM*)%p", vm);
-        } else if (ch == 'E') { // JNIEnv*
+        } else if (ch == 'E') {  // JNIEnv*
           JNIEnv* env = va_arg(ap, JNIEnv*);
           StringAppendF(&msg, "(JNIEnv*)%p", env);
-        } else if (ch == 'L' || ch == 'a' || ch == 's') { // jobject, jarray, jstring
+        } else if (ch == 'L' || ch == 'a' || ch == 's') {  // jobject, jarray, jstring
           // For logging purposes, these are identical.
           jobject o = va_arg(ap, jobject);
           if (o == NULL) {
@@ -457,10 +457,10 @@
           } else {
             StringAppendF(&msg, "%p", o);
           }
-        } else if (ch == 'b') { // jboolean (JNI-style)
+        } else if (ch == 'b') {  // jboolean (JNI-style)
           jboolean b = va_arg(ap, int);
           msg += (b ? "JNI_TRUE" : "JNI_FALSE");
-        } else if (ch == 'c') { // jclass
+        } else if (ch == 'c') {  // jclass
           jclass jc = va_arg(ap, jclass);
           mirror::Class* c = reinterpret_cast<mirror::Class*>(Thread::Current()->DecodeJObject(jc));
           if (c == NULL) {
@@ -475,34 +475,34 @@
               StringAppendF(&msg, " (%p)", jc);
             }
           }
-        } else if (ch == 'f') { // jfieldID
+        } else if (ch == 'f') {  // jfieldID
           jfieldID fid = va_arg(ap, jfieldID);
           mirror::Field* f = reinterpret_cast<mirror::Field*>(fid);
           msg += PrettyField(f);
           if (!entry) {
             StringAppendF(&msg, " (%p)", fid);
           }
-        } else if (ch == 'z') { // non-negative jsize
+        } else if (ch == 'z') {  // non-negative jsize
           // You might expect jsize to be size_t, but it's not; it's the same as jint.
           // We only treat this specially so we can do the non-negative check.
           // TODO: maybe this wasn't worth it?
           jint i = va_arg(ap, jint);
           StringAppendF(&msg, "%d", i);
-        } else if (ch == 'm') { // jmethodID
+        } else if (ch == 'm') {  // jmethodID
           jmethodID mid = va_arg(ap, jmethodID);
           mirror::AbstractMethod* m = reinterpret_cast<mirror::AbstractMethod*>(mid);
           msg += PrettyMethod(m);
           if (!entry) {
             StringAppendF(&msg, " (%p)", mid);
           }
-        } else if (ch == 'p') { // void* ("pointer")
+        } else if (ch == 'p') {  // void* ("pointer")
           void* p = va_arg(ap, void*);
           if (p == NULL) {
             msg += "NULL";
           } else {
             StringAppendF(&msg, "(void*) %p", p);
           }
-        } else if (ch == 'r') { // jint (release mode)
+        } else if (ch == 'r') {  // jint (release mode)
           jint releaseMode = va_arg(ap, jint);
           if (releaseMode == 0) {
             msg += "0";
@@ -513,7 +513,7 @@
           } else {
             StringAppendF(&msg, "invalid release mode %d", releaseMode);
           }
-        } else if (ch == 'u') { // const char* (Modified UTF-8)
+        } else if (ch == 'u') {  // const char* (Modified UTF-8)
           const char* utf = va_arg(ap, const char*);
           if (utf == NULL) {
             msg += "NULL";
@@ -573,11 +573,11 @@
         } else if (ch == 'z') {
           CheckLengthPositive(va_arg(ap, jsize));
         } else if (strchr("BCISZbfmpEv", ch) != NULL) {
-          va_arg(ap, uint32_t); // Skip this argument.
+          va_arg(ap, uint32_t);  // Skip this argument.
         } else if (ch == 'D' || ch == 'F') {
-          va_arg(ap, double); // Skip this argument.
+          va_arg(ap, double);  // Skip this argument.
         } else if (ch == 'J') {
-          va_arg(ap, uint64_t); // Skip this argument.
+          va_arg(ap, uint64_t);  // Skip this argument.
         } else if (ch == '.') {
         } else {
           LOG(FATAL) << "Unknown check format specifier: " << ch;
@@ -797,7 +797,7 @@
       // Don't check here; we allow nested gets.
       threadEnv->critical++;
       break;
-    case kFlag_CritRelease: // this is a "release" call
+    case kFlag_CritRelease:  // this is a "release" call
       threadEnv->critical--;
       if (threadEnv->critical < 0) {
         JniAbortF(function_name_, "thread %s called too many critical releases", ToStr<Thread>(*self).c_str());
@@ -1007,7 +1007,7 @@
       memcpy(buf, &pExtra->magic, 4);
       JniAbortF(functionName,
           "guard magic does not match (found 0x%02x%02x%02x%02x) -- incorrect data pointer %p?",
-          buf[3], buf[2], buf[1], buf[0], dataBuf); // Assumes little-endian.
+          buf[3], buf[2], buf[1], buf[0], dataBuf);  // Assumes little-endian.
     }
 
     size_t len = pExtra->original_length;
@@ -1529,7 +1529,7 @@
   }
 
   static jstring NewStringUTF(JNIEnv* env, const char* bytes) {
-    CHECK_JNI_ENTRY(kFlag_NullableUtf, "Eu", env, bytes); // TODO: show pointer and truncate string.
+    CHECK_JNI_ENTRY(kFlag_NullableUtf, "Eu", env, bytes);  // TODO: show pointer and truncate string.
     return CHECK_JNI_EXIT("s", baseEnv(env)->NewStringUTF(env, bytes));
   }
 
@@ -1547,11 +1547,11 @@
         *isCopy = JNI_TRUE;
       }
     }
-    return CHECK_JNI_EXIT("u", result); // TODO: show pointer and truncate string.
+    return CHECK_JNI_EXIT("u", result);  // TODO: show pointer and truncate string.
   }
 
   static void ReleaseStringUTFChars(JNIEnv* env, jstring string, const char* utf) {
-    CHECK_JNI_ENTRY(kFlag_ExcepOkay | kFlag_Release, "Esu", env, string, utf); // TODO: show pointer and truncate string.
+    CHECK_JNI_ENTRY(kFlag_ExcepOkay | kFlag_Release, "Esu", env, string, utf);  // TODO: show pointer and truncate string.
     if (sc.ForceCopy()) {
       GuardedCopy::Check(__FUNCTION__, utf, false);
       utf = reinterpret_cast<const char*>(GuardedCopy::Destroy(const_cast<char*>(utf)));
@@ -1681,7 +1681,7 @@
   static jint MonitorEnter(JNIEnv* env, jobject obj) {
     CHECK_JNI_ENTRY(kFlag_Default, "EL", env, obj);
     if (!sc.CheckInstance(ScopedCheck::kObject, obj)) {
-      return JNI_ERR; // Only for jni_internal_test. Real code will have aborted already.
+      return JNI_ERR;  // Only for jni_internal_test. Real code will have aborted already.
     }
     return CHECK_JNI_EXIT("I", baseEnv(env)->MonitorEnter(env, obj));
   }
@@ -1689,7 +1689,7 @@
   static jint MonitorExit(JNIEnv* env, jobject obj) {
     CHECK_JNI_ENTRY(kFlag_Default | kFlag_ExcepOkay, "EL", env, obj);
     if (!sc.CheckInstance(ScopedCheck::kObject, obj)) {
-      return JNI_ERR; // Only for jni_internal_test. Real code will have aborted already.
+      return JNI_ERR;  // Only for jni_internal_test. Real code will have aborted already.
     }
     return CHECK_JNI_EXIT("I", baseEnv(env)->MonitorExit(env, obj));
   }
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 15d6d36..40033b7 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -1422,7 +1422,7 @@
   // follow with reference fields which must be contiguous at start
   size += (num_ref * sizeof(uint32_t));
   // if there are 64-bit fields to add, make sure they are aligned
-  if (num_64 != 0 && size != RoundUp(size, 8)) { // for 64-bit alignment
+  if (num_64 != 0 && size != RoundUp(size, 8)) {  // for 64-bit alignment
     if (num_32 != 0) {
       // use an available 32-bit field for padding
       num_32--;
@@ -3476,7 +3476,7 @@
     Primitive::Type type = fh.GetTypeAsPrimitiveType();
     bool isPrimitive = type != Primitive::kPrimNot;
     if (isPrimitive) {
-      break; // past last reference, move on to the next phase
+      break;  // past last reference, move on to the next phase
     }
     grouped_and_sorted_fields.pop_front();
     num_reference_fields++;
@@ -3554,7 +3554,7 @@
     bool is_primitive = type != Primitive::kPrimNot;
     if (StringPiece(ClassHelper(klass.get(), this).GetDescriptor()) == "Ljava/lang/ref/Reference;" &&
         StringPiece(fh.GetName()) == "referent") {
-      is_primitive = true; // We lied above, so we have to expect a lie here.
+      is_primitive = true;  // We lied above, so we have to expect a lie here.
     }
     if (is_primitive) {
       if (!seen_non_ref) {
diff --git a/runtime/class_linker.h b/runtime/class_linker.h
index 3993cb2..fdf75c2 100644
--- a/runtime/class_linker.h
+++ b/runtime/class_linker.h
@@ -328,8 +328,8 @@
   const void* GetOatCodeFor(const DexFile& dex_file, uint32_t method_idx)
       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
-  pid_t GetClassesLockOwner(); // For SignalCatcher.
-  pid_t GetDexLockOwner(); // For SignalCatcher.
+  pid_t GetClassesLockOwner();  // For SignalCatcher.
+  pid_t GetDexLockOwner();  // For SignalCatcher.
 
   bool IsDirty() const {
     return is_dirty_;
diff --git a/runtime/common_test.h b/runtime/common_test.h
index 79710b4..2c23340 100644
--- a/runtime/common_test.h
+++ b/runtime/common_test.h
@@ -55,11 +55,11 @@
   255, 255, 255, 255, 255, 255, 255,  62, 255, 255, 255,  63,
   52,  53,  54,  55,  56,  57,  58,  59,  60,  61, 255, 255,
   255, 254, 255, 255, 255,   0,   1,   2,   3,   4,   5,   6,
-    7,   8,   9,  10,  11,  12,  13,  14,  15,  16,  17,  18, // NOLINT
-   19,  20,  21,  22,  23,  24,  25, 255, 255, 255, 255, 255, // NOLINT
+    7,   8,   9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  // NOLINT
+   19,  20,  21,  22,  23,  24,  25, 255, 255, 255, 255, 255,  // NOLINT
   255,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,
-   37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48, // NOLINT
-   49,  50,  51, 255, 255, 255, 255, 255, 255, 255, 255, 255, // NOLINT
+   37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  // NOLINT
+   49,  50,  51, 255, 255, 255, 255, 255, 255, 255, 255, 255,  // NOLINT
   255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
   255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
   255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
diff --git a/runtime/compiled_method.cc b/runtime/compiled_method.cc
index 49706ae..c64c71e 100644
--- a/runtime/compiled_method.cc
+++ b/runtime/compiled_method.cc
@@ -121,7 +121,7 @@
   DCHECK_EQ(vmap_table.size(),
             static_cast<uint32_t>(__builtin_popcount(core_spill_mask)
                                   + __builtin_popcount(fp_spill_mask)));
-  CHECK_LE(vmap_table.size(), (1U << 16) - 1); // length must fit in 2^16-1
+  CHECK_LE(vmap_table.size(), (1U << 16) - 1);  // length must fit in 2^16-1
 
   std::vector<uint32_t> length_prefixed_mapping_table;
   length_prefixed_mapping_table.push_back(mapping_table.size());
diff --git a/runtime/debugger.cc b/runtime/debugger.cc
index deed540..7ebd6a3 100644
--- a/runtime/debugger.cc
+++ b/runtime/debugger.cc
@@ -56,8 +56,8 @@
 
 namespace art {
 
-static const size_t kMaxAllocRecordStackDepth = 16; // Max 255.
-static const size_t kDefaultNumAllocRecords = 64*1024; // Must be a power of 2.
+static const size_t kMaxAllocRecordStackDepth = 16;  // Max 255.
+static const size_t kDefaultNumAllocRecords = 64*1024;  // Must be a power of 2.
 
 struct AllocRecordStackTraceElement {
   mirror::AbstractMethod* method;
@@ -72,7 +72,7 @@
   mirror::Class* type;
   size_t byte_count;
   uint16_t thin_lock_id;
-  AllocRecordStackTraceElement stack[kMaxAllocRecordStackDepth]; // Unused entries have NULL method.
+  AllocRecordStackTraceElement stack[kMaxAllocRecordStackDepth];  // Unused entries have NULL method.
 
   size_t GetDepth() {
     size_t depth = 0;
@@ -104,7 +104,7 @@
   JDWP::JdwpStepDepth step_depth;
 
   const mirror::AbstractMethod* method;
-  int32_t line_number; // Or -1 for native methods.
+  int32_t line_number;  // Or -1 for native methods.
   std::set<uint32_t> dex_pcs;
   int stack_depth;
 };
@@ -185,7 +185,7 @@
 
 // Recent allocation tracking.
 static Mutex gAllocTrackerLock DEFAULT_MUTEX_ACQUIRED_AFTER("AllocTracker lock");
-AllocRecord* Dbg::recent_allocation_records_ PT_GUARDED_BY(gAllocTrackerLock) = NULL; // TODO: CircularBuffer<AllocRecord>
+AllocRecord* Dbg::recent_allocation_records_ PT_GUARDED_BY(gAllocTrackerLock) = NULL;  // TODO: CircularBuffer<AllocRecord>
 static size_t gAllocRecordMax GUARDED_BY(gAllocTrackerLock) = 0;
 static size_t gAllocRecordHead GUARDED_BY(gAllocTrackerLock) = 0;
 static size_t gAllocRecordCount GUARDED_BY(gAllocTrackerLock) = 0;
@@ -600,7 +600,7 @@
     return StringPrintf("invalid object %p", reinterpret_cast<void*>(class_id));
   }
   if (!o->IsClass()) {
-    return StringPrintf("non-class %p", o); // This is only used for debugging output anyway.
+    return StringPrintf("non-class %p", o);  // This is only used for debugging output anyway.
   }
   return DescriptorToName(ClassHelper(o->AsClass()).GetDescriptor());
 }
@@ -1861,7 +1861,7 @@
     // annotalysis.
     virtual bool VisitFrame() NO_THREAD_SAFETY_ANALYSIS {
       if (GetMethod()->IsRuntimeMethod()) {
-        return true; // The debugger can't do anything useful with a frame that has no Method*.
+        return true;  // The debugger can't do anything useful with a frame that has no Method*.
       }
       if (depth_ >= start_frame_ + frame_count_) {
         return false;
@@ -2511,14 +2511,14 @@
         }
         // Otherwise, if we're already in a valid range for this line,
         // just keep going (shouldn't really happen)...
-      } else if (context->last_pc_valid) { // and the line number is new
+      } else if (context->last_pc_valid) {  // and the line number is new
         // Add everything from the last entry up until here to the set
         for (uint32_t dex_pc = context->last_pc; dex_pc < address; ++dex_pc) {
           gSingleStepControl.dex_pcs.insert(dex_pc);
         }
         context->last_pc_valid = false;
       }
-      return false; // There may be multiple entries for any given line.
+      return false;  // There may be multiple entries for any given line.
     }
 
     // TODO: Enable annotalysis. We know lock is held in constructor, but abstraction confuses
@@ -2655,7 +2655,7 @@
     }
     if (suspend_count > 1) {
       LOG(ERROR) << *targetThread << " suspend count too deep for method invocation: " << suspend_count;
-      return JDWP::ERR_THREAD_SUSPENDED; // Probably not expected here.
+      return JDWP::ERR_THREAD_SUSPENDED;  // Probably not expected here.
     }
 
     JDWP::JdwpError status;
@@ -3033,7 +3033,7 @@
     }
     {
       ScopedObjectAccess soa(self);
-      typedef std::list<Thread*>::const_iterator It; // TODO: C++0x auto
+      typedef std::list<Thread*>::const_iterator It;  // TODO: C++0x auto
       for (It it = threads.begin(), end = threads.end(); it != end; ++it) {
         Dbg::DdmSendThreadNotification(*it, CHUNK_TYPE("THCR"));
       }
@@ -3144,11 +3144,11 @@
   gc::Heap* heap = Runtime::Current()->GetHeap();
   std::vector<uint8_t> bytes;
   JDWP::Append4BE(bytes, heap_count);
-  JDWP::Append4BE(bytes, 1); // Heap id (bogus; we only have one heap).
+  JDWP::Append4BE(bytes, 1);  // Heap id (bogus; we only have one heap).
   JDWP::Append8BE(bytes, MilliTime());
   JDWP::Append1BE(bytes, reason);
-  JDWP::Append4BE(bytes, heap->GetMaxMemory()); // Max allowed heap size in bytes.
-  JDWP::Append4BE(bytes, heap->GetTotalMemory()); // Current heap size in bytes.
+  JDWP::Append4BE(bytes, heap->GetMaxMemory());  // Max allowed heap size in bytes.
+  JDWP::Append4BE(bytes, heap->GetTotalMemory());  // Current heap size in bytes.
   JDWP::Append4BE(bytes, heap->GetBytesAllocated());
   JDWP::Append4BE(bytes, heap->GetObjectsAllocated());
   CHECK_EQ(bytes.size(), 4U + (heap_count * (4 + 8 + 1 + 4 + 4 + 4 + 4)));
@@ -3207,11 +3207,11 @@
     }
 
     // Start a new HPSx chunk.
-    JDWP::Write4BE(&p_, 1); // Heap id (bogus; we only have one heap).
-    JDWP::Write1BE(&p_, 8); // Size of allocation unit, in bytes.
+    JDWP::Write4BE(&p_, 1);  // Heap id (bogus; we only have one heap).
+    JDWP::Write1BE(&p_, 8);  // Size of allocation unit, in bytes.
 
-    JDWP::Write4BE(&p_, reinterpret_cast<uintptr_t>(chunk_ptr)); // virtual address of segment start.
-    JDWP::Write4BE(&p_, 0); // offset of this piece (relative to the virtual address).
+    JDWP::Write4BE(&p_, reinterpret_cast<uintptr_t>(chunk_ptr));  // virtual address of segment start.
+    JDWP::Write4BE(&p_, 0);  // offset of this piece (relative to the virtual address).
     // [u4]: length of piece, in allocation units
     // We won't know this until we're done, so save the offset and stuff in a dummy value.
     pieceLenField_ = p_;
@@ -3414,7 +3414,7 @@
 
   // First, send a heap start chunk.
   uint8_t heap_id[4];
-  JDWP::Set4BE(&heap_id[0], 1); // Heap id (bogus; we only have one heap).
+  JDWP::Set4BE(&heap_id[0], 1);  // Heap id (bogus; we only have one heap).
   Dbg::DdmSendChunk(native ? CHUNK_TYPE("NHST") : CHUNK_TYPE("HPST"), sizeof(heap_id), heap_id);
 
   // Send a series of heap segment chunks.
@@ -3600,7 +3600,7 @@
   }
 
   size_t IndexOf(const char* s) const {
-    typedef std::set<std::string>::const_iterator It; // TODO: C++0x auto
+    typedef std::set<std::string>::const_iterator It;  // TODO: C++0x auto
     It it = table_.find(s);
     if (it == table_.end()) {
       LOG(FATAL) << "IndexOf(\"" << s << "\") failed";
@@ -3613,7 +3613,7 @@
   }
 
   void WriteTo(std::vector<uint8_t>& bytes) const {
-    typedef std::set<std::string>::const_iterator It; // TODO: C++0x auto
+    typedef std::set<std::string>::const_iterator It;  // TODO: C++0x auto
     for (It it = table_.begin(); it != table_.end(); ++it) {
       const char* s = (*it).c_str();
       size_t s_len = CountModifiedUtf8Chars(s);
@@ -3730,7 +3730,7 @@
     // (2b) number of source file name strings
     JDWP::Append2BE(bytes, gAllocRecordCount);
     size_t string_table_offset = bytes.size();
-    JDWP::Append4BE(bytes, 0); // We'll patch this later...
+    JDWP::Append4BE(bytes, 0);  // We'll patch this later...
     JDWP::Append2BE(bytes, class_names.Size());
     JDWP::Append2BE(bytes, method_names.Size());
     JDWP::Append2BE(bytes, filenames.Size());
diff --git a/runtime/debugger.h b/runtime/debugger.h
index 9005fda..6b7e2ba 100644
--- a/runtime/debugger.h
+++ b/runtime/debugger.h
@@ -270,7 +270,7 @@
 
   static JDWP::JdwpError GetThreadStatus(JDWP::ObjectId thread_id, JDWP::JdwpThreadStatus* pThreadStatus, JDWP::JdwpSuspendStatus* pSuspendStatus);
   static JDWP::JdwpError GetThreadDebugSuspendCount(JDWP::ObjectId thread_id, JDWP::ExpandBuf* pReply);
-  //static void WaitForSuspend(JDWP::ObjectId thread_id);
+  // static void WaitForSuspend(JDWP::ObjectId thread_id);
 
   // Fills 'thread_ids' with the threads in the given thread group. If thread_group_id == 0,
   // returns all threads.
diff --git a/runtime/dex_file.cc b/runtime/dex_file.cc
index cd34c3c..cbdc430 100644
--- a/runtime/dex_file.cc
+++ b/runtime/dex_file.cc
@@ -234,7 +234,7 @@
                                    const std::string& location,
                                    uint32_t location_checksum,
                                    MemMap* mem_map) {
-  CHECK_ALIGNED(base, 4); // various dex file structures must be word aligned
+  CHECK_ALIGNED(base, 4);  // various dex file structures must be word aligned
   UniquePtr<DexFile> dex_file(new DexFile(base, size, location, location_checksum, mem_map));
   if (!dex_file->Init()) {
     return NULL;
diff --git a/runtime/dex_file.h b/runtime/dex_file.h
index 8edeb18..76947e5 100644
--- a/runtime/dex_file.h
+++ b/runtime/dex_file.h
@@ -62,7 +62,7 @@
   // Raw header_item.
   struct Header {
     uint8_t magic_[8];
-    uint32_t checksum_; // See also location_checksum_
+    uint32_t checksum_;  // See also location_checksum_
     uint8_t signature_[kSha1DigestSize];
     uint32_t file_size_;  // size of entire file
     uint32_t header_size_;  // offset to start of next section
diff --git a/runtime/dex_file_verifier.cc b/runtime/dex_file_verifier.cc
index 6df4411..09e929c 100644
--- a/runtime/dex_file_verifier.cc
+++ b/runtime/dex_file_verifier.cc
@@ -1299,7 +1299,7 @@
 }
 
 bool DexFileVerifier::CheckOffsetToTypeMap(uint32_t offset, uint16_t type) {
-  typedef SafeMap<uint32_t, uint16_t>::iterator It; // TODO: C++0x auto
+  typedef SafeMap<uint32_t, uint16_t>::iterator It;  // TODO: C++0x auto
   It it = offset_to_type_map_.find(offset);
   if (it == offset_to_type_map_.end()) {
     LOG(ERROR) << StringPrintf("No data map entry found @ %x; expected %x", offset, type);
diff --git a/runtime/dex_instruction-inl.h b/runtime/dex_instruction-inl.h
index 2cb5235..6e21273 100644
--- a/runtime/dex_instruction-inl.h
+++ b/runtime/dex_instruction-inl.h
@@ -131,7 +131,7 @@
 
 inline uint4_t Instruction::VRegA_35c() const {
   DCHECK_EQ(FormatOf(Opcode()), k35c);
-  return InstB(); // This is labeled A in the spec.
+  return InstB();  // This is labeled A in the spec.
 }
 
 inline uint8_t Instruction::VRegA_3rc() const {
@@ -295,7 +295,7 @@
    * method constant (or equivalent) is always in vB.
    */
   uint16_t regList = Fetch16(2);
-  uint4_t count = InstB(); // This is labeled A in the spec.
+  uint4_t count = InstB();  // This is labeled A in the spec.
 
   /*
    * Copy the argument registers into the arg[] array, and
@@ -310,13 +310,13 @@
     case 3: arg[2] = (regList >> 8) & 0x0f;
     case 2: arg[1] = (regList >> 4) & 0x0f;
     case 1: arg[0] = regList & 0x0f; break;
-    case 0: break; // Valid, but no need to do anything.
+    case 0: break;  // Valid, but no need to do anything.
     default:
       LOG(ERROR) << "Invalid arg count in 35c (" << count << ")";
       return;
   }
 }
 
-} // namespace art
+}  // namespace art
 
 #endif  // ART_RUNTIME_DEX_INSTRUCTION_INL_H_
diff --git a/runtime/dex_instruction.cc b/runtime/dex_instruction.cc
index dcaa4cc..09fa19e 100644
--- a/runtime/dex_instruction.cc
+++ b/runtime/dex_instruction.cc
@@ -220,7 +220,7 @@
       break;
     case k11n:       // op vA, #+B
       vA = INST_A(insn);
-      vB = (int32_t) (INST_B(insn) << 28) >> 28; // sign extend 4-bit value
+      vB = (int32_t) (INST_B(insn) << 28) >> 28;  // sign extend 4-bit value
       break;
     case k11x:       // op vAA
       vA = INST_AA(insn);
@@ -302,7 +302,7 @@
         uint16_t regList;
         int count;
 
-        vA = INST_B(insn); // This is labeled A in the spec.
+        vA = INST_B(insn);  // This is labeled A in the spec.
         vB = FETCH(1);
         regList = FETCH(2);
 
@@ -321,7 +321,7 @@
         case 3: arg[2] = (regList >> 8) & 0x0f;
         case 2: arg[1] = (regList >> 4) & 0x0f;
         case 1: vC = arg[0] = regList & 0x0f; break;
-        case 0: break; // Valid, but no need to do anything.
+        case 0: break;  // Valid, but no need to do anything.
         default:
           LOG(ERROR) << "Invalid arg count in 35c (" << count << ")";
           return;
@@ -561,7 +561,7 @@
               }
               os << "v" << arg[i];
             }
-            os << "}, // vtable@" << method_idx;
+            os << "},  // vtable@" << method_idx;
             break;
           }  // else fall-through
         default:
diff --git a/runtime/dex_instruction.h b/runtime/dex_instruction.h
index 74789bb..13b0f1c 100644
--- a/runtime/dex_instruction.h
+++ b/runtime/dex_instruction.h
@@ -82,7 +82,7 @@
   // TODO: the code layout below is deliberate to avoid this enum being picked up by
   //       generate-operator-out.py.
   enum Code
-  { // NOLINT(whitespace/braces)
+  {  // NOLINT(whitespace/braces)
 #define INSTRUCTION_ENUM(opcode, cname, p, f, r, i, a, v) cname = opcode,
 #include "dex_instruction_list.h"
     DEX_INSTRUCTION_LIST(INSTRUCTION_ENUM)
@@ -124,7 +124,7 @@
     kThrow    = 0x08,  // could cause an exception to be thrown
     kReturn   = 0x10,  // returns, no additional statements
     kInvoke   = 0x20,  // a flavor of invoke
-    kUnconditional = 0x40, // unconditional branch
+    kUnconditional = 0x40,  // unconditional branch
   };
 
   enum VerifyFlag {
diff --git a/runtime/dex_instruction_list.h b/runtime/dex_instruction_list.h
index 31d51c9..c2cd65a 100644
--- a/runtime/dex_instruction_list.h
+++ b/runtime/dex_instruction_list.h
@@ -302,4 +302,4 @@
   V(k51l)
 
 #endif  // ART_RUNTIME_DEX_INSTRUCTION_LIST_H_
-#undef ART_RUNTIME_DEX_INSTRUCTION_LIST_H_ // the guard in this file is just for cpplint
+#undef ART_RUNTIME_DEX_INSTRUCTION_LIST_H_  // the guard in this file is just for cpplint
diff --git a/runtime/disassembler_arm.cc b/runtime/disassembler_arm.cc
index a7319a5..879d3ac 100644
--- a/runtime/disassembler_arm.cc
+++ b/runtime/disassembler_arm.cc
@@ -133,7 +133,7 @@
 std::ostream& operator<<(std::ostream& os, const Rm& r) {
   os << r.rm;
   if (r.shift != 0) {
-    os << "-shift-" << r.shift; // TODO
+    os << "-shift-" << r.shift;  // TODO
   }
   return os;
 }
@@ -185,16 +185,16 @@
   std::ostringstream args;
   switch (op1) {
     case 0:
-    case 1: // Data processing instructions.
+    case 1:  // Data processing instructions.
       {
-        if ((instruction & 0x0ff000f0) == 0x01200070) { // BKPT
+        if ((instruction & 0x0ff000f0) == 0x01200070) {  // BKPT
           opcode = "bkpt";
           uint32_t imm12 = (instruction >> 8) & 0xfff;
           uint32_t imm4 = (instruction & 0xf);
           args << '#' << ((imm12 << 4) | imm4);
           break;
         }
-        if ((instruction & 0x0fffffd0) == 0x012fff10) { // BX and BLX (register)
+        if ((instruction & 0x0fffffd0) == 0x012fff10) {  // BX and BLX (register)
           opcode = (((instruction >> 5) & 1) ? "blx" : "bx");
           args << ArmRegister(instruction & 0xf);
           break;
@@ -203,7 +203,7 @@
         bool s = (instruction & (1 << 20)) != 0;
         uint32_t op = (instruction >> 21) & 0xf;
         opcode = kDataProcessingOperations[op];
-        bool implicit_s = ((op & ~3) == 8); // TST, TEQ, CMP, and CMN.
+        bool implicit_s = ((op & ~3) == 8);  // TST, TEQ, CMP, and CMN.
         if (implicit_s) {
           // Rd is unused (and not shown), and we don't show the 's' suffix either.
         } else {
@@ -219,7 +219,7 @@
         }
       }
       break;
-    case 2: // Load/store word and unsigned byte.
+    case 2:  // Load/store word and unsigned byte.
       {
         bool p = (instruction & (1 << 24)) != 0;
         bool b = (instruction & (1 << 22)) != 0;
@@ -249,7 +249,7 @@
         }
       }
       break;
-    case 4: // Load/store multiple.
+    case 4:  // Load/store multiple.
       {
         bool p = (instruction & (1 << 24)) != 0;
         bool u = (instruction & (1 << 23)) != 0;
@@ -259,12 +259,12 @@
         args << ArmRegister(instruction, 16) << (w ? "!" : "") << ", " << RegisterList(instruction);
       }
       break;
-    case 5: // Branch/branch with link.
+    case 5:  // Branch/branch with link.
       {
         bool bl = (instruction & (1 << 24)) != 0;
         opcode = (bl ? "bl" : "b");
         int32_t imm26 = (instruction & 0xffffff) << 2;
-        int32_t imm32 = (imm26 << 6) >> 6; // Sign extend.
+        int32_t imm32 = (imm26 << 6) >> 6;  // Sign extend.
         DumpBranchTarget(args, instr_ptr + 8, imm32);
       }
       break;
@@ -344,10 +344,10 @@
           }
           args << RegisterList(instr);
         }
-      } else if ((op2 & 0x64) == 4) { // 00x x1xx
+      } else if ((op2 & 0x64) == 4) {  // 00x x1xx
         uint32_t op3 = (instr >> 23) & 3;
         uint32_t op4 = (instr >> 20) & 3;
-        //uint32_t op5 = (instr >> 4) & 0xF;
+        // uint32_t op5 = (instr >> 4) & 0xF;
         ArmRegister Rn(instr, 16);
         ArmRegister Rt(instr, 12);
         uint32_t imm8 = instr & 0xFF;
@@ -495,8 +495,8 @@
         uint32_t op3 = (instr >> 20) & 0x3F;
         uint32_t coproc = (instr >> 8) & 0xF;
         uint32_t op4 = (instr >> 4) & 0x1;
-        if ((op3 == 2 || op3 == 2 || op3 == 6 || op3 == 7) || // 00x1x
-            (op3 >= 8 && op3 <= 15) || (op3 >= 16 && op3 <= 31)) { // 001xxx, 01xxxx
+        if ((op3 == 2 || op3 == 2 || op3 == 6 || op3 == 7) ||  // 00x1x
+            (op3 >= 8 && op3 <= 15) || (op3 >= 16 && op3 <= 31)) {  // 001xxx, 01xxxx
           // Extension register load/store instructions
           // |111|1|110|00000|0000|1111|110|000000000|
           // |5 3|2|109|87654|3  0|54 2|10 |87 54   0|
@@ -519,13 +519,13 @@
             uint32_t d = (S == 0 ? ((Vd << 1) | D) : (Vd | (D << 4)));
             if (P == 0 && U == 0 && W == 0) {
               // TODO: 64bit transfers between ARM core and extension registers.
-            } else if (P == 0 && U == 1 && Rn.r == 13) { // VPOP
+            } else if (P == 0 && U == 1 && Rn.r == 13) {  // VPOP
               opcode << "vpop" << (S == 0 ? ".f64" : ".f32");
               args << d << " .. " << (d + imm8);
             } else if (P == 1 && W == 0) {  // VLDR
               opcode << "vldr" << (S == 0 ? ".f64" : ".f32");
               args << d << ", [" << Rn << ", #" << imm8 << "]";
-            } else { // VLDM
+            } else {  // VLDM
               opcode << "vldm" << (S == 0 ? ".f64" : ".f32");
               args << Rn << ", " << d << " .. " << (d + imm8);
             }
@@ -553,7 +553,7 @@
               uint32_t Vm = instr & 0xF;
               bool dp_operation = sz == 1;
               switch (opc2) {
-                case 0x1: // Vneg/Vsqrt
+                case 0x1:  // Vneg/Vsqrt
                   //  1110 11101 D 11 0001 dddd 101s o1M0 mmmm
                   opcode << (opc3 == 1 ? "vneg" : "vsqrt") << (dp_operation ? ".f64" : ".f32");
                   if (dp_operation) {
@@ -562,7 +562,7 @@
                     args << "f" << ((Vd << 1) | D) << ", " << "f" << ((Vm << 1) | M);
                   }
                   break;
-                case 0x4: case 0x5:  { // Vector compare
+                case 0x4: case 0x5:  {  // Vector compare
                   // 1110 11101 D 11 0100 dddd 101 sE1M0 mmmm
                   opcode << (opc3 == 1 ? "vcmp" : "vcmpe") << (dp_operation ? ".f64" : ".f32");
                   if (dp_operation) {
@@ -733,7 +733,7 @@
         // |111|10| op2   |    |1|op3|op4 |        |
 
         uint32_t op3 = (instr >> 12) & 7;
-        //uint32_t op4 = (instr >> 8) & 0xF;
+        // uint32_t op4 = (instr >> 8) & 0xF;
         switch (op3) {
           case 0:
             if ((op2 & 0x38) != 0x38) {
@@ -852,7 +852,7 @@
           // |---|--|---|---|-|----|----|------|------|
           // |111|11|000|op3|0|    |    |  op4 |      |
           uint32_t op3 = (instr >> 21) & 7;
-          //uint32_t op4 = (instr >> 6) & 0x3F;
+          // uint32_t op4 = (instr >> 6) & 0x3F;
           switch (op3) {
             case 0x0: case 0x4: {
               // STRB Rt,[Rn,#+/-imm8]     - 111 11 00 0 0 00 0 nnnn tttt 1 PUWii ii iiii
@@ -931,7 +931,7 @@
 
           break;
         }
-        case 0x03: case 0x0B: case 0x13: case 0x1B: { // 00xx011
+        case 0x03: case 0x0B: case 0x13: case 0x1B: {  // 00xx011
           // Load halfword
           // |111|11|10|0 0|00|0|0000|1111|110000|000000|
           // |5 3|21|09|8 7|65|4|3  0|5  2|10   6|5    0|
@@ -975,7 +975,7 @@
           }
           break;
         }
-        case 0x05: case 0x0D: case 0x15: case 0x1D: { // 00xx101
+        case 0x05: case 0x0D: case 0x15: case 0x1D: {  // 00xx101
           // Load word
           // |111|11|10|0 0|00|0|0000|1111|110000|000000|
           // |5 3|21|09|8 7|65|4|3  0|5  2|10   6|5    0|
@@ -1286,7 +1286,7 @@
             // Flesh out the base "it" opcode with the specific collection of 't's and 'e's,
             // and store up the actual condition codes we'll want to add to the next few opcodes.
             size_t count = 3 - CTZ(mask);
-            it_conditions_.resize(count + 2); // Plus the implicit 't', plus the "" for the IT itself.
+            it_conditions_.resize(count + 2);  // Plus the implicit 't', plus the "" for the IT itself.
             for (size_t i = 0; i < count; ++i) {
               bool positive_cond = ((first_cond & 1) != 0);
               bool positive_mask = ((mask & (1 << (3 - i))) != 0);
@@ -1298,10 +1298,10 @@
                 it_conditions_[i] = kConditionCodeNames[first_cond ^ 1];
               }
             }
-            it_conditions_[count] = kConditionCodeNames[first_cond]; // The implicit 't'.
+            it_conditions_[count] = kConditionCodeNames[first_cond];  // The implicit 't'.
 
-            it_conditions_[count + 1] = ""; // No condition code for the IT itself...
-            DumpCond(args, first_cond); // ...because it's considered an argument.
+            it_conditions_[count + 1] = "";  // No condition code for the IT itself...
+            DumpCond(args, first_cond);  // ...because it's considered an argument.
           }
           break;
         }
@@ -1312,7 +1312,7 @@
         ((instr & 0xE000) == 0x8000)) {
       // Load/store single data item
       uint16_t opA = instr >> 12;
-      //uint16_t opB = (instr >> 9) & 7;
+      // uint16_t opB = (instr >> 9) & 7;
       switch (opA) {
         case 0x6: {
           // STR Rt, [Rn, #imm] - 01100 iiiii nnn ttt
diff --git a/runtime/disassembler_mips.cc b/runtime/disassembler_mips.cc
index 7fba4a8..25bbae6 100644
--- a/runtime/disassembler_mips.cc
+++ b/runtime/disassembler_mips.cc
@@ -59,13 +59,13 @@
   { kRTypeMask, 6, "srlv", "DTS", },
   { kRTypeMask, 7, "srav", "DTS", },
   { kRTypeMask, 8, "jr", "S", },
-  { kRTypeMask | (0x1f << 11), 9 | (31 << 11), "jalr", "S", }, // rd = 31 is implicit.
-  { kRTypeMask, 9, "jalr", "DS", }, // General case.
+  { kRTypeMask | (0x1f << 11), 9 | (31 << 11), "jalr", "S", },  // rd = 31 is implicit.
+  { kRTypeMask, 9, "jalr", "DS", },  // General case.
   { kRTypeMask | (0x1f << 6), 10, "movz", "DST", },
   { kRTypeMask | (0x1f << 6), 11, "movn", "DST", },
-  { kRTypeMask, 12, "syscall", "", }, // TODO: code
-  { kRTypeMask, 13, "break", "", }, // TODO: code
-  { kRTypeMask, 15, "sync", "", }, // TODO: type
+  { kRTypeMask, 12, "syscall", "", },  // TODO: code
+  { kRTypeMask, 13, "break", "", },  // TODO: code
+  { kRTypeMask, 15, "sync", "", },  // TODO: type
   { kRTypeMask, 16, "mfhi", "D", },
   { kRTypeMask, 17, "mthi", "S", },
   { kRTypeMask, 18, "mflo", "D", },
@@ -99,7 +99,7 @@
   { kSpecial2Mask | 0xffff, (28 << kOpcodeShift) | 2, "mul", "DST" },
   { kSpecial2Mask | 0xffff, (28 << kOpcodeShift) | 4, "msub", "ST" },
   { kSpecial2Mask | 0xffff, (28 << kOpcodeShift) | 5, "msubu", "ST" },
-  { kSpecial2Mask | 0x3f, (28 << kOpcodeShift) | 0x3f, "sdbbp", "" }, // TODO: code
+  { kSpecial2Mask | 0x3f, (28 << kOpcodeShift) | 0x3f, "sdbbp", "" },  // TODO: code
 
   // J-type instructions.
   { kJTypeMask, 2 << kOpcodeShift, "j", "L" },
@@ -171,17 +171,17 @@
 static void DumpMips(std::ostream& os, const uint8_t* instr_ptr) {
   uint32_t instruction = ReadU32(instr_ptr);
 
-  uint32_t rs = (instruction >> 21) & 0x1f; // I-type, R-type.
-  uint32_t rt = (instruction >> 16) & 0x1f; // I-type, R-type.
-  uint32_t rd = (instruction >> 11) & 0x1f; // R-type.
-  uint32_t sa = (instruction >>  6) & 0x1f; // R-type.
+  uint32_t rs = (instruction >> 21) & 0x1f;  // I-type, R-type.
+  uint32_t rt = (instruction >> 16) & 0x1f;  // I-type, R-type.
+  uint32_t rd = (instruction >> 11) & 0x1f;  // R-type.
+  uint32_t sa = (instruction >>  6) & 0x1f;  // R-type.
 
   std::string opcode;
   std::ostringstream args;
 
   // TODO: remove this!
   uint32_t op = (instruction >> 26) & 0x3f;
-  uint32_t function = (instruction & 0x3f); // R-type.
+  uint32_t function = (instruction & 0x3f);  // R-type.
   opcode = StringPrintf("op=%d fn=%d", op, function);
 
   for (size_t i = 0; i < arraysize(gMipsInstructions); ++i) {
@@ -189,22 +189,22 @@
       opcode = gMipsInstructions[i].name;
       for (const char* args_fmt = gMipsInstructions[i].args_fmt; *args_fmt; ++args_fmt) {
         switch (*args_fmt) {
-          case 'A': // sa (shift amount).
+          case 'A':  // sa (shift amount).
             args << sa;
             break;
-          case 'B': // Branch offset.
+          case 'B':  // Branch offset.
             {
               int32_t offset = static_cast<int16_t>(instruction & 0xffff);
               offset <<= 2;
-              offset += 4; // Delay slot.
+              offset += 4;  // Delay slot.
               args << StringPrintf("%p  ; %+d", instr_ptr + offset, offset);
             }
             break;
           case 'D': args << 'r' << rd; break;
           case 'd': args << 'f' << rd; break;
-          case 'f': // Floating point "fmt".
+          case 'f':  // Floating point "fmt".
             {
-              size_t fmt = (instruction >> 21) & 0x7; // TODO: other fmts?
+              size_t fmt = (instruction >> 21) & 0x7;  // TODO: other fmts?
               switch (fmt) {
                 case 0: opcode += ".s"; break;
                 case 1: opcode += ".d"; break;
@@ -213,16 +213,16 @@
                 case 6: opcode += ".ps"; break;
                 default: opcode += ".?"; break;
               }
-              continue; // No ", ".
+              continue;  // No ", ".
             }
             break;
-          case 'I': // Upper 16-bit immediate.
+          case 'I':  // Upper 16-bit immediate.
             args << reinterpret_cast<void*>((instruction & 0xffff) << 16);
             break;
-          case 'i': // Sign-extended lower 16-bit immediate.
+          case 'i':  // Sign-extended lower 16-bit immediate.
             args << static_cast<int16_t>(instruction & 0xffff);
             break;
-          case 'L': // Jump label.
+          case 'L':  // Jump label.
             {
               // TODO: is this right?
               uint32_t instr_index = (instruction & 0x1ffffff);
@@ -231,7 +231,7 @@
               args << reinterpret_cast<void*>(target);
             }
             break;
-          case 'O': // +x(rs)
+          case 'O':  // +x(rs)
             {
               int32_t offset = static_cast<int16_t>(instruction & 0xffff);
               args << StringPrintf("%+d(r%d)", offset, rs);
diff --git a/runtime/disassembler_x86.cc b/runtime/disassembler_x86.cc
index 48f7b6b..e5cdb7b 100644
--- a/runtime/disassembler_x86.cc
+++ b/runtime/disassembler_x86.cc
@@ -744,7 +744,7 @@
                      prefixed_opcode.str().c_str())
      << args.str() << '\n';
   return instr - begin_instr;
-} // NOLINT(readability/fn_size)
+}  // NOLINT(readability/fn_size)
 
 }  // namespace x86
 }  // namespace art
diff --git a/runtime/exception_test.cc b/runtime/exception_test.cc
index 54341e3..a7a6d46 100644
--- a/runtime/exception_test.cc
+++ b/runtime/exception_test.cc
@@ -217,7 +217,7 @@
   EXPECT_EQ(22, trace_array->Get(1)->GetLineNumber());
 
 #if !defined(ART_USE_PORTABLE_COMPILER)
-  thread->SetTopOfStack(NULL, 0); // Disarm the assertion that no code is running when we detach.
+  thread->SetTopOfStack(NULL, 0);  // Disarm the assertion that no code is running when we detach.
 #else
   thread->PopShadowFrame();
   thread->PopShadowFrame();
diff --git a/runtime/gc/accounting/card_table.cc b/runtime/gc/accounting/card_table.cc
index 4f2ae26..85034a0 100644
--- a/runtime/gc/accounting/card_table.cc
+++ b/runtime/gc/accounting/card_table.cc
@@ -88,7 +88,7 @@
 void CardTable::ClearSpaceCards(space::ContinuousSpace* space) {
   // TODO: clear just the range of the table that has been modified
   byte* card_start = CardFromAddr(space->Begin());
-  byte* card_end = CardFromAddr(space->End()); // Make sure to round up.
+  byte* card_end = CardFromAddr(space->End());  // Make sure to round up.
   memset(reinterpret_cast<void*>(card_start), kCardClean, card_end - card_start);
 }
 
diff --git a/runtime/gc/accounting/space_bitmap-inl.h b/runtime/gc/accounting/space_bitmap-inl.h
index d074a0f..a4cfe3c 100644
--- a/runtime/gc/accounting/space_bitmap-inl.h
+++ b/runtime/gc/accounting/space_bitmap-inl.h
@@ -59,7 +59,7 @@
                                    const FingerVisitor& finger_visitor) const {
   DCHECK_LT(visit_begin, visit_end);
 
-  const size_t word_span = kAlignment * kBitsPerWord; // Equals IndexToOffset(1).
+  const size_t word_span = kAlignment * kBitsPerWord;  // Equals IndexToOffset(1).
   const size_t bit_index_start = (visit_begin - heap_begin_) / kAlignment;
   const size_t bit_index_end = (visit_end - heap_begin_ - 1) / kAlignment;
 
diff --git a/runtime/gc/collector/mark_sweep.cc b/runtime/gc/collector/mark_sweep.cc
index 0cbd6fb..89c768a 100644
--- a/runtime/gc/collector/mark_sweep.cc
+++ b/runtime/gc/collector/mark_sweep.cc
@@ -61,7 +61,7 @@
 
 // Performance options.
 static const bool kParallelMarkStack = true;
-static const bool kDisableFinger = true; // TODO: Fix, bit rotten.
+static const bool kDisableFinger = true;  // TODO: Fix, bit rotten.
 static const bool kUseMarkStackPrefetch = true;
 
 // Profiling and information flags.
@@ -1253,7 +1253,7 @@
   thread_pool->StartWorkers(self);
   thread_pool->Wait(self, true, true);
   mark_stack_->Reset();
-  //LOG(INFO) << "Idle wait time " << PrettyDuration(thread_pool->GetWaitTime());
+  // LOG(INFO) << "Idle wait time " << PrettyDuration(thread_pool->GetWaitTime());
   CHECK_EQ(work_chunks_created_, work_chunks_deleted_) << " some of the work chunks were leaked";
 }
 
diff --git a/runtime/gc/collector/mark_sweep.h b/runtime/gc/collector/mark_sweep.h
index 34136d4..d386fd6 100644
--- a/runtime/gc/collector/mark_sweep.h
+++ b/runtime/gc/collector/mark_sweep.h
@@ -424,7 +424,7 @@
 
   bool clear_soft_references_;
 
-  friend class AddIfReachesAllocSpaceVisitor; // Used by mod-union table.
+  friend class AddIfReachesAllocSpaceVisitor;  // Used by mod-union table.
   friend class CheckBitmapVisitor;
   friend class CheckObjectVisitor;
   friend class CheckReferenceVisitor;
diff --git a/runtime/gc/heap.cc b/runtime/gc/heap.cc
index b0ba8b6..292fd29 100644
--- a/runtime/gc/heap.cc
+++ b/runtime/gc/heap.cc
@@ -523,7 +523,7 @@
 }
 
 bool Heap::IsLiveObjectLocked(const mirror::Object* obj) {
-  //Locks::heap_bitmap_lock_->AssertReaderHeld(Thread::Current());
+  // Locks::heap_bitmap_lock_->AssertReaderHeld(Thread::Current());
   if (obj == NULL) {
     return false;
   }
diff --git a/runtime/gc/space/dlmalloc_space.cc b/runtime/gc/space/dlmalloc_space.cc
index 550f44b..de4917f 100644
--- a/runtime/gc/space/dlmalloc_space.cc
+++ b/runtime/gc/space/dlmalloc_space.cc
@@ -20,7 +20,7 @@
 #include "thread.h"
 #include "utils.h"
 
-//#include <valgrind/memcheck.h>
+// #include <valgrind/memcheck.h>
 #include <valgrind.h>
 
 namespace art {
@@ -49,7 +49,7 @@
   virtual mirror::Object* AllocWithGrowth(Thread* self, size_t num_bytes) {
     void* obj_with_rdz = DlMallocSpace::AllocWithGrowth(self, num_bytes + (2 * kValgrindRedZoneBytes));
     if (obj_with_rdz != NULL) {
-      //VALGRIND_MAKE_MEM_UNDEFINED();
+      // VALGRIND_MAKE_MEM_UNDEFINED();
       mirror::Object* result = reinterpret_cast<mirror::Object*>(reinterpret_cast<byte*>(obj_with_rdz) +
                                                                  kValgrindRedZoneBytes);
       VALGRIND_MEMPOOL_ALLOC(GetMspace(), result, num_bytes);
diff --git a/runtime/gc/space/space.h b/runtime/gc/space/space.h
index 011e155..bc6e818 100644
--- a/runtime/gc/space/space.h
+++ b/runtime/gc/space/space.h
@@ -36,7 +36,7 @@
 
 namespace accounting {
   class SpaceBitmap;
-} // namespace accounting
+}  // namespace accounting
 
 class Heap;
 
diff --git a/runtime/hprof/hprof.cc b/runtime/hprof/hprof.cc
index 3c8099a..d3bb2e8 100644
--- a/runtime/hprof/hprof.cc
+++ b/runtime/hprof/hprof.cc
@@ -641,7 +641,7 @@
 
     // U4: low word of the 64-bit time.
     U4_TO_BUF_BE(buf, 0, (uint32_t)(nowMs & 0xffffffffULL));
-    fwrite(buf, 1, sizeof(uint32_t), header_fp_); //xxx fix the time
+    fwrite(buf, 1, sizeof(uint32_t), header_fp_);  // xxx fix the time
   }
 
   void WriteStackTraces() {
@@ -665,7 +665,7 @@
 
   uint32_t gc_thread_serial_number_;
   uint8_t gc_scan_state_;
-  HprofHeapId current_heap_; // Which heap we're currently dumping.
+  HprofHeapId current_heap_;  // Which heap we're currently dumping.
   size_t objects_in_segment_;
 
   FILE* header_fp_;
@@ -805,7 +805,7 @@
     rec->AddU1(heapTag);
     rec->AddId((HprofObjectId)obj);
     rec->AddU4(gc_thread_serial_number_);
-    rec->AddU4((uint32_t)-1);    //xxx
+    rec->AddU4((uint32_t)-1);    // xxx
     break;
 
   case HPROF_CLASS_DUMP:
@@ -834,7 +834,7 @@
 
 int Hprof::DumpHeapObject(mirror::Object* obj) {
   HprofRecord* rec = &current_record_;
-  HprofHeapId desiredHeap = false ? HPROF_HEAP_ZYGOTE : HPROF_HEAP_APP; // TODO: zygote objects?
+  HprofHeapId desiredHeap = false ? HPROF_HEAP_ZYGOTE : HPROF_HEAP_APP;  // TODO: zygote objects?
 
   if (objects_in_segment_ >= OBJECTS_PER_SEGMENT || rec->Size() >= BYTES_PER_SEGMENT) {
     StartNewHeapDumpSegment();
@@ -876,7 +876,7 @@
       // obj is a ClassObject.
       size_t sFieldCount = thisClass->NumStaticFields();
       if (sFieldCount != 0) {
-        int byteLength = sFieldCount*sizeof(JValue); // TODO bogus; fields are packed
+        int byteLength = sFieldCount*sizeof(JValue);  // TODO bogus; fields are packed
         // Create a byte array to reflect the allocation of the
         // StaticField array at the end of this class.
         rec->AddU1(HPROF_PRIMITIVE_ARRAY_DUMP);
@@ -901,14 +901,14 @@
       if (thisClass->IsClassClass()) {
         // ClassObjects have their static fields appended, so aren't all the same size.
         // But they're at least this size.
-        rec->AddU4(sizeof(mirror::Class)); // instance size
+        rec->AddU4(sizeof(mirror::Class));  // instance size
       } else if (thisClass->IsArrayClass() || thisClass->IsPrimitive()) {
         rec->AddU4(0);
       } else {
-        rec->AddU4(thisClass->GetObjectSize()); // instance size
+        rec->AddU4(thisClass->GetObjectSize());  // instance size
       }
 
-      rec->AddU2(0); // empty const pool
+      rec->AddU2(0);  // empty const pool
 
       FieldHelper fh;
 
@@ -1041,7 +1041,7 @@
 
 void Hprof::VisitRoot(const mirror::Object* obj) {
   uint32_t threadId = 0;  // TODO
-  /*RootType*/ size_t type = 0; // TODO
+  /*RootType*/ size_t type = 0;  // TODO
 
   static const HprofHeapTag xlate[] = {
     HPROF_ROOT_UNKNOWN,
diff --git a/runtime/indirect_reference_table.cc b/runtime/indirect_reference_table.cc
index 0287d74..0616d28 100644
--- a/runtime/indirect_reference_table.cc
+++ b/runtime/indirect_reference_table.cc
@@ -309,7 +309,7 @@
 }
 
 void IndirectReferenceTable::VisitRoots(RootVisitor* visitor, void* arg) {
-  typedef IndirectReferenceTable::iterator It; // TODO: C++0x auto
+  typedef IndirectReferenceTable::iterator It;  // TODO: C++0x auto
   for (It it = begin(), end = this->end(); it != end; ++it) {
     visitor(**it, arg);
   }
diff --git a/runtime/indirect_reference_table.h b/runtime/indirect_reference_table.h
index 34b0f3a..97706b8 100644
--- a/runtime/indirect_reference_table.h
+++ b/runtime/indirect_reference_table.h
@@ -109,10 +109,10 @@
  * For convenience these match up with enum jobjectRefType from jni.h.
  */
 enum IndirectRefKind {
-  kSirtOrInvalid = 0, // <<stack indirect reference table or invalid reference>>
-  kLocal         = 1, // <<local reference>>
-  kGlobal        = 2, // <<global reference>>
-  kWeakGlobal    = 3  // <<weak global reference>>
+  kSirtOrInvalid = 0,  // <<stack indirect reference table or invalid reference>>
+  kLocal         = 1,  // <<local reference>>
+  kGlobal        = 2,  // <<global reference>>
+  kWeakGlobal    = 3   // <<weak global reference>>
 };
 std::ostream& operator<<(std::ostream& os, const IndirectRefKind& rhs);
 
diff --git a/runtime/instrumentation.cc b/runtime/instrumentation.cc
index 8a05aa4..e99fbd8 100644
--- a/runtime/instrumentation.cc
+++ b/runtime/instrumentation.cc
@@ -122,7 +122,7 @@
           LOG(INFO) << "  Skipping upcall. Frame " << GetFrameId();
         }
         last_return_pc_ = 0;
-        return true; // Ignore upcalls.
+        return true;  // Ignore upcalls.
       }
       if (m->IsRuntimeMethod()) {
         if (kVerboseInstrumentation) {
@@ -206,7 +206,7 @@
         }
         return true;  // Ignore upcalls.
       }
-      typedef std::deque<instrumentation::InstrumentationStackFrame>::const_iterator It; // TODO: C++0x auto
+      typedef std::deque<instrumentation::InstrumentationStackFrame>::const_iterator It;  // TODO: C++0x auto
       bool removed_stub = false;
       // TODO: make this search more efficient?
       for (It it = instrumentation_stack_->begin(), end = instrumentation_stack_->end(); it != end;
@@ -407,7 +407,7 @@
 void Instrumentation::MethodEnterEventImpl(Thread* thread, mirror::Object* this_object,
                                            const mirror::AbstractMethod* method,
                                            uint32_t dex_pc) const {
-  typedef std::list<InstrumentationListener*>::const_iterator It; // TODO: C++0x auto
+  typedef std::list<InstrumentationListener*>::const_iterator It;  // TODO: C++0x auto
   It it = method_entry_listeners_.begin();
   bool is_end = (it == method_entry_listeners_.end());
   // Implemented this way to prevent problems caused by modification of the list while iterating.
@@ -422,7 +422,7 @@
 void Instrumentation::MethodExitEventImpl(Thread* thread, mirror::Object* this_object,
                                           const mirror::AbstractMethod* method,
                                           uint32_t dex_pc, const JValue& return_value) const {
-  typedef std::list<InstrumentationListener*>::const_iterator It; // TODO: C++0x auto
+  typedef std::list<InstrumentationListener*>::const_iterator It;  // TODO: C++0x auto
   It it = method_exit_listeners_.begin();
   bool is_end = (it == method_exit_listeners_.end());
   // Implemented this way to prevent problems caused by modification of the list while iterating.
@@ -438,7 +438,7 @@
                                         const mirror::AbstractMethod* method,
                                         uint32_t dex_pc) const {
   if (have_method_unwind_listeners_) {
-    typedef std::list<InstrumentationListener*>::const_iterator It; // TODO: C++0x auto
+    typedef std::list<InstrumentationListener*>::const_iterator It;  // TODO: C++0x auto
     for (It it = method_unwind_listeners_.begin(), end = method_unwind_listeners_.end(); it != end;
         ++it) {
       (*it)->MethodUnwind(thread, method, dex_pc);
@@ -454,7 +454,7 @@
   // around the problem and in general we may have to move to something like reference counting to
   // ensure listeners are deleted correctly.
   std::list<InstrumentationListener*> copy(dex_pc_listeners_);
-  typedef std::list<InstrumentationListener*>::const_iterator It; // TODO: C++0x auto
+  typedef std::list<InstrumentationListener*>::const_iterator It;  // TODO: C++0x auto
   for (It it = copy.begin(), end = copy.end(); it != end; ++it) {
     (*it)->DexPcMoved(thread, this_object, method, dex_pc);
   }
@@ -467,7 +467,7 @@
   if (have_exception_caught_listeners_) {
     DCHECK_EQ(thread->GetException(NULL), exception_object);
     thread->ClearException();
-    typedef std::list<InstrumentationListener*>::const_iterator It; // TODO: C++0x auto
+    typedef std::list<InstrumentationListener*>::const_iterator It;  // TODO: C++0x auto
     for (It it = exception_caught_listeners_.begin(), end = exception_caught_listeners_.end();
         it != end; ++it) {
       (*it)->ExceptionCaught(thread, throw_location, catch_method, catch_dex_pc, exception_object);
diff --git a/runtime/intern_table.cc b/runtime/intern_table.cc
index d1ad2db..e2c1a64 100644
--- a/runtime/intern_table.cc
+++ b/runtime/intern_table.cc
@@ -40,7 +40,7 @@
 
 void InternTable::VisitRoots(RootVisitor* visitor, void* arg, bool clean_dirty) {
   MutexLock mu(Thread::Current(), intern_table_lock_);
-  typedef Table::const_iterator It; // TODO: C++0x auto
+  typedef Table::const_iterator It;  // TODO: C++0x auto
   for (It it = strong_interns_.begin(), end = strong_interns_.end(); it != end; ++it) {
     visitor(it->second, arg);
   }
@@ -52,7 +52,7 @@
 
 mirror::String* InternTable::Lookup(Table& table, mirror::String* s, uint32_t hash_code) {
   intern_table_lock_.AssertHeld(Thread::Current());
-  typedef Table::const_iterator It; // TODO: C++0x auto
+  typedef Table::const_iterator It;  // TODO: C++0x auto
   for (It it = table.find(hash_code), end = table.end(); it != end; ++it) {
     mirror::String* existing_string = it->second;
     if (existing_string->Equals(s)) {
@@ -75,7 +75,7 @@
 
 void InternTable::Remove(Table& table, const mirror::String* s, uint32_t hash_code) {
   intern_table_lock_.AssertHeld(Thread::Current());
-  typedef Table::iterator It; // TODO: C++0x auto
+  typedef Table::iterator It;  // TODO: C++0x auto
   for (It it = table.find(hash_code), end = table.end(); it != end; ++it) {
     if (it->second == s) {
       table.erase(it);
@@ -166,7 +166,7 @@
 
 void InternTable::SweepInternTableWeaks(IsMarkedTester is_marked, void* arg) {
   MutexLock mu(Thread::Current(), intern_table_lock_);
-  typedef Table::iterator It; // TODO: C++0x auto
+  typedef Table::iterator It;  // TODO: C++0x auto
   for (It it = weak_interns_.begin(), end = weak_interns_.end(); it != end;) {
     mirror::Object* object = it->second;
     if (!is_marked(object, arg)) {
diff --git a/runtime/intern_table_test.cc b/runtime/intern_table_test.cc
index f6b040d..ffb93eb 100644
--- a/runtime/intern_table_test.cc
+++ b/runtime/intern_table_test.cc
@@ -58,7 +58,7 @@
  public:
   bool IsMarked(const mirror::Object* s) const {
     bool erased = false;
-    typedef std::vector<const mirror::String*>::iterator It; // TODO: C++0x auto
+    typedef std::vector<const mirror::String*>::iterator It;  // TODO: C++0x auto
     for (It it = expected_.begin(), end = expected_.end(); it != end; ++it) {
       if (*it == s) {
         expected_.erase(it);
diff --git a/runtime/interpreter/interpreter.cc b/runtime/interpreter/interpreter.cc
index 57e9dbf..d649d2a 100644
--- a/runtime/interpreter/interpreter.cc
+++ b/runtime/interpreter/interpreter.cc
@@ -74,7 +74,7 @@
   std::string name(PrettyMethod(shadow_frame->GetMethod()));
   if (name == "java.lang.Class java.lang.Class.forName(java.lang.String)") {
     std::string descriptor(DotToDescriptor(shadow_frame->GetVRegReference(arg_offset)->AsString()->ToModifiedUtf8().c_str()));
-    ClassLoader* class_loader = NULL; // shadow_frame.GetMethod()->GetDeclaringClass()->GetClassLoader();
+    ClassLoader* class_loader = NULL;  // shadow_frame.GetMethod()->GetDeclaringClass()->GetClassLoader();
     Class* found = Runtime::Current()->GetClassLinker()->FindClass(descriptor.c_str(),
                                                                    class_loader);
     CHECK(found != NULL) << "Class.forName failed in un-started runtime for class: "
@@ -659,7 +659,7 @@
     return;
   }
   MemberOffset field_offset(inst->VRegC_22c());
-  const bool is_volatile = false; // iget-x-quick only on non volatile fields.
+  const bool is_volatile = false;  // iget-x-quick only on non volatile fields.
   const uint32_t vregA = inst->VRegA_22c();
   switch (field_type) {
     case Primitive::kPrimInt:
@@ -752,7 +752,7 @@
     return;
   }
   MemberOffset field_offset(inst->VRegC_22c());
-  const bool is_volatile = false; // iput-x-quick only on non volatile fields.
+  const bool is_volatile = false;  // iput-x-quick only on non volatile fields.
   const uint32_t vregA = inst->VRegA_22c();
   switch (field_type) {
     case Primitive::kPrimInt:
diff --git a/runtime/invoke_type.h b/runtime/invoke_type.h
index cdf9be8..de07c72 100644
--- a/runtime/invoke_type.h
+++ b/runtime/invoke_type.h
@@ -22,11 +22,11 @@
 namespace art {
 
 enum InvokeType {
-  kStatic,    // <<static>>
-  kDirect,    // <<direct>>
-  kVirtual,   // <<virtual>>
-  kSuper,     // <<super>>
-  kInterface, // <<interface>>
+  kStatic,     // <<static>>
+  kDirect,     // <<direct>>
+  kVirtual,    // <<virtual>>
+  kSuper,      // <<super>>
+  kInterface,  // <<interface>>
   kMaxInvokeType = kInterface
 };
 
diff --git a/runtime/jdwp/jdwp.h b/runtime/jdwp/jdwp.h
index ca118a2..010a207 100644
--- a/runtime/jdwp/jdwp.h
+++ b/runtime/jdwp/jdwp.h
@@ -152,7 +152,7 @@
    * events at the same time, so we grab a mutex in the "set" call, and
    * release it in the "clear" call.
    */
-  //ObjectId GetWaitForEventThread();
+  // ObjectId GetWaitForEventThread();
   void SetWaitForEventThread(ObjectId threadId);
   void ClearWaitForEventThread();
 
@@ -291,7 +291,7 @@
       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
   void SendBufferedRequest(uint32_t type, const std::vector<iovec>& iov);
 
- public: // TODO: fix privacy
+ public:  // TODO: fix privacy
   const JdwpOptions* options_;
 
  private:
@@ -308,7 +308,7 @@
  private:
   bool run;
 
- public: // TODO: fix privacy
+ public:  // TODO: fix privacy
   JdwpNetStateBase* netState;
 
  private:
@@ -326,7 +326,7 @@
   // Linked list of events requested by the debugger (breakpoints, class prep, etc).
   Mutex event_list_lock_;
   JdwpEvent* event_list_ GUARDED_BY(event_list_lock_);
-  int event_list_size_ GUARDED_BY(event_list_lock_); // Number of elements in event_list_.
+  int event_list_size_ GUARDED_BY(event_list_lock_);  // Number of elements in event_list_.
 
   // Used to synchronize suspension of the event thread (to avoid receiving "resume"
   // events before the thread has finished suspending itself).
diff --git a/runtime/jdwp/jdwp_constants.h b/runtime/jdwp/jdwp_constants.h
index a8db325..9fc896d 100644
--- a/runtime/jdwp/jdwp_constants.h
+++ b/runtime/jdwp/jdwp_constants.h
@@ -111,7 +111,7 @@
   EK_EXCEPTION            = 4,
   EK_USER_DEFINED         = 5,
   EK_THREAD_START         = 6,
-  EK_THREAD_DEATH         = 7, // Formerly known as THREAD_END.
+  EK_THREAD_DEATH         = 7,  // Formerly known as THREAD_END.
   EK_CLASS_PREPARE        = 8,
   EK_CLASS_UNLOAD         = 9,
   EK_CLASS_LOAD           = 10,
@@ -125,9 +125,9 @@
   EK_MONITOR_CONTENDED_ENTERED     = 44,
   EK_MONITOR_WAIT         = 45,
   EK_MONITOR_WAITED       = 46,
-  EK_VM_START             = 90, // Formerly known as VM_INIT.
+  EK_VM_START             = 90,  // Formerly known as VM_INIT.
   EK_VM_DEATH             = 99,
-  EK_VM_DISCONNECTED      = 100, // "Never sent across JDWP".
+  EK_VM_DISCONNECTED      = 100,  // "Never sent across JDWP".
 };
 std::ostream& operator<<(std::ostream& os, const JdwpEventKind& value);
 
@@ -146,7 +146,7 @@
   MK_FIELD_ONLY           = 9,
   MK_STEP                 = 10,
   MK_INSTANCE_ONLY        = 11,
-  MK_SOURCE_NAME_MATCH    = 12, // Since Java 6.
+  MK_SOURCE_NAME_MATCH    = 12,  // Since Java 6.
 };
 std::ostream& operator<<(std::ostream& os, const JdwpModKind& value);
 
diff --git a/runtime/jdwp/jdwp_event.cc b/runtime/jdwp/jdwp_event.cc
index ef5a7d3..345549d 100644
--- a/runtime/jdwp/jdwp_event.cc
+++ b/runtime/jdwp/jdwp_event.cc
@@ -248,7 +248,7 @@
     pEvent = pEvent->next;
   }
 
-  //LOGD("Odd: no match when removing event reqId=0x%04x", requestId);
+  // ALOGD("Odd: no match when removing event reqId=0x%04x", requestId);
 }
 
 /*
@@ -679,7 +679,7 @@
 
   ExpandBuf* pReq = eventPrep();
   {
-    MutexLock mu(Thread::Current(), event_list_lock_); // probably don't need this here
+    MutexLock mu(Thread::Current(), event_list_lock_);  // probably don't need this here
 
     VLOG(jdwp) << "EVENT: " << EK_VM_START;
     VLOG(jdwp) << "  suspend_policy=" << suspend_policy;
@@ -773,7 +773,7 @@
       FindMatchingEvents(EK_METHOD_EXIT, &basket, match_list, &match_count);
 
       // TODO: match EK_METHOD_EXIT_WITH_RETURN_VALUE too; we need to include the 'value', though.
-      //FindMatchingEvents(EK_METHOD_EXIT_WITH_RETURN_VALUE, &basket, match_list, &match_count);
+      // FindMatchingEvents(EK_METHOD_EXIT_WITH_RETURN_VALUE, &basket, match_list, &match_count);
     }
     if (match_count != 0) {
       VLOG(jdwp) << "EVENT: " << match_list[0]->eventKind << "(" << match_count << " total) "
diff --git a/runtime/jdwp/jdwp_handler.cc b/runtime/jdwp/jdwp_handler.cc
index 9af2f83..a2efc48 100644
--- a/runtime/jdwp/jdwp_handler.cc
+++ b/runtime/jdwp/jdwp_handler.cc
@@ -1030,7 +1030,7 @@
   }
 
   if (actual_frame_count <= 0) {
-    return ERR_THREAD_NOT_SUSPENDED; // 0 means no managed frames (which means "in native").
+    return ERR_THREAD_NOT_SUSPENDED;  // 0 means no managed frames (which means "in native").
   }
 
   if (start_frame > actual_frame_count) {
@@ -1315,7 +1315,7 @@
     case MK_EXCEPTION_ONLY:
       {
         // Modifies EK_EXCEPTION events,
-        mod.exceptionOnly.refTypeId = request.ReadRefTypeId(); // null => all exceptions.
+        mod.exceptionOnly.refTypeId = request.ReadRefTypeId();  // null => all exceptions.
         mod.exceptionOnly.caught = request.ReadEnum1<uint8_t>("caught");
         mod.exceptionOnly.uncaught = request.ReadEnum1<uint8_t>("uncaught");
       }
@@ -1622,7 +1622,7 @@
   { 17,   1,  COR_ReflectedType, "ClassObjectReference.ReflectedType" },
 
   /* Event command set (64) */
-  { 64, 100,  NULL, "Event.Composite" }, // sent from VM to debugger, never received by VM
+  { 64, 100,  NULL, "Event.Composite" },  // sent from VM to debugger, never received by VM
 
   { 199,  1,  DDM_Chunk,        "DDM.Chunk" },
 };
diff --git a/runtime/jdwp/jdwp_priv.h b/runtime/jdwp/jdwp_priv.h
index f919f97..4e6aada 100644
--- a/runtime/jdwp/jdwp_priv.h
+++ b/runtime/jdwp/jdwp_priv.h
@@ -72,9 +72,9 @@
   ssize_t WritePacket(ExpandBuf* pReply);
   ssize_t WriteBufferedPacket(const std::vector<iovec>& iov);
 
-  int clientSock; // Active connection to debugger.
+  int clientSock;  // Active connection to debugger.
 
-  int wake_pipe_[2]; // Used to break out of select.
+  int wake_pipe_[2];  // Used to break out of select.
 
   uint8_t input_buffer_[8192];
   size_t input_count_;
diff --git a/runtime/jdwp/jdwp_request.cc b/runtime/jdwp/jdwp_request.cc
index 440b51b..a9dd1e1 100644
--- a/runtime/jdwp/jdwp_request.cc
+++ b/runtime/jdwp/jdwp_request.cc
@@ -140,7 +140,7 @@
 
 JdwpLocation Request::ReadLocation() {
   JdwpLocation location;
-  memset(&location, 0, sizeof(location)); // Allows memcmp(3) later.
+  memset(&location, 0, sizeof(location));  // Allows memcmp(3) later.
   location.type_tag = ReadTypeTag();
   location.class_id = ReadObjectId("class");
   location.method_id = ReadMethodId();
diff --git a/runtime/jdwp/object_registry.cc b/runtime/jdwp/object_registry.cc
index 54e7a8e..be2219c 100644
--- a/runtime/jdwp/object_registry.cc
+++ b/runtime/jdwp/object_registry.cc
@@ -173,15 +173,15 @@
   MutexLock mu(self, lock_);
   id_iterator it = id_to_entry_.find(id);
   if (it == id_to_entry_.end()) {
-    return true; // TODO: can we report that this was an invalid id?
+    return true;  // TODO: can we report that this was an invalid id?
   }
 
   ObjectRegistryEntry& entry = *(it->second);
   if (entry.jni_reference_type == JNIWeakGlobalRefType) {
     JNIEnv* env = self->GetJniEnv();
-    return env->IsSameObject(entry.jni_reference, NULL); // Has the jweak been collected?
+    return env->IsSameObject(entry.jni_reference, NULL);  // Has the jweak been collected?
   } else {
-    return false; // We hold a strong reference, so we know this is live.
+    return false;  // We hold a strong reference, so we know this is live.
   }
 }
 
diff --git a/runtime/jni_internal.cc b/runtime/jni_internal.cc
index 72d9aea..858ac34 100644
--- a/runtime/jni_internal.cc
+++ b/runtime/jni_internal.cc
@@ -69,20 +69,20 @@
 
 namespace art {
 
-static const size_t kMonitorsInitial = 32; // Arbitrary.
-static const size_t kMonitorsMax = 4096; // Arbitrary sanity check.
+static const size_t kMonitorsInitial = 32;  // Arbitrary.
+static const size_t kMonitorsMax = 4096;  // Arbitrary sanity check.
 
-static const size_t kLocalsInitial = 64; // Arbitrary.
-static const size_t kLocalsMax = 512; // Arbitrary sanity check.
+static const size_t kLocalsInitial = 64;  // Arbitrary.
+static const size_t kLocalsMax = 512;  // Arbitrary sanity check.
 
-static const size_t kPinTableInitial = 16; // Arbitrary.
-static const size_t kPinTableMax = 1024; // Arbitrary sanity check.
+static const size_t kPinTableInitial = 16;  // Arbitrary.
+static const size_t kPinTableMax = 1024;  // Arbitrary sanity check.
 
-static size_t gGlobalsInitial = 512; // Arbitrary.
-static size_t gGlobalsMax = 51200; // Arbitrary sanity check. (Must fit in 16 bits.)
+static size_t gGlobalsInitial = 512;  // Arbitrary.
+static size_t gGlobalsMax = 51200;  // Arbitrary sanity check. (Must fit in 16 bits.)
 
-static const size_t kWeakGlobalsInitial = 16; // Arbitrary.
-static const size_t kWeakGlobalsMax = 51200; // Arbitrary sanity check. (Must fit in 16 bits.)
+static const size_t kWeakGlobalsInitial = 16;  // Arbitrary.
+static const size_t kWeakGlobalsMax = 51200;  // Arbitrary sanity check. (Must fit in 16 bits.)
 
 static jweak AddWeakGlobalReference(ScopedObjectAccess& soa, Object* obj)
     SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
@@ -591,7 +591,7 @@
   }
 
  private:
-  typedef SafeMap<std::string, SharedLibrary*>::const_iterator It; // TODO: C++0x auto
+  typedef SafeMap<std::string, SharedLibrary*>::const_iterator It;  // TODO: C++0x auto
 
   SafeMap<std::string, SharedLibrary*> libraries_;
 };
@@ -1796,7 +1796,7 @@
     String* s = soa.Decode<String*>(java_string);
     size_t byte_count = s->GetUtfLength();
     char* bytes = new char[byte_count + 1];
-    CHECK(bytes != NULL); // bionic aborts anyway.
+    CHECK(bytes != NULL);  // bionic aborts anyway.
     const uint16_t* chars = s->GetCharArray()->GetData() + s->GetOffset();
     ConvertUtf16ToModifiedUtf8(bytes, chars, s->GetLength());
     bytes[byte_count] = '\0';
@@ -2705,7 +2705,7 @@
       check_jni_abort_hook(NULL),
       check_jni_abort_hook_data(NULL),
       check_jni(false),
-      force_copy(false), // TODO: add a way to enable this
+      force_copy(false),  // TODO: add a way to enable this
       trace(options->jni_trace_),
       work_around_app_jni_bugs(false),
       pins_lock("JNI pin table lock", kPinTableLock),
diff --git a/runtime/jvalue.h b/runtime/jvalue.h
index 0c1aadb..b39567b 100644
--- a/runtime/jvalue.h
+++ b/runtime/jvalue.h
@@ -32,7 +32,7 @@
 
   int8_t GetB() const { return b; }
   void SetB(int8_t new_b) {
-    i = ((static_cast<int32_t>(new_b) << 24) >> 24); // Sign-extend.
+    i = ((static_cast<int32_t>(new_b) << 24) >> 24);  // Sign-extend.
   }
 
   uint16_t GetC() const { return c; }
@@ -55,7 +55,7 @@
 
   int16_t GetS() const { return s; }
   void SetS(int16_t new_s) {
-    i = ((static_cast<int32_t>(new_s) << 16) >> 16); // Sign-extend.
+    i = ((static_cast<int32_t>(new_s) << 16) >> 16);  // Sign-extend.
   }
 
   uint8_t GetZ() const { return z; }
diff --git a/runtime/locks.h b/runtime/locks.h
index df3f27b..88d05db 100644
--- a/runtime/locks.h
+++ b/runtime/locks.h
@@ -57,7 +57,7 @@
   kMutatorLock,
   kZygoteCreationLock,
 
-  kLockLevelCount // Must come last.
+  kLockLevelCount  // Must come last.
 };
 std::ostream& operator<<(std::ostream& os, const LockLevel& rhs);
 
diff --git a/runtime/log_severity.h b/runtime/log_severity.h
index bb7679d..31682df 100644
--- a/runtime/log_severity.h
+++ b/runtime/log_severity.h
@@ -20,6 +20,6 @@
 typedef int LogSeverity;
 
 const int VERBOSE = 0, DEBUG = 1, INFO = 2, WARNING = 3, ERROR = 4, FATAL = 5;
-const int INTERNAL_FATAL = 6; // For Runtime::Abort.
+const int INTERNAL_FATAL = 6;  // For Runtime::Abort.
 
 #endif  // ART_RUNTIME_LOG_SEVERITY_H_
diff --git a/runtime/mem_map.cc b/runtime/mem_map.cc
index a0f389c..619b73c 100644
--- a/runtime/mem_map.cc
+++ b/runtime/mem_map.cc
@@ -52,9 +52,9 @@
 
   map_info_t* map_info_list = load_map_info_list(getpid());
   for (map_info_t* m = map_info_list; m != NULL; m = m->next) {
-    CHECK(!(base >= m->start && base < m->end)      // start of new within old
-        && !(limit > m->start && limit < m->end)  // end of new within old
-        && !(base <= m->start && limit > m->end)) // start/end of new includes all of old
+    CHECK(!(base >= m->start && base < m->end)     // start of new within old
+        && !(limit > m->start && limit < m->end)   // end of new within old
+        && !(base <= m->start && limit > m->end))  // start/end of new includes all of old
         << StringPrintf("Requested region 0x%08x-0x%08x overlaps with existing map 0x%08x-0x%08x (%s)\n",
                         base, limit,
                         static_cast<uint32_t>(m->start), static_cast<uint32_t>(m->end), m->name)
diff --git a/runtime/mirror/dex_cache.h b/runtime/mirror/dex_cache.h
index fd3f5f4..9c0f09b 100644
--- a/runtime/mirror/dex_cache.h
+++ b/runtime/mirror/dex_cache.h
@@ -172,7 +172,7 @@
   ObjectArray<String>* strings_;
   uint32_t dex_file_;
 
-  friend struct art::DexCacheOffsets; // for verifying offset information
+  friend struct art::DexCacheOffsets;  // for verifying offset information
   DISALLOW_IMPLICIT_CONSTRUCTORS(DexCache);
 };
 
diff --git a/runtime/mirror/field.cc b/runtime/mirror/field.cc
index a96e8c8..12f395f 100644
--- a/runtime/mirror/field.cc
+++ b/runtime/mirror/field.cc
@@ -42,7 +42,7 @@
 
 void Field::SetOffset(MemberOffset num_bytes) {
   DCHECK(GetDeclaringClass()->IsLoaded() || GetDeclaringClass()->IsErroneous());
-#if 0 // TODO enable later in boot and under !NDEBUG
+#if 0  // TODO enable later in boot and under !NDEBUG
   FieldHelper fh(this);
   Primitive::Type type = fh.GetTypeAsPrimitiveType();
   if (type == Primitive::kPrimDouble || type == Primitive::kPrimLong) {
diff --git a/runtime/mirror/throwable.h b/runtime/mirror/throwable.h
index 909228e..27f6e12 100644
--- a/runtime/mirror/throwable.h
+++ b/runtime/mirror/throwable.h
@@ -59,7 +59,7 @@
   // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".
   Throwable* cause_;
   String* detail_message_;
-  Object* stack_state_; // Note this is Java volatile:
+  Object* stack_state_;  // Note this is Java volatile:
   Object* stack_trace_;
   Object* suppressed_exceptions_;
 
diff --git a/runtime/monitor.cc b/runtime/monitor.cc
index 11790e5..09a952b 100644
--- a/runtime/monitor.cc
+++ b/runtime/monitor.cc
@@ -698,7 +698,7 @@
   volatile int32_t* thinp = obj->GetRawLockWordAddress();
 
   DCHECK(self != NULL);
-  //DCHECK_EQ(self->GetState(), kRunnable);
+  // DCHECK_EQ(self->GetState(), kRunnable);
   DCHECK(obj != NULL);
 
   /*
@@ -918,7 +918,7 @@
   const DexFile::CodeItem* code_item = mh.GetCodeItem();
   CHECK(code_item != NULL) << PrettyMethod(m);
   if (code_item->tries_size_ == 0) {
-    return; // No "tries" implies no synchronization, so no held locks to report.
+    return;  // No "tries" implies no synchronization, so no held locks to report.
   }
 
   // Ask the verifier for the dex pcs of all the monitor-enter instructions corresponding to
@@ -979,7 +979,7 @@
 
 void MonitorList::SweepMonitorList(IsMarkedTester is_marked, void* arg) {
   MutexLock mu(Thread::Current(), monitor_list_lock_);
-  typedef std::list<Monitor*>::iterator It; // TODO: C++0x auto
+  typedef std::list<Monitor*>::iterator It;  // TODO: C++0x auto
   It it = list_.begin();
   while (it != list_.end()) {
     Monitor* m = *it;
diff --git a/runtime/native/dalvik_system_VMDebug.cc b/runtime/native/dalvik_system_VMDebug.cc
index 1cc42df..e3ec3bc 100644
--- a/runtime/native/dalvik_system_VMDebug.cc
+++ b/runtime/native/dalvik_system_VMDebug.cc
@@ -104,12 +104,12 @@
 
 static void VMDebug_startEmulatorTracing(JNIEnv*, jclass) {
   UNIMPLEMENTED(WARNING);
-  //dvmEmulatorTraceStart();
+  // dvmEmulatorTraceStart();
 }
 
 static void VMDebug_stopEmulatorTracing(JNIEnv*, jclass) {
   UNIMPLEMENTED(WARNING);
-  //dvmEmulatorTraceStop();
+  // dvmEmulatorTraceStop();
 }
 
 static jboolean VMDebug_isDebuggerConnected(JNIEnv*, jclass) {
diff --git a/runtime/native/dalvik_system_Zygote.cc b/runtime/native/dalvik_system_Zygote.cc
index 12dafe0..4108559 100644
--- a/runtime/native/dalvik_system_Zygote.cc
+++ b/runtime/native/dalvik_system_Zygote.cc
@@ -492,7 +492,7 @@
     SetSchedulerPolicy();
 
 #if defined(HAVE_ANDROID_OS)
-    { // NOLINT(whitespace/braces)
+    {  // NOLINT(whitespace/braces)
       const char* se_info_c_str = NULL;
       UniquePtr<ScopedUtfChars> se_info;
       if (java_se_info != NULL) {
diff --git a/runtime/native/java_lang_Thread.cc b/runtime/native/java_lang_Thread.cc
index 8ef190a..e85ef09 100644
--- a/runtime/native/java_lang_Thread.cc
+++ b/runtime/native/java_lang_Thread.cc
@@ -85,7 +85,7 @@
     case kSuspended:                      return kJavaRunnable;
     // Don't add a 'default' here so the compiler can spot incompatible enum changes.
   }
-  return -1; // Unreachable.
+  return -1;  // Unreachable.
 }
 
 static jboolean Thread_nativeHoldsLock(JNIEnv* env, jobject java_thread, jobject java_object) {
diff --git a/runtime/oat/runtime/arm/context_arm.cc b/runtime/oat/runtime/arm/context_arm.cc
index 4e42e94..6b9538e 100644
--- a/runtime/oat/runtime/arm/context_arm.cc
+++ b/runtime/oat/runtime/arm/context_arm.cc
@@ -71,7 +71,7 @@
 
 void ArmContext::SetGPR(uint32_t reg, uintptr_t value) {
   DCHECK_LT(reg, static_cast<uint32_t>(kNumberOfCoreRegisters));
-  DCHECK_NE(gprs_[reg], &gZero); // Can't overwrite this static value since they are never reset.
+  DCHECK_NE(gprs_[reg], &gZero);  // Can't overwrite this static value since they are never reset.
   DCHECK(gprs_[reg] != NULL);
   *gprs_[reg] = value;
 }
diff --git a/runtime/oat/runtime/mips/context_mips.cc b/runtime/oat/runtime/mips/context_mips.cc
index cbd63d8..a78e5ee 100644
--- a/runtime/oat/runtime/mips/context_mips.cc
+++ b/runtime/oat/runtime/mips/context_mips.cc
@@ -70,7 +70,7 @@
 
 void MipsContext::SetGPR(uint32_t reg, uintptr_t value) {
   CHECK_LT(reg, static_cast<uint32_t>(kNumberOfCoreRegisters));
-  CHECK_NE(gprs_[reg], &gZero); // Can't overwrite this static value since they are never reset.
+  CHECK_NE(gprs_[reg], &gZero);  // Can't overwrite this static value since they are never reset.
   CHECK(gprs_[reg] != NULL);
   *gprs_[reg] = value;
 }
diff --git a/runtime/oat/runtime/support_interpreter.cc b/runtime/oat/runtime/support_interpreter.cc
index fc59e2b..78b7e10 100644
--- a/runtime/oat/runtime/support_interpreter.cc
+++ b/runtime/oat/runtime/support_interpreter.cc
@@ -83,7 +83,7 @@
   const DexFile::CodeItem* code_item = mh.GetCodeItem();
   uint16_t num_regs = code_item->registers_size_;
   void* memory = alloca(ShadowFrame::ComputeSize(num_regs));
-  ShadowFrame* shadow_frame(ShadowFrame::Create(num_regs, NULL, // No last shadow coming from quick.
+  ShadowFrame* shadow_frame(ShadowFrame::Create(num_regs, NULL,  // No last shadow coming from quick.
                                                 method, 0, memory));
   size_t first_arg_reg = code_item->registers_size_ - code_item->ins_size_;
   BuildShadowFrameVisitor shadow_frame_builder(mh, sp, *shadow_frame, first_arg_reg);
diff --git a/runtime/oat/runtime/support_jni.cc b/runtime/oat/runtime/support_jni.cc
index 25f6930..2d31160 100644
--- a/runtime/oat/runtime/support_jni.cc
+++ b/runtime/oat/runtime/support_jni.cc
@@ -148,7 +148,7 @@
       }
     } else {
       if (reg_num == 2) {
-        arg_ptr++; // move through register arguments
+        arg_ptr++;  // move through register arguments
         reg_num++;
       } else if (reg_num == 3) {
         arg_ptr = sp + 8;  // skip to outgoing stack arguments
diff --git a/runtime/oat/runtime/support_stubs.cc b/runtime/oat/runtime/support_stubs.cc
index 096cb9c..f2af6d2 100644
--- a/runtime/oat/runtime/support_stubs.cc
+++ b/runtime/oat/runtime/support_stubs.cc
@@ -116,7 +116,7 @@
     if (LIKELY(called_class->IsInitialized())) {
       code = called->GetEntryPointFromCompiledCode();
       // TODO: remove this after we solve the link issue.
-      { // for lazy link.
+      {  // for lazy link.
         if (code == NULL) {
           code = linker->GetOatCodeFor(called);
         }
@@ -130,7 +130,7 @@
         // No trampoline for non-static methods.
         code = called->GetEntryPointFromCompiledCode();
         // TODO: remove this after we solve the link issue.
-        { // for lazy link.
+        {  // for lazy link.
           if (code == NULL) {
             code = linker->GetOatCodeFor(called);
           }
diff --git a/runtime/oat/runtime/x86/oat_support_entrypoints_x86.cc b/runtime/oat/runtime/x86/oat_support_entrypoints_x86.cc
index a90a583..7dfb07c 100644
--- a/runtime/oat/runtime/x86/oat_support_entrypoints_x86.cc
+++ b/runtime/oat/runtime/x86/oat_support_entrypoints_x86.cc
@@ -165,16 +165,16 @@
   points->pUnlockObjectFromCode = art_quick_unlock_object_from_code;
 
   // Math
-  //points->pCmpgDouble = NULL; // Not needed on x86.
-  //points->pCmpgFloat = NULL; // Not needed on x86.
-  //points->pCmplDouble = NULL; // Not needed on x86.
-  //points->pCmplFloat = NULL; // Not needed on x86.
+  // points->pCmpgDouble = NULL;  // Not needed on x86.
+  // points->pCmpgFloat = NULL;  // Not needed on x86.
+  // points->pCmplDouble = NULL;  // Not needed on x86.
+  // points->pCmplFloat = NULL;  // Not needed on x86.
   points->pFmod = art_quick_fmod_from_code;
   points->pL2d = art_quick_l2d_from_code;
   points->pFmodf = art_quick_fmodf_from_code;
   points->pL2f = art_quick_l2f_from_code;
-  //points->pD2iz = NULL; // Not needed on x86.
-  //points->pF2iz = NULL; // Not needed on x86.
+  // points->pD2iz = NULL;  // Not needed on x86.
+  // points->pF2iz = NULL;  // Not needed on x86.
   points->pIdivmod = art_quick_idivmod_from_code;
   points->pD2l = art_quick_d2l_from_code;
   points->pF2l = art_quick_f2l_from_code;
diff --git a/runtime/oat_test.cc b/runtime/oat_test.cc
index 217e2d8..9fb2638 100644
--- a/runtime/oat_test.cc
+++ b/runtime/oat_test.cc
@@ -160,7 +160,7 @@
     char* magic = const_cast<char*>(oat_header.GetMagic());
     strcpy(magic, "");  // bad magic
     ASSERT_FALSE(oat_header.IsValid());
-    strcpy(magic, "oat\n000"); // bad version
+    strcpy(magic, "oat\n000");  // bad version
     ASSERT_FALSE(oat_header.IsValid());
 }
 
diff --git a/runtime/reference_table.cc b/runtime/reference_table.cc
index 192535a..de64c26 100644
--- a/runtime/reference_table.cc
+++ b/runtime/reference_table.cc
@@ -232,7 +232,7 @@
 }
 
 void ReferenceTable::VisitRoots(RootVisitor* visitor, void* arg) {
-  typedef Table::const_iterator It; // TODO: C++0x auto
+  typedef Table::const_iterator It;  // TODO: C++0x auto
   for (It it = entries_.begin(), end = entries_.end(); it != end; ++it) {
     visitor(*it, arg);
   }
diff --git a/runtime/reference_table.h b/runtime/reference_table.h
index 4b6b50e..e369fd0 100644
--- a/runtime/reference_table.h
+++ b/runtime/reference_table.h
@@ -53,7 +53,7 @@
   typedef std::vector<const mirror::Object*> Table;
   static void Dump(std::ostream& os, const Table& entries)
       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
-  friend class IndirectReferenceTable; // For Dump.
+  friend class IndirectReferenceTable;  // For Dump.
 
   std::string name_;
   Table entries_;
diff --git a/runtime/reflection.cc b/runtime/reflection.cc
index 359b539..8e478ff 100644
--- a/runtime/reflection.cc
+++ b/runtime/reflection.cc
@@ -270,7 +270,7 @@
 static std::string UnboxingFailureKind(mirror::AbstractMethod* m, int index, mirror::Field* f)
     SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
   if (m != NULL && index != -1) {
-    ++index; // Humans count from 1.
+    ++index;  // Humans count from 1.
     return StringPrintf("method %s argument %d", PrettyMethod(m, false).c_str(), index);
   }
   if (f != NULL) {
diff --git a/runtime/runtime.cc b/runtime/runtime.cc
index 48ee127..35667e7 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -63,7 +63,7 @@
 #include "verifier/method_verifier.h"
 #include "well_known_classes.h"
 
-#include "JniConstants.h" // Last to avoid LOG redefinition in ics-mr1-plus-art.
+#include "JniConstants.h"  // Last to avoid LOG redefinition in ics-mr1-plus-art.
 
 namespace art {
 
@@ -340,7 +340,7 @@
   parsed->heap_growth_limit_ = 0;  // 0 means no growth limit.
   // Default to number of processors minus one since the main GC thread also does work.
   parsed->heap_gc_threads_ = sysconf(_SC_NPROCESSORS_CONF) - 1;
-  parsed->stack_size_ = 0; // 0 means default.
+  parsed->stack_size_ = 0;  // 0 means default.
 
   parsed->is_compiler_ = false;
   parsed->is_zygote_ = false;
@@ -352,23 +352,23 @@
 
   parsed->hook_vfprintf_ = vfprintf;
   parsed->hook_exit_ = exit;
-  parsed->hook_abort_ = NULL; // We don't call abort(3) by default; see Runtime::Abort.
+  parsed->hook_abort_ = NULL;  // We don't call abort(3) by default; see Runtime::Abort.
 
   parsed->small_mode_ = false;
   parsed->small_mode_method_threshold_ = Runtime::kDefaultSmallModeMethodThreshold;
   parsed->small_mode_method_dex_size_limit_ = Runtime::kDefaultSmallModeMethodDexSizeLimit;
 
   parsed->sea_ir_mode_ = false;
-//  gLogVerbosity.class_linker = true; // TODO: don't check this in!
-//  gLogVerbosity.compiler = true; // TODO: don't check this in!
-//  gLogVerbosity.heap = true; // TODO: don't check this in!
-//  gLogVerbosity.gc = true; // TODO: don't check this in!
-//  gLogVerbosity.jdwp = true; // TODO: don't check this in!
-//  gLogVerbosity.jni = true; // TODO: don't check this in!
-//  gLogVerbosity.monitor = true; // TODO: don't check this in!
-//  gLogVerbosity.startup = true; // TODO: don't check this in!
-//  gLogVerbosity.third_party_jni = true; // TODO: don't check this in!
-//  gLogVerbosity.threads = true; // TODO: don't check this in!
+//  gLogVerbosity.class_linker = true;  // TODO: don't check this in!
+//  gLogVerbosity.compiler = true;  // TODO: don't check this in!
+//  gLogVerbosity.heap = true;  // TODO: don't check this in!
+//  gLogVerbosity.gc = true;  // TODO: don't check this in!
+//  gLogVerbosity.jdwp = true;  // TODO: don't check this in!
+//  gLogVerbosity.jni = true;  // TODO: don't check this in!
+//  gLogVerbosity.monitor = true;  // TODO: don't check this in!
+//  gLogVerbosity.startup = true;  // TODO: don't check this in!
+//  gLogVerbosity.third_party_jni = true;  // TODO: don't check this in!
+//  gLogVerbosity.threads = true;  // TODO: don't check this in!
 
   parsed->method_trace_ = false;
   parsed->method_trace_file_ = "/data/method-trace-file.bin";
@@ -582,7 +582,7 @@
         // TODO: print usage via vfprintf
         LOG(ERROR) << "Unrecognized option " << option;
         // TODO: this should exit, but for now tolerate unknown options
-        //return NULL;
+        // return NULL;
       }
     }
   }
@@ -613,7 +613,7 @@
   if (Runtime::instance_ != NULL) {
     return false;
   }
-  InitLogging(NULL); // Calls Locks::Init() as a side effect.
+  InitLogging(NULL);  // Calls Locks::Init() as a side effect.
   instance_ = new Runtime;
   if (!instance_->Init(options, ignore_unrecognized)) {
     delete instance_;
@@ -1036,7 +1036,7 @@
     return 0;  // backward compatibility
   default:
     LOG(FATAL) << "Unknown statistic " << kind;
-    return -1; // unreachable
+    return -1;  // unreachable
   }
 }
 
diff --git a/runtime/runtime_linux.cc b/runtime/runtime_linux.cc
index a4fc3af..47b72e9 100644
--- a/runtime/runtime_linux.cc
+++ b/runtime/runtime_linux.cc
@@ -245,7 +245,7 @@
   OsInfo os_info;
   const char* cmd_line = GetCmdLine();
   if (cmd_line == NULL) {
-    cmd_line = "<unset>"; // Because no-one called InitLogging.
+    cmd_line = "<unset>";  // Because no-one called InitLogging.
   }
   pid_t tid = GetTid();
   std::string thread_name(GetThreadName(tid));
diff --git a/runtime/runtime_support.cc b/runtime/runtime_support.cc
index c933621..d28aad1 100644
--- a/runtime/runtime_support.cc
+++ b/runtime/runtime_support.cc
@@ -49,7 +49,7 @@
     return static_cast<int64_t>(0x7fffffffffffffffULL);
   } else if (d <= kMinLong) {
     return static_cast<int64_t>(0x8000000000000000ULL);
-  } else if (d != d)  { // NaN case
+  } else if (d != d)  {  // NaN case
     return 0;
   } else {
     return static_cast<int64_t>(d);
@@ -63,7 +63,7 @@
     return static_cast<int64_t>(0x7fffffffffffffffULL);
   } else if (f <= kMinLong) {
     return static_cast<int64_t>(0x8000000000000000ULL);
-  } else if (f != f) { // NaN case
+  } else if (f != f) {  // NaN case
     return 0;
   } else {
     return static_cast<int64_t>(f);
@@ -77,7 +77,7 @@
     return static_cast<int32_t>(0x7fffffffUL);
   } else if (d <= kMinInt) {
     return static_cast<int32_t>(0x80000000UL);
-  } else if (d != d)  { // NaN case
+  } else if (d != d)  {  // NaN case
     return 0;
   } else {
     return static_cast<int32_t>(d);
@@ -91,7 +91,7 @@
     return static_cast<int32_t>(0x7fffffffUL);
   } else if (f <= kMinInt) {
     return static_cast<int32_t>(0x80000000UL);
-  } else if (f != f) { // NaN case
+  } else if (f != f) {  // NaN case
     return 0;
   } else {
     return static_cast<int32_t>(f);
diff --git a/runtime/runtime_support_llvm_func_list.h b/runtime/runtime_support_llvm_func_list.h
index d371421..8b635cb 100644
--- a/runtime/runtime_support_llvm_func_list.h
+++ b/runtime/runtime_support_llvm_func_list.h
@@ -79,4 +79,4 @@
   V(JniMethodEndWithReferenceSynchronized, art_portable_jni_method_end_with_reference_synchronized)
 
 #endif  // ART_RUNTIME_RUNTIME_SUPPORT_LLVM_FUNC_LIST_H_
-#undef ART_RUNTIME_RUNTIME_SUPPORT_LLVM_FUNC_LIST_H_ // the guard in this file is just for cpplint
+#undef ART_RUNTIME_RUNTIME_SUPPORT_LLVM_FUNC_LIST_H_  // the guard in this file is just for cpplint
diff --git a/runtime/safe_map.h b/runtime/safe_map.h
index 4b5202a..89da927 100644
--- a/runtime/safe_map.h
+++ b/runtime/safe_map.h
@@ -70,7 +70,7 @@
   // Used to insert a new mapping.
   void Put(const K& k, const V& v) {
     std::pair<iterator, bool> result = map_.insert(std::make_pair(k, v));
-    DCHECK(result.second); // Check we didn't accidentally overwrite an existing value.
+    DCHECK(result.second);  // Check we didn't accidentally overwrite an existing value.
   }
 
   // Used to insert a new mapping or overwrite an existing mapping. Note that if the value type
diff --git a/runtime/scoped_thread_state_change.h b/runtime/scoped_thread_state_change.h
index 2643f66..853d684 100644
--- a/runtime/scoped_thread_state_change.h
+++ b/runtime/scoped_thread_state_change.h
@@ -179,7 +179,7 @@
     uint32_t cookie = Env()->local_ref_cookie;
     IndirectRef ref = locals.Add(cookie, obj);
 
-#if 0 // TODO: fix this to understand PushLocalFrame, so we can turn it on.
+#if 0  // TODO: fix this to understand PushLocalFrame, so we can turn it on.
     if (Env()->check_jni) {
       size_t entry_count = locals.Capacity();
       if (entry_count > 16) {
diff --git a/runtime/signal_catcher.cc b/runtime/signal_catcher.cc
index a630db8..15eb27d 100644
--- a/runtime/signal_catcher.cc
+++ b/runtime/signal_catcher.cc
@@ -44,7 +44,7 @@
   // On Android, /proc/self/cmdline will have been rewritten to something like "system_server".
   std::string current_cmd_line;
   if (ReadFileToString("/proc/self/cmdline", &current_cmd_line)) {
-    current_cmd_line.resize(current_cmd_line.size() - 1); // Lose the trailing '\0'.
+    current_cmd_line.resize(current_cmd_line.size() - 1);  // Lose the trailing '\0'.
     std::replace(current_cmd_line.begin(), current_cmd_line.end(), '\0', ' ');
 
     os << "Cmdline: " << current_cmd_line;
diff --git a/runtime/stack.cc b/runtime/stack.cc
index 9ce65da..286a2a6 100644
--- a/runtime/stack.cc
+++ b/runtime/stack.cc
@@ -134,7 +134,7 @@
 
 uint32_t StackVisitor::GetVReg(mirror::AbstractMethod* m, uint16_t vreg, VRegKind kind) const {
   if (cur_quick_frame_ != NULL) {
-    DCHECK(context_ != NULL); // You can't reliably read registers without a context.
+    DCHECK(context_ != NULL);  // You can't reliably read registers without a context.
     DCHECK(m == GetMethod());
     const VmapTable vmap_table(m->GetVmapTableRaw());
     uint32_t vmap_offset;
@@ -146,7 +146,7 @@
       return GetGPR(vmap_table.ComputeRegister(spill_mask, vmap_offset, kind));
     } else {
       const DexFile::CodeItem* code_item = MethodHelper(m).GetCodeItem();
-      DCHECK(code_item != NULL) << PrettyMethod(m); // Can't be NULL or how would we compile its instructions?
+      DCHECK(code_item != NULL) << PrettyMethod(m);  // Can't be NULL or how would we compile its instructions?
       size_t frame_size = m->GetFrameSizeInBytes();
       return GetVReg(cur_quick_frame_, code_item, m->GetCoreSpillMask(), m->GetFpSpillMask(),
                      frame_size, vreg);
@@ -159,7 +159,7 @@
 void StackVisitor::SetVReg(mirror::AbstractMethod* m, uint16_t vreg, uint32_t new_value,
                            VRegKind kind) {
   if (cur_quick_frame_ != NULL) {
-    DCHECK(context_ != NULL); // You can't reliably write registers without a context.
+    DCHECK(context_ != NULL);  // You can't reliably write registers without a context.
     DCHECK(m == GetMethod());
     const VmapTable vmap_table(m->GetVmapTableRaw());
     uint32_t vmap_offset;
@@ -171,7 +171,7 @@
       SetGPR(reg, new_value);
     } else {
       const DexFile::CodeItem* code_item = MethodHelper(m).GetCodeItem();
-      DCHECK(code_item != NULL) << PrettyMethod(m); // Can't be NULL or how would we compile its instructions?
+      DCHECK(code_item != NULL) << PrettyMethod(m);  // Can't be NULL or how would we compile its instructions?
       uint32_t core_spills = m->GetCoreSpillMask();
       uint32_t fp_spills = m->GetFpSpillMask();
       size_t frame_size = m->GetFrameSizeInBytes();
diff --git a/runtime/stack.h b/runtime/stack.h
index 99ba898..0b94f27 100644
--- a/runtime/stack.h
+++ b/runtime/stack.h
@@ -514,7 +514,7 @@
                            uint32_t core_spills, uint32_t fp_spills,
                            size_t frame_size, int reg) {
     DCHECK_EQ(frame_size & (kStackAlignment - 1), 0U);
-    int num_spills = __builtin_popcount(core_spills) + __builtin_popcount(fp_spills) + 1; // Filler.
+    int num_spills = __builtin_popcount(core_spills) + __builtin_popcount(fp_spills) + 1;  // Filler.
     int num_ins = code_item->ins_size_;
     int num_regs = code_item->registers_size_ - num_ins;
     int locals_start = frame_size - ((num_spills + num_regs) * sizeof(uint32_t));
@@ -525,7 +525,7 @@
     } else if (reg < num_regs) {
       return locals_start + (reg * sizeof(uint32_t));        // Dalvik local reg.
     } else {
-      return frame_size + ((reg - num_regs) * sizeof(uint32_t)) + sizeof(uint32_t); // Dalvik in.
+      return frame_size + ((reg - num_regs) * sizeof(uint32_t)) + sizeof(uint32_t);  // Dalvik in.
     }
   }
 
@@ -543,7 +543,7 @@
 
   StackIndirectReferenceTable* GetCurrentSirt() const {
     mirror::AbstractMethod** sp = GetCurrentQuickFrame();
-    ++sp; // Skip Method*; SIRT comes next;
+    ++sp;  // Skip Method*; SIRT comes next;
     return reinterpret_cast<StackIndirectReferenceTable*>(sp);
   }
 
diff --git a/runtime/thread.cc b/runtime/thread.cc
index 9b7d194..0b3a5b4 100644
--- a/runtime/thread.cc
+++ b/runtime/thread.cc
@@ -87,7 +87,7 @@
 #endif
 
 void Thread::InitFunctionPointers() {
-#if !defined(__APPLE__) // The Mac GCC is too old to accept this code.
+#if !defined(__APPLE__)  // The Mac GCC is too old to accept this code.
   // Insert a placeholder so we can easily tell if we call an unimplemented entry point.
   uintptr_t* begin = reinterpret_cast<uintptr_t*>(&entrypoints_);
   uintptr_t* end = reinterpret_cast<uintptr_t*>(reinterpret_cast<uint8_t*>(begin) + sizeof(entrypoints_));
@@ -572,7 +572,7 @@
 }
 
 Thread* Thread::SuspendForDebugger(jobject peer, bool request_suspension, bool* timed_out) {
-  static const useconds_t kTimeoutUs = 30 * 1000000; // 30s.
+  static const useconds_t kTimeoutUs = 30 * 1000000;  // 30s.
   useconds_t total_delay_us = 0;
   useconds_t delay_us = 0;
   bool did_suspend_request = false;
@@ -725,7 +725,7 @@
   // Grab the scheduler stats for this thread.
   std::string scheduler_stats;
   if (ReadFileToString(StringPrintf("/proc/self/task/%d/schedstat", tid), &scheduler_stats)) {
-    scheduler_stats.resize(scheduler_stats.size() - 1); // Lose the trailing '\n'.
+    scheduler_stats.resize(scheduler_stats.size() - 1);  // Lose the trailing '\n'.
   } else {
     scheduler_stats = "0 0 0";
   }
@@ -1297,7 +1297,7 @@
 
   bool VisitFrame() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
     if (method_trace_ == NULL || dex_pc_trace_ == NULL) {
-      return true; // We're probably trying to fillInStackTrace for an OutOfMemoryError.
+      return true;  // We're probably trying to fillInStackTrace for an OutOfMemoryError.
     }
     if (skip_depth_ > 0) {
       skip_depth_--;
@@ -1452,7 +1452,7 @@
 
 void Thread::ThrowNewException(const ThrowLocation& throw_location, const char* exception_class_descriptor,
                                const char* msg) {
-  AssertNoPendingException(); // Callers should either clear or call ThrowNewWrappedException.
+  AssertNoPendingException();  // Callers should either clear or call ThrowNewWrappedException.
   ThrowNewWrappedException(throw_location, exception_class_descriptor, msg);
 }
 
@@ -1557,7 +1557,7 @@
     ThrowNewException(throw_location, "Ljava/lang/OutOfMemoryError;", msg);
     throwing_OutOfMemoryError_ = false;
   } else {
-    Dump(LOG(ERROR)); // The pre-allocated OOME has no stack, so help out and log one.
+    Dump(LOG(ERROR));  // The pre-allocated OOME has no stack, so help out and log one.
     SetException(throw_location, Runtime::Current()->GetPreAllocatedOutOfMemoryError());
   }
 }
@@ -1664,7 +1664,7 @@
 #undef ENTRY_POINT_INFO
 
 void Thread::DumpThreadOffset(std::ostream& os, uint32_t offset, size_t size_of_pointers) {
-  CHECK_EQ(size_of_pointers, 4U); // TODO: support 64-bit targets.
+  CHECK_EQ(size_of_pointers, 4U);  // TODO: support 64-bit targets.
 
 #define DO_THREAD_OFFSET(x) \
     if (offset == static_cast<uint32_t>(OFFSETOF_VOLATILE_MEMBER(Thread, x))) { \
@@ -1680,8 +1680,8 @@
   DO_THREAD_OFFSET(stack_end_);
   DO_THREAD_OFFSET(suspend_count_);
   DO_THREAD_OFFSET(thin_lock_id_);
-  //DO_THREAD_OFFSET(top_of_managed_stack_);
-  //DO_THREAD_OFFSET(top_of_managed_stack_pc_);
+  // DO_THREAD_OFFSET(top_of_managed_stack_);
+  // DO_THREAD_OFFSET(top_of_managed_stack_pc_);
   DO_THREAD_OFFSET(top_sirt_);
 #undef DO_THREAD_OFFSET
 
@@ -2012,7 +2012,7 @@
         CHECK(native_gc_map != NULL) << PrettyMethod(m);
         mh_.ChangeMethod(m);
         const DexFile::CodeItem* code_item = mh_.GetCodeItem();
-        DCHECK(code_item != NULL) << PrettyMethod(m); // Can't be NULL or how would we compile its instructions?
+        DCHECK(code_item != NULL) << PrettyMethod(m);  // Can't be NULL or how would we compile its instructions?
         NativePcOffsetToReferenceMap map(native_gc_map);
         size_t num_regs = std::min(map.RegWidth() * 8,
                                    static_cast<size_t>(code_item->registers_size_));
diff --git a/runtime/thread.h b/runtime/thread.h
index 388178f..b9393a3 100644
--- a/runtime/thread.h
+++ b/runtime/thread.h
@@ -580,7 +580,7 @@
   friend class ThreadList;  // For ~Thread and Destroy.
 
   void CreatePeer(const char* name, bool as_daemon, jobject thread_group);
-  friend class Runtime; // For CreatePeer.
+  friend class Runtime;  // For CreatePeer.
 
   // Avoid use, callers should use SetState. Used only by SignalCatcher::HandleSigQuit, ~Thread and
   // Dbg::Disconnected.
@@ -590,7 +590,7 @@
     return old_state;
   }
   friend class SignalCatcher;  // For SetStateUnsafe.
-  friend class Dbg;  // For SetStateUnsafe.
+  friend class Dbg;  // F or SetStateUnsafe.
 
   void VerifyStackImpl() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
@@ -600,7 +600,7 @@
       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
   // Out-of-line conveniences for debugging in gdb.
-  static Thread* CurrentFromGdb(); // Like Thread::Current.
+  static Thread* CurrentFromGdb();  // Like Thread::Current.
   // Like Thread::Dump(std::cerr).
   void DumpFromGdb() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
diff --git a/runtime/thread_linux.cc b/runtime/thread_linux.cc
index 1bd708a..ee66ccc 100644
--- a/runtime/thread_linux.cc
+++ b/runtime/thread_linux.cc
@@ -56,7 +56,7 @@
   // Tell the kernel to stop using it.
   ss.ss_sp = NULL;
   ss.ss_flags = SS_DISABLE;
-  ss.ss_size = SIGSTKSZ; // Avoid ENOMEM failure with Mac OS' buggy libc.
+  ss.ss_size = SIGSTKSZ;  // Avoid ENOMEM failure with Mac OS' buggy libc.
   SigAltStack(&ss, NULL);
 
   // Free it.
diff --git a/runtime/thread_list.cc b/runtime/thread_list.cc
index 7aa835a..9c28c87 100644
--- a/runtime/thread_list.cc
+++ b/runtime/thread_list.cc
@@ -474,7 +474,7 @@
 void ThreadList::SuspendAllDaemonThreads() {
   Thread* self = Thread::Current();
   MutexLock mu(self, *Locks::thread_list_lock_);
-  { // Tell all the daemons it's time to suspend.
+  {  // Tell all the daemons it's time to suspend.
     MutexLock mu2(self, *Locks::thread_suspend_count_lock_);
     for (It it = list_.begin(), end = list_.end(); it != end; ++it) {
       Thread* thread = *it;
@@ -591,7 +591,7 @@
   for (size_t i = 0; i < allocated_ids_.size(); ++i) {
     if (!allocated_ids_[i]) {
       allocated_ids_.set(i);
-      return i + 1; // Zero is reserved to mean "invalid".
+      return i + 1;  // Zero is reserved to mean "invalid".
     }
   }
   LOG(FATAL) << "Out of internal thread ids";
@@ -600,7 +600,7 @@
 
 void ThreadList::ReleaseThreadId(Thread* self, uint32_t id) {
   MutexLock mu(self, allocated_ids_lock_);
-  --id; // Zero is reserved to mean "invalid".
+  --id;  // Zero is reserved to mean "invalid".
   DCHECK(allocated_ids_[id]) << id;
   allocated_ids_.reset(id);
 }
diff --git a/runtime/thread_list.h b/runtime/thread_list.h
index 87abbda..d95f191 100644
--- a/runtime/thread_list.h
+++ b/runtime/thread_list.h
@@ -43,7 +43,7 @@
   void DumpLocked(std::ostream& os)  // For thread suspend timeout dumps.
       EXCLUSIVE_LOCKS_REQUIRED(Locks::thread_list_lock_)
       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
-  pid_t GetLockOwner(); // For SignalCatcher.
+  pid_t GetLockOwner();  // For SignalCatcher.
 
   // Thread suspension support.
   void ResumeAll()
@@ -102,7 +102,7 @@
   Thread* FindThreadByThinLockId(uint32_t thin_lock_id);
 
  private:
-  typedef std::list<Thread*>::const_iterator It; // TODO: C++0x auto
+  typedef std::list<Thread*>::const_iterator It;  // TODO: C++0x auto
 
   uint32_t AllocThreadId(Thread* self);
   void ReleaseThreadId(Thread* self, uint32_t id) LOCKS_EXCLUDED(allocated_ids_lock_);
diff --git a/runtime/thread_state.h b/runtime/thread_state.h
index fc4812a..4d4bfb7 100644
--- a/runtime/thread_state.h
+++ b/runtime/thread_state.h
@@ -20,26 +20,26 @@
 namespace art {
 
 enum ThreadState {
-  //                                  Thread.State   JDWP state
-  kTerminated,                     // TERMINATED     TS_ZOMBIE    Thread.run has returned, but Thread* still around
-  kRunnable,                       // RUNNABLE       TS_RUNNING   runnable
-  kTimedWaiting,                   // TIMED_WAITING  TS_WAIT      in Object.wait() with a timeout
-  kSleeping,                       // TIMED_WAITING  TS_SLEEPING  in Thread.sleep()
-  kBlocked,                        // BLOCKED        TS_MONITOR   blocked on a monitor
-  kWaiting,                        // WAITING        TS_WAIT      in Object.wait()
-  kWaitingForGcToComplete,         // WAITING        TS_WAIT      blocked waiting for GC
-  kWaitingForCheckPointsToRun,     // WAITING        TS_WAIT      GC waiting for checkpoints to run
-  kWaitingPerformingGc,            // WAITING        TS_WAIT      performing GC
-  kWaitingForDebuggerSend,         // WAITING        TS_WAIT      blocked waiting for events to be sent
-  kWaitingForDebuggerToAttach,     // WAITING        TS_WAIT      blocked waiting for debugger to attach
-  kWaitingInMainDebuggerLoop,      // WAITING        TS_WAIT      blocking/reading/processing debugger events
-  kWaitingForDebuggerSuspension,   // WAITING        TS_WAIT      waiting for debugger suspend all
-  kWaitingForJniOnLoad,            // WAITING        TS_WAIT      waiting for execution of dlopen and JNI on load code
-  kWaitingForSignalCatcherOutput,  // WAITING        TS_WAIT      waiting for signal catcher IO to complete
-  kWaitingInMainSignalCatcherLoop, // WAITING        TS_WAIT      blocking/reading/processing signals
-  kStarting,                       // NEW            TS_WAIT      native thread started, not yet ready to run managed code
-  kNative,                         // RUNNABLE       TS_RUNNING   running in a JNI native method
-  kSuspended,                      // RUNNABLE       TS_RUNNING   suspended by GC or debugger
+  //                                   Thread.State   JDWP state
+  kTerminated,                      // TERMINATED     TS_ZOMBIE    Thread.run has returned, but Thread* still around
+  kRunnable,                        // RUNNABLE       TS_RUNNING   runnable
+  kTimedWaiting,                    // TIMED_WAITING  TS_WAIT      in Object.wait() with a timeout
+  kSleeping,                        // TIMED_WAITING  TS_SLEEPING  in Thread.sleep()
+  kBlocked,                         // BLOCKED        TS_MONITOR   blocked on a monitor
+  kWaiting,                         // WAITING        TS_WAIT      in Object.wait()
+  kWaitingForGcToComplete,          // WAITING        TS_WAIT      blocked waiting for GC
+  kWaitingForCheckPointsToRun,      // WAITING        TS_WAIT      GC waiting for checkpoints to run
+  kWaitingPerformingGc,             // WAITING        TS_WAIT      performing GC
+  kWaitingForDebuggerSend,          // WAITING        TS_WAIT      blocked waiting for events to be sent
+  kWaitingForDebuggerToAttach,      // WAITING        TS_WAIT      blocked waiting for debugger to attach
+  kWaitingInMainDebuggerLoop,       // WAITING        TS_WAIT      blocking/reading/processing debugger events
+  kWaitingForDebuggerSuspension,    // WAITING        TS_WAIT      waiting for debugger suspend all
+  kWaitingForJniOnLoad,             // WAITING        TS_WAIT      waiting for execution of dlopen and JNI on load code
+  kWaitingForSignalCatcherOutput,   // WAITING        TS_WAIT      waiting for signal catcher IO to complete
+  kWaitingInMainSignalCatcherLoop,  // WAITING        TS_WAIT      blocking/reading/processing signals
+  kStarting,                        // NEW            TS_WAIT      native thread started, not yet ready to run managed code
+  kNative,                          // RUNNABLE       TS_RUNNING   running in a JNI native method
+  kSuspended,                       // RUNNABLE       TS_RUNNING   suspended by GC or debugger
 };
 
 }  // namespace art
diff --git a/runtime/trace.cc b/runtime/trace.cc
index 2227b8d..177fd48 100644
--- a/runtime/trace.cc
+++ b/runtime/trace.cc
@@ -75,11 +75,11 @@
 // All values are stored in little-endian order.
 
 enum TraceAction {
-    kTraceMethodEnter = 0x00,      // method entry
-    kTraceMethodExit = 0x01,       // method exit
-    kTraceUnroll = 0x02,     // method exited by exception unrolling
+    kTraceMethodEnter = 0x00,       // method entry
+    kTraceMethodExit = 0x01,        // method exit
+    kTraceUnroll = 0x02,            // method exited by exception unrolling
     // 0x03 currently unused
-    kTraceMethodActionMask = 0x03, // two bits
+    kTraceMethodActionMask = 0x03,  // two bits
 };
 
 static const char     kTraceTokenChar             = '*';
@@ -87,8 +87,8 @@
 static const uint32_t kTraceMagicValue            = 0x574f4c53;
 static const uint16_t kTraceVersionSingleClock    = 2;
 static const uint16_t kTraceVersionDualClock      = 3;
-static const uint16_t kTraceRecordSizeSingleClock = 10; // using v2
-static const uint16_t kTraceRecordSizeDualClock   = 14; // using v3 with two timestamps
+static const uint16_t kTraceRecordSizeSingleClock = 10;  // using v2
+static const uint16_t kTraceRecordSizeDualClock   = 14;  // using v3 with two timestamps
 
 #if defined(HAVE_POSIX_CLOCKS)
 ProfilerClockSource Trace::default_clock_source_ = kProfilerClockSourceDual;
@@ -487,7 +487,7 @@
 
 void Trace::DumpMethodList(std::ostream& os,
                            const std::set<mirror::AbstractMethod*>& visited_methods) {
-  typedef std::set<mirror::AbstractMethod*>::const_iterator It; // TODO: C++0x auto
+  typedef std::set<mirror::AbstractMethod*>::const_iterator It;  // TODO: C++0x auto
   MethodHelper mh;
   for (It it = visited_methods.begin(); it != visited_methods.end(); ++it) {
     mirror::AbstractMethod* method = *it;
diff --git a/runtime/utils.cc b/runtime/utils.cc
index 723be92..71e502d 100644
--- a/runtime/utils.cc
+++ b/runtime/utils.cc
@@ -46,12 +46,12 @@
 #endif
 
 #if defined(__APPLE__)
-#include "AvailabilityMacros.h" // For MAC_OS_X_VERSION_MAX_ALLOWED
+#include "AvailabilityMacros.h"  // For MAC_OS_X_VERSION_MAX_ALLOWED
 #include <sys/syscall.h>
 #endif
 
-#include <corkscrew/backtrace.h> // For DumpNativeStack.
-#include <corkscrew/demangle.h> // For DumpNativeStack.
+#include <corkscrew/backtrace.h>  // For DumpNativeStack.
+#include <corkscrew/demangle.h>  // For DumpNativeStack.
 
 #if defined(__linux__)
 #include <linux/unistd.h>
@@ -73,7 +73,7 @@
 std::string GetThreadName(pid_t tid) {
   std::string result;
   if (ReadFileToString(StringPrintf("/proc/self/task/%d/comm", tid), &result)) {
-    result.resize(result.size() - 1); // Lose the trailing '\n'.
+    result.resize(result.size() - 1);  // Lose the trailing '\n'.
   } else {
     result = "<unknown>";
   }
@@ -253,7 +253,7 @@
   // Reference or primitive?
   if (*c == 'L') {
     // "[[La/b/C;" -> "a.b.C[][]".
-    c++; // Skip the 'L'.
+    c++;  // Skip the 'L'.
   } else {
     // "[[B" -> "byte[][]".
     // To make life easier, we make primitives look like unqualified
@@ -267,7 +267,7 @@
     case 'J': c = "long;"; break;
     case 'S': c = "short;"; break;
     case 'Z': c = "boolean;"; break;
-    case 'V': c = "void;"; break; // Used when decoding return types.
+    case 'V': c = "void;"; break;  // Used when decoding return types.
     default: return descriptor;
     }
   }
@@ -339,7 +339,7 @@
   std::string result;
   result += '(';
   CHECK_EQ(*signature, '(');
-  ++signature; // Skip the '('.
+  ++signature;  // Skip the '('.
   while (*signature != ')') {
     size_t argument_length = 0;
     while (signature[argument_length] == '[') {
@@ -358,7 +358,7 @@
     signature += argument_length;
   }
   CHECK_EQ(*signature, ')');
-  ++signature; // Skip the ')'.
+  ++signature;  // Skip the ')'.
   result += ')';
   return result;
 }
@@ -366,7 +366,7 @@
 std::string PrettyReturnType(const char* signature) {
   const char* return_type = strchr(signature, ')');
   CHECK(return_type != NULL);
-  ++return_type; // Skip ')'.
+  ++return_type;  // Skip ')'.
   return PrettyDescriptor(return_type);
 }
 
@@ -664,10 +664,10 @@
 
 // Helper for IsValidPartOfMemberNameUtf8(), a bit vector indicating valid low ascii.
 uint32_t DEX_MEMBER_VALID_LOW_ASCII[4] = {
-  0x00000000, // 00..1f low control characters; nothing valid
-  0x03ff2010, // 20..3f digits and symbols; valid: '0'..'9', '$', '-'
-  0x87fffffe, // 40..5f uppercase etc.; valid: 'A'..'Z', '_'
-  0x07fffffe  // 60..7f lowercase etc.; valid: 'a'..'z'
+  0x00000000,  // 00..1f low control characters; nothing valid
+  0x03ff2010,  // 20..3f digits and symbols; valid: '0'..'9', '$', '-'
+  0x87fffffe,  // 40..5f uppercase etc.; valid: 'A'..'Z', '_'
+  0x07fffffe   // 60..7f lowercase etc.; valid: 'a'..'z'
 };
 
 // Helper for IsValidPartOfMemberNameUtf8(); do not call directly.
@@ -826,7 +826,7 @@
    * name.
    */
 
-  bool sepOrFirst = true; // first character or just encountered a separator.
+  bool sepOrFirst = true;  // first character or just encountered a separator.
   for (;;) {
     uint8_t c = (uint8_t) *s;
     switch (c) {
@@ -1002,7 +1002,7 @@
     Split(cgroup_fields[1], ',', cgroups);
     for (size_t i = 0; i < cgroups.size(); ++i) {
       if (cgroups[i] == "cpu") {
-        return cgroup_fields[2].substr(1); // Skip the leading slash.
+        return cgroup_fields[2].substr(1);  // Skip the leading slash.
       }
     }
   }
@@ -1060,7 +1060,7 @@
 
   const size_t MAX_DEPTH = 32;
   UniquePtr<backtrace_frame_t[]> frames(new backtrace_frame_t[MAX_DEPTH]);
-  size_t ignore_count = 2; // Don't include unwind_backtrace_thread or DumpNativeStack.
+  size_t ignore_count = 2;  // Don't include unwind_backtrace_thread or DumpNativeStack.
   ssize_t frame_count = unwind_backtrace_thread(tid, frames.get(), ignore_count, MAX_DEPTH);
   if (frame_count == -1) {
     os << prefix << "(unwind_backtrace_thread failed for thread " << tid << ")\n";
@@ -1207,7 +1207,7 @@
   if (location[0] != '/') {
     LOG(FATAL) << "Expected path in location to be absolute: "<< location;
   }
-  std::string cache_file(location, 1); // skip leading slash
+  std::string cache_file(location, 1);  // skip leading slash
   if (!IsValidDexFilename(location)) {
     cache_file += "/";
     cache_file += DexFile::kClassesDex;
diff --git a/runtime/verifier/dex_gc_map.h b/runtime/verifier/dex_gc_map.h
index be7415e..2a95ba2 100644
--- a/runtime/verifier/dex_gc_map.h
+++ b/runtime/verifier/dex_gc_map.h
@@ -30,9 +30,9 @@
  */
 enum RegisterMapFormat {
   kRegMapFormatUnknown = 0,
-  kRegMapFormatNone = 1,      // Indicates no map data follows.
-  kRegMapFormatCompact8 = 2,  // Compact layout, 8-bit addresses.
-  kRegMapFormatCompact16 = 3, // Compact layout, 16-bit addresses.
+  kRegMapFormatNone = 1,       // Indicates no map data follows.
+  kRegMapFormatCompact8 = 2,   // Compact layout, 8-bit addresses.
+  kRegMapFormatCompact16 = 3,  // Compact layout, 16-bit addresses.
 };
 
 // Lightweight wrapper for Dex PC to reference bit maps.
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc
index 9948e00..1481ad9 100644
--- a/runtime/verifier/method_verifier.cc
+++ b/runtime/verifier/method_verifier.cc
@@ -318,7 +318,7 @@
 
 void MethodVerifier::FindLocksAtDexPc() {
   CHECK(monitor_enter_dex_pcs_ != NULL);
-  CHECK(code_item_ != NULL); // This only makes sense for methods with code.
+  CHECK(code_item_ != NULL);  // This only makes sense for methods with code.
 
   // Strictly speaking, we ought to be able to get away with doing a subset of the full method
   // verification. In practice, the phase we want relies on data structures set up by all the
@@ -337,7 +337,7 @@
 }
 
 mirror::Field* MethodVerifier::FindAccessedFieldAtDexPc(uint32_t dex_pc) {
-  CHECK(code_item_ != NULL); // This only makes sense for methods with code.
+  CHECK(code_item_ != NULL);  // This only makes sense for methods with code.
 
   // Strictly speaking, we ought to be able to get away with doing a subset of the full method
   // verification. In practice, the phase we want relies on data structures set up by all the
@@ -365,7 +365,7 @@
 }
 
 mirror::AbstractMethod* MethodVerifier::FindInvokedMethodAtDexPc(uint32_t dex_pc) {
-  CHECK(code_item_ != NULL); // This only makes sense for methods with code.
+  CHECK(code_item_ != NULL);  // This only makes sense for methods with code.
 
   // Strictly speaking, we ought to be able to get away with doing a subset of the full method
   // verification. In practice, the phase we want relies on data structures set up by all the
@@ -1149,7 +1149,7 @@
   size_t expected_args = code_item_->ins_size_;   /* long/double count as two */
 
   DCHECK_GE(arg_start, 0);      /* should have been verified earlier */
-  //Include the "this" pointer.
+  // Include the "this" pointer.
   size_t cur_arg = 0;
   if (!IsStatic()) {
     // If this is a constructor for a class other than java.lang.Object, mark the first ("this")
@@ -1235,7 +1235,7 @@
   bool result;
   if (IsPrimitiveDescriptor(descriptor[0]) || descriptor[0] == 'V') {
     result = descriptor[1] == '\0';
-  } else if (descriptor[0] == '[') { // single/multi-dimensional array of object/primitive
+  } else if (descriptor[0] == '[') {  // single/multi-dimensional array of object/primitive
     size_t i = 0;
     do {
       i++;
@@ -1384,7 +1384,7 @@
   // interested in is itself a monitor-enter instruction (which is a likely place
   // for a thread to be suspended).
   if (monitor_enter_dex_pcs_ != NULL && work_insn_idx_ == interesting_dex_pc_) {
-    monitor_enter_dex_pcs_->clear(); // The new work line is more accurate than the previous one.
+    monitor_enter_dex_pcs_->clear();  // The new work line is more accurate than the previous one.
     for (size_t i = 0; i < work_line_->GetMonitorEnterCount(); ++i) {
       monitor_enter_dex_pcs_->push_back(work_line_->GetMonitorEnterDexPc(i));
     }
@@ -2806,7 +2806,7 @@
   DCHECK(insn_flags_[*start_guess].IsOpcode());
 
   return true;
-} // NOLINT(readability/fn_size)
+}  // NOLINT(readability/fn_size)
 
 const RegType& MethodVerifier::ResolveClassAndCheckAccess(uint32_t class_idx) {
   const char* descriptor = dex_file_->StringByTypeIdx(class_idx);
@@ -3344,7 +3344,7 @@
   const DexFile::FieldId& field_id = dex_file_->GetFieldId(field_idx);
   // Check access to class
   const RegType& klass_type = ResolveClassAndCheckAccess(field_id.class_idx_);
-  if (klass_type.IsConflict()) { // bad class
+  if (klass_type.IsConflict()) {  // bad class
     AppendToLastFailMessage(StringPrintf(" in attempt to access static field %d (%s) in %s",
                                          field_idx, dex_file_->GetFieldName(field_id),
                                          dex_file_->GetFieldDeclaringClassDescriptor(field_id)));
diff --git a/runtime/verifier/method_verifier.h b/runtime/verifier/method_verifier.h
index fdd90cc..3f98a00 100644
--- a/runtime/verifier/method_verifier.h
+++ b/runtime/verifier/method_verifier.h
@@ -70,17 +70,17 @@
  * to be rewritten to fail at runtime.
  */
 enum VerifyError {
-  VERIFY_ERROR_BAD_CLASS_HARD, // VerifyError; hard error that skips compilation.
-  VERIFY_ERROR_BAD_CLASS_SOFT, // VerifyError; soft error that verifies again at runtime.
+  VERIFY_ERROR_BAD_CLASS_HARD,  // VerifyError; hard error that skips compilation.
+  VERIFY_ERROR_BAD_CLASS_SOFT,  // VerifyError; soft error that verifies again at runtime.
 
-  VERIFY_ERROR_NO_CLASS,       // NoClassDefFoundError.
-  VERIFY_ERROR_NO_FIELD,       // NoSuchFieldError.
-  VERIFY_ERROR_NO_METHOD,      // NoSuchMethodError.
-  VERIFY_ERROR_ACCESS_CLASS,   // IllegalAccessError.
-  VERIFY_ERROR_ACCESS_FIELD,   // IllegalAccessError.
-  VERIFY_ERROR_ACCESS_METHOD,  // IllegalAccessError.
-  VERIFY_ERROR_CLASS_CHANGE,   // IncompatibleClassChangeError.
-  VERIFY_ERROR_INSTANTIATION,  // InstantiationError.
+  VERIFY_ERROR_NO_CLASS,        // NoClassDefFoundError.
+  VERIFY_ERROR_NO_FIELD,        // NoSuchFieldError.
+  VERIFY_ERROR_NO_METHOD,       // NoSuchMethodError.
+  VERIFY_ERROR_ACCESS_CLASS,    // IllegalAccessError.
+  VERIFY_ERROR_ACCESS_FIELD,    // IllegalAccessError.
+  VERIFY_ERROR_ACCESS_METHOD,   // IllegalAccessError.
+  VERIFY_ERROR_CLASS_CHANGE,    // IncompatibleClassChangeError.
+  VERIFY_ERROR_INSTANTIATION,   // InstantiationError.
 };
 std::ostream& operator<<(std::ostream& os, const VerifyError& rhs);
 
diff --git a/runtime/verifier/reg_type_cache.cc b/runtime/verifier/reg_type_cache.cc
index 2cc3d59..2c18132 100644
--- a/runtime/verifier/reg_type_cache.cc
+++ b/runtime/verifier/reg_type_cache.cc
@@ -171,7 +171,7 @@
   if (klass != NULL) {
     // Class resolved, first look for the class in the list of entries
     // Class was not found, must create new type.
-    //To pass the verification, the type should be imprecise,
+    // To pass the verification, the type should be imprecise,
     // instantiable or an interface with the precise type set to false.
     DCHECK(!precise || klass->IsInstantiable());
     // Create a precise type if:
diff --git a/runtime/verifier/reg_type_test.cc b/runtime/verifier/reg_type_test.cc
index a24c3c9..dc320be 100644
--- a/runtime/verifier/reg_type_test.cc
+++ b/runtime/verifier/reg_type_test.cc
@@ -58,7 +58,7 @@
   const RegType& precise_const = cache.FromCat1Const(static_cast<int32_t>(val >> 32), true);
   const RegType& long_lo = cache.LongLo();
   const RegType& long_hi = cache.LongHi();
-  //Check sanity of types.
+  // Check sanity of types.
   EXPECT_TRUE(precise_lo.IsLowHalf());
   EXPECT_FALSE(precise_hi.IsLowHalf());
   EXPECT_FALSE(precise_lo.IsHighHalf());
diff --git a/runtime/zip_archive.cc b/runtime/zip_archive.cc
index 9cf7a09..2a48dc6 100644
--- a/runtime/zip_archive.cc
+++ b/runtime/zip_archive.cc
@@ -228,7 +228,7 @@
     }
   } while (zerr == Z_OK);
 
-  DCHECK_EQ(zerr, Z_STREAM_END); // other errors should've been caught
+  DCHECK_EQ(zerr, Z_STREAM_END);  // other errors should've been caught
 
   // paranoia
   if (zstream->Get().total_out != uncompressed_length) {
diff --git a/test/ReferenceMap/stack_walk_refmap_jni.cc b/test/ReferenceMap/stack_walk_refmap_jni.cc
index 885a658..3b5d80d 100644
--- a/test/ReferenceMap/stack_walk_refmap_jni.cc
+++ b/test/ReferenceMap/stack_walk_refmap_jni.cc
@@ -103,7 +103,7 @@
       //   0024: move-object v3, v2
       //   0025: goto 0013
       // Detaled dex instructions for ReferenceMap.java are at the end of this function.
-      //CHECK_REGS_CONTAIN_REFS(8, 3, 2, 1);  // v8: this, v3: y, v2: y, v1: x
+      // CHECK_REGS_CONTAIN_REFS(8, 3, 2, 1);  // v8: this, v3: y, v2: y, v1: x
       // We eliminate the non-live registers at a return, so only v3 is live:
       CHECK_REGS_CONTAIN_REFS(3);  // v3: y
 
@@ -170,71 +170,71 @@
 //      |0001: const/4 v7, #int 0 // #0
 //      |0002: const/4 v6, #int 1 // #1
 //
-//0:[Unknown],1:[Unknown],2:[Unknown],3:[Unknown],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
-//      |0003: new-array v1, v4, [Ljava/lang/Object; // type@0007
+// 0:[Unknown],1:[Unknown],2:[Unknown],3:[Unknown],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+//      |0003: new-array v1, v4, [Ljava/lang/Object;  // type@0007
 //      |0005: const/4 v2, #int 0 // #0
 
-//0:[Unknown],1:[Reference: java.lang.Object[]],2:[Zero],3:[Unknown],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
-//      |0006: new-instance v3, Ljava/lang/Object; // type@0003
+// 0:[Unknown],1:[Reference: java.lang.Object[]],2:[Zero],3:[Unknown],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+//      |0006: new-instance v3, Ljava/lang/Object;  // type@0003
 
-//[Unknown],1:[Reference: java.lang.Object[]],2:[Zero],3:[Uninitialized Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// [Unknown],1:[Reference: java.lang.Object[]],2:[Zero],3:[Uninitialized Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |0008: +invoke-object-init/range {}, Ljava/lang/Object;.<init>:()V // method@0005
 //      |000b: const/4 v4, #int 2 // #2
 
-//0:[Unknown],1:[Reference: java.lang.Object[]],2:[Zero],3:[Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Unknown],1:[Reference: java.lang.Object[]],2:[Zero],3:[Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |000c: aput-object v3, v1, v4
 
-//0:[Unknown],1:[Reference: java.lang.Object[]],2:[Zero],3:[Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Unknown],1:[Reference: java.lang.Object[]],2:[Zero],3:[Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |000e: aput-object v3, v1, v6
 
-//0:[Unknown],1:[Reference: java.lang.Object[]],2:[Zero],3:[Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Unknown],1:[Reference: java.lang.Object[]],2:[Zero],3:[Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |0010: +invoke-virtual-quick {v8, v7}, [000c] // vtable #000c
 
-//0:[Conflict],1:[Conflict],2:[Conflict],3:[Reference: java.lang.Object],4:[Conflict],5:[Conflict],6:[Conflict],7:[Conflict],8:[Conflict],
+// 0:[Conflict],1:[Conflict],2:[Conflict],3:[Reference: java.lang.Object],4:[Conflict],5:[Conflict],6:[Conflict],7:[Conflict],8:[Conflict],
 //      |0013: return-object v3
 //      |0014: move-exception v0
 
-//0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |0015: if-nez v2, 001f // +000a
 //      |0017: const/4 v4, #int 1 // #1
 
-//0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 1],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
-//      |0018: new-instance v5, Ljava/lang/Object; // type@0003
+// 0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 1],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+//      |0018: new-instance v5, Ljava/lang/Object;  // type@0003
 
-//0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 1],5:[Uninitialized Reference: java.lang.Object],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 1],5:[Uninitialized Reference: java.lang.Object],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |001a: +invoke-object-init/range {}, Ljava/lang/Object;.<init>:()V // method@0005
 
-//0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 1],5:[Reference: java.lang.Object],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 1],5:[Reference: java.lang.Object],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |001d: aput-object v5, v1, v4
 
-//0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 2],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 2],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |001f: aput-object v2, v1, v6
 
-//0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 2],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[32-bit Constant: 2],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |0021: +invoke-virtual-quick {v8, v7}, [000c] // vtable #000c
 //      |0024: move-object v3, v2
 
-//0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |0025: goto 0013 // -0012
 //      |0026: move-exception v4
 
-//0:[Conflict],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[Reference: java.lang.Throwable],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Conflict],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[Reference: java.lang.Throwable],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |0027: aput-object v2, v1, v6
 
-//0:[Conflict],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[Reference: java.lang.Throwable],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Conflict],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[Reference: java.lang.Throwable],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |0029: +invoke-virtual-quick {v8, v7}, [000c] // vtable #000c
 
-//0:[Conflict],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[Reference: java.lang.Throwable],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Conflict],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Conflict],4:[Reference: java.lang.Throwable],5:[Conflict],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |002c: throw v4
 //      |002d: move-exception v4
 //      |002e: move-object v2, v3
 
-//0:[Unknown],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Reference: java.lang.Object],4:[Reference: java.lang.Throwable],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Unknown],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Reference: java.lang.Object],4:[Reference: java.lang.Throwable],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |002f: goto 0027 // -0008
 //      |0030: move-exception v0
 //      |0031: move-object v2, v3
 
-//0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
+// 0:[Reference: java.lang.Exception],1:[Reference: java.lang.Object[]],2:[Reference: java.lang.Object],3:[Reference: java.lang.Object],4:[32-bit Constant: 2],5:[Unknown],6:[32-bit Constant: 1],7:[Zero],8:[Reference: ReferenceMap],
 //      |0032: goto 0015 // -001d
 //      catches       : 3
 //        0x0006 - 0x000b
diff --git a/test/StackWalk/stack_walk_jni.cc b/test/StackWalk/stack_walk_jni.cc
index a4db359..8f4aae6 100644
--- a/test/StackWalk/stack_walk_jni.cc
+++ b/test/StackWalk/stack_walk_jni.cc
@@ -127,4 +127,4 @@
   return count + 1;
 }
 
-} // namespace art
+}  // namespace art
