blob: c3bdc40f0d489b1e4118a05b4929d4b55bc560d8 [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:
13 explicit X86ManagedRuntimeCallingConvention(Method* method) :
14 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:
32 explicit X86JniCallingConvention(Method* method) :
33 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 }
46 virtual uint32_t CoreSpillMask() const {
47 return 0;
48 }
49 virtual uint32_t FpSpillMask() const {
50 return 0;
51 }
Ian Rogersad42e132011-09-17 20:23:33 -070052 virtual bool IsMethodRegisterClobberedPreCall();
Ian Rogers2c8f6532011-09-02 17:16:34 -070053 virtual bool IsCurrentParamInRegister();
54 virtual bool IsCurrentParamOnStack();
55 virtual ManagedRegister CurrentParamRegister();
56 virtual FrameOffset CurrentParamStackOffset();
57
58 protected:
59 virtual size_t NumberOfOutgoingStackArgs();
60
61 private:
Ian Rogersbdb03912011-09-14 00:55:44 -070062 static std::vector<ManagedRegister> callee_save_regs_;
63
Ian Rogers2c8f6532011-09-02 17:16:34 -070064 DISALLOW_COPY_AND_ASSIGN(X86JniCallingConvention);
65};
66
67} // namespace x86
68} // namespace art
69
70#endif // ART_SRC_CALLING_CONVENTION_X86_H_