comparison src/share/vm/c1/c1_LIRGenerator.cpp @ 2167:aa4b04b68652

Merge
author never
date Fri, 21 Jan 2011 13:03:13 -0800
parents e31d8c656c5b 403dc4c1d7f5
children d25d4ca69222 425688247f3d
comparison
equal deleted inserted replaced
2165:a7367756024b 2167:aa4b04b68652
1 /* 1 /*
2 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2005, 2011, Oracle and/or its affiliates. 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.
2739 __ branch(lir_cond_equal, T_INT, overflow); 2739 __ branch(lir_cond_equal, T_INT, overflow);
2740 __ branch_destination(overflow->continuation()); 2740 __ branch_destination(overflow->continuation());
2741 } 2741 }
2742 } 2742 }
2743 2743
2744 void LIRGenerator::do_RuntimeCall(RuntimeCall* x) {
2745 LIR_OprList* args = new LIR_OprList(x->number_of_arguments());
2746 BasicTypeList* signature = new BasicTypeList(x->number_of_arguments());
2747
2748 if (x->pass_thread()) {
2749 signature->append(T_ADDRESS);
2750 args->append(getThreadPointer());
2751 }
2752
2753 for (int i = 0; i < x->number_of_arguments(); i++) {
2754 Value a = x->argument_at(i);
2755 LIRItem* item = new LIRItem(a, this);
2756 item->load_item();
2757 args->append(item->result());
2758 signature->append(as_BasicType(a->type()));
2759 }
2760
2761 LIR_Opr result = call_runtime(signature, args, x->entry(), x->type(), NULL);
2762 if (x->type() == voidType) {
2763 set_no_result(x);
2764 } else {
2765 __ move(result, rlock_result(x));
2766 }
2767 }
2768
2744 LIR_Opr LIRGenerator::call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info) { 2769 LIR_Opr LIRGenerator::call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info) {
2745 LIRItemList args(1); 2770 LIRItemList args(1);
2746 LIRItem value(arg1, this); 2771 LIRItem value(arg1, this);
2747 args.append(&value); 2772 args.append(&value);
2748 BasicTypeList signature; 2773 BasicTypeList signature;