First cut: C1 Class.isInstance intrinsic (original) (raw)

diff -r 4d8787136e08 src/share/vm/c1/c1_Canonicalizer.cpp

--- a/src/share/vm/c1/c1_Canonicalizer.cpp Fri May 25 11:39:13 2012 -0700

+++ b/src/share/vm/c1/c1_Canonicalizer.cpp Wed May 30 03:21:56 2012 +0800

@@ -451,6 +451,28 @@

}

break;

}

}

}

diff -r 4d8787136e08 src/share/vm/c1/c1_GraphBuilder.cpp

--- a/src/share/vm/c1/c1_GraphBuilder.cpp Fri May 25 11:39:13 2012 -0700

+++ b/src/share/vm/c1/c1_GraphBuilder.cpp Wed May 30 03:21:56 2012 +0800

@@ -3170,6 +3170,7 @@

break;

case vmIntrinsics::_getClass :

if (!InlineClassNatives) return false;

preserves_state = true;

break;

diff -r 4d8787136e08 src/share/vm/c1/c1_LIRGenerator.cpp

--- a/src/share/vm/c1/c1_LIRGenerator.cpp Fri May 25 11:39:13 2012 -0700

+++ b/src/share/vm/c1/c1_LIRGenerator.cpp Wed May 30 03:21:56 2012 +0800

@@ -1242,6 +1242,36 @@

NULL /* info */);

}

+// Example: clazz.isInstance(object)

+void LIRGenerator::do_isInstance(Intrinsic* x) {

+}

// Example: object.getClass ()

void LIRGenerator::do_getClass(Intrinsic* x) {

assert(x->number_of_arguments() == 1, "wrong type");

@@ -2951,6 +2981,7 @@

break;

case vmIntrinsics::_Object_init: do_RegisterFinalizer(x); break;

case vmIntrinsics::_getClass: do_getClass(x); break;

case vmIntrinsics::_currentThread: do_currentThread(x); break;

diff -r 4d8787136e08 src/share/vm/c1/c1_LIRGenerator.hpp

--- a/src/share/vm/c1/c1_LIRGenerator.hpp Fri May 25 11:39:13 2012 -0700

+++ b/src/share/vm/c1/c1_LIRGenerator.hpp Wed May 30 03:21:56 2012 +0800

@@ -238,6 +238,7 @@

LIR_Opr getThreadPointer();

void do_RegisterFinalizer(Intrinsic* x);

void do_getClass(Intrinsic* x);

void do_currentThread(Intrinsic* x);

void do_MathIntrinsic(Intrinsic* x);

diff -r 4d8787136e08 src/share/vm/c1/c1_Runtime1.cpp

--- a/src/share/vm/c1/c1_Runtime1.cpp Fri May 25 11:39:13 2012 -0700

+++ b/src/share/vm/c1/c1_Runtime1.cpp Wed May 30 03:21:56 2012 +0800

@@ -294,6 +294,7 @@

FUNCTION_CASE(entry, SharedRuntime::lrem);

FUNCTION_CASE(entry, SharedRuntime::dtrace_method_entry);

FUNCTION_CASE(entry, SharedRuntime::dtrace_method_exit);

FUNCTION_CASE(entry, trace_block_entry);

#ifdef TRACE_HAVE_INTRINSICS

FUNCTION_CASE(entry, TRACE_TIME_METHOD);

@@ -1270,6 +1271,19 @@

JRT_END

+JRT_LEAF(int, Runtime1::is_instance_of(oopDesc* mirror, oopDesc* obj))

+JRT_END

#ifndef PRODUCT

void Runtime1::print_statistics() {

tty->print_cr("C1 Runtime statistics:");

diff -r 4d8787136e08 src/share/vm/c1/c1_Runtime1.hpp

--- a/src/share/vm/c1/c1_Runtime1.hpp Fri May 25 11:39:13 2012 -0700

+++ b/src/share/vm/c1/c1_Runtime1.hpp Wed May 30 03:21:56 2012 +0800

@@ -186,6 +186,7 @@

static int arraycopy(oopDesc* src, int src_pos, oopDesc* dst, int dst_pos, int length);

static void primitive_arraycopy(HeapWord* src, HeapWord* dst, int length);

static void oop_arraycopy(HeapWord* src, HeapWord* dst, int length);

static void print_statistics() PRODUCT_RETURN;

};