Mercurial > hg > graal-jvmci-8
comparison src/share/vm/c1/c1_Instruction.cpp @ 1295:3cf667df43ef
6919934: JSR 292 needs to support x86 C1
Summary: This implements JSR 292 support for C1 x86.
Reviewed-by: never, jrose, kvn
author | twisti |
---|---|
date | Tue, 09 Mar 2010 20:16:19 +0100 |
parents | a61af66fc99e |
children | c18cbe5936b8 |
comparison
equal
deleted
inserted
replaced
1293:51db1e4b379d | 1295:3cf667df43ef |
---|---|
1 /* | 1 /* |
2 * Copyright 1999-2006 Sun Microsystems, Inc. All Rights Reserved. | 2 * Copyright 1999-2010 Sun Microsystems, Inc. All Rights Reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 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 | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
332 | 332 |
333 // Implementation of Invoke | 333 // Implementation of Invoke |
334 | 334 |
335 | 335 |
336 Invoke::Invoke(Bytecodes::Code code, ValueType* result_type, Value recv, Values* args, | 336 Invoke::Invoke(Bytecodes::Code code, ValueType* result_type, Value recv, Values* args, |
337 int vtable_index, ciMethod* target) | 337 int vtable_index, ciMethod* target, ValueStack* state_before) |
338 : StateSplit(result_type) | 338 : StateSplit(result_type) |
339 , _code(code) | 339 , _code(code) |
340 , _recv(recv) | 340 , _recv(recv) |
341 , _args(args) | 341 , _args(args) |
342 , _vtable_index(vtable_index) | 342 , _vtable_index(vtable_index) |
343 , _target(target) | 343 , _target(target) |
344 , _state_before(state_before) | |
344 { | 345 { |
345 set_flag(TargetIsLoadedFlag, target->is_loaded()); | 346 set_flag(TargetIsLoadedFlag, target->is_loaded()); |
346 set_flag(TargetIsFinalFlag, target_is_loaded() && target->is_final_method()); | 347 set_flag(TargetIsFinalFlag, target_is_loaded() && target->is_final_method()); |
347 set_flag(TargetIsStrictfpFlag, target_is_loaded() && target->is_strict()); | 348 set_flag(TargetIsStrictfpFlag, target_is_loaded() && target->is_strict()); |
348 | 349 |
353 | 354 |
354 // provide an initial guess of signature size. | 355 // provide an initial guess of signature size. |
355 _signature = new BasicTypeList(number_of_arguments() + (has_receiver() ? 1 : 0)); | 356 _signature = new BasicTypeList(number_of_arguments() + (has_receiver() ? 1 : 0)); |
356 if (has_receiver()) { | 357 if (has_receiver()) { |
357 _signature->append(as_BasicType(receiver()->type())); | 358 _signature->append(as_BasicType(receiver()->type())); |
359 } else if (is_invokedynamic()) { | |
360 // Add the synthetic MethodHandle argument to the signature. | |
361 _signature->append(T_OBJECT); | |
358 } | 362 } |
359 for (int i = 0; i < number_of_arguments(); i++) { | 363 for (int i = 0; i < number_of_arguments(); i++) { |
360 ValueType* t = argument_at(i)->type(); | 364 ValueType* t = argument_at(i)->type(); |
361 BasicType bt = as_BasicType(t); | 365 BasicType bt = as_BasicType(t); |
362 _signature->append(bt); | 366 _signature->append(bt); |
363 } | 367 } |
368 } | |
369 | |
370 | |
371 void Invoke::state_values_do(void f(Value*)) { | |
372 StateSplit::state_values_do(f); | |
373 if (state_before() != NULL) state_before()->values_do(f); | |
374 if (state() != NULL) state()->values_do(f); | |
364 } | 375 } |
365 | 376 |
366 | 377 |
367 // Implementation of Contant | 378 // Implementation of Contant |
368 intx Constant::hash() const { | 379 intx Constant::hash() const { |