--- a/hotspot/src/share/vm/c1/c1_Instruction.hpp Mon Mar 08 04:46:30 2010 -0800
+++ b/hotspot/src/share/vm/c1/c1_Instruction.hpp Tue Mar 09 20:16:19 2010 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1999-2010 Sun Microsystems, Inc. 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
@@ -1134,17 +1134,18 @@
LEAF(Invoke, StateSplit)
private:
- Bytecodes::Code _code;
- Value _recv;
- Values* _args;
- BasicTypeList* _signature;
- int _vtable_index;
- ciMethod* _target;
+ Bytecodes::Code _code;
+ Value _recv;
+ Values* _args;
+ BasicTypeList* _signature;
+ int _vtable_index;
+ ciMethod* _target;
+ ValueStack* _state_before; // Required for deoptimization.
public:
// creation
Invoke(Bytecodes::Code code, ValueType* result_type, Value recv, Values* args,
- int vtable_index, ciMethod* target);
+ int vtable_index, ciMethod* target, ValueStack* state_before);
// accessors
Bytecodes::Code code() const { return _code; }
@@ -1155,6 +1156,7 @@
int vtable_index() const { return _vtable_index; }
BasicTypeList* signature() const { return _signature; }
ciMethod* target() const { return _target; }
+ ValueStack* state_before() const { return _state_before; }
// Returns false if target is not loaded
bool target_is_final() const { return check_flag(TargetIsFinalFlag); }
@@ -1162,6 +1164,9 @@
// Returns false if target is not loaded
bool target_is_strictfp() const { return check_flag(TargetIsStrictfpFlag); }
+ // JSR 292 support
+ bool is_invokedynamic() const { return code() == Bytecodes::_invokedynamic; }
+
// generic
virtual bool can_trap() const { return true; }
virtual void input_values_do(void f(Value*)) {
@@ -1169,6 +1174,7 @@
if (has_receiver()) f(&_recv);
for (int i = 0; i < _args->length(); i++) f(_args->adr_at(i));
}
+ virtual void state_values_do(void f(Value*));
};