abstractCompiler.hpp revision 1472:c18cbe5936b8
1/*
2 * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25typedef void (*initializer)(void);
26
27class AbstractCompiler : public CHeapObj {
28 private:
29  bool _is_initialized; // Mark whether compiler object is initialized
30
31 protected:
32  // Used for tracking global state of compiler runtime initialization
33  enum { uninitialized, initializing, initialized };
34
35  // This method will call the initialization method "f" once (per compiler class/subclass)
36  // and do so without holding any locks
37  void initialize_runtimes(initializer f, volatile int* state);
38
39 public:
40  AbstractCompiler() : _is_initialized(false)    {}
41
42  // Name of this compiler
43  virtual const char* name() = 0;
44
45  // Missing feature tests
46  virtual bool supports_native()                 { return true; }
47  virtual bool supports_osr   ()                 { return true; }
48#if defined(TIERED) || ( !defined(COMPILER1) && !defined(COMPILER2))
49  virtual bool is_c1   ()                        { return false; }
50  virtual bool is_c2   ()                        { return false; }
51#else
52#ifdef COMPILER1
53  bool is_c1   ()                                { return true; }
54  bool is_c2   ()                                { return false; }
55#endif // COMPILER1
56#ifdef COMPILER2
57  bool is_c1   ()                                { return false; }
58  bool is_c2   ()                                { return true; }
59#endif // COMPILER2
60#endif // TIERED
61
62  // Customization
63  virtual bool needs_stubs            ()         = 0;
64
65  void mark_initialized()                        { _is_initialized = true; }
66  bool is_initialized()                          { return _is_initialized; }
67
68  virtual void initialize()                      = 0;
69
70  // Compilation entry point for methods
71  virtual void compile_method(ciEnv* env,
72                              ciMethod* target,
73                              int entry_bci) {
74    ShouldNotReachHere();
75  }
76
77
78  // Print compilation timers and statistics
79  virtual void print_timers() {
80    ShouldNotReachHere();
81  }
82};
83