diff src/share/vm/jvmci/jvmciOptions.hpp @ 21562:47bebae7454f

Merge.
author Doug Simon <doug.simon@oracle.com>
date Thu, 28 May 2015 21:58:33 +0200
parents src/share/vm/graal/graalOptions.hpp@cecb4e39521c
children 59c3f921e454
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/vm/jvmci/jvmciOptions.hpp	Thu May 28 21:58:33 2015 +0200
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#ifndef SHARE_VM_JVMCI_JVMCI_OPTIONS_HPP
+#define SHARE_VM_JVMCI_JVMCI_OPTIONS_HPP
+
+#include "memory/allocation.hpp"
+#include "utilities/exceptions.hpp"
+#include "jvmci/jvmciHashtable.hpp"
+
+#define PRINT_FLAGS_ARG "PrintFlags"
+#define PRINT_FLAGS_HELP "Prints all JVMCI flags (similar to XX's PrintFlagsFinal)"
+
+enum OptionType {
+  _string,
+  _int,
+  _long,
+  _float,
+  _double,
+  _boolean
+};
+
+struct OptionDesc {
+  const char* name;
+  const char* help;
+  OptionType type;
+  const char* declaringClass;
+  const char* fieldClass;
+};
+
+inline unsigned int compute_string_hash(const char *s, int n) {
+  unsigned int val = 0;
+  while (--n >= 0) {
+    val = *s++ + 31 * val;
+  }
+  return val;
+}
+
+class OptionsTable : public JVMCIHashtable<const char*, OptionDesc> {
+protected:
+  unsigned int compute_hash(const char* key) { return compute_string_hash(key, strlen(key)); }
+  bool key_equals(const char* k1, const char* k2) { return strcmp(k1, k2) == 0; }
+  const char* get_key(OptionDesc value) { return value.name; } ;
+  const char* get_key(OptionDesc* value) { return value->name; } ;
+public:
+  OptionsTable() : JVMCIHashtable<const char*, OptionDesc>(100) {}
+  ~OptionsTable();
+  using JVMCIHashtable<const char*, OptionDesc>::get;
+  OptionDesc* get(const char* name, size_t arglen);
+  OptionDesc * fuzzy_match(const char* name, size_t length);
+
+  static OptionsTable* load_options();
+};
+
+struct OptionValue {
+  OptionDesc desc;
+  union {
+    const char* string_value;
+    jint int_value;
+    jlong long_value;
+    jfloat float_value;
+    jdouble double_value;
+    jboolean boolean_value;
+  };
+};
+
+class OptionsValueTable : public JVMCIHashtable<const char*, OptionValue> {
+  OptionsTable* _table;
+protected:
+  unsigned int compute_hash(const char* key) { return compute_string_hash(key, strlen(key)); }
+  bool key_equals(const char* k1, const char* k2) { return strcmp(k1, k2) == 0; }
+  const char* get_key(OptionValue value) { return value.desc.name; } ;
+  const char* get_key(OptionValue* value) { return value->desc.name; } ;
+public:
+  OptionsValueTable(OptionsTable* table) : _table(table), JVMCIHashtable<const char*, OptionValue>(100) {}
+  ~OptionsValueTable();
+  using JVMCIHashtable<const char*, OptionValue>::get;
+  OptionValue* get(const char* name, size_t arglen);
+  OptionsTable* options_table() { return _table; }
+};
+
+
+#endif // SHARE_VM_JVMCI_JVMCI_OPTIONS_HPP