blob: b796ba0d5a1191a4c991b5b0a6b8b0426709b8de [file] [log] [blame]
Ian Rogers2c8f6532011-09-02 17:16:34 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#ifndef ART_SRC_CALLING_CONVENTION_X86_H_
4#define ART_SRC_CALLING_CONVENTION_X86_H_
5
6#include "calling_convention.h"
7
8namespace art {
9namespace x86 {
10
11class X86ManagedRuntimeCallingConvention : public ManagedRuntimeCallingConvention {
12 public:
Brian Carlstrom3320cf42011-10-04 14:58:28 -070013 explicit X86ManagedRuntimeCallingConvention(const Method* method) :
Ian Rogers2c8f6532011-09-02 17:16:34 -070014 ManagedRuntimeCallingConvention(method) {}
15 virtual ~X86ManagedRuntimeCallingConvention() {}
16 // Calling convention
17 virtual ManagedRegister ReturnRegister();
18 virtual ManagedRegister InterproceduralScratchRegister();
19 // Managed runtime calling convention
20 virtual ManagedRegister MethodRegister();
21 virtual bool IsCurrentParamInRegister();
22 virtual bool IsCurrentParamOnStack();
23 virtual ManagedRegister CurrentParamRegister();
24 virtual FrameOffset CurrentParamStackOffset();
25
26 private:
27 DISALLOW_COPY_AND_ASSIGN(X86ManagedRuntimeCallingConvention);
28};
29
30class X86JniCallingConvention : public JniCallingConvention {
31 public:
Brian Carlstrom3320cf42011-10-04 14:58:28 -070032 explicit X86JniCallingConvention(const Method* method) :
Ian Rogers2c8f6532011-09-02 17:16:34 -070033 JniCallingConvention(method) {}
34 virtual ~X86JniCallingConvention() {}
35 // Calling convention
36 virtual ManagedRegister ReturnRegister();
37 virtual ManagedRegister InterproceduralScratchRegister();
38 // JNI calling convention
39 virtual size_t FrameSize();
40 virtual size_t ReturnPcOffset();
41 virtual size_t OutArgSize();
Ian Rogersbdb03912011-09-14 00:55:44 -070042 virtual const std::vector<ManagedRegister>& CalleeSaveRegisters() const {
43 DCHECK(callee_save_regs_.empty());
44 return callee_save_regs_;
45 }
Ian Rogersdc51b792011-09-22 20:41:37 -070046 virtual ManagedRegister ReturnScratchRegister() const;
Ian Rogersbdb03912011-09-14 00:55:44 -070047 virtual uint32_t CoreSpillMask() const {
48 return 0;
49 }
50 virtual uint32_t FpSpillMask() const {
51 return 0;
52 }
Ian Rogersad42e132011-09-17 20:23:33 -070053 virtual bool IsMethodRegisterClobberedPreCall();
Ian Rogers2c8f6532011-09-02 17:16:34 -070054 virtual bool IsCurrentParamInRegister();
55 virtual bool IsCurrentParamOnStack();
56 virtual ManagedRegister CurrentParamRegister();
57 virtual FrameOffset CurrentParamStackOffset();
58
59 protected:
60 virtual size_t NumberOfOutgoingStackArgs();
61
62 private:
Ian Rogersbdb03912011-09-14 00:55:44 -070063 static std::vector<ManagedRegister> callee_save_regs_;
64
Ian Rogers2c8f6532011-09-02 17:16:34 -070065 DISALLOW_COPY_AND_ASSIGN(X86JniCallingConvention);
66};
67
68} // namespace x86
69} // namespace art
70
71#endif // ART_SRC_CALLING_CONVENTION_X86_H_