Support passing arguments to invoke-static* instructions.

- Stop using the frame pointer for accessing locals.
- Stop emulating a stack when doing code generation. Instead,
  rely on dex register model, where instructions only reference
  registers.

Change-Id: Id51bd7d33ac430cb87a53c9f4b0c864eeb1006f9
diff --git a/compiler/optimizing/code_generator_arm.h b/compiler/optimizing/code_generator_arm.h
index 7a2835d..52d6b2e 100644
--- a/compiler/optimizing/code_generator_arm.h
+++ b/compiler/optimizing/code_generator_arm.h
@@ -43,12 +43,11 @@
   DISALLOW_COPY_AND_ASSIGN(LocationsBuilderARM);
 };
 
+class CodeGeneratorARM;
+
 class InstructionCodeGeneratorARM : public HGraphVisitor {
  public:
-  explicit InstructionCodeGeneratorARM(HGraph* graph, CodeGenerator* codegen)
-      : HGraphVisitor(graph),
-        assembler_(codegen->GetAssembler()),
-        codegen_(codegen) { }
+  InstructionCodeGeneratorARM(HGraph* graph, CodeGeneratorARM* codegen);
 
 #define DECLARE_VISIT_INSTRUCTION(name)     \
   virtual void Visit##name(H##name* instr);
@@ -57,12 +56,12 @@
 
 #undef DECLARE_VISIT_INSTRUCTION
 
-  Assembler* GetAssembler() const { return assembler_; }
+  ArmAssembler* GetAssembler() const { return assembler_; }
   void LoadCurrentMethod(Register reg);
 
  private:
-  Assembler* const assembler_;
-  CodeGenerator* const codegen_;
+  ArmAssembler* const assembler_;
+  CodeGeneratorARM* const codegen_;
 
   DISALLOW_COPY_AND_ASSIGN(InstructionCodeGeneratorARM);
 };
@@ -75,12 +74,10 @@
         instruction_visitor_(graph, this) { }
   virtual ~CodeGeneratorARM() { }
 
- protected:
   virtual void GenerateFrameEntry() OVERRIDE;
   virtual void GenerateFrameExit() OVERRIDE;
   virtual void Bind(Label* label) OVERRIDE;
-  virtual void Move(HInstruction* instruction, Location location) OVERRIDE;
-  virtual void Push(HInstruction* instruction, Location location) OVERRIDE;
+  virtual void Move(HInstruction* instruction, Location location, HInstruction* move_for) OVERRIDE;
 
   virtual HGraphVisitor* GetLocationBuilder() OVERRIDE {
     return &location_builder_;
@@ -90,16 +87,17 @@
     return &instruction_visitor_;
   }
 
-  virtual Assembler* GetAssembler() OVERRIDE {
+  virtual ArmAssembler* GetAssembler() OVERRIDE {
     return &assembler_;
   }
 
+  int32_t GetStackSlot(HLocal* local) const;
+
  private:
   LocationsBuilderARM location_builder_;
   InstructionCodeGeneratorARM instruction_visitor_;
   ArmAssembler assembler_;
 
-
   DISALLOW_COPY_AND_ASSIGN(CodeGeneratorARM);
 };